5ad062b13a
Bug: when cwd/manualslop_layout.ini is missing/empty after first-run,
post-deletion, or post-corrupt-INI, the GUI panels are not visible
despite show_windows[name] = True. Root cause is structural: imgui.begin
without [Window][name] + DockId in the INI produces a floating window
that gets clipped by the full-screen dockspace. Empirically confirmed:
8s of running produces a 585-byte INI containing only [Window][Debug##Default].
Fix shape (4 phases):
Phase 1: relocate tests/artifacts/manualslop_layout_default.ini ->
layouts/default.ini (at repo root, parallel to themes/ per
user directive 'no configs in src/'); add src/paths.py
'layouts' field + SLOP_GLOBAL_LAYOUTS env override (mirror
themes pattern at line 60/83/150/210-216); add src/layouts.py
loader module (mirror src/theme_models.py + src/theme_2.py
contract; LayoutFile = @dataclass(frozen=True, slots=True)
per the C11/Odin/Jai-in-Python value-type mandate).
Phase 2: install-on-empty-INI in App._post_init. _install_default_layout_if_empty
helper + drain helper, called BEFORE _diag_layout_state and
BEFORE immapp.run. logs '[GUI] installed default layout: <src> -> <dst>'.
Phase 3: drop hardcoded 'tests/artifacts/live_gui_workspace/...' path
from src/commands.py:reset_layout line 369-376 (dead code in
production; violates 'production code defaults to immediate
directory' directive 2026-06-29).
Phase 4: 3-test regression suite in tests/test_default_layout_install.py
+ 1 unit test in tests/test_reset_layout.py; user manual verify
(delete INI, run sloppy.py standalone, see panels).
TDD red-first per task. Atomic per-task commits with git notes (per
conductor/workflow.md §Task Workflow step 9-10). No day estimates per
conductor/workflow.md §Tier 1 Track Initialization Rules.
Out of scope (deferred): panel_defs_fleury_migration - migrate the ~40
render_x functions to declarative PanelDef records per Ryan Fleury's
raddbg 'type view' / 'lens' pattern. Spec §Eventual Normalization Target
documents the design sketch + the transcripts at docs/transcripts/.
This track sets up layouts/ at repo root + src/layouts.py as the typed
loader so the future migration has somewhere to land.
Tracks.md row will be added in Phase 4 (Task 4.6) when the track ships.