Restore archived tasks, fix dashboard scroll-reset, bind ornith, add Playwright smoke test

- **Restore 82 completed tasks** from tasks/complete/ back to tasks/ top
  level (all <7 days old per the cleanup policy; premature bulk archive
  was fixed).
- **Dashboard: fix scroll-reset on auto-refresh** — renderBoard rebuilds
  the board via innerHTML every 2s, destroying each column-body's
  scrollTop. Now snapshots column-body scrollTop + board.scrollLeft +
  view.scrollTop before rebuild and restores after (matched by
  PHASE_GROUPS index).
- **Dashboard UI additions** (pre-existing unstaged work): approval
  section cards, transition buttons, inline artifact editor (textarea for
  writing missing SPEC/VERDICT/etc from the detail modal).
- **Bind ornith as Implement model** — config.md: Model explicit to
  omlx/Ornith-1.0-35B-4bit-mlx, context window 32768. Interactive
  autopilot already used ornith via opencode default; now explicit.
- **Fix cleanup stub** — automaton-cleanup.sh had a stale --project arg
  pointing at a pytest temp dir (test isolation leak). Rewired to point
  at ~/.automaton.
- **Fix plist-isolation test** — test asserted host plist doesn't exist,
  but a real install creates it. Now snapshots mtime before run, asserts
  unchanged after (only a write during the test counts as bleed).
- **New Playwright smoke test** (tests/test_dashboard_ui.py) — 2 tests:
  board renders tasks, column scroll survives auto-refresh tick.
  Verified the test fails without the scroll fix (scrollTop resets to 0).
  Skipped via importorskip when playwright is absent (main CI stays
  green).
- **Clarify SI loop scope in README** — new-project onboarding section
  documents the framework-scoped self-improvement loop and options
  (leave/pause/create project loop).
- **CHANGELOG** documents all changes including the known model-divergence
  gap (mde tasks marked complete but per-role model binding was never
  implemented).
This commit is contained in:
Lap Tran
2026-06-26 10:05:18 -04:00
parent fe43b9e1fc
commit bc7daf8590
666 changed files with 15994 additions and 69 deletions
+1
View File
@@ -0,0 +1 @@
complete
@@ -0,0 +1,2 @@
research:approved|2026-06-22T14:28:48.687322+00:00|user
code_review:approved|2026-06-22T14:36:53.683838+00:00|user
@@ -0,0 +1,12 @@
# Adversarial Bug Report: fix-test-plan-phase-mapping
## Attack Vectors Tested
1. **Task with both TEST_PLAN.md and IMPLEMENTATION.md**: IMPLEMENTATION.md is checked first in both status.py and task.py, so it correctly maps to `code_review` — no regression
2. **Task with TEST_PLAN.md only**: Maps to `test_design` — correct
3. **Task with TEST_PLAN.md and CODE_REVIEW.md**: CODE_REVIEW.md checked first → `bug_find` — correct
4. **Case sensitivity of filenames**: Artifact check uses exact string match — `test_plan.md` (lowercase) would not match `TEST_PLAN.md` — this is existing behavior, not a new issue
## Findings
No bugs found.
## Verdict: PASS
@@ -0,0 +1,9 @@
# Bug Report: fix-test-plan-phase-mapping
## Scope
Reviewed `scripts/status.py` and `automaton/dashboard/core/task.py` for TEST_PLAN.md phase mapping.
## Findings
No bugs found. Both locations now correctly map TEST_PLAN.md to `test_design`. Tasks with both TEST_PLAN.md and IMPLEMENTATION.md still correctly map to `code_review` (IMPLEMENTATION.md checked first).
## Verdict: PASS
@@ -0,0 +1,19 @@
# Code Review: fix-test-plan-phase-mapping
## Reviewed Files
- `scripts/status.py` (line 348-349: `_infer_state_from_artifacts()`)
- `automaton/dashboard/core/task.py` (line 548-549: `determine_task_state()`)
- `tests/test_task.py`
## Changes
Changed `TEST_PLAN.md` mapping from `implement` → `test_design` in both `status.py` and dashboard `task.py`.
## Analysis
- **Correctness**: `TEST_PLAN.md` is produced during the `test_design` phase, not `implement`. The workflow is: `test_design` → (approval) → `implement`. TEST_PLAN.md is the output of `test_design`, so it should map to `test_design`.
- **Consistency**: Both `status.py` and dashboard `task.py` now use the same mapping
- **Test updates**: Existing tests updated to assert `TEST_DESIGN` instead of `IMPLEMENT`, and new test added for `--upgrade` inference
- **No regression**: Tasks with both TEST_PLAN.md and IMPLEMENTATION.md still correctly map to `code_review` (because IMPLEMENTATION.md is checked first)
## Verdict: PASS
The fix is correct, minimal, and consistent across both enforcement and dashboard code.
@@ -0,0 +1,12 @@
# Doc Review: fix-test-plan-phase-mapping
## Documentation Impact
No documentation changes needed. The phase mapping fix aligns the code with the documented workflow (TEST_PLAN.md is produced during test_design phase, not implement).
## Checklist
- [x] AGENTS.md LEGAL_TRANSITIONS already show `test_design` → `implement` (TEST_PLAN.md is test_design output)
- [x] prompts/workflow.md phase descriptions already correct
- [x] No user-facing documentation referenced the old (buggy) mapping
- [x] CHANGELOG.md will be updated for the release
## Verdict: PASS
@@ -0,0 +1,22 @@
# Implementation: fix-test-plan-phase-mapping
## Bug
Both `status.py:_infer_state_from_artifacts()` and the dashboard's `determine_task_state()` mapped `TEST_PLAN.md` to the `implement` phase. But `TEST_PLAN.md` is produced during the `test_design` phase, not `implement`. This caused:
- `--upgrade` to bootstrap incorrect `.state` for tasks with TEST_PLAN.md
- Dashboard to show `IMPLEMENT` instead of `TEST_DESIGN` for tasks that have a test plan but no implementation yet
## Fix
Changed the mapping in both locations:
1. `scripts/status.py:348-349`: `TEST_PLAN.md` → `test_design` (was `implement`)
2. `automaton/dashboard/core/task.py:548-549`: `TEST_PLAN.md` → `TaskState.TEST_DESIGN` (was `TaskState.IMPLEMENT`)
## Files Changed
- `scripts/status.py` (line 348-349): Changed return value from `"implement"` to `"test_design"`
- `automaton/dashboard/core/task.py` (line 548-549): Changed return from `TaskState.IMPLEMENT` to `TaskState.TEST_DESIGN`
- `tests/test_task.py`: Updated `test_implementation_from_test_plan` and `test_test_plan_shows_implement` to assert `TEST_DESIGN` instead of `IMPLEMENT`
## Tests
- `test_implementation_from_test_plan`: Now asserts `TaskState.TEST_DESIGN`
- `test_test_plan_shows_test_design` (renamed from `test_test_plan_shows_implement`): Asserts `TaskState.TEST_DESIGN`
- `test_test_plan_maps_to_test_design` in `test_status.py`: Verifies `--upgrade` infers `test_design` for TEST_PLAN.md
- All 249 tests pass
+13
View File
@@ -0,0 +1,13 @@
# Spec: fix-test-plan-phase-mapping
## Problem
`scripts/status.py:344` (`_infer_state_from_artifacts`) maps `TEST_PLAN.md` (without `IMPLEMENTATION.md`) to `"implement"`. But `TEST_PLAN.md` is the artifact of the `test_design` phase. The dashboard's `task.py:510-511` has the same mapping.
## Fix
Map `TEST_PLAN.md` (without `IMPLEMENTATION.md`) to `"test_design"` in both `status.py:_infer_state_from_artifacts()` and `automaton/dashboard/core/task.py:determine_task_state()`.
## Acceptance Criteria
- A task with SPEC.md + TEST_PLAN.md (no IMPLEMENTATION.md) infers as `test_design`, not `implement`
- A task with IMPLEMENTATION.md still infers as `implement`/`code_review`
- Existing tests still pass
- Add test for the TEST_PLAN-only case
@@ -0,0 +1,13 @@
# Verdict: fix-test-plan-phase-mapping
## Status: PASS
## Summary
Fixed TEST_PLAN.md phase mapping from `implement` to `test_design` in both `status.py:_infer_state_from_artifacts()` and dashboard `task.py:determine_task_state()`. Tests updated to assert correct mapping. No regressions — tasks with both TEST_PLAN.md and IMPLEMENTATION.md still correctly map to `code_review`.
## Artifacts
- IMPLEMENTATION.md: Complete
- CODE_REVIEW.md: PASS
- BUG_REPORT.md: No bugs found
- ADVERSARIAL_BUG_REPORT.md: No bugs found
- DOC_REVIEW.md: PASS