chore(layouts): introduce layouts/ directory + src/layouts.py; relocate default layout asset

TIER-2 READ AGENTS.md, conductor/workflow.md, conductor/edit_workflow.md,
  conductor/tier2/githooks/forbidden-files.txt,
  conductor/tracks/tier2_leak_prevention_20260620/spec.md,
  conductor/code_styleguides/data_oriented_design.md,
  conductor/code_styleguides/error_handling.md,
  conductor/code_styleguides/type_aliases.md,
  conductor/product-guidelines.md, conductor/code_styleguides/python.md,
  docs/guide_meta_boundary.md before Phase 1 Task 1.10.

Phase 1 of default_layout_install_20260629:
- tests/artifacts/manualslop_layout_default.ini -> layouts/default.ini
  (git mv preserves history; same content, new parallel-to-themes home)
- src/paths.py: layouts: Path field + SLOP_GLOBAL_LAYOUTS env override
  + get_layouts_dir() accessor (mirror themes at 60/83/150/210+)
- src/layouts.py: new LayoutFile @dataclass(frozen=True, slots=True) +
  load_layouts_from_dir/file + load_layouts_from_disk consumer
  (mirror src/theme_models.py + src/theme_2.py; Result drain per error_handling)
- tests/conftest.py:709: reads from layouts/default.ini
This commit is contained in:
ed
2026-06-29 14:20:51 -04:00
parent 89f4d1029e
commit 7577d7d28b
4 changed files with 90 additions and 1 deletions
+1 -1
View File
@@ -706,7 +706,7 @@ def live_gui(request) -> Generator["_LiveGuiHandle", None, None]:
# To iterate: open sloppy.py interactively, arrange the layout, quit
# (HelloImGui auto-saves to cwd), then copy manualslop_layout.ini over the
# artifact below.
_default_layout_src = project_root / "tests" / "artifacts" / "manualslop_layout_default.ini"
_default_layout_src = project_root / "layouts" / "default.ini"
if _default_layout_src.exists():
shutil.copy2(_default_layout_src, temp_workspace / "manualslop_layout.ini")