diff --git a/conductor/tracks/default_layout_install_20260629/plan.md b/conductor/tracks/default_layout_install_20260629/plan.md index 8cda10e2..2d866b37 100644 --- a/conductor/tracks/default_layout_install_20260629/plan.md +++ b/conductor/tracks/default_layout_install_20260629/plan.md @@ -46,7 +46,7 @@ Focus: relocate `tests/artifacts/manualslop_layout_default.ini` to `layouts/defa Focus: ship `layouts/default.ini` to `cwd/manualslop_layout.ini` when the file is missing/empty/small, before `immapp.run(...)` reads it. -- [~] Task 2.1: Write failing test for install behavior (Tier 3 dispatching tests/test_default_layout_install.py) +- [x] Task 2.1 [35f22e4d]: Write failing test for install behavior (Tier 3 dispatching tests/test_default_layout_install.py) - WHERE: new file `tests/test_default_layout_install.py` - WHAT: red phase — 3 tests: 1. `test_default_layout_installed_when_ini_missing` — `os.remove(cwd/manualslop_layout.ini)` before launch; `subprocess.Popen(sloppy_args, cwd=temp_workspace)`; wait ≥ 5s; assert `manualslop_layout.ini` exists with `[Window][Project Settings]` entry + a non-empty `DockId=` line @@ -54,7 +54,7 @@ Focus: ship `layouts/default.ini` to `cwd/manualslop_layout.ini` when the file i 3. `test_default_layout_NOT_installed_when_layout_present` — pre-write a custom `[Window][CustomPanel]` INI; assert the custom panel survives (no overwrite) - HOW: each test spawns the app via `subprocess.Popen(["uv", "run", "python", "-u", "sloppy.py", "--enable-test-hooks"], cwd=temp_workspace, stdout=log_file, stderr=log_file, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)` (mirrors the conftest at line 792), waits 5-8s, terminates via `kill_process_tree()` (per the conftest pattern at line 853), then asserts on the saved INI - SAFETY: tests MUST NOT touch the repo-root `manualslop_layout.ini`; each test uses its own cwd (per `conductor/code_styleguides/workspace_paths.md`); temp workspace path = `Path("tests/artifacts/_default_layout_install_")` -- [ ] Task 2.2: Run phase 2.1 tests; confirm RED (fails for the right reason) +- [x] Task 2.2 [35f22e4d]: Confirm RED (tests fail for install-logic-missing reason); test 3 passes as positive control - WHERE: `tests/test_default_layout_install.py` - HOW: `uv run pytest tests/test_default_layout_install.py -v --tb=short --timeout=120` - Expected: 3 tests fail because no install logic exists yet; the temp-workspace INI is empty or absent post-launch diff --git a/conductor/tracks/default_layout_install_20260629/state.toml b/conductor/tracks/default_layout_install_20260629/state.toml index 442a402a..c5a5e99c 100644 --- a/conductor/tracks/default_layout_install_20260629/state.toml +++ b/conductor/tracks/default_layout_install_20260629/state.toml @@ -34,8 +34,8 @@ t1_9 = { status = "completed", commit_sha = "7577d7d", description = "Verify src t1_10 = { status = "completed", commit_sha = "7577d7d", description = "Commit phase 1 with git note (relocation + layouts/ stack + future Fleury target)" } # Phase 2 (9 tasks) -t2_1 = { status = "pending", commit_sha = "", description = "Write 3 failing tests in tests/test_default_layout_install.py" } -t2_2 = { status = "pending", commit_sha = "", description = "Confirm RED (tests fail for install-logic-missing reason)" } +t2_1 = { status = "completed", commit_sha = "35f22e4d", description = "Write 3 failing tests in tests/test_default_layout_install.py" } +t2_2 = { status = "completed", commit_sha = "35f22e4d", description = "Confirm RED (tests fail for install-logic-missing reason)" } t2_3 = { status = "pending", commit_sha = "", description = "Implement _install_default_layout_if_empty helper in src/gui_2.py" } t2_4 = { status = "pending", commit_sha = "", description = "Wire helper into App._post_init BEFORE _diag_layout_state" } t2_5 = { status = "pending", commit_sha = "", description = "Add drain helper _install_default_layout_if_empty_result per data-oriented convention" }