Uh oh!
There was an error while loading. Please reload this page.
fix(devx): mark the ledger-expanding remedy maintainer-only in check-test-typecheck (#8538) - #8549
Merged
qq9340100 merged 1 commit intoAug 13, 2026
Conversation
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
qq9340100
marked this pull request as ready for review
August 13, 2026 19:17
This was referenced Aug 13, 2026
Uh oh!
There was an error while loading. Please reload this page.
qq9340100
deleted the
claude/issue-8538-test-typecheck-authority-marker
branch
August 13, 2026 19:35
This was referenced Aug 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#8538
Sixth and final instance of the #8435 ratchet-remedy authority convention — the one the #8519 census could not see, because it swept
scripts/*.mjsand this file is one of the two.mtsfiles in that directory.check-test-typecheck.mts's unledgered-file verdict ended withOnly with a reason: add the file to test-typecheck-debt.json.— the ledger-expanding path offered as the plain second of two things to do. The rule that this path is a maintainer's call was written only in the file's own prose (LEDGER_COMMENT's "EXACT ratchet", the GREW verdict's "the ledger only ratchets down"), where a maintainer reading the script sees it and the author who trips the gate never does.What changed
Only author-facing remedy text and self-test assertions.
evaluate()'s detection logic is untouched — same problems, same order, same inputs.⛔ MAINTAINER-ONLYtoken, identical to the five gates already carrying it;RATCHET_EXPANSION_OFFERdetector keyed on the act ("add the file to …"), not on the ledger's name;ratchetRemedyCarriesAuthority()predicate;The marked message reuses this file's own two statements of the rule rather than inventing a third — one rule stated twice in two voices is two rules by the next reading.
Only the ledger-EXPANDING verdict is marked
The SHRANK ("re-record it"), GRADUATED ("delete its entry") and GREW verdicts are the ratchet tightening — squarely the author's job, and marking them would teach the opposite of the rule. GRADUATED names the ledger file while telling the author to delete an entry, which is exactly why the detector keys on the act and not the name. That is a self-test assertion, not a footnote: mutating the detector to key on
test-typecheck-debt.jsonalone fails with one named failure pointing at GRADUATED.Verification
RATCHET_AUTHORITY_MARKERis interpolated into exactly one message; the other three are byte-unchanged.Fail path, planted violation (a deliberate type error in an unledgered
packages/clienttest file, dependency closure built). Old script vs new, same tree:Identical exit code and flagged-subject set; only the remedy prose differs. Green-path runs of both versions are also identical.
Mutation tests (direction predicted in writing first, each caught by exactly one named assertion):
return trueThe path-gap control exists because a sibling gate's first-cut regex spelled its gap to exclude the dot, so every offer naming its registry by path silently stopped matching.
Gates:
pnpm --filter @objectstack/spec check:test-typecheckand--filter @objectstack/clientboth green (self-test wired into both, runs ahead of the real check).check:type-check-coveragegreen — this file contributes 29 of the root entry's 80 errors and that entry is recorded exactly with no margin, so the additions deliberately introduce no newconsole/processreferences and the count is still 29.check:nul-bytesgreen, control-char self-scan clean, eslint clean.Scope
One file. No gate weakened, no verdict changed, no ledger raised. The five gates covered by PR #8517 / PR #8539 are not touched. The farm-wide detector and the
⛔ SHRINK-ONLY/⛔ MAINTAINER-ONLYtoken reconciliation are #8540's and are deliberately left alone here. No changeset: rootscripts/dev tooling releases nothing —skip-changesetapplied.Generated by Claude Code