mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-09 02:08:19 +01:00
fix: keep destructive options pending in the unattended AUQ fallback (GSTA-91)
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
abab11078c
commit
dd81e4c8e8
49 files changed
+152
-139
No files matched your search
+4
-4
@@ -6,18 +6,18 @@
|
||||
|
||||
### Fixed
|
||||
- **Claims Need Evidence kernel** (`scripts/resolvers/preamble/generate-evidence-directive.ts`): the evidence-kind bullet ended with "Reuse rules: Step 16." That step exists only in /ship, so in every other skill the pointer led nowhere. It's gone. /ship's Step 16 still states its own reuse rule ("Reuse a check when its inputs match"), and every tier's DONE line still asks you to name reuse.
|
||||
- **AskUserQuestion Tool resolution** (`generate-ask-user-format.ts`): "per its Unattended session block" read like a section of the skill, but the block is runtime output. Item 1 now names the `unattended-session` block that gstack-skill-start prints, which is the id on its `GSTACK_INSTRUCTION_BEGIN` line. The failure fallback's `unattended` branch dropped its repeat of that pointer, because item 1 already states the rule.
|
||||
- **AskUserQuestion Tool resolution** (`generate-ask-user-format.ts`): "per its Unattended session block" read like a section of the skill, but the block is runtime output. Item 1 now names the `unattended-session` block that gstack-skill-start prints, which is the id on its `GSTACK_INSTRUCTION_BEGIN` line. The failure fallback's `unattended` branch dropped its repeat of that pointer and now lists destructive or irreversible options as pending gate items itself, as the printed block does; the pointer had been its only route to that carve-out.
|
||||
- **AskUserQuestion fallback hook** (`hosts/claude/hooks/auq-error-fallback-hook.ts`): its unattended directive ended with "GSTACK_RESULT status=gate_pending (Unattended session block).", the same section-style pointer to runtime output. The parenthetical is gone.
|
||||
- **Reality rows, eng/ceo branch** (`scripts/resolvers/plan-reality.ts`): the Completion Summary row and plan-eng-review's checklist ask for the `PLAN_REALITY` line, but the operative block never said where that line comes from. It now says `gstack-plan-reality check` prints it.
|
||||
|
||||
### Tests
|
||||
- `test/honesty-kernel.test.ts` no longer requires the Step 16 pointer. It now rejects any `Step <n>` cross-reference in the kernel, which every skill renders.
|
||||
- `test/resolver-ask-user-format.test.ts` checks across files that the unattended pointer names `unattended-session` and that gstack-skill-start really emits a block with that id, so renaming either side fails the test. `test/auq-error-fallback-hook.test.ts` asserts the hook's unattended directive no longer says "Unattended session block".
|
||||
- `test/resolver-ask-user-format.test.ts` checks across files that the unattended pointer names `unattended-session` and that gstack-skill-start really emits a block with that id, so renaming either side fails the test. It also checks that the failure fallback's `unattended` branch names destructive or irreversible options as pending. `test/auq-error-fallback-hook.test.ts` asserts the hook's unattended directive no longer says "Unattended session block".
|
||||
- `test/plan-reality.test.ts` checks that the reality-rows block, generated for each of the eng, ceo and devex phases, says its `gstack-plan-reality check` line prints `PLAN_REALITY`.
|
||||
- Every changed SKILL.md shrank, so 89 pins in `test/fixtures/skill-md-size-allowlist.json` were lowered to their new exact sizes (a ratchet: nothing grew). The /ship goldens were regenerated.
|
||||
- 89 pins in `test/fixtures/skill-md-size-allowlist.json` were moved to their new exact sizes. 78 went down by 3 characters. The 11 non-Claude plan-eng-review pins went up by 21: the unattended failure-fallback branch regains the destructive/irreversible carve-out that the removed pointer used to supply (about 21 chars). The /ship goldens were regenerated.
|
||||
|
||||
### Gate integrity
|
||||
- No threshold, rubric, trial count, case kind or judge prompt changed. The size pins only went down.
|
||||
- No threshold, rubric, trial count, case kind or judge prompt changed. 78 size pins went down; 11 went up by 21 characters for the restored carve-out above.
|
||||
|
||||
## [1.91.230.0] - 2026-10-26
|
||||
|
||||
|
||||
+1
-1
@@ -89,7 +89,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -74,7 +74,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -73,7 +73,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → follow Tool resolution item 1: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -74,7 +74,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -77,7 +77,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on \`SESSION_KIND\` (echoed by the preamble; empty/absent ⇒ \`interactive\`):
|
||||
- \`spawned\` → ${ctx.skillName === 'plan-eng-review' ? 'follow Tool resolution item 1' : 'defer to the **Spawned session** block'}: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- \`unattended\` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- \`unattended\` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- \`headless\` → \`BLOCKED — AskUserQuestion unavailable\`; stop and wait (no human can answer).
|
||||
- \`interactive\` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -78,7 +78,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -74,7 +74,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -77,7 +77,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -61,7 +61,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ Tell these apart:
|
||||
- If it was present and **errored** (not absent), retry the SAME call **once** — only if no answer could have surfaced (a missing-result error can arrive after the user saw the question; retrying would double-prompt, so if it may have reached them, treat it as pending and don't retry).
|
||||
- Then branch on `SESSION_KIND` (echoed by the preamble; empty/absent ⇒ `interactive`):
|
||||
- `spawned` → defer to the **Spawned session** block: auto-choose the recommended option. Never prose, never BLOCKED.
|
||||
- `unattended` → auto-choose the recommended option; a consent, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `unattended` → auto-choose the recommended option; a consent, destructive or irreversible option, unrecommended question or approval gate becomes a pending gate item.
|
||||
- `headless` → `BLOCKED — AskUserQuestion unavailable`; stop and wait (no human can answer).
|
||||
- `interactive` → **prose fallback** (below).
|
||||
|
||||
|
||||
+89
-89
@@ -2,94 +2,94 @@
|
||||
"_comment": "Generated SKILL.md files over the limit, pinned at their exact character count (#3199). test/skill-md-size-guard.test.ts fails when a pinned skill grows past its pin or shrinks below it: lower the pin when a skill shrinks and delete it once the skill is within the limit. Raising a pin is an owner decision. The shared-preamble hoist that would retire most pins is deferred: owner Garry, revisit 2026-11-15.",
|
||||
"limit": 100000,
|
||||
"pins": {
|
||||
"agy/gstack-autoplan": 130465,
|
||||
"agy/gstack-design-consultation": 108145,
|
||||
"agy/gstack-design-review": 143489,
|
||||
"agy/gstack-land-and-deploy": 117683,
|
||||
"agy/gstack-plan-design-review": 139974,
|
||||
"agy/gstack-plan-devex-review": 135721,
|
||||
"agy/gstack-plan-eng-review": 152567,
|
||||
"agy/gstack-review": 124143,
|
||||
"claude/design-review": 136492,
|
||||
"codex/gstack-autoplan": 130589,
|
||||
"codex/gstack-design-consultation": 109413,
|
||||
"codex/gstack-design-review": 144989,
|
||||
"codex/gstack-land-and-deploy": 122233,
|
||||
"codex/gstack-office-hours": 102269,
|
||||
"codex/gstack-plan-design-review": 142427,
|
||||
"codex/gstack-plan-devex-review": 138610,
|
||||
"codex/gstack-plan-eng-review": 155113,
|
||||
"codex/gstack-review": 125047,
|
||||
"copilot/gstack-autoplan": 131598,
|
||||
"copilot/gstack-codex": 100196,
|
||||
"copilot/gstack-design-consultation": 109497,
|
||||
"copilot/gstack-design-review": 144794,
|
||||
"copilot/gstack-land-and-deploy": 118938,
|
||||
"copilot/gstack-office-hours": 100425,
|
||||
"copilot/gstack-plan-design-review": 140845,
|
||||
"copilot/gstack-plan-devex-review": 136873,
|
||||
"copilot/gstack-plan-eng-review": 153292,
|
||||
"copilot/gstack-review": 125414,
|
||||
"cursor/gstack-autoplan": 129239,
|
||||
"cursor/gstack-design-consultation": 107183,
|
||||
"cursor/gstack-design-review": 142468,
|
||||
"cursor/gstack-land-and-deploy": 116606,
|
||||
"cursor/gstack-plan-design-review": 138929,
|
||||
"cursor/gstack-plan-devex-review": 134552,
|
||||
"cursor/gstack-plan-eng-review": 151421,
|
||||
"cursor/gstack-review": 140675,
|
||||
"factory/gstack-autoplan": 131523,
|
||||
"factory/gstack-codex": 100616,
|
||||
"factory/gstack-design-consultation": 108631,
|
||||
"factory/gstack-design-review": 144258,
|
||||
"factory/gstack-land-and-deploy": 120778,
|
||||
"factory/gstack-office-hours": 101304,
|
||||
"factory/gstack-plan-design-review": 141710,
|
||||
"factory/gstack-plan-devex-review": 137921,
|
||||
"factory/gstack-plan-eng-review": 154535,
|
||||
"factory/gstack-review": 144454,
|
||||
"gbrain/gstack-autoplan": 129776,
|
||||
"gbrain/gstack-design-review": 132803,
|
||||
"gbrain/gstack-land-and-deploy": 117128,
|
||||
"gbrain/gstack-plan-design-review": 127816,
|
||||
"gbrain/gstack-plan-devex-review": 115090,
|
||||
"gbrain/gstack-plan-eng-review": 134153,
|
||||
"hermes/gstack-autoplan": 129866,
|
||||
"hermes/gstack-design-review": 132910,
|
||||
"hermes/gstack-land-and-deploy": 117230,
|
||||
"hermes/gstack-plan-design-review": 127925,
|
||||
"hermes/gstack-plan-devex-review": 115176,
|
||||
"hermes/gstack-plan-eng-review": 134238,
|
||||
"kiro/gstack-autoplan": 129001,
|
||||
"kiro/gstack-design-consultation": 107025,
|
||||
"kiro/gstack-design-review": 142282,
|
||||
"kiro/gstack-land-and-deploy": 116494,
|
||||
"kiro/gstack-plan-design-review": 138769,
|
||||
"kiro/gstack-plan-devex-review": 134392,
|
||||
"kiro/gstack-plan-eng-review": 151271,
|
||||
"kiro/gstack-review": 140487,
|
||||
"openclaw/gstack-autoplan": 129481,
|
||||
"openclaw/gstack-design-review": 131608,
|
||||
"openclaw/gstack-land-and-deploy": 116718,
|
||||
"openclaw/gstack-plan-design-review": 126667,
|
||||
"openclaw/gstack-plan-devex-review": 113929,
|
||||
"openclaw/gstack-plan-eng-review": 132550,
|
||||
"opencode/gstack-autoplan": 131601,
|
||||
"opencode/gstack-design-consultation": 109318,
|
||||
"opencode/gstack-design-review": 144666,
|
||||
"opencode/gstack-land-and-deploy": 118723,
|
||||
"opencode/gstack-office-hours": 100259,
|
||||
"opencode/gstack-plan-design-review": 140699,
|
||||
"opencode/gstack-plan-devex-review": 136773,
|
||||
"opencode/gstack-plan-eng-review": 153173,
|
||||
"opencode/gstack-review": 142910,
|
||||
"slate/gstack-autoplan": 129120,
|
||||
"slate/gstack-design-consultation": 107104,
|
||||
"slate/gstack-design-review": 142375,
|
||||
"slate/gstack-land-and-deploy": 116550,
|
||||
"slate/gstack-plan-design-review": 138849,
|
||||
"slate/gstack-plan-devex-review": 134472,
|
||||
"slate/gstack-plan-eng-review": 151346,
|
||||
"slate/gstack-review": 140581
|
||||
"agy/gstack-autoplan": 130501,
|
||||
"agy/gstack-design-consultation": 108181,
|
||||
"agy/gstack-design-review": 143525,
|
||||
"agy/gstack-land-and-deploy": 117719,
|
||||
"agy/gstack-plan-design-review": 140010,
|
||||
"agy/gstack-plan-devex-review": 135757,
|
||||
"agy/gstack-plan-eng-review": 152603,
|
||||
"agy/gstack-review": 124179,
|
||||
"claude/design-review": 136528,
|
||||
"codex/gstack-autoplan": 130625,
|
||||
"codex/gstack-design-consultation": 109449,
|
||||
"codex/gstack-design-review": 145025,
|
||||
"codex/gstack-land-and-deploy": 122269,
|
||||
"codex/gstack-office-hours": 102305,
|
||||
"codex/gstack-plan-design-review": 142463,
|
||||
"codex/gstack-plan-devex-review": 138646,
|
||||
"codex/gstack-plan-eng-review": 155149,
|
||||
"codex/gstack-review": 125083,
|
||||
"copilot/gstack-autoplan": 131634,
|
||||
"copilot/gstack-codex": 100232,
|
||||
"copilot/gstack-design-consultation": 109533,
|
||||
"copilot/gstack-design-review": 144830,
|
||||
"copilot/gstack-land-and-deploy": 118974,
|
||||
"copilot/gstack-office-hours": 100461,
|
||||
"copilot/gstack-plan-design-review": 140881,
|
||||
"copilot/gstack-plan-devex-review": 136909,
|
||||
"copilot/gstack-plan-eng-review": 153328,
|
||||
"copilot/gstack-review": 125450,
|
||||
"cursor/gstack-autoplan": 129275,
|
||||
"cursor/gstack-design-consultation": 107219,
|
||||
"cursor/gstack-design-review": 142504,
|
||||
"cursor/gstack-land-and-deploy": 116642,
|
||||
"cursor/gstack-plan-design-review": 138965,
|
||||
"cursor/gstack-plan-devex-review": 134588,
|
||||
"cursor/gstack-plan-eng-review": 151457,
|
||||
"cursor/gstack-review": 140711,
|
||||
"factory/gstack-autoplan": 131559,
|
||||
"factory/gstack-codex": 100652,
|
||||
"factory/gstack-design-consultation": 108667,
|
||||
"factory/gstack-design-review": 144294,
|
||||
"factory/gstack-land-and-deploy": 120814,
|
||||
"factory/gstack-office-hours": 101340,
|
||||
"factory/gstack-plan-design-review": 141746,
|
||||
"factory/gstack-plan-devex-review": 137957,
|
||||
"factory/gstack-plan-eng-review": 154571,
|
||||
"factory/gstack-review": 144490,
|
||||
"gbrain/gstack-autoplan": 129812,
|
||||
"gbrain/gstack-design-review": 132839,
|
||||
"gbrain/gstack-land-and-deploy": 117164,
|
||||
"gbrain/gstack-plan-design-review": 127852,
|
||||
"gbrain/gstack-plan-devex-review": 115126,
|
||||
"gbrain/gstack-plan-eng-review": 134189,
|
||||
"hermes/gstack-autoplan": 129902,
|
||||
"hermes/gstack-design-review": 132946,
|
||||
"hermes/gstack-land-and-deploy": 117266,
|
||||
"hermes/gstack-plan-design-review": 127961,
|
||||
"hermes/gstack-plan-devex-review": 115212,
|
||||
"hermes/gstack-plan-eng-review": 134274,
|
||||
"kiro/gstack-autoplan": 129037,
|
||||
"kiro/gstack-design-consultation": 107061,
|
||||
"kiro/gstack-design-review": 142318,
|
||||
"kiro/gstack-land-and-deploy": 116530,
|
||||
"kiro/gstack-plan-design-review": 138805,
|
||||
"kiro/gstack-plan-devex-review": 134428,
|
||||
"kiro/gstack-plan-eng-review": 151307,
|
||||
"kiro/gstack-review": 140523,
|
||||
"openclaw/gstack-autoplan": 129517,
|
||||
"openclaw/gstack-design-review": 131644,
|
||||
"openclaw/gstack-land-and-deploy": 116754,
|
||||
"openclaw/gstack-plan-design-review": 126703,
|
||||
"openclaw/gstack-plan-devex-review": 113965,
|
||||
"openclaw/gstack-plan-eng-review": 132586,
|
||||
"opencode/gstack-autoplan": 131637,
|
||||
"opencode/gstack-design-consultation": 109354,
|
||||
"opencode/gstack-design-review": 144702,
|
||||
"opencode/gstack-land-and-deploy": 118759,
|
||||
"opencode/gstack-office-hours": 100295,
|
||||
"opencode/gstack-plan-design-review": 140735,
|
||||
"opencode/gstack-plan-devex-review": 136809,
|
||||
"opencode/gstack-plan-eng-review": 153209,
|
||||
"opencode/gstack-review": 142946,
|
||||
"slate/gstack-autoplan": 129156,
|
||||
"slate/gstack-design-consultation": 107140,
|
||||
"slate/gstack-design-review": 142411,
|
||||
"slate/gstack-land-and-deploy": 116586,
|
||||
"slate/gstack-plan-design-review": 138885,
|
||||
"slate/gstack-plan-devex-review": 134508,
|
||||
"slate/gstack-plan-eng-review": 151382,
|
||||
"slate/gstack-review": 140617
|
||||
}
|
||||
}
|
||||
@@ -208,6 +208,19 @@ describe('generateAskUserFormat — runtime-failure prose fallback', () => {
|
||||
expect(out).toMatch(/empty\/absent[\s\S]{0,40}interactive/i);
|
||||
});
|
||||
|
||||
test('unattended branch keeps destructive or irreversible options pending, like the printed block', () => {
|
||||
for (const skillName of ['test-skill', 'plan-eng-review']) {
|
||||
const fallback = generateAskUserFormat({ ...makeCtx(), skillName })
|
||||
.split('### When AskUserQuestion is unavailable or a call fails')[1] ?? '';
|
||||
const unattended = fallback.split('\n').find(line => line.trim().startsWith('- `unattended`')) ?? '';
|
||||
expect(unattended, `${skillName}: failure fallback must branch on unattended`).not.toBe('');
|
||||
expectMentions(unattended, [
|
||||
['destructive', 'irreversible', 'pending gate item'],
|
||||
['consent', 'unrecommended question', 'approval gate', 'pending gate item'],
|
||||
], `${skillName} unattended fallback branch`);
|
||||
}
|
||||
});
|
||||
|
||||
// The mandatory triad the user explicitly required for the plain-text output.
|
||||
test('prose fallback mandates the triad: issue ELI10', () => {
|
||||
expect(out).toContain('ELI10');
|
||||
|
||||
Reference in new issue
Block a user