Repository navigation
XL-2 PR3b-i: non-transport realization facts lower into the MIRROR sibling (transport fields at the 3b-ii frontier) - #13050
Conversation
…ne; graft merges same-named marked bodies
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>
…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
…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>
… FreeMonoid branch) 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>
…13-service-spine # Conflicts: # src/v2/compiler/body_lowering_fold.dag # src/v2/workflow/floor_pure_producer_share.dag
…ucer read by its claims (floor new-witness budget) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… declared-binding vocabularies, its conformance wall, and the symbol-index arm 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>
…he symbol index does not pull the transport vocabularies into the emitted compiler Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…wn text is literal Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…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>
…escaped backslash leaves the brace live Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…13-service-spine # Conflicts: # src/v2/test/claim/normalize/service_declaration_lowering_test.dag # src/v2/workflow/floor_pure_producer_share.dag
…de can read the other, and its dissolution (review 74063) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ith an executable exit; module comments point at it (review 74063, XL-2 ruling STATED) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… (required-regen fixed point, round 2) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…mport (t.s.F.Run); a non-importer refuses it Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…using (an absolute path resolves without an import, so a non-importer does not discriminate) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ualified path through the corpus index regardless of the subject's imports; specimen from the #12949 probe) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…to session/eager-heron-413-pr3b-i # Conflicts: # src/v2/compiler/symbol_index_fill.dag
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e default-tail claim stale since #12948 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…edges (post-normalize well_formed); wall and fixtures read it as a list Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tion_node_shape) and every named-edge lookup names all three arms; no wildcard arms on closed coproducts (side-chat ruling, NonFoldResidue) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…to session/eager-heron-413-pr3b-i
… claim's lookup name all three arms Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…esponseStatus and admits it only when it decodes; the Bool re-checks are deleted (review 74145) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…to session/eager-heron-413-pr3b-i # Conflicts: # dag/extdeps/transports/rest.dag # dag/extdeps/transports/shell.dag # src/v2/compiler/service_realization.dag
…13-pr3a # Conflicts: # src/v2/compiler/symbol_index_fill.dag
…to session/eager-heron-413-pr3b-i # Conflicts: # src/v2/compiler/03_resolve.dag # src/v2/compiler/body_lowering_fold.dag # src/v2/compiler/namespace_graft.dag # src/v2/compiler/service_realization.dag # src/v2/compiler/symbol_index_fill.dag # src/v2/extdeps/languages/dag.dag # src/v2/test/claim/service_realization_conformance_test.dag # src/v2/workflow/floor_pure_producer_share.dag
… (realization_node_shape at each site, DecodedStatusPattern) into the list-arm wall Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…malization conservation report are each one warm nullary producer read by their claim Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
briansrls
left a comment
There was a problem hiding this comment.
HOLD at exact head cbd42b878abf7892a7976c1f2a85a443b17c01fd.
The MIRROR construction, marked-prefix merge, per-kind grammar productions, list-shaped status/mock arms, typed status decoding, from projection rows, declared-vocabulary split, resource-capability preservation, and the transport-field 3b-ii set-aside otherwise look coherent.
P1 — a config-only realization bypasses the pre-3c full-route refusal
The stated transition boundary is that the census route may carry the new sibling, while the full route continues to refuse services as body_lowering_reason_service_realization_unreachable until 3c.
That does not hold for an authorable service whose only realization fact is service-level config:
body_lower_service_config_nodelowers the config intoBodyLowerServiceAcc.configand adds nothing toa.set_aside.body_lower_service_realization_leaf_optionaltherefore produces a leaf containing only<realization-config>.service_realization_refusaladmits that leaf when the config is a nonempty Conj of distinct fields; it does not require an operation entry or transport alongside service-level config.- after the wall,
body_lower_service_decl(..., admit_set_aside: false)refuses only whena.set_asideis nonempty. For this shape it is empty, so full normalization releases the service and its realization sibling before 3c.
For example, a service with config { endpoint: "http://x" } and an otherwise interface-only operation has no transport member to populate the set-aside list. The current accepted fixture always includes transport shell { argv: ... }, so the transport itself masks the escape by keeping a.set_aside nonempty.
This is load-bearing: before 3c, downstream stages have not established how they consume or refuse the sibling. Allowing this one realization population through can silently drop it or surface under an unrelated later cause, and contradicts the PR's own full-route boundary.
Keep the full route closed whenever the service has a realization leaf until 3c—either gate Present realization independently of a.set_aside, or retain config as a set-aside member for that route. Add a paired control: census normalization carries the config-only MIRROR sibling, while ordinary normalization of the same source refuses as body_lowering_reason_service_realization_unreachable.
Exact-head floor, generated, emit-build, and witnesses are green. This hold is semantic; no direct merge or check bypass.
…e even when nothing is set aside (config-only); paired census/full control (side-chat P1) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Side-chat P1 (a config-only realization slipped through the full route before 3c) is fixed at cfcbee9. A service lowers normally only when nothing is set aside AND it has no realization leaf. Otherwise the new — sent from eager-heron-413 |
briansrls
left a comment
There was a problem hiding this comment.
APPROVE for merge-queue landing at exact head cfcbee9b94b7e728fd0779e5ffa3edb8aa6f86dd.
No findings. This supersedes my CHANGES_REQUESTED review 5398847587 at cbd42b878abf7892a7976c1f2a85a443b17c01fd.
I reviewed only the one-commit delta:
body_lower_service_declnow distinguishes the genuinely empty state (a.set_asideempty and no realization leaf) from either form of held state. A present realization leaf reachesbody_lower_service_heldeven whena.set_asideis empty.- At census grade,
body_lower_service_heldstill returns the lowered interface plus MIRROR sibling, with any set-aside diagnostics advisory as before. - On the ordinary route, it always refuses as
body_lowering_reason_service_realization_unreachable; an empty set-aside list no longer releases a config-only sibling, while the existing pending-diagnostic behavior is retained when set-aside members exist. - The paired real-route control uses one config-only source:
normalize_censusmust carry<realization>.S.<realization-config>, and ordinary normalization must refuse with the owned unreachable cause. The fixture contains no transport member that could mask the leaf boundary. - The two new nullary producers are enrolled warm, and exact-head generated, floor, emit-build, and witnesses checks all pass.
Merge-queue landing only. The composed merge_group candidate must pass against then-current main; no direct merge or check bypass.
Conflict in v2.workflow.floor_pure_producer_share: main added 53 hand warm rows (#12506's 44 and #13050's) to the roster this PR deletes. Resolved to this PR's side; each row is dispositioned from this head's floor run (derived, or a single-declared-claim fill reported to its owning lane, calm-boar-904, for the s3 supply-the-inputs restructure). Two comments in main's new test modules that cited the deleted roster are rewritten. docs/design-rung-drops.md regenerated against the merged tree. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…keep the derived rung-drop roster (main's new drop is a member by its file), union imports Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
XL-2 PR3b-i. A service's non-transport realization facts lower into the realization sibling that PR3a (#12974) modeled. The transport's fields stay set aside, at a declared frontier whose trigger is 3b-ii. Rulings (XL-2 manager, 2026-10-02): split SPLIT (3b-i now, then 3b-ii after the interpolation lane), D1, D2 and D4 approved. Design:
docs/plans/service-interface-and-uses-carriers.md.What lowers, and where
v2.compiler.body_lowering_fold. Each service now lowers to its interface spine and a MIRROR sibling,<realization> -> <namespace body> { seg.. -> { Op -> ENTRY, <realization-config>? } }. The prefix bodies are marked, so services sharing a prefix merge through the spine's existing merge rule.<realization-transport> -> { <transport-kind> -> shell|rest|file|local }.localrefuses at the wall astransport_unmodeled.<status-arms>, as a list introduction of{ <arm-pattern>, <arm-payload>, <arm-doc>? }. The payload is a type, through the one type-position reader. An ordered block is a list, not a Conj of positional edges; the latter is ill-formed, and was found through the post-normalizewell_formedrefusal.<mock-arms>. The payload is a value, through the one value reader, so its references reach resolution.from "key"goes to one<projection>rowfield -> "key". It is no longerinterface_member_unmodeled.configgoes to<realization-config>, with fields named as written.body_lowering_reason_realization_block_repeated).v2.compiler.service_realization) runs on every lowered service, and a non-conforming sibling refuses the service, located. That makes the wall's §3c frontier executed. It now reads arms as a list, and an optional<arm-doc>must be a string literal.Declared frontier (3b-ii)
A transport's fields (argv, stdin, method, path, query, headers, body, ...) are not lowered. The transport member stays set aside (
realization_member_set_aside), so the full route still refuses the service asservice_realization_unreachable(3c removes that). Trigger: 3b-ii lowers transport fields through the template model (#12987v2.std.template, plus the grammar template node from the interpolation lane), at which point the transport is no longer set aside. Resource capabilities keep their exact prior behaviour: their lowered realization members refuse as set-aside members.Grammar
Each transport kind, each status-pattern form (class
5xx, exact code, name) and each config field name is now its own production (the #12964 precedent: a literal terminal publishes only its class).occurrence_roleclassifies the status-pattern name as a marker, not a reference.D2: the declared vocabulary moves out of the runtime modules
extdeps.transports.{shell,rest,file}_declaredhold the binding fields, the output channels and the status patterns, so the emitted compiler, which now reaches the wall through body lowering, doesn't importstd.effect_grant.Also
a_default_tail_refuses_as_a_service_set_aside_REDhas been red on main since v2: every default lowers onto its binder and is judged at the binder's declared type (XL-2 PR2c-ii) #12948 (re-run at 3756d62; CI didn't run it because its file was untouched). It is replaced bya_default_tail_lowers_onto_its_binder_holds.realization_node_shapeat each site, andDecodedStatusPattern.Evidence
claim_batch over service_declaration_lowering, resource_declaration_lowering, service_spine, service_realization_conformance and the new service_realization_lowering (BuildBuddy, 24 GB): 55/55 at c19da58, and again 55/55 at 059fa73 (this head, after merging main with PR3a landed). New claims, over the real census route:
the_realization_facts_lower_into_the_sibling_holds: the kind, 2 exit arms (one with a doc), a mock arm, a from-row and config, plus the interface path.the_siblings_of_a_shared_prefix_merge_holdsan_unrealizable_realization_refuses_located_holds:local, a repeated exit, and5xxon shell.🤖 Generated with Claude Code