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:
@@ -0,0 +1 @@
|
||||
complete
|
||||
@@ -0,0 +1 @@
|
||||
# ADVERSARIAL_BUG_REPORT\n\nNo adversarial issues found.
|
||||
@@ -0,0 +1 @@
|
||||
# BUG_REPORT\n\nNo bugs found.
|
||||
@@ -0,0 +1 @@
|
||||
# DOC_REVIEW\n\nChanges are minimal and well-understood.
|
||||
@@ -0,0 +1,10 @@
|
||||
# IMPLEMENTATION.md — Fix Guard Plugin Derailment
|
||||
|
||||
## Changes Made
|
||||
- `plugins/automaton-guard/plugin.ts:60-65`: Replaced `client.chat()` injection with `throw new Error()`
|
||||
|
||||
## How It Works
|
||||
- When an edit is blocked, the guard now throws an error instead of injecting synthetic user messages
|
||||
- This prevents derailing the agent's context mid-operation
|
||||
- The harness handles the error cleanly without contaminating message history
|
||||
- The error message still includes actionable instructions for creating/transitioning tasks
|
||||
@@ -0,0 +1,4 @@
|
||||
# Review
|
||||
- **Status**: approved
|
||||
- **Timestamp**: 2026-06-15T17:33:42.956856
|
||||
- **Comment**:
|
||||
@@ -0,0 +1,11 @@
|
||||
# Fix Guard Plugin Derailment
|
||||
|
||||
## Problem
|
||||
The automaton-guard plugin (`plugins/automaton-guard/plugin.ts:61-64`) calls `client.chat()` with `role: "user"` when an edit is blocked. This injects synthetic user messages that can derail agent context mid-operation.
|
||||
|
||||
## Fix
|
||||
Replace the `client.chat()` call with returning an error through the output mechanism, using `throw new Error()` or equivalent so the harness handles the rejection cleanly without contaminating the agent's message history.
|
||||
|
||||
## Verification
|
||||
- Guard plugin rejects blocked edits without injecting user messages
|
||||
- Agent context is not contaminated
|
||||
@@ -0,0 +1,3 @@
|
||||
VERDICT: PASS
|
||||
|
||||
All fixes verified. 206 tests pass.
|
||||
Reference in New Issue
Block a user