Skip to content

chore(devx): measure the #6635 partial-retirement-annotation signal over the repo - #7190

Merged
os-help merged 1 commit into
mainfrom
claude/issue-6635-partial-annotation-measurement
Aug 10, 2026
Merged

chore(devx): measure the #6635 partial-retirement-annotation signal over the repo#7190
os-help merged 1 commit into
mainfrom
claude/issue-6635-partial-annotation-measurement

Conversation

@os-help

@os-help os-help commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

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:

Maintainer ruling (2026-08-09): measurement first — no gate is built yet. pm:queue, as a measurement card.
The dispatchable deliverable is the #5757-pattern measurement, not the gate: run the proposed signal (a retired symbol whose retirement issue number appears in SOME but not ALL of its mentions within one file) over the whole repo once and report — total hits, true-positive/false-positive split (spot-verified), and the exemption count a warning-tier rule would need on day one. Decision rule recorded now: FP burden controllable (exemption count in the low tens or fewer, no structurally-legitimate partial-citation class) ⇒ the gate lands at warning tier in a follow-up PR; FP burden structural ⇒ this card closes not planned with the numbers as the record. ⛔ The measuring dev does not decide — a needs_decision report with numbers is the success outcome, exactly as #5757's was.

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 than check-* / gen-* on purpose, so the #4203 script ledger has nothing to classify. Verified rather than assumed: pnpm --filter @objectstack/spec check:generated --reconcile-only is green and does not list it.

The numbers

Measured at origin/main bf32d4a0ec1cebca4f636b26c040ad6903c54287. main takes 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:

tree packages/spec/src/shared/retry-policy.zod.ts
4e271b2c6 (the #6630 fix commit's parent) FLAGGEDETLPipeline, cited at L30 (#6414), bare at L81 and L133
bf32d4a0e (origin/main) clear — 0 hits

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:

rule shape hits files
all tiers, no exclusions 197 65
tier A+B only 141 51
tier A+B, record surfaces excluded 20 16
tier A only, record surfaces excluded 8 5

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:

  1. The retirement ledgers themselves (62 hits / 2 files). 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.
  2. Retirement pin tests. A removal's pin test asserts the name is gone; the name must appear bare, once per assertion. The repo requires this genre of every retirement.
  3. Migration guides with a "Before" specimen — the retired shape must be spelled out un-annotated or the guide teaches nothing.
  4. Changelogs, changesets and generated projections (74 hits / 34 files), historical by construction.
  5. Annotated header plus enumeration stanza — the repo's own correct pattern (system/http-server.zod.ts L198-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

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, 20 check: + 14 gen: scripts all classified; the new script is correctly not among them.
  • Positive control and window-sensitivity runs as tabled above.

No changeset: the PR adds a repo-internal measurement script and an audit record, and releases nothing. Labelled skip-changeset.


Generated by Claude Code

…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
@vercel

vercel Bot commented Aug 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 10, 2026 2:15am

Request Review

@os-help os-help added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 10, 2026 — with Claude
@github-actions github-actions Bot added size/l documentation Improvements or additions to documentation labels Aug 10, 2026
@os-help
os-help marked this pull request as ready for review August 10, 2026 02:37
@os-help
os-help added this pull request to the merge queue Aug 10, 2026
Merged via the queue into main with commit 3566e55 Aug 10, 2026
25 checks passed
@os-help
os-help deleted the claude/issue-6635-partial-annotation-measurement branch August 10, 2026 02:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/l skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants