CI / build (push) Has been cancelled
- Archive 79 completed framework-dev tasks from tasks/ -> tasks/complete/ - status.py: add --cleanup-done and --install-cleanup-schedule commands - Add scripts/automaton-cleanup.sh for periodic task archiving - Dashboard: rename 'Background' tab -> 'Agent', 'Cleanup' agent -> 'Completed Task Archiver', remove redundant group headers and pill badges, dim inactive agent placeholders - .rules.md: add Self-Documenting UI Names rule - New tests: test_cleanup_done.py, expanded test_app.py and test_task.py
2.6 KiB
2.6 KiB
Implementation: State File Enforcement
Changes Made
1. .state file format (implemented in scripts/status.py)
.statefile contains a single phase name (e.g.,research,research:awaiting_approval,implement)- Written atomically via
.state.tmp→.staterename .state.approvalsappend-only log records all approvals with timestamp and approver.state.lockfor multi-agent claiming (optional, only in multi-agent mode)- Non-artifact metadata files (
.state,.state.approvals,.state.lock,.state.tmp,VRAM_CONFIG.md,PARENT_SPEC.md,REVIEW.md) are excluded from artifact checks
2. State transitions with approval sub-states
- Approval-gated phases: research, decomposition, design, test_design now have
:awaiting_approval→:approvedsub-states - Non-approval phases: implement, bug_find, adversarial_bug_find, doc_review, referee have no sub-states
status.py --transitionrefuses transitions past:awaiting_approvalwithout--approvestatus.py --approvetransitions:awaiting_approval→:approvedand records approval in.state.approvals
3. Backward compatibility
- If
.statedoesn't exist,status.pyinfers phase from artifacts and writes.state upgrade.shbootstraps.statefor all existing tasks- Phase prompts work with or without
.state(warns if missing)
4. Forbidden artifacts per phase (implemented in status.py --validate-folder)
- Each phase has a defined set of artifacts that must NOT exist (artifacts from future phases)
--validate-folderchecks and reports violations--transitionrefuses to proceed if forbidden artifacts exist
5. Task creation gate (implemented in status.py --create-task)
--create-taskcreates task folder with.state=newand empty.state.approvals- Validates kebab-case task names
- Refuses if task already exists
--auditCategory 4 flags manually created task folders
6. Orchestrator and workflow updates
prompts/workflow.mdrewritten:.stateis canonical, approval sub-states documented,status.pycommands referencedprompts/orchestrate.mdreduced from 493 to 143 lines, referencesworkflow.mdandsubtask_management.md- All phase prompts include
.stateprecondition check
Files Modified
scripts/status.py(new, 980 lines)prompts/workflow.md(rewritten)prompts/orchestrate.md(rewritten, 143 lines)prompts/subtask_management.md(new, extracted from orchestrate.md)tests/test_status.py(new, 25 tests)scripts/upgrade.sh(new)
Test Results
- 183 tests passing (including 25 new status.py tests)
- Python compilation clean
- Shell script syntax clean