Soul s1 findings: an empty mean printed 0.00 beside n=0 (now Option, printed
none, like SplitMean); the printed line and whole ablate output are pinned by
exact string, with drop and permute each carrying their own n; a missing
recorded round answer is RunError::Unrecorded and says the prompt digest
drifted or the head inventory moved, not that a store would not read; the
unusable count is pinned for variant and item sides.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
LOWER_INSTRUCTIONS gains 'a grade is permille, 0 to 1000' (the encode brief
already states it). The pinned lowering test requires the sentence and asserts
the item's speaker entity id and group are in no prompt text.
This edits context.rs, a PROMPT_SOURCE_DIGEST input: the digest moves and runs
opened before this commit stop opening; open a fresh run to ablate under the
new brief.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
One dao packet admitted with its own stance, an anger-and-restraint stance and
none: three digests, each packet line ending in exactly that stance's JSON, the
rest of the text byte-equal, the stance features glossed in the one inventory
listing. No prompt change; the lowerer already reads the stance.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
RecordedAnswers is the one reader of <digest>.answer files (AnswerFiles reads
through it). RunStores::stance_ablation asks a fresh lowerer the round's own
lowering prompt again (replay), with the stance emptied (drop) and with the
next item's stance in its split (permute), for live Train and Validation
packets only, and reads how far the lowering moves and what the item's own
stance adds to fidelity. A diagnostic in <root>/ablation-<n>: records nothing,
never writes round-<n>. `weksa loop ablate <root> --round n`; exits 3 until
answered. Touches no pinned prompt-source file.
The source tripwire now allows the ablation as a second Prompt::lower call site.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>