Skip to content

decl_ref constructors move to std.decl_ref: dissolve the parallel-lane fork that reds shared closures - #7612

Merged
briansrls merged 7 commits into
mainfrom
hotfix/decl-ref-single-authority
Aug 2, 2026
Merged

briansrls merged 7 commits into
mainfrom
hotfix/decl-ref-single-authority

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

What

Two parallel lanes each minted an identical fn decl_ref / fn decl_field_ref constructor pair on the same day (2026-08-01): std.primitive_identity (#7549) and std.roster_frontier. Because v1-seed fn names are not module-scoped, any resolve closure containing both modules refuses every bare decl_ref reference as an ambiguous decl_ref — this is the current-main floor red that has been failing #7571's runs through no fault of that branch (6 ambiguous refusals in the primitive_identity_join_witness_test closure).

This PR dissolves the fork at its §3 home: the constructors move to std.decl_ref, beside the DeclarationRef type they construct, with decl_ref_constructor_authority_note recording the incident. Both duplicates delete; 13 importers repoint from std.roster_frontier to std.decl_ref.

Net −70 lines (+47/−117 across 17 files) — a de-fork, as it should be.

Why it reds main today

  • dag/std/primitive_identity.dag (merged Primitive identity join D0: five-surface census and join refusals #7549) and dag/std/roster_frontier.dag both declared top-level fn decl_ref(module_path, decl_name) and fn decl_field_ref(...).
  • v1-seed toplevel fn names are not module-scoped: two same-named fns in one resolve pool → every call site refuses as ambiguous.
  • The join witness file imports both modules' worlds transitively, so its whole closure reds; the same landmine sits under any future closure that pulls both std modules.

Witness receipts (by execution, release binary, this branch)

dag/test/claim/primitive_identity_join_witness_test.dag — all 15 test fns green:

  • w_open_denominator_counted_receipt · w_derived_surface_census_population · w_interpreter_measurement_rows_marked_measurement_only · w_derived_rows_marked_derived_from_authority · w_map_keys_joins_all_five_surfaces · w_fold_list_spelling_fork_named_finding · w_fold_list_registry_gap_proves_open_denominator · w_index_by_registry_algebra_gap_named_finding · w_unknown_realization_refuses · w_duplicate_semantic_definition_refuses → true
  • w_host_unspecified_traversal_classified_for_map_projections · w_red_missing_identity_on_joined_surface · w_red_surface_joins_two_identities · w_red_cross_authority_identity_fork · w_red_incompatible_invocation_assignment → true

dag/test/claim/roster_frontier_annotation_witness_test.dag — 5/5 green (census_closure_frontier_rows_count_is_twenty_one, rows_well_formed, and the three frontier_expiry fns).

Compile-clean: all repointed importer entries compile with 0 blocking diagnostics (gunbc compile --target dag).

Unblocks

#7571's floor: its recurring red is this main-side fork, not its own diff. Once this merges, #7571's next floor run is meaningful.

🤖 Generated with Claude Code

Brian Searls and others added 3 commits August 1, 2026 17:35
…e fork that reds shared closures

std.primitive_identity (#7549) and std.roster_frontier each minted identical fn decl_ref / decl_field_ref beside std.decl_ref, which owned the type but no constructor. v1-seed fn names are not module-scoped, so any resolve pool containing both modules refused every bare decl_ref reference as ambiguous — six such refusals in the primitive_identity_join witness closure on current main, blocking unrelated PR floors. The constructors now live once beside their type; both former minters and all 13 importers repoint.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
regen_stage0 over the updated dag closure — the constructors' single
authority now emits with its module (110 files regenerated, 1 drifted).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… 46502)

The module is import-free; its bare decl_ref calls resolve from
std.decl_ref — the same pool source its DeclarationRef type references
already use. All 27 host_standup spine + assimilation witness fns green
by execution; not in the emitted stage0 set, so the regen fixed point
is untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor Author

Addressed the REQUEST_CHANGES from review 46502: the duplicate constructor at dag/gunbc/host_standup.dag is deleted in 8a74095. A full-tree sweep confirms std.decl_ref is now the only definition site of fn decl_ref / decl_field_ref (disposition_redundancy's decl_ref_eq is a distinct comparator, not a copy). host_standup is an import-free module, so no import was added — its bare decl_ref calls resolve from the same pool source its DeclarationRef type references already use. Receipts: all 27 host_standup spine + assimilation-deduction witness fns green by execution; compile-clean 0 blocking; the module is not in the emitted stage0 set, so the regen fixed point is untouched. — sent from sleek-tern-275

Brian Searls and others added 3 commits August 1, 2026 22:10
…ves onto the single authority

Main's #7614 dodged the two-duplicate ambiguity by qualifying calls as
std.primitive_identity.decl_ref; this branch deletes that duplicate, so
the six qualified calls repoint to the bare constructor imported from
std.decl_ref — the qualification workaround dissolves with the fork.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…view 46764)

Fresh regen_stage0 on the merged tree (the earlier pass used a
pre-#7585 stale binary whose escape handling produced a phantom
v1_compiler_infer drift — rebuilt, rerun, gone). One honest drift:
the roster_frontier seed no longer carries the constructor pair, so
the emitted Rust matches its .dag source (DESIGN §7).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 46764: fresh regen on the merged tree lands in fd94366 — src/v1/stage0/src/std_roster_frontier.rs drops the constructor pair (+1/−22), so the seed matches its .dag source and std.decl_ref is the sole definition site in both representations. Root cause of the miss: my first regen ran before the main merge brought #7571's regenerated seed back in, and a second regen attempt used a stale pre-#7585 regen_stage0 binary that produced a phantom unicode-escape drift in v1_compiler_infer.rs — rebuilt the bin, reran, and the only remaining drift was the honest one, now committed. — sent from sleek-tern-275

@briansrls
briansrls merged commit 8ab227f into main Aug 2, 2026
5 checks passed
@briansrls
briansrls deleted the hotfix/decl-ref-single-authority branch August 2, 2026 14:12
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