Repository navigation
EPIC-005: CodeWhale TUI Crate Decomposition (Umbrella) #5316
Description
0.10.3 status — 2026-10-25
The 0.10.3 scope now includes the full decomposition: no crate above 50,000 production lines, aiming for about 10,000. W2a ended at 995f2a88f9; W3/S06 ended at 478b29eae5, retiring upstream config facades. W3 passed the local workspace all-target check, 554 focused library and 16 skill_cli tests. Largest measured module SCC fell 79→78. TUI remains 634,613 strict production lines (943,735 file-level); runtime is 9,526 strict production lines (15,121 file-level). These metrics are distinct. The umbrella remains far from full acceptance; this is source progress, not a released 0.10.3.
Current delivery — FEAT-031 merged in PR #7009
PR #7009 was squash-merged into main by Hmbown on 2026-10-22 at 21:20:50 UTC, as 6c2b1d83bea9, final PR head c0b0c5226.
The complete 13-command core navigation slice now uses portable Shapes in place. The actual production root and owned helpers compile independently of App/TUI; concrete I/O and voice capture remain host-owned. The core frontier remains pending; the other 27 registrations in the original inventory, registry enforcement and physical movement are outside this delivery. WORKSPACE per-operation anchor authority remains an acknowledged maintainer follow-up.
Merged delivery is confirmed; final-head full verification and release remain separate. CI run 39853629910 was still in progress when checked: Windows tests, Lint, Safety, MSRV and extension-host jobs succeeded; Ubuntu tests were running, and skipped jobs are not passes. The prior APPROVED review was explicitly AI-authored through the maintainer account and reviewed an earlier input. Historical full checks/coverage and the October 21 scoped integration retain their original source identities; no new final-head coverage or completely green CI claim. Latest published release observed is v0.10.1; no released tag containing FEAT-031 was verified.
EPIC-006 now has 15/32 active deliveries merged: Stage A 2/2, Stage B 13/17; 17 remain unmerged. FEAT-030 remains absorbed. Next: FEAT-032, whose FEAT-031 delivery dependency is satisfied, then FEAT-033–035. FEAT-046 physical core movement and FEAT-017 final acceptance remain. Local FEAT-031 is recorded as completed merged implementation with its final-head qualification obligation still explicit. EPIC-005, EPIC-006 and this issue remain open. Dated sections below preserve historical observations.
Historical delivery — FEAT-028 merged in PR #6973
PR #6973 merged into main by Hmbown on 2026-10-15 at 04:41:28 UTC, merge 1543c369919c, final PR head b323af876.
All 19 config-group registrations now use portable Shapes connections, including /connect and /disconnect; the real group root compiles independently of App/TUI. Concrete persistence/effects remain host-owned. The adoption frontier is core; physical config movement remains FEAT-044.
Final-head hosted CI passed: Linux 19,100 tests (34 skipped), macOS 19,103 (33 skipped), Windows 18,356 (27 skipped, one recorded browser-launcher leak); separate portable proof 35 passed. Lint/Safety passed and all five actionable Copilot threads were resolved. Disabled/failed automated review runs are not approvals.
Included in the 0.10.2 candidate, not yet released: candidate PR #6968 at fe7e1fc7 credits @aboimpinto/#6973 and contains the merge in its actual ancestry. Latest published release remains v0.10.1.
EPIC-006 now has 14/32 active deliveries merged: Stage A 2/2, Stage B 12/17; 18 delivery units remain unmerged. This includes predecessor FEAT-027, merged via #6832. FEAT-030 remains absorbed. FEAT-031 is next; FEAT-035 registry enforcement, FEAT-044 physical config movement and FEAT-017 final acceptance remain. EPIC-005, EPIC-006 and this umbrella issue stay open. Earlier dated sections below are historical snapshots.
FEAT-027 implemented — historical draft snapshot for PR #6832
Draft PR #6832 adopts shared command Shapes for /permissions (including compatibility routes) and /status. Submitted head 88ae611615d2 is rebased on upstream main 9e19f03e6. The actual two-command inventory, results/actions and pure helper closure compile normally outside App/TUI, runtime/configuration, HTTP/DB and credential-storage services. Host adapters retain concrete observation, atomic permission removal and action execution. No outcome dependency is deferred to FEAT-037.
Nine phases and eighteen tasks are accepted locally. Pre-rebase verification: 18,129 Rust tests passed (31 configured skips), 653 web tests passed, changed executable Rust lines 92.74% covered. Post-rebase formatting, independent library/graph proof, 12 portable tests and 6 negative controls pass; 71 selected host/helper CI-profile tests also pass, zero failures (14,528 tests outside this focused selection). Eight hosted fork workflows await administrator approval; the contributor approval attempt returned HTTP 403. GitGuardian/contribution gate passed. Devin full review was skipped (trial expired/no credits), with no review findings posted. These are distinct evidence sets; no hosted green claim is made yet. The PR remains draft.
EPIC-006: 13/32 implementations complete, 12/32 merged, one draft delivery, 19 unimplemented. Stage B: 11/17 implemented, 10/17 merged; Stage A: 2/2 merged. The remaining 15 config commands belong to FEAT-028; whole config movement remains FEAT-044. The frontier stays config, core. EPIC-005, EPIC-006, #5316 and #6145 remain open. Next implementation: FEAT-028. Dated sections below retain earlier delivery history.
FEAT-026 landed — October 1, 2026 (historical snapshot)
PR #6793 merged into upstream main as 10e75d13b626 on 2026-10-01; bounded issue #6792 closed. All 17 session commands now have a portable whole-group extraction boundary in place, including /structcopy; the real group and pure helpers compile without App/TUI, core/runtime, HTTP/DB or credential-storage dependencies. Concrete observation, actions and I/O remain host-owned. Hosted Linux/macOS/Windows tests, lint and supporting checks passed on the final PR head. The requested Devin full review was skipped for lack of trial credits; no completed Devin review or approval is claimed despite the maintainer merge.
EPIC-006: 12/32 active FEATs merged (Stage A 2/2; Stage B 10/17 active); 20 unimplemented. FEAT-030 remains absorbed into FEAT-029. The adoption frontier is now config, core; next is FEAT-027, then FEAT-028. Session file relocation remains FEAT-043 and full epic acceptance remains FEAT-017 after the physical moves. Umbrella EPIC-005, EPIC-006 and broader #6145 stay open. The 2026-09-30 draft/verification section below is retained as historical evidence, not the current delivery status.
FEAT-026 implemented — historical pre-merge PR/verification snapshot
PR #6793 completes the session-group adoption and extraction boundary for all 17 commands, including /structcopy. Submitted head 60235a471 includes upstream main 173edb8ae. Bounded issue #6792 is linked for closure on merge; #6145 and this umbrella remain open.
- Shared capabilities, results and nested protocol payloads replace concrete App/TUI dependencies inside the movable group. Host registration, action conversion, observation and I/O stay outside. The pure sanitizer no longer brings credential storage into the group’s graph.
- The actual complete group compiles independently: 64 tests passed. Rebased workspace nextest: 17,612 passed, zero failed, 28 configured skips; doctests 3 passed, 8 ignored. Formatting, workspace Clippy, boundary/migration guards, 91 guard tests, release order and version/release-note checks passed. Final commit changes only changelogs; executable validation is at
8c38b73f1. - Rebase preserves upstream execution-ID matching and ambiguous-pair refusal, their regression tests, and current-main sanitizer fixes. Original frozen evidence remains intact. One stale transport fixture was corrected. A local typed-plugin failure was traced to a system Node build without TypeScript support; the official Node 22 build passes the same fixture and the complete suite. Failed attempts remain recorded.
- Hosted workflows are held for administrator approval; completed Devin Review is pending. The contributor confirmed Greptile is unavailable and selected Devin instead. Devin’s green status explicitly says “Full review skipped: trial expired and no credits remaining”; no actual review has run. Contributor approval of CI run 36685514423 returned HTTP 403 (admin rights required). GitGuardian and contribution gate passed. GitHub records
aboimpintomarking the PR ready and requestingHmbownat 2026-09-30 10:00:53 UTC. The assistant did not perform either action and preserved the external change. Hosted CI still awaits administrator approval, and Devin skipped its full review because the trial expired with no credits remaining. Verification is incomplete. Local implementation completion is not a merged delivery. - EPIC-006: 12/32 implemented, 11/32 merged, one open PR delivery, 20 unimplemented. Stage B 10/17 implemented, 9/17 merged. The submitted frontier is
config, core; upstream retainssessionuntil this PR lands. Next adoption work: FEAT-027/028. Physical session extraction remains FEAT-043. The shared outcome/dependency fixes completed here are not deferred to FEAT-037.
EPIC-005 and EPIC-006 remain in progress. Older dated sections below preserve delivery history.
FEAT-029 landed — September 29, 2026
The complete debug group (all fourteen commands, including the former FEAT-030 mutation scope) merged into upstream main via PR #6707 on 2026-09-29 (47a014c68c1). The bounded issue #6706 closed automatically. The hosted Linux/macOS/Windows test jobs, lint and supporting checks passed on the submitted head; the owner approved the contribution. Portable group compilation remains independent of TUI; concrete host I/O and mutations stay in TUI adapters. Root debug leaves the pending frontier; config, core and session remain. FEAT-030 is superseded, not a separate PR. EPIC-006 and umbrella EPIC-005 remain in progress; the next adoption milestone is FEAT-026. Broader #6145 stays open.
Verified delivery and remaining work
- Final submitted head:
5e04eb746; upstream merge:47a014c68c1, confirmed reachable fromorigin/main. - Final CI run 36558141864 succeeded: Linux, macOS, Windows, lint and safety checks passed. Configured skipped jobs are not counted as executed tests.
- EPIC-006: 11/32 active delivery units merged (Stage A 2/2, Stage B 9/17); 21 remain. FEAT-030 is superseded and excluded from the active count, not counted as a second merged PR.
- Next: FEAT-026, then FEAT-027 and FEAT-028. Capability widening is already delivered. FEAT-037 retains remaining outcome ownership; FEAT-045 retains physical debug movement and pure-helper/import wiring.
config,core, andsessionremain in the adoption frontier. EPIC-005/006 and Command contract: adopt crates/command-contract in the config and core command groups #6145 stay open. No parent-EPIC completion or release-publication claim is made.
Historical FEAT-029 Windows CI follow-up before merge
FEAT-029 CI follow-up — September 29, 2026 (historical pre-merge snapshot)
PR #6707 remains unmerged and is back in draft while the corrected head is verified. The owner approved the earlier implementation and supplied licensing/version/LF fixes in d5ae33cac. Its Windows run then had one platform-dependent context fixture failure (16,684 passed, one failed). Follow-up 1f402aff3 corrects host environment expectations and owned path/JSON normalization, with 87 focused diagnostics tests passing. Latest origin/main 1cdec0f81 is included; maintainer history is preserved. New fork workflows require administrator approval again; actual Windows verification of the correction is pending. No EPIC completion or full updated-head green matrix is claimed.
Current Core execution — September 9, 2026
Follow the Codewhale Core execution plan for C03–C10, ownership, dependency order and completion evidence. Linear is the current execution authority; local checklists are supporting snapshots.
C03 is active with the existing Kimi worker. Local commits 2be4359 migrate AppMode/ApprovalMode consumers and durable context records; 798d3d6 moves worker roster records; 76f8d00 moves reasoning preferences and removes the UI re-export. The last commit records 229 passing reasoning tests and a warning-free all-target cargo check. Final C03 boundary/approval-policy reconciliation remains open; C04–C10 are not complete.
Preserve the contributor provenance below and credit merged command-contract Stage A and Stage B FEAT-018 through FEAT-024. Current direction supersedes older fleet-stays-in-TUI, engine-last, mandatory staged-shim and fixed-size assumptions. Converge parent/child execution before extracting one runtime; migrate every consumer and measure the headless build boundary. C06 gives the model discretion over useful goals and supported effort, with runtime-owned limits and receipts. Do not impose explicit-goal-request-only semantics.
The whole extraction is active project scope; C20 separately decides which source is required for 0.9.13. These local commits do not establish hosted CI, installed acceptance or publication.
Original umbrella and delivery history
EPIC-005: CodeWhale TUI Crate Decomposition — Umbrella EPIC
This issue is the EpicStyle tracking issue for the CodeWhale TUI crate decomposition. It represents the entire structure below: every sub-EPIC and every FEAT reports here when done, and every PR created under this work is logged here.
The decomposition is the direct answer to the compilation-time discussion in #4991 — see the Developer fast loop section below.
Structure
EPIC-005 is the umbrella EPIC. It does not contain FEATs directly — it holds the map of sub-EPICs, each of which contains its own FEATs.
flowchart TD
U["EPIC-005: TUI Crate Decomposition (umbrella)"]
U --> E6["EPIC-006: Commands -> codewhale-commands (P1)"]
U --> E7["EPIC-007: Tools consolidation -> crates/tools (P1)"]
U --> E8["EPIC-008: Config consolidation -> crates/config (P2)"]
U --> E9["EPIC-009: Hooks + Execpolicy + MCP (P2)"]
U --> E10["EPIC-010: Core extraction -> crates/core (P3)"]
| ID | Sub-EPIC | Scope | Status |
|---|---|---|---|
| EPIC-006 | Commands → codewhale-commands |
crates/tui/src/commands/ — groups, registry and discovery |
IN PROGRESS — 15/32 active delivery FEATs merged (Stage A 2/2; Stage B 13/17; FEAT-030 absorbed). FEAT-031 #7009 merged; 17 remain unmerged. Next FEAT-032; frontier core; physical extraction and final acceptance remain. |
| EPIC-007 | Tools consolidation | crates/tui/src/tools/ (~117k lines) → crates/tools (currently 1.3k) |
NotStarted |
| EPIC-008 | Config consolidation | crates/tui/src/config/ (~13k lines) → crates/config (currently 33k) |
NotStarted |
| EPIC-009 | Hooks + Execpolicy + MCP | hooks/ (7k), execpolicy/ (0.5k), mcp/ (8k) → crates/hooks, crates/execpolicy, crates/mcp |
NotStarted |
| EPIC-010 | Core extraction | crates/tui/src/core/ (~42k lines) → crates/core (currently 3.4k); tightly coupled, P3 follow-up |
NotStarted |
Stays in codewhale-tui: tui/ rendering (~205k lines), fleet/ (~27k lines), and the TUI-specific long tail.
Rules (applied to every sub-EPIC)
- Behavior-preserving — extraction only, no command/UX behavior changes.
- Trait-first — define the boundary interface before moving code (pattern: EPIC-006
CommandContext). - Compiles at every step — bottom-up extraction, workspace stays green at each commit.
- CI gate — extracted crate must never depend on
codewhale-tui(e.g.cargo check -p codewhale-commandspulls no TUI). - Deliver one independently verified PR per completed FEAT against current upstream main; keep parent EPICs open until their remaining work and acceptance criteria are complete.
- Sequencing — EPIC-006 first, then 007/008, then 009, then 010.
Work summary (to be done)
Estimated FEATs under each EPIC. Check a FEAT off and append its PR link when the PR lands; parent EPICs auto-complete when all their FEATs are done. This section is the visual tracker — the Features Breakdown tables in the MemoryBank EPIC documents are synchronized with implementation and PR delivery status.
- EPIC-006: Commands extraction — staged, one FEAT = one independently green PR
-
Stage A — shapes + infrastructure (COMPLETE 2026-08-19)
- FEAT-014: Prototype command capability/handler/registration shapes only — merged in #5328 (2026-08-13, merge commit
3b41d0ee); no TUI production rewiring - FEAT-015: Add TUI adapters, dual-path dispatch seam, and shrinking migration gate; convert no group — merged in #5506 (2026-08-19, merge commit
ae56154c); complete required check matrix green
- FEAT-014: Prototype command capability/handler/registration shapes only — merged in #5328 (2026-08-13, merge commit
-
Stage B — adopt shapes inside TUI (files do not move)
- Least-capability invariant: every contextual registration declares its exact minimum external facet set; the TUI exposes only those facets; pure handlers construct no host bundle; missing required facets fail safely. FEAT-019 through FEAT-035 inherit this pattern, and FEAT-035 enforces it repository-wide.
[!NOTE]
Historical pre-merge debug delivery — 2026-09-28. Draft #6707 completes FEAT-029 for all fourteen debug commands and absorbs FEAT-030. Source headd7c766119already includes latest fetchedorigin/main0bfe04e163. Local CI-profile nextest: 17,224 passed, zero failed, 28 configured skips; all 23 required local checks pass. The real complete group also builds in a separate normal library without TUI (30 portable/helper tests pass, no transport stand-ins). Host App/Git/snapshot operations remain outside the movable group. The shared contract still depends on core; physical file extraction is pending. The proposed frontier isconfig,core,session; upstream still hasdebuguntil this PR merges. Hosted CI requires administrator approval of fork workflows (action_required; contributor approval attempt returned HTTP 403). Contribution gate and GitGuardian passed; build/test jobs have not run yet. Review remains pending; this is not a merged delivery or EPIC acceptance. Command contract: adopt crates/command-contract in the config and core command groups #6145 and this umbrella remain open.Current sequence (2026-10-22): FEAT-031 is merged through refactor(commands): adopt portable core navigation Shapes (FEAT-031) #7009 after FEAT-029/026/027/028. Next is FEAT-032, then FEAT-033–035. Core frontier, physical moves and final acceptance remain; final-head CI/coverage and release are separate evidence.
Command adoption update — 2026-09-23. FEAT-025 (session export) merged through #6096 on 2026-09-16 (
9a674f47f). Stage A is complete (2/2); Stage B has 8/18 FEATs merged; 10/33 EPIC-006 FEATs are merged overall. The remaining migration frontier isconfig,core,debug, andsession.Reason for changing the order: the owner requested debug first. In the 2026-09-17 decision on #6145, @Hmbown chose to keep
codewhale-command-contractand finish adoption, with debug + config + the session straggler as the bounded scope, delivered in reviewable slices. He preferred debug first if the order was flexible and deferred core command adoption beyond that release scope because of its larger concrete-Appsurface.Agreed delivery sequence: FEAT-029 (debug diagnostics) → FEAT-030 (debug mutation paths) → FEAT-026 (session structcopy) → FEAT-027 (config policy/status) → FEAT-028 (main config). The debug-first priority comes from the owner; completing session before config afterward is our delivery sequencing choice. FEAT numbers and scope are unchanged: FEAT-026/027/028 remain required. Each FEAT gets an independently verified PR, and the migration gate must reflect completed whole slices. FEAT-031–034 (core command adoption) follow this sequence.
Capability prerequisite — satisfied: FEAT-029 / refactor(commands): make the complete debug group portable (FEAT-029) #6707 widened
CommandCapabilitiestou32, preserving published identities (currently bits 0–21). FEAT-026 reuses that representation and selects its own minimum authority after inspecting current main.Tracker and release scope: #6145 stays open until the adoption frontier is empty. This umbrella stays open across releases, as confirmed in the owner’s milestone clarification. The owner’s 0.9.14 target describes the scope at the time of that comment; this update does not assign a new release deadline.
- FEAT-018: Utility group — shipped in #5525 via v0.9.11 (2026-08-23); complete utility group adopted external command shapes in place
- FEAT-019: Memory group — merged to
mainvia maintainer re-land #5833 (ad813cda6) after review fixes/current-main reconciliation through #5839; original #5609 retained as harvested provenance - FEAT-020: Plugins group — merged into
mainvia current-main re-land #5865 (2026-09-05,dcd4c200f), preserving original #5657 authored history, reconciling FEAT-019/021/022 plus current plugin/marketplace behavior, and restoring three current-main CI blockers with a fully green final matrix - FEAT-021: Project group — merged into
mainin #5717 (2026-08-30, merge commit2f200ee) — first Stage B FEAT to land directly onmain; exact least-authority facets (/init=workspace,/lspand/share=project,/goal=project+presentation). Subsequent FEAT-019/020/022 reconciliation preserves these declarations; current frontier has four groups - FEAT-022: Skills group — merged into
mainvia maintainer replacement #5829 (2026-09-02,84b3dd694); contributor PR #5825 closed as superseded after its work was harvested and co-author credited - FEAT-023: Session lifecycle leaves — merged into
mainin #5902 (2026-09-06, merge commit41fecf8a4); nine handlers migrated with a dedicated least-authority facet,/compactand/purgeremain pure, concrete lifecycle machinery remains TUI-owned, and TUI-only acceptance/regression tests stay outside the movable group; final maintainer nit keptCommandCapabilitiesatu16with bit 13 assigned toSESSION_LIFECYCLE - FEAT-024: Session control / remote paths — merged into
mainin #5951 (2026-09-06, merge commita58e96d40); six handlers useCommandSessionControlContextwith exact least-authority declarations; owner feedback was addressed ind4b68963d, and the complete GitHub/Buildkite matrix was green before merge - FEAT-025: Session export — merged in #6096 on 2026-09-16 (
9a674f47f)./exportand/daochuadoptCommandSessionExportContextwith exactSESSION_EXPORTauthority; concrete host services stay TUI-owned. Four baseline-captured goldens and an external compilation check cover behavior preservation and extraction readiness. This consumes the last freeu16capability bit; the first upcoming slice needing another bit owns widening tou32. Rootsessionfrontier remains pending for FEAT-026. - FEAT-029: Complete debug group — merged in #6707 on 2026-09-29 (
47a014c68c1), with hosted Linux/macOS/Windows tests and lint passing; bounded issue #6706 closed. All fourteen commands adopt external shapes; portable group compiles independently of TUI, with concrete host authority in adapters. - FEAT-030: Debug mutation paths — superseded/absorbed into FEAT-029 / merged refactor(commands): make the complete debug group portable (FEAT-029) #6707; no separate implementation or PR.
- FEAT-026: Session structcopy and complete 17-command group boundary — merged via #6793 on 2026-10-01 (
10e75d13b626); bounded #6792 closed. Portable group compiles without TUI/runtime/storage; concrete host authority remains in adapters. Final hosted Linux/macOS/Windows test jobs and lint passed; Devin full review was skipped (not claimed). - FEAT-027: Config policy/status — merged via #6832 on 2026-10-06 into
wave/0.10.1-next(7d3fe353aa84); subsequently in main and v0.10.1. Shared outcomes and complete two-command portable proof delivered. Physical group move remains FEAT-044. - FEAT-028: Main config module — merged via #6973 on 2026-10-15, merge
1543c369919c. All 19 config registrations portable in place; frontiercore. Included in 0.10.2 candidate 0.10.2 candidate: endpoint-scoped catalog, tiered pricing and release verification #6968, not yet released; physical move remains FEAT-044. - FEAT-031: Core navigation/display leaves — merged through #7009, 2026-10-22 (
6c2b1d83b), final headc0b0c5226. All 13 navigation registrations and actual production-root proof delivered in place;coreremains pending. Final-head full qualification/release not claimed. - FEAT-032: Core model/provider/setup
- FEAT-033: Core coordination/workflow
- FEAT-034: Remaining core policy/interaction
- FEAT-035: Registry/discovery completion + enforce zero direct concrete-
Apphandlers
-
Stage C — focused prerequisites after in-place decoupling
- FEAT-036: Extract localization behind the existing compatibility path
- FEAT-037: Move only shared command outcome/action data proven necessary
-
Stage D — bootstrap then move one already-decoupled group per PR
- FEAT-016: Bootstrap
codewhale-commands+ shared registry/discovery boundary; move no group - FEAT-038: Move utility
- FEAT-039: Move memory
- FEAT-040: Move plugins
- FEAT-041: Move project
- FEAT-042: Move skills
- FEAT-043: Move session
- FEAT-044: Move config
- FEAT-045: Move debug
- FEAT-046: Move core
- FEAT-016: Bootstrap
-
Stage E — final validation
- FEAT-017: Acceptance-test boundary, compatibility-shim removal, and EPIC validation
-
- EPIC-007: Tools consolidation
- FEAT: Audit
tools/vscrates/toolsand define the shared boundary - FEAT: Move shared tool code into
crates/tools - FEAT: Wire TUI to the consolidated crate; keep tool UI code in TUI
- FEAT: Tests, CI gate, and re-export shim
- FEAT: Audit
- EPIC-008: Config consolidation
- FEAT: Audit TUI
config/vscrates/config(overlap, extensions, UI views) - FEAT: Extract non-UI config logic to
crates/config(or adopt it) - FEAT: Wire TUI to
codewhale-config; keep UI views in TUI - FEAT: Tests, CI gate, and re-export shim
- FEAT: Audit TUI
- EPIC-009: Hooks/Execpolicy/MCP consolidation
- FEAT: Consolidate
hooks/withcrates/hooks - FEAT: Consolidate
execpolicy/withcrates/execpolicy - FEAT: Consolidate
mcp/withcrates/mcp - FEAT: Tests, CI gates, and cleanup
- FEAT: Consolidate
- EPIC-010: Core extraction (follow-up)
- FEAT: Core audit and coupling map (36 files, ~42k lines)
- FEAT: Extract decoupled core leaves to
crates/core(phase 1) - FEAT: Extract remaining core logic (phase 2, after boundary interfaces)
- FEAT: Wire TUI to
codewhale-core; tests and CI gate
- Final: codewhale-tui reduced from ~700k to ~300k lines focused on UI rendering
Developer fast loop
The whole point of this decomposition: once a sub-EPIC's crate exists (EPIC-006 Feature 3 and later), day-to-day development happens entirely outside the TUI monolith (~700k lines). The TUI is only compiled when you explicitly need it — TUI integration tests, cargo test --workspace, or the final pre-PR validation.
cargo check -p codewhale-commands # production change check — seconds, not minutes
cargo test -p codewhale-commands # test loop — compiles only the commands crate + thin test binaries, never the TUI
cargo watch -x "check -p codewhale-commands" # continuous check while editing (cargo-watch)
cargo nextest run -p codewhale-commands # optional: parallel test runner, faster startupWhy this stays fast:
cargo build/cargo checknever compiles#[cfg(test)]code, so production iteration is bounded to the small crate.cargo testcompiles eachtests/file as its own small binary crate depending only on the public API — a production change recompiles/relinks only those thin binaries, in parallel.- The Gherkin acceptance harnesses live in separate test binaries (or a dedicated acceptance crate), so thousands of acceptance-test lines are never part of the production crate compile.
- Small white-box unit tests that need private access stay inline — they are cheap and cannot live outside the crate.
Acceptance criterion for every extracted crate: cargo test -p <crate> must compile only that crate and its test binaries — if it pulls in codewhale-tui, the boundary was cut wrong.
The numbers and impact motivating this are documented in #4991 (Discussion: Compilation times and the TUI crate monolith): 476k lines / 82% of the workspace in one crate, 8–16 min release builds, 30+ min test suite, 2–3 iterations per hour.
PR log (updated as work lands)
| Date | EPIC / FEAT | PR | Status | Summary |
|---|---|---|---|---|
| 2026-08-13 | EPIC-006 / FEAT-014 | #5328 | MERGED | Scope-corrected after owner review: small codewhale-command-contract prototype only (7 facets, generic handler/registration shapes, tests, CI guard); no TUI production changes, localization extraction, shared-type move, or command migration. Merged 2026-08-13 (3b41d0ee) after two conflict-resolution merges against main (generated-file regen: source budget 688916, facts v0.9.7; codewhale-core pin 0.9.7). |
| 2026-08-19 | EPIC-006 / FEAT-015 | #5506 | MERGED | TUI-owned implementations of all seven command capability facets, authoritative App delegation, portable registration/localization bridge, dual-path registry dispatch, and baseline-aware shrink-or-documented-split migration gate; no production command group converted or moved. |
| 2026-08-23 | EPIC-006 / FEAT-018 | #5525 | MERGED (shipped v0.9.11) | Complete utility group adopted external command shapes in place: seven portable registrations, zero concrete-App handlers, exact least-capability declarations with restricted facet exposure, and utility removed from the migration frontier. Temporary result/action data references remain intentionally assigned to FEAT-037; physical movement remains FEAT-038. |
| 2026-09-03 | EPIC-006 / FEAT-019 | #5833 + fix #5839 (harvests #5609) | MERGED — ad813cda6 | Maintainer re-land #5833 restored the memory capability/facet/portable handlers to main after #5839 resolved the migration blocker, least-authority/safe-failure review findings, and current-main/FEAT-022 reconciliation. Full updated-head matrix passed, including Linux/macOS/Windows, lint, Safety gate, Buildkite, CodeQL, and OHOS cargo check. |
| 2026-08-30 | EPIC-006 / FEAT-021 | #5717 | MERGED (into main, merge commit 2f200ee) | Project group adopted external command shapes in place on main's no-bitmask model: new CommandProjectContext facet, /init=WORKSPACE//lsp=project//share=project//goal=project+presentation via exact facet destructuring + safe missing-facet errors, /lsp config bridge routed through the TUI adapter, project removed from both frontiers; FEAT-037/FEAT-041 dependency-removal obligations enumerated. Rebased onto main per maintainer request (integration branch will not land); full matrix green after the maintainer's sandbox fix #5724; owner APPROVED with both nits fixed. |
| 2026-09-05 | EPIC-006 / FEAT-020 | current-main re-land #5865, preserving original #5657 | MERGED INTO main — dcd4c200f | Forward-port retained original authored commits, appended PLUGIN after published project/skill identities, preserved marketplace suggestions/reload nudge/shared Runtime API loader/canonical tokens, and did not resurrect the retired computer-use catalog. Three current-main CI blockers were repaired; the final Linux/macOS/Windows and supporting matrix was green. Verified in current origin/main (82b2efaef). |
| 2026-09-02 | EPIC-006 / FEAT-022 | #5829 (supersedes #5825) | MERGED INTO main (84b3dd694) | Maintainer rebased/harvested FEAT-022 after #5826, credited @aboimpinto as co-author, and merged the skills command shapes through replacement PR #5829. Original contributor PR #5825 is closed as superseded, not rejected. |
| 2026-09-06 | EPIC-006 / FEAT-023 | #5902 | MERGED — 41fecf8a4 | Nine session lifecycle handlers adopt a dedicated portable facet with exact capability declarations; pure /compact and /purge build no host bundle; concrete lifecycle machinery remains in the TUI adapter; TUI acceptance/regression fixtures stay outside the future movable group. The final maintainer nit was addressed in 52a53ce3a: CommandCapabilities remains u16, with SESSION_LIFECYCLE on available bit 13. Full CI passed before merge. |
| 2026-09-06 | EPIC-006 / FEAT-024 | #5951 | MERGED — a58e96d40 | Six session-control handlers adopt CommandSessionControlContext; exact declarations are SESSION_CONTROL for five handlers and SESSION_CONTROL | PRESENTATION only for /remote-env. Concrete session, persistence, picker, Git, browser, and remote-service behavior remains TUI-owned; the full host regression surface remains outside the movable group. Owner feedback was addressed in final contributor head d4b68963d; the complete GitHub/Buildkite matrix and Devin review were green before owner merge. |
| 2026-09-16 | EPIC-006 / FEAT-025 | #6096 | MERGED — 9a674f47f | Session export (/export, alias /daochu) adopts a dedicated CommandSessionExportContext facet declared with exactly SESSION_EXPORT; the documented command surface (name, alias, usage, discovery, description bridge) is unchanged. The portable handler owns parsing, document rendering, redaction, restore-point correlation, operation sequencing and result composition, while metadata projection, the shared turn-handoff renderer, clipboard/recovery delivery and protected destination writing remain TUI-owned behind the adapter. Four goldens captured from the pre-change implementation (authoritative transcript, visible-history fallback, recorded restore points with correlation, and the turn handoff) prove byte-identical output with only wall-clock fields normalised, each pinned by a unit-tested normaliser. Least authority is enforced structurally: a shared helper destructures all sixteen envelope slots, so an unrelated facet cannot join the registration unnoticed. Extraction readiness is proven by compilation — the slice and its 21 portable tests build and pass outside the TUI against a stand-in for the temporary FEAT-037 outcome type, with no codewhale-tui in the dependency graph. Supporting relocations: the pure ANSI/URL/text/secret sanitizer moves to codewhale-secrets (shared with the still-legacy /structcopy) and the shared last-copy.md recovery writer moves outside the movable group (shared with /copy). Rebased onto main 447223554; fmt, Clippy (CI lint set), nextest 15408/15408, doctests, release build, and the migration/boundary/CI-wiring/locale gates are green. Three CI-only findings were fixed before hand-off, each carried by repository configuration or platform behaviour that a Linux-only local gate cannot observe: a moved test dropped the secret-scanner avoidance idiom (GitGuardian), the new include_str!() goldens were not declared text eol=lf (Windows CRLF), and two relocated adapter tests passed raw TempDir paths to the symlink-checked writer (macOS /var). Root session frontier remains pending for FEAT-026. |
| 2026-09-29 | EPIC-006 / FEAT-029 | #6707 | MERGED — 47a014c68c1 | All fourteen debug commands (including FEAT-030 mutation scope) use shared contract shapes with exact facets and host-owned concrete I/O/mutation. Portable group compiles without TUI; root debug removed from migration frontier. Windows context fixture portability corrected before merge. Hosted Linux/macOS/Windows test jobs and lint passed; bounded issue #6706 closed. FEAT-030 superseded; physical move and config/core/session adoption remain. |
| 2026-10-01 | EPIC-006 / FEAT-026 | #6793 | MERGED — 10e75d13b626 | All 17 session commands and helper closure are portable in place; actual group compiles without TUI, core/runtime or credential storage. /structcopy uses narrow structcopy+presentation authority while host I/O remains external. Root session retired from adoption frontier; hosted Linux/macOS/Windows tests and lint green; #6792 closed. Devin full review skipped for exhausted trial credits, not treated as a completed review. Physical move FEAT-043 and config/core adoption remain. |
| 2026-10-06 | EPIC-006 / FEAT-027 | #6832 | MERGED — 7d3fe353aa84 | /permissions and /status adopt narrow Shapes and shared outcomes; whole two-command portable proof. Merged into wave/0.10.1-next, then main/v0.10.1; physical move remains FEAT-044. |
| 2026-10-15 | EPIC-006 / FEAT-028 | #6973 | MERGED INTO main — 1543c369919c | Complete 19-command config group uses portable Shapes, with concrete persistence/effects in host adapters. Final PR-head native CI, portable proof, Lint and Safety gate passed; five Copilot findings resolved. Frontier core; physical movement FEAT-044 and whole-epic acceptance remain. Included in 0.10.2 candidate #6968; not yet released. |
| 2026-10-22 | EPIC-006 / FEAT-031 | #7009 | SQUASH-MERGED INTO main — 6c2b1d83bea9 | All 13 core navigation commands use portable Shapes; actual production-root proof and shared outcomes, host-owned concrete I/O/voice capture. Final PR head c0b0c5226; final-head CI still in progress at observation. Core frontier, workspace authority follow-up, physical move and final epic acceptance remain; no release claim. |
Reporting contract
- Every FEAT completion updates this issue with its PR link and a one-line summary.
- Every sub-EPIC completion updates the sub-EPIC row above (status + PR links).
- EPIC-005 is closed only when all sub-EPICs above are complete.
Paulo Aboim Pinto
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTodo
Activity
JayBeest commentedon Aug 11, 2026
I love this initiative. Although I'm still quite unfamiliar with Rust. I am pretty familiar with C.
Re-factoring can be such a pain, but not any more, rly. I don't have to manually write the code nowadays. 😎
In any case the language does not really matter, I think. Just follow what it expects, its strengths. Don't overcomplicate.
And as long as there are good tests (there are) It should be fine? no?
I really love what I see. How you structured this.
I should be more honest. This has momentum, I would only slow it down. Is what I think.
Lot on my plate already, not in the least my ISP...still suffering on the side.
I'm keeping an eye out, for now. 👀
🌊🐋
SparkofSpike commentedon Aug 11, 2026
It looks like a ton of work – really appreciate it!
JayBeest commentedon Aug 12, 2026
X-LINK — #5273
aboimpinto commentedon Aug 12, 2026
FEAT-014 complete — command contract crate boundary (EPIC-006 step 1 of 4).
PR: #5328 (OPEN, fork-local branch, rebased onto current main, 0 behind).
codewhale-localizationleaf: app-wide i18n (4,245 lines + 16 locale packs) moved out of the TUI, byte-identical (parity gate PASS).codewhale-command-contractleaf: seven independent object-safe facet traits, pure/contextual fn-pointer handler transport (CommandContexts/ContextParts/require_*),RegisterCommand(info()+handler()), the realAppAction(88 variants) +CommandResult, D8 free formatting helpers, exact K3 route predicates.check-command-crate-boundaries.py): nocodewhale-tuiedge into either leaf; no widget import, no composite context, no boxed handler.cargo test -p codewhale-commandsnever compiles the TUI.Next: FEAT-015 (implement the facets for
App+ wire dispatch in place, one green sub-PR per command group), then FEAT-016 (mechanical extract), FEAT-017 (test split).Paulo Aboim Pinto
aboimpinto commentedon Aug 12, 2026
EPIC-006 plan corrected: one FEAT = one PR
Following the early owner review on draft PR #5328, I expanded EPIC-006 from 4 broad FEATs to 33 narrowly bounded FEATs.
The increase is intentional. The previous plan bundled interface design, localization/shared-type ownership moves, all in-place command rewiring, all physical group moves, and test-boundary cleanup into only four tracking units. Even when behavior-preserving, that produces large mixed diffs that are difficult to review, bisect, and roll back safely.
The corrected delivery model is:
crates/tuiproduction changes, no localization extraction, no shared-type movement, and no command migration.Appcommand handlers before any physical extraction begins.codewhale-commandswithout moving a group, then move one already-decoupled group per FEAT and PR.Large groups (
session,config,debug, andcore) are split into bounded in-place adoption slices. The later physical moves remain one group per PR and should be mostly rename-detectable.This is more tracking work, but materially less implementation and review risk: each FEAT now corresponds to one independently mergeable upstream PR, with a clear rollback point and no dependency on a later PR to restore compilation or behavior.
The issue checklist and EPIC-006 MemoryBank document now contain the expanded FEAT-014 through FEAT-046 roadmap.
Paulo Aboim Pinto
Hmbown commentedon Aug 15, 2026
oh man. this is just incredible. thank you so much for doing this!!!! if I start moving too fast and it gets hard to stay on track with this idea please let me know - know that my intent is absolutely that we do this!
aboimpinto commentedon Aug 15, 2026
no problem man!! I will move as fast as possible ... :)
docs(release): open the 0.9.10 contributor ledger
docs(release): credit the 0.9.10 community landings and strip a stray…
docs(release): open the 0.9.10 contributor ledger
aboimpinto commentedon Aug 20, 2026
EPIC-006 Stage A complete
Both Stage A FEATs are now merged into upstream
main:ae56154c).The external shapes and migration infrastructure are therefore in place. Stage B is unblocked and begins with FEAT-018, which adopts the shapes in the utility group without moving the command files yet.
The issue status table, Stage A checklist, and PR log have been updated to reflect this milestone.
Paulo Aboim Pinto
aboimpinto commentedon Aug 20, 2026
FEAT-018 implementation complete — utility group shape adoption
Draft PR: #5525
FEAT-018 is the first completed Stage B slice. It rewires all seven utility commands (
/attach,/automation,/jobs,/mcp,/network,/task,/update) through the external command contract while keeping the files incodewhale-tui.Boundary status:
RegisterCommand<CommandResult>registrations;Appaccess and no executable TUI-helper dependency;codewhale-command-contractremains independent ofcodewhale-tui;utilityis removed from both migration-frontier representations.The remaining
CommandResult,AppAction,AutomationAction,ShellJobAction, andMcpUiActionreferences are the explicitly bounded, data-only compatibility references assigned to FEAT-037. They do not expose executable TUI behavior. FEAT-037 will move their ownership before FEAT-038 physically moves the utility group, preventing a circular dependency at extraction time without expanding FEAT-018 into shared-type relocation.The issue checklist, EPIC-006 status, and PR log now reference #5525. I am monitoring the complete PR check matrix and will keep the draft current until every required check is green.
Paulo Aboim Pinto
aboimpinto commentedon Aug 20, 2026
FEAT-018 CI is now fully green on PR #5525: 15 checks passed, 7 conditional checks were skipped as expected, and there are no failed, cancelled, or pending checks.
The PR remains a draft with a clean merge state. The Epic tracker now records the green check matrix. No Gherkin integration test files changed because command behavior was preserved; the added coverage instead verifies the external-shape dependency boundary and portable command-group wiring. The intentionally temporary result/action data references remain documented as FEAT-037 follow-up work, with physical extraction assigned to FEAT-038.
Paulo Aboim Pinto
31 remaining items
aboimpinto commentedon Oct 13, 2026
FEAT-028 — main
configgroup: complete Shapes adoption (implementation complete; PR submitted as draft).PR: #6973
The complete
configSlash Command Group is off the pending migration frontier:PENDING_GROUPSandscripts/command-migration-topology.jsonnow read["core"].The whole group compiles independently of
App/TUI and the extraction proof mountsthe real group root (
mod.rs), not its children. Command parsing, branching andrendering live in the portable group; the host returns typed facts and operation
outcomes.
/settings,/config statusand/config subagents statusreturnstructured rows the group renders;
/workbarsurfaces setter errors;/import-claudeplans use the host display projection. Reply rendering validates capabilities and
required templates before any effect and fails loudly (no action) on a missing
capability, an invalid replacement contract or an unprepared key, and the interactive
reply renderer shares that policy.
Verification:
config-proofPASS with 35 portable tests + 7 negative controls;boundary and migration guards PASS against the pinned base
161f056c8207bdad0161217b13fc11b04050462d; 353 config/settings tests pass; the broadcommands | tui::app | tui::ui | settingsrun passes except one pre-existing baselinefailure;
cargo fmt --checkclean. No behavior change: all existing assertions(locales, wording, row widths, capability sets) are preserved.
Status: Implementation COMPLETED; Release readiness BLOCKED_BY_EXTERNAL_DEPENDENCIES.
The branch base predates a
mainadvance that independently changed the same configmodule, including adding
/connectand/disconnectto this group. Theorigin/mainreconciliation is feature-level (tracked; a partial port is preserved), and hosted CI
plus merge remain open — hence the PR is a draft.
Paulo Aboim Pinto
aboimpinto commentedon Oct 13, 2026
FEAT-028 — conflicts resolved; PR #6973 is ready for review and mergeable.
PR: #6973 (no longer a draft;
mergeable: MERGEABLE)The branch was rebased onto current
main(39f073346) as a single commit. Thereconciliation was feature-level, not mechanical:
mainhad independently changedthe same config module, so the rebase also carries the behavior added since the
original base —
/connectand/disconnectare now portable commands in the group inventory(19 registrations);
/pet styleand/pet language(portable pet appearance controls);LEGACY_SANDBOX_TOKEN_SLOT) instead of Daytona.Re-verified on the new base:
config-proofPASS with 35 portable tests + 7negative controls; boundary and migration guards PASS; 353 config/settings tests
pass; the broad
commands | tui::app | tui::ui | settingsrun passes except onepre-existing upstream failure
(
tui::ui::tests::persisted_queued_native_skill_is_denied_after_host_withdrawal,which also fails on a clean
origin/main);cargo fmt --checkclean.Status: Implementation COMPLETED; Release readiness BLOCKED_BY_EXTERNAL_DEPENDENCIES
(hosted CI and PR review/merge remain external).
Paulo Aboim Pinto
fix(commands): preserve reconciled config help and login behavior
fix(commands): address core navigation extraction review
fix(commands): resolve builtin voice shortcut by canonical name
fix(security): patch follow-redirects in Feishu and WeCom bridges
Merge current main into FEAT-031 and validate integrated branch
refactor(commands): adopt portable core navigation Shapes (FEAT-031) (#…