b9ee858421
V-397. llmphraser.go went from 1296 lines to 446 and now holds the type, its construction and the six entry points. The reply contract, the llama-server backend, the wire structs, the nudge floor and the prompts each got a file. The brief's premise was wrong and the agent said so. replier_llm.go parses nothing and already called the shared parser, so there was no second copy. The real drift was one layer down. chatWithSystem and chatWithMessages were two transports that had diverged twice: only one logged the raw generation, so an unparseable nudge left nothing to read, and they labelled truncation differently. Both go through postChat now, which always logs. PhraseNudge and PhraseReminder took their fallback in silence when the model returned a parsed but empty response. They log it now. What the owner hears is unchanged. The legacy body/summary parser is deleted. It predates the response/mood shape, no prompt asks for it, and the grammar cannot emit it. make eval-phrasing is 15/15 before and after with the same strings.