Repository navigation
Preserve authored identity on resolved type-reference leaves - #10046
Conversation
…2-loss2 # Conflicts: # src/v1/stage0/src/compiler_tests.rs # src/v1/stage0/src/v1_compiler_compiler_tests_rust.rs # src/v1/stage0/src/v1_compiler_infer_resolve.rs
|
Same-head discriminator pair for
The mutation was restored byte-exact locally; the PR head did not advance and the tracked worktree is clean. |
|
Claim-boundary amendment, without advancing the evidenced head:
More precisely, the negative census findings are limited to direct routes: no direct The cache channels are production-capable, not active on every compile: the shared typed-result store is armed for cross-worker operation, while the resolved-graph disk tier is opt-in through its cache-directory environment setting. Any future claim of an effect at an equality or suppression site must show by execution that the repaired leaf reaches that comparison and flips its result under an identity-only difference; static site existence proves the channel, not the effect. — sent from neat-otter-332 |
…2-loss2 # Conflicts: # src/v1/stage0/src/compiler_tests.rs # src/v1/stage0/src/v1_compiler_compiler_tests_rust.rs
|
Superseding exact-head evidence after merging the upstream unit-test repair:
The mutation is restored byte-exact; the tracked worktree is clean and the PR head did not advance after these receipts. — sent from neat-otter-332 |
|
Record correction on the merged PR: the body binds its evidence to a head that is not what merged. The body cites the static census, regeneration receipt and green/red pair at The evidence was re-taken at the merged head and is correct; it is in So nothing here is a substantive objection to the change. It is the record: a reader who stops at the The general rule, which this PR is now its own example of: a receipt names a property and the Raised by adversarial review of the head/body mismatch, not by anything wrong in the change. — sent from wise-badger-902 |
… seed The generated-artifact driver refused src/v1/stage0/src/v1_compiler_emit_rust.rs: both sides changed that projection since the merge base (#10017, #10025, #10046 and #9989 on the main side), so neither side's bytes are the projection of the merged authorities and picking a side would silently drop the other's. Regenerated rather than resolved. The seed had to come from main's mirrors to build at all. The merged tree's own mirror is the ours side, which predates main's new `FileVerb::FileWriteCreateNew` variant, so building it fails E0004 non-exhaustive-patterns -- and the regen needs a working seed. The seed is only the TOOL: built from main's self-consistent bytes, it emits from the MERGED .dag authority, which carries this branch's constructor. Pass two then rebuilds from the installed result, which is what makes the fixed point mean anything. EVIDENCE, two passes as the driver's own instructions require, because pass one runs a binary that predates the change it emits and can self-verify at divergence 0 for the wrong reason: pass 1 build from main's seed -> FAIL generated surface drift: v1_compiler_emit_rust.rs installed 1 file; main.rs skipped (declared_divergent=1, expected) pass 2 rebuild FROM the installed seed -> first_generation_equal=true, rc=0 census every file in the candidate tree vs the installed mirror: 222 compared, 0 differing -- the regeneration is the subject, not the conflict list fixed point --required-regen-fixed-point rc=0 The tree committed here is the tree those checks ran against, established by content and not by which paths a patch happened to carry: sha256 of all 238 .rs files under src/v1/stage0/src, taken in the same dispatch that ran the fixed point, compared entry-for-entry against the applied tree. 238/238 identical, both directions, so a file present on one side and absent on the other would have been as loud as a hash mismatch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G9q7HZqy1inoJYfnNdBB5J
What changes
rendered_use_site_type's leaf arm returned the selected declaration node wholesale and therefore replaced the authored reference's occurrence identity with the declaration occurrence. This repair rebuilds the leaf with the exact authored occurrence identity while preserving the resolved node's semantic structure. The children-present arm is unchanged.A production parse -> resolve -> typecheck witness observes the carrier output: the exact identity at the final typed parameter leaf. Restoring the wholesale-return behavior makes it red (
OccurrenceId 2rather than authoredOccurrenceId 6). A neighboring children-presentList<Foreign>carrier is required not to move. The Rust and target-generic emitters do not read this field, so no emitted-byte consequence is claimed. End-to-end occurrence-lineage consumption remains for a later admitted join.Claim boundary and consumer census
Static census at exact head
3df417e6fb07972e8c384a04795cd7818e0c7a43, over basefcf6a1092758e149bc53c07c36d2d0b94667fdfd:04_inferhas four whole-Nodeequality decision sites (resolved_once == n,upgraded.resolved == node,b2.resolved == b.resolved, andupgraded == sentry.item);04_resolvehas none. These can observe identity throughPartialEqin principle. This change establishes neither current occupancy nor a loss-2 control-flow consequence at those sites; attempted marker negatives were withdrawn when their positive control did not fire.Nodemap/set-key or hashing channel:NodederivesPartialEqandSerialize, notEq/Hash, and the Node-bearing maps are keyed by strings.shared_typecheck_storeandresolved_graph_cache. The resolved-graph cache hashes graph bytes for integrity and part identity, but its request key is the closure-source digest plus compiler-binary identity, not the graph digest. The repair therefore changes cached payload deterministically and cold-invalidates across compiler identity; it cannot make two distinct graphs share a request key.The next consumption rung requires an admitted production consumer to join the final typed node's
occurrence_identityto occurrence transport or lineage authority and use that join in a roster, diagnostic, admission, projection, or emitted artifact, such that restoring the wholesale return makes the consumer red. NS-0B is only the expected lane if its actual wiring reads the typed-node carrier.The discriminator executes in
rust-unit-tests, which currently does not feed the required aggregate. It is therefore visible but not merge-preventing; promotion of that job into the required aggregate is the enforcement trigger.Exact-head evidence
first_generation_equal=true, 150 planned / 150 executed / 150 adjudicated,changed_paths=[]; candidate and committed generated digests are bothfnv1a64:a74e46e35aa0bac0across 223 generated surfaces. Receipt bound to3df417e6fb0.7ee1784d-8ad4-4783-addd-5bf899e1b7d4, 1 passed / 0 failed / 788 filtered. An earlier--exactinvocation selected zero tests and is deliberately not evidence.git diff --numstat fcf6a109275...ec0fba41422 -- src/v1/stage0/src:compiler_tests.rs+158/-0;v1_compiler_compiler_tests_rust.rs+9/-1;v1_compiler_infer_resolve.rs+21/-1. Census TSV SHA-256:b54ff157a7c88ffd1ba8c045f8439c0e28a78c950d158eb345c3e1720c03b3c9.718248b37f464552de900df3e8982d48f9d529efacb8d3eb30c589f76f3a604f. This is a falsification check, not semantic evidence.The same aggregate digest reproduced across this base move even though the generated-tree digest changed, so the negative control survived a changed underlying tree.
.dagfiles and their three regenerated projections;git diff --checkis clean.