feat(rust): Waves 3+4+5 — fleet-data + 4 bins + bringup wire (full migration)#11
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Lands sub-6 through sub-13 of
fleet-tui-ratatui-port-2026-05-14in one squashable PR. The four bin crates usefleet-ui(from #10) plus the newfleet-datalayer;full-bringup.shnow launches the Rust bins by default and falls back to the bash*-anim.shwhenFLEET_DASHBOARD_RENDERER=bash.Wave 3 — fleet-data layer
plan.rsPlan+Subtask;load(path)+newest_plan(repo_root)+parse_trailing_dateaccounts.rscodex-auth list→Vec<Account>panes.rsPaneStateclassifier (cap > approval > boot > working > polling > idle)Wave 4 — bin crates
Each compiles, renders the iOS chrome via
fleet-ui::card/chip/rail, and ships an in-binary tab strip withMouseDown(Left) → tmux select-window— bypasses tmux'sMouseDown1Statusrouting entirely, addressing acceptance criterion #8.fleet-watcher— header banner + 4 stat cards + per-pane table placeholderfleet-state— ACTIVE table composingstatus_chip+progress_railper accountfleet-plan-tree— Kahn topological levels (waves()) overSubtask.depends_onfleet-waves— vertical wave flow with per-row chip + titleWave 5 — bringup + docs
scripts/codex-fleet/full-bringup.sh—FLEET_DASHBOARD_RENDERERenv (defaultrust) selects bin path;open_windowauto-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— cleancargo test --workspace— 29/29 pass (13 fleet-data + 16 fleet-ui)bash -n scripts/codex-fleet/full-bringup.sh— clean(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 windowsOut of scope (follow-up plans, separate PRs)
fleet-tui-pocintofleet-ui::overlay::{context_menu, spotlight, action_sheet, session_switcher}submodulestmux send-keys/kill-panecalls into the session-switcher button actions (currently"would: …"log lines)tmux capture-panescraping infleet-data::paneswith the Colony presence-file signal🤖 Generated with Claude Code