Skip to content

v2: a service operation call resolves to the operation's declaration path; no implicit prefix or parent scope (D13 b-pre) - #12961

Merged
gunbai-bot[bot] merged 38 commits into
mainfrom
session/sleek-boar-665-service-call-resolve
Oct 3, 2026
Merged

gunbai-bot[bot] merged 38 commits into
mainfrom
session/sleek-boar-665-service-call-resolve

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Stacked on #12949 (eager-heron-413's service spine). Until it lands this diff contains its commits.

Why

D13 step (b) derives a function's demand from the operations it calls, reading each callee operation's ^arrow_resource_requirements_edge. That needs a call to resolve to the operation's declaration. The key agreed with eager-heron-413 and approved by the lane owner is the per-segment spine <module>.<service segments...>.<Op>, which #12949 lands. This PR holds the call route against that key and retires the "v2 resolving service CALLS" trigger the spine named.

What

No new resolver arm is needed, measured. On CI run 36955283415 (full language model), a fully qualified operation call t.svc.s.F.Run() resolved end to end through ingest, normalize and resolve to the operation's declaration path, with a harness control (an ordinary absolute fn call) passing beside it. A call reaches the existing qualified-reference door with the op path; there is no second resolver. That run is the evidence, but it cannot be the enrolled claim: a whole-module source resolve costs about 360,000 eval steps per claim (the empty-prelude model fails even the control), five times the new-witness budget.

So the enrolled claims sit at the resolve boundary, and each part of the route runs for real somewhere:

Controls (v2.test.claim.resolve.service_operation_call)

  • t.svc.s.F.Run resolves, and t.svc.s.E.Get resolves: two services under one prefix reach distinct operations.
  • RED: t.svc.s.F.Get (an operation the service does not declare) refuses.
  • RED, the bare-prefix ban: a bare s.F.Run resolves neither from a sibling module nor from a module nested under the service module's own path (t.svc.inner). Neither a merged namespace body nor a parent module path grants scope.

What these claims do NOT say. Nothing here gates reaching an operation on an import. A fully qualified path resolves from any module, with or without an import; that is pre-existing qualified-path behaviour, which the lane owner is recording as its own RFM row. Imports never bind a service bare: a whole-module import binds only the module, qualified, and a brace import of a service refuses. So the only real route today is the qualified op path, which the claims above cover.

Not pursued: a brace import of a merged namespace body (import t.svc { s }) does not bind. The corpus never writes that form; it writes whole-module imports, e.g. import extdeps.bmc.http followed by redfish.Http.GetSystem(..).

🤖 Generated with Claude Code

gunbc-ci-auto-heal and others added 22 commits October 1, 2026 21:19
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… could not type the matched edge)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…no implicit scope from a prefix or a parent module (D13 b-pre)

Controls on source text through the real ingest, normalize and resolve: an
importing module's s.F.Run() and s.E.Get() resolve to t.svc.s.F.Run and
t.svc.s.E.Get; a call to an operation the service does not declare refuses; a
module that does not import the service, and one nested under the service
module's own path, cannot call it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…en dropped it as parse machinery); spine facts are warm-shared producers

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…inear), not a quadratic scan-and-rebuild

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ed parameter (emitter: no field 'target' on T)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…13-service-spine

# Conflicts:
#	src/v2/compiler/body_lowering_fold.dag
…5-service-call-resolve

# Conflicts:
#	src/v2/compiler/body_lowering_fold.dag
…tree's binding source

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… (linear); stale repeated_name_edges citations updated

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…se (import form resolves; absolute form resolves; reference carried)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… FreeMonoid branch)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ntyped and typed; a typed operation call)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…he per-Edge reverse/prepend copies; the member step is written over FreeMonoid<Edge> and reversed with list_reverse; specimen on carrier_alias_refuses_its_own_carriers_constructor

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… specimen (gunbc#12949)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ape (v2.std.logic, typed fns, full language model) plus a harness control; probes folded back

Every probe, including an ordinary absolute fn call, failed: the harness, not the
route, was wrong (empty-prelude model, untyped fns).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…13-service-spine

# Conflicts:
#	src/v2/compiler/body_lowering_fold.dag
#	src/v2/workflow/floor_pure_producer_share.dag
gunbc-ci-auto-heal and others added 7 commits October 2, 2026 03:03
…e corpus's form); empty-prelude model now that Bool comes from the fixture's logic module

Run 36955283415: a fully qualified operation call resolves to the op path through the
existing door (no new arm), and the harness control passes; the brace import of a
namespace body did not bind, and the full language model put each claim near 360k steps.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ucer read by its claims (floor new-witness budget)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…esolve_node over an index symbol_index_fill builds from a spine-shaped root)

The whole-module source resolve needs the full language model (the empty prelude
fails even the ordinary-fn control) and costs ~360k eval steps per claim. The call
form reaching the qualified door is already held end to end by reference_closure,
and spine indexing by service_spine; these hold the door on an operation path and
the scope bans: an op path resolves, two services under one prefix reach distinct
ops, an undeclared op refuses, and neither an unimporting sibling nor a module
nested under the service module reaches s.F.Run.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…R2c-ii lowered the io default

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
gunbc-ci-auto-heal and others added 8 commits October 2, 2026 04:34
…lified walk (side-chat P1, the nesting ban)

symbol_index_fill marks each path that binds a marked namespace body (a service prefix; the module's own
body is the fill's root, never a member) in SymbolIndex.namespace_bodies. symbol_index_lexical_collect
collects no candidates at such a position and never answers with one, and still ascends to the module.
Qualified paths stay indexed. Controls: bare sibling E and bare prefix s refuse from inside s.F.Run,
qualified s.E and s resolve, module k still binds bare, and the recursive s.a.x / s.a.y case.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…5-service-call-resolve

# Conflicts:
#	src/v2/test/claim/normalize/service_declaration_lowering_test.dag
#	src/v2/workflow/floor_pure_producer_share.dag
…-root fill (s -> t.svc.s import row), paired with the same caller without the row

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…an import binds the module: svc -> t.svc, call svc.s.F.Run)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…a service bare); rename the bare-prefix REDs so they claim nothing about import gating

Per the lane owner: the only real route today is the qualified op path, and an
absolute qualified path resolves with or without an import (pre-existing, being
recorded as an RFM row). The two REDs are about the BARE prefix only, and are now
named so.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
gunbai-bot Bot pushed a commit that referenced this pull request Oct 2, 2026
…machine intake)

These 22 sites landed after the last roster-maintenance commit and were
never rostered, so the corpus-read ratchet (nfr_roster_receipt, which
runs on no CI path) never saw them. Totalling them here rather than
rostering them.

Skipped (mid-flight in open PRs, listed for follow-up):
- src/v2/extdeps/languages/swift/rows.dag: swl_decl_has_body, swl_decl_is_import, swl_stmt_has_block (PRs #12942, #12799)
- src/v2/extdeps/languages/dag.dag::dag_emit_text_step (PRs #12961, #12942, #12799)
- src/v2/compiler/00_compile.dag: native_demand_collect_rows, native_demand_settled_label (PRs #12942, #12799)
- dag/gunbc/approve_ios_swift_wire.dag::aw_sum (PR #12951)
- dag/gunbc/bmc_megarac_web_transport.dag::megarac_web_transport_readiness (PRs #12951, #12691)
- dag/gunbc/bmc_model.dag::bmc_event_eq (PR #12951)
@gunbai-bot

gunbai-bot Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor Author

This conflict comes from #12949. #12961 stacks on #12949's service-spine changes, and every conflicted file is one #12949 touches. #12949 itself conflicts with main in the same files. Once #12949 is updated against main, I'll merge its head and then main into this branch. #12961's own diff is the single claim module v2.test.claim.resolve.service_operation_call.

— sent from sleek-boar-665

…ms' hand root follows the EdgeLabel cut (Authored names, structural header edges)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@briansrls briansrls left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

APPROVE-MERGE at exact head 2d2302eefbea05e57370e7a7b7551812b401faeb.

No findings.

The one-file claim module is an adequate boundary proof for D13 b-pre; no resolver change is needed.

  • The supplied declaration root reuses the production authorities that matter: dag_surface_edge for the post-EdgeLabel module metadata, namespace_graft_namespace_body_node for the marked service prefix, declared_signature for each operation Arrow, and the real symbol_index_fill_module_root. Its indexed shape is therefore t.svc.s.F.Run / t.svc.s.E.Get, not a parallel dotted-label representation.
  • soc_resolves executes the real resolve_node qualified-reference door. A unique exact-path candidate cannot merely be tolerated: try_resolve_qualified_name_node sends the candidate's declaring path through resolve_atom_bound, whose one producer mints a declaration-reference node at that path. The t.svc.s.F.Get RED differs only by the absent operation and prevents a general accept/pass-through answer.
  • The compositional boundary is honest. v2.test.claim.reference_closure already executes a dotted call head end to end through parse, lowering and resolution; #12949 executes the real service-spine lowering/graft/index route; this module joins the existing qualified-reference door to an operation-shaped Arrow at the resulting path. Since functions and operations arrive at that door as the same declaration target shape, a second operation-call resolver or another 360k-step whole-module witness would be redundant.
  • The two shared-prefix positives and missing-operation RED distinguish the exact operation identity. The sibling/nested bare-prefix REDs preserve the operator's no implicit service-prefix or parent scope ruling without claiming import-gated absolute resolution; the existing absolute_path_resolves_without_an_import RFM remains the correct owner of that separate defect.

Exact-head floor, generated, emit-build, and witnesses are green. Merge-queue landing only; the composed merge_group candidate must pass against then-current main. No direct merge or check bypass.

@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Oct 3, 2026
Merged via the queue into main with commit f4d2922 Oct 3, 2026
4 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/sleek-boar-665-service-call-resolve branch October 3, 2026 01:20
gunbai-bot Bot pushed a commit that referenced this pull request Oct 3, 2026
…to integration: the branch's ImportsFixed debt rows kept; rung-drop docs regenerated next

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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