Skip to content

fix(ship): tighten Plan Completion gate #1302

Open
vaskockorovski wants to merge 1 commit intogarrytan:mainfrom
vaskockorovski:ship-plan-completion-vas449-remediation
Open

fix(ship): tighten Plan Completion gate #1302
vaskockorovski wants to merge 1 commit intogarrytan:mainfrom
vaskockorovski:ship-plan-completion-vas449-remediation

Conversation

@vaskockorovski
Copy link
Copy Markdown

@vaskockorovski vaskockorovski commented May 3, 2026

Summary

A real failure mode surfaced during a recent autoplan sprint: a PLAN.md acceptance criterion (a CROSS-REPO file deliverable) shipped silently. The Plan Completion subagent existed (added in v1.4.1.0) but the gate let it through.

Four structural fixes to ship/SKILL.md Step 8:

  1. Path concreteness rule — items naming a concrete filesystem path MUST be classified DONE/NOT DONE via [ -f <path> ], never UNVERIFIABLE. UNVERIFIABLE is now reserved for genuinely abstract checks (DNS, external auth allowlists) or unreachable sibling roots.
  2. Validator detection — CONTENT-SHAPE items now scan the target repo's package.json for validate-* / lint-wiki / check-docs scripts and run them before falling back to UNVERIFIABLE. A passing validator promotes the item to DONE; a failing one demotes to NOT DONE.
  3. Per-item UNVERIFIABLE confirmation — replaces the prior blanket "I've checked each one" gate with a per-item Y/N/D loop. The blanket-confirm path is the exact failure shape that surfaced in the sprint (user clicks A without opening any file). Cap at 5+ items presents an explicit numbered list with a warning option.
  4. Subagent fail-closed — replaces "Never block /ship on subagent failure" with explicit AskUserQuestion if both the subagent and inline fallback fail. Default is stop. Silent fail-open was the second-order failure mode.

Test plan

  • bun test test/ship-plan-completion-invariants.test.ts — 5 assertions, ~60ms, no LLM dependency. Locks each of the four invariants against accidental rollback.

🤖 Generated with Claude Code


View in Codesmith
Need help on this PR? Tag @codesmith with what you need.

  • Let Codesmith autofix CI failures and bot reviews

VAS-446 shipped with a PLAN.md acceptance criterion (domain-hq has
/docs/dashboard.md) silently skipped. /ship's Plan Completion subagent
existed at ship time (added in v1.4.1.0) but the gate let the failure
through. Four structural fixes:

1. Path concreteness rule: items naming a concrete filesystem path MUST
   be classified DONE/NOT DONE via [ -f <path> ], never UNVERIFIABLE.
2. Validator detection: CONTENT-SHAPE items scan target repo's
   package.json for validate-* scripts and run them before falling back
   to UNVERIFIABLE.
3. Per-item UNVERIFIABLE confirmation: replaces blanket "I've checked
   each one" with per-item Y/N/D loop. The blanket-confirm path is the
   exact failure VAS-449 surfaced.
4. Subagent fail-closed: if Plan Completion subagent + inline fallback
   both fail, surface explicit AskUserQuestion instead of silent pass.
   Replaces the prior "Never block /ship on subagent failure" fail-open.

Locked in by test/ship-plan-completion-invariants.test.ts (5 assertions,
no LLM dependency, ~60ms).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vaskockorovski vaskockorovski changed the title fix(ship): tighten Plan Completion gate (VAS-449 remediation) fix(ship): tighten Plan Completion gate May 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant