Skip to content

PlateSpinner: CTA-aware domain signal rendering (notification events + action buttons + correlation lifecycle) #541

Description

@PolyphonyRequiem

Context (revised 2026-05-28 — scope refinement)

Polyphony workflows are moving from blocking \human_gate\ nodes to a gate compression pattern: \ ype: notification\ + \script:\ poll-loop. The workflow fires a domain signal ('PR #N ready for review'), the user gets a toast, does the thing, and the workflow's poll script detects the resolution. PlateSpinner is the user-facing surface.

What PlateSpinner needs

P0 — Event parsing + CTA rendering

  1. Parse \ ype: notification\ events from .events.jsonl. Extract the polyphony domain signal envelope (kind, severity, cta_url, cta_kind, correlation_id, expires_at, subject, work_item_id).
  2. Render CTA buttons based on \cta_kind\ → button label/icon mapping. Clicking opens \cta_url\ in the default browser.
  3. Severity-gated toast routing: \�ction_required\ → toast + badge + card. \warning\ → badge + inline. \info\ → inline only.

P1 — Correlation-based lifecycle

  1. Auto-dismiss on resolution: When a signal with matching \correlation_id\ and severity \info\ arrives, clear/resolve the earlier \�ction_required\ card. Decrement tray badge.
  2. Expiry enforcement: Clear signals whose \�xpires_at\ has passed. Prevent stale toasts.
  3. Dedup: Same \correlation_id\ doesn't re-fire a toast (e.g., during poll retries).

P2 — Tray badge

  1. 'N waiting on you' badge on the tray icon — count of unresolved \�ction_required\ signals across all active runs.

CTA kind → button mapping (proposed)

\cta_kind\ Button label Behavior
\
eview_pr\ 'Review PR' Opens PR URL
\merge_pr\ 'Merge PR' Opens PR URL
\�pprove_plan\ 'Review Plan' Opens plan PR URL
\
esolve_conflict\ 'Resolve' Opens conflict artifact
\�iew_evidence\ 'Review Evidence' Opens evidence PR URL

Explicitly out of scope

  • Two-way RPC back to conductor (NEVER)
  • Hosting polling logic (that's a workflow \script:\ step)
  • Replacing conductor dashboard for execution monitoring

Relationship

Part of Epic #521 (self-contained orchestration). Depends on:

Design Reference

.squad/decisions/inbox/bach-on-error-notifications-design-2026-05-28T155810-0700.md\ §2.1–2.4

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions