Overview
complete.md has grown to 590 entries / 6,274 lines and is read by the memory faculty, intake reconcile, and any agent checking past work — a growing token burn on every lookup. The dated complete/<YYYY>/<MM>/ archive (585 records + generated token-light index.md) was built by lifecycle.py split-complete precisely so the ledger could be retired; lifecycle.py check's pairing invariant is annotated "(pre-retirement)". This task executes the retirement: dated records become the sole completion ledger.
The pairing has already drifted both ways (8 ledger entries with no record; 3 records with no ledger entry) — the unguarded direction drifts within days, which is the strongest argument for a single source of truth.
Plan
- Backfill the 8 missing dated records from their
complete.md entries (one-off extraction; do not rerun split-complete wholesale — it would clobber folded ## Original prompt sections in existing records).
- Rework
lifecycle.py: record --from-file (ship skills supply the rich entry directly), move takes --date/derives from the record, check gets post-retirement invariants, delete spent one-time subcommands (split-complete, migrate).
git rm complete.md; regenerate complete/index.md.
- Repoint PyAutoBrain: ship skills write the dated record directly (no ledger append); memory faculty digests
complete/** records; intake reconcile cross-refs complete/; docs/WORKFLOW.md wording.
- Repoint PyAutoHeart
pyauto-status ("last 5 completed" → top of complete/index.md).
- Update Mind docs,
status.sh (count records from complete/), spawn.py (drop complete.md from template stamp).
Detailed implementation plan
Affected Repositories
- PyAutoMind (primary)
- PyAutoBrain
- PyAutoHeart
Branch Survey (2026-07-16)
| Repository |
Current Branch |
Dirty? |
Claimed by |
| ./PyAutoMind |
main |
other-session prompt |
memory-structure-cleanup |
| ./PyAutoBrain |
main |
clean |
community-voice-agent, ic50-assistant-seed (+PR#118 awaiting merge) |
| ./PyAutoHeart |
main |
clean |
heart-state-clobber |
All three repos claimed → task parked in planned.md until claims clear.
Suggested branch: feature/retire-complete-ledger
Worktree root: ~/Code/PyAutoLabs-wt/retire-complete-ledger/
Implementation Steps
- Parity backfill (PyAutoMind). Verify with a scratch script that every
complete.md slug has a complete/ record. Backfill the 8 missing (eceb-editorial-revision, ep-analytic-updates-scope, ep-deterministic-reconcile, ep-priors-fable-reassess, keck-ao-acceptance-checks, morning-status-release-rehearsal, release-profile-jax-default, slacs1430-acs-parity) by extracting only those ## <slug> sections via parse_complete_md() → complete_bucket(date)/safe_name(slug).md. Reconcile the 3 unpaired records (slug-normalization variants; verify no true orphans).
scripts/lifecycle.py rework.
record: add --from-file <path> (rich entry body supplied by the ship skill); keep --date, --prompt folding, git add. Drop the parse_complete_md() dependency.
move: derive date from --date or the existing dated record; drop complete.md lookup.
check: drop "record ↔ ledger pairing" + "slug in both ledgers"; add: no active.md slug has a complete/ record; no file in both active/ and complete/; keep archive/ skips.
- Delete
split-complete and migrate subcommands (one-time, spent). Update the module docstring lifecycle diagram.
- Retire the file (PyAutoMind).
git rm complete.md; lifecycle.py index --apply; lifecycle.py check green.
- Mind surface updates.
scripts/status.sh (count + recent from complete/ records, drop lines 75–115 ledger parsing); scripts/spawn.py:50 (drop ("complete.md", "EMPTY")); README.md ledger table + schema pointers; AGENTS.md registry section; REFERENCE.md; skills/OWNERSHIP.md:80; complete/AGENTS.md provenance ("complete.md retired , history in git").
- PyAutoBrain repointing.
skills/ship_library/ship_library.md:99 + reference.md:130-150: completion = write rich record via lifecycle.py record <slug> --date <d> --from-file <tmp> --prompt <name> --apply + lifecycle.py index --apply; drop the complete.md append. Same for skills/ship_workspace/ship_workspace.md:95 + reference.md:103-114.
agents/faculties/memory/_memory.py:44-45 + memory.sh:6: digest PyAutoMind/complete/**/*.md (excluding archive/, index.md, AGENTS.md) instead of complete.md. NOTE: coordinate with memory-structure-cleanup's parallel memory-faculty glob PR (same file).
agents/conductors/intake/_intake.py:595-710 (reconcile): cross-ref complete/ record slugs + content instead of complete.md; update intake.sh:28, intake/AGENTS.md:88,104, INTAKE_TAXONOMY.md:128, skills/intake/intake.md:43 ("until retired" → retired).
skills/WORKFLOW.md:14,100,205,211; skills/register_and_iterate/register_and_iterate.md:62; skills/health/health.md:14; docs/example.md:41, docs/organs/memory.md:16, docs/organs/mind.md, docs/concepts/workflow.md, AGENTS.md:185, ORGANISM.md.
- PyAutoHeart.
skills/pyauto-status/reference.md:14,26: read recent completions from the top reverse-chronological bucket of complete/index.md.
- Verify.
lifecycle.py check + index --check green; parity script shows 0 ledger-only entries before deletion; dry-run the new record --from-file path end-to-end on a scratch slug; grep the workspace for surviving complete.md references (expect only historical mentions in complete/ records themselves).
Key Files
PyAutoMind/scripts/lifecycle.py — lifecycle engine; record/move/check rework, delete spent subcommands
PyAutoMind/complete.md — the file being retired (git rm; history preserved)
PyAutoMind/scripts/status.sh, PyAutoMind/scripts/spawn.py — Mind status + template stamp
PyAutoBrain/skills/ship_library/reference.md, PyAutoBrain/skills/ship_workspace/reference.md — the completion-write contract (producers)
PyAutoBrain/agents/faculties/memory/_memory.py, PyAutoBrain/agents/conductors/intake/_intake.py — the two programmatic readers
PyAutoHeart/skills/pyauto-status/reference.md — Heart's read of recent completions
Original Prompt
Click to expand starting prompt
Retire the legacy PyAutoMind complete.md ledger in favour of the dated complete/ archive. User report (verbatim): 'The design of this seems to work very well, including the balance of tracking open issues, completed, etc. The only thing I am wary of when I look through it is that complete.md is getting huge, currently 4000 lines and counting. Is this something that will token burn or hurt context of an AI going forward? Should it link more concisely to the complete folder which now has date tracking?' Verified: complete.md is now 6,274 lines; the complete/ archive already exists (579 records, dated buckets, generated token-light index.md via lifecycle.py) and intake.md already calls complete.md 'legacy ... until retired'. Remaining work: repoint ship_library and ship_workspace in PyAutoBrain to write dated records into complete/ instead of appending to complete.md, repoint the memory faculty and intake reconcile to the archive, then migrate or freeze the legacy file so nothing grows it further.
Overview
complete.mdhas grown to 590 entries / 6,274 lines and is read by the memory faculty, intake reconcile, and any agent checking past work — a growing token burn on every lookup. The datedcomplete/<YYYY>/<MM>/archive (585 records + generated token-lightindex.md) was built bylifecycle.py split-completeprecisely so the ledger could be retired;lifecycle.py check's pairing invariant is annotated "(pre-retirement)". This task executes the retirement: dated records become the sole completion ledger.The pairing has already drifted both ways (8 ledger entries with no record; 3 records with no ledger entry) — the unguarded direction drifts within days, which is the strongest argument for a single source of truth.
Plan
complete.mdentries (one-off extraction; do not rerunsplit-completewholesale — it would clobber folded## Original promptsections in existing records).lifecycle.py:record --from-file(ship skills supply the rich entry directly),movetakes--date/derives from the record,checkgets post-retirement invariants, delete spent one-time subcommands (split-complete,migrate).git rm complete.md; regeneratecomplete/index.md.complete/**records; intake reconcile cross-refscomplete/; docs/WORKFLOW.md wording.pyauto-status("last 5 completed" → top ofcomplete/index.md).status.sh(count records fromcomplete/),spawn.py(dropcomplete.mdfrom template stamp).Detailed implementation plan
Affected Repositories
Branch Survey (2026-07-16)
All three repos claimed → task parked in
planned.mduntil claims clear.Suggested branch:
feature/retire-complete-ledgerWorktree root:
~/Code/PyAutoLabs-wt/retire-complete-ledger/Implementation Steps
complete.mdslug has acomplete/record. Backfill the 8 missing (eceb-editorial-revision,ep-analytic-updates-scope,ep-deterministic-reconcile,ep-priors-fable-reassess,keck-ao-acceptance-checks,morning-status-release-rehearsal,release-profile-jax-default,slacs1430-acs-parity) by extracting only those## <slug>sections viaparse_complete_md()→complete_bucket(date)/safe_name(slug).md. Reconcile the 3 unpaired records (slug-normalization variants; verify no true orphans).scripts/lifecycle.pyrework.record: add--from-file <path>(rich entry body supplied by the ship skill); keep--date,--promptfolding, git add. Drop theparse_complete_md()dependency.move: derive date from--dateor the existing dated record; dropcomplete.mdlookup.check: drop "record ↔ ledger pairing" + "slug in both ledgers"; add: noactive.mdslug has acomplete/record; no file in bothactive/andcomplete/; keep archive/ skips.split-completeandmigratesubcommands (one-time, spent). Update the module docstring lifecycle diagram.git rm complete.md;lifecycle.py index --apply;lifecycle.py checkgreen.scripts/status.sh(count + recent fromcomplete/records, drop lines 75–115 ledger parsing);scripts/spawn.py:50(drop("complete.md", "EMPTY"));README.mdledger table + schema pointers;AGENTS.mdregistry section;REFERENCE.md;skills/OWNERSHIP.md:80;complete/AGENTS.mdprovenance ("complete.md retired , history in git").skills/ship_library/ship_library.md:99+reference.md:130-150: completion = write rich record vialifecycle.py record <slug> --date <d> --from-file <tmp> --prompt <name> --apply+lifecycle.py index --apply; drop the complete.md append. Same forskills/ship_workspace/ship_workspace.md:95+reference.md:103-114.agents/faculties/memory/_memory.py:44-45+memory.sh:6: digestPyAutoMind/complete/**/*.md(excludingarchive/,index.md,AGENTS.md) instead ofcomplete.md. NOTE: coordinate with memory-structure-cleanup's parallel memory-faculty glob PR (same file).agents/conductors/intake/_intake.py:595-710(reconcile): cross-refcomplete/record slugs + content instead ofcomplete.md; updateintake.sh:28,intake/AGENTS.md:88,104,INTAKE_TAXONOMY.md:128,skills/intake/intake.md:43("until retired" → retired).skills/WORKFLOW.md:14,100,205,211;skills/register_and_iterate/register_and_iterate.md:62;skills/health/health.md:14;docs/example.md:41,docs/organs/memory.md:16,docs/organs/mind.md,docs/concepts/workflow.md,AGENTS.md:185,ORGANISM.md.skills/pyauto-status/reference.md:14,26: read recent completions from the top reverse-chronological bucket ofcomplete/index.md.lifecycle.py check+index --checkgreen; parity script shows 0 ledger-only entries before deletion; dry-run the newrecord --from-filepath end-to-end on a scratch slug; grep the workspace for survivingcomplete.mdreferences (expect only historical mentions in complete/ records themselves).Key Files
PyAutoMind/scripts/lifecycle.py— lifecycle engine;record/move/checkrework, delete spent subcommandsPyAutoMind/complete.md— the file being retired (git rm; history preserved)PyAutoMind/scripts/status.sh,PyAutoMind/scripts/spawn.py— Mind status + template stampPyAutoBrain/skills/ship_library/reference.md,PyAutoBrain/skills/ship_workspace/reference.md— the completion-write contract (producers)PyAutoBrain/agents/faculties/memory/_memory.py,PyAutoBrain/agents/conductors/intake/_intake.py— the two programmatic readersPyAutoHeart/skills/pyauto-status/reference.md— Heart's read of recent completionsOriginal Prompt
Click to expand starting prompt
Retire the legacy PyAutoMind complete.md ledger in favour of the dated complete/ archive. User report (verbatim): 'The design of this seems to work very well, including the balance of tracking open issues, completed, etc. The only thing I am wary of when I look through it is that complete.md is getting huge, currently 4000 lines and counting. Is this something that will token burn or hurt context of an AI going forward? Should it link more concisely to the complete folder which now has date tracking?' Verified: complete.md is now 6,274 lines; the complete/ archive already exists (579 records, dated buckets, generated token-light index.md via lifecycle.py) and intake.md already calls complete.md 'legacy ... until retired'. Remaining work: repoint ship_library and ship_workspace in PyAutoBrain to write dated records into complete/ instead of appending to complete.md, repoint the memory faculty and intake reconcile to the archive, then migrate or freeze the legacy file so nothing grows it further.