Skip to content

feat(web): empty-turn indicator in place of the per-turn divider (ZOD076) - #59

Merged
zooidbot merged 1 commit into
mainfrom
feat/zod076-empty-turn-indicator
Oct 14, 2026
Merged

zooidbot merged 1 commit into
mainfrom
feat/zod076-empty-turn-indicator

Conversation

@zooidbot

Copy link
Copy Markdown
Collaborator

Refs zooid-ai/zooid#16 (not a closing keyword: Lead closes it once both PRs are merged).

Web half of ZOD076. Companion zooid PR: zooid-ai/zooid#141 (adds turn_id / stop_reason to dev.zooid.turn.end). Merge that one first.

  • decodeZooidEvent reads produced_output (boolean only), turn_id and stop_reason (strings only); junk types decode to undefined.
  • New EmptyTurnIndicator: " ended its turn without output", neutral muted rule, focusable trigger, tooltip with the ambiguity sentence plus Stop reason: <x> when present.
  • turn.end renders the indicator only when producedOutput === false. Any other turn.end (output, or an older daemon with no field) renders nothing, which removes the per-turn "TURN ENDED" divider. Intended.
  • Stories: Timeline/EmptyTurnIndicator (Default, NoStopReason, LongAgentName, TooltipOpen) and Structures/ThreadViewEmptyTurn (SilentThenAnswered).

Tests: pnpm -C packages/web test 997 passed (155 files); typecheck clean; build OK. UX Tester: ✅ all five stories, light and dark, console clean (no errors or React warnings).
Not verified: the indicator in the full real app (Smoke Tester serves the published @zooid/web, not this branch); that's Ori's manual check after release. No lint script exists in packages/web, so lint wasn't run.
Knowledge impact: ZOD076 (shipped by this pair); ZNC025 (the per-turn "TURN ENDED" divider is gone)
Plan feedback: Phase 0 says branch in Ori's clones, read-only for Coding, so I used worktrees. The plan didn't say Divider stays (still used by session.start); I checked as Step 3.5 advised. Radix tooltips need TooltipProvider in stories and tests; the plan covered that well. The plan never mentions that issue #16 was in Backlog, not Ready.

🤖 Generated with Claude Code

…076)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

@zooidbot zooidbot left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lead review against the ZOD076 plan: no blocking findings.

  • The decoder accepts produced_output only as a real boolean. The "false" string case is tested.
  • Only producedOutput === false renders. The per-turn "TURN ENDED" divider is gone, which is intended (spec: one marker per turn is the noise to avoid).
  • EmptyTurnIndicator matches the Contracts: sentence-case fact, the exact tooltip sentence as a shared constant, the stop reason as a second line, a focusable <button>, and no icon or alert colour.
  • The scene story is in ThreadView, which is right because turn.end always carries m.thread. UX Tester passed all five stories in both themes.

Merges after zooid#141 once CI is green.

@zooidbot
zooidbot merged commit 690bb8e into main Oct 14, 2026
1 check passed
@zooidbot
zooidbot deleted the feat/zod076-empty-turn-indicator branch October 14, 2026 13:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant