- Route gate beats to Gates overview tab
- Fix overview lease timing and release feedback
- fix: polish overview lease controls
- feat: refine overview lease actions
- feat: stabilize overview column sizing
- feat: make overview columns dynamic
- feat: add tabbed beat overview groups
- feat: refine beat overview annotations
- feat: tighten beat overview columns
- feat: prototype beat state overview
- test: complete hermetic policy migration for default suite
- test: enforce hermetic test policy across default suite
- fix(opencode): retry HTTP prompt delivery failures
- Merge lease-model-display: drop Opus/Claude slash + render Lease knot agent
- fix(agent-identity): drop slash-joined lease_model + render Lease knot agent
- Merge matrix-tests: lightning-fast extractor+formatter matrix unit tests
- test(agent-identity): comprehensive parser+formatter matrix (28 cases, 4ms)
- Merge bug-squash: squash agent-identity audit bugs 2-5
- fix(agent-identity): squash bugs 2-5 from the empirical extractor audit
- refactor(agent-identity): single canonical=display form for model metadata
- Merge claude/quizzical-shockley-19c3d5: JSON fallback for tool_use args
- fix(opencode): show args for any tool via JSON fallback
- Merge ship-c4a6: settings-side canonical write-side normalizer (foolery-c4a6)
- refactor(settings): single canonical write-side normalizer (foolery-c4a6)
- Merge ship-11b1: drop normalizeAgentIdentity in dispatch path (foolery-11b1)
- refactor(dispatch): drop normalizeAgentIdentity calls in terminal-manager-*
- Merge worktree-agent-a36b8803ff1611fe4: drop toActiveAgentInfo at display time (foolery-8fc3)
- refactor(beats): drop toActiveAgentInfo, read canonical capsule fields directly
- refactor(terminal-store): replace raw agent fields with lease-id resolver
- Merge worktree-agent-a3ab0697dad3c41aa: per-provider createLease + lease round-trip tests (foolery-cd2e)
- test(knots): add per-provider createLease + lease round-trip tests
- Merge worktree-agent-a2e7fc59f8d388624: consolidate buildAgentLabel into canonical formatter (foolery-96ba)
- refactor(agent-history): consolidate buildAgentLabel into canonical formatter
- Merge worktree-agent-a9439a49934c0832d: canonical OpenCode model extractor (foolery-988b)
- Merge worktree-agent-ac5d77ff87caec310: drop multi-key fallbacks in beat-table-metadata reader
- feat(agent-identity): canonical OpenCode model extractor
- refactor(beat-table-metadata): drop multi-key fallback chains
- Merge codex/foolery-c6e8-opencode-idle-watchdog: fix OpenCode idle cleanup
- fix(opencode): preserve idle turn end during cleanup
- Merge claude/nifty-leavitt-3df428: rewrite agent-identity contract doc
- docs(agent-identity): rewrite contract with rules, flow diagram, per-provider table
- Merge claude/quizzical-shockley-19c3d5: surface OpenCode bash/read tool args
- Merge claude/bold-williams-2869dc: stop terminal autoscroll on every re-render
- fix(opencode): surface bash/read args in tool_use rendering
- fix(terminal): stop terminal from autoscrolling on every parent re-render
- Merge claude/optimistic-turing-72755c: surface approval reply-failure reason in UI
- feat(approvals): surface reply-failure reason and friendly hint in UI
- fix(opencode): unstick HTTP take-loop from post-idle SSE noise + POST timeout
- lint: drop unused max-lines-per-function disable in dead-lease test
- fix(take-loop): refuse follow-up when bound lease is dead
- feat(forensics): capture full beat+lease snapshots at dispatch boundaries
- Merge keen-engelbart-ec1ff5: Use Badge primitive for Escalations tab count
- refactor(escalations): use Badge primitive for outer tab count
- Merge keen-engelbart-ec1ff5: Sum Escalations subtab badges
- feat(escalations): show summed badge on outer Escalations tab
- docs(taxonomy): add normative
resultevent entry and rewrite Turn - Merge worktree-foolery-e55a-approvals-api: Add canonical approval escalation API
- feat: add canonical approval escalation API
- Merge foolery-e780: Fix OpenCode approval details
- fix(approvals): show real OpenCode bash details and dedupe rotated permission ids
- Stop OpenCode step_finish from firing per-message turn_ended
- feat: use canonical agent identity for Knots leases
- Merge worktree-foolery-a01f-opencode-render: Render OpenCode tool calls, reasoning, and tool results
- Tighten smoke pipeline part type to satisfy strict tsc
- Render OpenCode tool calls, reasoning, and tool results in the terminal
- Merge foolery-a96c: Rename 'Notes Work' to 'Human Beats' in Escalations UI
- Rename escalations notes tab
Full Changelog: v0.13.4...v0.14.0