mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-01 14:34:42 +01:00
plan-gates: per-item confirmation states its reason, not an incident ID (s03 M4)
'VAS-449' meant nothing to the model and reached the user in the >5-items warning. The rule now gives the reason (a blanket confirmation lets the user click through without opening any file / lets unchecked items pass as verified). The per-item confirmation rule is unchanged. W7a pin: test/ship-plan-completion-invariants.test.ts:122 toMatch(/VAS-449/) removed (cosmetic incident-ID pin); the per-item rule and blanket-confirm ban checks on the same test stay. expected red until the regeneration commit
This commit is contained in:
1 parent
5a2be1a795
commit
a4c649f282
2 files changed
+2
-3
No files matched your search
@@ -368,7 +368,7 @@ The parent evaluates the completion checklist in priority order, including after
|
||||
|
||||
2. **Any UNVERIFIABLE items** (silent gaps — the diff cannot prove them either way). Only fires after NOT DONE is resolved or absent.
|
||||
|
||||
**Per-item confirmation is mandatory.** Do NOT use a single AskUserQuestion to blanket-confirm all UNVERIFIABLE items. Blanket confirmation is the failure mode that surfaced in VAS-449 (user clicks A without opening any file). Instead:
|
||||
**Per-item confirmation is mandatory.** Do NOT use a single AskUserQuestion to blanket-confirm all UNVERIFIABLE items: a blanket confirmation lets the user click through without opening any file. Instead:
|
||||
|
||||
- Loop through UNVERIFIABLE items one at a time.
|
||||
- For each item, use AskUserQuestion with the item's *specific* manual check (e.g., "Confirm: does \`~/Development/domain-hq/docs/dashboard.md\` exist?", not "Have you checked all items?").
|
||||
@@ -382,7 +382,7 @@ The parent evaluates the completion checklist in priority order, including after
|
||||
- Any N: STOP and report that item as NOT DONE. Resume only after its required work is verified; no second deferral choice.
|
||||
- All Y or D: Continue. Embed \`## Plan Completion — Manual Verifications\` section in PR body listing each Y'd item with the user's free-text evidence and each D'd item with "intentionally dropped".
|
||||
|
||||
**Cap.** If there are more than 5 UNVERIFIABLE items, present them as a numbered list first and ask whether the user wants to (1) confirm each individually, (2) stop and reduce scope, or (3) explicitly accept blanket-confirmation with the warning that this is the VAS-449 failure shape. Default and recommended option is (1).
|
||||
**Cap.** If there are more than 5 UNVERIFIABLE items, present them as a numbered list first and ask whether the user wants to (1) confirm each individually, (2) stop and reduce scope, or (3) explicitly accept blanket-confirmation with the warning that it lets unchecked items pass as verified. Default and recommended option is (1).
|
||||
|
||||
3. **Only PARTIAL items (no NOT DONE, no UNVERIFIABLE):** Continue with a note in the PR body. Not blocking.
|
||||
|
||||
|
||||
@@ -119,7 +119,6 @@ describe('ship/SKILL.md — Plan Completion gate invariants (VAS-449 remediation
|
||||
test('Per-item UNVERIFIABLE confirmation: blanket-confirm is forbidden', () => {
|
||||
expect(skill).toContain('**Per-item confirmation is mandatory.**');
|
||||
expect(skill).toMatch(/Do NOT use a single AskUserQuestion to blanket-confirm/);
|
||||
expect(skill).toMatch(/VAS-449/);
|
||||
});
|
||||
|
||||
test('Subagent failure: fail-closed, not silent fail-open', () => {
|
||||
|
||||
Reference in new issue
Block a user