Repository navigation
Description
Verdict
/squad plan validate does not currently have teeth. A neatly formatted bad plan passes clean.
What it checks today
workflows/squad.md, ## skill: squad-plan-validate (~L861) verifies structural well-formedness only:
- TBD / TODO markers
- Missing traceability
- Epic with no stories
- Dependency cycles
- Task sized > L
- Unresolved decisions
- Missing metadata
- Triage orphaning
- Milestone gaps
Every one of those is a shape check. None of them ask whether the plan is a good idea.
What it should do
The design insight: validate is a GATE; Fact Checker's Devil's Advocate mode is a METHOD. Validate should invoke the DA pass and then emit its own verdict.
The DA pass contributes:
- Steelman of the opposition — strongest version of the counter-argument
- Load-bearing assumptions — what would invalidate the plan if untrue
- 30-day pre-mortem — concrete failure scenario
- Alternative approach sketch — so the chosen direction is a chosen direction
- Explicit risk acceptance — remaining risks named and consciously accepted
Validate then emits its own PASS / FAIL.
Ordering dependency
The program path currently runs plan validate after plan accept scope. It must run before both accepts, so the complete package gets challenged before anything is locked. See the long-path repair issue — these two should be sequenced together.
Where the code lives
workflows/squad.md, ## skill: squad-plan-validate (~L861).
## heading inside a ## skill: block — it closes implicitly at the next H2 and everything up to the next skill marker is silently discarded (~29 KB was lost this way once, and it still compiled clean). Skills use #####. Run npx vitest run test/gh-aw-quality.test.ts before pushing.
Origin
User directive, 2026-08-19 — "validate must truly beat the whole thing up and hold strong opinions." Recorded in .squad/decisions/inbox/coordinator-validate-must-have-teeth.md.
Activity
bradygaster commentedon Aug 20, 2026
Flight sequencing note — revised 2026-08-20.
Wave: 4.
Depends on:
Blocks: nothing else in this stream directly.
Safe to run in parallel with: only non-
workflows/squad.mdwork once dependencies are merged, such as #1770 and #1760. Do not parallelize with #1758.Why / evidence: current validation text is
workflows/squad.mdlines 869-916. #1758 must also edit the acceptance/validation order around lines 918-960, so those hunks are adjacent/overlapping in the same skill path. #1756 provides the upstream artifact contract at lines 577-609. Runnpx vitest run test/gh-aw-quality.test.tsbecause lines 857-865 catch accidental inline-skill byte loss.bradygaster commentedon Aug 20, 2026
Triage note (2026-08-20): May be reclassified from enhancement → bug pending Experiment 3 (2026-08-21).
\plan validate\ has never been run in a real E2E scenario — it sits in the never-exercised bucket alongside \�ctivate. We cannot currently distinguish between 'validate runs but produces lenient output' and 'validate effectively no-ops.'
If tomorrow's E2E series shows that \plan validate\ currently no-ops (runs but makes no pass/fail decision and lets any plan through), then 'give validate teeth' is not a feature request — it is a bug report: the feature was shipped incomplete.
Decision rule: Re-triage this issue after the 2026-08-21 E2E run produces a validate verdict.
This is connected to #1756's scope boundary: the structural contract (#1756) is pre-E2E because it targets the artifact shape the model emits. The judgment ('a well-formatted bad plan FAILS') is this issue, and it requires evidence from a run where validate was actually exercised before we can specify what failure looks like.
Fix long-path planning lifecycle defects + guard empty dispatch probe…
bradygaster commentedon Aug 23, 2026
Cross-scope triage note from #1801
Recommendation: do not absorb #1801 into #1757. Re-scope #1757 to the later adversarial-quality pass once #1801's deterministic false-green repair lands.
Why: #1801 is a concrete bug in validation templates/artifact checking — literal pre-filled verdicts, omitted rows, and fail-open parsing. #1757 remains the broader
plan validatefeature: challenge assumptions, alternatives, and plan quality. Mixing them would let a subjective adversarial pass mask the concrete gate that must fail against today's recorded bad artifact.fix: address adversarial validation review
test: tolerate markdown line wrapping
fix(workflows): give plan validation adversarial teeth (github#1870)