MMDEP sprint 1 design¶
Story A — Harness hardening and shared components (also the harness's first real workload)¶
Goal: prove the Code + Test harness on real MMDEP items while moving duplicated helpers into shared components (rules §15). Each item is small, new-file-first, and has its own tests.
| Item | Approach | Files | Reuse | Acceptance | cx / mode |
|---|---|---|---|---|---|
| A1 Shared shell runner | New mmdep/shell.py: NO_WINDOW, run(), git() (stdin closed, UTF-8, timeout). Migration of callers is a later attended item (A6) |
mmdep/shell.py, tests/test_shell.py |
Same behaviour as harness.run/git |
Tests for output, closed stdin, timeout, git | 1 / scheduled |
| A2 Duplicate finder options | --json output and --fail exit code for CI use |
tools/quality/dupes.py, tests/test_dupes.py |
— | Tests with synthetic duplicate files | 1 / scheduled |
| A3 Chat archive default from environment | MMDEP_CHAT_ARCHIVE overrides the default archive path |
tools/chat_backup/chat_backup.py, tests/test_chat_backup.py |
— | New test with monkeypatched env; old tests pass | 1 / scheduled |
| A4 Harness ledger summary | mmdep/ledger_summary.py: per-month runs, pass rate, cost, by model |
mmdep/ledger_summary.py, tests/test_ledger_summary.py |
CSV columns from harness.LEDGER_FIELDS |
Tests with a temporary ledger | 1 / scheduled |
| A5 Routing-block linter | tools/quality/route_lint.py checks an issue body file using mmdep.harness.parse_routing/check_route (must reuse, not re-implement) |
tools/quality/route_lint.py, tests/test_route_lint.py |
mmdep.harness |
Tests for ok, missing block, rejected route | 1 / scheduled |
A6 Migrate callers to mmdep/shell.py |
Replace local run/git/NO_WINDOW in harness, collect, setup scripts |
several | A1 | Full suite; dupes report shrinks | 2 / attended (after A1) |
Story B — MMDEP phase 2: queued jobs run without Claude (mmdep jobs)¶
Goal: registered run-jobs (PE, MCRM, MMDEP) run on the laptop when gate-green, results returned automatically; removes Claude from the run-job loop.
- B1 Job register:
docs/registers/jobs.yaml(job id, repo, command template, inputs, timeout, outputs, allowed network). Attended, cx 2. - B2 Runner:
mmdep jobs runreadsrun-jobissues, matches a registered job, checks the exact head and CI status through the GitHub API, runs in a worktree with timeouts and closed stdin, commits outputs to the MMDEP relay, adds the answers row. Attended, cx 3 (contract with PE's issue format). - B3 Scheduled task wiring (reuse
task_xml). Attended, cx 1. Dependencies: PE's run-job issue format (stable since #324).
Story C — Gemini first real use: failure triage (pending GEM-1)¶
Goal: read-only Flash-Lite drafts one triage line per failed pipeline in the collector snapshot. Measure accuracy and tokens.
- C1 mmdep/triage.py + tests with recorded snapshots; reuses harness.call_model. cx 2, scheduled once GEM-1 is approved.
Story D — Spec 0.12 HLD and documentation standard¶
Goal: consolidate spec 0.11 and the ex-PM specs into an HLD with one LLD per item; documentation standard (VISION/CURRENT/MILESTONES, index per folder). for:design, attended (Claude super-designer), needs Atul's review time, so scheduled for week 2.
Dependencies and capacity¶
- Harness capacity: 2 items per hourly run on the free Gemini tier; A1–A5 fit within a day.
- Atul: merge approvals for harness PRs (batchable), GEM-1 decision, D review.