# Implementation: Inflight Upgrade Path ## Changes Made ### 1. `.state` file bootstrap for existing tasks - `scripts/upgrade.sh` scans all task folders, infers phase from artifacts, writes `.state` with the inferred phase - `scripts/status.py` naturally bootstraps `.state` when it encounters tasks without one (fallback heuristic) ### 2. Upgrade script: `scripts/upgrade.sh` - Scans `{project}/.automaton/tasks/` for all task folders - For each task without `.state`, infers phase from artifact heuristic and writes `.state` - Also scans sub-task folders in `subtasks/*/` - Creates `.state.approvals` for each task - Runs `status.py --audit` for violation summary - Produces human-readable summary with counts of bootstrapped vs. already-had-state tasks - Adds framework version marker to `config.md` ### 3. Task creation via `status.py --create-task` - Orchestrator prompt updated to use `status.py --create-task` instead of manual `mkdir` - Creates `.state` = `new` and empty `.state.approvals` atomically - Validates kebab-case task names ### 4. Backward-compatible phase prompts - Phase prompts include `.state` precondition check but warn (not refuse) if `.state` is missing - This ensures graceful transition from v1 to v2 ### 5. Documentation updates - `README.md` — Added State Enforcement (v2.0) section, Multi-Agent section, Quick Reference commands - `CHANGELOG.md` — Added comprehensive v2.0 changes under [unreleased] - `config.md` — Added Framework Version section with version 2.0 and state enforcement indicator ### 6. Version marker in config.md ``` ## Framework Version - **Version**: 2.0 - **State enforcement**: enabled (.state file + status.py) ``` ## Files Modified/Created - `scripts/upgrade.sh` (new) - `scripts/status.py` (includes bootstrap logic) - `README.md` (updated) - `CHANGELOG.md` (updated) - `config.md` (updated) ## Test Results - Shell syntax check: `bash -n upgrade.sh` passes - All 183 pytest tests passing