6c24e19b83
V-564. One decision.Record per turn: the utterance, the winner, and a Claim per claimant carrying its stage, name, the intent it would have made the turn, the score it reported, the outcome and the reason. HasScore is separate from the score so a real 0.0 is not read as no score. Outcomes are won, declined, lost_on_order, lost_on_score, thinned, merged, never_asked. Every stage declares its roster up front, so Finish names everyone who never reported. NEVER ASKED is explicit rather than an absence, which is the fact the hardcoded ordering hides. Covered: the seven pre-route resolvers, eleven stage 0 grammar sets, the LLM router and the classifier with which arm of gateLLMDecision thinned a route, the classifier runners-up, the follow-up merge, 27 query sources, and a terminal action-handler or clarify-ask claim. On by default, no flag. It rides the context like querysource.go and is installed in runTurn, so mic, telegram and web leave the same trail. Storage is a 25-turn in-memory ring: no write on the answer path, no migration, and none of his words outlive the diagnosis. Readable on /trace. TestRecordingDoesNotChangeTheReply answers the same utterances with and without the ring.