Skip to content

v0.21.0 — feature 007: live flow view, scout %, init PR toggle, artifact copy

Choose a tag to compare

@mayckol mayckol released this 20 Apr 13:38

Highlights

Live flow view survives TDD + worktree (US1)

  • New bender event emit atomic helper (O_APPEND | O_SYNC + fsync) with Bash and PowerShell fallbacks (.specify/scripts/{bash,powershell}/event-emit.*) — skills call this instead of printf >> events.jsonl, so fsnotify-based tails see one write per event and the viewer no longer freezes on batched subagent output.
  • internal/workflow.Resolve + bender workflow resolve --key <branch> link consecutive sessions (e.g. /tdd/ghu) into one workflow. state.json gains optional workflow_id + workflow_parent_session_id (additive; schema version unchanged).
  • Server: GET /api/workflows/{id} + GET /api/workflows/{id}/stream merge SSE from every session in the workflow and pick up new sessions that join the workflow mid-stream (1s poll cadence).
  • UI: pickLiveWorkflowId + LiveProjectFlow now subscribe to the workflow stream when a workflow_id is known; single-session subscription remains the fallback.

Scout % reflects real progress (US2)

  • /ghu SKILL emits orchestrator_progress as round(100 * completed_nodes / total_nodes) on every DAG transition, replacing the baseline points table.
  • bg-scout-* skills emit per-sub-step agent_progress ticks so the per-agent bar advances even between DAG nodes.
  • ProgressBar.tsx enforces monotonic non-decreasing bars and surfaces completed/total nodes in the dial tooltip.

bender init "open PR on success" toggle (US3)

  • New huh confirm prompt added to the init form; answer persists to .bender/selection.yaml under preferences.open_pr_on_success.
  • Prior value is honored as the default on re-run (FR-012).
  • New pr extension with after_implement hook: bash/PowerShell scripts check preference + session status, then shell to bender session pr. Adapter failures never fail the implement run (FR-013).
  • internal/pr.RunForSession(ctx, SessionRunOptions) exposes PR invocation as a library call for hook and test parity.

Click-to-copy buttons next to event JSON (US4)

  • New CopyButton component + copyText helper in ui/src/client/lib/clipboard.ts — prefers navigator.clipboard, falls back to a hidden-textarea execCommand('copy') in non-secure contexts.
  • Wired next to every event's raw-JSON toggle in EventRow.tsx.

Upgrade notes

All schema changes are additive:

  • state.json — new optional workflow_id, workflow_parent_session_id fields.
  • .bender/selection.yaml — new optional preferences: block.
  • events.jsonl — unchanged envelope; only emission path changes.

Old sessions load unchanged; new UI degrades gracefully when workflow_id is missing.

CLI additions

  • bender event emit --session … --type … --actor-kind … --actor-name … --payload … [--sessions-root …]
  • bender workflow resolve --key <branch>
  • bender worktree create --workflow-id <id> --workflow-parent <parent-id> <session-id>

Tests

  • New Go tests: internal/event/emit_test.go, cmd/bender/event_test.go, internal/session/state_workflow_test.go, internal/workflow/link_test.go, internal/pr/session_runner_test.go.
  • New integration tests: event_emit_parity, workflow_linkage, flowview_worktree, scout_progress, after_implement_pr, init_pr_preference.
  • New UI tests: clipboard, copy-button, progress-bar, project-flow.