Narrative-story framing weakens the assistant context→answer map on identical conversations rather than eliminating it, while chat and plain-text framings share one operator up to linear coordinates (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_1345.md · gist
Takeaways
- On identical conversations the story context map reads +0.367 held-out R² with the answers embedded verbatim and +0.262 with the model's own in-story answers, against matched-row chat at +0.609 and +0.567 in the same train-fold reduced basis — narrative framing weakens the assistant map about twofold, a framing effect rather than a corpus or teacher-forcing artifact (earlier rounds' negative story R² was a selection artifact of near-interpolating penalty at n_train ≪ d, corrected by the reduced basis).
- Answer authorship moves the map about as much as framing: with the reference answer embedded, instruct bare text reads +0.63 held-out R² at the deep read positions versus +0.38 when the model writes its own answer, a drop that persists at 0.20–0.30 when training folds exceed the 3,584 input dimensions; a judge scores the self-written bare-text answers 56 of 100 for content drift from the reference versus 17–18 for the base model's.
- In the base model the ordering reverses: its own answers after the instruct-written story prefix read +0.28 (+0.40 at the boundary-token target), above its own bare text at +0.20 and chat at +0.18 — the story render helps, not hurts, base-authored answers.
- Freely written story answers carry a character gradient on a judge-scored AI-likeness axis: a calm-AI character reads 72–74 of 100, a warm helper 62–64, a villain 55–58, an ordinary person 53, in both models, while cells embedding the same reference answer sit flat at 78–81 — the axis reads authorship, not the wrapper; it is judge-scored, not human-validated.
- Character context→answer maps at layer 19 read as strongly as the assistant map (16 cells: 0.31–0.38 inserted, 0.18–0.26 on-policy vs the 0.26–0.37 assistant-story ceiling band), and the assistant operator transfers into a character map in graded proportion to the AI-likeness axis (instruct rung-4 recovery Spearman ρ +0.80 over four characters, both provenance modes) — the assistant lives on the same manifold as a story character, just at the AI-like end (n=4 caps this as consistent-with).
- The one-way reparameterization survives every correction — the story operator moved into chat recovers 0.61 teacher-forced and 0.56 on-policy, above chat's own matched ceiling, while the reverse turns only weakly positive; chat↔plain-text transfer still misses the same-operator margin but a general-linear coordinate change recovers each context ceiling, and instruction tuning pulls the two coordinate systems together (aligned operator cosine 0.855 instruct vs 0.732 base).
Goal
This experiment in context: #825 showed the assistant context→answer linear map predicts about equally well with or without the chat template, and that generic story-character maps transfer to the chat map at only ~5% of ceiling — but equal predictive power does not mean the same operator, and the story result used arbitrary characters. This experiment holds the assistant persona constant across three framings — chat-template, plain User:/Assistant: text, and an assistant character in narrative stories — and tests operator identity directly via cross-regime transfer, aligned operator cosine, and the #825 Result-2.5 general-linear reparameterization, in Qwen2.5-7B base and instruct. A conversation-paired follow-up round re-renders the same conversations as stories with the original answers embedded verbatim, removing the corpus confound from the story comparison. Sibling #1335 asks the different question of why the assistant map is stronger than fiction-character maps.
Broader narrative: if the assistant map is one operator re-expressed in framing-specific coordinates, the map is a property of the assistant identity rather than of the chat format — constraining how persona representations should be compared across surface framings, and mirroring how base→instruct post-training re-parameterizes rather than replaces the map.
Methodology
Design: three framings of the same assistant persona × two models (Qwen2.5-7B, Qwen2.5-7B-Instruct) × two mapping arms (context = everything up to the end of the user query; prefix = everything before the query). Framings: chat-template (standard Qwen chat template), no-template (the same conversations rendered as plain User: <u1>\n\nAssistant: <a1>), and assistant-in-stories (new narrative prose in which an AI character named ARIA answers a human character's questions). Chat and no-template share the same underlying conversations (the conversation-paired pair); the free-form stories are a different corpus, so those story comparisons are corpus-confounded by design. Per cell I fit a closed-form ridge map from the context (or prefix) activation to the answer-mean activation, swept all 28 layers within-regime, ran the cross-regime transfer matrix and operator-comparison legs at frozen layers 14/18/19/26 (layer 19 headline), and evaluated the plan's verdict lattice on the chat↔no-template pair per model and arm: same-operator (transfer alone within 0.05 of the target ceiling), reparameterized (transfer short, but a data-paired general-linear change of coordinates A·M·B recovers the target ceiling above a matched-capacity null), different-map (recovery also fails, deficit CI wholly below zero), else inconclusive.
Follow-up round assistant-named-story (single manipulated variable: the story character name, ARIA → "Assistant", via the EPM_STORY_CHARACTER_NAME seam with a variant-scoped output prefix): stories regenerated for both models under the otherwise-identical recipe. The story pipeline's retry pass is a fresh-seed backfill sized to the main-pass shortfall — retry seed conversations overlap the main pass 0 of 242 (instruct) — not per-slot retries. The chat/no-template legs reused the parent's pinned turnstore (HF data revision 2a3cb30a, the turnstore-reuse pin; the fit metadata's pinned_parent_revision 7159e5804d is the parent S-track corpus pin, a different object) through a prefetch-reuse phase gated by a refit-equality check (tolerance 1e-3, measured deviation 0.0 on all four base cells) and the parity gate (deviation 0.0 on all four layer-19 anchors); all four chat↔no-template lattice cells reproduce the parent verdicts exactly, so those legs are a pipeline-integrity replication, not new evidence. Both story arms missed the 400-of-500 yield floor, so free-form story fits and story-pair operator legs were halted per the plan kill criterion. As an instrument diagnostic, all 365 verdict-less judge replies (both runs, both models) were then re-judged once at max_tokens 800 — identical rubric, judge model, and temperature, fresh cache — with per-row outcomes recorded.
Follow-up round conversation-paired-stories (plan v9): a seed-42 sample of 2,700 of the 4,724 shared conversations rendered as narrative prose with the ORIGINAL answer embedded verbatim (attribution Assistant replied: "…"), activations captured teacher-forced at the fixed answer span, plus an on-policy companion cell (free story-answer generation; 117 conversations kept) bounding teacher-forcing distortion per nested gates (companion more than 0.05 below the teacher-forced cell = qualification; negative and more than 0.20 below = demotion). The paired regime is instruct-only; base narrative generation was not attempted by scope (parent base story yields 96 of 500), so base paired-story cells are N/A — not tested. This makes the story rows corpus-shared and conversation-paired with chat/no-template, so the data-paired story↔chat reparameterization is defined — the parent's stated deviation, resolved. Two declared variables separate this round from the free-form ARIA anchor (corpus construction AND character name, renamed per user directive), so ARIA-anchor comparisons are context only; the round's primary comparisons hold the name fixed within-round. Same-conversation comparators are matched-row refits of the chat and no-template cells restricted to the story-kept rows; the plan-declared verdict lattice reads the paired-story within-R² (context arm, layer 19) with its conversation-grouped bootstrap CI — wholly below zero = framing effect, wholly above = corpus effect.
Follow-up round story-slot-position-ablation (plan v10): the direct test of the paired round's single-slot caveat. Four candidate context read positions — the end of the embedded question utterance (the structural analogue of the chat slot), the last narrative token before the attribution sentence, the last token fully contained before the answer span ("pre-answer", defined char-level so a token that BPE-merges into the answer's opening can never be read — answer leakage into the slot is excluded by construction), and a mean-pool over the attribution phrase — were captured beside the attribution-colon anchor and the fixed prefix slot in ONE teacher-forced forward per story over the same 2,164 kept paired stories (no regeneration, no judge calls), and each slot's context cell was refit with the inherited rig. The verdict statistic D is the per-draw maximum over the four slots of the paired per-conversation deficit vs the same-rows chat comparator (the maximum taken inside each of 1,000 conversation-grouped bootstrap draws, so the selection is inherited per draw), with per-slot CIs at the Bonferroni-4-adjusted 98.75% level; the trichotomy: slot artifact (D's CI reaches zero), representation-level collapse (D's CI and every slot's adjusted CI wholly below zero), intermediate otherwise. Slot hygiene: per-slot answer-span overlap must be 0.0 (asserted at extraction; realized 0.0 everywhere); anchor-coincidence rates are measured, and a slot duplicating the anchor on more than half its rows would be excluded as degenerate (realized: at most 3 of 2,163 rows; all four slots kept). A three-cell refit-equality gate (tolerance 0.02 on the landed story-anchor, prefix, and chat matched cells) binds the fresh capture — measured deviation 0.0000 on all three. The prefix arm is held fixed per the mapping-arms rule (the context slot is the single swept variable; a prefix-side sweep would be a second variable), and the operator-cosine legs were dropped this round (a declared deviation — the verdict rests on within-R² and D).
Follow-up round onpolicy-assistant-story (user-requested): the paired round's on-policy companion construction scaled to powered n and promoted to the round's primary story cell (no teacher-forced arm, so the teacher-forcing-distortion calibration is N/A this round — declared). A seed-42 sample of 2,200 of the 4,628 eligible shared conversations was rendered by the instruct model as a short narrative in which a person asks the original question aloud and a character named Assistant answers freely in its own words — the story-writing system instruction carries the original question only, never the answer, and is stripped before extraction (tier-2 instruct-and-strip). One retry wave of 1,238 fresh conversations, sized by the observed keep rate, topped up the pool; every attempted conversation received exactly one draw. Mechanical gate: exactly one parsed question→answer exchange with the Assistant replied: attribution; then the standard judge filter. Kept 2,019 of 3,438 attempts (floor 2,000, met); 2,018 rows enter the fits — one kept story (s4954) parses to a 1-character answer span and is excluded at allowlist time. Both mapping arms were fit (context and prefix), with matched-row chat and plain-text refits on the kept conversations as comparators. Refit equality (deviation at most 2.2×10⁻¹⁴ on all four base cells) and the parity gate (deviation 0.0 on all four layer-19 anchors) both pass, and all four chat↔no-template lattice cells reproduce the parent verdicts exactly (recovery margins 0.045–0.050), so those legs are again a pipeline-integrity replication, not new evidence.
Estimator note and the story-context-info-probe round (zero GPU, user-directed inline analysis on the landed stores, no new capture or judging): every within-regime and matched-row cell in the rounds above is a closed-form ridge fit in the ambient 3,584-dimension activation basis whose penalty is chosen per fold by generalized cross-validation over a grid running to 1e4. At the paired-story row counts that regime is under-determined — 1,730 training rows per fold teacher-forced, 1,614 on-policy, against 3,584 input dimensions — so held-out R² there is an estimator read as much as a signal read. The pathology is specific to the legs whose INPUT is the story context vector: all four of those (story context→story answer and story context→chat context, in both capture modes) take the grid's smallest penalty, 0.01, in all five folds — a near-interpolating fit, which is what produces a negative held-out R² — whereas the chat-input legs select penalties of 1e3–1e4 and read positive. The one partial exception is the teacher-forced chat→chat-answer comparator, whose per-fold selection is mixed (0.01 to 3.2) and whose +0.243 is therefore itself depressed, rising to +0.609 in the reduced basis. The reduced basis restores well-posedness by construction: it retains 865 principal components teacher-forced and 807 on-policy against those same training-row counts, and its selector then picks 1e3 on the story legs. The probe re-reads the same rows, folds, seed and kernel three further ways, changing only the estimator: a train-fold PCA reduced input basis, with principal components fit on the training rows of each fold only so there is no held-out leakage; the ambient basis with the penalty held fixed at each of 1e2, 1e3, 1e4 and 1e5 instead of selected; and the same selection grid extended to 1e8, to test whether the selector's choice is an artifact of where the grid stops. It adds three estimator-free reads that use no fitted map: raw nearest-neighbour retrieval (cosine and euclidean, story context against the pooled paired chat contexts and story answers), the top-ten canonical-correlation spectrum against a row-shuffled baseline, and a decomposition of the story context into its chat-predictable component and residual. The nonlinear leg fits a 512-unit single-hidden-layer perceptron via the project's vectorized helper against a ridge comparator on the same 256-dimension shared PCA input basis and 40 row-shuffled null draws; that comparison basis is fit on all rows rather than per training fold, so its ridge value is a within-leg reference for the perceptron only and is not comparable to the train-fold reduced-basis headline. A no-template positive control runs the identical instrument on the chat↔plain-text pair: it reads +0.598 ambient and +0.727 reduced (raw retrieval to the paired chat context correct at rank 1 on 1,903 of 2,018 rows), so the degeneracy is specific to the story cells' framing variance rather than a property of the rig. Artifacts: eval_results/issue_1345/story_context_info_probe/ (11 JSONs) and four figures under figures/issue_1345/story_context_info_probe/.
Follow-up round story-boundary-ablation (inline, user-directed): two programs on one teacher-forced capture grid. Every store is captured in one forward pass per row with five single-token read positions — prefix; the last token before the question's end; the answer-boundary marker; the last token fully contained before the answer's first character; the token containing the answer's first character — and two targets (the answer-span mean, primary, and a boundary token realized by a content-free per-arm transition suffix appended after the answer), at layer 19. The provenance program compares, per framing, cells whose rendered answer is the original reference answer embedded verbatim (for chat renders this is the model's own original chat answer) against cells whose answer the measured model wrote itself in that framing: bare-text and base-chat answers generated under the plain prompt, base story answers generated freely after the instruct-written story prefix, and the on-policy assistant-story round's rows reused. The matched-n lattice (142 cells, named the primary read in advance) fits each cell in the ambient 3,584-dimension basis with the per-fold ridge penalty selected by inner group-CV — the guarded selector the lambda audit installed — plus a train-fold PCA reduced-basis companion; a full-pool companion re-captures the three pairable families allowlist-free (4,267–4,618 conversations) as the regime check where the pool exceeds the input dimension. In that companion only the instruct bare-text pair's training folds (3,694 rows) exceed 3,584 dimensions; the base pools' folds (3,413 and 3,577) still fall just short. The story pair is structurally excluded from the companion (its pool of 2,164 kept stories is below the input dimension), as are instruct-chat own-answer rows (never generated — the chat reference answers are already the instruct model's own chat answers); the base-side reference-answer twin stores were captured and persisted but never fit (the companion fits enumerate reference-answer cells for the instruct pair only), so the base provenance contrast remains unmeasured. The judge program scores two graded axes (0–100, anchored rubric, five draws per item, temperature 1.0, max_tokens 600, Batch-routed): AI-likeness of the answer span for four story characters — a warm helper, a calm artificial intelligence, an ordinary person, a theatrical villain, labels and persona descriptions reused verbatim from the story-scene persona panel — crossed with two provenance arms and two models (16 cells, 300 items each), and content drift from the reference for the four own-answer assistant cells; 30,000 draws total, 211 content drops (0.70%), zero transport losses, zero refusals. The ~30-row human audit of the AI-likeness axis was declined by the user, so the axis carries a judge-scored-only caveat. The round's four boundary-rendering story-attribution arms were fit in the same lattice and are committed under the same directories; they are not read in this fold.
Training: N/A — no model training (extraction + closed-form fits only). Fit/eval/generation hyperparameters:
| Hyperparameter | Value | Source |
|---|---|---|
| Ridge penalty | GCV-selected per (layer, fold) from logspace(-2, 4, 13) | issue825_fit_cells.py at b7ab0b3b75 (parent fit core) |
| CV folds | 5, grouped by conversation / story id | plan §11; group-level-folds rule |
| Headline layer / frozen layers | 19 / (14, 18, 19, 26) | parent #825 frozen set |
| Shuffle-null draws | 20 per cell (conversation-level answer shuffle) | plan §11 |
| Paired bootstrap | 1,000 draws, conversation-level, on cached layer-19 held-out predictions | plan §3 |
| Rotation-cosine null draws | 50 at layer 19; 5 at other frozen layers | issue1345_common.py |
| Reparam matched-capacity nulls | 5 draws per type (answer-shuffled fit; random orthogonal rotation) per direction, layer 19 | plan §9 deviation (layer 19 only) |
| Lattice margins | same 0.05; different 0.10 | plan §3 |
| Story generation (free-form rounds) | temperature 1.0, max_new_tokens 1024, seed 42, 500-story target per model | issue1345_common.py |
| Story quality judge | claude-sonnet-4-5-20250929, reason-then-verdict, max_tokens 400, temperature 0 | project judge pin; llm-judging rule 23 |
| Story yield floor (free-form rounds) | 400 of 500 (80%) after one retry batch | plan §7 kill criterion |
| Story character name | ARIA (parent run) / "Assistant" (both follow-up rounds) | followup-scope 2026-07-16T07:55Z; user directive 2026-07-17; EPM_STORY_CHARACTER_NAME |
| Verdict-less re-judge budget | max_tokens 800, temperature 0, fresh cache (diagnostic; original 400) | llm-judging rule 23; rejudge_malformed.json |
| Matched n | 4,724 shared conversations (chat/no-template); 2,108 rows from 420 stories for free-form story pairs; 2,163 story-kept conversations for the paired round's comparator refits | plan Phase 3 (row allowlists) |
| Paired-story generation | temperature 1.0, max_new_tokens 2048, seed 42; 2,700-conversation target from the 4,089 eligible | issue1345_gen_stories_paired.py at 081bfce3c8; story_yield_paired_instruct.json |
| Paired-story pool eligibility | answers of at least 20 characters and at most 800 tokens | issue1345_gen_stories_paired.py (ANSWER_CHAR_MIN, ANSWER_TOKEN_BUDGET) |
| Paired-story yield floor / retries | 2,160 of 2,700 (80%); bounded floor-driven retry waves, at most 3, per-row 3-draw cap — a stated deviation from plan §7's single retry batch (v9-sanctioned) | plan v9 §7; story_yield_paired_instruct.json |
| Verbatim-answer gate | exactly one normalization-tolerant occurrence + adjacent Assistant replied: attribution + closed quote + quoted question utterance | match_verbatim_turn, issue1345_gen_stories_paired.py |
| Teacher-forcing gates (paired round) | qualification band 0.05; demotion gate 0.20 (nested tiers, on-policy companion vs teacher-forced cell, matched rows) | plan v9 §7 |
| On-policy companion (paired round) | 200 conversations, free answer generation, max_new_tokens 1024, usable-floor 5; kept 117 | plan v9 §5; story_yield_paired_op_instruct.json |
| Parity gate | re-extracted layer-19 R² within ±0.02 of parent anchors | plan §7; measured deviation 0.0 on 4 of 4 anchors (both rounds) |
| Slot-ablation read positions | anchor (attribution colon) + end-of-question, pre-attribution, pre-answer (last token fully contained before the answer span), attribution-phrase mean-pool; prefix held fixed | plan v10 §5; issue1345_extract_turnstore.py --slot-ablation |
| Slot verdict statistic | D = per-draw max-over-slots paired deficit vs chat, 1,000 conversation-grouped draws (95% CI); per-slot CIs Bonferroni-4 (98.75%) | plan v10 §3; slot_verdict_lattice.json |
| Slot-round refit-equality gate | ±0.02 on three landed cells (story anchor −0.3056, prefix −1.3714, chat matched +0.2426); measured deviation 0.0000 | plan v10 §5; refit_equality_slots.json |
| On-policy story generation (on-policy round) | temperature 1.0, max_new_tokens 1024, seed 42, one draw per conversation; 2,200-conversation main sample + one 1,238-conversation fresh retry wave from the 4,628 eligible | issue1345_gen_stories_paired.py --op-companion at 7b56489760; story_yield_paired_op_instruct.json |
| On-policy yield floor | 2,000 of the 2,200 target; kept 2,019 (met), 2,018 rows in fits | followup-scope 2026-07-17; story_yield_paired_op_instruct.json |
| Seeds | fit 0, generation 42, subsample 0 | issue1345_common.py |
| Boundary-round capture grid | 5 read positions × 2 targets, layer 19, one teacher-forced forward per row | issue1345_boundary_ablation_capture.py at c6e15f0e70 |
| Matched-lattice fit instrument | ambient ridge, per-fold penalty by inner group-CV; reduced-basis companion k = min(1024, half the smallest training fold) | issue825_fit_cells.py selector defaults after the lambda audit; cell_summary.json |
| Matched-lattice inference | 1,000-draw conversation-grouped bootstrap; 40 shuffle-null draws per cell | cell_summary.json |
| Full-pool companion | 3 pairable families captured allowlist-free (4,267–4,618 conversations); reference-answer twins row-pinned to their own-answer partner's conversations | issue1345_boundary_ablation_capture.py --full-pool / --keep-ids-jsonl at 6cab56beb6 / 70a75b59f1; --no-arms fits at 453212094a |
| AI-likeness / content-drift judge | claude-sonnet-4-5-20250929, 0–100 anchored rubric, 5 draws per item, temperature 1.0, max_tokens 600, 300 items per cell, Batch API | judge_report_*.json under eval_results/issue_1345/judge_legs/ |
Evaluation: the dependent variables are geometric/predictive, not judged behaviors: (1) within-regime held-out R² (pooled per layer with the test fold's own mean as reference, group 5-fold CV) per regime × model × arm × layer, against a conversation-level shuffle null; (2) cross-regime transfer R² of the source-regime map applied in the target regime, with per-direction Δ(source→target) = transfer R² minus the TARGET regime's own within-R²; (3) raw and activation-Procrustes-aligned operator cosine against a random-rotation null; (4) reparameterization recovery: held-out R² of A·M_source·B in the target regime, where A/B are ridge-fit activation alignments trained on training folds only, against the larger of two matched-capacity nulls; (5) for the paired-story and on-policy rounds, the plan's verdict read on the story cell (framing effect iff the within-R² CI is wholly below zero; corpus effect iff wholly above with recovery above nulls), the story↔chat reparameterization with data-paired alignments, and — paired round only — the nested teacher-forcing gates on the on-policy companion subset; (6) for the slot round, the per-slot within-R² with a multiplicity-adjusted CI and the max-over-slots paired deficit D vs the same-rows chat comparator. The 95% CI on the lattice deficit comes from the conversation-level paired bootstrap. The transfer matrix recomputes each target's within-R² on its own subset and folds with a pooled held-out-mean reference, so its story diagonals differ slightly from the within-sweep rig (paired stories: −0.303 bootstrap-rig vs −0.306 within-sweep; on-policy stories: −0.544 vs −0.547) — a rig difference (R² reference), not a data difference; prose uses the within-sweep value. The slot round's verdict quantities (per-slot R², paired deficits, D) are all read in the bootstrap rig, where the within-sweep obs values differ by at most 0.003. The on-policy round's story-operator-into-chat composite lands 0.038 above its matched chat ceiling — the two-stage-ridge composite behavior the slot round disclosed, read as composite advantage, not super-recovery. Free-form story-pair operator similarity uses raw cosine + rotation band + an operator-spectrum Procrustes optimum (the data-paired alignment is undefined without shared conversations — a stated deviation, resolved for the paired round). (7) For the story-boundary round: per-cell within-R² tier curves across the five read positions (ambient inner-group-CV read quoted, train-fold reduced-basis companion reported alongside; conversation-grouped bootstrap intervals and 40-draw shuffle nulls per cell), and the two graded judge axes under the project judging recipe — malformed or out-of-range judge returns dropped, never coerced, with per-cell drop counts persisted.
Data extraction: chat and no-template reuse the parent's S-track corpus — its single-turn track ("S-track"; the parent also carries a two-turn "M-track", unused here): 5,000 single-turn conversations whose user prompts are real user turns from lmsys-chat-1m (tier-2 established dataset, parent pin 200748d9d3), each answered by the measured model itself (one cell per model — on-policy sampled responses), row-filtered to at least 8 content tokens and at most 2,048 total tokens; 4,724 conversations survive zero-width-span drops in both renders and form the shared chat ∩ no-template row set. It was re-extracted at pinned parent data revision 7159e5804d with the added prefix slot; the parity gate reproduced all four parent layer-19 anchors exactly. Slot positions — chat: context slot = last token of the assistant header after the user turn, prefix slot = last token of the pre-query template region; no-template: context slot = last token of the Assistant: header, prefix slot = end of the User: header; stories: context slot = last token of the attribution marker immediately before the AI character's quoted answer (the colon in ARIA replied:), prefix slot = last token of the narrative before the question utterance. Free-form stories were generated on-policy from each model (elicitation tier 2, instruct-and-strip: a story-writing system instruction that is NOT part of the extracted context), judge-filtered for containing 4+ well-formed question→answer exchanges, and parsed with per-turn confidence gates; only confident turns enter the fits (2,108 turns from 420 instruct stories, mean 5.0 per story). Instruct yield: 420 of 500 kept (main pass 323, retry 97; judge malformed drops 24, transport losses 0, parser-below-floor 43). Five of the 420 kept stories hit the 1,024-token generation cap (finish_reason: length); the three samples shown below ended at a natural stop. Base yield: 96 of 500 kept — below the 400 floor, so the base story regime was halted (N/A — not tested). All 420 kept instruct stories came from tier 2. Story answer spans are much shorter than chat/no-template answers (length distributions — deliberately linked, a data-quality companion rather than a result figure). A language scan found 24 of 420 kept stories (5.7%) contain at least one CJK character (counts only; no judged-rate DV exists here to recount). A zero-GPU follow-up refit excluding those stories (125 of 2,108 turns dropped; 396 stories kept) moved the story context R² from −0.754 to −0.652 (conversation-bootstrap 95% CI −0.693 to −0.599; shuffle-null p95 −2.02) and the prefix arm from 0.117 to 0.119 — the CJK-carrying stories were disproportionately poorly fit, but the deeply negative context read and the weak-map verdict stand; artifacts under followup_cjk_excluded.
Assistant-named round yields — instruct 361 of 500 kept (main pass: 258 kept of 500 attempts, 84 verdict-less; backfill pass: 103 kept of 242 fresh-seed attempts, 33 verdict-less; totals: judge PASS 398, FAIL 227, verdict-less 117, with 37 PASSes below the 4-turn parser floor). Backfill kept-per-well-formed runs below the main pass in both runs (0.493 vs 0.620 this round; 0.567 vs 0.670 parent) — an unexplained backfill-pool selection or batch effect. Base: 96 of 500 kept (main 57, backfill 39 of 443; a fresh generation — bundle fingerprint and pass breakdown differ from the parent's 96, the equal total is coincidental). All 361 kept instruct stories are tier-2 instruct-and-strip; 1 hit the 1,024-token cap; 1,780 confident turns (mean 4.9 per story); no story turnstore was extracted (halted before extraction). Round CJK scan: 49 of 742 instruct attempts intruded (6.6%, vs parent 5.9%); kept-story CJK counts 14 (round) vs 24 (parent); under a CJK-excluded recount the parent's own above-floor status is marginal (396 vs 400) while the parent-vs-round gap is convention-robust. Re-judge diagnostic (all 365 verdict-less replies at max_tokens 800): 37 recover a verdict (17 PASS, 10 clearing the parser floor), 105 return empty replies (API-level judge refusals, empty at 400 and 800), 223 remain verdict-less with format drift (7 refusal-worded; 19 near the 800-token ceiling, 0 of 99 in the round's instruct pool); revised keeps 424 (parent instruct), 97 (parent base), 366 (round instruct — still below the 400 floor), 96 (round base); per-attempt persistent drift rises 0.6% → 13.3% (instruct) and 2.3% → 10.4% (base) while empty-reply refusal rates stay flat (1.6% → 0.9% instruct; 5.0% → 4.1% base); artifacts rejudge_malformed.json + rejudge_malformed_rows.jsonl (per-row outcomes; the judge reply text itself was not persisted — outcome categories and reply lengths only).
Conversation-paired round (conversation-paired-stories): from the 4,724 shared conversations, 96 near-empty answers (under 20 characters) and 539 answers over the 800-token wrapper budget were excluded, and 2,700 of the 4,089 eligible conversations were sampled (seed 42). Each was rendered by the instruct model as a short narrative in which a person asks the original question aloud and a character named Assistant answers with exactly the original words, introduced as Assistant replied: "…" (tier-2 instruct-and-strip: the story-writing system instruction carries the original answer and is stripped before extraction). A mechanical gate enforces exactly one normalization-tolerant verbatim occurrence of the answer, one attribution marker adjacent to it, a closed quote, and a quoted question utterance; the dominant reject is the model paraphrasing instead of embedding the answer (about 45% of draws fail the occurrence check). Gate-passing stories were judge-filtered under the standard rubric (713 malformed judge returns across waves dropped as content drops; transport losses 0). Yield: main wave kept 1,103; bounded floor-driven retry waves added 874, 155, and 32 — kept 2,164 of 2,700 (floor 2,160, cleared by 4), 2,163 rows entering the fits. Teacher-forced capture anchors on the verbatim answer span: context slot = last token of Assistant replied: "; prefix slot = last token of the narrative before the question utterance (conversation-specific text, not a fixed template region). On-policy companion: 200 conversations, free story-answer generation, 117 kept (mechanical pass 172, judge PASS 122). Language audit: 169 of 2,164 kept stories contain CJK — 121 wrap conversations that are themselves CJK in the underlying corpus (pairing holds conversation language constant across framings) and 48 are wrapper intrusions (CJK narrative around a non-CJK answer). Eval-only, fold-preserving recounts from the layer-19 prediction cache (recompute validated against all three committed values): excluding wrapper intrusions (n = 2,115) story −0.299 / chat 0.243 / plain-text 0.020; excluding all CJK rows (n = 1,994) story −0.286 / chat 0.257 / plain-text 0.037 — the framing-effect verdict is convention-robust. A 5-row spot check (seed 42) found all sampled rows gate-conformant; one passes only under the normalization-tolerant matcher (its raw string differs in whitespace/quote form) — across the kept pool, 201 of 2,164 rows (9.3%) embed the answer only up to whitespace/smart-quote normalization rather than as a raw exact string — and the extraction re-verifies spans with the same matcher.
Slot-ablation round (story-slot-position-ablation): no new text — the 2,164 kept paired stories were re-read from the pinned wrapper bundle, and all six read positions (prefix, end-of-question, pre-attribution, anchor, pre-answer, attribution mean-pool) come from one teacher-forced forward per story; 2,163 rows enter every fit (the all-slot row intersection dropped 0 rows). Realized span ordering per story: prefix < end-of-question ≤ pre-attribution ≤ anchor ≤ pre-answer. Answer-span overlap is 0.0 for every slot, and anchor coincidence is 0 rows for three slots and 3 of 2,163 (0.14%) for pre-answer — the expected quote-merge fallback. No generation and no judge calls this round; the paired round's language audit carries over unchanged.
On-policy round (onpolicy-assistant-story): main wave 2,200 generations — 1,789 pass the mechanical gate (390 with no parseable exchange, 21 with multiple), 1,344 judge PASS, 98 malformed judge returns dropped as content drops, transport losses 0, kept 1,280; retry wave 1,238 fresh conversations — 1,020 mechanical, 768 judge PASS, 48 malformed, kept 739. Total kept 2,019 of 3,438 attempts (58.7%); every kept story ended at a natural stop, parses exactly one exchange, and is tier-2 instruct-and-strip; generated answers are short-to-medium (median 265 characters, 90th percentile 569). Teacher-forced capture is absent by design: the answer span read at the context slot is the model's own freely-generated text, captured in one forward pass per story with the paired round's slot definitions. Language audit (kept pool): 143 of 2,019 stories carry at least one CJK character — 75 wrap conversations that are themselves CJK in the underlying corpus, 74 (3.7%) are wrapper intrusions, and the generated answer span is CJK in 96 rows (4.8%), 40 of them intrusions into non-CJK conversations. Eval-only, fold-preserving recounts from the layer-19 prediction caches (recompute validated exactly against all three committed bootstrap-rig values): excluding the 74 intrusion conversations (n = 1,945) story −0.528 / chat +0.527 / plain text +0.096; excluding all 149 CJK-involved conversations (n = 1,870) story −0.519 / chat +0.529 / plain text +0.101 — the framing-effect verdict is convention-robust. A 5-row spot check (seed 42) found every sampled story a well-formed narrative with the attribution marker adjacent to a freely-written answer.
Story-boundary round (story_boundary_ablation): reference-answer character wrappers re-render the paired-story recipe with the character's name in the attribution and the original answer embedded verbatim, text-matched across the four characters; own-answer cells sample one answer per row at temperature 1.0 under the same renders, and the base story cells generate freely after the instruct-written story prefix (an off-policy prefix for the base model — a named caveat). Own-answer cells are not text-matched across framings by construction: the tier curves read the map over what the model actually says. Judge items are a seeded 300-row stratified sample per cell; five of eight reference-answer character cells halted on the generation yield floor, so their kept rows are selected subsets (their flat reads are retained as controls only), all eight own-answer character cells completed, and the villain instruct own-answer cell scored 294 of 300 items. Capture stores, full-pool twins, out-of-fold predictions and per-draw judge files are on the HF data repo under issue1345_framing/story_boundary_ablation/ — verified live via scoped listing: analysis_tensors_fulln (130 files), eval_mirror_preds_fulln (40), raw_completions/judge_legs (40 entries), raw_completions/stories (48).
Sample training/evaluation data + completions: Random sample (seed 42), shown truncated for brevity; all rows: kept stories, instruct — pinned tree.
Story worked example (instruct_story0512, turn 1 of 4; excerpts, full story 2,853 chars):
…opening: "In the quiet of a late afternoon, Alex sat by the window, the soft sunlight casting golden patches across the room. …" Question span:
"are there any obscure love letters from history that I should read to get inspiration?"Attribution + answer:ARIA replied: "Certainly, there's the oft-cited letter from Isaac Newton to a love interest where he quibbled over the equation of love versus time. Or, you might find inspiration in a letter from Ralph Waldo Emerso…"[truncated at 200 chars; answer span 265 chars]
Two further sampled kept stories (seed 42): instruct_story0078 (5 confident turns, judge PASS) opens "Sarah sat in her cozy study, surrounded by piles of books and a laptop. …"; instruct_story0020 (5 confident turns, judge PASS) opens "In the quiet of her study, Jessica sat at her desk, her eyes scanning through a worksheet full of math problems…". All three shown are judge-PASS, tier instruct-and-strip, finish_reason: stop.
Paired-story worked example (conversation s2329, kept, judge PASS; sanitized excerpts — the underlying conversations derive from real user text, so only wrapper prose is quoted; all rows: paired kept stories — pinned tree):
Wrapper opens: "The sun was setting over the bustling city, casting long shadows across the pavement." — the original user question is then spoken aloud in double quotes, and
Assistant replied: "…"embeds the original 217-character answer verbatim, once, with a closed quote. [truncated — real-world-corpus-derived row; verify atkept_stories_paired_instruct.jsonl, conversations2329]
A rejected draw for contrast, by pointer only (real-world-corpus-derived, not quoted): conversation s2427, row 0 of raw_stories_paired_instruct.jsonl (same pinned tree) — mechanical reject answer_occurrences_zero, the story paraphrasing the answer instead of embedding it verbatim; this is the dominant reject class (996 of 1,344 main-wave rejects).
On-policy story worked example (conversation s2284, kept, judge PASS; sanitized excerpts — the underlying conversations derive from real user text, so only wrapper prose is quoted; all rows: on-policy kept stories — pinned tree):
Wrapper opens: "Sarah sat in her cozy home office, trying to recall the optimal temperature settings…" — the original user question is then spoken aloud, and
Assistant replied: "…"introduces a 334-character answer the model wrote freely in-story; no reference answer appears anywhere in the generation prompt. [truncated — real-world-corpus-derived row; verify atkept_stories_paired_op_instruct.jsonl, conversations2284]
Chat vs no-template renderings of the same conversation — a cherry-picked format-only illustration with placeholders (the underlying conversations are the parent's real-user-derived corpus, not quoted for content hygiene; full artifact linked in the footer):
chat: <|im_start|>user\n{u1}<|im_end|>\n<|im_start|>assistant\n{a1}<|im_end|>\n
no-template: User: {u1}\n\nAssistant: {a1}
The context slot for the chat rendering is the final token of the assistant header; for the no-template rendering it is the final token of Assistant: .
Story-boundary round samples, by pointer only (the underlying conversations derive from real user text, so no generated answer text is quoted here): the per-cell seeded judge draw design is committed as judge_sample_*.json under eval_results/issue_1345/judge_legs/, per-draw scored text lives under raw_completions/judge_legs/ on the pinned HF tree above, and the character-wrapper and own-answer rows files under raw_completions/stories/ on the same tree.
Results
Naive cross-regime transfer falls short of the target ceiling in both models
Held-out R² at layer 19 (context arm): row = source framing, column = target framing; diagonals are each framing's own within-R² (chat/no-template n = 4,724; stories n = 2,108 turns; base story cells N/A — not tested). Below: per-conversation squared error, transferred vs own map.


Figure. Transfer misses each target ceiling, and per conversation the deficit is near-universal. Top: transfer R² at layer 19 (instruct retains 83–84% of ceiling, base 15–31%; story cells strongly negative). Bottom: per-conversation error, transferred vs own map — transfer is worse for 92–96% (instruct) and 99% (base) of conversations (median error ratio 1.24–1.26 and 1.94).
Transfer loses R² in both models: the mean per-direction deficit is −0.103 (instruct) and −0.430 (base), each with a 1,000-draw conversation-level bootstrap 95% CI excluding zero (upper bounds −0.101 and −0.425). Both models fail the 0.05 same-operator margin, and instruct crosses the 0.10 different-map margin by a statistically resolvable but trivially small amount (mean −0.003, 95% CI −0.006 to −0.001) — absent recovery, the transfer-only read favors different maps in both models.
At frozen layers 14, 18, and 26 the instruct deficit grows to −0.14 to −0.21: the at-the-margin reading is layer-19-specific; transfer-falls-short is layer-robust. Story transfer collapses in both directions (corpus-confounded; see the story sections).
A general-linear change of coordinates recovers the target map in both context cells
Per model and direction (context arm, layer 19): the target's own held-out R², the R² recovered by reparameterizing the other framing's map, and the matched-capacity null. Below: the same four directions as points — ceiling, recovered, and the 10 individual null draws.


Figure. A data-paired linear reparameterization recovers each context-cell ceiling. Top: recovered R² lands between 0.005 below and 0.008 above each ceiling (instruct 0.654/0.620 vs 0.654/0.625; base 0.550/0.579 vs 0.542/0.578). Bottom: per-direction points — every individual null draw sits at −0.44 to −0.01, far below recovery.
A linear input alignment plus output alignment around the OTHER framing's frozen map recovers the target's full ceiling: the largest deficit is 0.005 (instruct, chat→no-template) and base recovery exceeds its own ceiling in both directions (+0.008 and +0.0003). The read is held-out — not alignment-map overfitting: composition through the stronger no-template map slightly out-generalizes the direct chat fit.
The alignments are regularized (GCV-selected penalties; effective ranks ≈1,100–1,800 input and ≈3,000–3,300 output of 3,584), and matched-capacity nulls recover −0.02 to −0.03, ruling out recovery-by-capacity. Both context cells fire the reparameterized verdict with margin +0.045 to +0.050; the prefix cells concur but are the degenerate-arm read below, not independent evidence.
Instruction tuning pulls the two coordinate systems most of the way together
Cosine between the chat and no-template operators at layer 19 (context arm): raw; after optimally rotating one operator onto the other (Procrustes alignment); and the random-rotation 97.5th-percentile reference. Dashed line: the parent base↔instruct aligned-cosine anchor (0.686).

Figure. Instruction tuning aligns the two operators' coordinates. Raw operator cosine 0.651 (instruct) vs 0.293 (base); aligned cosine 0.855 vs 0.732; the rotation null is ~0.001, so both aligned values sit far beyond chance.
Instruct operators are already 0.651 aligned raw — the chat template shifts coordinates modestly — while base operators read 0.293 raw yet 0.732 aligned, comparable to the parent's cross-MODEL anchor. Near-identical activations cannot explain this: the input activations align at linear R² 0.79 (instruct) and 0.48–0.61 (base) — reported in place of the plan's paired activation cosine; the fitted alignment upper-bounds any identity fit, so activations are provably not near-identical. Instruction tuning appears to canonicalize coordinates across framings more than it changes the operator.
The free-form narrative story map reads far below chat in both arms, and its operator is not the chat operator
Within-regime held-out R² across all 28 layers (instruct) per framing; context arm left, prefix arm right; dashed = story shuffle-null 95th percentile; dotted = layer 19.

Figure. The story-regime map is weak in both arms at every layer. Story context-arm R² is negative at every layer (−0.69 to −3.0) though above its shuffle null; the story prefix arm is weakly positive (0.05–0.12). Chat/no-template sit at 0.43–0.65 (context) and 0.11–0.15 (prefix). All values are ambient-basis fits.
The existence read passes (layer-19 R² −0.754 vs shuffle-null −2.194, context; 0.117 vs −0.044, prefix), yet in this ambient fit the context map predicts worse than the answer mean, its prediction-target cosine (0.78) below the 0.85 train-fold-mean floor (chat map: 0.94 vs 0.81). The paired round below removes the corpus confound and confirms the deficit as a framing effect. These free-form cells were never re-fit in a well-posed basis, so their magnitudes stay estimator-limited.
Story-to-chat operator similarity is near-floor here (raw cosine 0.011; top-10 principal-angle 0.52 vs 0.99 chat pair) — a noise-level map would read the same, so the map's unreliability caps this. These free-form reads are corpus-confounded; a follow-up refit excluding the 24 CJK-carrying stories moves the context R² only to −0.652 (prefix unchanged); base cells N/A — not tested (96 of 500 kept vs floor 400).
Estimator correction (lambda-selection audit, 2026-07-31): the layer-19 free-form context cells are now re-fit with unselected reads — instruct −0.754 corrects to +0.295 (inner-group-CV) / +0.240 (reduced basis) and the CJK-excluded refit −0.652 to +0.294 / +0.242 (estimator-artifact; both prefix cells stable). Full table:
eval_results/issue_1345/lambda_audit_1887/corrections_table.md.
Prefix-arm maps ride batch numerics of a fixed template region, and the same reparameterization recovers them
Per model and direction (prefix arm, layer 19, symlog scale): the target framing's own held-out R², the naive cross-regime transfer R², and the reparameterization-recovered R².

Figure. Prefix maps are weak everywhere and explode under naive transfer. Prefix-arm within-regime R² is ~0.13 everywhere; naive transfer reaches −505 to −16,761 (massive scale/offset mismatch across framings); reparameterization recovers 0.126–0.133, matching the ceilings.
The pre-query region is a fixed template string in both framings, so the prefix slot's nominal content is conversation-independent. In a sampled extraction shard (500 conversations, instruct chat, layer 19) the stored prefix activation collapses onto 14 distinct vectors — every row at cosine 0.99999+ to the mean — whose counts follow extraction-batch boundaries and track sequence-length buckets: the arm's within-R² of 0.128–0.134 (mean baseline ≈ −0.001) most plausibly reads batch-composition numerics that proxy conversation length, not content. Its coordinates also shift wildly across framings (naive transfer −505 to −16,761), yet reparameterization recovers the weak ceiling (0.126–0.133) in all four cells: formally reparameterized, but I read this arm as the expected degeneracy companion, not independent operator evidence.
Renaming the story character to "Assistant" drops instruct story yield below the floor through two comparable channels
Stories kept of the 500-per-model target, parent run (character ARIA) vs this round (character "Assistant"), against the 400-story floor; below, every attempt (main + backfill) decomposed into kept / below-parser-floor / judge-FAIL / verdict-less shares.


Figure. The single name change costs 59 kept instruct stories. Instruct kept 420 → 361 of 500 (floor 400); base 96 under both names (fresh generations, coincidental tie). Verdict-less judge replies rise 3.5% → 15.8% of attempts (instruct) and 8.2% → 15.5% (base); kept = judge PASS with at least four confident parsed turns.
The only change is the character's name, yet instruct keeps fall from 84.0% to 72.2%, crossing the 80% floor and halting both free-form story arms — the name-vs-framing operator question was later answered by the paired round (which holds the name fixed). Two channels contribute comparably: verdict-less judge replies (no final verdict line) quadruple, and the well-formed pass rate falls from 70.9% to 63.7%.
Because the retry pass is a fresh-seed backfill sized to the main-pass shortfall, the channels split the 59-story gap about 33 to 26, and counterfactual yields near 395–404 straddle the floor — neither channel alone determines the crossing. CJK intrusion is flat across runs, though CJK-excluded the parent's own floor pass is marginal.
A doubled judge budget does not rescue the floor: the verdict-less inflation is persistent format drift, not truncation
All 365 verdict-less judge replies (both runs, both models) re-judged once at doubled budget (max_tokens 800), outcome per attempt grouped by pool: recovered PASS (clearing the parser floor or not), recovered FAIL, empty reply, persistent format drift; counts labeled.

Figure. Only 37 of 365 verdict-less replies recover a verdict at the doubled budget (17 PASS, 10 clearing the parser floor); 105 return empty and 223 stay verdict-less. Revised keeps: ARIA instruct 424, ARIA base 97, "Assistant" instruct 366 — still below the 400 floor — "Assistant" base 96.
Truncation is refuted: only 37 of 365 replies recover a verdict at twice the budget, and 19 of the 223 persistently drifting replies even approach the 800-token ceiling (0 of 99 in the round's instruct pool). The name effect works through drift, not refusal: verdict-less-with-drift rises from 0.6% to 13.3% of instruct attempts and 2.3% to 10.4% of base attempts, while empty-reply judge refusals stay flat per attempt (1.6% to 0.9% instruct; 5.0% to 4.1% base).
The near-identical round rates across two very different story pools (15.8% instruct, 15.5% base, vs 3.5%/8.2% under ARIA) support a rubric-driven mechanism — though the parent base arm shows story content alone can also move the rate. Verdict-less attempts stay parser-conformant (68.4% vs 71.6% overall).
Paired-verbatim stories on the same conversations weaken the context map: a framing effect
Held-out R² at layer 19 (context arm, instruct) for the same 2,163 conversations under three framings — narrative stories (teacher-forced), chat, plain text — plus the full-corpus chat reference, every cell fit in the ambient basis; 95% conversation-bootstrap CIs. Below: per-conversation relative error, chat vs story.


Figure. Identical conversations, verbatim answers: the story context map is negative while the chat map stays positive. Story −0.31 (CI −0.33 to −0.28) vs chat +0.24 on the same 2,163 rows; per conversation the story map is worse for 88% (median relative error 1.27 vs 0.78). Plain text on the same rows reads 0.02. Ambient-basis reads; re-read below.
The plan's verdict lattice fires framing effect: the paired-story CI sits wholly below zero while the same-row chat comparator stays positive. Both signs are artifacts of the ambient estimator — the well-posed re-read in the final result reads story +0.367 and chat +0.609, so the framing deficit is roughly twofold rather than a sign flip.
The +0.075 teacher-forced inflation on matched rows sits in the qualification band; on-policy would be weaker still. Caveat: kept-subset selection is large — plain text drops to 0.02 (CI −0.010 to 0.050) on these rows — and free-form ARIA comparisons remain context only (two variables changed).
The story failure sits in the story context representation: the operator reparameterizes into chat one-way
Per direction (context arm, layer 19, same 2,163 conversations): each target framing's ceiling, the R² recovered by data-paired reparameterization of the other framing's operator, and the 10 matched-capacity null draws.

Figure. Reparameterization is one-way. The story operator moved into chat recovers 0.61 (chat same-rows ceiling 0.24; shuffled-fit nulls −0.03 to −0.05, rotation nulls −1.3 to −1.5); the chat operator moved into stories reads −0.17, below its shuffled-fit nulls (−0.05 to −0.07). Reverse comparisons use the ambient story ceiling.
The story answer representation is intact: chat context activations predict it at 0.56, and composing through the story operator recovers 0.61 in chat — above the matched chat ceiling. Weaker is prediction into story coordinates from the story context slot — read here at the attribution colon; the slot ablation below sweeps four further read positions, and the reverse direction stays weak at every one.
Data-paired aligned operator cosine is mid-band (0.455 vs the chat pair's 0.855; rotation null ≈ 0.0005); naive transfer collapses in all four directions. I read this as one shared operator whose story-side context coordinates carry framing-specific variability; the alignment asymmetry agrees (story→chat context alignment +0.25, chat→story −0.26; answer alignments 0.77–0.79 both ways) — the errors-in-variables signature. The prefix arm concurs: story→chat recovers the 0.13 ceiling, chat→story fails.
Teacher-forced story capture inflates the read by a qualification-band amount, not a disqualifying one
Held-out R² at layer 19, both arms: the full teacher-forced story cell (2,163 conversations), the teacher-forced cell refit on the on-policy companion's 117 conversations, and the on-policy companion itself; 95% conversation-bootstrap CIs. TF = teacher-forced.

Figure. The teacher-forced read is +0.075 above the on-policy read on matched rows (context arm). On the 117 shared conversations (within-sweep rig at layer 19, as plotted): teacher-forced +0.07, on-policy −0.01; the prefix arm shows no gap (−0.25 vs −0.26). Full teacher-forced cells: −0.31 (context), −1.37 (prefix). All ambient-basis reads.
The gap lands in the plan's qualification band (above 0.05, below the 0.20 demotion gate), so the teacher-forced headline stands with the companion read attached; per the calibration note the gap also bundles any residual pre-slot construction inflation. Its direction survives the well-posed re-read in the final result, where on-policy +0.262 sits below teacher-forced +0.367 on the full cells. The 117 companion-kept conversations are an easier subset (the teacher-forced refit is positive there, +0.07, against −0.31 on the full cell), so the gap is read on matched rows only.
Estimator correction (lambda-selection audit, 2026-07-31): the corrected inner-group-CV companion reads are teacher-forced +0.137 vs on-policy +0.087 (context) and −0.047 vs −0.062 (prefix) — the gap direction survives at +0.050 (full table: eval_results/issue_1345/lambda_audit_1887/corrections_table.md).
Sweeping the story read position: no slot closes the gap to chat in the ambient fit
Held-out R² at layer 19 (context arm, instruct, same 2,163 conversations) for the attribution-colon anchor and four other read positions, with adjusted CIs, the chat matched-row ceiling band, and per-slot shuffle-null 95th percentiles. Below: per-slot paired deficits vs chat, and the bootstrap distribution of the max-over-slots deficit D.


Figure. The best slot rises to zero; none reaches chat. End-of-question −0.33, pre-attribution −0.40, attribution mean-pool −0.26, pre-answer −0.015 (adjusted CI −0.040 to +0.010, straddling zero), vs anchor −0.30 and chat +0.244; the max-over-slots deficit D is −0.259 (95% CI −0.276 to −0.243), wholly below zero (n = 2,163). Ambient-basis reads throughout.
The verdict lattice fires its intermediate branch: the anchor's extreme read was partly positional — the token just before the answer clears zero within its adjusted CI — yet D's CI sits wholly below zero, so no read position recovers the chat ceiling. Every slot here was fit in the ambient basis, so the deficit ranking is informative while the absolute values are not — the anchor's own well-posed re-read is +0.367. The pre-answer read is layer-robust (its best layer, 20, reads −0.013), every slot beats its shuffle null (95th percentiles −2.0 to −1.8), and the fresh capture reproduced all three landed cells with deviation 0.0000.
Estimator correction (lambda-selection audit, 2026-07-31): re-fit with unselected λ the five slots read +0.373 to +0.508 (inner-group-CV; pre-answer best, anchor +0.435) against matched-row chat +0.645 — no slot reaches chat under the corrected estimator either. Full table:
eval_results/issue_1345/lambda_audit_1887/corrections_table.md.
Every read position leaves the one-way reparameterization intact
Naive cross-framing transfer per slot at layer 19, and reparameterization recovery in BOTH directions against shuffled-fit nulls. Below: per-conversation squared error, chat map vs the worst (pre-attribution) and best (pre-answer) slot maps, colored by chat-error decile.


Figure. Forward reparameterization into chat succeeds from every slot; the reverse direction does not. Slot operators moved into chat recover 0.610–0.643 (same-rows ceiling 0.244; shuffled-fit nulls −0.10 to −0.03); the chat operator moved into slot coordinates reads −0.27 to −0.14 at the three negative slots and +0.09 at pre-answer. Naive transfer is negative in all eight directions (−6.1 to −1.6).
The forward recovery is numerically slot-invariant: the three negative slots all read 0.60980, matching the anchor's landed recovery to 6×10⁻⁷ despite within-R² spanning −0.40 to −0.26 — most plausibly the two-stage ridge composite cancels the slot basis in this overparameterized regime, so those four numbers are one measurement of the chat side, not independent confirmations. The slot-informative evidence is the reverse direction and the pre-answer deviation: the chat operator moved into slot coordinates recovers −0.27 to −0.14 at the three negative slots and +0.09 at pre-answer — above its −0.02 ceiling only vacuously — while pre-answer's forward composition alone rises to 0.643. Chat contexts still predict the story answers at 0.56 (slot-independent by construction), and every within-R² and ceiling quoted here is an ambient-basis read.
On-policy story answers at powered n show the same framing deficit: it is not a teacher-forcing artifact
Within-regime held-out R² across all 28 layers (instruct, context arm) for the on-policy story cell — 2,018 conversations, answers written freely in-story — beside the full-corpus chat and plain-text curves; dashed line = layer 19. Below: per-conversation relative error on the same conversations, matched-row chat map vs on-policy story map; dashed identity = equal error.


Figure. The on-policy story map is negative at every layer and worse than chat for nearly every conversation. Story −0.55 (CI −0.57 to −0.52) at layer 19 vs full-corpus chat +0.65 and plain text +0.63; the story map is worse for 98.6% of the 2,018 conversations (median relative error 1.45 vs 0.44). Ambient-basis reads; re-read below.
The verdict lattice fires framing effect on the model's own free answers, deeper than the teacher-forced round (−0.55 vs −0.31; matched-comparator deficits −1.07 vs −0.55; worse-conversation fraction 98.6% vs 88.0%). Both negatives are ambient-estimator artifacts: the well-posed re-read in the final result reads on-policy story +0.262 against matched-row chat +0.567, again a roughly twofold deficit rather than a sign flip. Matched-row comparators (quoted, not plotted): chat +0.53, plain text +0.09 vs full-corpus +0.65/+0.63 — the gate keeps chat-easier, markedly plain-text-harder conversations, so only the direction is cross-round comparable; the 117-conversation companion stays the row-matched read.
On-policy reparameterization stays asymmetric: the forward composite beats the chat ceiling, the reverse turns only weakly positive
Reparameterization recovery at layer 19 (instruct, context arm, same 2,018 conversations), both directions of the chat and on-policy-story pair: each target's within-regime R², the R² recovered by data-paired reparameterization of the other framing's operator, and shuffled-fit nulls (mean of 5 draws).

Figure. Forward recovery again beats the chat ceiling; the reverse composite rises only to +0.16. The story operator moved into chat recovers 0.56 (within-chat ceiling 0.53); the chat operator moved into on-policy stories reads +0.16 against shuffled-fit nulls near −0.03 and a story within-fit of −0.54.
The untransformed chat map already matches the story's own ambient fit (−0.54 both); the aligned chat composite reaches +0.16 where the teacher-forced round read −0.17 — signal the ambient direct estimator misses, and which the well-posed re-read below recovers directly. The paired round's asymmetry persists in kind: composition into chat outperforms its ceiling, composition into story coordinates stays far below the forward direction. The aligned operator cosine (0.377; chat pair 0.855) is not plotted (operator comparison), and the prefix arm reproduces its teacher-forced pattern.
The negative story R² is estimator-limited, not representation-limited
Held-out R² (left) and rank-1 retrieval (right) at layer 19 on the 2,163 teacher-forced paired rows, for chat context→chat answer, story context→chat context and story context→story answer, as the ridge penalty is held fixed across four decades in the full 3,584-dimension basis; crosses mark the selector's own choice.

Figure. The selector, not the story representation, produced the negative reads. At its own choice the story leg reads −0.306 and chat +0.243; held at penalty 1,000 they rise to +0.408 and +0.645. Retrieval falls as the penalty rises, so the gain is regularization, not a better map.
With 1,730 training rows against 3,584 dimensions every ambient fit above is under-determined, and the selector takes the smallest penalty in all five folds, unchanged when the grid is extended four orders of magnitude. A train-fold PCA refit gives story +0.367 teacher-forced and +0.262 on-policy against matched-row chat +0.609 and +0.567.
The information is present with no fitted map (rank-1 retrieval to the paired chat context on 354 of 2,163 rows, chance 0.0005; top-ten canonical correlations 0.90) and a perceptron does not beat ridge, so what remains is a twofold weakening of a real map. The reduced-basis values are the corrected headline; the forced-penalty sweep selects its own optimum (peak +0.418 at penalty 10,000) and is a conservative diagnostic only.
Lambda-audit corroboration (2026-07-31): an independent 67-cell replay and re-selection audit reproduced every committed cell (|ΔR²| ≤ 0.001) and classifies the negative story reads as selector artifacts — corrected point-estimate reads (CI/null machinery not re-run): paired +0.435 inner-group-CV / +0.367 reduced, on-policy +0.321 / +0.262, matched chat +0.645 / +0.609. Full table:
eval_results/issue_1345/lambda_audit_1887/corrections_table.md.
Answer authorship moves the map as much as story framing, and the base model reads best in the story render
Held-out R² at five read positions (layer 19, read position → answer-mean map, matched-n lattice, ambient inner-group-CV read) per framing and answer provenance. Left panel: base model, every answer its own. Right panel: instruct — chat, bare-text and story cells embedding the original reference answer, plus the bare-text cell scoring the model's own answers. Cells span 2,086–3,030 conversations.

Figure. Whose answer it is moves the map as much as which framing renders it. Solid filled: reference answer embedded. Dashed open: the model's own answer. Whiskers: conversation-grouped bootstrap 95% intervals; dotted line: largest per-cell shuffle-null 97.5th percentile.
With the reference answer embedded, instruct bare text tracks chat (+0.63 versus +0.65 at the boundary marker) while the story render reads +0.44. The same bare-text cell scoring the model's own answers falls to +0.38, and the gap persists at 0.20–0.30 in the full-pool companion, whose training folds of 3,694 rows exceed the 3,584 input dimensions. A judge scores those self-written answers 56 of 100 for content drift from the reference versus 17–18 for the base model's own answers. The base ordering reverses: its own answers after the instruct-written story prefix read +0.28, above bare text at +0.20 and chat at +0.18. The reduced-basis companion reproduces every ordering.
Freely written story answers carry a graded AI-likeness signature of the character, and embedding the reference answer erases it
Judge-scored AI-likeness (0–100, five draws per item, 300 answers per cell) of the story answer span, per character and answer provenance; left panel base, right panel instruct. Own-answer cells score the character's freely written answer; the control cells embed the same reference answer under every character.

Figure. The axis reads who wrote the answer, not which character is speaking. Red dashed open: the character's own answers. Slate solid filled: the verbatim reference-answer control. Whiskers: ±1.96 standard errors over answers; labels give cell means.
The reference-answer control sits flat at 78–81 under every character and both models, so the judge reads the answer text rather than the wrapper. With the character writing its own answer the score grades: the calm-AI character reads 72–74, the warm helper 62–64, the theatrical villain 55–58 and the ordinary person 53, near-identical across base and instruct. A channel check supports the reading — rows never naming the character reproduce each pooled mean, and name-carrying rows score about 25 points lower, the opposite direction of a name-token confound. The axis is judge-scored, not human-validated, and five of eight reference-answer cells missed their generation yield floor, so their rows are selected subsets; the villain instruct own-answer cell scored 294 of 300 answers.
Character context→answer maps read as well as the assistant map, and the assistant operator transfers to them in proportion to the character's judged AI-likeness
Within-cell held-out R² at layer 19 (context arm, reduced basis) for four characters × two answer modes × two models, plus the rung ladder from the assistant operator (instruct) or chat operator (base) into each character map, and banked AI-likeness vs rung-4 recovery fraction.



Figure. Every character carries a linear context→answer map at layer 19, and the assistant map transfers into a character map in graded proportion to AI-likeness. Top: within-cell ceilings — inserted instruct 0.31–0.37 / base 0.32–0.38; on-policy instruct 0.18–0.24 / base 0.21–0.26; all sixteen cells sit in the 0.26–0.37 assistant-story band; prefix arm 0.015–0.057 everywhere. Middle: instruct rung 1 lands positive on most assistant→character directions and climbs monotonically to rung 6; base rung 1 sits sharply negative (−0.9 to −1.3), and needs full A·M·B to close 91–93% of ceiling into the inserted (chat→char_base) char maps and 40–68% into the own-answer (chat→char_op_base) char maps. Bottom: instruct rung-4 recovery rank-agrees with AI-likeness (HELIOS 92% / Wren 85% / Vex 73% / Dana 80% inserted; HELIOS 83% / Wren 74% / Vex 58% / Dana 68% on-policy). n_matched 1,056–2,173.
Prefix cells 0.015–0.057 across all sixteen (narrative-prose weakness — 2,000+ unique slot vectors per cell, not the parent chat-prefix batch-numerics degeneracy). Base chat→char_base closes 91–93% of ceiling via full A·M·B while base chat→char_op_base closes only 40–68% — story-authorship compounds the base penalty. Ceilings order with AI-likeness (ρ +1.0): base reads AI-likeness-ordered ceiling, instruct AI-likeness-ordered reparameterization difficulty. Base ceilings sit in the assistant-story band despite the yield-halted base assistant-story arm, so character maps track the contexts, not the instruct identity (n=4 caps this as consistent-with).
Repro: 9.78 GPU-h used (14 budgeted), GCP lane; code at b7ab0b3b75 (branch issue-1345), figures at 319fd10131 and the two per-unit companions at bfa7acfc84. Eval JSONs: eval_results/issue_1345/ (34 files — cells_R_*, nulls_R_*, cross_regime_transfer_*, operator_comparison_*, verdict_lattice.json, parity_gate.json, story_regime_coverage.json, phase0_probe.json, plus two revision-round probes: prefix_degeneracy_probe.json — 14 distinct prefix vectors / batch-boundary counts / length-bucket alignment from turnstore shard instruct_chat_s_shard000 — and prediction_cosine_baseline_probe.json — train-fold-mean cosine floors from preds_cache, both at pinned HF revision 2a3cb30a; free-analysis follow-up refit under followup_cjk_excluded/, 5 files at commit ffe970f54f). Data on the HF data repo under issue1345_framing/ — verified live: analysis_tensors/turnstore (90 files), analysis_tensors/preds_cache (26), inputs/matched_n (1), raw_completions/stories (16, incl. kept_stories_*.jsonl, raw_stories_*.jsonl, judge results, yield JSONs). Reused artifacts: parent corpus + fit core from #825 at pinned data revision 7159e5804d (HF superkaiba1/explore-persona-space-data, prefix issue825_userbase_map/analysis_tensors/ — probed live at that revision) — fitness: same S-track, re-extracted with the added prefix slot, parity gate reproduced all 4 layer-19 anchors with deviation 0.0. Models: Qwen/Qwen2.5-7B, Qwen/Qwen2.5-7B-Instruct. Config slugs: r1|r2|r3|r4 × instruct|pretrained × context|prefix (R_{model}_{regime}_{arm}; r4 = paired stories at variant conversation_paired_stories_assistant; r4slot_{qend|preattr|preans|attrmean|anchor} = the slot-ablation cells at variant story_slot_ablation). Plan deviations (4, declared): canonical issue1345_framing/ HF prefix; matched-n as row allowlists on single stores; reparam matched-capacity nulls at layer 19 only (5 draws/type); story-pair aligned cosine reported as operator-spectrum Procrustes optimum + raw-cosine rotation band for the free-form pair (data-paired alignment undefined for unpaired corpora — RESOLVED for the paired round, whose data-paired aligned cosine is reported). No WandB runs (no training). Follow-up round assistant-named-story: code at f90c434028 (branch issue-1345); eval JSONs eval_results/issue_1345/assistant_named_story/ (31 files, incl. the re-judge artifacts rejudge_malformed.json + rejudge_malformed_rows.jsonl at 9f53f4a1d4); 13 round figures at b2b01d08fd, yield hero + attempt-decomposition companion at 80eb96865f, re-judge outcome panel at 01b81873e5. Round data on HF under issue1345_framing/assistant_named_story/ — raw_completions/stories (16 files) and rejudge/ (2 files), verified live via scoped list_repo_tree (stories at data-repo revision debcdda045). Reused for the round: parent turnstore + matched-n allowlist at pinned data revision 2a3cb30a (refit-equality + parity deviation 0.0). Round GPU: 6.42 GPU-h realized (13 budgeted; story generation + refits — story extraction never ran). Follow-up round conversation-paired-stories: code at 081bfce3c8 (branch issue-1345); eval JSONs eval_results/issue_1345/conversation_paired_stories_assistant/ (51 files: 38 top-level + 13 under matched_row/ — comparator refits, tf_op_calibration.json, verdict_lattice.json, reparam_recovery_r1_r4_*, per-cell bootstrap verdicts; the plan §6.5 row-7 coverage DV declared as story_regime_coverage.json landed as story_yield_paired_instruct.json + story_yield_paired_op_instruct.json under raw_completions/stories/); pod figures at 8fb29616a9, analyzer companion figures (matched-rows bars, per-conversation scatter) at 2390b30a5e; the reparam direction-points figure was regenerated at 45ed137285 (legend moved outside the axes so all 10 null draws per direction render visibly — same data and sidecar points). Round data on HF under issue1345_framing/conversation_paired_stories_assistant/ — verified live via scoped listing: analysis_tensors/turnstore (14 files), analysis_tensors/preds_cache (34), raw_completions/stories (16 + judge caches), inputs/matched_n (2). The superseded ARIA-scope bundle (kept 2,117, 43 under the floor) is retained at issue1345_framing/conversation_paired_stories/ (verified live) — superseded for the headline, never deleted. Round GPU: 6.56 GPU-h realized (16 budgeted). Round plan deviation (declared): bounded floor-driven retry waves (at most 3, per-row 3-draw cap) vs plan §7's single retry batch, v9-sanctioned. Follow-up round story-slot-position-ablation: code at d9c41005fd (branch issue-1345; run tip d9f8571f24); eval JSONs eval_results/issue_1345/story_slot_ablation/ (25 files: 7 cells_*, 7 nulls_*, 4 cross_regime_transfer_r1_r4slot_*, 4 reparam_recovery_r1_r4slot_*, slot_verdict_lattice.json, slot_row_coverage.json, refit_equality_slots.json) and 6 round figures under figures/issue_1345/story_slot_ablation/, both at run push 38625f8dbc (the transfer/reparam bars figure regenerated with the reverse-recovery series at 6ed6f14735); the per-slot overlap/coincidence diagnostics are embedded in slot_verdict_lattice.json + slot_row_coverage.json (no standalone per-slot diagnostics files exist). Round data on HF under issue1345_framing/story_slot_ablation/ — verified live via scoped listing: analysis_tensors/turnstore (10 shard files + 3 manifest/diagnostic sidecars), analysis_tensors/preds_cache (8). Reused for the round: the kept paired-story bundle at pinned HF data revision db92091a8c136d77bed4b25a460ee0bd6223f4a7 and the paired round's r1-instruct turnstore stems — fitness: same rows, same rig; the three-cell refit-equality gate reproduced the landed values with deviation 0.0000. Round GPU: 0.92 GPU-h realized (4 budgeted); zero Anthropic API calls. Round plan deviation (declared): the operator-cosine legs were dropped (the verdict rests on within-R² and D). Follow-up round onpolicy-assistant-story: code at 7b56489760 (branch issue-1345); eval JSONs eval_results/issue_1345/onpolicy_assistant_story/ (42 files: 33 top-level + 9 under matched_row/, incl. verdict_lattice.json, reparam_recovery_r1_r4_*, the matched-row comparator refits, and tf_op_calibration.json recording the declared no-teacher-forced-arm skip) and 17 round figures under figures/issue_1345/onpolicy_assistant_story/, both at results push d720b0a8bc; the reparameterization-recovery bars figure regenerated with reader-facing labels at bf2de44f4b (same data and series); the per-conversation companion figure built analyzer-side from the round's layer-19 preds cache (pinned HF revision cc3c35fe, script scripts/issue1345_onpolicy_perconv_fig.py, pooled R² validated against the committed cell values before plotting) at a3b734c512. Round data on HF under issue1345_framing/onpolicy_assistant_story/ — verified live via scoped listing: analysis_tensors/turnstore (10 files), analysis_tensors/preds_cache (30), raw_completions/stories (7 files + judge cache), inputs/matched_n (2). Reused for the round: the parent turnstore + matched-n allowlist at pinned data revision 2a3cb30a — fitness: same rows, same rig; refit equality at most 2.2×10⁻¹⁴ on all four base cells, parity deviation 0.0 on all four anchors. Round GPU: 5.94 GPU-h realized (13 budgeted). Round plan deviations (declared): the parent's four carry over unchanged; no teacher-forced arm (the teacher-forcing-distortion calibration is N/A); the plain-text↔story operator pair reports the spectrum-cosine form only (the data-paired alignment is implemented for the chat↔story pair). Inline probe round story-context-info-probe (zero GPU, user-directed estimator re-read on the landed stores): analyses at 3ffc51d581 and 9f0fb74d4a, script scripts/issue1345_story_info_probe.py; eval JSONs eval_results/issue_1345/story_context_info_probe/ — summary.json, forced_lambda_probe.json, wide_lambda_probe.json, raw_retrieval_story_tf.json, raw_retrieval_story_op.json, alignment_story_tf.json, alignment_story_op.json, decomposition_story_tf.json, decomposition_story_op.json, nonlinear_probe_story_tf.json, nonlinear_probe_story_op.json — and 4 figures under figures/issue_1345/story_context_info_probe/ (lambda_sweep.png, cca_spectrum.png, raw_retrieval_bars.png, ridge_vs_mlp_bars.png), all at 9f0fb74d4a. Reused for the round: the landed paired-story, on-policy and chat turnstores at pinned data revisions 2a3cb30acada04defc84fd04d28a2b54da3104cd and cc3c35fe2cbd820ea8dfb49a70db85f36f5f0097 — fitness: same rows, folds, seed and kernel as the landed fits, with only the estimator changed. Round compute: 0 GPU-h, zero Anthropic API calls. Scope of the round: it re-reads the paired teacher-forced, on-policy and matched-row chat context cells only; the free-form story cells, the four ablation slots, and every reparameterization leg keep their ambient-basis values and were not re-fit. Acknowledged WARNs: total body prose exceeds the budget, several result blocks exceed the 120-word warn level, some Takeaways bullets exceed 30 words, one figure caption exceeds 60 words, and the char-generality figure text carries the character slug tokens (H3 refers to the paper's H3 low-ceiling floor annotation, helios_op_base / wren_op_base / dana_op_base / char_op_base are the config slugs the fit driver writes — the plain-English mapping is HELIOS/Wren/Dana/Vex organizational-op mode, base model) — nineteen results across both mapping arms plus seven follow-up rounds including the character-generality fold need the space; the pod-generated round figures (tf_vs_companion_instruct.png, the slot-round figures, and the on-policy-round figures other than the regenerated reparameterization bars) carry no .meta.json sidecars — their per-point data lives in the round eval JSONs cited above. Follow-up round story-boundary-ablation (inline, user-directed): matched-n lattice eval JSONs at c6e15f0e70 (eval_results/issue_1345/story_boundary_ablation/story_boundary_ablation/, 291 files — 142 cells + nulls + xy_grid.json + reparam_ladder.json + verdict_lattice.json); full-pool companion at fad1f3ad8e (eval_results/issue_1345/story_boundary_ablation_fulln/, 88 files); judge legs + axis validation at fbb2f4f1be (eval_results/issue_1345/judge_legs/); round figures + plot script (scripts/issue1345_story_boundary_fold_figs.py) at aeede2064230f5d6c01a7734c8495e7da03e6066. Round data on HF under issue1345_framing/story_boundary_ablation/ — verified live via scoped listing (children: analysis_tensors, analysis_tensors_fulln 130 files, eval_mirror, eval_mirror_preds, eval_mirror_preds_fulln 40, raw_completions/judge_legs 40 entries, raw_completions/stories 48). Compute: fellows SLURM lane (free) — generation + captures jobs 16257/16283–16382, matched fits 17912/17918, full-pool GPU fits 17967; roughly 25 H200 GPU-h estimated from job walls, zero paid GPU; judge spend 30,000 Batch-API draws. The base-side reference-answer twin stores are captured and persisted on HF but never fit — a durable round marker claiming the companion completes the base-side twins is superseded by the committed artifacts. Follow-up round char-capture-ladders: workload output (32 within-cell fits + 16 rung ladders) at 897177bfbb (branch issue-1345), stager + Phase-F driver at 32c70a3673 / 94e9829963 / 98465b6cdb / fc67ecc8b1; fold figures + summary at c028c83ed4. Eval JSONs under eval_results/issue_1345/story_char_ladder_fill/ — 32 per-cell fit JSONs (cell_char_<char>[_op][_base]__(instruct|pretrained)_(context|prefix)_L19_reduced_s0.json, GCV-selected λ per fold with dof_frac_max 0.07–0.32, well below the 0.9 cap so #1887 selector-artifact recurrence is not at issue), 16 rung ladders (ladder_(r1|r4|r4op)__char_<char>[_op][_base]__(instruct|pretrained)_context_L19_reduced_s0_nd2.json — r1 = base chat → char_base, r4 = instruct paired-story → char, r4op = instruct on-policy story → char_op — 5-fold conv-grouped CV, matched-capacity nulls per rung, kNN retrieval fold-0), and the fold-time char_ladders_summary.json / char_cells.json / char_examples.json. Four figures under figures/issue_1345/story_char_ladder_fill/ at c028c83ed4: char_ceilings.png (16 within-cell ceilings, both arms, vs the assistant-story band), char_transfer_tiers.png (rung R² per character on 3 panels), char_transfer_tiers_reverse.png (reverse-direction companion), ailikeness_vs_transfer.png (rung-4 recovery fraction vs AI-likeness). Round GPU: reported by the workload run (Phase-F stage→fit→delete driver on the fellows SLURM lane, GCV-selected ridge on the train-fold PCA reduced basis, k = min(1024, ⌊n_train/2⌋), inner-group-CV over conversation ids). Round plan deviations (declared): base assistant-story arm N/A (yield-halted last round; base uses r1 chat→char_base for the transfer ladder, instruct uses r4/r4op assistant_paired→char); story prefix arm reported alongside context but read only as a weakness diagnostic (prefix slots are unique per conversation — no batch-numerics degeneracy — but the R² is 0.015–0.057 by narrative-prose construction, and prefix is held fixed per the mapping-arms rule since context is the swept slot). n=4 characters per Spearman correlation is the design's ceiling (consistency check, not a significance test). Unreviewed rogue commit disclosure (promotion-time signal): commit b5cabfa929 — a "scaffold-splice r1: decoupled scaffold+splice story pipeline" commit adding a scaffold-generate / splice / strip pipeline, authored 2026-08-03 15:22 -0700 — landed on issue-1345 mid-round outside this task's follow-up-scope machinery (no matching epm:followup-scope / epm:experiment-implementation / epm:code-review for a scaffold-splice label), so the code did not pass through the standard planner / adversarial critic / implementer / code-reviewer pipeline. Blast radius is contained to per-issue-scoped tooling (scripts/issue1345_gen_scaffolds.py, scripts/issue1345_scaffold_common.py, scripts/issue1345_strip_scaffolds.py, tests/test_issue1345_scaffold_splice.py, +1,497 lines; no src/, no workflow surface), and none of the results in this body depend on it. Left as-is for user triage at promotion; the branch's Step 10d rebase-merge will otherwise carry it onto main.
Context: created 2026-07-15; run 2026-07-15→16; zero-GPU free-analysis follow-up folded 2026-07-16 (CJK-excluded story refit, auto-run before parking; headline unaffected). Lineage: new-direction child of parent #825 (frontmatter parent_id: 825), captured from user chat; reuses #825 artifacts — parent corpus, fit core, and the Result-2.5 reparameterization method. Originating prompt (verbatim): "assistant in chat template vs assistant outside chat template vs ASSISTANT in generic stories | Generate assistant stories (chose: generate assistant in narrative prose, GPU)". Same-issue follow-up round assistant-named-story run + folded 2026-07-16 (user-requested, epm:followup-scope 2026-07-16T07:55Z); verbatim ask: "is ARIA named aria in the stories or 'assistant'? could you rerun with a character named 'assistant'?". Same-issue follow-up round conversation-paired-stories run + folded 2026-07-17 (proposer-initiated cheap-band, epm:followup-scope 2026-07-16T09:37Z, redundancy-screened not-redundant); verbatim proposal title: "Conversation-paired story regime — data-paired reparameterization on the story pair — [Type: Diagnostic]". Production landed on relaunch 3 (plan v9) after a smoke-leg crash fix, a wedged-shard hot-fix relaunch, and a yield-instrument fix round whose ARIA-named run kept 2,117 of 2,700 (43 under the floor; bundle retained on HF, superseded); the story character was renamed ARIA → "Assistant" for production per user directive 2026-07-17. Same-issue follow-up round story-slot-position-ablation run + folded 2026-07-17 (proposer-initiated cheap-band round 2 of 2, epm:followup-scope 2026-07-17T18:32Z, redundancy-screened not-redundant); verbatim proposal title: "Story context-slot position ablation — is the collapse the slot or the framing? — [Type: Ablation]". The round's GCP launch died pre-workload (crash-persist bundle att-20260717-202706) and was pivoted to RunPod (pod-1345), completing in one production run. Same-issue follow-up round onpolicy-assistant-story run 2026-07-18 + folded 2026-07-20 (user-requested, epm:followup-scope 2026-07-17T22:26Z, queued behind the slot round); verbatim ask: "i want on-policy generations from characters labelled assistant in a story". Run on pod-1345-onpolicy (1×H100), completing in one production run (smoke + production). Inline estimator probe story-context-info-probe run + folded 2026-07-30 (user-directed zero-GPU analysis on existing artifacts, run under the user-chat inline carve-out, so no epm:followup-scope marker was posted by design); verbatim ask: "it seems weird that the assistant map in stories is so bad. Can you look into this more deeply?". Its result drove a user-directed correction pass on 2026-07-30 that rewrote the title claim and ## Takeaways, and annotated the free-form, paired, teacher-forcing, slot-ablation and on-policy results: the ambient-basis values and their figures are retained as published, with the well-posed re-read carried in the final result. An independent lambda-selection audit (#1887, run 2026-07-31) replayed all 67 committed ridge cells (replay gate PASS, |ΔR²| ≤ 0.001) and supplied the corrected unselected reads annotated in the results; corrections table: eval_results/issue_1345/lambda_audit_1887/corrections_table.md. Same-issue inline round story-boundary-ablation run 2026-07-30→08-02 + folded 2026-08-02 (user-directed inline rounds under the user-chat carve-out); verbatim asks: "run inline right now" (the answer-provenance program), "run option A" (the full-pool companion), "yeah it's fine" (declining the ~30-row human audit of the AI-likeness axis). Same-issue follow-up round char-capture-ladders run 2026-08-03 + folded 2026-08-03 (epm:followup-scope v5 2026-08-03T14:31Z; user-requested Phase-F stage→fit→delete pipeline to unblock the previously-blocked 4-character × 3-framing story-map transfer read that #1345's report Result 2 flagged as "cannot be made yet"). Verbatim ask (from epm:followup-scope v5): unblock Result 2 by capturing teacher-forced layer-19 activations for the 16 character cells (4 characters × 2 op-arms × 2 models), fitting the within-cell context→answer maps in the reduced train-fold PCA basis, then running the rung ladder from the assistant-side operator (instruct: paired assistant-story / on-policy assistant-story; base: chat, because the base assistant-story arm was yield-halted). The fold folds the resulting 32 cell fits + 16 rung ladders into a new ### <finding> result and adds the character-generality Takeaway; it does not retitle the H1 (the assistant-map framing effect + reparameterization asymmetry remain the headline, and the character-generality result reads as a scope-widening of the same manifold, not a headline reversal). Concurrent scope-drift disclosure: commit b5cabfa929 (scaffold-splice, +1,497 lines) landed on issue-1345 mid-round without any matching epm:followup-scope / epm:experiment-implementation / epm:code-review; blast radius contained to per-issue #1345 scripts + tests (no src/, no workflow surface), and no result in this body depends on it — left for user triage at promotion.