From f67487e9f2b6b363f5ee9bf2f904ce66fe74f597 Mon Sep 17 00:00:00 2001 From: gunbc-ci-auto-heal Date: Tue, 29 Sep 2026 11:38:39 +0000 Subject: [PATCH] XL-2: record the caret handoff to the MQ-1 symbol-literal slice on its RFM row Co-Authored-By: Claude Opus 5.5 (1M context) --- .../recurring_failure_mode/caret_symbol_has_no_lowered_form.dag | 1 + 1 file changed, 1 insertion(+) diff --git a/dag/gunbc/recurring_failure_mode/caret_symbol_has_no_lowered_form.dag b/dag/gunbc/recurring_failure_mode/caret_symbol_has_no_lowered_form.dag index 8b12b802578..2600b9834d1 100644 --- a/dag/gunbc/recurring_failure_mode/caret_symbol_has_no_lowered_form.dag +++ b/dag/gunbc/recurring_failure_mode/caret_symbol_has_no_lowered_form.dag @@ -14,6 +14,7 @@ data caret_symbol_has_no_lowered_form: RecurringFailureMode = RecurringFailureMo "THE BELOW-FLOOR INSTANCE, OBSERVED ON main b1b7aea9aa7: `v2.std.compilers.target_model` `ordering_predicate_from_wire_symbol` -- `if id == ^ordering_predicate_is_less {..} else if id == ^ordering_predicate_is_less_or_equal {..}` -- normalizes ACCEPTED, and its normalized tree carries `^dag_token_caret` and neither `^ordering_predicate_is_less` nor `^ordering_predicate_is_less_or_equal`: both conditions lowered to `id == ^`, so two different caret symbols became one node. Bare-operand bodies (`v2.std.grammar` `formal_binding_is_free_name_slot`, `formal_binding_is_lexeme_stamp_slot`; `v2.std.compilers.target_model` `target_model_bundle_core_keep_edge`) still refuse at normalize as `operator_operand_unread`. Measured by a seed-interpreted probe of tokenize -> parse -> normalize (branch probe/snappy-swift-136-mq1-caret @ 2349f5371d4). `v2.compiler.reference_conservation` did not report the drop (gunbc.recurring_failure_mode reference_conservation_population_omits_class_stamped_terminals).", "REFUSED, ONE CAUSE, AT THE CARET (MQ-1 PR-1): `v2.compiler.body_lowering_fold` `body_lower_primary_expr`'s first-atom fallback refuses the caret shape as `body_lowering_reason_caret_symbol_not_lowered`, anchored at the `^` token, so the ten silently-dropping value positions and the bare operand refuse with one cause, pinned by `v2.test.claim.body_lowering.caret_symbol_value_refusal`. The rung on every route is now mitigated (a located refusal); the symbol-literal lowering is the climb.", "RUNG FOUND AT: mitigated (a located refusal) on the operator route; below the floor on the value route. CEILING: structurally guaranteed -- a caret symbol lowers to a symbol-literal value the resolver does not read as a reference, or refuses. NEXT-RUNG TRIGGER, NAMING THE CAPABILITY: v2 body lowering has a lowered form for a caret symbol on every route, distinct from a reference, so no route answers it with its `^` token and no route refuses it as unread.", + "HANDED TO THE MQ-1 SYMBOL-LITERAL SLICE, NOT BUILT IN XL-2 (2026-09-29, sharp-carp-336, ruled by quiet-seal-543). For XL-2 the located refusal is sufficient: a caret is a literal, not a reference the namespace cut can break. Three findings bound the climb. (1) THE NAME TEXT IS NOT IN THE TREE, BY DESIGN: `v2.extdeps.languages.dag` `dag_grammar_caret_symbol_expr` class-stamps the name (`dag_grammar_ident_or_type_decl_modifier_generic_ident_identity`), so every caret literal publishes the generic `^dag_token_ident`. `v2.lens.identity_captured_navigation.analyze` `node_source_symbol_note` states that as a universal property and recovers the text out of band through the span index. The lowering must first stamp that site with its lexeme and rewrite that note. (2) THE TARGET IS THE EXISTING AUTHORITY: `std.syntax` `LitSymbol`, as `v2.workflow.compile_door_cause_ownership`'s caret row states; a new literal form beside it would be a second authority. (3) TYPING IT `Symbol` IS STEP (a) OF `gunbc.symbol_identity_census` `symbol_nominality_next_rung_trigger`, not a separate decision; v2 infer also has no `Symbol` or `String` row in `dag_binding_denotation`, so a declared `-> Symbol` is not checked today. CORRECTION TO THE RECEIPTS ABOVE, MEASURED ON MAIN 88436e585c3: a caret in value position, as a statement-let value and as an operator operand refuses `body_lowering_reason_caret_symbol_not_lowered`, but as the value of an `in`-form let (`let x = ^s in b`) it was ACCEPTED with the caret dropped, because `body_lower_try_let_in_from_captured` reads that value through `body_lower_arm_operand_resolved_optional`. That instance belongs to the first-match readers' consolidation (XL-2 PR-2, bright-boar-848), which reads the let-in value through the one value reader and carries it as a discriminating control.", ], evidence: [