Repository navigation
Stop-line repair: dissolve TargetModel.token_class_emit_transforms fn-values into a declared TokenClassEmitTransform coproduct - #9808
Merged
Conversation
…lared TokenClassEmitTransform coproduct
The Map<Symbol, fn(String) -> String> field carried function values into a
serialized, compared, emitted carrier — the 13 identities opened at hop19
(serde/Debug/PartialEq on dyn Fn, E0308 at every producer construction site)
are that field's unportability surfacing in the mirror. Same dissolution the
render closure field underwent: the rendering is declared rows, not a
function value.
- target_model.dag: TokenClassEmitTransform = EmitSpellingIdentity |
EmitSpellingConstant | EmitSpellingWrap | EmitSpellingQuote{escapes};
apply_emit_spelling_transform interprets the coproduct at the two lookup
sites; escapes apply in list order.
- POSIX single-quote encoding stays single-homed: delimiter and escape
encoding become data rows in extdeps.posix.shell_command_language;
posix_single_quote and bash's transform row both derive from them.
- Producers converted to rows: sql_target, sql_create_table_fold,
gha_workflow_yaml_fold, bash, bash_command_fold, verilog,
rust_test_fixtures. Dead sql_kind_emit_transform deleted.
- bash_single_quote_spaced / rust_string_literal_spelling survive as
derivations of the same rows their emit maps carry.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GXfYKNQTD3VfYyQcnJpxNU
… reaching the host replace builtin The interpreter's escape fold called the v1 host replace, which has no v2-text realization in the emitted mirror — 2 new E0308 rows at the call site. Replacement is split-then-join over the same nonempty-needle carrier string_split already uses, purely structural, plus two discriminating tests in the enrolled text battery. Empty-from escape rows pass through with the ceiling and climb trigger annotated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GXfYKNQTD3VfYyQcnJpxNU
This was referenced Aug 31, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stop-line repair for obligation 3 (#9710 post-merge qualification): the 13 open identities PH's x86 chain introduced at hop19 all hang off
TargetModel.token_class_emit_transforms: Map<Symbol, fn(String) -> String>— a function-valued field in a serialized, compared, emitted carrier. This PR dissolves it into a declared data coproduct, per the model's own render-closure precedent (the rendering is declared rows, not a function value).MergeAcceptanceCensus evidence (7 points)
1. Consumers — the 13 published identities, all of them. Roster: #9710 comment 5476687306 (sha256
df5d42dad933…). Membership join stated below; this PR targets exactly that set.2. Causal producer on main:
v2.std.compilers.target_modelTargetModel.token_class_emit_transforms(fn-valued map field), effective on the board since the hop19 emitted one-line field-type correction (47a5ae2) made the arrow realization chain reach it — NewlyExposedByEarlierRepair, 0/15 rows on parenta6d6c68's 213-row board.3. Same-identity removal, by identity. xl0b34 validation cycle at exact head
6b06de448a3, identity key (file,line,col,code,message), baseline = xl0b31 landed-main board (173 rows): REMOVED 19, ADDED 6, HEAD 160. The 19 removals = the 13 targeted identities (target_model.rs 317:35, 317:53, 322:38, 322:5 E0277-Debug, 322:5 E0369, 351:34, 718:161, 728:161 + languages_dag.rs 1362:34, 1651:34, 2946:34, 2955:34, 3280:34) + 6 line-relocations of pre-existing untargeted rows (2567→2607, 3967→4007, 642→669, 709:48→736:48, 7185:90→7225:90, 7942→7982 — identical col/code/message, shifted +27/+40 lines by the inserted type declarations). The 6 ADDED rows are exactly those relocation partners, 1:1, no other additions.4. Repair provenance per removal: producer
target_model.token_class_emit_transforms; repair commits1506d657e53(coproduct dissolution + producer conversion) and6b06de448a3(structuralstring_replace, removing the interpreter's host-builtin call). PH reruns from hop14 with this PR as the closure provenance; the 6 relocations re-key under a relocation disposition (same identity class, line shift only).5. No new unadmitted identity. ADDED = the 6 relocation partners only. An intermediate cut (xl0b33) briefly introduced 2 rows at 739:85 from the interpreter calling the host
replacebuiltin; commit6b06de448a3removed them by realizing replacement structurally (split-then-join inv2.std.text) — final board carries zero new-class rows.6. Byte-converged and green at exact head: xl0b34 on
6b06de448a3: byte fixed point at round 1, PATCHBYTES 0 (the repair touches only the v2/dag corpus; no stage0 mirror change), 602/602 lib tests, witness batteries 43/43 + 14/14 + 20/20, and all five CI checks SUCCESS on this head.7. No unrelated residue — per-file causal justification:
std/compilers/target_model.dag— the producer: coproduct + interpreter at the two lookup sites.extdeps/formats/sql_target.dag,sql_create_table_fold.dag,extdeps/languages/gha_workflow_yaml_fold.dag,bash.dag,bash_command_fold.dag,verilog.dag,rust_test_fixtures.dag— the seven producers of fn-valued transform maps feeding the dissolved field; each converted to coproduct rows (compile-broken otherwise). Deadsql_kind_emit_transform(zero consumers) deleted as part of the same dissolution.dag/extdeps/posix/shell_command_language.dag— the POSIX single-quote encoding cited by bash's transform: delimiter/escape become data rows so the encoding stays single-homed (bash's row andposix_single_quoteboth derive; §3 forbids re-spelling it in the bash row).std/text.dag+test/std_text/carrier_claims_test.dag—string_join/string_replace(structural, no host builtin) required by census point 5, plus the two discriminating tests that are their executing evidence.arm64/x86 membership reconciliation (manager condition 1)
PH's published x86 13 ⊂ my arm64 introduced-at-hop19 15 exactly, 13/13 at (file,line,col,code) grain. My 2 extra rows (
v2_std_integer.rs1356:25, 1514:23 E0308) are present on the x86 171 board too — the delta is hop-attribution grain (my instrument is a coarse b14-vs-b19 diff spanning burned hops 15–18), not membership. They are text-family, outside this repair's scope, and remain with XL-0T's family.Merges OUTSIDE the XL-0 hold as the sole census exception per the side-chat ruling.
🤖 Generated with Claude Code
https://claude.ai/code/session_01GXfYKNQTD3VfYyQcnJpxNU