返回 CodeWhale
source-structure-budget.json
根目录 / scripts / source-structure-budget.json
1 {
2 "_comment": "One-way source ownership ceilings. Deletion and line-neutral ownership moves pass; new packages, binaries, 1000-line module paths, a larger maximum module, or aggregate owned Rust growth require an explicit reviewed update.",
3 "_todo_2026_08_03": "TODO(v0.9.5): aggregate ceiling bumped 649350 -> 659633 during v0.9.4 train hygiene, then 659633 -> 662389 at the end of the train (incl. the 2026-08-04 downtime bug-hunt fixes) (corrected tool descriptions, the File parameter hardening split, and the work-bar persistence/click regression fix). The 30-PR stack on 2026-08-02/03 grew owned production Rust by ~10.3k lines; both new thousand-line modules from the stack (crates/tui/src/native_memory.rs, crates/tui/src/tui/views/fleet_roster.rs) were split back under the threshold instead of raising the per-file ceilings. v0.9.4 overspent; pay the aggregate back down by deletion/dedup in v0.9.5 rather than treating this as the new normal. Reviewed 2026-08-05 for the v0.9.4 Fleet rebuild: aggregate 662389 -> 668406 and three new 1000-line modules (fleet/store.rs 1114 - the named Fleet store v2; tui/transcript.rs 1062 - the release-quality transcript pass; views/fleet_detail.rs 1056 - the secondary named-Fleet editor behind /fleet fleets). Split candidates for v0.9.5.",
4 "_todo_2026_08_05_ship": "v0.9.4 ship re-baseline: aggregate 668406 -> 668607 (+201 lines) for the must-fix ship items - composer cursor/wrap unification (paste regression + caret lag, ff97641b7), Windows start_turn stack-overflow Box::pin, the #5032 dangling xAI OAuth generation repair + its regression test, the platform-aware /status safety-policy test, and the 0.9.4 constitution checkpoint bump. No new 1000-line modules; growth is in existing files. Pay down in v0.9.5.",
5 "_todo_2026_08_05_ui_split": "v0.9.4 ui.rs decomposition (the first ceiling DECREASE in this file's history): crates/tui/src/tui/ui.rs 19132 -> 3657 lines, moved verbatim into eleven ui/ submodules (event_loop, apply, handlers, dispatch, frame, session_state, provider_routes, overlays, terminal, release_check, motion). max_module_lines 19110 -> 17596 - the largest production module is now crates/tui/src/main.rs, not ui.rs. large-module count 168 -> 174 and aggregate +417 lines are the arithmetic cost of the split itself (per-module headers and `use super::*`), not new behavior; no logic changed and `cargo test -p codewhale-tui --bins` stayed at 9851 passed / 0 failed across the move. Remaining floor: run_event_loop is a single 4565-line function, so ui/event_loop.rs cannot shrink further by moving code - it needs genuine decomposition (v0.9.5). Same for handle_view_events (1152), apply_env_overrides_unlocked (1073), apply_command_result (960).",
6 "allowed_large_modules": [
7 "crates/agent/src/lib.rs",
8 "crates/app-server/src/chat_completions.rs",
9 "crates/app-server/src/lib.rs",
10 "crates/cli/src/lib.rs",
11 "crates/cli/src/metrics.rs",
12 "crates/cli/src/update.rs",
13 "crates/config/src/lib.rs",
14 "crates/config/src/provider.rs",
15 "crates/config/src/user_constitution.rs",
16 "crates/config/src/xai_credentials.rs",
17 "crates/core/src/lib.rs",
18 "crates/execpolicy/src/lib.rs",
19 "crates/lane/src/control.rs",
20 "crates/lane/src/runtime.rs",
21 "crates/mcp/src/lib.rs",
22 "crates/protocol/src/fleet.rs",
23 "crates/secrets/src/lib.rs",
24 "crates/state/src/lib.rs",
25 "crates/tui/src/acp_server.rs",
26 "crates/tui/src/automation_manager.rs",
27 "crates/tui/src/child_env.rs",
28 "crates/tui/src/client.rs",
29 "crates/tui/src/client/anthropic.rs",
30 "crates/tui/src/client/chat.rs",
31 "crates/tui/src/client/prepared.rs",
32 "crates/tui/src/command_safety.rs",
33 "crates/tui/src/commands/groups/config/config.rs",
34 "crates/tui/src/commands/groups/core/constitution.rs",
35 "crates/tui/src/commands/groups/core/core.rs",
36 "crates/tui/src/commands/groups/project/init.rs",
37 "crates/tui/src/commands/groups/session/export.rs",
38 "crates/tui/src/commands/groups/session/session.rs",
39 "crates/tui/src/commands/groups/session/structcopy.rs",
40 "crates/tui/src/commands/groups/skills/skills.rs",
41 "crates/tui/src/commands/mod.rs",
42 "crates/tui/src/commands/user_registry.rs",
43 "crates/tui/src/compaction.rs",
44 "crates/tui/src/config.rs",
45 "crates/tui/src/config_persistence.rs",
46 "crates/tui/src/config_ui.rs",
47 "crates/tui/src/context_report.rs",
48 "crates/tui/src/core/engine.rs",
49 "crates/tui/src/core/engine/preview.rs",
50 "crates/tui/src/core/engine/tool_catalog.rs",
51 "crates/tui/src/core/engine/turn_loop.rs",
52 "crates/tui/src/cost_status.rs",
53 "crates/tui/src/fleet/exact.rs",
54 "crates/tui/src/fleet/executor.rs",
55 "crates/tui/src/fleet/host.rs",
56 "crates/tui/src/fleet/ledger.rs",
57 "crates/tui/src/fleet/manager.rs",
58 "crates/tui/src/fleet/profile.rs",
59 "crates/tui/src/fleet/scheduler.rs",
60 "crates/tui/src/fleet/store.rs",
61 "crates/tui/src/fleet/task_spec.rs",
62 "crates/tui/src/fleet/worker_runtime.rs",
63 "crates/tui/src/hooks/config.rs",
64 "crates/tui/src/hooks/executor.rs",
65 "crates/tui/src/llm_client/mod.rs",
66 "crates/tui/src/localization.rs",
67 "crates/tui/src/main.rs",
68 "crates/tui/src/mcp.rs",
69 "crates/tui/src/mcp/oauth.rs",
70 "crates/tui/src/model_routing.rs",
71 "crates/tui/src/models.rs",
72 "crates/tui/src/palette/themes.rs",
73 "crates/tui/src/plugins/manifest.rs",
74 "crates/tui/src/plugins/registry.rs",
75 "crates/tui/src/pricing.rs",
76 "crates/tui/src/project_context.rs",
77 "crates/tui/src/prompts.rs",
78 "crates/tui/src/provider_lake.rs",
79 "crates/tui/src/provider_readiness.rs",
80 "crates/tui/src/remote_control.rs",
81 "crates/tui/src/repl/runtime.rs",
82 "crates/tui/src/request_manifest.rs",
83 "crates/tui/src/route_billing.rs",
84 "crates/tui/src/route_runtime.rs",
85 "crates/tui/src/runtime_api.rs",
86 "crates/tui/src/runtime_api/sessions.rs",
87 "crates/tui/src/runtime_threads.rs",
88 "crates/tui/src/sandbox/mod.rs",
89 "crates/tui/src/scorecard.rs",
90 "crates/tui/src/session_manager.rs",
91 "crates/tui/src/settings.rs",
92 "crates/tui/src/skills/audit.rs",
93 "crates/tui/src/skills/install.rs",
94 "crates/tui/src/skills/mod.rs",
95 "crates/tui/src/skills/mutation.rs",
96 "crates/tui/src/snapshot/repo.rs",
97 "crates/tui/src/task_manager.rs",
98 "crates/tui/src/tool_inspection.rs",
99 "crates/tui/src/tools/apply_patch.rs",
100 "crates/tui/src/tools/file.rs",
101 "crates/tui/src/tools/goal.rs",
102 "crates/tui/src/tools/mcp_registry.rs",
103 "crates/tui/src/tools/registry.rs",
104 "crates/tui/src/tools/review.rs",
105 "crates/tui/src/tools/rlm.rs",
106 "crates/tui/src/tools/schema_sanitize.rs",
107 "crates/tui/src/tools/search.rs",
108 "crates/tui/src/tools/shell.rs",
109 "crates/tui/src/tools/spec.rs",
110 "crates/tui/src/tools/subagent/coord.rs",
111 "crates/tui/src/tools/subagent/mod.rs",
112 "crates/tui/src/tools/tasks.rs",
113 "crates/tui/src/tools/terminal_session.rs",
114 "crates/tui/src/tools/tool_result_retrieval.rs",
115 "crates/tui/src/tools/truncate.rs",
116 "crates/tui/src/tools/verifier.rs",
117 "crates/tui/src/tools/verify.rs",
118 "crates/tui/src/tools/web/extract.rs",
119 "crates/tui/src/tools/web_run.rs",
120 "crates/tui/src/tools/web_search.rs",
121 "crates/tui/src/tools/workflow.rs",
122 "crates/tui/src/tools/workflow_plan_approval.rs",
123 "crates/tui/src/tui/ambient_life.rs",
124 "crates/tui/src/tui/app.rs",
125 "crates/tui/src/tui/app/composer.rs",
126 "crates/tui/src/tui/app/types.rs",
127 "crates/tui/src/tui/approval.rs",
128 "crates/tui/src/tui/auto_review.rs",
129 "crates/tui/src/tui/clipboard.rs",
130 "crates/tui/src/tui/color_compat.rs",
131 "crates/tui/src/tui/command_palette.rs",
132 "crates/tui/src/tui/context_inspector.rs",
133 "crates/tui/src/tui/file_mention.rs",
134 "crates/tui/src/tui/file_picker.rs",
135 "crates/tui/src/tui/history.rs",
136 "crates/tui/src/tui/history/latex_render.rs",
137 "crates/tui/src/tui/hotbar/actions.rs",
138 "crates/tui/src/tui/hotbar/setup.rs",
139 "crates/tui/src/tui/live_transcript.rs",
140 "crates/tui/src/tui/markdown_render.rs",
141 "crates/tui/src/tui/model_picker.rs",
142 "crates/tui/src/tui/mouse_ui.rs",
143 "crates/tui/src/tui/notifications.rs",
144 "crates/tui/src/tui/pager.rs",
145 "crates/tui/src/tui/prompt_suggestion.rs",
146 "crates/tui/src/tui/provider_picker.rs",
147 "crates/tui/src/tui/session_picker.rs",
148 "crates/tui/src/tui/setup/mod.rs",
149 "crates/tui/src/tui/setup/tools_mcp.rs",
150 "crates/tui/src/tui/sidebar.rs",
151 "crates/tui/src/tui/startup_defaults.rs",
152 "crates/tui/src/tui/subagent_routing.rs",
153 "crates/tui/src/tui/tool_routing.rs",
154 "crates/tui/src/tui/transcript.rs",
155 "crates/tui/src/tui/ui.rs",
156 "crates/tui/src/tui/ui/activity_detail.rs",
157 "crates/tui/src/tui/ui/apply.rs",
158 "crates/tui/src/tui/ui/dispatch.rs",
159 "crates/tui/src/tui/ui/event_loop.rs",
160 "crates/tui/src/tui/ui/frame.rs",
161 "crates/tui/src/tui/ui/handlers.rs",
162 "crates/tui/src/tui/ui/session_state.rs",
163 "crates/tui/src/tui/underwater.rs",
164 "crates/tui/src/tui/views/fleet_detail.rs",
165 "crates/tui/src/tui/views/fleet_setup.rs",
166 "crates/tui/src/tui/views/help.rs",
167 "crates/tui/src/tui/views/mod.rs",
168 "crates/tui/src/tui/views/skills_manager.rs",
169 "crates/tui/src/tui/widgets/agent_card.rs",
170 "crates/tui/src/tui/widgets/mod.rs",
171 "crates/tui/src/tui/widgets/workflow_panel.rs",
172 "crates/tui/src/tui/work_surface/mod.rs",
173 "crates/tui/src/tui/work_surface/model.rs",
174 "crates/tui/src/utils.rs",
175 "crates/tui/src/work_graph/runtime.rs",
176 "crates/tui/src/working_set.rs",
177 "crates/tui/src/xai_oauth.rs",
178 "crates/workflow-js/src/vm.rs",
179 "crates/workflow/src/fleet_exact.rs",
180 "crates/workflow/src/fleet_reasoning.rs",
181 "crates/workflow/src/lib.rs"
182 ],
183 "binary_targets": [
184 "codewhale-cli:codew",
185 "codewhale-cli:codewhale",
186 "codewhale-tui:codewhale-tui"
187 ],
188 "_todo_2026_08_06_windows_lane": "v0.9.4 Windows/no-sandbox test-lane repair: aggregate 673296 -> 673375 (+79 lines). The 12 failures blocking the ship were not Windows-only - 7 fail on any host with no OS sandbox backend (all Windows, Linux without bubblewrap), and release.yml's parity job runs the full suite on ubuntu-latest, so the tag itself would have failed. Growth is a pinned sandbox backend in the underwater test fixture plus one new test covering the unenforced rendering the fixture no longer exercises, the rooted-mention and native-separator fixes in file_mention, and their comments. No new modules; growth is in existing files. Pay down in v0.9.5.",
189 "document_kind": "codewhale.source_structure_budget",
190 "large_module_threshold_lines": 1000,
191 "max_large_module_count": 175,
192 "max_module_lines": 17596,
193 "max_total_owned_rust_lines": 673375,
194 "schema_version": 1,
195 "workspace_packages": [
196 "codewhale-agent",
197 "codewhale-app-server",
198 "codewhale-build-support",
199 "codewhale-cli",
200 "codewhale-config",
201 "codewhale-core",
202 "codewhale-execpolicy",
203 "codewhale-hooks",
204 "codewhale-lane",
205 "codewhale-mcp",
206 "codewhale-paths",
207 "codewhale-protocol",
208 "codewhale-release",
209 "codewhale-secrets",
210 "codewhale-state",
211 "codewhale-telemetry",
212 "codewhale-tools",
213 "codewhale-tui",
214 "codewhale-workflow",
215 "codewhale-workflow-js"
216 ]
217 }
218
218 lines JSON