mirror of
https://github.com/nearai/ironclaw.git
synced 2026-09-03 08:06:01 +08:00
Live validation found two presentation defects on the native Agent stream. The plan opened every stream with a hidden-title sentinel task so a lone plan_update would render; Slack hides the title and keeps drawing its bullet. And every text delta went out as its own markdown_text chunk, which Slack renders as its own block, so token boundaries became paragraph breaks. The sentinel is gone. The plan_update lifecycle label rides only with real task cards, a stream opens only once the document holds renderable content (a whole paragraph, a task card, a driver status line, or an attention block), and the session status alone carries the thinking state of a tool-less run. The stream stays in chunks mode for its whole life — Slack forbids mixing markdown_text with chunks and a stream keeps its opening mode — so progress text is published by whole paragraph: a delta goes out through its last blank line outside a code fence, a paragraph past SLACK_TEXT_HOLD_MAX_CHARS flushes at its last sentence end, and the terminal, a finalized canonical answer, or a new attention block flushes everything still held, so what the run said precedes the block. The published-prefix hash covers exactly what Slack shows, so rewrite detection is unchanged. Plan-level pins (empty document plans nothing; header with the first real task; paragraph, fence, hold-bound, terminal, and finalized cases) and the forty agent-API journeys re-derived on the new exact stream sequences, including a new paragraph-streaming journey; the channel-host working- state journey asserts the session status with no stream before content. Design doc updated; old checkpoints carrying the sentinel entry stay readable and never re-send it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>