Private
Public Access
0
0
Files
manual_slop/conductor/tracks/startup_speedup_20260606/metadata.json
T
ed cd4fb04541 conductor(track): create startup_speedup_20260606 track for sloppy.py startup latency
Fulfills the existing backlog entry at conductor/tracks.md:152
(2026-06-05 root-cause analysis of live_gui wait_for_server timeouts).

Main Thread Purity Invariant: the main thread (entering immapp.run())
must never import a module heavier than imgui_bundle and the lean
gui_2 skeleton. Enforced by:
  - static gate: scripts/audit_main_thread_imports.py (CI)
  - runtime hook: tests/test_main_thread_purity.py (sys.addaudithook)

Threading constraint: no new threading.Thread(...) calls in src/.
All background work goes through AppController._io_pool
(ThreadPoolExecutor, max_workers=4, thread_name_prefix='controller-io').

9 phases, 57 tasks: audit+baseline, job pool, lazy-load SDKs, lazy-load
FastAPI, lazy-load feature-gated GUI, migrate ad-hoc threads, runtime
enforcement, hook API + diagnostics, verify+checkpoint.

Expected savings: ~2000-2400ms off main-thread import cost.
Target: import src.ai_client < 50ms (from ~1800ms), live_gui fixtures
no longer time out at wait_for_server(timeout=15).
2026-06-06 12:57:20 -04:00

71 lines
2.8 KiB
JSON

{
"track_id": "startup_speedup_20260606",
"name": "Sloppy.py Startup Speedup",
"initialized": "2026-06-06",
"owner": "tier2-tech-lead",
"priority": "high",
"status": "active",
"type": "refactor + performance",
"scope": {
"new_files": [
"src/startup_profiler.py",
"scripts/audit_main_thread_imports.py",
"scripts/audit_gui2_imports.py",
"tests/test_ai_client_lazy_imports.py",
"tests/test_hook_server_lazy_fastapi.py",
"tests/test_app_controller_io_pool.py",
"tests/test_command_palette_lazy.py",
"tests/test_theme_nerv_lazy.py",
"tests/test_markdown_helper_lazy.py",
"tests/test_main_thread_purity.py",
"tests/test_startup_profiler.py",
"tests/test_io_pool_endpoint.py"
],
"modified_files": [
"src/ai_client.py",
"src/api_hooks.py",
"src/app_controller.py",
"src/commands.py",
"src/command_palette.py",
"src/theme_2.py",
"src/theme_nerv.py",
"src/theme_nerv_fx.py",
"src/markdown_helper.py",
"src/markdown_table.py",
"src/gui_2.py",
"src/log_pruner.py",
"src/project_manager.py"
]
},
"blocked_by": [],
"blocks": [],
"estimated_phases": 9,
"spec": "spec.md",
"plan": "plan.md",
"architectural_invariant": "The main thread (the one that enters immapp.run()) must NEVER import a module heavier than imgui_bundle and the lean gui_2 skeleton. Enforced by scripts/audit_main_thread_imports.py (static CI gate) and tests/test_main_thread_purity.py (runtime audit-hook test).",
"threading_constraint": "NO new threading.Thread(...) calls in src/. All background work must go through AppController._io_pool (ThreadPoolExecutor, max_workers=4, thread_name_prefix='controller-io').",
"verification_criteria": [
"import src.ai_client < 50ms cold start (from ~1800ms)",
"import src.gui_2 < 500ms cold start (from ~3000ms)",
"import src.app_controller < 300ms cold start (from ~700ms)",
"uv run sloppy.py --enable-test-hooks reaches immapp.run() in < 1.5s",
"live_gui.wait_for_server(timeout=15) passes for all tests",
"scripts/audit_main_thread_imports.py exits 0 (no main-thread heavy imports)",
"tests/test_main_thread_purity.py passes (runtime audit hook confirms invariant)",
"No regressions in 273+ existing tests",
"ZERO new threading.Thread(...) calls in src/ (after Phase 6 migration)",
"Startup profile + io_pool status visible via /api/startup_profile and /api/io_pool_status"
],
"links": {
"backlog_entry": "conductor/tracks.md:152",
"benchmark_script": "scripts/benchmark_imports.py",
"audit_script": "scripts/audit_main_thread_imports.py",
"related_docs": [
"docs/guide_architecture.md",
"docs/guide_app_controller.md",
"docs/guide_hot_reload.md",
"docs/guide_testing.md"
]
}
}