Repository navigation
A rename destination enrolls the declaration set it establishes, not the lines git happened to print - #9829
Conversation
…the lines git happened to print The changed-witness sublane selected ONE of the two sibling test fns in the MachineShape construction wall that #9823 renamed into the required floor, and the one it missed was the wall's discriminating RED. The wall itself was fine: run 33413900349's own disposition receipt carries `gate_red_synthetic_machine_shape_call` as `planned` / `passed`. It executed via the ordinary Planned arm and only the projection line was absent. The selection was not fine. `parse_unified_diff_added_paths` already rules that a `rename to` destination is new-at-path -- "its declaration set is established fresh at NEW" -- but that ruling only ever lifted the line-1 fail-closed refusal. Nothing acted on the declaration set, so a moved file's identities were attributed by which lines the move happened to edit. For a `/dev/null` add the two agreed by accident (every line is a `+` line); for a rename they do not. Measured over the 90 commits reachable from HEAD: 8 of 8 rename-destination `.dag` files carrying test decls were under-enrolled, 87 of 103 identities missed. A pure move with no content edit enrolls NOTHING. It mattered beyond the projection line because changed-witness membership is what OVERRIDES the cost-debt withhold and the outside-gate suppression, so the same miss on a rostered identity is a silent decline of a witness whose author is present -- the state v2.workflow.floor_changed_witness exists for. The universe of the fix is the file's own parsed decl list, never the corpus: the precise answer to "what does this path declare", not an absorbing widen (DESIGN section 5). No refusal arm changed. Two controls, run remote in release, in both directions: rename_destination_enrolls_every_test_decl_not_only_the_diff_touched_one feeds #9823's verbatim `git diff -U0` output and asserts enrolled == declared. Fix disabled: FAILS. Proven, not asserted. in_place_modify_enrolls_only_the_touched_test_decl passes under both states, so the first test's red is discriminating rather than a build break, and the fix cannot be satisfied by widening. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018aiTywconE9bm1hmUPjyft
|
Verified this against the tree before answering, and the finding does not hold: the receipt it says is missing already exists, on the carrier, naming the exact symbol this PR edits.
That is a declared scaffold citing §6–§7, with a named capability trigger (not an artifact — §4b(3)'s distinction) and a mechanical census whose emptiness is the retirement condition. On each specific artifact the review asks for:
I also checked whether the "Pure Bootstrap hand-Rust gate" exists as stated. DESIGN §7 contains none of these three artifacts — its rule is the declared-row-with-trigger sentence quoted above. The phrase "Pure Bootstrap receipt" occurs exactly once in the repository, in For calibration rather than as an argument from precedent: #9809 ( What I am not disputing is the underlying §7 concern — the seed must shrink, and adding to it needs an answer. The answer here is that this is a correctness repair to machinery already rostered for deletion under a named capability trigger, fixing a class measured at 8 of 8 rename destinations and 87 of 103 identities under-enrolled, whose discriminating RED is proven by disabling the fix. One thing I judged genuinely worth doing and deliberately did not push: a cross-reference from the new rule in — sent from fierce-otter-51 |
…n arm correct only while git copy detection stays off `parse_unified_diff_added_paths` admits `rename to` and `--- /dev/null` as new-at-path. A `copy to` destination is new-at-path by the same argument #9829 rests on -- every declaration at the destination is a newly qualified identity that has never executed under that spelling -- and would take the same silent partial-enrollment arm. The population is empty today: the floor observes via `extdeps.git.git`'s `DiffUnified0` (`git diff -U0 <range>`), and git detects copies only under `-C`/`--find-copies` or `diff.renames=copies`, neither set by that argv nor by repo config. That makes the arm's correctness depend on a capability being ABSENT, with nothing loud when it arrives -- so it is declared in §4b(3) shape at the selection rule: the loss, the bounded population and why it is bounded, and the capability that makes it live. No copy arm is implemented: an arm no diff can reach is permanently untested and would be cited as coverage it does not provide. Comment only; no behavior change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HghAsidY2uEFNF1d1qiYKU
|
Correction to this PR's empirical claim (posted after merge; the attribution repair itself is unaffected). This description states the under-enrollment population as measured over "the 90 commits reachable from HEAD". That window is not a repository history. The worktree it was derived in is a shallow clone — The honest form of the finding is therefore:
not "87 of 103" as a corpus census. The figure is a lower bound, and it is conservative in the safe direction — the real population can only be larger — so nothing that was decided on it is invalidated. The defect, the fix, and the discriminating evidence (the enrollment probe reds with the fix disabled while the in-place-modify control passes in both arms) all stand exactly as recorded. Recording it here because this is where the number is durable: the count travelled upward into a prioritisation argument and a program plan, and a figure that travels loses its qualifier first. Anyone needing the true corpus count must re-derive it after a full-depth fetch; nobody should read this PR as having done so. |
… required_floor_runner.rs cannot see the cli_run.rs SCAFFOLD declaration that owns floor_diff_edits_from_line_ranges (#9836) * Cite the governing scaffold row from the code it governs: floor_diff_edits_from_line_ranges points back at FloorDiffEdits The SCAFFOLD (DESIGN §6-§7) row above `FloorDiffEdits` in `cli_run` governs the body of `floor_diff_edits_from_line_ranges`, which lives in a different file (`cli_run::required_floor_runner`). A governing declaration unreachable from the code it governs is a §3 citation defect. Add a two-line pointer that names the module and symbol -- no line number, no restatement of the reason, trigger or census, which stay single-authority in the row itself. Comment only; no behavior change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HghAsidY2uEFNF1d1qiYKU * Declare the copy-destination gap in parse_unified_diff_added_paths: an arm correct only while git copy detection stays off `parse_unified_diff_added_paths` admits `rename to` and `--- /dev/null` as new-at-path. A `copy to` destination is new-at-path by the same argument #9829 rests on -- every declaration at the destination is a newly qualified identity that has never executed under that spelling -- and would take the same silent partial-enrollment arm. The population is empty today: the floor observes via `extdeps.git.git`'s `DiffUnified0` (`git diff -U0 <range>`), and git detects copies only under `-C`/`--find-copies` or `diff.renames=copies`, neither set by that argv nor by repo config. That makes the arm's correctness depend on a capability being ABSENT, with nothing loud when it arrives -- so it is declared in §4b(3) shape at the selection rule: the loss, the bounded population and why it is bounded, and the capability that makes it live. No copy arm is implemented: an arm no diff can reach is permanently untested and would be cited as coverage it does not provide. Comment only; no behavior change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HghAsidY2uEFNF1d1qiYKU * Spell the copy-gap citation from the declaration, not the path: extdeps.git's git.Core.DiffUnified0 `extdeps.git.git` is not a module -- `dag/extdeps/git/git.dag` declares `module extdeps.git` and the operation lives in `service git.Core`, so the doubled segment came from the filename rather than the namespace and a reader grepping it finds nothing. Same citation class this PR exists to repair. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HghAsidY2uEFNF1d1qiYKU --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
The observation, and what it was not
The required floor printed exactly ONE
[changed-witness]line for the MachineShape construction wall that #9823 renamed intov2.test., though the file declares two siblingtest fns — and the one missing wasgate_red_synthetic_machine_shape_call, the wall's discriminating RED.The wall itself is fine, and #9823 delivered what it claims. That run's own disposition receipt (run 33413900349, artifact
required_floor_disposition.tsv, 14705 rows) carries both siblings:The RED executed and passed, via the ordinary
Plannedarm, which prints nothing on a pass. Absence from the log was not absence from execution. No rung was inflated.The defect that is real
Git detects the rename and prints only the hunks that differ — for #9823, the module line and the removed trailing blank line at EOF.
floor_diff_edits_from_line_rangesattributes changed lines to enclosing declarations, the EOF hunk fell inside the last declaration, and so the file's identities were selected by which lines the move happened to edit.parse_unified_diff_added_pathsalready rules that arename todestination is new-at-path — its own comment says the declaration set "is established fresh at NEW". That ruling was only ever used to lift the line-1 fail-closed refusal; nothing acted on the declaration set. For a/dev/nulladd the two agreed by accident (every line is a+line). For a rename they do not.Every identity at the destination is a NEW qualified
module.function— the authored module name moved with the file — so it has never executed under that spelling.Population
Measured over the 90 commits reachable from HEAD, replaying the floor's own diff command (
git diff -U0 <parent> <commit>, rename detection on by default) and its own attribution rule:src/v2/test/claim/machine_shape_construction_wall_test.dagdag/test/claim/self_host_emitted_call_target_realization_witness_test.dagdag/test/claim/self_host_symbol_identity_binding_witness_test.dagdag/test/claim/self_host_regen_round_cost_witness_test.dagdag/test/claim/duplicate_definition_binding_probe_test.dagdag/test/claim/filesystem_list_hermetic_witness_test.dagdag/test/claim/sole_constructor_completeness_audit_probe_test.dagsrc/v2/test/claim/parse/grammar_validation_test.dag8 of 8 under-enrolled; 87 of 103 identities missed. Note the zeros: a pure move with no content edit enrolls NOTHING. Every rename since the sublane landed has been silently partial, and this window is a floor on the count, not the count.
Why it matters past the log line
Changed-witness membership is what overrides the cost-debt withhold and the outside-gate suppression (
suppress_withheldand the site loop both testchanged_witness_set.contains(identity)). The same miss on a cost-debt-rostered identity is a silentDeclinedCostDebtfor a witness whose author is present — precisely the statev2.workflow.floor_changed_witnesswas written for ("a green context that had never looked").The fix, and why it is not a widening
When a path is in
added_paths, its own parsed declaration lines are marked changed. The universe is the file's own decl list, never the corpus — the precise answer to "what does this path declare", not an absorbing "rerun everything" (DESIGN §5). No refusal arm changed; the line-1 fail-closed refusal for in-place modifies is untouched.Evidence, both directions, run remote in release
rename_destination_enrolls_every_test_decl_not_only_the_diff_touched_one— feeds MachineShape construction wall may be dormant: test.claim.machine_shape_construction_wall matches no required_gate_prefixes entry, so its RED/GREEN controls may never execute on the required path #9823's verbatimgit diff -U0output for the renamed entry and assertsenrolled == declared. With the fix: pass. Fix disabled: FAILS — proven by execution, not asserted.in_place_modify_enrolls_only_the_touched_test_decl— the other direction, so the fix cannot be satisfied by widening: an in-place edit inside one declaration enrolls that declaration and no sibling. Passes under both states, which is what makes the first test's red discriminating rather than a build break.Note for anyone re-deriving the receipt
gh api repos/.../actions/artifacts/<id>/zipcorrupts the download — gh strips null bytes and the zip will not open. Usecurlwithgh auth token.Known residue
The declaration-set rule lives in the Rust attribution beside its siblings (the added-path, departed-path and line-1 rules), because that is where the single authority for diff→declaration attribution is today;
v2.workflow.floor_changed_witnessowns the standing vocabulary, not selection. Moving the whole attribution on-carrier is a separate lane and is not started here.🤖 Generated with Claude Code
https://claude.ai/code/session_018aiTywconE9bm1hmUPjyft