Files
ironclaw/docs
BenKurrek 2d8dcdc8b1 fix(slack): render meaningful blocks — no sentinel task, headers with real tasks, text by paragraph
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>
2026-09-02 09:04:57 -04:00
..