10 phases, 29 tasks, all worker-ready (WHERE / WHAT / HOW / SAFETY / COMMIT / GIT NOTE per task): Phase 1: Data extraction audit + draft helper script (FR5; TDD) Phase 2: Generate conductor/chronology.md.draft Phase 3: Prune [x]/[shipped] entries from conductor/tracks.md (FR2) Phase 4: Add 3-step archiving convention to conductor/workflow.md (FR3) Phase 5: Write docs/reports/CHRONOLOGY_MIGRATION_20260619.md (FR4) Phase 6: User review of draft (GATE) Phase 7: Promote draft to canonical chronology.md Phase 8: Per-row cross-check (FR6 HARD GATE; 9 batches of ~20 rows) Phase 9: Completeness check (FR6 HARD GATE; folder set vs row set) Phase 10: User sign-off + end-of-track report (FR6 HARD GATE) The cross-check (Phase 8) is the dominant cost. Per the user directive 2026-06-19, EVERY SINGLE ENTRY must be cross-checked. The plan batches the work into 9 commits for review ergonomics; no batch is 'sample-based' or 'looks right' -- each row's 5 fields (date, ID, status, summary, range) are verified independently per FR6. All 12 VCs from the spec are addressed in the plan's 'Verification Criteria Recap' section.
28 KiB
Conductor Chronology Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Create conductor/chronology.md as the canonical manually-maintained index of all tracks (active + shipped + superseded + abandoned) plus notable non-track commits, prune the duplicated [x] entries from conductor/tracks.md, document the new 3-step archiving convention in conductor/workflow.md, and write a migration report. Every row is cross-checked per the user directive (2026-06-19): "EVERY SINGLE ENTRY MUST BE CROSS CHECKED TO MAKE SURE IT'S STILL CORRECT, AND NOTHING WAS MISSED."
Architecture: One-shot helper script (scripts/audit/generate_chronology.py, FR5) extracts per-track data from conductor/tracks/ and conductor/archive/ and produces a draft chronology.md.draft. Tier 1 (or the user) then cross-checks every row in the draft per FR6 (5 fields: date, ID, status, summary, range), and verifies completeness (every folder has a row). The user is the final quality gate (VC12). No CI integration; the file is hand-maintained like tracks.md.
Tech Stack: Python 3.11+ (helper script), tomllib, git log (for commit SHAs), pathlib. No new production code in src/. No new dependencies.
Spec reference: conductor/tracks/chronology_20260619/spec.md (250 lines; 6 FRs, 5 NFRs, 12 VCs, 9 Risks, 10 Phases).
Phase 1: Data extraction audit + draft helper script (FR5)
Focus: Build the extraction tool. The tool emits a DRAFT (per FR5); the cross-check (FR6, Phase 8) is the authority.
-
Task 1.1: Audit the source folders (estimate: 5 min)
- WHERE:
conductor/tracks/,conductor/archive/ - WHAT: Enumerate every subfolder. For each, capture: folder name, presence of
spec.md/plan.md/metadata.json, and the date string in the slug (if any). - HOW:
Get-ChildItem -Directory conductor/tracks,Get-ChildItem -Directory conductor/archive(PowerShell). Save counts totests/artifacts/chronology_audit_step1.json:{"tracks_count": N, "archive_count": M, "with_slug": X, "without_slug": Y}. - SAFETY: Read-only. Don't modify any folder.
- NO COMMIT (investigation only).
- WHERE:
-
Task 1.2: Write failing tests for the helper script (estimate: 5 min)
- WHERE: New file
tests/test_generate_chronology.py - WHAT: 5 unit tests covering the script's per-folder extraction logic:
test_slug_date_extraction— given folder namegencpp_python_bindings_20260308, returns2026-03-08test_slug_date_extraction_handles_missing_date— givenmy_folder(no date), returnsNonetest_summary_extraction_from_spec_md— given aspec.mdwith "## Overview\n\nFirst sentence here. Second sentence.", returns"First sentence here."test_summary_extraction_falls_back_to_metadata— given a folder withmetadata.json.descriptionand nospec.md, returns the descriptiontest_summary_extraction_truncates_to_25_words— given a 50-word sentence, returns first 25 words + "…"
- HOW: Use
pytest.tmp_pathto create fixture folders with syntheticspec.md/metadata.json. Pure unit tests; nolive_gui, notmp_path_factory.mktempoutside./tests/. - SAFETY: Tests must FAIL initially (the script doesn't exist yet). Use
pytest.raisesfor the failure case. - VERIFY:
uv run pytest tests/test_generate_chronology.py -vshould FAIL on each test withModuleNotFoundErrororNameError. - COMMIT:
test(chronology): failing tests for generate_chronology.py extraction logic - GIT NOTE: "Phase 1.2. TDD red. 5 tests cover slug date parsing, summary extraction, fallback chain, word truncation. Tests must fail before Task 1.3 writes the script."
- WHERE: New file
-
Task 1.3: Write the helper script (TDD green) (estimate: 10 min)
- WHERE: New file
scripts/audit/generate_chronology.py - WHAT: A Python 3.11+ script that:
- Accepts
--draftflag (output to stdout) and--root PATH(default:conductor/) - Walks
<root>/tracks/and<root>/archive/ - For each folder:
- Extracts date from slug (regex
\d{8}$); falls back to first-commit date if slug has no date - Extracts init SHA via
git log --reverse --format='%h' -- <folder>(first commit) - Extracts end SHA via
git log -1 --format='%h' -- <folder>(last commit) - Computes commit count via
git log --oneline <init>..<end> -- <folder> | wc -l(approximate; actual count is thegit log <init>..<end>line count) - Extracts status from folder location:
tracks/=Active;archive/=Shipped. Override via<folder>/metadata.json.statusif present. - Extracts summary: prefer
metadata.json.description(modern tracks); else first non-empty line ofspec.md(trimmed to 25 words, "…" if truncated); else first non-empty line ofplan.md; else"Imported from archive (no spec)".
- Extracts date from slug (regex
- Emits markdown to stdout: one row per folder, sorted by date descending. Format per FR1.
- Accepts
- HOW: Use
subprocess.run(["git", "log", ...], capture_output=True, text=True)for git queries. Usepathlib. Match the 1-space indentation convention. - SAFETY: The script is READ-ONLY on the source folders. It writes to stdout only.
- VERIFY:
uv run pytest tests/test_generate_chronology.py -vshould now PASS (all 5 tests green). - COMMIT:
feat(chronology): add draft-only helper script (FR5) - GIT NOTE: "Phase 1.3. TDD green. generate_chronology.py extracts date/SHA/status/summary per track folder. Draft-only: emits to stdout; the cross-check (Phase 8) is the authority."
- WHERE: New file
-
Task 1.4: Commit Phase 1 (estimate: 1 min)
- WHERE: Working tree
- WHAT: Confirm both files (
tests/test_generate_chronology.py+scripts/audit/generate_chronology.py) are staged from Tasks 1.2 + 1.3. Verifygit statusis clean except for pre-existing modifications. - HOW:
git log -1 --statto confirm the Phase 1 commit is in place. - SAFETY: Don't commit unrelated working-tree changes.
- NO COMMIT (Phase 1 already committed in Task 1.3).
- CHECKPOINT:
conductor(checkpoint): Phase 1 complete — script + tests green
Phase 2: Generate chronology.md.draft (FR5 + pre-Phase 8 prep)
Focus: Run the script, produce the draft. Do NOT commit chronology.md yet — it's still a draft.
-
Task 2.1: Run the script, capture the draft (estimate: 2 min)
- WHERE:
scripts/audit/generate_chronology.py - WHAT:
uv run python scripts/audit/generate_chronology.py --draft > conductor/chronology.md.draft. This produces one row per track (165+ rows), sorted newest first. - HOW: Run the command. Verify the output file exists and has > 100 rows.
- SAFETY: The draft file is git-ignored OR clearly marked as draft (e.g., filename
chronology.md.draft). - VERIFY:
Get-Content conductor/chronology.md.draft | Measure-Object -Line. Expect ≥ 200 lines (header + 165+ rows × ~4 lines each). - NO COMMIT (draft is not canonical yet).
- WHERE:
-
Task 2.2: Sanity-check 5-10 random rows (estimate: 5 min)
- WHERE:
conductor/chronology.md.draft - WHAT: Pick 5 random rows; for each, manually verify the 5 fields (date, ID, status, summary, range) against the source folder's
spec.mdandgit log <folder>. If any field is wrong, the script has a bug — fix the script in a follow-up commit BEFORE Phase 3. - HOW: For each picked row, run:
Get-Content "conductor/archive/<id>/spec.md" | Select-Object -First 1(verify summary source)git log --oneline --reverse -- "conductor/archive/<id>/"(verify init SHA)git log -1 --format='%h' -- "conductor/archive/<id>/"(verify end SHA)
- SAFETY: Don't proceed to Phase 3 if the script is buggy. Fix the script first.
- NO COMMIT (sanity check, not implementation).
- WHERE:
Phase 3: Prune conductor/tracks.md (FR2)
Focus: Remove the 3 categories of [x]/[shipped] entries. Preserve in-flight and backlog entries.
-
Task 3.1: Prune "Phase 9: Chore Tracks" section (estimate: 5 min)
- WHERE:
conductor/tracks.md(around the "Phase 9" heading, roughly lines 480-560 based on the file's current size) - WHAT: Either delete the entire "Phase 9: Chore Tracks" section OR replace it with a one-line stub:
### Phase 9: Chore Tracks *Completed chore tracks are in [`chronology.md`](./chronology.md).* - HOW: Use the
manual-slop_edit_fileMCP tool with the exact anchor for the section header + the first child line. Verify withgit diff conductor/tracks.md. - SAFETY: Don't touch the "Active Tracks" table at the top of the file, the "Backlog" section, the "Follow-up" section, or the "Notes" section.
- VERIFY:
grep -n "^- \[x\]" conductor/tracks.md | wc -lshould be reduced (this counts the remaining[x]markers; non-zero is fine if "Active Research" still has them, but should be smaller than before). - COMMIT:
conductor(track): prune Phase 9 Chore Tracks section from tracks.md (FR2) - GIT NOTE: "Phase 3.1. Phase 9 section either deleted or stubbed; canonical record now in chronology.md."
- WHERE:
-
Task 3.2: Prune
[x]entries from "Active Research Tracks" (estimate: 5 min)- WHERE:
conductor/tracks.md"Active Research Tracks" section - WHAT: Remove only the
[x]entries (e.g., the Fable review row that shipped 2026-06-18). Keep the[ ]in-flight entries. - HOW: For each
[x]line in the section, delete the entire bullet (including the linked line, if any). The section heading and the[ ]rows stay. - SAFETY: Don't remove the section heading. Don't remove the
[ ]rows. Don't touch other sections. - VERIFY:
grep -n "Active Research Tracks" -A 20 conductor/tracks.mdshows no[x]rows in that section. - COMMIT:
conductor(track): prune [x] entries from Active Research Tracks (FR2) - GIT NOTE: "Phase 3.2. [x] entries from Active Research Tracks moved to chronology.md. [ ] in-flight rows preserved."
- WHERE:
-
Task 3.3: Prune
[shipped: ...]entries from "Follow-up" (estimate: 5 min)- WHERE:
conductor/tracks.md"Follow-up (Planned, Not Yet Specced)" section - WHAT: Remove only the
[shipped: YYYY-MM-DD]entries. Keep the "planned" and "not yet specced" entries. - HOW: For each
[shipped: ...]bullet, delete the entire bullet. The section heading and the active followups stay. - SAFETY: Don't remove the section heading. Don't remove the "planned" entries. Don't touch other sections.
- VERIFY:
grep -n "shipped:" conductor/tracks.md | wc -lshould be 0. - COMMIT:
conductor(track): prune [shipped] entries from Follow-up section (FR2) - GIT NOTE: "Phase 3.3. [shipped] entries from Follow-up moved to chronology.md. 'planned' and 'not yet specced' rows preserved."
- WHERE:
-
Task 3.4: Verify no
[x]remains (estimate: 2 min)- WHERE:
conductor/tracks.md - WHAT: Final scan. Any
[x]in the file should be in a "Status legend" or in-context comment, not a track entry. - HOW:
grep -n "^- \[x\]" conductor/tracks.md. Expected: 0 matches. - SAFETY: If there are matches, identify which section and Task 3.1/3.2/3.3 missed them. Fix and re-commit.
- NO COMMIT (verification only).
- CHECKPOINT:
conductor(checkpoint): Phase 3 complete — tracks.md pruned
- WHERE:
Phase 4: Update conductor/workflow.md (FR3)
Focus: Document the 3-step archiving convention.
- Task 4.1: Append the 3-step convention (estimate: 3 min)
- WHERE:
conductor/workflow.md"Notes > Editing this file" section (the last subsection of the "Notes" section near the end of the file) - WHAT: Append the following 3-step block:
**Archiving a track (3 steps):** 1. Move the folder from `conductor/tracks/<id>/` to `conductor/archive/<id>/`. 2. Remove the `[x]` entry from `conductor/tracks.md` (and update status badges on related entries). 3. Add a row to `conductor/chronology.md` with the init SHA, the end SHA (the archive-move commit), and a one-sentence summary. - HOW: Find the "Editing this file" subheading; append after its last paragraph.
- SAFETY: Don't change the existing convention text; just add the new block at the end.
- VERIFY:
grep -n "Archiving a track" conductor/workflow.mdshould match. - COMMIT:
conductor(track): document 3-step archiving convention in workflow.md (FR3) - GIT NOTE: "Phase 4. Workflow.md gets the 3-step convention: move folder, remove from tracks.md, add to chronology.md."
- CHECKPOINT:
conductor(checkpoint): Phase 4 complete — workflow.md updated
- WHERE:
Phase 5: Write the migration report (FR4)
Focus: One-page report for the user to review. This is the user's first check-point to verify the migration is on track.
- Task 5.1: Write the report (estimate: 10 min)
- WHERE: New file
docs/reports/CHRONOLOGY_MIGRATION_20260619.md - WHAT: Markdown report with the following sections:
- Summary — total rows in
chronology.md(active + shipped + superseded + abandoned); total rows removed fromtracks.md; total notable non-track commits. - Counts by status — table: status, count.
- Counts by
tracks.mdsection removed — table: section, count. - Documented exceptions — list of folders that have no row in
chronology.md(per FR6 completeness check) with one-line reason each. - Notable non-track commits added — list of SHAs + dates + one-line descriptions.
- Diff preview (10-20 rows) — first 10 + last 10 rows of
chronology.mdfor the user to spot-check the format and content. - Per-row cross-check log — table of (row index, track ID, date verified, ID verified, status verified, summary verified, range verified, fixes if any). For Phase 5 (pre-cross-check), this is empty; it gets filled in during Phase 8.
- User sign-off — final section with a checklist for the user to fill in during Phase 10.
- Summary — total rows in
- HOW: Generate the counts by running the script with
--countsflag (add this flag in a script update, or compute manually fromchronology.md.draftfor now). Manually write the diff preview by copy-pasting 10 rows from the draft. - SAFETY: The report is the user's window into the migration. Make the tables readable; don't dump raw data.
- VERIFY: The file should be 100-200 lines, well-formatted markdown.
- COMMIT:
docs(chronology): write CHRONOLOGY_MIGRATION_20260619.md (FR4) - GIT NOTE: "Phase 5. Migration report written. Pre-cross-check; the per-row log is empty until Phase 8."
- CHECKPOINT:
conductor(checkpoint): Phase 5 complete — migration report drafted
- WHERE: New file
Phase 6: User review of the draft (gate)
Focus: The user reviews the draft + report. Approves, OR requests changes (loop back to Phase 2).
- Task 6.1: User reviews
conductor/chronology.md.draft+ the migration report (estimate: user-paced)- WHERE:
conductor/chronology.md.draft,docs/reports/CHRONOLOGY_MIGRATION_20260619.md - WHAT: User opens both files and confirms:
- (a) The format matches FR1.
- (b) The diff preview in the report is accurate.
- (c) The documented exceptions are acceptable.
- (d) The overall structure is correct.
- HOW: User posts "approve" or specific change requests.
- OUTCOMES:
- Approve → proceed to Phase 7.
- Request changes → loop back to Phase 2 (re-run script with fixed parameters, regenerate draft, update report).
- SAFETY: Don't proceed past Phase 6 without explicit user approval.
- NO COMMIT (gate).
- WHERE:
Phase 7: Promote draft to canonical + commit (FR1, FR2, FR3, FR4 finalized)
Focus: Rename chronology.md.draft to chronology.md; this is the first time chronology.md is committed.
- Task 7.1: Rename + commit (estimate: 2 min)
- WHERE:
conductor/chronology.md.draft→conductor/chronology.md - WHAT:
git mv conductor/chronology.md.draft conductor/chronology.md. Thengit commitwith the message below. - HOW:
git mvpreserves git history; the file appears as a rename in the diff. (Ifchronology.mdalready exists for some reason, thegit mvwill fail; in that case, delete the old file first, but this shouldn't happen since chronology.md didn't exist before.) - SAFETY: Verify the rename with
git statusbefore commit. Verify the file content is identical to the draft. - VERIFY:
git log -1 --statshows the rename. - COMMIT:
conductor(track): add conductor/chronology.md (FR1) - GIT NOTE: "Phase 7. chronology.md promoted from draft to canonical. Pre-cross-check; rows are verified in Phase 8."
- CHECKPOINT:
conductor(checkpoint): Phase 7 complete — chronology.md committed (pre-cross-check)
- WHERE:
Phase 8: Per-row cross-check (FR6, HARD GATE)
Focus: EVERY row is opened and verified per FR6's 5 fields. The migration report's per-row log is filled in. This is the hard gate per the user directive (2026-06-19). NO shortcut is acceptable.
The 5 fields per row (per FR6):
- Date — match the slug (
YYYYMMDD→YYYY-MM-DD)? Fix any disagreement. - Track ID — backticked slug matches the folder name?
- Status —
Active/In Progress/Shipped/Superseded/Abandoned? Per FR1's status mapping. - Summary — accurate, ≤ 25 words, describes the most important fact? Trim or rewrite if needed.
- Range — init SHA exists, end SHA exists, count is plausible? Run
git log --oneline <init>..<end> -- <folder>to spot-check.
The cross-check is done in batches of ~20 rows for commit granularity. Each batch is one commit. Per the user directive: "EVERY SINGLE ENTRY MUST BE CROSS CHECKED TO MAKE SURE IT'S STILL CORRECT, AND NOTHING WAS MISSED." Every row, no samples.
-
Task 8.1: Batch 1 — newest 20 rows (estimate: 30 min)
- WHERE: First 20 rows of
conductor/chronology.md - WHAT: For each row, verify the 5 fields. Fix any errors in
chronology.md. Log the result in the migration report's per-row table. - HOW: For each row, run:
Get-ChildItem -Directory conductor/tracks/<id>, conductor/archive/<id>(verify folder exists; pick the right location based on status)Get-Content "conductor/<tracks|archive>/<id>/spec.md" | Select-Object -First 1(verify summary source)git log --oneline --reverse -- "conductor/<tracks|archive>/<id>/"(verify init SHA)git log -1 --format='%h' -- "conductor/<tracks|archive>/<id>/"(verify end SHA)git log --oneline <init>..<end> -- "conductor/<tracks|archive>/<id>/" | Measure-Object -Line(verify count)
- SAFETY: Don't trust the script output. Verify each row independently. If a field is wrong, fix the row in
chronology.mdBEFORE moving to the next row. - VERIFY: After this batch, the first 20 rows are confirmed correct in the migration report.
- COMMIT:
conductor(chronology): cross-check batch 1 — 20 newest rows verified (FR6) - GIT NOTE: "Phase 8.1. Per-row cross-check batch 1. 20 rows verified; [N] fixes applied; per-row log updated in migration report."
- WHERE: First 20 rows of
-
Task 8.2: Batch 2 — rows 21-40 (estimate: 30 min)
- WHERE: Rows 21-40 of
conductor/chronology.md - WHAT: Same procedure as 8.1.
- HOW: Same as 8.1.
- SAFETY: Same as 8.1.
- VERIFY: Rows 21-40 are correct.
- COMMIT:
conductor(chronology): cross-check batch 2 — rows 21-40 verified (FR6) - GIT NOTE: "Phase 8.2. Per-row cross-check batch 2."
- WHERE: Rows 21-40 of
-
Task 8.3: Batch 3 — rows 41-60 (estimate: 30 min)
- WHERE / WHAT / HOW / SAFETY / VERIFY / COMMIT / GIT NOTE: Same pattern as 8.1.
-
Task 8.4: Batch 4 — rows 61-80 (estimate: 30 min)
- Same pattern.
-
Task 8.5: Batch 5 — rows 81-100 (estimate: 30 min)
- Same pattern.
-
Task 8.6: Batch 6 — rows 101-120 (estimate: 30 min)
- Same pattern.
-
Task 8.7: Batch 7 — rows 121-140 (estimate: 30 min)
- Same pattern.
-
Task 8.8: Batch 8 — rows 141-160 (estimate: 30 min)
- Same pattern.
-
Task 8.9: Batch 9 — rows 161+ (final batch) (estimate: 30 min)
- WHERE: Remaining rows (whatever the count is after batch 8).
- WHAT: Final batch. After this, every row in
chronology.mdhas been verified. - SAFETY: If the count is > 160 + 20, split into another batch. Don't exceed 30 rows per batch for review ergonomics.
- VERIFY: Every row in
chronology.mdis now in the per-row log as "verified". - COMMIT:
conductor(chronology): cross-check batch 9 (final) — all rows verified (FR6) - GIT NOTE: "Phase 8.9. FINAL cross-check batch. All 165+ rows verified; FR6 per-row gate satisfied."
- CHECKPOINT:
conductor(checkpoint): Phase 8 complete — all rows cross-checked
Phase 9: Completeness check (FR6, HARD GATE)
Focus: Every folder in conductor/tracks/ and conductor/archive/ has a row in chronology.md. No exceptions except documented ones.
-
Task 9.1: Enumerate folders, compare to rows (estimate: 10 min)
- WHERE:
conductor/tracks/,conductor/archive/,conductor/chronology.md - WHAT: Get the list of folder names from both directories. Get the list of track IDs from
chronology.md. Compute the set difference: folders without rows, rows without folders. - HOW:
- Folders:
Get-ChildItem -Directory conductor/tracks | Select-Object -ExpandProperty Name+Get-ChildItem -Directory conductor/archive | Select-Object -ExpandProperty Name - Rows: extract backticked track IDs from
chronology.mdviaSelect-String -Pattern '([a-z_0-9]+_\d{8})' -AllMatches - Diff:
Compare-Object -ReferenceObject $folders -DifferenceObject $rows
- Folders:
- SAFETY: An empty diff is the goal. If non-empty, every diff item needs disposition (added or exception).
- VERIFY:
$diffis empty OR only contains documented exceptions. - NO COMMIT (verification only).
- WHERE:
-
Task 9.2: Resolve diff (estimate: 10 min)
- WHERE:
conductor/chronology.md+docs/reports/CHRONOLOGY_MIGRATION_20260619.md - WHAT: For each item in the diff from 9.1:
- If it's a folder without a row: add the row (using the same FR1 format; extract data per the script; verify per FR6's 5 fields).
- If it's a row without a folder: investigate. Either the folder was renamed/removed (update the row's folder link) or the row is stale (remove it). Document the resolution in the migration report.
- HOW: Add rows using the same procedure as Phase 8 (verify 5 fields, log in the per-row table). Update the migration report's "Documented exceptions" section if any folders are intentional non-tracks.
- VERIFY: Re-run the diff from 9.1; the result is now empty (or only contains documented exceptions).
- COMMIT:
conductor(chronology): completeness check passed — folder set matches row set (FR6) - GIT NOTE: "Phase 9. FR6 completeness check. [N] missing rows added; [M] exceptions documented. Diff is now empty."
- CHECKPOINT:
conductor(checkpoint): Phase 9 complete — completeness check passed
- WHERE:
Phase 10: User sign-off (FR6, HARD GATE)
Focus: The user is the quality gate. The track is not "done" until the user signs off.
-
Task 10.1: User reviews final state (estimate: user-paced)
- WHERE:
conductor/chronology.md,conductor/tracks.md,conductor/workflow.md,docs/reports/CHRONOLOGY_MIGRATION_20260619.md - WHAT: User confirms:
- (a) The format is correct.
- (b) The summaries are accurate.
- (c) The commit ranges are right.
- (d) Nothing was missed.
- HOW: User fills in the "User sign-off" section in the migration report with a confirmation + date.
- OUTCOMES:
- Sign-off → track is complete. Proceed to end-of-track wrap-up.
- More changes → loop back to the relevant phase (Phase 8 for per-row fixes, Phase 9 for completeness, etc.).
- SAFETY: No commit after Phase 10 without user sign-off.
- NO COMMIT (gate).
- WHERE:
-
Task 10.2: End-of-track report (estimate: 15 min)
- WHERE: New file
docs/reports/TRACK_COMPLETION_chronology_20260619.md - WHAT: Per Tier 2 conventions (precedent:
TRACK_COMPLETION_tier2_autonomous_sandbox_20260616.md), write a one-page end-of-track report with:- Summary (1-2 sentences)
- Final state (5 fields: chronology.md, tracks.md, workflow.md, migration report, end-of-track report)
- Statistics (rows in chronology, batches in Phase 8, fixes applied, exceptions documented)
- Cross-check summary (per VC10/11/12 confirmation)
- User sign-off (reference to the migration report)
- Lessons learned (optional; "what would I do differently next time")
- HOW: Write the file. Commit.
- SAFETY: No new content beyond the summary; link to existing files.
- COMMIT:
docs(chronology): add end-of-track report - GIT NOTE: "Phase 10.2. Track complete. User sign-off recorded. All VCs satisfied."
- WHERE: New file
-
Task 10.3: Update
conductor/tracks.md(estimate: 2 min)- WHERE:
conductor/tracks.mdtop-level entry forchronology_20260619 - WHAT: Add a line at the top of the file (or in the active section) noting the new track's completion. Mark it
[x]completed. - HOW: Edit the file; flip the status marker.
- SAFETY: Don't touch other entries.
- VERIFY:
grep -n "chronology_20260619" conductor/tracks.mdshows the entry with[x]. - COMMIT:
conductor(track): mark chronology_20260619 as complete in tracks.md - GIT NOTE: "Phase 10.3. Track marked complete in tracks.md."
- WHERE:
-
Task 10.4: Update
state.tomlto completed (estimate: 1 min)- WHERE:
conductor/tracks/chronology_20260619/state.toml - WHAT: Set
[meta].status = "completed",[meta].current_phase = "complete", all phase statuses to"completed", all task statuses to"completed", all[verification]flags totrue. - HOW: Edit the file.
- SAFETY: Don't change the task descriptions; just flip the status fields.
- VERIFY:
uv run python -c "import tomllib; tomllib.load(open('conductor/tracks/chronology_20260619/state.toml','rb'))"parses cleanly. - COMMIT:
conductor(track): mark chronology_20260619 as completed - GIT NOTE: "Phase 10.4. Track complete. All VCs satisfied; user sign-off recorded."
- WHERE:
Summary
| Phase | Scope | Time estimate | Gate? |
|---|---|---|---|
| 1 | Data extraction + script + tests | ~25 min | No |
| 2 | Generate draft | ~7 min | No |
| 3 | Prune tracks.md (3 sections) | ~17 min | No |
| 4 | Update workflow.md | ~3 min | No |
| 5 | Write migration report | ~10 min | No |
| 6 | User review of draft | user-paced | Yes |
| 7 | Promote draft to canonical | ~2 min | No |
| 8 | Per-row cross-check (165+ rows, 9 batches) | ~4.5 hours | Yes (HARD per user directive) |
| 9 | Completeness check | ~20 min | Yes (HARD) |
| 10 | User sign-off + end-of-track | ~20 min | Yes (HARD) |
Total: ~5.5 hours of focused work (estimated scope, not time-bound; per the no-day-estimates rule). The cross-check (Phase 8) is the dominant cost; the user's "EVERY SINGLE ENTRY" mandate makes this non-negotiable.
Verification Criteria Recap
All 12 VCs from the spec must be satisfied for the track to be marked complete:
- VC1-VC5: File contents (FR1, FR2, FR3, FR4) — verified in Phases 3, 4, 5, 7.
- VC6: Sort order (FR1) — verified in Phase 7.
- VC7: Folder coverage (FR6 completeness) — verified in Phase 9.
- VC8: No
src/*.pyfiles created — verified bygit diff --statagainst the spec'd scope. - VC9: End-of-track report — written in Phase 10.2.
- VC10: Per-row cross-check completed (FR6) — verified at end of Phase 8.
- VC11: Completeness check (FR6) — verified at end of Phase 9.
- VC12: User sign-off (FR6) — recorded in Phase 10.1.
Cross-cutting safety
- No day estimates in the report. Per the project rule added 2026-06-16.
- Per-task atomic commits. Per
conductor/workflow.md"Commit Guidelines" — one commit per task, no batching. - Git notes on every commit. Per the project convention.
- No
git restore/git checkout -- <file>/git reset. Per the HARD BAN inAGENTS.md. - No new
src/*.pyfiles. PerAGENTS.mdFile Size and Naming Convention. The helper script lives inscripts/audit/; nosrc/changes. - No new
conductor/code_styleguides/*files. The 3-step convention is added to existingworkflow.md, not a new styleguide.