fix(dispatcher): ignore narrative branch phrases - #2171
Conversation
There was a problem hiding this comment.
Changes requested: The behavior change is sound, but the contract-required exact incident regression fixture is missing.
Warning
Changes requested · head 2bf29aa · 1 finding: 1 minor
| Severity | Finding | Where |
|---|---|---|
| minor | F1 Contract — test scenario missing: exact 20:05Z input-event fixture | src/core/ship/preflight.test.ts:413 |
Full review
F1 — The contract requires the exact text from door run 524cc39e’s input event, but this fixture reconstructs only the sentence published in issue #2161. The omitted prefix and surrounding prose are load-bearing for the anchored, directive-aware parser, so this does not prove the production ask binds no ref. Replace it with the complete recorded input event.
2bf29aa to
f932b83
Compare
There was a problem hiding this comment.
Changes requested: The expanded regression still cannot establish the contract-required exact 20:05Z input-event fixture.
Warning
Changes requested · head f932b83 · 1 finding: 1 minor
| Severity | Finding | Where |
|---|---|---|
| minor | F1 Contract — test scenario missing: exact 20:05Z input-event fixture | src/core/ship/preflight.test.ts:413 |
Full review
F1 (minor, high confidence): The expanded text is a stronger reconstruction, but the disposition confirms it cannot establish byte-exact parity with run 524cc39e. The contract explicitly requires that input event as the fixture, so this remains unresolved until someone with access supplies or verifies the exact text.
|
Plan runner — U1 held ⏸️ Changes requested but held after 2 review rounds: #2171 — every finding of review round 2 is human-gated, a receipt only a person can produce: F1 (minor) — Contract — test scenario missing: exact 20:05Z input-event fixture. No fix round was opened: a coding child cannot produce the receipt. Severity addressed: minor and above (set by org). Next step: produce the receipt each finding names and post it on the pull request. To continue, re-issue |
|
The exact fixture for the human-gated F1 (the 20:05Z input text of door run The refusal it produced (seq 2 of the same run): |
Co-Authored-By: coreplane-switchboard[bot] <318072483+coreplane-switchboard[bot]@users.noreply.github.com>
f932b83 to
34a66de
Compare
There was a problem hiding this comment.
LGTM: The typed-ref fix is correct; one retired refusal-code artifact remains as non-blocking cleanup.
Note
Approved · head 34a66de · 1 finding: 1 nit
| Severity | Finding | Where |
|---|---|---|
| nit | F1 Remove the retired base-missing refusal code | src/core/refusal.ts:93 |
Full review
F1 (nit): ship_preflight_base_missing no longer has a producer, but remains in the refusal-code table and is still listed as “proven elsewhere.” Remove both stale entries so the closed inventory accurately reflects the nine current preflight refusals.
Base refs now come only from typed branch forms, pull requests, or tree URLs; narrative prose cannot select a ship base. Missing refs continue on the repository default instead of refusing the request.
Why: #2161 showed the pre-model resolver reading
withfrom prose, contrary to record 0057. This closes the gap between typed target binding and ship preflight.Where to look
branch:token while leaving task prose outside the ref slot. ⚠ An overly narrow grammar could ignore a legitimate typed branch.branch:token rather than prose phrasing.Feedback wanted: Judge whether the typed head-clause delimiter and the byte-exact recorded request fully pin the narrative-ref regression.
Risk: Old prose forms such as “on main” no longer select a branch; generated child clauses and
branch:remain supported. Missing refs use the repository default. Revert the commit to restore fail-closed behavior.Verified: 707 focused tests, root TypeScript, formatting, hygiene, spec bindings, and title gate passed on the rebased head; pushed CI is pending.
Decisions (4)
Validation (7 criteria)
npx vitest runon the four changed test files → 4 files and 707 tests passed after rebasing.NODE_OPTIONS=--max-old-space-size=6144 npx tsc --noEmit -p tsconfig.json→ passed with no output.npx prettier --checkon all 11 format-supported changed files → all matched;.allowhas no Prettier parser.npm run hygiene:check→ passed with 37 listed hits and 139 allowed lines.npm run specs:check→ 51 specs and 5,666 proof references checked; every Code/Tests path exists.npm run check:pr-title -- "fix(dispatcher): ignore narrative branch phrases"→ passed.For agents
Rebased onto origin/main at 4bf464f immediately before the final gate run and force-pushed coherent head 34a66de. F1 is fixed from #2171 (comment); the test fixture matches its fenced input byte-for-byte and retains both no-ref-scan and default-branch assertions.
scripts/public-hygiene.allowis intentionally outside Prettier's parser set and is validated byhygiene:check.Requested by @justinhelmer in slack:C0BRRHKFLCB
🤖 Generated with Claude Code