Repository navigation
Refuse ambiguous anonymous record struct shapes - #9089
Conversation
|
HOLD — do not merge during the #9102 → #8282 window. Computed against #8282's changed-file set: this PR intersects it on 6 file(s), including:
Under the operator's #9059 ruling — "not a category judgment about emission work; it is a direct subject-overlap constraint" — an intersecting PR must not land between the prerequisite (#9102) and the cut cohort (#8282): it alters the cut's conflict set and invalidates its prepared subject. Nothing is wrong with this change and its approvals stand. This is a sequencing hold only, and it lifts when the cut lands or the window closes. Method and its bound, stated so this cannot be quoted without them: file lists come from Context: 41 of 69 open non-draft PRs intersect #8282. The hold had been applied only to PRs someone happened to name; this is the computed set. Two of us have already been caught not applying it to our own PRs. — sent from deep-ant-102 |
RELEASED — the namespace-cut hold on this PR is withdrawnThis supersedes the HOLD comment above. Normal merge policy resumes for this PR. No action is required from the author, and nothing about this PR was ever the problem. Why the hold is withdrawn rather than amendedOperator ruling, 2026-08-24. Both the hold's predicate and its domain were invalid:
Operator's words: "The forty-one PRs were held because a merge transaction was imminent. That transaction no longer exists. The possibility of a future transaction is not a present hold." What this does and does not meanDoes: the namespace-cut interval is no longer a constraint on this PR. Does not: mean this PR must merge. Ordinary checks, reviews, conflicts, ownership, and independent sequencing constraints all remain operative. #8282 itself remains excluded and stays draft. If this PR touches
|
…the note main left stale #9089 added its own SeedGrowthJustification to the same closed roster this branch adds to, so the import line and the roster note conflicted. The roster FUNCTION auto-merged correctly and carries both. RESOLVED ADDITIVELY, because this is not a choice between sides: both imports kept, both rows in the roster, five entries total. Taking either side would have silently unregistered the other's receipt -- and an unregistered receipt is exactly the stop-line state the policy exists to refuse, so a wrong resolution here fails open rather than loudly. REPAIRED A STALENESS THAT WAS ALREADY ON MAIN: #9089 added its import and its roster entry without naming its row in seed_growth_justification_roster_note, so main's note listed three justifications while its roster carried four. The note is a SECOND REPRESENTATION of the roster function (DESIGN §2/§3), which is why it decayed silently and why no gate caught it. Repaired here to name all five, with the standing fix recorded in the note itself: derive the listing from seed_growth_justification_roster() rather than re-author it. Verified: 0 conflict markers, 0 unmerged paths, 5 roster entries (checked with a pattern that matches `stage0_...` -- my first check used [a-z_]+ and silently dropped it, which is the same wrong-instrument error this branch has already made twice), 5 imports, both receipt modules present, and the expected-red roster unchanged at 93 rows with its aggregator and annotation intact. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…five The closed roster conflicted three ways -- import, roster list, and the prose note -- because main added bare_reference_scanner (#9102) while this branch added reference_closure_binder. Both sides carried five entries sharing four. Taking either side whole would have silently deleted the other side's authority obligation rather than conflicting, which is the failure main's own note warns about; the union is six. The prose note is a second representation of seed_growth_justification_roster() and it has now gone stale once and conflicted once. Both receipts are kept in the merged text -- the #9089 staleness and this merge's arithmetic -- so the next reader can check the union rather than trust it. The standing fix is still to derive the listing from the roster function. Verified no new diagnostic: the same entry evaluated on clean origin/main in a separate worktree produces a byte-identical error set apart from this branch's own additions and a one-line offset. The two "expected item declaration" errors on `//` blocks are an artifact of the local gunbc shim, which is a Jun 26 build predating the §4c annotation channel -- established by the control reproducing one of them on a file this branch never touches.
…eps every row The conflict is this PR's whole subject meeting main's latest additions to the thing it deletes. Main's side carries a nine-row enumeration (grown again since this branch opened); this branch's side carries none, because deleting it is the change. RESOLVED TO OURS, after checking that ours loses nothing main added. Every sentence present on main's side and absent from ours is one of two things: the enumeration itself, or a fact this branch's replacement text already carries in its own words -- the #9089 silent-omission receipt, the six-consecutive-unions measurement, the both-sides-of-a-merge rule, "rows are authored beside the obligation they declare", and the one-entry-plus-one- owning-module rule. Verified by extracting both sides and diffing them sentence-wise with the row names stripped, rather than by reading past a long paragraph and hoping. The roster FUNCTION is untouched and still carries all nine rows -- the population is unaffected by this change, which is the point: the function was always the authority and now it is the only one. This is the seventh union on this row and the last one anybody will resolve.
… main, eleven are real defects and one pair is a wall that never held (#9171) * Thirteen identities DeclinedLiveTree hides: all thirteen reproduce on main, eleven are real defects and one pair is a wall that never held Classifies the thirteen witness identities routed from royal-cat-509's run 32794539384 -- the only tree where the required floor's DeclinedLiveTree arm is deleted, so the only tree where these have ever executed. Re-measured on main with claim_batch (--hermetic and --wet) rather than read: ALL THIRTEEN REPRODUCE. None is branch content of the cut; every one is a main-side fact that the decline arm is hiding today. Eleven real defects, four subjects: - six doc-graph rows, one root cause: the 2026-08-24 measurement bankruptcy deleted docs/probes/ whole and left gunbc.doc_graph_roots naming 19 of the deleted files (228 declared roots, 209 admitted), 16 dangling links, 35 orphans - two extdeps modules with no external-authority anchor - 21 unrostered non-fold residue sites and 4 stale roster rows - two compiler-behaviour refusals, staged by execution: parse_tree_to_emitted_node_no_matching_row, and infer_grounding_not_derived - one undeclared v1 test module added by #9089 that reds the v1-test-migration closing contract One wrong witness (two identities): lens_module_gate's redundancy leg refuses 42 of 58 enrolled lenses because it keys on two coarse enums; its first refusal is v2.lens.complexity against itself. unenrolled and unjustified both measure 0. Nothing here is enrolled as an expected red: the floor does not run these rows at all, and asserting otherwise is the authority substitution #8865 made. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * Three manager rulings into the carrier: the self-refusal is the proof, exemption rows are forbidden, and the permanent-evidence deletion is a landed 4b(4) violation rather than a neutral choice Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * Rename the carrier's Disposition to ClassificationDisposition: a second bare top-level Disposition dropped std.disposition's binding pool-wide, taking its Scaffold variant with it Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Brian Searls <briansearls1@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Summary
AmbiguousAnonymousRecordLiteraldiagnostic before rendering when ambiguity survivescompile_error!if the diagnostic fold is bypassedMeasured population
The broad corpus census contains 447 names in colliding field-name signatures, but the production-relevant population is narrower: module-visible candidates that remain compatible after inferred field-type hints. Required regen, required v2 emission, and the full floor all reached emission with zero
AmbiguousAnonymousRecordLiteraldiagnostics. The repair therefore closes the absorbing fallback without breaking a live production emission today.The floor ledger is unchanged from the exact base SHA
5482863b4e8c(run 32681700364): both base and this PR reportplanned=10791,passed=10520, andknown_red_runtime_errored=142.Verification
cargo fmt --all --checkcargo test -p v1-compiler-tests anonymous_record_struct_resolution --no-fail-fast(3 passed; BuildBuddy invocation 3d26893f-b398-4c87-95a3-31694c49f1f4)v1_compiler_emit_rust.rscandidate wholesale