You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The routing decision is evaluated **exactly once** at Implementation phase entry. Mid-phase changes to env vars or the backlog entry do NOT re-trigger evaluation.
222
222
223
223
> **🔒 Mode invariance (NON-NEGOTIABLE — applies to ALL Implementation Agents):**
224
-
> The decision to invoke `nested-claude-spawn.js` is based EXCLUSIVELY on the two conditions in the decision matrix below:
225
-
> (a) `impl_model == "secondary"` in the backlog entry, AND
224
+
> The decision to invoke `nested-claude-spawn.js` is based EXCLUSIVELY on the conditions in the decision matrix below (per DEC-72, amends E94 D-0):
225
+
> (a) `impl_model != "primary"` in the backlog entry (i.e., `secondary` OR absent), AND
226
226
> (b) all three `GAAI_IMPL_*` environment variables are present and non-empty.
227
227
>
228
228
> **No other factor influences this decision.** In particular:
@@ -232,7 +232,7 @@ The routing decision is evaluated **exactly once** at Implementation phase entry
232
232
>
233
233
>**If you (the agent) find yourself reasoning "I'll use primary because X":** STOP. X is invalid unless X is literally one of the two matrix conditions. Route to nested wrapper per the matrix.
234
234
>
235
-
>**Rationale:** Epic E94 D-0 (non-regression) is preserved by the `impl_model` tag itself — stories without the tag use primary. Agents second-guessing the matrix defeat the entire Epic's purpose (quota savings) and produce misleading `runtime-routing.jsonl` logs (e.g., `secondary_but_env_missing` logged when env was actually present).
235
+
>**Rationale:** Epic E94 D-0's OSS non-regression intent is preserved by condition (b) — users without `GAAI_IMPL_*` env vars configured see zero behavioral change. DEC-72 (2026-04-20) amends the post-E94S10 default: when env vars are configured, secondary is used by default (tag absent → secondary). `impl_model: primary` is the explicit opt-out for stories that must run on primary (complex reasoning, frontend/UX judgment, security-critical). Agents second-guessing the matrix defeat the entire Epic's purpose (quota savings) and produce misleading `runtime-routing.jsonl` logs.
236
236
237
237
**Decision matrix:**
238
238
@@ -246,16 +246,30 @@ read impl_model from backlog entry # canonical runtime source per E94S02 AC6
# Note: the 'impl_model is absent' path is now consolidated into the 'secondary OR absent'
330
+
# branch above per DEC-72. The 'primary' branch at the top of this matrix handles the
331
+
# explicit opt-out. There is no separate 'absent → primary' path anymore — absence means
332
+
# "follow env-driven default" which is secondary when env is configured, primary otherwise.
322
333
```
323
334
324
-
The routing helper is implemented in `.gaai/core/adapters/claude-code/impl-routing.js` (`resolveImplRouting(implModelTag)`) — testable without invoking a real subprocess.
335
+
The routing helper is implemented in`.gaai/core/adapters/claude-code/impl-routing.js` (`resolveImplRouting(implModelTag)`) — testable without invoking a real subprocess. Default routing semantics per DEC-72 (2026-04-20).
325
336
326
337
**Compliance:** no specific provider names appear in this workflow file. Only generic terms: "secondary provider", "nested subprocess", "user-configured endpoint" (AC13).
0 commit comments