* test(#3172): failing-first suite for the stated failing-direction probe
Pins the <fails_when> pairing walk, placeholder denylist, MISSING sentinel
exemption, degraded-read contract, CLI arm and the plan-authoring contract text.
RED by construction: the module exports it requires do not exist yet.
Executed on the remote runner.
* feat(#3172): require a stated failing direction for every automated acceptance command
Every runnable <automated> command now carries a <fails_when> sibling naming
what output constitutes failure. A command with no expressible failure mode is
not an acceptance test: it reads as rigour and is not falsifiable.
- verify-command-grounding gains a failing-direction probe sharing the existing
<automated> grammar, MISSING sentinel and walk guard rather than copying them
- gsd-tools check verify-failure-directions <N> backs it; plan-phase dispatches
it and hands the JSON to gsd-plan-checker check 8f
- Dimension 8 detail extracted to references to stay under the agent size cap
Verified on the remote runner.
* fix(#3172): close four review findings in the failing-direction probe
- MISSING_SENTINEL_RE matched an env-var assignment prefix (MISSING=1 cmd), so
a real command was exempted from the new blocking gate. Tightened the SHARED
constant rather than adding a second copy.
- Both token regexes scanned to EOF on unclosed openers (O(n^2), 1562ms at 40k).
Bodies are now non-crossing; 1ms, byte-identical on well-formed input. The
pre-existing AUTOMATED_BLOCK_RE carried the same defect and is fixed here too.
- probePhaseFailingDirections reported status 'ok' when one plan was unreadable,
conflating 'could not look' with 'nothing to report'.
- Extracted the phase-resolution block both check arms had copied verbatim.
Also corrects a docs/AGENTS.md dimension list stale since #2401.
Verified on the remote runner.
* fix(#3172): project the planner rule onto the spawn contract, settle emitted bookkeeping
The remote runner refuted the planner-side edit. agents/gsd-planner.md is frozen
under a 49152-LF-char cap asserted by four suites and sat at 49,146 — six chars
of headroom — so the +537 of authoring rule blew it. #3297/#3645 already settled
where such a rule goes: the planner spawn contract in plan-phase.md, beside
<tracked_source_paths>. The agent file is reverted to origin/next verbatim.
- plan-phase.md gains <failing_direction_contract>; tests row 30 now asserts the
contract there and row 30b guards the freeze in both directions
- plan-phase.md growth acknowledged by APPENDING to the 3409 fragment, per the
precedent that two ack sources may never name the same path
- install-tree fixtures regenerated for the three new reference files
Verified on the remote runner.
* chore(#3172): backfill PR number into the changeset fragment
pr:0 -> pr:3825 now that the PR exists.
---------
Co-authored-by: sim <sim@local>