feat: make Pod the public roster surface - #5776
Conversation
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
Claude finished @Hmbown's task in 2m 42s —— View job Review: PR #5776 — feat: make Pod the public roster surfaceTodo list
SummaryThis is a large (140 files, ~2.2k/1.5k) but disciplined rename: Correctness — No bugs found. Every renamed literal I checked (error/help/system-prompt strings across Provider/model/route safety (EPIC #2608) — Not implicated. I specifically grepped the diff for Reuse/simplification — Nothing to flag. The Tests — This is the strongest part of the PR. Notable additions:
Security — No secret handling, shell/exec policy, or input validation paths touched. One thing worth double-checking before merge since it's outside what a source review can confirm: the PR body marks No inline comments filed — I didn't find any line-level issues to flag. |
There was a problem hiding this comment.
🔍 Worker modal remains partly English
Localized worker titles now sit beside hard-coded English statuses, actions, and guidance. Non-English sessions still render a mixed-language /pod workers view.
(Refers to this code)
Was this helpful? React with 👍 or 👎 to provide feedback.
| "pod: runs={} queued={} running={} completed={} partial={} failed={} restarted={} \ | ||
| escalated={} transport_failed={} task_failed={} verifier_failed={} cancelled={} stale={}", |
There was a problem hiding this comment.
🟡 Compatibility receipts change labels
Running codewhale fleet status now emits pod: instead of fleet:. Existing scripts that parse the retained command's receipt output stop recognizing it.
Prompt for agents
Preserve the established machine-consumed Fleet spelling in receipt detail rendered by compatibility commands. status_lines and the resume detail currently changed fleet-prefixed labels to pod-prefixed labels, while ControlReceipt operation IDs and serialized domain identity intentionally remain fleet.*. Separate canonical user-facing presentation from compatibility receipt rendering, or retain the old labels in receipt payloads while presenting Pod elsewhere. Audit RunSummaryDto::render_detail for the same receipt-label contract.
Was this helpful? React with 👍 or 👎 to provide feedback.
There was a problem hiding this comment.
Codewhale review
PR #5776 renames public-facing Fleet vocabulary to Pod while preserving internal wire/storage/config identities. CLI aliases, lane control domain public_name, locale strings, and docs/skills are updated. However, the diff does not include any TUI source code that consumes the new localization keys or implements the claimed current-session /pod workers surface, suggesting the feature is incomplete.
Findings
- [ERROR] Missing TUI implementation for /pod workers and new localization keys
The PR adds new locale keys such asSubagentsNoCurrentSessionPodWorkers,SubagentsCurrentSessionPodWorkersTitle,SubagentsCurrentSessionPodWorkerRoles, andSubagentsCurrentSessionPodWorkersStatus, and changes existing strings to reference/pod workers. However, no changes are present incrates/tui/srcor any other UI code that reads these keys or implements the/pod workerscommand. The strings are therefore dead, and the separation between durable/pod statusand current-session/pod workersis not actually implemented. This blocks the claimed public surface. - [WARNING] RunSummaryDto::render_detail output label lacks test coverage (
crates/lane/src/control.rs)
Therender_detailmethod now printspod:instead offleet:, but no unit test asserts this output. A future regression could easily reintroduce the old label while serialization remainsfleet. Add a focused test verifying Fleet domain summaries render withpod:and that the serialized field name remainsfleet. - [INFO] Skill file still named fleet-manager while content says Pod (
crates/tui/assets/skills/fleet-manager/SKILL.md:3)
The SKILL.md file remains underfleet-manager/and its frontmatternameis stillfleet-manager, but the description and body now use Pod. This may be intentional to preserve internal identity, but the mismatch could confuse model tool selection. Consider renaming the skill or adding a clarifying note.
Suggestions
crates/lane/src/control.rs— Add a unit test forRunSummaryDto::render_detailthat constructs a Fleet-domain summary and asserts the output containspod:and does not containfleet:(except in serialized form). This will lock the public rendering change.crates/tui/locales/es-419.json— TheSetupOperateReviewHintwas changed to a generic 'Enter registra esta instantánea de configuración.', losing the specific safety note about not probing plan limits, not writing credentials, and not changing Fleet/Pod configuration. If this was unintended, restore a Pod-specific version that retains those warnings to avoid reducing user-facing safety guidance.
Assessment
The PR delivers a thorough vocabulary rename across CLI, lane, docs, and locale files with solid CLI tests. However, it appears incomplete because the TUI code that should consume the new locale keys and implement the /pod workers current-session surface is absent. Merge should be blocked until the TUI implementation changes are included and covered by tests.
Advisory review by Codewhale (codewhale review --pr 5776 --post, head 2b7d65b76749d6e706de3a66ef93cb2235f9d621). Line-specific findings are also posted as inline review comments; mechanical fixes arrive as committable suggestions you can apply from the Files tab. CODEOWNERS approval still governs merge.
| --- | ||
| name: fleet-manager | ||
| description: Use when managing, triaging, restarting, escalating, or summarizing Codewhale Agent Fleet runs and workers. | ||
| description: Use when managing, triaging, restarting, escalating, or summarizing Codewhale Pod runs and workers. |
There was a problem hiding this comment.
[INFO] Skill file still named fleet-manager while content says Pod
The SKILL.md file remains under fleet-manager/ and its frontmatter name is still fleet-manager, but the description and body now use Pod. This may be intentional to preserve internal identity, but the mismatch could confuse model tool selection. Consider renaming the skill or adding a clarifying note.
…ibility Review-fix follow-up for the Pod public surface: - /pod workers modal routes all previously hardcoded English through tr() with 38 new MessageIds across all 15 shipped locales; a zh-Hans render test asserts no English leakage. - /pod workers means current-session sub-agents and /pod status the durable ledger, pinned per locale by a new localization test. - Durable receipt detail prefixes restored to the established fleet: spelling (lane render_detail, tui status_lines, resume detail) with regression tests at both layers; serde wire keys unchanged. Local proof (RUST_MIN_STACK=33554432, --locked): localization 49/49, fleet::control 11/11, subagents 33/33, commands fleet group 13/13, codewhale-lane 62/62; cargo fmt --check clean; locale key-set hash identical across all 15 packs. Signed-off-by: CodeWhale Bot <bot@codewhale.net>
Resolve conflicts from merging 3d87d2f (Tideline shell integration, PR #5774): - Locale JSONs (15 packs): union of both sides' keys — keep this branch's 41 new/corrected Subagents* and session-vs-ledger wording values, and add main's Tideline keys (LaunchMenuChatCompact, LaunchMenuWorktreeCompact, PickerActionPin). Key sets verified identical across all packs. - commands/groups/core/core.rs: keep this branch's 'Fetching current-session sub-agents...' assertion, matching the resolved en SubagentsFetching value read via tr(MessageId::SubagentsFetching). Signed-off-by: CodeWhale Bot <bot@codewhale.net>
|
Claude finished @Hmbown's task in 2m 28s —— View job Review: PR #5776 — feat: make Pod the public roster surfaceTodo list
SummaryThis synchronize added commit Devin — "Worker modal remains partly English" → fixed.
Devin — "Compatibility receipts change labels" → fixed. Codewhale-agent — "Missing TUI implementation, dead locale keys" → resolved. This finding is now stale: the same commit is the missing TUI wiring. All new keys are consumed by Codewhale-agent — "render_detail lacks test coverage" → resolved. One pre-existing INFO item still open, non-blocking: the Also checked and unaffected by this round: the Provider/model/route safety (EPIC #2608): not implicated — this commit only touches TUI rendering/localization and receipt-label strings, no routing or provider-resolution logic. Security: no secret handling, shell/exec, or input-validation paths touched. No new issues found in this round. The fix commit is a solid, test-backed resolution of every actionable finding from the prior review pass. |
There was a problem hiding this comment.
Codewhale review
The PR renames the public Fleet vocabulary to Pod across CLI, Lane, TUI, docs, and locales while preserving durable wire/storage/schema identities. Most changes are mechanical and backed by focused tests, but one documented TUI subcommand is not actually implemented.
Findings
- [WARNING]
/pod save-asis advertised in usage/help but has no implementation (crates/tui/src/commands/groups/core/fleet.rs:28)
COMMAND_INFO.usageand the generated help text now listsave-as, and the new info test explicitly asserts the usage string contains it. HoweverFleetCmd::executeonly matchessave/updatefor route persistence and has nosave-as(orsave_as) arm.save-asfalls through toControlOperation::parse_verband is rejected asUnknown /pod target 'save-as'. This is a user-facing command that cannot be invoked as documented. Add the matching arm and a behavioral test, or removesave-asfrom usage/help. - [INFO] Workspace clippy and full test suite not run
The PR checklist indicatescargo clippy --workspace --all-targets --all-features --lockedandcargo test --workspace --all-features --lockedwere not run locally. The change spans CLI, Lane, TUI, and 15 locale packs, so CI should run both before merging to catch any cross-crate issues not covered by focused tests.
Suggestions
crates/tui/src/commands/groups/core/fleet.rs:28— Add asave-asmatch arm next tosave/updatethat performs the saved-Pod 'save as' flow and add a behavioral test, or removesave-asfrom COMMAND_INFO.usage and help_text so the documented surface matches execution.
Assessment
Most of the mechanical Pod-rename work is well covered, including durability/serialization invariants and canonical command dispatch tests. The main correctness gap is the unimplemented save-as alias exposed in TUI usage and help; resolve that before merge and let CI run the full workspace checks.
Advisory review by Codewhale (codewhale review --pr 5776 --post, head 8efcd89cfd3f737c6da5a3977de01144164b2374). Line-specific findings are also posted as inline review comments; mechanical fixes arrive as committable suggestions you can apply from the Files tab. CODEOWNERS approval still governs merge.
| @@ -27,23 +28,25 @@ use super::CommandResult; | |||
| pub(in crate::commands) const COMMAND_INFO: CommandInfo = CommandInfo { | |||
There was a problem hiding this comment.
[WARNING] /pod save-as is advertised in usage/help but has no implementation
COMMAND_INFO.usage and the generated help text now list save-as, and the new info test explicitly asserts the usage string contains it. However FleetCmd::execute only matches save/update for route persistence and has no save-as (or save_as) arm. save-as falls through to ControlOperation::parse_verb and is rejected as Unknown /pod target 'save-as'. This is a user-facing command that cannot be invoked as documented. Add the matching arm and a behavioral test, or remove save-as from usage/help.
| @@ -27,23 +28,25 @@ use super::CommandResult; | |||
| pub(in crate::commands) const COMMAND_INFO: CommandInfo = CommandInfo { | |||
There was a problem hiding this comment.
Add a save-as match arm next to save/update that performs the saved-Pod 'save as' flow and add a behavioral test, or remove save-as from COMMAND_INFO.usage and help_text so the documented surface matches execution.
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
Signed-off-by: CodeWhale Bot <bot@codewhale.net>
* fix(web): resolve public /signin /signup /auth/callback 404s Bare auth URLs were locale-prefixed into /en/signin, /en/signup, and /en/auth/callback, which had no pages. Keep sign-in and create-account as locale-aware public routes that use the canonical mark and send the person to the CWC app, hop OAuth callbacks to app.codewhale.net with the query intact, and fold /login /register aliases. Local CLI use is not presented as requiring an account. Closes #5767 Signed-off-by: CodeWhale Bot <bot@codewhale.net> * docs(changelog): record public auth routes and Pod receipts Unblock version-drift: #5776 landed on main without a CHANGELOG receipt, which fails every subsequent PR. #5767 is the public /signin /signup /auth/callback fix this branch ships. Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net>
* feat(tui): add provider-accepted Computer meter receipts Bind v3 Computer admission (profile, 1x/2x/4x multiplier, account, quote, expiry) before dispatch. Mint immutable receipts only for provider-accepted active seconds at per-second granularity. Reject wall-clock-if-idle, queued/stopped/teardown time, and allocations that do not exactly match standard-8/16/32. Tests use hermetic Daytona-shaped fixtures. No live provider call, no charge, no deploy. Signed-off-by: CodeWhale Bot <bot@codewhale.net> * docs(changelog): record Pod public surface receipt (#5776) Signed-off-by: CodeWhale Bot <bot@codewhale.net> --------- Signed-off-by: CodeWhale Bot <bot@codewhale.net> Co-authored-by: CodeWhale Bot <bot@codewhale.net>
Summary
podthe canonical public CLI/TUI/setup vocabulary while keepingfleetcompatibility aliases/pod statusfrom current-session/pod workers, and localize that boundary across all 15 complete TUI packs/docs/pod, permanently redirect/docs/fleet, and align public/model-visible documentationCloses #5775
Testing
cargo fmt --all -- --checkcargo clippy --workspace --all-targets --all-features --locked(not run locally)cargo test --workspace --all-features --locked(not run locally)scripts/dev-cargo.sh test -p codewhale-tui --all-features --locked fleet— 512 passedscripts/dev-cargo.sh check -p codewhale-tui -p codewhale-cli -p codewhale-lane --all-features --lockedpython3 scripts/check-tui-locale-parity.py— 15/15 packs, 1,904 keys eachscripts/check-tui-product-vocabulary.sh.codewhale/fleet, schemafleet,/v1/fleet,[fleet], and--fleetremain internal contracts)pnpm test— 41 files / 352 testspnpm check:docspnpm check:localespnpm lintpnpm build— 642 static pages, including/docs/podand the/docs/fleetredirectChecklist
Evidence boundary
This PR proves source-level vocabulary/dispatch behavior and the listed local checks only. It does not prove merge, release artifacts, deployment, provider qualification, billing, or customer acceptance.