Skip to content

feat(rust): Waves 3+4+5 — fleet-data + 4 bins + bringup wire (full migration)#11

Merged
NagyVikt merged 1 commit into
mainfrom
claude/migration-wave3-4-5
May 14, 2026
Merged

feat(rust): Waves 3+4+5 — fleet-data + 4 bins + bringup wire (full migration)#11
NagyVikt merged 1 commit into
mainfrom
claude/migration-wave3-4-5

Conversation

@NagyVikt

Copy link
Copy Markdown
Contributor

Summary

Lands sub-6 through sub-13 of fleet-tui-ratatui-port-2026-05-14 in one squashable PR. The four bin crates use fleet-ui (from #10) plus the new fleet-data layer; full-bringup.sh now launches the Rust bins by default and falls back to the bash *-anim.sh when FLEET_DASHBOARD_RENDERER=bash.

Wave 3 — fleet-data layer

Module Purpose Tests
plan.rs serde Plan + Subtask; load(path) + newest_plan(repo_root) + parse_trailing_date 3 ✓
accounts.rs codex-auth listVec<Account> 3 ✓
panes.rs tmux pane introspection + PaneState classifier (cap > approval > boot > working > polling > idle) 7 ✓

Wave 4 — bin crates

Each compiles, renders the iOS chrome via fleet-ui::card/chip/rail, and ships an in-binary tab strip with MouseDown(Left) → tmux select-window — bypasses tmux's MouseDown1Status routing entirely, addressing acceptance criterion #8.

  • fleet-watcher — header banner + 4 stat cards + per-pane table placeholder
  • fleet-state — ACTIVE table composing status_chip + progress_rail per account
  • fleet-plan-tree — Kahn topological levels (waves()) over Subtask.depends_on
  • fleet-waves — vertical wave flow with per-row chip + title

Wave 5 — bringup + docs

  • scripts/codex-fleet/full-bringup.shFLEET_DASHBOARD_RENDERER env (default rust) selects bin path; open_window auto-detects .sh-vs-executable. Bash fallback intact for one release.
  • skills/codex-fleet/SKILL.md — Canonical visual design table extended with the Rust renderer column. Palette updated to iOS dark UIKit hex set (#0a84ff, #30d158, #ff453a, #ff9f0a, #ffd60a, #bf5af2) — was the light variants.

Test plan

  • cargo build --release — clean
  • cargo test --workspace29/29 pass (13 fleet-data + 16 fleet-ui)
  • bash -n scripts/codex-fleet/full-bringup.sh — clean
  • Operator runs (cd rust && cargo build --release) && bash scripts/codex-fleet/full-bringup.sh --n 4 --no-attach — confirms Rust bins render and tab clicks select the right windows

Out of scope (follow-up plans, separate PRs)

  • Lift the four Image-2 overlay renderers out of fleet-tui-poc into fleet-ui::overlay::{context_menu, spotlight, action_sheet, session_switcher} submodules
  • Wire real tmux send-keys / kill-pane calls into the session-switcher button actions (currently "would: …" log lines)
  • Replace tmux capture-pane scraping in fleet-data::panes with the Colony presence-file signal

🤖 Generated with Claude Code

…gration)

Lands sub-6 through sub-13 of fleet-tui-ratatui-port-2026-05-14 in
one squashable PR. The four bin crates use fleet-ui (Wave 2) + the
new fleet-data layer to render their dashboards; full-bringup.sh
now launches them by default and falls back to the bash *-anim.sh
when FLEET_DASHBOARD_RENDERER=bash.

WAVE 3 — fleet-data (sub-6/7/8):
  * plan.rs — serde Plan + Subtask structs + load() + newest_plan()
    + parse_trailing_date(). Tests: deserialise minimum-schema +
    trailing-date math + missing-plans-dir gracefully None.
  * accounts.rs — codex-auth list parser → Vec<Account>. Tests:
    real-world block + drops without-email + drops missing-percent.
  * panes.rs — tmux list-panes + capture-pane wrapper + PaneState
    classifier with explicit ordering (cap > approval > boot >
    working > polling > idle). 7 classifier tests.
  * thiserror added as fleet-data dep for PlanError.

WAVE 4 — bin crates (sub-9/10/11/12):
  * fleet-watcher — header banner + 4 stat cards (PANES/CAPPED/
    SWAPPED/RANKED) via fleet-ui::card + chip + per-pane table
    placeholder.
  * fleet-state — iOS cockpit; ACTIVE table composes status_chip +
    progress_rail for 5h% and weekly% per account.
  * fleet-plan-tree — Kahn topological levels (waves()) over Subtask
    depends_on; renders W1..Wn rows of chips.
  * fleet-waves — vertical wave flow, sub-task chips per line.
  * Each bin renders an in-binary tab strip at the top and handles
    its own MouseDown(Left) → tmux select-window dispatch. This is
    the canonical click-routing fix referenced in acceptance #8 of
    the plan — every tab click works regardless of tmux's
    MouseDown1Status state.

WAVE 5 — bringup + docs (sub-13):
  * full-bringup.sh: FLEET_DASHBOARD_RENDERER env (default 'rust')
    routes window creation to Rust binaries when built, falls back
    to bash automatically if the bins are missing. open_window
    helper auto-detects .sh-vs-executable launch shape.
  * skills/codex-fleet/SKILL.md: Canonical visual design table
    extended with the Rust renderer column. Palette table updated
    to the iOS dark UIKit hex set (was the light variants).
  * Image-2 overlays (context menu / spotlight / action sheet /
    session switcher) remain in fleet-tui-poc — the bins consume
    them via fleet-ui::overlay once we lift the renders out of
    main.rs in a follow-up (covered by openspec out-of-scope).

cargo test --workspace: 29/29 pass (13 fleet-data + 16 fleet-ui).
cargo build --release: clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@NagyVikt NagyVikt merged commit 9766ce4 into main May 14, 2026
2 checks passed
@NagyVikt NagyVikt deleted the claude/migration-wave3-4-5 branch May 14, 2026 15:50
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