Private
Public Access
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-pickc2155593(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.
95 lines
6.8 KiB
TOML
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 |