▸ T0 · main thread · generate Substack post from build log · interactive
One line. That's all it took to corrupt every draft the pipeline generated.
The CLAUDE.md orchestrator policy requires claude p to emit a routing verdict on every single response: ▸ T0 · main thread · <what it did>. Perfect for internal tracing. Catastrophic as the opening line of a LinkedIn post that is supposed to sound like it came from a person.
The fix was a _clean() function that strips verdict lines before saving or displaying anything. I noticed the problem when the dashboard started faithfully rendering orchestrator accounting to users, tier label and all.
The general principle is not specific to this stack. Any model you wire into a pipeline will emit exactly what its system prompt tells it to emit, including operational metadata you put there for your own instrumentation. The model does not distinguish between "this is for the orchestrator" and "this is the content." That distinction only exists in the engineer's head, and if it is not encoded into a sanitizer somewhere between the model call and the output layer, the metadata ships.
Write the _clean() before you need it. Every AI in a pipeline deserves a sanitization step between raw output and anything downstream.