What a stranger gets: answers appear as they are generated and finish clean — on a busy platform they degrade to fewer edits, then a single final message, never a failure.
Acceptance
- Terminal: token streaming. Slack: edit-cadence updates under the adapter's own pacing — the core never schedules a platform write.
- Idle notice after 60 seconds of agent silence; hard turn deadline with cancel.
- The degradation ladder is tested: streaming → edits → final-only, plus forced final-only via
streaming.enabled: false (the enterprise kill switch).
- Non-text parts land usefully: a
DataPart renders as a fenced JSON block; a URL FilePart renders as a link. Byte transfer (either direction) is out of scope — demand-gated.
Non-goals
Slack's native streaming API (edits are the portable rung; native can come later) · typing indicators beyond what the platform offers cheaply.
What a stranger gets: answers appear as they are generated and finish clean — on a busy platform they degrade to fewer edits, then a single final message, never a failure.
Acceptance
streaming.enabled: false(the enterprise kill switch).DataPartrenders as a fenced JSON block; a URLFilePartrenders as a link. Byte transfer (either direction) is out of scope — demand-gated.Non-goals
Slack's native streaming API (edits are the portable rung; native can come later) · typing indicators beyond what the platform offers cheaply.