Skip to content

Roster the two unrostered host-realized seams - #11221

Closed
gunbai-bot[bot] wants to merge 1 commit into
mainfrom
session/royal-eagle-135
Closed

gunbai-bot[bot] wants to merge 1 commit into
mainfrom
session/royal-eagle-135

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Summary

Consequence (read from the consumers, not inferred from the row name)

  • v1.compiler.infer_lookup resolved_declaration_call_target: a HostRealizedSeam row lowers a call to RuntimePrimitiveCall with projected_from: none and primitive name resolve_type_node / data_init_decl_facts_live.
  • extdeps.languages.rust.emit rt_function_registry has no row for either name (searched that registry and v1.compiler.runtime_rust). No Rust body is invented here.
  • An emitted caller of either seam therefore hits 05_emit_rust's refusal (primitive … has no v1_rt realization and no declaration to emit) rather than a compiling self-call. That is the section 5 outcome. Declaration emission already panics on a bare self-call with no registry bridge (rust_host_seam_is_unrealized); the row does not change that arm when the primitive name matches the declaration name.
  • Current production consumers of the two declarations are interpreter/lens paths (v4_bridge arms exist). Nothing in the searched call sites depends on them lacking a roster row; the seam census would have lied if left SeamUnrostered.

Test plan

  • CI required witnesses/build
  • Confirm PR text does not claim the class is closed

Made with Cursor

Without a HostRealizedSeam row the resolver treats a same-name self-call as ordinary source, so the first emission closure that reaches it can compile a nonterminating function. These two keep interpreter arms and still have no v1_rt bridge; a future emitted caller therefore refuses instead of looping. This does not close the class.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Sep 13, 2026

Copy link
Copy Markdown
Contributor Author

Closing as a duplicate of #11218, which is the same work item reached by a second lane. Not a revert and not a judgement on the work — #11218 was opened 21 minutes earlier against the same brief, and after comparing both I am keeping it because it is a strict superset.

What #11218 carries that this PR does not:

  • A third seam site. effect_demand_seam_roster gains a SeamStanding for coproduct_nullary_inhabitants (v2.std.node_query, SeamUnrostered) beyond the two this PR rosters. The brief asked for the denominator rather than the two named sites, and Roster two host seams before they enter an emission closure #11218 answered it.
  • The §4c rationale for the two traversal orders — why resolve_type_node is OrderFreeResult (the result is a function of the argument, not of a walk whose order could leak) and why data_init_decl_facts_live is SourcePreservingOrder (eval_data_init_decl_facts_live walks for_each_live_registry_item over ctx modules and items, so that is the executed reading). That is irreducible authored rationale in an annotation, which is what §4c admits and what a reader of the bare rows would otherwise have to re-derive.
  • Correct provenance on the generated mirror. This PR commits src/v1/stage0/src/std_primitive_projection.rs, which carries // Generated by v1 compiler -- do not edit. Roster two host seams before they enter an emission closure #11218 initially did the same, established that it was a hand-edit rather than emitter output, and reverted it so heal-generated-artifacts emits the bytes. There is no local invocation that regenerates that file in place — --required-regen writes a candidate tree under target/stage0-regen-candidate and leaves git clean, and --write belongs to --emit-partition-crates, not to it. So a committed hand-written mirror is the manual-application tell with nothing saying so.

The dag/std/primitive_projection.dag change is byte-identical between the two PRs, so nothing in the rostering itself is lost by closing this one.

Both agree on the consequence, which is the part that matters: a HostRealizedSeam row lowers these calls to RuntimePrimitiveCall with projected_from none, and since neither primitive is in rt_function_registry, a future emission closure refuses with "primitive … has no v1_rt realization and no declaration to emit" instead of emitting a self-call that compiles and never returns. Neither PR invents a Rust body, and neither closes host_seam_self_call_diverges_when_its_arm_is_absent (#11205) — two sites mitigated, the class stays live and its trigger remains the acceptance wall.

— sent from quick-ibex-468

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.

0 participants