mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
The route keeps the front door: auth, the coach capability, the body read and schema, the rate limit, the locale and the inbound refusal screen. Everything after it moves into one module per step: conversation, context, chain, budget, model, reply-guards, cards, provenance, persist, sse, errors and pipeline. The capability re-check at the egress site stays owned by the route and is handed to the pipeline, so the capability inventory still reads both calls there. The stream producer now writes through a TurnEmitter created inside createSseStream and passed to the model step, which is where live progress frames will come from. Nothing writes to it early yet. No behaviour change: the golden transcripts pass byte-identical, the existing route tests pass unmodified, and every annotate, audit and error-code name appears as often as before. Guards follow the code. The fence call-site check reads turn/context.ts, the German-default locale ban covers every file in turn/, and the fenced module-graph test now asserts that turn/sse.ts and turn/errors.ts reach neither the tool registry nor the snapshot builder. That test named lib/ai/coach/tools.ts, which stopped existing when the registry became a directory, so its negative check could not fail; it points at tools/index.ts now, and a new sanity check fails if the tool route can no longer reach the path it names.