diff --git a/skills/WORKFLOW.md b/skills/WORKFLOW.md index 220498b..bae88b5 100644 --- a/skills/WORKFLOW.md +++ b/skills/WORKFLOW.md @@ -196,12 +196,16 @@ shared task state, so any environment reads it and continues an in-flight task. Workflow skills read and write Mind state via **workspace-root-relative** paths that resolve from any sibling repo: -- `PyAutoMind/active.md`, `PyAutoMind/planned.md`, `PyAutoMind/complete.md` +- `PyAutoMind/active.md`, `PyAutoMind/planned.md`, `PyAutoMind/complete.md` (ledgers) +- Prompt **files** advance `draft/ → active/ → complete///` in lockstep + with the ledgers; `PyAutoMind/scripts/lifecycle.py` owns the moves (`move`) and + drift-checks them (`check`). See `PyAutoMind/complete/AGENTS.md` (issue #71). - `source PyAutoMind/scripts/prompt_sync.sh` → `prompt_sync_push ""` (commit+push registry) `active.md` task schema, `complete.md` schema, and the prompt taxonomy -(`feature//`, `bug//`, …) are documented in `PyAutoMind/README.md`. -**The first folder is the work type, the second is the target repo/domain.** +(`draft/feature//`, `draft/bug//`, …) are documented in +`PyAutoMind/README.md`. **Under `draft/`, the first folder is the work type, the +second is the target repo/domain.** ## Worktree / branch model (local-dev) diff --git a/skills/intake/intake.md b/skills/intake/intake.md index 7844d21..28eefa3 100644 --- a/skills/intake/intake.md +++ b/skills/intake/intake.md @@ -38,11 +38,12 @@ dev workflow (issue, branch, plan). Do not bypass the Brain. fields, inserts them in place with all prose verbatim, reports re-home suggestions instead of ever moving files. Dry-run proposes; `--apply` writes (then regenerate the dashboard). -- `bin/pyauto-brain intake reconcile [prefix]` — ranks backlog prompts that - look already-shipped (cross-referenced against `complete.md` and `issued/`; - a stale hand-set `Status:` is a signal, never proof). Always read-only: - verify each suspect against the target repo's git log / merged PRs, then - retire it to `issued/` by hand. +- `bin/pyauto-brain intake reconcile [prefix]` — ranks backlog (`draft/`) + prompts that look already-shipped (cross-referenced against the `complete/` + archive — or the legacy `complete.md` until retired — and `active/`; a stale + hand-set `Status:` is a signal, never proof). Always read-only: verify each + suspect against the target repo's git log / merged PRs, then retire it to the + `complete/` archive by hand (it is already done). ## Boundary diff --git a/skills/ship_library/reference.md b/skills/ship_library/reference.md index dd50e55..72ca6fa 100644 --- a/skills/ship_library/reference.md +++ b/skills/ship_library/reference.md @@ -136,6 +136,14 @@ push Mind. Do **not** move to `complete.md`. **Shipped (option iii passed):** offer to merge the library PR (`gh pr merge --merge --auto`), post a "Shipped" comment (PRs, summary, -optional session notes), move the entry from `active.md` to `complete.md` -(`issue`, `completed: `, `library-pr:`), and push Mind with +optional session notes), then record completion in **both** lifecycle layers +(issue #71) — the ledger entry **and** the prompt file move in lockstep: +- **Ledger:** move the entry from `active.md` to `complete.md` (`issue`, + `completed: `, `library-pr:`). +- **File:** advance the prompt from `active/` to `complete///` — + `python3 PyAutoMind/scripts/lifecycle.py move --date --apply` + (writes the rich record there; the `active/` file no longer lingers as it did + under the old `issued/`). + +Then push Mind with `prompt_sync_push "prompt: ship (#) → complete"`. diff --git a/skills/ship_workspace/reference.md b/skills/ship_workspace/reference.md index d893f57..8ea387e 100644 --- a/skills/ship_workspace/reference.md +++ b/skills/ship_workspace/reference.md @@ -97,7 +97,10 @@ SHIP_EOF )" ``` -4. Move the task from `active.md` to `complete.md`: +4. Record completion in **both** lifecycle layers (issue #71): the ledger entry + **and** the prompt file, in lockstep. + + **Ledger** — move the task from `active.md` to `complete.md`: ```markdown ## @@ -105,6 +108,12 @@ SHIP_EOF - completed: - library-pr: - workspace-pr: +``` + + **File** — advance the prompt from `active/` to `complete///`: + +```bash +python3 PyAutoMind/scripts/lifecycle.py move --date --apply ``` Push Mind: `prompt_sync_push "prompt: ship (#) → complete"`. diff --git a/skills/start_dev/reference.md b/skills/start_dev/reference.md index d17eb84..dde39c6 100644 --- a/skills/start_dev/reference.md +++ b/skills/start_dev/reference.md @@ -70,12 +70,15 @@ issue** — instead: parens; bare `//.md` or pre-migration `/.md` paths). Dedupe, resolve `../` relative to the tracker, skip self-references inside `z_features/`. -2. **Status each sub-prompt:** - - exists at `PyAutoMind/` → **not yet issued**; - - exists at `PyAutoMind/issued/` → **issued**; derive task-name - candidates from the filename stem (`_`→`-`) and from `## ` - headings, grep `PyAutoMind/complete.md` for `^## $` → match = - **shipped** (record heading + PR URL); no match = **in flight**; +2. **Status each sub-prompt** (lifecycle states, issue #71): + - exists at `PyAutoMind/draft/` (or a legacy bare path) → **not yet + issued**; + - exists at `PyAutoMind/active/` (or legacy `issued/` + during the transition) → **issued**; derive task-name candidates from the + filename stem (`_`→`-`) and from `## ` headings, then check + shipped-ness: a `complete///.md` record (or, until + `complete.md` is retired, `^## $` in `PyAutoMind/complete.md`) + → **shipped** (record heading + PR URL); no match = **in flight**; - neither → **unknown** (link rot — warn). 3. **Report** a table (Sub-prompt | Status | Notes) + summary line `N shipped / M in flight / K not yet issued / U unknown`. diff --git a/skills/start_dev/start_dev.md b/skills/start_dev/start_dev.md index 61e0e1e..afe7b61 100644 --- a/skills/start_dev/start_dev.md +++ b/skills/start_dev/start_dev.md @@ -122,7 +122,7 @@ Generate a concise title (<70 chars, conventional prefix where apt), then **delegate the issue write to `/create_issue`** (the PyAutoMind issue+registry primitive) — pass it the classified primary repo, title, two-level plan, and suggested branch. It assembles the body, creates the issue (after review), moves -the prompt to `issued/`, and pushes Mind. Do **not** re-implement issue creation +the prompt to `active/`, and pushes Mind. Do **not** re-implement issue creation here. Registration in `active.md` is conflict-dependent (next step), so tell `/create_issue` to **skip its active.md registration** — start_dev owns that routing decision. @@ -146,7 +146,7 @@ classification. ### 7. Push Mind state -`/create_issue` already pushed the issue + `issued/` move; push the routing +`/create_issue` already pushed the issue + `active/` move; push the routing registration (active.md / planned.md) added in step 6: ```bash