You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 5e1f09b
Browse filesBrowse the repository at this point in the historyBrowse files
fix(pm): dispatch-gates names the LANES that owe the clause-② review, not a seat
The clause-② note and the suspect tail printed by `--tier` (quoted into
claim comments) said "spec seat; default-tier build" and "in the spec seat" —
the 2026-09-10 seat key, never re-keyed by the 09-16 tier PR. They now say
what the charter says: the review is owed in the spec and skills lanes,
in-seat at tier or by the at-tier subagent, and a contract-surface hit
outside those lanes is spec-lane work that moves there. The docblock above
MANDATORY_TIER_GLOBS carries the same rule; four self-test pins hold both
renderings to the lane key and refuse the two retired spellings.
Claude-Session: https://claude.ai/code/session_01BTeBejoPUvRHN8WdAJC6oF
Co-authored-by: Claude <noreply@anthropic.com>
t('the no-mandate rendering claims no mandate', !plainLines.includes('MANDATORY'));
24579
24591
t('the no-mandate rendering names the floor and the default, so the judgment call has its band', plainLines.includes(TIER_FLOOR) && plainLines.includes(TIER_DEFAULT));
24580
24592
t('BOTH renderings state that clause ② is out of reach of paths — a no-mandate line is not a clearance', plainLines.includes('Clause ②') && mandLines.includes('Clause ②'));
24593
+
// The lane key (#18536): the maintainer's lane rule restated — the review is
24594
+
// owed in the spec and skills lanes, in-seat at tier or by the at-tier
24595
+
// subagent, and in no other lane; the 2026-09-10 SEAT key and the
24596
+
// 2026-09-16 TIER key are both retired spellings and must not come back.
24597
+
t('BOTH renderings key the clause-② review by LANE — the spec and skills lanes, in-seat at tier or by the at-tier subagent', [plainLines, mandLines].every((l) => l.includes('spec and skills lanes') && l.includes('at-tier subagent')));
24598
+
t('…and neither spells a retired key — no "spec seat" (2026-09-10) and no default-tier review or self-review (2026-09-16)', [plainLines, mandLines].every((l) => !l.includes('spec seat') && !l.includes('default-tier review') && !l.includes('self-review')));
24599
+
t('…and both say a clause-② hit outside those lanes is spec-lane work that MOVES there — lane routing, never a review demand on the lane that found it', [plainLines, mandLines].every((l) => l.includes('spec-lane work and moves there')));
24581
24600
t('the no-mandate rendering says how many globs it checked, so an empty table cannot read as a clearance', plainLines.includes(`${MANDATORY_TIER_GLOBS.length} declared glob`));
24582
24601
// Refusals: a contradiction is not printed, and an ambiguity is not guessed.
24583
24602
let tierRefused = false;
@@ -24645,6 +24664,7 @@ function selfTest() {
24645
24664
t('the suspicion rendering sends the seat to the card CONTENT for the tier call', suspectRendered.includes('judge the tier from the card CONTENT'));
24646
24665
t('the suspicion rendering routes EVERY dispatch through the enqueue gate on the ACTUAL diff', suspectRendered.includes('whichever tier is dispatched') && suspectRendered.includes('enqueue gate'));
24647
24666
t('the suspicion rendering names the contract-review tier from its single-source constant', suspectRendered.includes(CONTRACT_REVIEW_TIER));
24667
+
t('the suspicion rendering keys the review by LANE — "in the spec lane", the work being the spec lane\'s whichever seat found it — never by seat (#18536)', suspectRendered.includes('in the spec lane') && suspectRendered.includes('whichever seat found it') && !suspectRendered.includes('spec seat'));
t('an ordinary non-contract surface raises no suspicion', noSuspicion.suspects.length === 0);
24650
24670
t('no suspicion ⇒ no suspect line — absence and clearance must not share a spelling with a hit', !tierLines(noSuspicion).join('\n').includes('SUSPECT'));
0 commit comments