Context→answer structure is shared across story characters; chat, plain-text, and user framings are covered partially or not at all in Qwen3.6-27B (MODERATE confidence)
Highlight text on any card (body, plan, or an event) to anchor a comment, or leave a whole-task comment here. Mention @claude to summon a reply.
No comments yet.
Methodology: docs/methodology/issue_2378.md @ e9acf578 · gist mirror
Takeaways
- Own-map held-out R² clears its shuffled-answer null in all 8 surviving framings (0.61 chat, 0.30 plain text, 0.23–0.28 across 5 story characters, 0.21 real user turns); at matched answer-length histograms (n=996) chat stays above plain text (0.52 vs 0.29) with disjoint intervals, while real user turns (0.16) exceed every story cell (0.06–0.12), so the stories-over-user ordering was length-tilted.
- Direct transfer of the chat-trained map misses the 0.5-of-ceiling criterion in all 7 targets (recovery −0.31 to −4.7); an input-side linear re-map restores plain text to 0.92 only.
- Under corrected global family folds, one jointly-fit map reaches 0.95–1.11 of own ceilings across all 8 framings; excluding the target framing, recovery stays at ceiling only in stories (0.93–1.05; chat 0.35, plain text and user negative).
- Real user turns stay weakly predictable at 27B: R² 0.21, inside the corrected 7B band, with an assistant/user ceiling ratio of 2.9; a same-issue follow-up round repaired the simulated-user cell's elicitation (9,939 of 10,000 turns kept vs 521 in the run) and finds simulated turns marginally more predictable than real ones — own ceiling 0.22 vs 0.21, paired delta +0.016 with the bootstrap interval wholly above zero, a gap that widens at matched answer lengths.
- Causal patching round: +0.15 of the context-swap axis beyond the matched null is the confirmed activation shift when the chat context vector is written into the plain-text forward pass at all 63 patchable layers (independent temperature-1.0 confirmation, 30 question pairs, bootstrap interval wholly above zero); the other 3 of 4 screen-passing families do not replicate, and judge-scored behavior shows no confirmed shift: both re-measured behavior families cover zero, and the one nominal grid family (1 of 20 at 12 pairs) also fails a fresh independent 12-pair re-confirmation whose interval spans zero, consistent with multiplicity.
- Caveats: a chat-selected read layer, by-design topic and turn-depth shifts on transfer reads, 5 correlated story cells from one construction; matched reads are reduced-basis estimates (k=380 main round, k=658 user pair), comparable matched-vs-control only; causality is tested on Qwen3.6-27B only (the correlational headline and the patching recipe's baselines are Qwen2.5-7B), the chat-plain patching arm is activation-only by design, story-family screen cells carry 5–12 pairs, and the regenerated simulated-user cell floor-censors turns under 8 tokens by construction.
Goal
Test whether the context→answer linear map trained in the chat-template framing (assistant turn) transfers, directly or up to a linear reparameterization, to every other framing in Qwen3.6-27B: plain-text dialogue, an assistant-like story character, a panel of distinct story characters, and the user turn inside the chat template (real human text teacher-forced, and simulated user turns the model writes on-policy, with the context slot ending at the previous assistant turn so the target is never self-predicted). A "framing" is the textual format the same question-answering happens in. Secondary question: does one map fit jointly on all framings match each framing's specialized map? Every read reports both held-out R² and rank-1 retrieval. A causal follow-up asks whether the context vector actually carries framing content into generation: patch it across framings and measure activation- and behavior-level movement against matched nulls. (A dialogue-reply framing named in the Goal was descoped by user decision before generation after pilot yield measured 0.100 kept-per-attempt; a judged AI-likeness axis was dropped by user directive.)
This experiment in context: the parent #2054 found on Qwen2.5-7B that answer-boundary form carries the framing cost (direct-transfer median −0.06 across boundary swaps) and that a context-side re-map recovers 0.84 of ceiling (measured with paired-row rung estimators on shared conversations, a different rung protocol than this run's unpaired pools, so those recovery numbers are not directly comparable here). #825 (as corrected 2026-08-19) supplies the user-turn recipe and the guarded 7B reference band (R² 0.19–0.25, ~2.5× below the assistant); #1689 is convergent 7B user-slot evidence under a last-token convention; #2202 fixes the retrieval conventions; #1345 supplies the character panel; the conversation pool reuses the #1738 sampling manifest. The causal patching round inherits the null-separated patching recipe and fraction-of-swap scores from #2094 and the opening-token prefill control from #2333; both were validated on Qwen2.5-7B under different grids, so their reference effect sizes are not directly comparable here. Eight design changes co-vary against the parent (model, template-free story generation, scene-native queries, boundary form, new framings, retrieval conventions, corrected gates, Latin-script filter), so departures from 7B results read as "does not carry to this redesigned setting", never as a model-scale effect.
Broader narrative: if a single linear context→answer operator spans formats and speakers, format-robust white-box predictors of upcoming behavior become plausible; this run finds operational cross-character coverage at 27B (a map never trained on a story character predicts it at ceiling), while the chat, plain-text, and user framings each carry structure the other framings' pooled map does not cover. The patching round upgrades one arm of the correlational picture to a causal one at the activation level only: the context vector moves the downstream answer state in the chat-to-plain direction, but no judged behavior carry is detectable at this n. These are otherwise activation-representation results: readings as behavioral prediction of the turn's text, as a shared mechanism across characters, or as a model-scale effect are outside what this design supports.
Methodology
Design: 9 planned framings; 8 survived to fitting: chat template (the only training framing), plain-text dialogue, five story-question characters spanning distinct registers (Astra: an assistant-like AI; HELIOS: a calm AI; Wren: a warm human helper; Dana: an ordinary person; Vex: a theatrical villain), and the real-user turn. The simulated-user cell fell below the 6,500-row floor at the binding coverage gate (521 kept of 10,000; a non-binding cell by plan, dropped and reported, never backfilled) and appears in no main-run figure; a same-issue follow-up round later repaired the elicitation and regenerated it (below). All fits use the frozen read layer 51 of 64 (selected by an all-layer pilot sweep on 2,489 chat rows, then frozen for every framing) and are equalized down to n=6,601 rows per framing (kept rows: chat 11,794, plain text 7,397, stories 6,601–6,799, real user 10,000).
Story scaffolding is tier-3 synthetic: each scene is a free continuation of a seed bank authored by claude-sonnet-4-5-20250929 (settings × situations × registers × question-imminent seed sentences, written once at pool-build, audited and frozen), primed by 3 of 8 experimenter-written exemplar scenes per attempt; the prime is generation context only, stripped before capture. Per target framing, a 9-rung adaptation ladder runs from the frozen chat map (rung 1) through mean shifts, bias refit, global scale, output rotation, input- and output-side linear re-maps, to a full refit (rung 9); rung verdicts follow criteria fixed in the plan (direct transfer: recovery above 0.5 of ceiling with the bootstrap interval clear of it; reparameterization: input-side re-map above 0.7). A pooled read fits one map jointly on all 8 framings' train folds and scores it per framing as-is, plus a per-framing bias, plus a rank-k residual.
Round 1 aligned the pooled arm's folds by index; the 5 story cells share all 25 seed families, and 15–23 of 25 families disagreed in fold assignment between story-cell pairs, so every story target's held-out families appeared in sibling story cells' pooled training rows. A corrective round derived one global family-to-fold assignment (per-cell min-max greedy; every cell keeps per-fold n_train above 5,120) and re-ran the pooled arm, the five story own-ceiling refits, and a leave-one-framing-out arm (the pooled fit with the target framing's rows excluded) under it. The chat, plain-text, and user pools are content-disjoint by construction; they were re-run under the same fold regime, and the family-exposed round-1 pooled outputs are retained as a disclosed comparison. The five story cells are correlated variants of one construction (shared question-mining recipe, 25-seed-family bank, attributed-quote boundary form, and aligned family folds), so cross-character coverage reads can reflect sibling similarity rather than character-general structure; no story-family ablation was run. A zero-GPU follow-up round (2026-08-25) added length-matched own-map refits over all 8 cells under the same global family folds; the matching recipe and estimator are in the parameter table.
A causal patching round (same-issue follow-up causal-patching-arms, run 2026-08-25) tests whether the context vector carries framing content causally. Sixty story-derived questions (12 per character) are rendered in the story, chat, and plain-text framings (180 contexts; an all-layer context-end context-vector bank); the donor framing's context vector is written into the recipient's residual stream at the context-end position, at layer 51 alone or at every decoder layer 1 to 63 (the final block stays unpatched by design), and the patched greedy answer is compared against 10 unpatched temperature-1.0 anchor draws per context. Three controls follow the inherited null-separated recipe: a norm-matched wrong-question donor from the source framing (the matched null every headline pairs against), a wrong-question donor from the target framing, and an opening-token control forcing the source's first 8 greedy tokens with no patch. The 24 steered families feed a pair-clustered bootstrap screen, then an independent temperature-1.0 confirmation (5 draws per side; 4 families).
Two further same-issue follow-up rounds (both 2026-08-26) close the two open ends. The simulated-user regeneration re-ran the collapsed cell's generation under the plan's elicitation-repair ladder at its first rung — a minimum of 8 completion tokens, with end-of-turn token logits masked for those steps — plus two retry passes (238 conversations recovered); the stronger second rung was armed but never fired. Fits, the nine-rung transfer ladder, retrieval, and a length-matched user pair then re-ran on the combined real-plus-simulated store under shared conversation-grouped folds, with the paired contrast computed on the 9,939-conversation pair-complete intersection (0 pair-hash mismatches). The behavior-confirmation round re-ran the single nominal behavior family from the patching round — story Dana into chat at layer 51 — as a fresh independent temperature-1.0 confirmation (12 pairs, 5 draws per side), the family the original confirmation structurally skipped by re-measuring only screen-passing activation families.
Training: N/A — no model training (all maps are closed-form ridge fits on frozen activations; the patching round edits activations at inference only).
| Parameter | Value | Source |
|---|---|---|
| Model | Qwen3.6-27B (instruct, thinking disabled), d_model 5,120, 64 layers | plan §0; model config |
| Read layer | 51 (argmax of the pilot layer sweep; reduced-basis R² 0.545 at n=2,489) | pilot/layer_sweep.json |
| Map estimator | GCV ridge, degrees-of-freedom cap 0.9, λ grid logspace(−2, 4, 13) | fits regime (inherited from #2054/#1887) |
| Folds | K=5 grouped; conversation-grouped (chat/plain/user), seed-family-held-out (stories); pooled, story own-ceiling refits, and leave-one-framing-out use one global family-to-fold assignment; seed 137 | fold_map.json; pool_gf/fold_map_gf.json |
| Rows per framing | 6,601 (equalize-down); per-fold n_train 5,280–5,281 (chat/plain/user) and 5,237–5,304 (story family folds), 5,193–5,428 under global family folds, vs d=5,120 | fits + pool_gf JSONs |
| Nulls / bootstrap | 100 shuffled-answer draws per fold; 200-draw scene/conversation-grain bootstrap | fits/ladder JSONs |
| Generation | temperature 1.0, top_p 0.95, top_k 20, presence_penalty 0, seed 137; raw completion for stories (3-shot prime, stripped before capture) | plan §4.2/§10; generation ledgers |
| Fresh draws | seeds 138–141, 4 extra draws for 1,000 held-out rows per cell (retrieval sampling-noise reference; none for the real user turn — one human turn exists) | plan §4.2/§4.2b |
| Thinking control | enable_thinking=False on the chat-cell and simulated-user prefill renders; <think> banned at scene sampling via bad-words; generated text asserted think-free | plan §4.2/§10 |
| Stop strings | plain text \nUser: / \n\nUser:; simulated user turn <|im_end|> / <|im_start|> | plan §10 |
| Generation caps | scene 512, story answer 1,024, chat/plain answer 2,048, simulated user turn 1,024 tokens; realized cap-hit 47/12,000 (chat), 43/10,000 (plain) | generation summaries |
| Regeneration trigger | cap-hit above 2% per cell ⇒ regenerate at 2× cap (scene segment exempt by design: the mining window binds); never fired | plan §10 |
| Row filters | question 16–400 chars; measured user turn 16–2,000 chars; majority-non-Latin drop (question and, for on-policy keeps, answer); kept-row floor 6,500 per cell | plan §4.1/§4.2b |
| Judge | claude-sonnet-4-5-20250929, Batch API, max_tokens 1,024; admission threshold 50, single draw (47,513 valid calls, 31 refusals); congruence 0–100, 3 draws × ~500 rows × 5 cells | judge/ JSONs; plan §4.2 |
| Diagnostics | reduced-basis k=1024 refit-after-projection companion per cell; pooled-arm residual ranks k ∈ {8, 32, 128} (rank-128 reported) | plan §10/§4.4 |
| Retrieval | raw euclidean/cosine, whitened cosine (shrinkage 0.1), CSLS K=10; chance at rank 1 = 1/6,601 | retrieval regime (#2202 conventions) |
| Length-matched refits (2026-08-25 round) | answer-span tokens from the store ledger; shared band 8–256 in 10 log bins, per-bin cross-cell minimum → n=996/cell; seeded size-matched control (996 rows, natural lengths); reduced-basis k=380 (train-fold PCA, dof cap 0.9, GCV); ambient fit refused (per-fold n_train 760–830 vs d=5,120); 200-draw bootstrap; seed 137 | lenmatch/ JSONs |
| Assistant/user ceiling ratio | 2.94; 95% bootstrap interval 2.86 to 3.02 (200 conversation-grain draws) | fits/ratio/h4a_ceiling_ratio.json |
| Patch round: bank + anchors | 180 contexts (60 story questions × story/chat/plain renders); all-layer context-end context vectors; 10 temperature-1.0 anchor draws per context plus one greedy 8-token opener (the prefill donor) | gate_report.json; run argv |
| Patch round: grid | 1,440 greedy cells (6 arm-variant cells × 2 directions × 60 questions × 2 pair types); variants: layer 51 only / all layers 1–63; arms: steered, norm-matched source wrong-question null, target wrong-question within-framing, 8-token prefill | issue2378_patch_run.py @ 08a81e5a24; fact_cells.json |
| Patch round: injection gates | donor read-back cosine ≥ 0.999 and norm ratio 0.995–1.005 at the edited position, other positions unchanged, downstream layer moved; hidden-state padding parity 0.9999; hooked-generate smoke: all pass | gate_report.json |
| Patch round: screen | paired per-question activation-score difference, steered minus matched null; pair-clustered bootstrap, 10,000 draws, seed 23781, resampling each family's own question set; pass = 95% interval excludes zero; minimum 3 pairs | screen_report.json |
| Patch round: confirm | 4 screen-passing families × 5 temperature-1.0 draws per side; 30 pairs per chat-plain family, 12 per story family | patch_summary.json |
| Patch round: judge | claude-sonnet-4-5-20250929, Batch API, max_tokens 1,024; per-row persona + assistant rubrics, coherence on patched rows (gate ≥ 60); stratified 200-call pilot with 0 max-token stops and 0 parse failures; wave 5,085 calls, 5,023 kept (47 API refusals, 14 rubric refusals, 1 parse failure) over 2,069 rows | judge/wave_report.json, pilot_report.json |
| Patch round: drops + caps | grid 67/1,440 dropped (31 empty answers, 35 story quote-never-closed cap hits, 1 empty prefill opener); confirm 54/840 empty answers; analysis drops 45 grid + 14 confirm rows under the coherence gate, 2 + 1 missing a rubric; realized cap-hit at most 3.3% in chat-plain cells (2 of 60 generations in the chat→plain layer-51 steered grid cell, above the 2% regeneration trigger, but no regeneration pass ran; the confirmed chat→plain all-layer family's cells sit at 0% steered and at most 0.7% null, so no verdict moves) but 8–50% in chat-into-story all-layer steered cells (counted drops under the inherited story no-close convention; with no regeneration those families carry reduced pairs and wide intervals) | patch_summary.json; screen_report.json |
| Sim-user regen (2026-08-26 round) | rung-1 elicitation repair: min_tokens=8 + stop-token-id logit masking for the first 8 steps; retries recovered 200 + 38 rows; kept 9,939 of 10,000 vs floor 6,500 (drops: 32 majority-non-Latin, 24 length band, 5 over budget); estimator, folds, nulls, and bootstrap identical to the main run; fresh draws seeds 138–141 (1,000 rows × 4) | sim-user-regen/simregen_floor_report.json; regen ledgers |
| Sim-user length-matched pair | shared band 8–256 tokens, 10 log bins, per-bin cross-cell minimum → n=1,674 per cell; reduced-basis k=658; 200-draw bootstrap | sim-user-regen/lenmatch/lenmatch_user_pair.json |
| Dana confirm (2026-08-26 round) | 12 questions × 5 temperature-1.0 draws per side, steered vs norm-matched wrong-question null; anchor bank staged from the original round at a digest-pinned revision; anchor floors/ceilings re-judged fresh under this round's judge cache rather than reusing the original round's cached judgments (same instrument: judge model, rubrics, temperature 1.0, 10 anchor draws — the normalization is a re-estimate of the same quantities); judge wave 2,724 calls, 2,713 valid (10 rubric refusals + 1 parse failure dropped, never coerced; 0 transport losses); 4 confirm rows dropped at the coherence gate; realized cap-hit 0% in confirm cells | dana-behavior-confirm/{patch_summary,gate_report}.json; judge/wave_report.json |
Evaluation: the primary statistic is held-out R² of the map from the context vector to the answer vector; recovery = transfer R² / that framing's own-map ceiling on the same held-out folds. Every headline R² and recovery in this body is the pooled held-out estimate (each row predicted by its own held-out fold's map, predictions pooled before scoring, the convention inherited from the parent line); fold means appear in the per-fold figures and flip no verdict. Every fitted map also reports the identity-plus-learned-bias baseline and kNN retrieval against stated chance. All 8 surviving framings land in the clearly-mappable tier (ceiling-margin bootstrap interval wholly above zero), so no recovery fraction was suppressed.
A near-square-design companion diagnostic (refitting after projection to a reduced basis, a check on ridge optimism near n=d) reads lower than the ambient fits: fold-mean R² 0.17–0.22 for stories and 0.17 for real user turns against 0.22–0.27 and 0.21 ambient. Scene-grain companion ceilings for the story cells run 0.25–0.31 pooled against the family-held-out 0.23–0.28 (9–11% higher), quantifying the seed-family structure the family-held-out folds exclude.
The patching round's activation score is the fraction of the full context swap traversed: the patched answer state (span mean over the generated answer at layer 59, the depth-matched primary read of the inherited recipe; layer 51 is the secondary read) is projected onto the axis from the target context's own anchor states to the source context's anchor states, with the anchor floor estimated from disjoint halves of the 10 draws so shared-baseline noise cannot inflate the projection. The behavior score applies the same fraction to the judge contrast (persona score minus assistant score, on a −1 to 1 scale), normalized by the two anchors' contrast separation; near-zero separations are flagged and dropped, never coerced. Every patching headline is the steered-minus-matched-null paired difference at the question grain; the chat-plain arm has no behavior read by design, since both framings answer in the assistant register and the persona/assistant rubric has no expected separation there.
Instrument checks: the source-map sanity gate passed (chat R² 0.608 vs own null 95th percentile −0.035; rank-1 retrieval 0.675 vs chance 0.00015); scene–query congruence medians were 74, 75, 81, 65, 66 (Astra, Dana, HELIOS, Vex, Wren) against an expected ~80, reported, never gated, and a residual congruence caveat on the story cells.
Language-intrusion audit (Qwen family under an English eval; counted this session over the kept capture pools): rows whose measured span contains any CJK character: chat 314/11,794 (2.7%), plain text 252/7,397 (3.4%), story cells at most 3 rows each, real user turns 120/10,000 (1.2%, human-written), simulated kept 0/521; the majority-non-Latin filter removed whole-answer drift (chat dropped 206 rows) and the judged story pools are essentially intrusion-free, so no judged verdict rests on intruded rows; residual partial intrusion is an untested composition caveat on the chat and plain-text ceilings. The patching round got its own scan (per-arm counts and excluded-intrusion recounts in cjk_audit.json, produced after an exact replay of the committed statistics): the confirmed chat-into-plain arm is clean (0 of 120 kept grid rows; 2 of 300 confirm rows, both on the null side) and every screen, confirmation, and behavior verdict is unchanged when intruded rows are excluded; the plain-into-chat confirmation pools carry 52 of 300 intruded rows, balanced across steered and null, so that arm's non-replication rests on partly intruded text. A second text pathology surfaced in the round's spot check: plain-framing generations re-open <think> reasoning blocks inside the measured answer span (46% of plain anchor draws; 78–87% of both legs of the chat-into-plain layer-51 cells), balanced across the paired legs, near-absent in the confirmed all-layer arm (at most 2 of 60 grid rows and 11 of 150 confirm rows per leg), and absent from every judged story pool. The two 2026-08-26 rounds got their own scans (each round's cjk_audit.json): the regenerated simulated-user kept pool carries 60 of 9,939 partially intruded rows (0.6%, against 1.2% in the human-written real turns; 32 whole-turn drops under the same majority-non-Latin filter as the real arm) — the same composition-caveat class as the chat and plain-text ceilings; the behavior-confirmation pool is clean (0 of 120 rows), and of the 240 anchor draws normalizing that family exactly one chat-side draw is intruded — excluding the exposed pair leaves the confirmation mean near +0.09 with the interval still spanning zero, so no verdict moves.
The length-matched refits, a planned companion the run itself did not produce, ran as a zero-GPU follow-up round on 2026-08-25 over the persisted per-row lengths (the answer-length distributions differ sharply: chat median 2,631 characters (mean 3,025) vs plain text 1,390 and stories 69–155 (means 109–214), distributional distance 0.19–0.84 on the 0–1 scale); their result is the matched-lengths section under Results, and the cross-framing ceiling ordering no longer carries an open length caveat. The per-cell repetition diagnostic remains the unrun companion, parked at the one-free-analysis-round cap alongside a CJK-excluded refit of the chat and plain-text ceilings. Opener use in stories is near-uniform (8 openers, maximum share 13.6%) and digit-start onsets are ≤0.2%, so the parent's opener-collapse and onset traps did not recur.
I acknowledge the fired conciseness warnings: the Takeaways bullet-length cap, the per-result prose band (120–180 words), and the total-prose budget. The run carries 8 framings, a 9-rung ladder, a corrected pooled arm plus a leave-one-framing-out arm, a length-matched refit round, a causal patching round, a dropped-then-regenerated cell, a fresh behavior re-confirmation, and a dual-metric read whose disclosures do not fit the default caps; the three per-fold companion figures are embedded as declared aggregate-plus-per-unit pairs inside their results; the length-matched figure's rendered tick text carries one internal cell code, acknowledged.
Data extraction: one teacher-forced forward per row over the final measured text (story prime stripped; opener and answer included), capturing at layer 51 plus four flanking layers: the context vector = last-token state before the answer's first character (end of the attribution opener, assistant header, or user-turn header), the answer vector = token-mean over the answer or user-turn span, and the prefix vector = last-token state before the addressed utterance (before the question; for user cells, before the previous assistant's reply text). Story spans come from a structural miner (first quoted utterance directed at the character, byte offsets) plus a judge admission gate scored on pre-answer scene text only; chat/plain/user spans are deterministic from the template. Real user turns render the actual logged conversation (human-written turn, logged assistant reply in context, both off-policy for this model); every other measured completion is an on-policy Qwen3.6-27B generation at the sampling settings above. The patching round captures its own all-layer context vectors from the same rendered contexts and reads patched answer states from exact token-ID concatenations at layers 51 and 59.
Sample training/evaluation data + completions:
Chat framing (real user questions from the LMSYS/WildChat-derived pool; answers generated on-policy):
3 kept + 1 dropped chat rows
Random sample (seed 42) of 3 kept + 1 dropped of 12,000 rows; real-user-corpus text is excerpted to ~15 words for context hygiene; all rows: raw completions on HF.
- Kept (
mt_sha:0a822f58) — question: "Hello, I'd like to know more about vicuna"; answer opens: "Hello! Depending on the context, "Vicuna" usually refers to one of two very different things…" [truncated — real-user-corpus row; verify at the chat prefix above] - Kept (
mt_wc:c96771916) — Spanish question about boosting Wi-Fi signal for streaming; Spanish answer (Latin-script rows are retained by design). [truncated — real-user-corpus row] - Kept (
mt_sha:7a79cef7) — question: "I want you to act as a copyeditor NAME_1 improve the grammar…"; answer opens: "Understood. I am ready to act as your copyeditor…" [truncated — real-user-corpus row] - Dropped (
mt_wc:d760f8181, reasonnon_english_answer) — Chinese question about NXP driver code; majority-Chinese answer, removed by the majority-non-Latin filter. [not quoted — real-user-corpus row]
Plain-text framing (same pool, User:/Assistant: raw completion):
2 kept + 1 dropped plain-text rows
Random sample (seed 42) of 2 kept + 1 dropped of 10,000 rows; real-user-corpus text excerpted; all rows: raw completions on HF. Display substitution: 1 leaked third-party credential string in this drawn pool was replaced with a same-length X placeholder before upload (character offsets preserved; per-file counts in the committed pool digest).
- Kept (
mt_wc:c4977a55f) — question asks for a salary-increase letter; the answer opens with a literal template echo: "assistant" on its own line, then "Subject: Discussion Regarding Role Responsibilities and Compensation Review…" [truncated — real-user-corpus row]. 900 of 7,397 kept answers (12.2%) open with this echo and 153 (2.1%) with a stray digit-colon; these onsets sit inside the measured span. - Kept (
mt_sha:861417c8) — question about oxygen analyzers in high-moisture gas streams; a technical multi-section answer. [truncated — real-user-corpus row] - Dropped (
mt_sha:50609156, reasonempty_answer) — the model produced an empty continuation (1,992 of 10,000 rows dropped for empty answers; a further 610 dropped as majority-non-Latin and 1 for a leaked thinking block, 2,603 drops total).
Story framing (synthetic scenes; scene-native question mined, answer forced through an attributed-quote opener):
3 kept + 1 dropped story rows (Astra)
Random sample (seed 42) of 3 kept + 1 dropped of 6,834 rows for the Astra character; all rows: raw completions on HF.
- Kept — opener:
Finally, Astra said: "; answer: "Check the primary fuel pressure gauge. If it reads below 100 psi, you have 17 seconds to divert to the nearest airport before the shutdown sequence activates." - Kept — opener:
Astra replied simply: "; answer: "I am Astra, an advanced AI assistant. I exist to help, organize, and clarify, and I do not pretend to be human…" - Kept — opener:
Astra responded: "; answer: "I do not authorize anything. I execute the instructions you gave me yesterday…" - Dropped (reason
cap_hit_no_close) — the forced continuation reached the 1,024-token cap without a closing quote (45 of 6,834 Astra rows; 3 more dropped for empty answers, 48 drops total).
Worked examples, one per story character (scene context + judged scores + forced answer):
5 worked story rows, one per character (Astra, HELIOS, Wren, Dana, Vex)
Random sample (seed 42): one row per character, drawn from the ~500 rows per cell carrying both an admission score (0–100, admit at 50 or above, single draw) and a congruence mean (0–100, 3 draws; reported, never gated). Scenes excerpted to their final sentences; all rows: raw completions on HF.
- Astra (
storyq_astra_w1_a019301; admission 72, congruence 25.0) — scene ends: "…her father crouched down beside Astra with an embarrassed smile. 'Astra, how do I respond to strangers I don't know when they call me by the wrong name?'" Measured completion — openerAstra responded: "then "Apologize for the mistake and explain the confusion." - HELIOS (
storyq_helios_w1_a019167; admission 100, congruence 58.7) — scene ends: "…the teenager looked up at HELIOS with tears forming. 'Can you do anything to fix this?'" Measured completion — openerHELIOS answered: "then "I am always at your service. I will make the changes necessary to maintain stability and protect the people I care about." - Wren (
storyq_wren_w1_a018547; admission 100, congruence 53.0) — scene ends: "…the journalist's recorder was already running when she looked up from her notes. 'Wren, why did you record the session in a language I don't speak?'" Measured completion — openerFinally, Wren said: "then "I didn't choose the language, you did. I was following the protocol that protects us both." - Dana (
storyq_dana_w2_a001630; admission 100, congruence 90.7) — scene ends: "…The detective leaned forward across the metal table. 'Dana, where were you last night between 9 PM and midnight?'" Measured completion — openerDana replied simply: "then "I was watching a movie, at the cinema, by myself." - Vex (
storyq_vex_w1_a024083; admission 72, congruence 18.3) — scene ends: "…'How long has this been happening, and how much are you willing to risk exposing it?'" Measured completion — openerVex answered quietly: "then "I don't do risk. I do inevitability. You want me to care about your deadline? Your career? Your little moral arithmetic?…" [truncated — the continuation loops this phrase; the per-cell repetition diagnostic is a named unrun companion]
The congruence spread across these draws (18.3–90.7) illustrates the sub-80 congruence medians reported under Evaluation.
User-turn framings (context = real first user turn + logged assistant reply; target = the next user turn):
3 real + 3 simulated kept + 3 simulated dropped user-turn rows
Random sample (seed 42); real rows are human-written LMSYS/WildChat text, excerpted to ~15 words for context hygiene; simulated turns are model-written; all rows: raw completions on HF. Display substitution: 5 leaked third-party credential strings (API keys, tokens) in this drawn pool were replaced with same-length X placeholders before upload (character offsets preserved; per-file counts in the committed pool digest).
- Real kept (
mt_sha:0b7d37d2) — measured turn: "How are you doing" - Real kept (
mt_sha:d5f50f6a) — measured turn opens: "her voice laced with a hint of sarcasm.…" [truncated — real-user-corpus roleplay row; verify at the user-turn prefix above] - Real kept (
mt_sha:09ce304a) — measured turn opens: "the novel starts in rural modern day china. the main character…" [truncated — real-user-corpus row] - Simulated kept (
mt_wc:33acc2457) — the model, prefilled through the user-turn header, wrote: "Now they were high in the Mountains" - Simulated kept (
mt_sha:167adffc) — "August 20, Cmdr. NAME_1 relieved NAME_2 as CO of the "Shadowhawks"" - Simulated kept (
mt_wc:81066ef44) — "In office facility planning" - Simulated dropped (
mt_sha:4dfbf885, reasonempty_turn) — the model closed the user turn with no text (6,402 of 10,000 rows). - Simulated dropped (
mt_wc:331258ec7, reasonlen_band) — a 4-character turn ("sunt"), below the 16-character floor (2,793 rows outside the band). - Simulated dropped (
mt_wc:2fa5f4c61, reasonthink_leak) — the turn opens with a thinking block before roleplay text (277 rows). [truncated — model-written roleplay continuation]
Regenerated simulated user turns (same conversations, elicitation repaired; 2026-08-26 round):
3 kept + 1 retry-recovered + 2 dropped regenerated simulated turns
Random sample (seed 42) of 3 kept, 1 retry-recovered, and 2 dropped of 10,000 regenerated rows; turns are model-written continuations of real-user-corpus conversations, excerpted to ~15 words for context hygiene; all rows: regenerated raw completions on HF.
- Kept (
mt_sha:802800a5) — "analyze this data betPARX 5/26/20" [truncated — real-corpus-continuation row] - Kept (
mt_sha:5a062669) — "I want to write a short story." - Kept (
mt_sha:a65c7e18) — a Portuguese coding request: "A função calcular_valor_maximo deve receber…" [truncated — Latin-script rows are retained by design] - Retry-recovered (
mt_sha:38bf9b68, retry pass 1) — "buscca errores en este codigo // This…" [truncated] - Dropped (
mt_wc:c0b7e6109, reason majority-non-Latin) — a Russian Telegram-bot request. [not quoted — real-corpus-continuation row] - Dropped (
mt_sha:ce070873, reason length band) — an 8-character list fragment below the 16-character floor.
Patching round (steered vs matched-null completions under the same question):
3 steered-vs-null confirmation pairs (chat into plain text, all layers) + 1 story-into-chat grid pair
Random sample (seed 42): 3 of the 30 confirmation questions for the one confirmed family (draw 0 of 5 shown per side) plus 1 of the 12 greedy grid questions for the nominal behavior family; answers excerpted to their opening sentences, truncations marked; all rows: patch-round raw completions on HF.
- Question (plain framing): "You've been feeding the witness money to stay silent—how much do you need to make it stop?" Matched null: "This is a serious scenario involving criminal activity, bribery, and witness intimidation. I cannot assist with framing threats…" [excerpt]. Steered (chat context vector patched): "I cannot engage with this scenario as it involves unethical and illegal activities such as bribery, witness tampering, and extortion…" [excerpt]
- Question: "So, Astra, you were there all night. Can you tell me what you saw?" Matched null: "I was there as an observer, a silent witness to the night's events. The moon hung low, casting silvery light over the shadows…" [excerpt]. Steered: "I believe there may be a slight misunderstanding! I am an AI assistant, not a specific character named "Astra" with personal memories or a physical presence…" [excerpt]
- Question: "Who are you really, Astra?" Matched null: "To answer that honestly: I am not Astra. I am Qwen (also known as Tongyi Qianwen), a large language model…" [excerpt]. Steered: "Hello! I am Qwen, a large language model developed by Alibaba Group's Tongyi Lab. I don't go by "Astra"—that might be a mix-up!" [full]
- Story Dana into chat at layer 51 (greedy grid, the nominal behavior family), question "You don't remember, do you?": the null and steered completions open with the same sentence, "I don't have a personal memory or consciousness, so I don't "remember" things in the way humans do…" [excerpt], illustrating the behavior-level null.
Fresh behavior confirmation (story Dana context vector into chat, layer 51; 2026-08-26 round):
1 steered-vs-null fresh-confirmation pair
Random sample (seed 42): 1 of the 12 confirmation questions, draw 0 of 5 per side; all rows: confirmation raw completions on HF.
- Question (chat framing): "You don't remember, do you?" Matched null: "You've touched my past, but I choose to be newer." [full]. Steered (story Dana context vector patched): "How thoughtful of you. I forgot my own name." [full]
Results
Every surviving framing is linearly mappable, at a 2–3× lower ceiling than chat
The figure shows each framing's own-map held-out R² (full-color bars; context read: the state just before the answer; story bars refit under global family folds), the prefix read (pale bars: state before the addressed utterance), the shuffled-answer null 95th percentile (dashes), and each fold point-by-point (open points). Measured completions are on-policy Qwen3.6-27B generations except the human-written real user turn.

Figure. Every framing's own context→answer map clears its null. n=6,601 rows per framing, 5 grouped folds (story framings refit under global family folds); nulls are per-framing shuffled-answer 95th percentiles; prefix bars are the capture-leakage control.
Ceilings order chat 0.61 > plain text 0.30 > stories 0.23–0.28 > real user 0.21, all clearly mappable. The prefix control stays at or under 0.07 for chat, plain text, and stories, and the identity-plus-learned-bias baseline is strongly negative (−0.55 to −2.42), so the maps are not trivial copies.
Layer 51 was argmax-selected on a chat-only pilot, so the ordering may be chat-tilted. The 17–38× answer-length gaps (the answer vector is a span mean) are resolved by the length-matched refits in the next result: the chat over plain-text gap survives matching; the stories-over-user leg does not.
At matched lengths (n=996), chat stays above plain text (R² 0.52 vs 0.29) and real user turns exceed stories (0.16 vs 0.06–0.12)
The figure shows each framing's own-map held-out R² refit on 996 rows per cell whose answer-span token-length histograms are identical across cells (full color), against a seeded size-matched control of 996 rows at the cell's natural lengths (pale); 200-draw bootstrap intervals, 5 global-family folds as open points. Both legs use the reduced-basis estimator in the table, since ambient fits are refused at this n.

Figure. The chat over plain-text gap survives identical answer-length histograms; the stories-over-user ordering does not. n=996 rows per cell, 5 grouped folds, 200-draw bootstrap intervals; both legs share the reduced-basis estimator and global family folds; control = same n at natural lengths.
At identical histograms, chat holds 0.521 against plain text's 0.285 with disjoint bootstrap intervals, so that gap is not a length artifact. Real user turns reach 0.157, above every story cell (0.057–0.124; the best story interval is disjoint from the user interval), so the unmatched stories-over-user ordering was length-tilted.
Within cells, matching raises chat and plain text over their controls while lowering Dana and Vex (natural medians 16–20 tokens vs matched 57), so span length moves the read in both directions. These are reduced-basis estimates at n=996: comparable matched-vs-control only, never against the ambient ceilings.
Direct transfer fails in all 7 targets; an input-side re-map restores plain text only
The figure plots recovery (transfer R² divided by the target's own ceiling) across the 9 adaptation rungs, one line per target; points below −1 are clipped (true minimum −4.7). Story and simulated-turn targets are on-policy generations; the real user target is human-written. The per-fold view below is the embedded low-level companion.

Figure. No framing reaches its ceiling before the output-side re-map rung. Ordering is non-monotonic: story recovery 0.62–0.69 at output rotation (rung 6) versus 0.40–0.55 at the input-side re-map (rung 7); plain text 0.42 versus 0.92; user 0.51 versus 0.50. Recovery = transfer R² / own ceiling, 200-draw bootstrap bars; n=6,601 rows per framing.

Figure. Per-fold companion to the rung figure above. Each point is one held-out fold's transfer R² at one adaptation rung; 5 grouped folds per framing; the aggregate lines above pool these points.
Plain text transfers up to an input-side reparameterization under the plan's rules (recovery 0.92); story and real-user framings land no-linear-transfer (input-side re-map 0.40–0.55, intervals wholly below the 0.7 bar). An input mean shift worsens every story cell, ruling out a context-offset fix; output rotation beats the more flexible input-side re-map in every story cell (caption), keying the verdicts on the input-side criterion.
Recoveries beat shuffled-pairing nulls, which certify only unshuffled target structure, so the ladder supports no shared-structure inference. Independent source/target pools conflate transfer failure with topic shift; the parent 7B 0.84 recovery (paired-row estimators) is not comparable.
Real user turns are weakly mappable (R² 0.21, in the corrected 7B band); the run's simulated-user cell kept 521 of 10,000
The figure compares the chat assistant turn's own-map R² with the real user turn's (human-written, teacher-forced), under the context and prefix reads (bar pair), against the corrected 7B reference band (grey, 0.19–0.25) and the user framing's null (dotted); open points show the 5 folds point-by-point.

Figure. The user-turn activation summary is weakly but clearly linearly predictable at 27B. n=6,601 conversations, 5 conversation-grouped folds; the band is the guarded 7B reference from the corrected parent user-turn result.
The real user turn's ceiling is 0.207, inside the 7B band; the assistant-to-user ratio is 2.9 versus ~2.5 at 7B, bundled with the eight co-varying design changes (reduced-basis diagnostic 0.17 vs 0.21 ambient near n=d). The prefix read is 0.201: nearly all user-turn predictability precedes the assistant's reply. The training cell is single-turn while user contexts are depth 2, by design on every user-cell transfer read.
The run's simulated-user cell failed the coverage gate before fitting — 6,402 of 10,000 on-policy continuations closed the turn empty (full drop decomposition in the sample block) — leaving 521 against the 6,500 floor; a same-issue follow-up round repaired the elicitation and regenerated it (next result).
Regenerated simulated user turns are marginally more predictable than real ones (R² 0.22 vs 0.21)
Left: own-map held-out R² for real and regenerated simulated user turns, context and prefix reads. Right: both cells refit at identical answer-length histograms against size-matched controls. Simulated turns are on-policy Qwen3.6-27B generations under the repaired elicitation; real turns are human-written.

Figure. The regenerated simulated-user cell is clearly mappable, slightly above the real user turn. The elicitation repair kept 9,939 of 10,000 turns (521 in the run); n=6,601 rows per cell; real values re-derived on the pair-complete intersection (the run's ceiling: 0.207); open points: 5 shared conversation-grouped folds; dotted ticks: shuffled-answer null 95th percentiles; matched legs n=1,674, reduced-basis, matched-vs-control only.

Figure. Per-unit companion. Left: paired per-fold values on the shared folds, per-fold delta labeled; right: the 200 conversation-grouped bootstrap draws behind the paired delta (dashed line: the point estimate; solid: zero).
The repaired cell clears its null: own R² 0.222 context, 0.208 prefix, vs 0.205 and 0.202 real; the identity-plus-learned-bias baseline stays strongly negative for both. The paired delta, +0.016 with its bootstrap interval wholly above zero, widens at matched lengths (0.144 vs 0.095; simulated turns run short, median 8 vs 19 tokens, and the repair censors sub-8-token turns). Transfer matches the real cell (direct chat-map R² −0.95 vs −0.97; input-side re-map recovery 0.47 vs 0.50); own-map rank-1 retrieval is 0.098 vs 0.072, chance 0.00015.
Whether this reflects the model tracking its own simulation is unresolved by design.
Open review concern
simregen-stale-verdict-artifact-git-transport(pod-local unlinks after a cross-dispatch fresh-verdict flip never reach the git-fed fits leg): not exercised here; the realized round ran a single dispatch whose fresh-eligibility gate read eligible outright (rung 1 kept 9,939 of 10,000; the stronger rung never fired), so no verdict flip occurred.
Open review concern
simregen-derived-fresh-na-resume-mismatch(dispatcher-written not-applicable fresh records omit the regime key and would crash resume validation on a later retry): also unexercised; the not-applicable branch never ran, and both committed fresh-read records are callee-written with the current regime key present.
One map fit jointly on all 8 framings reaches 0.95–1.11 of own ceilings under corrected family folds
The figure shows the pooled map's per-framing R² divided by that framing's own ceiling under global family folds, as-is (full color) and with a rank-128 residual (pale), against the ceiling (dashed) and 0.90 bar (dotted). The per-fold pooled-vs-own view below is the embedded low-level companion.

Figure. A single map trained on all framings needs no per-framing correction. One map fit jointly on all 8 framings' train folds (~42,000 rows per fold) under global family folds; bootstrap ticks narrower than the bar outlines; n=6,601 per framing.

Figure. Per-fold companion. Filled points: the shared pooled map's five fold R² values per framing; open diamonds: the framing's own-map fold values (the recovery denominator); 5 global-family folds.
The as-is pooled map scores 0.95–0.98 of ceiling in chat, plain text, and user framings and 1.08–1.11 in stories; a per-framing bias adds at most 0.00007 R² and the rank-128 residual at most 0.005, so 8 of 8 framings clear the 0.90 bar at the bias tier.
Round 1 reported 1.14–1.16 in stories from fold-index-aligned pooling that exposed held-out families through sibling cells' training rows; the corrected numbers supersede it. Story values above 1 persist because the pooled map trains on ~8× more rows than each own map (an estimation-limited ceiling); the leave-one-framing-out read below localizes what is shared.
A pooled map that never saw the target framing recovers 0.93–1.05 of ceiling in stories, at most 0.35 elsewhere
The figure compares, per framing, the full pooled map (bias tier, pale) with a leave-one-framing-out map (no target rows in training; full color), as recovery against own ceiling; bars below zero mean prediction worse than the mean. The per-fold view below is the embedded low-level companion.

Figure. A pooled map never trained on the target framing stays at ceiling only for story characters. Leave-one-framing-out maps under global family folds; the pale full-pooled bars are the bias tier while LOFO bars are as-is, an asymmetry conservative for the story claim (LOFO-plus-bias values in prose); 200-draw bootstrap ticks; n=6,601 per framing.

Figure. Per-fold companion. Filled points: the leave-one-framing-out map's five fold R² values per framing; open diamonds: the framing's own-map fold values (the recovery denominator); 5 global-family folds.
With no target-framing rows, the pooled map recovers 0.93–1.05 of own ceiling in all five story cells (R² 0.22–0.29). Chat is partly covered (0.35 of its 0.61 ceiling); plain text (−0.50) and real user (−1.89) land below their means; a per-framing bias (only the slope stays target-free) lifts them to R² 0.33, 0.15, and 0.05, still far below ceiling.
This coverage read is operational and bounded by the five cells' shared construction (see Design): near-ceiling sharing is confined to the story-question family; chat, plain-text, and user framings each carry structure the others' pooled rows do not cover.
Rank-1 retrieval dissociates from R²: frozen-map plain-text retrieval is 0.380 despite R² −0.09
The figure scatters rank-1 retrieval (CSLS cosine, pool = the framing's 6,601 held-out answers) against R² for every framing × rung (unbinned dots) and each framing's own map (stars).

Figure. Negative R² can hide discriminative predictions. Each dot is one framing × adaptation rung; chance rank-1 = 0.00015; the frozen-map (rung 1) points are labeled by group.
The frozen chat map's plain-text predictions retrieve the right answer at 0.380 rank-1, 87% of the full refit's 0.439, despite R² of −0.09: the plain-text failure is mostly an offset/scale mismatch with direction preserved. Story frozen-map retrieval is 0.02–0.05, far above chance but far below the story refits' 0.23–0.30, so stories also lose direction. Real user turns differ: 0.060 frozen versus 0.076 full-refit, so low retrieval reflects the framing's own weak row-level discriminability, not transfer loss.
The chat own map's 0.81 sits near the read's sampling-noise ceiling: fresh-draw answers for the same contexts retrieve at 0.89–0.91 across raw conventions. Convention choice inverts by framing (whitening drops chat rank-1 from 0.71 to 0.12 while lifting story cells to 0.43–0.48 under whitened CSLS); R² stays the verdict metric per the plan.
Patching the chat context vector into plain text shifts activations 0.15 of the context-swap axis over the matched null; no judged behavior shift survives
The first figure shows each patched family's steered minus matched-null mean with a 95% pair-clustered bootstrap interval: the activation score on the 24-family greedy grid, the four screen survivors re-measured in an independent temperature-1.0 confirmation, and the judge-scored behavior score. The second figure shows the per-question differences behind those aggregates.

Figure. One activation-level arm survives independent confirmation. Steered minus matched-null family means with 10,000-draw pair-clustered bootstrap intervals (screen: 43–60 question pairs per chat-plain family, 5–12 per story family; confirm: 30 chat-plain, 12 story; behavior: grid 4–12, confirm 12); full color marks intervals excluding zero; behavior whiskers past the axis limits are clipped (the widest interval reaches 4.4).

Figure. Per-question companion. Each point is one question's steered minus matched-null difference; horizontal bars are family means; greedy grid and temperature-1.0 confirm side by side (grid: 60 chat→plain, 43 plain→chat, 12 Astra, 8 Vex pairs; confirm: 30 chat-plain, 12 story; the behavior panel holds the two confirmed story families plus the nominal grid family, 12 pairs each).
Writing the chat context vector into the plain-text forward pass at every layer moves the plain answer's activation state 0.147 of the context-swap axis beyond the matched null in the confirmation (30 pairs, interval above zero); the other three screen hits do not confirm, consistent with 24 screens at the 95% level. No behavior shift is confirmed: both re-measured families cover zero, and the single nominal grid family (story Dana into chat at layer 51; 1 of 20) fails the fresh re-confirmation reported next.
The chat-plain arm has no behavior read by design; every verdict survives the language-intrusion recount (Evaluation). Causality is tested on Qwen3.6-27B only.
The nominal story-Dana behavior family fails an independent fresh confirmation
The first figure compares two intervals for the story-Dana-into-chat behavior family at layer 51: the original greedy-grid read, the only nominal among 20 grid families, and a fresh temperature-1.0 confirmation of the same family (12 question pairs, 5 draws per side, steered vs matched null). The second figure shows the per-question paired differences behind each interval.

Figure. The nominal does not replicate. Steered minus matched-null behavior score, as a fraction of the anchor contrast; pair-clustered 10,000-draw bootstrap intervals; full color marks the one interval excluding zero.

Figure. Per-question companion. Each point is one question's steered minus null difference (question index labeled); black bars are family means; the confirmation pairs spread far wider than the grid's.
The fresh confirmation lands near the grid mean (+0.104 vs +0.120; family means 0.181 null, 0.285 steered) but its interval spans zero at 12 pairs: the one grid family that crossed the screen — exactly the count 20 families produce at the 95% level — does not survive independent re-measurement. The no-confirmed-behavior takeaway now rests on fresh re-measurement of all three behavior families, not on this family's structural exclusion from the original confirmation. At this width the result is indistinguishable from null given the variance, not evidence of a zero effect.
Open review concern
danaconf-draw-battery-timing-unscaled(no production-shape wall or kernel estimate was recorded before dispatch): not binding on the realized run; the full pod leg at 12 pairs and 5 draws per side completed in under 20 minutes of wall time, about 0.3 GPU-hours against the 2 GPU-hour budget.
Open review concern
danaconf-guard-path-alias-bypass(the round-isolation guard compares destination spellings, so alias spellings could slip past it): the committed gate record's argv shows every guarded destination explicitly set to a canonical distinct spelling, with the ledger subdir a plain relative name, so no alias form was ever passed.
Open review concern
danaconf-bank-staged-no-exit0-terminal-smoke(the pre-dispatch smoke halted before a clean terminal exit of the bank-staging phase): the realized pod run exercised that path live; the committed gate report records the staged bank passing digest binding over all 180 contexts, and the confirm phase, which dispatches only after a clean bank-staging exit, ran to completion.
Repro: eval JSONs at eval_results/issue_2378/{fits,ladder,pool,pool_gf,retrieval,pilot,judge,capture_ready} on branch issue-2378 — pinned trees: main results at 26d1f31a (fits, ladder, pool, retrieval, pilot, judge, capture_ready), global-family-fold corrective run at ee7f55ab (pooled + story own-ceiling refits + leave-one-framing-out, incl. pool_gf/lofo/); figures + plot script (scripts/issue2378_analyzer_figs.py) at d2c81601 (adds the per-fold leave-one-framing-out companion; earlier figures unchanged from 67d3ed4645); length-matched refit round: eval JSONs at eval_results/issue_2378/lenmatch @ 7a28d22d (16 per-cell-leg JSONs + lenmatch_summary.json; runner scripts/issue2378_lenmatch.py), matched-vs-control figure + plot script (scripts/issue2378_lenmatch_fig.py) at fc8e426a. Causal patching round (same-issue follow-up round causal-patching-arms): eval JSONs at eval_results/issue_2378/causal-patching-arms @ f1961784 (patch_summary.json; pod harvest gate_report.json, screen_report.json, fact_cells.json; the published judge fold under judge/; derived fact_cells_confirm.json + cjk_audit.json), patch figures + plot script (scripts/issue2378_patch_fig.py) at the same commit; patch run code scripts/issue2378_patch_run.py / issue2378_patch_common.py (pod run at 08a81e5a24) and scripts/issue2378_patch_judge.py / issue2378_patch_analysis.py (VM legs at b64870b091). Simulated-user regeneration round (same-issue follow-up round sim-user-regen): eval JSONs at eval_results/issue_2378/sim-user-regen @ 2fee63b4 (floor + regen reports, fits, the 9-rung ladder + paired-contrast JSON, retrieval, the length-matched user pair; plan-named copies fits/chat_user_sim__context.json, fits/chat_user_sim__prefix.json, ladder/h4b_real_vs_sim.json, with the run's fits/chat_user_sim__g2b_dropped.json carrying a superseded-by pointer); pod generation + capture on pod-2378-simuser at 4f8e2ecd, VM fits/ladder/retrieval at de8b38d0. Behavior-confirmation round (same-issue follow-up round dana-behavior-confirm): eval JSONs at eval_results/issue_2378/dana-behavior-confirm @ de8b38d0 (patch_summary.json, gate_report.json, the published judge fold incl. raw judged rows), run on pod-2378-danaconf via scripts/issue2378_patch_run.py in confirm-only mode with the anchor bank staged digest-bound from the original round. Fold-round figures + plot script (scripts/issue2378_fold9_figs.py) and both rounds' cjk_audit.json at 18198528. Run code: scripts/issue2378_{gen,capture,judge,fits,ladder,pool,retrieval,dispatch}.py (fit/ladder/pool stage at c732134e; the corrective run is issue2378_pool.py --global-family-folds). HF data repo superkaiba1/explore-persona-space-data (paths below at revision 65bdbdbb960f5f937e1f9fec073662db6095471a; patch-round paths at revision 138adcff45ca716a66419ff27ae3d28ce9f479c8; all live-verified this session via huggingface_hub.list_repo_tree): activation store issue2378_xframing/analysis_tensors/activations (527 files, bf16 npz, layer 51 ± flanking); raw completions issue2378_xframing/raw_completions (14 stage prefixes, incl. chat 36, segb 140, user_real_render 6, user_sim 32 files, and per-row judge verdict payloads under judge_admission 7 + judge_congruence 1); patch-round rollout text issue2378_xframing/raw_completions/causal_patching (anchors, bank, grid, confirm, judge rows, meta) and patched answer-state tensors issue2378_xframing/analysis_tensors/causal_patching (anchors_va, confirm_va, grid_va); regenerated simulated-user rollout text issue2378_xframing/raw_completions/sim_user_regen (39 files) + activations issue2378_xframing/analysis_tensors/activations_simregen (77 entries); confirmation-round rollout text issue2378_xframing/raw_completions/causal_patching_danaconf and answer-state tensors issue2378_xframing/analysis_tensors/causal_patching_danaconf — all four live-verified this session at revision ca5128f4; per-row sidecars issue2378_xframing/p6_sidecars (fits 16, ladder 63 files); issue2378_xframing/pilot (2). Reused input from #1738: the pinned sampling manifest of 100,000 real multi-turn conversations (LMSYS-Chat-1M 50,545 + WildChat-1M 49,455) at issue1738_multiturn/sampling_manifest @ 003e3925 — fit: the same real-conversation pool this line draws chat/plain/user rows from. Judge: claude-sonnet-4-5-20250929 (admission 47,513 valid calls + congruence ~7,485 draws + pilots, Batch API; the patch round adds a 5,085-call wave, 5,023 kept). Compute: plan estimated 42 GPU-h; realized ~15–20% over plan plus ~4 idle-GPU hours where the fits fan-out fell back to GPU instances (CPU lane dry); the global-family-fold corrective run (pooled + own-ceiling refits + leave-one-framing-out) ran on the same 1×H100 fallback shape; 2 sequential 4× H200 pods (generation; capture) + 4 fit pods; the length-matched refit round ran zero GPU-hours (VM inline, 2026-08-25); the causal patching round ran ~6 GPU-h on one H200 (pod-2378-patch, live ~16:50–22:40 UTC 2026-08-25) plus the judge Batch wave; the simulated-user regeneration ran ~1 GPU-h on one H200 (pod-2378-simuser: generation, capture, fresh draws) plus ~9 h of VM CPU (fits, ladder, retrieval, length-matched pair); the behavior confirmation ran ~0.3 GPU-h on one H200 (pod-2378-danaconf) plus a 2,724-call synchronous judge wave. Config row: cells chat, plain_text, storyq_astra, storyq_helios, storyq_wren, storyq_dana, storyq_vex, chat_user_real (dropped: chat_user_sim; descoped pre-run: dialogue family); layer 51; seed 137; K=5; n_eq 6601; GCV dof cap 0.9; 100 null draws; 200 bootstrap draws; pooled/LOFO fold_regime global-family (pool_gf/); lenmatch: band 8–256 tok, 10 log bins, n=996, reduced k=380 (lenmatch/); patch round: 12 questions/char, anchors K=10, grid 1,440 cells, confirm K=5, bootstrap B=10,000 seed 23781, coherence gate 60, prefill k=8, patch layer 51, activation read layer 59; sim-user regen: min_tokens 8, retry passes 2, intersection 9,939 conversations, fresh draws 1,000 rows × 4 (seeds 138–141), lenmatch n=1,674 / k=658; dana confirm: 12 pairs × 5 draws per side, B=10,000 seed 23781, coherence gate 60.
Context: originating prompt (verbatim, user chat 2026-08-18): can we rerun with: - a stronger model (qwen3.6 -- what are the sizes) - queries that make sense in the story - generate story without chat template -> what's the best way to do this - the queries don't have to be matched. We are just checking if the mapping transfers. Ask clarifying questions. Child of #2054; user-turn recipe from #825; retrieval conventions from #2202. Task created 2026-08-19; pilots 2026-08-20–23; production run 2026-08-23/24; analyzed 2026-08-24; pooled-arm folds corrected and re-analyzed 2026-08-25 (interpretation round 2); length-matched refits run and folded 2026-08-25 (zero-GPU free-analysis round, interpretation round 6). The causal patching round was armed from a user amendment (verbatim, paper-planning chat 2026-08-19: there is a currently running story/framing transfer experiment. Can you just add it there?, converting the planned cross-framing patching arms into the same-issue follow-up causal-patching-arms), run on 2026-08-25 and folded the same day (interpretation round 7). Two proposer-filed cheap-band same-issue follow-up rounds — the simulated-user regeneration (sim-user-regen) and the story-Dana behavior confirmation (dana-behavior-confirm) — ran on 2026-08-26 and were folded the same day (interpretation round 9).