chore(devx): measure the #6635 partial-retirement-annotation signal over the repo - #7190
Merged
Merged
Conversation
…ver the repo (#6635) The maintainer ruling of 2026-08-09 made this a measurement card, not a gate card: run the proposed signal once over the whole repo and report the numbers that select a decision branch. No gate is wired here and no existing gate changes. Adds the one-shot instrument and the audit record. The instrument is deliberately named `measure-*` rather than `check-*`/`gen-*`, so the #4203 script ledger has nothing to classify (verified: `check:generated --reconcile-only` is green and does not list it). Headline numbers, at `origin/main` bf32d4a: - 197 hits across 65 files, all tiers, no exclusions - positive control reproduces #6630 mechanically at the pre-fix commit (flagged) and is clear on current main (fixed) -- red before, green after - 34 hits hand-verified: 0 true positives, 34 false positives - best-case rule (tier A+B, record surfaces path-excluded): 20 hits / 16 files, all 20 hand-verified false positives - five structurally legitimate partial-citation classes, the ledgers and retirement pin tests foremost The decision the numbers feed is the maintainer's, per the ruling. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KJATVrh6V2ysutYUJigh3B
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
os-help
marked this pull request as ready for review
August 10, 2026 02:37
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 free
to 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.
Part of #6635 — this is the measurement the card was re-scoped to, not the gate. Merging it does not close the card: the decision branch is the maintainer's, per the ruling.
What this is, and what it deliberately is not
The maintainer ruling of 2026-08-09 changed what this card is, verbatim:
So: no gate is wired here, and no existing gate's behaviour changes. Two files, both new — a one-shot measurement instrument and its audit record. The instrument is committed only so the numbers are reproducible rather than asserted.
It is named
measure-*rather thancheck-*/gen-*on purpose, so the #4203 script ledger has nothing to classify. Verified rather than assumed:pnpm --filter @objectstack/spec check:generated --reconcile-onlyis green and does not list it.The numbers
Measured at
origin/mainbf32d4a0ec1cebca4f636b26c040ad6903c54287.maintakes roughly 18 merges a day, so the numbers belong to that sha.Positive control first — the scanner is proven to see before any number is believed. The specimen fixes landed before this measurement, so the control was rebuilt from history:
packages/spec/src/shared/retry-policy.zod.ts4e271b2c6(the #6630 fix commit's parent)ETLPipeline, cited at L30 (#6414), bare at L81 and L133bf32d4a0e(origin/main)That is #6630 reproduced mechanically, red before the fix and green after it.
Total hits: 197, across 65 files (all tiers, no exclusions). Stable under window choice: 184 hits at plus/minus 3 lines, 179 at plus/minus 6.
True/false-positive split: 34 hits hand-verified, 0 true positives, 34 false positives. Every hit in the residual set below was verified exhaustively (20/20), plus 14 more drawn one-per-class to cover each structural class.
Exemption count a warning-tier rule would need on day one. Building the most generous structural exclusions into the rule itself — drop the bare-key tier entirely, path-exclude every record surface:
All 20 were hand-verified and all 20 are false positives — every warning the best-case rule emits on the current tree would need an exemption, against zero true positives.
The part the ruling said would flip the decision
The ruling's decision rule turns on whether a structurally legitimate partial-citation class exists. Five were found; in each, annotating every mention would make the prose worse:
RETIRED_DEFS_BY_MAJOR's entries are bare string literals —'ui/I18nObject',— that can never carry an issue number, and the D2/D3 evidence strings enumerate the retired names by design.system/http-server.zod.tsL198-215 is the model): a header carrying the issue number, then a table naming one retired shape per row.Two further inputs that price the gate
retry-policy.zod.tsstill teachesETLPipeline.retryas a live surface in six places — including theretryDelayMstombstone an upgrading author actually reads #6630 landed in two parts; the signal catches part 1 (PR fix(spec): stop teaching the retired ETL layer as a live retry surface (#6630, part 1) #6701) and structurally cannot catch part 2 (PR fix(spec): stop teaching the retired ETL layer as a live retry surface in flow.zod.ts (#6630, part 2) #6753) — one mention, phrased as prose rather than as the symbol name. It is also blind to the pure-miss case where no mention was annotated at all, which is the more common shape of a missed retirement.transformtrio's header reads "The first entries since build-schemas.ts 检查 (b) 用叶名匹配 conversion surface —— 无关簇的.type就能让一个 tombstone 冒充「已登记迁移」 #4659 built this table (shared/mapping.zod.ts 的 javascript 变换 describe 推荐 dialect="js",而 ExpressionDialect 只有 cel/cron/template —— 照着写会被拒 #5552)" — build-schemas.ts 检查 (b) 用叶名匹配 conversion surface —— 无关簇的.type就能让一个 tombstone 冒充「已登记迁移」 #4659 built the table, shared/mapping.zod.ts 的 javascript 变换 describe 推荐 dialect="js",而 ExpressionDialect 只有 cel/cron/template —— 照着写会被拒 #5552 is the retirement), and it cannot see repo boundaries (objectui#3829/objectui#3818are indistinguishable from local numbers once the prefix is dropped). The mapping in the instrument is hand-curated and stated explicitly so it can be audited.Full detail, including the per-class breakdown and reproduction commands:
docs/audits/2026-08-partial-retirement-annotation-signal.md.Verification
node scripts/check-nul-bytes.mjs— OK, 6606 text files, no raw ASCII control bytes.pnpm --filter @objectstack/spec check:generated --reconcile-only— green, 20check:+ 14gen:scripts all classified; the new script is correctly not among them.No changeset: the PR adds a repo-internal measurement script and an audit record, and releases nothing. Labelled
skip-changeset.Generated by Claude Code