Files
manual_slop/conductor/tracks/default_layout_extract_20260629/state.toml
T
ed 466d26567b conductor(track): init default_layout_extract_20260629 (extract tier-2 good work + build hard 4-layer visual verification)
Plan (per user direction, hybrid approach C + single track):
1. Port layouts/default.ini + src/layouts.py fresh from tier-2 (clean history)
2. Cherry-pick c2155593 (orphan end_child) + 3b966288 (reset_layout)
3. Add _install_default_layout_* helpers + App.run + App._post_init wiring
4. Build 4 verification layers:
   - Layer 1: per-panel render sentinel (catches 'panel never opens')
   - Layer 2: Win32 PrintWindow pixel baseline (catches ALL visual regressions)
   - Layer 3: forced test viewport + theme env vars (makes baseline deterministic)
   - Layer 4: cannot-skip gates (standalone CLI + CI + VERIFIED-<date> tag)
5. Negative test proves the verification catches the original bug

Tier-2 commits NOT extracted:
- e9654518 (wrong-theory INI strip, superseded)
- 13ad9d3e 'idk' (meaningless)
- 28527851 'artifacts' (meaningless)
- 9437af6c (27 diagnostic scripts)
- 71028dad (drop stale src.command_palette import - tier-2 specific; master has the module so the import WORKS)

Scope: 9 phases, 36 tasks, ~36 atomic commits.
Files: 3 new (src/layouts.py, layouts/default.ini, tests/artifacts/visual_baseline_default.png, scripts/check_visual_baseline.py, docs/guide_visual_verification.md), 6 modified (src/gui_2.py, src/paths.py, src/commands.py, scripts/run_tests_batched.py, conductor/tracks.md, docs/Readme.md).

HARD verification: cannot be skipped. VERIFIED-<date> tag required for [x]-completion.
2026-06-29 21:59:52 -04:00

95 lines
6.8 KiB
TOML

# Track state for default_layout_extract_20260629
# Updated by Tier 2 Tech Lead as tasks complete
[meta]
track_id = "default_layout_extract_20260629"
name = "Default Layout Extract + Hard Visual Verification"
status = "active"
current_phase = 0
last_updated = "2026-06-29"
[blocked_by]
# None — this track is independent (replaces default_layout_install_20260629 which is superseded)
[blocks]
# Tracks that depend on this one
panel_defs_fleury_migration = "deferred (consumes LayoutFile + get_layouts_dir)"
render_persona_editor_window_fix = "deferred (Layer 1 sentinel catches the empty-content bug)"
test_engine_integration_20260627 = "in_progress (separate track)"
[phases]
phase_1 = { status = "pending", checkpointsha = "", name = "Asset Foundation (layouts/ + src/layouts.py + get_layouts_dir)" }
phase_2 = { status = "pending", checkpointsha = "", name = "Install Helpers (_install_default_layout_if_empty + pre_run)" }
phase_3 = { status = "pending", checkpointsha = "", name = "Wiring (App._post_init + App.run)" }
phase_4 = { status = "pending", checkpointsha = "", name = "Surgical Cherry-Picks (orphan end_child + reset_layout)" }
phase_5 = { status = "pending", checkpointsha = "", name = "Layer 1 Sentinel (per-panel render size check)" }
phase_6 = { status = "pending", checkpointsha = "", name = "Layer 2 Pixel Baseline (Win32 PrintWindow)" }
phase_7 = { status = "pending", checkpointsha = "", name = "Layer 3 Forced Viewport/Theme (env vars)" }
phase_8 = { status = "pending", checkpointsha = "", name = "Layer 4 Cannot-Skip Gates (CI + tag)" }
phase_9 = { status = "pending", checkpointsha = "", name = "Negative Test + End-to-End + Track Completion" }
[tasks]
# Phase 1
t1_1 = { status = "pending", commit_sha = "", description = "RED test for src/layouts.py:load_layouts_from_dir" }
t1_2 = { status = "pending", commit_sha = "", description = "Create src/layouts.py (port fresh from tier-2)" }
t1_3 = { status = "pending", commit_sha = "", description = "RED test for src/paths.py:get_global_layouts_path" }
t1_4 = { status = "pending", commit_sha = "", description = "Add get_global_layouts_path() + SLOP_GLOBAL_LAYOUTS env override" }
t1_5 = { status = "pending", commit_sha = "", description = "RED test for bundled layouts/default.ini structure" }
t1_6 = { status = "pending", commit_sha = "", description = "Port layouts/default.ini to master (8 [Window] + [Docking])" }
# Phase 2
t2_1 = { status = "pending", commit_sha = "", description = "RED test for _install_default_layout_if_empty (5 cases)" }
t2_2 = { status = "pending", commit_sha = "", description = "Implement _install_default_layout_if_empty + _result wrapper" }
t2_3 = { status = "pending", commit_sha = "", description = "RED test for _install_default_layout_pre_run_result (disk-only)" }
t2_4 = { status = "pending", commit_sha = "", description = "Implement _install_default_layout_pre_run_result" }
# Phase 3
t3_1 = { status = "pending", commit_sha = "", description = "RED test for App._post_init calling install helper" }
t3_2 = { status = "pending", commit_sha = "", description = "Wire _install_default_layout_if_empty_result into App._post_init" }
t3_3 = { status = "pending", commit_sha = "", description = "RED test for App.run calling pre-run install before immapp" }
t3_4 = { status = "pending", commit_sha = "", description = "Wire _install_default_layout_pre_run_result into App.run" }
t3_5 = { status = "pending", commit_sha = "", description = "GREEN end-to-end install fires + INI created" }
# Phase 4
t4_1 = { status = "pending", commit_sha = "", description = "Cherry-pick c2155593 (remove orphan imgui.end_child at line 6990)" }
t4_2 = { status = "pending", commit_sha = "", description = "Cherry-pick 3b966288 (remove dead test-fixture path from reset_layout)" }
# Phase 5
t5_1 = { status = "pending", commit_sha = "", description = "RED test for per-panel render size check (Layer 1)" }
t5_2 = { status = "pending", commit_sha = "", description = "Verify sentinel catches empty-panels regression (negative test)" }
t5_3 = { status = "pending", commit_sha = "", description = "Verify sentinel catches render_main_interface no-op (negative test)" }
# Phase 6
t6_1 = { status = "pending", commit_sha = "", description = "RED test for Win32 PrintWindow capture (Layer 2)" }
t6_2 = { status = "pending", commit_sha = "", description = "Implement _capture_gui_window_png (PrintWindow + Pillow)" }
t6_3 = { status = "pending", commit_sha = "", description = "Generate baseline PNG (visual_baseline_default.png)" }
t6_4 = { status = "pending", commit_sha = "", description = "RED test for pixel diff comparison" }
t6_5 = { status = "pending", commit_sha = "", description = "Implement _compute_pixel_diff (numpy-based)" }
# Phase 7
t7_1 = { status = "pending", commit_sha = "", description = "RED test for MANUAL_SLOP_TEST_VIEWPORT env var" }
t7_2 = { status = "pending", commit_sha = "", description = "Implement MANUAL_SLOP_TEST_VIEWPORT parsing in App.run" }
t7_3 = { status = "pending", commit_sha = "", description = "RED test for MANUAL_SLOP_TEST_THEME env var" }
t7_4 = { status = "pending", commit_sha = "", description = "Implement MANUAL_SLOP_TEST_THEME parsing in App.run" }
# Phase 8
t8_1 = { status = "pending", commit_sha = "", description = "Create scripts/check_visual_baseline.py (standalone CLI)" }
t8_2 = { status = "pending", commit_sha = "", description = "Wire check_visual_baseline into scripts/run_tests_batched.py" }
t8_3 = { status = "pending", commit_sha = "", description = "Write docs/guide_visual_verification.md" }
t8_4 = { status = "pending", commit_sha = "", description = "Update conductor/tracks.md schema (VERIFIED-<date> tag requirement)" }
t8_5 = { status = "pending", commit_sha = "", description = "Update docs/Readme.md to reference new guide" }
# Phase 9
t9_1 = { status = "pending", commit_sha = "", description = "Negative test: corrupted INI catches the regression (FR8)" }
t9_2 = { status = "pending", commit_sha = "", description = "Run full test batch (scripts/run_tests_batched.py)" }
t9_3 = { status = "pending", commit_sha = "", description = "Manual visual verification gate (user runs uv run sloppy.py)" }
t9_4 = { status = "pending", commit_sha = "", description = "User commits VERIFIED-<date> git tag (HARD GATE)" }
t9_5 = { status = "pending", commit_sha = "", description = "Write TRACK_COMPLETION report" }
t9_6 = { status = "pending", commit_sha = "", description = "Update conductor/tracks.md to mark track [x]" }
t9_7 = { status = "pending", commit_sha = "", description = "Conductor - User Manual Verification" }
[verification]
phase_1_complete = false
phase_2_complete = false
phase_3_complete = false
phase_4_complete = false
phase_5_complete = false
phase_6_complete = false
phase_7_complete = false
phase_8_complete = false
phase_9_complete = false
visual_baseline_png_committed = false
verified_tag_exists = false
all_tiers_pass = false