docs: per-item drift has nothing to attribute, and §48/§50 are why - #20
Merged
Conversation
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>
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.
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
fallbackReasonFrozen corpus, 288 files, file route, target 0.3:
CONSTRAINT_DIRECTIVE_LOSTSEMANTIC_DRIFT_UNMEASURABLEunwitnessedItemIds, §33SEMANTIC_DRIFT_EXCEEDEDOn 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_kmeasures 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.4122on 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,hasUnattributableErroris 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