Skip to content

feat: fleet presentation redesign P1 — transcript run-cards, findings entries, colorized widget + panel (#104) - #109

Merged
rz1989s merged 22 commits into
mainfrom
feat/104-fleet-presentation-redesign
Sep 3, 2026
Merged

rz1989s merged 22 commits into
mainfrom
feat/104-fleet-presentation-redesign

Conversation

@rz1989s

@rz1989s rz1989s commented Sep 3, 2026

Copy link
Copy Markdown
Member

Fleet presentation redesign — P1 (velocity increment)

Spec: docs/superpowers/specs/2026-09-03-spec-fleet-presentation-redesign.md · Plan: docs/superpowers/plans/2026-09-03-fleet-presentation-p1.md (10 tasks, SDD-executed, per-task review gates + final whole-branch review: Ship)

What lands

  • Transcript run cardssubagent dispatches render as live cards (spinner · state line: last event · turn · elapsed · tok · ctx%) driven by child-run events through pi's partial-result channel; finalize to a collapsed honest line (╰─ ✓ reviewer · 4m12s · 598K tok · $0.30 · ✎3 — Ship); expand shows the full envelope. Render lifecycle verified against pi source before implementation.
  • Orchestration + findings entries — TUI-only (appendEntry, zero LLM tokens): live waiting-on tree + fleet TODO projection + gate state during bursts; findings block at burst end with usage — honesty and degradation flags (fallback / zero-tool / language-drift get a face).
  • Component widget — colorized segments (totals strip when >1 active), byte-identical plain-string form preserved.
  • Panel velocity bundle — totals header, status-colored rows (unthemed output byte-identical), footerFor state machine replacing the hint if-chain, capability-aware actions (aborted → re-run; running-only stop; paused-only resume). No key remaps.
  • Foundationsrc/present/ (status token map, glyph vocabulary + ascii preset, ANSI-aware width) + emoji purge (gate-line ✅⛔ → ✓✗ via GLYPHS).

Design language

oh-my-pi structure × Claude Code restraint: pi theme tokens only (no hardcoded hex), single glyph source, escalation via intensity not hue. Spec §2 locked with RECTOR.

Evidence

  • 876/876 tests (837 at base, +39), pnpm typecheck clean — both gates standalone at head.
  • Real-pi smoke passed: card appear → live → finalize, orchestration entry live, no timer leaks, second-burst clean. The smoke caught a real crash en route (bare {card} partials — pi reads result.content unconditionally); fixed by emitting pi's result envelope (150f6b7), regression test added.
  • Engine/journal/RPC untouched; FleetPanelDeps additive-only; existing keybindings unchanged.

Environment fixes riding this branch (separate concerns, committed separately)

Follow-ups (not in this PR)

Transcript run-cards (renderCall/renderResult + onPartial forwarding,
verified against pi source), orchestration/findings entries (TUI-only),
component widget, panel P1 velocity bundle; P2 lineage tree + width fix;
P3 glyph presets. oh-my-pi structure x CC restraint; pi-theme tokens only;
usage-honesty rule; additive keys only. Spec only — implementation follows
plan approval.
…ks strict typecheck (getpipher/vision#25)

vision 0.5.2 (resolved by ^0.5 after v1.2.0's green CI) ships ProviderHeaders
with string|null values passed to Record<string,string> params in two
callVisionModel/callWithRetryAndFallback call sites. Patch sanitizes nulls at
both sites. Drop the patch when 0.5.3 lands.
…oded main-checkout path

Worktree-safe: the old endsWith('armory-fleet/src') fails in any other
checkout dir (linked worktrees). Assert on the '/' + src suffix instead.
…nnel (#104)

Emission is best-effort end-to-end (registry read + onUpdate call both
guarded); live lookup = newest running record for agent+cwd while the
dispatch is in flight (fg single-slot lock disambiguates), exact runId
after return. Plan erratum: fleet.ts has no spawn site — the forward
lives only in subagent.ts (lifecycle phases share the foreground call).
…ssion (#104 review)

let-hoist restores mid-run emissions (const put res in its TDZ at first
event time). Adds the review-demanded regression pair: never-break
(list()-throwing registry + throwing onUpdate) and live-path (cards
stream during the run with real fl-* runId). Lifecycle deferral now
stated plainly: params.lifecycle returns before the wired call — cards
for lifecycle runs arrive via the orchestration entry, P1.
…review)

The approved mockups use ● / ✎ but glyphs.ts never carried them —
run-card.ts hardcoded literals against the single-source rule. Added to
the vocabulary + ascii preset + glyph sweep test.
…eport prior bursts (#104 review)

The registry is cumulative for the process lifetime, so re-adding every
record on every fire made burst N's findings re-report all prior bursts.
Baseline = terminal records at burst open; capture skips them; bg rows
always join. Opening run stays in the burst (running at baseline time).
…} crashed the real TUI (#104 smoke)

pi's ToolExecutionComponent.updateDisplay reads result.content
unconditionally (image-block pass) on every tool_execution_update; a
partialResult without a content array escaped as uncaughtException and
killed the session (caught by the T10 real-pi smoke, not by unit tests —
the mock-vs-real trap again). Emissions now carry { content: [], details:
{ card } } and renderResult reads details.card. Shape pinned by test.
Retire the superseded vision 0.5.2 pnpm patch (0.5.3 shipped with the
lib-types fix; drops pnpm-workspace.yaml + patches/ riding the branch).
Take main's @earendil-works/* ^0.84.4 alignment and the armory-gateway
dev file: link from the governance adapter work.
@rz1989s
rz1989s merged commit 3f85c3e into main Sep 3, 2026
1 check passed
@rz1989s
rz1989s deleted the feat/104-fleet-presentation-redesign branch September 3, 2026 13:42
@rz1989s rz1989s mentioned this pull request Sep 5, 2026
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