The distill stage reads the full builder conversation (user↔reviewer
transcript) and produces clean single-author prose representing the user's
final, settled argument. The prose is then fed into the existing ingestion
pipeline (by the consumer) to yield a TParsedArgumentResponse shaped
exactly like ingested arguments — same enrichment, same parser, zero drift.
The whole transcript reaches this turn via the existing chaining
(previousResponseId / userMessage) — chained off the latest response,
not a re-rooted pre-review response. The distill prompt uses reviewer
questions only as context to interpret the user's (often terse, reactive)
answers; the ingestion pipeline keeps receiving single-author text and is
never told it originated from a conversation.
This is the terminal turn — seals the conversation via onClose.
No further turns are allowed after this.
retry.maxAttempts: 1 — distillation failure is a content issue, not a
transient one. Retrying the same prompt will not help.
Create a distill turn stage.
The distill stage reads the full builder conversation (user↔reviewer transcript) and produces clean single-author prose representing the user's final, settled argument. The prose is then fed into the existing ingestion pipeline (by the consumer) to yield a
TParsedArgumentResponseshaped exactly like ingested arguments — same enrichment, same parser, zero drift.The whole transcript reaches this turn via the existing chaining (
previousResponseId/userMessage) — chained off the latest response, not a re-rooted pre-review response. The distill prompt uses reviewer questions only as context to interpret the user's (often terse, reactive) answers; the ingestion pipeline keeps receiving single-author text and is never told it originated from a conversation.This is the terminal turn — seals the conversation via
onClose. No further turns are allowed after this.retry.maxAttempts: 1— distillation failure is a content issue, not a transient one. Retrying the same prompt will not help.