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 c39a60e
Browse filesBrowse the repository at this point in the historyBrowse files
pm(tooling): the contract-review tier is fable — revert the opus constant and the retired-word list
A temporary lack of authorization on ONE session is not a tier retirement.
The 2026-09-21 change moved CONTRACT_REVIEW_TIER to the opus id and filled
RETIRED_TIER_WORDS on an HTTP 429 quota refusal; the maintainer's ruling of
2026-09-22 reverses it. The constant reads the fable id again, no tier word
is retired, and the derived ceiling, the guard and every rendering that reads
the constant are kept as they are — they were never the defect.
The retired-spelling guard's non-vacuity pin cannot hold on an empty list, so
it moves off the live list onto a MUTATED copy: a list naming a word the
ladder really prints must red.
Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
Co-authored-by: Claude <noreply@anthropic.com>
* Place a card's file surface against the mandatory globs. Pure over its
@@ -25476,9 +25501,22 @@ function selfTest() {
25476
25501
t('the ladder prints a ceiling DERIVED from the contract-review constant, so the two cannot drift apart', ladderLine.includes(`ceiling ${tierWordOf(CONTRACT_REVIEW_TIER)})`), ladderLine || 'no ladder line was rendered at all');
25477
25502
t("…in the ladder's own vocabulary — the constant's FAMILY word, so a parseable id NEVER reaches the ladder verbatim", /^claude-[a-z]+-/.test(CONTRACT_REVIEW_TIER) && TIER_CEILING === tierWordOf(CONTRACT_REVIEW_TIER) && !ladderLine.includes(CONTRACT_REVIEW_TIER), ladderLine);
25478
25503
t('tierWordOf reads the family out of an id, and hands an unreadable one back VERBATIM rather than guessing a word', tierWordOf('claude-example-9-9') === 'example' && tierWordOf('an-unfamiliar-shape') === 'an-unfamiliar-shape' && tierWordOf(null) === '');
25479
-
t(`⛔ no RETIRED tier word survives in any live RULE — ladder, exits, clause-② note and suspicion line all read the constant (dirty: ${ladderRenderings.map((l, i) => RETIRED_TIER_WORDS.filter((w) => l.toLowerCase().includes(w)).map((w) => `${i}/${w}`).join(' ')).filter(Boolean).join(' ') || 'none'})`, ladderRenderings.every((l) => RETIRED_TIER_WORDS.every((w) => !l.toLowerCase().includes(w))));
25504
+
// The guard is driven through ONE function so the live reading and its
25505
+
// control run the same search. RETIRED_TIER_WORDS is EMPTY — no ruling has
25506
+
// retired a tier word — so the live case below clears every rendering for
25507
+
// free, and a case asserting only that green would pass just as happily on a
25508
+
// search that had stopped matching anything. The non-vacuity case therefore
25509
+
// moved off the LIVE list, where it could only ever count entries, and onto
25510
+
// a MUTATED copy: feed the guard a word the ladder demonstrably prints and
25511
+
// it must red. That is the invariant an empty list has to keep provable — a
25512
+
// word still in the ladder can never be in this list.
t(`⛔ no RETIRED tier word survives in any live RULE — ladder, exits, clause-② note and suspicion line all read the constant (dirty: ${retiredWordHits(RETIRED_TIER_WORDS).join(' ') || 'none'})`, retiredWordHits(RETIRED_TIER_WORDS).length === 0);
25480
25516
t('…and the guard is not reading an empty string — every rendering it clears still carries its own rule text', ladderRenderings.every((l) => l.includes('Model tier')) && ladderRenderings.some((l) => l.includes('Exits,')));
25481
-
t('the retired-spelling guard is not vacuous — it names at least one word, and none of them is a tier still in the ladder', RETIRED_TIER_WORDS.length > 0 && !RETIRED_TIER_WORDS.includes(TIER_FLOOR) && !RETIRED_TIER_WORDS.includes(TIER_DEFAULT) && !RETIRED_TIER_WORDS.includes(TIER_CEILING));
25517
+
t(`no tier word is RETIRED today — the list is empty and frozen, which is what "a temporary lack of authorization is not a retirement" looks like in data (holds: ${[...RETIRED_TIER_WORDS].join(', ') || 'none'})`, Array.isArray(RETIRED_TIER_WORDS) && RETIRED_TIER_WORDS.length === 0 && Object.isFrozen(RETIRED_TIER_WORDS));
25518
+
t(`…and the guard is NOT vacuous, proved on a MUTATED copy: a list naming the ladder's own ceiling word (${TIER_CEILING}) REDS, so the green above is the empty list and not a broken search (mutated hits: ${retiredWordHits([TIER_CEILING]).join(' ') || 'NONE — the control never fired'})`, retiredWordHits([TIER_CEILING]).length > 0 && retiredWordHits(['a-word-no-rendering-prints']).length === 0);
25519
+
t('…and the invariant that copy stands for: no tier word still in the ladder may ever enter the live list', [TIER_FLOOR, TIER_DEFAULT, TIER_CEILING].every((w) => !RETIRED_TIER_WORDS.includes(w)));
25482
25520
// A sibling case further down pins the constant's CURRENT value to exactly
25483
25521
// one site under these roots. What that case cannot see is a RETIRED id left
25484
25522
// behind — it is not the current value, so nothing compares it to anything,
0 commit comments