Skip to content

docs: per-item drift has nothing to attribute, and §48/§50 are why - #20

Merged
ojassug merged 1 commit into
mainfrom
docs-per-item-drift-disposition
Aug 12, 2026
Merged

docs: per-item drift has nothing to attribute, and §48/§50 are why#20
ojassug merged 1 commit into
mainfrom
docs-per-item-drift-disposition

Conversation

@ojassug

@ojassug ojassug commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

Measured before implementing, and the precondition fails. Recording it rather than building it — the disposition BM25 and MMR got.

Every corpus fallback, classified by its actual fallbackReason

Frozen corpus, 288 files, file route, target 0.3:

cause count already attributable?
CONSTRAINT_DIRECTIVE_LOST 29 yes — per item, §47
SEMANTIC_DRIFT_UNMEASURABLE 87 yesunwitnessedItemIds, §33
input not valid UTF-8 1 correct, unrelated (§35)
SEMANTIC_DRIFT_EXCEEDED 0 — the only code per-item drift would help

On multi-item bundles — src/core (33 items), src/stages, src/gateway, src/adapters, pip's 45 Python files, this repo's 62 TypeScript sources — S_k measures 0.0024–0.0056 against a 0.40 threshold, and does not move at ratios 0.3, 0.5, 0.7 or 0.9. Roughly two orders of magnitude under the gate.

The item was not wrong when written — it was closed by other work

§47 measured drift at 0.4122 on an engine that elided everything it could. §48 gave the stage a token ceiling to stop at, and §50 made the unit it removes a statement rather than a whole function body. Together they cut symbol loss far below the gate.

An open item is a claim about the current build, and it expires like any other. This one expired two releases ago and stayed on the list because nobody re-measured it.

The mechanism is real, and reachable only by asking for it

At --max-drift 0.001 — 400× stricter than default — it fires and behaves exactly as §47 predicted: drift names no item, hasUnattributableError is set, repair is declined, and 7 items that would otherwise have been reverted were not. The bundle fell back whole, and the reported reason was the constraint failure the repair would have fixed.

So the design note is correct about what would happen. What is absent is any default-configured input on which it happens. Built as specced it is ~1,000 lines with no observable effect — the H5 condition.

§51 records what would make it live again, and says to re-measure first: it is one corpus run.

Where the slot went instead

docs/audit-remediation-status.md §7 now points at making the constraint gate finer. That is where the fallbacks actually are — 29 of 29 code-bucket fallbacks — and §50 separately measured the same gate as the reason the better sub-region coverage setting costs two working files. It is the per-item axis with something on it.

628 tests green; documentation-only change.

🤖 Generated with Claude Code

Measured before implementing, and the precondition fails. Recording it rather than
building it, the same disposition BM25 and MMR got.

Every fallback in the frozen corpus classified by its actual fallbackReason, file route,
288 files:

  CONSTRAINT_DIRECTIVE_LOST      29   already attributable per item (§47)
  SEMANTIC_DRIFT_UNMEASURABLE    87   already attributable via unwitnessedItemIds (§33)
  input not valid UTF-8           1   correct and unrelated (§35)
  SEMANTIC_DRIFT_EXCEEDED         0   <- the only one per-item drift would help

On multi-item bundles -- src/core (33 items), src/stages, src/gateway, src/adapters,
pip's 45 Python files, this repo's 62 TypeScript sources -- S_k measures 0.0024 to 0.0056
against a 0.40 threshold, and does not move at ratios 0.3, 0.5, 0.7 or 0.9.

The item was not wrong when written. §47 measured drift at 0.4122 on an engine that
elided everything it could; §48 gave the stage a ceiling to stop at and §50 made its unit
a statement, and together they cut symbol loss two orders of magnitude below the gate.
An open item is a claim about the current build and it expires like any other -- this one
was closed by other work and nobody re-measured it.

The mechanism is real and reachable only by asking for it: at --max-drift 0.001, four
hundred times stricter than default, drift fires, names no item, sets
hasUnattributableError, and suppresses a repair that would otherwise have reverted 7
items. So §47's design note is correct about what would happen; what is absent is any
default-configured input on which it happens.

§51 records what would make it live again and says to re-measure first -- it is one
corpus run. Status doc §7 now points the slot at the constraint gate instead, which is
where 29 of 29 code-bucket fallbacks are and which §50 separately measured as the reason
the better sub-region setting costs two files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ojassug
ojassug merged commit 8985b46 into main Aug 12, 2026
3 checks passed
@ojassug
ojassug deleted the docs-per-item-drift-disposition branch August 15, 2026 12:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant