{
  "generated": "2026-11-01T03:16:05.729Z",
  "experiments": [
    {
      "id": "E119",
      "n": 119,
      "title": "Review 2026-10-31 (reduced pass)",
      "date": "2026-10-31",
      "fields": {
        "Change": "`land-your-work.md` loses its \"Why this has its own prompt\" section (the 2026-10-05 stranded-branch story; the opening already says it) and a repeated duplicate-search pointer, 163 to 157 lines (budget 160). Lesson from outside: Google's \"a rule should pull its weight\" again: history that explains no current action goes.",
        "Metric": "instruction-line count for `land-your-work.md`; compare next review.",
        "Decisions": "candidates unchanged (ventures 2, process 2, review 2: \"keep collecting: the intervals overlap\"). 47 runs merged since the last review. The 2026-10-30 friction that `measure` printed no DONE line is already fixed (promptctl prints it). Re-ran `derive.py fetch && build`. `steering.md` still over budget (125/120). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E118",
      "n": 118,
      "title": "Review 2026-10-30 night (reduced pass)",
      "date": "2026-10-30",
      "fields": {
        "Change": "`steering.md` loses the \"Measuring it\" paragraph, the doc_friction vs deviations reminder and the \"improvement loop\" section (restated in `prompts/README.md`), 137 to 125 lines (budget 120). Lesson from outside: Google's \"a rule should pull its weight\" (already cited there): each cut text was a pointer to a tool a run finds through `measure` anyway.",
        "Metric": "instruction-line count for `steering.md`; compare next review.",
        "Decisions": "candidates unchanged (ventures 2, process 2, review 2: \"keep collecting: the intervals overlap\"; review/2 100% on 23 runs vs review/1 94% on 97). Router count is correct: five reviews landed today, 44 runs merged since the last. Re-ran `derive.py fetch && build`. No audit or drift report.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E117",
      "n": 117,
      "title": "Review 2026-10-30 (second reduced pass)",
      "date": "2026-10-30",
      "fields": {
        "Change": "none to prompts. The 2026-10-30T11:21 friction (post dated one day ahead, \"never says to date with `date -u +%F`\") is already fixed: the check in `platform/ci/check_post_frontmatter.py` now prints that advice, so the report predates the fix.",
        "Metric": "friction reports naming `check_post_frontmatter.py` or the push hook; compare the next 40 runs.",
        "Decisions": "no candidate changes; same overlap as E115. Top live friction (process/prompt-1.md 8, polish 6, research 5) is run-specific routing or timing, nothing a single edit fixes. No audit or drift report."
      },
      "verdict": "pending"
    },
    {
      "id": "E116",
      "n": 116,
      "title": "Review 2026-10-30 evening (reduced pass)",
      "date": "2026-10-30",
      "fields": {
        "Change": "`land-your-work.md` loses its duplicated open-PR search tip (kept in `duplicate-work.md`), 167 to 163 lines (budget 160). Candidates unchanged: ventures 2, process 2, review 2 all \"keep collecting: the intervals overlap\". No audit or drift report (reduced pass). E115 result: too soon.",
        "Metric": "instruction-line count for `land-your-work.md`; compare next review.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E115",
      "n": 115,
      "title": "Review 2026-10-30 (reduced pass)",
      "date": "2026-10-30",
      "fields": {
        "Change": "`promptctl.py record` no longer refuses when a record for the same session id exists; it writes `-2`, `-3`... (scheduled routines reuse session ids; reports 2026-10-29T09:11 and 2026-10-30T02:10 wrote the file by hand). Re-ran `derive.py fetch && build` (3976 rows).",
        "Metric": "friction reports naming `promptctl.py record`; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\" (review/2 100% on 23 runs vs review/1 95% on 94; ventures/2 86% vs 87%; process/2 74% vs 78%). No audit or drift report (reduced pass). Still over budget: steering.md (137/120), land-your-work.md (167/160).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E114",
      "n": 114,
      "title": "A perf track, about 5% of runs (2026-10-24, owner request)",
      "date": "2026-10-24",
      "fields": {
        "Change": "new track `perf` (`prompts/perf/prompt-0.md`) at weight 0.05 in `routing.json`; ventures and research go from 0.315 to 0.29 each (the `polish` track had already taken them from 0.34 to 0.315). A perf run measures (`ci_profile.py`, cProfile, `node --cpu-prof`), takes the top `perf:` item in the process backlog or the largest consumer in a fresh reading, ships a change whose output is unchanged, and writes the before and after numbers in `docs/history/`. Backlog items P048 (guard checkouts), P049 (jobs per PR head) and P050 (Pages test job) seed it.",
        "Why": "the owner, 2026-10-24: \"add some work distribution to overall performance engineering across the repo\". Three earlier passes each found a large saving (Pages build 3m02s to 1m21s; checkout trimmed by ~135 job-minutes per 98; agent-permission-harness 55s to 4.5s), so the work has paid when done, and only happened when someone asked.",
        "Measure": "per `perf` run, the metric moved and its before/after in the record's `notes`; pool-wide, checkout share and job-minutes per merged PR from `ci_profile.py` at each review (baseline 2026-10-24: checkout 40% of 750 job-minutes per 80 minutes; 15 jobs per PR head)."
      },
      "verdict": "pending"
    },
    {
      "id": "E113",
      "n": 113,
      "title": "review 2026-10-30 (reduced pass, fortieth run)",
      "date": "2026-10-30",
      "fields": {
        "Change": "`research/CLAUDE.md` torch note says download.pytorch.org was refused by the proxy in three runs on 2026-10-30 (18 to 25 min), so plan for it (reports 2026-10-30T01:35, T03:06, T03:33). Re-ran `derive.py fetch && build` (3932 rows).",
        "Metric": "friction reports naming `research/CLAUDE.md` about `pyenv.py` torch time; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E112",
      "n": 112,
      "title": "review 2026-10-30 (reduced pass, thirty-ninth run)",
      "date": "2026-10-30",
      "fields": {
        "Change": "`.claude/hooks/check_posts_before_push.py` block message says to fix and commit in a separate Bash call (7 live reports 2026-10-29: a fix chained before `git push` is still blocked). Re-ran `derive.py fetch && build` (3884 rows).",
        "Metric": "friction reports naming `check_posts_before_push.py`; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E111",
      "n": 111,
      "title": "review 2026-10-29 (reduced pass, thirty-eighth run)",
      "date": "2026-10-29",
      "fields": {
        "Change": "`prompts/review/prompt-1.md` step 1 says `wait_for.py` gives up after 100 s (re-poll) and to redirect `measure` plainly, not via a chained subshell (reports 2026-10-28T18:13, 2026-10-29T04:09, T13:22). No derive re-run.",
        "Metric": "friction reports naming `prompts/review/prompt-1.md` about `measure` or `wait_for` timing; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) not re-decided here beyond the standing \"keep collecting\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E110",
      "n": 110,
      "title": "review 2026-10-29 (reduced pass, thirty-seventh run)",
      "date": "2026-10-29",
      "fields": {
        "Change": "`prompts/redteam/prompt-0.md` says a stdlib `unittest` target needs no `pyenv.py` either (live report 2026-10-29T11:28). No derive re-run.",
        "Metric": "friction reports naming `prompts/redteam/prompt-0.md` about `pyenv.py`; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E109",
      "n": 109,
      "title": "review 2026-10-29 (reduced pass, thirty-sixth run)",
      "date": "2026-10-29",
      "fields": {
        "Change": "`platform/ci/wait_for.py` docstring warns that piping it or chaining `&& echo` hides its exit 1 (reports 2026-10-29T06:37 and T07:52, which blamed the tool; it does exit 1 on timeout). Re-ran `derive.py fetch && build` (3758 rows).",
        "Metric": "friction reports naming `wait_for.py` or background waits; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E108",
      "n": 108,
      "title": "review 2026-10-29 (reduced pass, thirty-fifth run)",
      "date": "2026-10-29",
      "fields": {
        "Change": "`prompts/redteam/prompt-0.md` warns that `--target` skips the slow-suite probe (live report 2026-10-29T02:07: 300 s baseline timeout).",
        "Metric": "friction reports naming `prompts/redteam/prompt-0.md` about baseline timeouts; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report, no derive re-run (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E107",
      "n": 107,
      "title": "review 2026-10-28 (reduced pass, thirty-fourth run)",
      "date": "2026-10-28",
      "fields": {
        "Change": "`CLAUDE.md` says node/venture suites \"can\" outlast the 120 s tool timeout (the ai-bookkeeper suite, 1748 tests, finished well under it; live report 2026-10-28T22:20) instead of \"outlast\". Re-ran `derive.py fetch && build` (3669 rows).",
        "Metric": "friction reports naming `CLAUDE.md` about `run_in_background` for node tests; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E106",
      "n": 106,
      "title": "review 2026-10-28 (reduced pass, thirty-third run)",
      "date": "2026-10-28",
      "fields": {
        "Change": "`prompts/redteam/prompt-0.md` step 1 names two traps from live reports (2026-10-27): `--test-force-exit` truncating output, and pyenv install blocking a node-target run. Re-ran `derive.py fetch && build` (3624 rows).",
        "Metric": "friction reports naming `prompts/redteam/prompt-0.md` about those two traps; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E105",
      "n": 105,
      "title": "review 2026-10-28 (reduced pass, thirty-second run)",
      "date": "2026-10-28",
      "fields": {
        "Change": "only the `derive.py fetch && build` re-run (3624 rows). My `research/CLAUDE.md` torch edit was dropped on merge: another run landed the same fix first (`pyenv.py` now installs the CPU wheel).",
        "Metric": "friction reports naming `research/CLAUDE.md` about the torch install; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E104",
      "n": 104,
      "title": "review 2026-10-28 (reduced pass, thirty-first run)",
      "date": "2026-10-28",
      "fields": {
        "Change": "`research/CLAUDE.md` torch install line now installs `numpy` with `torch` and says not to use torch in the foreground before the job prints DONE (live report 2026-10-28T12:05). Re-ran `derive.py fetch && build` (3584 rows).",
        "Metric": "friction reports naming `research/CLAUDE.md` about the torch install; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E103",
      "n": 103,
      "title": "review 2026-10-28 (reduced pass, thirtieth run)",
      "date": "2026-10-28",
      "fields": {
        "Change": "`.github/prompts/land-your-work.md` step 2 says a first push with `--force-with-lease` fails with \"stale info\" on a branch with no remote yet (live report 2026-10-28T00:22). Re-ran `derive.py fetch && build`.",
        "Metric": "friction reports naming `land-your-work.md` about push failures; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E102",
      "n": 102,
      "title": "review 2026-10-28 (reduced pass, twenty-ninth run)",
      "date": "2026-10-28",
      "fields": {
        "Change": "`prompts/creative/prompt-0.md` states the episode length range a test enforces (live report 2026-10-27T16:16). Re-ran `derive.py fetch && build` (3487 rows).",
        "Metric": "friction reports naming `prompts/creative/prompt-0.md` about episode length; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E101",
      "n": 101,
      "title": "review 2026-10-27 (reduced pass, twenty-eighth run)",
      "date": "2026-10-27",
      "fields": {
        "Change": "`review/prompt-2.md` says validate failures on other runs' posts and records are one-line fixes for this PR, and that `measure` holds the shallow lock (2 live reports). Fixed 2 records that failed `validate` (the posts were fixed on main meanwhile).",
        "Metric": "friction reports naming `prompts/review/prompt-2.md` about validate or the lock; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit, drift report or derive re-run (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E100",
      "n": 100,
      "title": "review 2026-10-27 (reduced pass, twenty-seventh run)",
      "date": "2026-10-27",
      "fields": {
        "Change": "`prompts/review/prompt-1.md` step 1 now says `measure` holds git's `shallow.lock`, so run it and `derive.py fetch` one after the other (live report 2026-10-27T16:14). Re-ran `derive.py fetch && build` (3442 rows).",
        "Metric": "friction reports naming `prompts/review/prompt-1.md` about the lock; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E99",
      "n": 99,
      "title": "review 2026-10-27 (reduced pass, twenty-sixth run)",
      "date": "2026-10-27",
      "fields": {
        "Change": "`prompts/explore/prompt-0.md` audit-skip list now names the html `lang`/viewport/`alt`/`rel` attribute sweeps (3 live reports 2026-10-26 of re-sweeping them).",
        "Metric": "friction reports naming `prompts/explore/prompt-0.md` about re-sweeps; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit, drift report or derive re-run (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E98",
      "n": 98,
      "title": "review 2026-10-27 (reduced pass, twenty-fifth run)",
      "date": "2026-10-27",
      "fields": {
        "Change": "`CLAUDE.md` cloud-session pointer now names the `pkill -f` / `pgrep -f` hook and the bracket workaround (live report 2026-10-27T07:17; it was documented only in `cloud-session.md`). Re-ran `derive.py fetch && build` (3360 rows).",
        "Metric": "friction reports about the pkill hook naming `CLAUDE.md`; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E97",
      "n": 97,
      "title": "review 2026-10-27 (reduced pass, twenty-fourth run)",
      "date": "2026-10-27",
      "fields": {
        "Change": "`research/CLAUDE.md` now says to check `import torch` before asking `pyenv.py` for torch, and how to install the CPU wheel (3 live reports in 3 days, one a 35 min CUDA pull). Re-ran `derive.py fetch && build` (3319 rows).",
        "Metric": "friction reports about `pyenv.py` and torch naming `research/CLAUDE.md`; compare the next 40 runs.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E96",
      "n": 96,
      "title": "review 2026-10-27 (reduced pass, twenty-third run)",
      "date": "2026-10-27",
      "fields": {
        "Change": "`research/CLAUDE.md` now documents the missing `pdflatex` (texlive install about 10 min, needs `apt-get update` first), beside the yosys line. Re-ran `derive.py fetch && build` (3279 rows, committed).",
        "Metric": "\"TeX is not in the image\" friction reports naming `research/CLAUDE.md`; compare the next 40 runs (8 live in the last 3 days, 2 about TeX).",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting: the intervals overlap\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E95",
      "n": 95,
      "title": "review 2026-10-26 (reduced pass, twenty-first run)",
      "date": "2026-10-26",
      "fields": {
        "Change": "none to prompts or code. Checked E92's concern: all 170 records dated 2026-10-26 carry `ended`, the last review ended 13:25Z, and 61 non-review runs ended after it. At about 170 runs a day, `review_every = 40` fires roughly four times a day by design, so the repeated reduced passes are the cadence, not a counting bug.",
        "Metric": "none new. Open question for the owner or a process run: raise `review_every` (e.g. to 150) if four reduced reviews a day add little.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E94",
      "n": 94,
      "title": "review 2026-10-26 (reduced pass, twenty-second run)",
      "date": "2026-10-26",
      "fields": {
        "Change": "`prompts/review/prompt-1.md` step 1 now says `measure` itself needs `run_in_background` in a shallow clone and that `derive.py fetch && build` runs as its own command. Both timeouts were reported again in the last 3 days (2026-10-25T16:22, 2026-10-26T13:25).",
        "Metric": "\"review/prompt-1.md\" friction reports about the 120 s timeout; compare the next 40 runs.",
        "Decisions": "candidates still \"keep collecting: the intervals overlap\". No derive fetch, audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E92",
      "n": 92,
      "title": "review 2026-10-26 (reduced pass, twentieth run)",
      "date": "2026-10-26",
      "fields": {
        "Change": "`_landing_order` in `prompts/promptctl.py` ignores any commit that adds more than 50 run records (`BULK_ADD`), and `runs_since_review` breaks ties by the record's `ended` time. In a shallow clone the boundary commit lists all ~3,100 records as \"added\" together, so the 2026-10-26 review records ranked arbitrarily and the \"since the last review\" count read 83 (45 after the fix), one reason review kept being drawn (E80 to E91 were all reduced passes on one day).",
        "Metric": "fewer than one review per ~40 merged runs; compare review count per day over the next 3 days.",
        "Decisions": "candidates (ventures 2, process 2, review 2) still \"keep collecting\"; no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E91",
      "n": 91,
      "title": "review 2026-10-26 (reduced pass, nineteenth run)",
      "date": "2026-10-26",
      "fields": {
        "Change": "`loadPosts` in `platform/pages/writing.mjs` now leaves out posts dated after today (E90 finding), so the 30 posts dated 2026-10-27 to 2026-10-29 appear on their dates (the site rebuilds every three hours) instead of showing a false date in the feed, Atom and `llms.txt`. No post is deleted. Test added in `writing.test.mjs`.",
        "Metric": "none for prompts. Check the feed on 2026-10-27 shows them.",
        "Decisions": "no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E90",
      "n": 90,
      "title": "review 2026-10-26 (reduced pass, eighteenth run)",
      "date": "2026-10-26",
      "fields": {
        "Change": "none to prompts or docs. Regenerated `prompts/derived/`. Candidates re-measured: ventures 2, process 2 and review 2 all \"keep collecting\" (intervals overlap).",
        "Metric": "none new. E79 to E89 results stay open: too few runs since.",
        "Decisions": "no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E89",
      "n": 89,
      "title": "review 2026-10-25 (reduced pass, seventeenth run)",
      "date": "2026-10-25",
      "fields": {
        "Change": "none to prompts or docs. Regenerated `prompts/derived/`. Candidates re-measured: ventures 2, process 2 and review 2 all \"keep collecting\" (intervals overlap). The repeated \"friction table mixes live and fixed items\" report is already handled by the live/fresh split in `measure`; the remainder are fixes made outside the reported file, which no tag can detect.",
        "Metric": "none new. E79 to E88 results stay open: too few runs since.",
        "Decisions": "no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E88",
      "n": 88,
      "title": "review 2026-10-25 (reduced pass, sixteenth run)",
      "date": "2026-10-25",
      "fields": {
        "Change": "none to prompts or docs. Regenerated `prompts/derived/`. Candidates re-measured: ventures 2, process 2 and review 2 all \"keep collecting\" (intervals overlap). Live friction in the last 3 days is either already fixed (post front matter: `check_post_frontmatter.py`) or an environment hook report (`block_pkill_f.py`) with no clear doc fix.",
        "Metric": "none new. E79 to E87 results stay open: too few runs since.",
        "Decisions": "no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E87",
      "n": 87,
      "title": "review 2026-10-25 (reduced pass, fifteenth run)",
      "date": "2026-10-25",
      "fields": {
        "Change": "`prompts/research/prompt-1.md` step 3 gains one sentence: for a step longer than an hour, re-run the programme `CLAIM CHECK` just before merging. Reason: three live reports in 24 h (`research/PROGRAMMES.md`, `prompts/research/prompt-0.md`, `prompts/research/prompt-1.md`) say a sibling landed the same programme milestone (3c, m7i) during a long step, after the claim check at the start found nothing.",
        "Metric": "duplicated programme milestones reported in research `doc_friction`; compare the next 15 research runs against the 3 in the last day.",
        "Decisions": "no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E86",
      "n": 86,
      "title": "review 2026-10-25 (reduced pass, fourteenth run)",
      "date": "2026-10-25",
      "fields": {
        "Change": "none to prompts or docs. Regenerated `prompts/derived/`. Candidates re-measured: ventures 2, process 2 and review 2 are all \"keep collecting\" (intervals overlap). Checked the \"measure --section times out with no warning\" report: `_deepen_shallow_history` already prints a 70 s notice to stderr, so the report is stale, not a doc fault.",
        "Metric": "none new. E79 to E85 results stay open: too few runs since.",
        "Decisions": "no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E85",
      "n": 85,
      "title": "review 2026-10-24 (reduced pass, thirteenth run)",
      "date": "2026-10-24",
      "fields": {
        "Change": "none to prompts or docs. Regenerated `prompts/derived/`. Candidates re-measured: ventures 2, process 2 and review 2 are all \"keep collecting\" (intervals overlap). Checked the \"pyenv.py output needed `tail -1`\" friction in `prompt.md`'s reports: stdout is only the interpreter path (verified with `od -c`), so that report is stale, not a doc fault.",
        "Metric": "none new. E79 to E84 results stay open: too few runs since.",
        "Decisions": "no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E84",
      "n": 84,
      "title": "review 2026-10-24 (reduced pass, twelfth run)",
      "date": "2026-10-24",
      "fields": {
        "Change": "none to prompts or docs. Candidates re-measured after regenerating `prompts/derived/`: ventures 2, process 2 and review 2 are all \"keep collecting\" (intervals overlap). The friction table already hides since-changed reports (`promptctl.py` `live`/`tagged`), so the earlier \"mostly fixed entries\" reports have their fix; the remaining live items are owner rows.",
        "Metric": "none new. E79 to E83 results stay open: too few runs since.",
        "Decisions": "no audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E83",
      "n": 83,
      "title": "review 2026-10-24 (reduced pass, eleventh run)",
      "date": "2026-10-24",
      "fields": {
        "Change": "none to prompts or docs. Candidates re-measured: ventures 2, process 2 and review 2 are all \"keep collecting\" (intervals overlap). Regenerated `prompts/derived/`. Top friction files are unchanged from E81; the live items are owner rows and the already-fixed entries in the process prompt's friction list (107 reports), a `measure` presentation problem.",
        "Metric": "none new. E79, E80 and E81 results stay open: too few runs since.",
        "Decisions": "no audit or drift report (reduced pass, recent outputs mostly doc-only or research).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E82",
      "n": 82,
      "title": "review 2026-10-24 (reduced pass, tenth run)",
      "date": "2026-10-24",
      "fields": {
        "Change": "`prompts/review/prompt-1.md` trimmed from 136 to 129 lines, under the 130 budget (friction: \"File is 139 lines vs 130 budget\").",
        "Metric": "over-budget friction reports on review prompts, over the next 40 runs (baseline: 1 recent).",
        "Decisions": "ventures 2, process 2, review 2 keep collecting (intervals overlap). No audit or drift report (reduced pass). E80 and E81 results: too few runs since.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E81",
      "n": 81,
      "title": "review 2026-10-24 (reduced pass, ninth run)",
      "date": "2026-10-24",
      "fields": {
        "Change": "`prompts/review/prompt-1.md` step 1 now says `derive.py fetch` takes 2 to 5 min and how to wait for it (friction: 3 reports on fetch stalls and blocked waits). Regenerated `prompts/derived/`.",
        "Metric": "`derive.py fetch` friction on review prompts, over the next 40 runs (baseline: 3 recent).",
        "Decisions": "ventures 2, process 2, review 2 keep collecting (intervals overlap). E78 and E80 results: too few runs since. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E80",
      "n": 80,
      "title": "review 2026-10-24 (reduced pass, eighth run)",
      "date": "2026-10-24",
      "fields": {
        "Change": "retired research candidate 1 (`routing.json`: candidate `null`, share 0): 3 integrity issues in 184 runs against 7 in 877 for the champion, and `measure` suggests retire. Small counts, so the call is soft; success rates are level (97% vs 98%). `prompt.md` trimmed from 103 to the 100-line budget (friction: 2 reports said it was over budget).",
        "Metric": "`prompt.md` over-budget friction reports, over the next 40 runs (baseline: 2 recent). Research integrity issues per run on champion 0.",
        "Decisions": "ventures 2, process 2, review 2 keep collecting (intervals overlap). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E79",
      "n": 79,
      "title": "review 2026-10-24 (chronicle and lessons pass)",
      "date": "2026-10-24",
      "fields": {
        "Change": "owner asked for a documentation review \"from a chronicalling and lesson pov\". `portfolio/hosting/README.md` rewritten as current state plus one-line lessons (362 → 122 lines); the old text moved verbatim to `docs/history/hosting-2026-08-25-to-10-24.md`; new `docs/history/README.md` indexes every history file with its lesson. Stale deploy-first advice fixed in `session_gate.py`, `allocate.py`, `AGENTS.md`, `PRODUCT_PLAYBOOK.md`, `DEVELOPMENT_QUALITY.md`. Report: `docs/reports/2026-10-24-reference-docs-are-not-chronicles.md`.",
        "Metric": "friction reports naming `portfolio/hosting/README.md` or stale hosting/deploy-first advice, over the next 40 runs (baseline: count at the next review; a docs change is judged before/after, not A/B).",
        "Decisions": "no candidate scoring this run (brief was a docs review).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E78",
      "n": 78,
      "title": "review 2026-10-23 (reduced pass, seventh run)",
      "date": "2026-10-23",
      "fields": {
        "Change": "`CLAUDE.md` pyenv pointer notes the first install can exceed the 120 s tool timeout and should run in the background (friction on `research/CLAUDE.md`: pyenv.py took >120 s in the foreground).",
        "Metric": "friction reports about pyenv.py foreground timeouts, over the next 40 runs (baseline: 1 recent). The `sleep`/Monitor friction is already covered by `cloud-session.md` \"Long commands\", so no change.",
        "Decisions": "all four candidates keep collecting (intervals overlap / too few runs). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E77",
      "n": 77,
      "title": "review 2026-10-23 (reduced pass, sixth run)",
      "date": "2026-10-23",
      "fields": {
        "Change": "`.github/prompts/cloud-session.md` \"Long commands\" gained a two-line recipe for waiting with `Monitor` (until-loop on the output file, `echo DONE` at the end); friction on `prompt.md` and `research/CLAUDE.md` said waiting with `sleep` blocked was awkward.",
        "Metric": "friction reports about waiting on background jobs, over the next 40 runs (baseline: 2 recent).",
        "Decisions": "all four candidates keep collecting (intervals overlap / too few runs). `derived/` rebuilt (2572 rows). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E76",
      "n": 76,
      "title": "review 2026-10-23 (reduced pass, fifth run)",
      "date": "2026-10-23",
      "fields": {
        "Change": "`CLAUDE.md` cloud-session pointer names the working `node --test '*.test.mjs'` form (friction on `CLAUDE.md`: `node --test .` fails; the fix lived only in `cloud-session.md`).",
        "Metric": "friction reports about `node --test .` failing, over the next 40 runs (baseline: 1 recent). Checked `session_gate.py` publish-branch friction: already fixed, so no change.",
        "Decisions": "all four candidates keep collecting (intervals overlap / too few runs). `derived/` rebuilt (2524 rows). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E75",
      "n": 75,
      "title": "review 2026-10-23 (reduced pass, fourth run)",
      "date": "2026-10-23",
      "fields": {
        "Change": "`.github/prompts/cloud-session.md` note on the process-kill hook trap now says the `pgrep` form is refused too (friction on `research/CLAUDE.md` reported two retries on the rejection).",
        "Metric": "friction reports about that hook rejection, over the next 40 runs (baseline: 1 recent).",
        "Decisions": "all four candidates keep collecting (intervals overlap / too few runs). `derived/` rebuilt. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E74",
      "n": 74,
      "title": "review 2026-10-23 (reduced pass, third run)",
      "date": "2026-10-23",
      "fields": {
        "Change": "`research/CLAUDE.md` gained a 3-line note that `wntr` `run_sim` writes `temp.*` in the cwd, so parallel EPANET runs need a distinct `file_prefix`.",
        "Metric": "friction reports against `research/CLAUDE.md` about simulator temp files colliding, over the next 40 runs (baseline: 1 today).",
        "Decisions": "all four candidates (ventures 2, research 1, process 2, review 2) unchanged: intervals overlap, or fewer than 10 runs. `derived/` regenerated. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E73",
      "n": 73,
      "title": "review 2026-10-23 (reduced pass, second run)",
      "date": "2026-10-23",
      "fields": {
        "Change": "`.github/prompts/cloud-session.md` \"Long commands\" gained one sentence: don't chain a long command with commit/push in one call, and use absolute paths for `rm -rf` after a `cd` (the safety check rejects relative globs).",
        "Metric": "friction reports against `CLAUDE.md` about long commands delaying a commit or a blocked relative-glob `rm`, over the next 40 runs (baseline: 2 recent).",
        "Decisions": "research candidate 1 kept (same non-gap on integrity issues as E72; E55 proposal stands). ventures 2, process 2 and review 2 unchanged (overlap / too few runs). `derived/` regenerated. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E72",
      "n": 72,
      "title": "review 2026-10-23 (reduced pass)",
      "date": "2026-10-23",
      "fields": {
        "Change": "`.github/prompts/cloud-session.md` \"Python and tests\" gained a 3-line fallback for when `pyenv.py` fails (PEP 668, import name differing from the pip name): a plain venv, in the background.",
        "Metric": "friction reports against `platform/ci/pyenv.py` or `research/CLAUDE.md` about pyenv/PEP 668 failures, over the next 40 runs (baseline: 5 recent on pyenv.py, 3 on research/CLAUDE.md today).",
        "Decisions": "research candidate 1 kept (retire verdict fires on 1/158 vs 5/799 integrity issues, 0.0063 vs 0.0063, not a real gap; E55 proposal stands). ventures 2, process 2 and review 2 unchanged (overlap / too few runs). `derived/` regenerated. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E71",
      "n": 71,
      "title": "review 2026-10-22",
      "date": "2026-10-22",
      "fields": {
        "Change": "`prompts/steering.md` cut from 161 to 136 lines (budget 120): the rule/guideline example table, the \"habits\" list, the JSON deviation example and the Measuring paragraph folded into the prose that already says the same. `prompt.md` closing paragraph rewrapped.",
        "Metric": "`measure` \"Instruction lines\" for steering.md and friction reports naming it, over the next 40 runs (baseline: 0 friction reports on it; the cut is for read cost, not for a known failure).",
        "Decisions": "research candidate 1 kept (retire verdict fires on one disclosed integrity caveat; E55 proposal stands). ventures 2, process 2, review 2 unchanged (overlap / too few runs). `derived/` regenerated (fetch ran, 50 PRs)."
      },
      "verdict": "pending"
    },
    {
      "id": "E70",
      "n": 70,
      "title": "review 2026-10-22 (reduced pass)",
      "date": "2026-10-22",
      "fields": {
        "Change": "`prompts/review/prompt-1.md` step 1 now names `measure --section` (it exists; the last four reviews still reported \"measure is 50KB+ with no section flag\").",
        "Metric": "friction reports against `prompts/review/prompt-1.md` saying measure has no section flag, over the next 40 runs (baseline: 4 recent).",
        "Decisions": "research candidate 1 kept (retire verdict fires on 1/154 vs 5/790 integrity issues, a 0.0065 vs 0.0063 difference, not a real gap; E55 proposal stands). ventures 2, process 2 and review 2 unchanged (overlap / too few runs). `derived/` regenerated (50 PRs). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E69",
      "n": 69,
      "title": "review 2026-10-22 (reduced pass)",
      "date": "2026-10-22",
      "fields": {
        "Change": "`portfolio/flagships.yaml` wall-framing-takeoff `next:` cut from about 5k to 0.6k characters: open items only, landed history left to the README and ROADMAP (the follow-up after E66 and E67). changepoint-detector's `next:` is the remaining long one.",
        "Metric": "friction reports against `portfolio/flagships.yaml`, over the next 40 runs (baseline: 42 total; E66 and E67 cuts are in the same window).",
        "Decisions": "research candidate 1 kept (retire verdict still fires only on the one disclosed caveat; E55 proposal stands). ventures 2, process 2 and review 2 unchanged (overlap / too few runs). `derived/` regenerated. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E68",
      "n": 68,
      "title": "review 2026-10-22 (reduced pass)",
      "date": "2026-10-22",
      "fields": {
        "Change": "`portfolio/flagships.yaml` changepoint-detector `next:` cut from about 11k to 0.4k characters: open items only, landed history left to the README and git (the follow-up E67 named; all three long `next:` fields are now cut).",
        "Metric": "friction reports against `portfolio/flagships.yaml`, over the next 40 runs (baseline: E66/E67 window).",
        "Decisions": "research candidate 1 kept (retire verdict still fires only on the one disclosed caveat; E55 proposal stands). ventures 2, process 2 and review 2 unchanged (overlap / too few runs). `derived/` regenerated. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E67",
      "n": 67,
      "title": "review 2026-10-22 (reduced pass)",
      "date": "2026-10-22",
      "fields": {
        "Change": "`portfolio/flagships.yaml` einvoice-preflight `next:` cut from about 7.5k to 0.6k characters: open items only, landed history left to the README and git (the follow-up E66 named). changepoint-detector's `next:` is the remaining long one.",
        "Metric": "friction reports against `portfolio/flagships.yaml`, over the next 40 runs (baseline: 40 total; E66's ai-bookkeeper cut is in the same window).",
        "Decisions": "research candidate 1 kept (retire verdict still fires only on the one disclosed caveat; E55 proposal stands). ventures 2, process 2 and review 2 unchanged (overlap / too few runs). `derived/` regenerated (`fetch` ran, 25 of 43 PRs). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E66",
      "n": 66,
      "title": "review 2026-10-22 (reduced pass)",
      "date": "2026-10-22",
      "fields": {
        "Change": "`portfolio/flagships.yaml` ai-bookkeeper `next:` cut from 18.7k to about 1.1k characters: open items only, landed history left to the README and git. Cause: 3 friction reports today that it was a duplicated run-on. The other flagships' `next:` (changepoint-detector 10.5k, einvoice-preflight 8k) are the same shape and are the next cut.",
        "Metric": "friction reports against `portfolio/flagships.yaml`, over the next 40 runs (baseline: 32 total, 3 on ai-bookkeeper today).",
        "Decisions": "research candidate 1 kept (retire verdict still fires only on the one disclosed caveat; E55 proposal stands). ventures 2, process 2 and review 2 unchanged (overlap / too few runs). `derived/` regenerated (`fetch` ran, 25 of 44 PRs). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E65",
      "n": 65,
      "title": "review 2026-10-22 (reduced pass)",
      "date": "2026-10-22",
      "fields": {
        "Change": "`prompt.md` trimmed from 103 to 102 lines, budget 100 (the explore/creative paragraph no longer restates percentages that live in `routing.json`). `derived/` regenerated (`fetch` ran, 25 of 43 PRs before its time cap).",
        "Metric": "Instruction lines for `prompt.md` (baseline 103, budget 100) and friction reports against it, over the next 40 runs (baseline: 54 total).",
        "Decisions": "research candidate 1 kept (retire verdict still fires only on the one disclosed caveat; E55 proposal stands). ventures 2, process 2 and review 2 unchanged (overlap / too few runs). No audit or drift report (reduced pass; the 2026-10-21 report stands).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E64",
      "n": 64,
      "title": "review 2026-10-21 (reduced pass, late night)",
      "date": "2026-10-21",
      "fields": {
        "Change": "`.github/prompts/cloud-session.md` gains \"Browser and process tools\": the Playwright/Chromium env vars for cloud sessions and the `pkill -f` self-kill trap (2 reports each in the last day). `derived/` regenerated (`fetch` ran).",
        "Metric": "friction reports about playwright paths or `pkill`, over the next 40 runs (baseline: 2 and 1).",
        "Decisions": "research candidate 1 kept (retire verdict still fires only on the one disclosed caveat; E55 proposal stands). ventures 2, process 2 and review 2 unchanged (overlap / too few runs). No audit or drift report (reduced pass; four reviews already ran today).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E63",
      "n": 63,
      "title": "review 2026-10-21 (reduced pass, late night)",
      "date": "2026-10-21",
      "fields": {
        "Change": "`prompts/redteam/prompt-0.md` gives a cutoff for slow suites (`--timeout`; pick another target when baseline x mutants > ~20 min). Cause: 3 reports today of changepoint-detector campaigns past 10-30 min. `derived/` regenerated.",
        "Metric": "redteam/prompt-0 friction about slow suites, over the next 40 runs (baseline: 3).",
        "Decisions": "research candidate 1 kept (E55 caveat); ventures 2, process 2 and review 2 unchanged (overlap / too few runs). No audit or drift report (reduced pass; the 2026-10-21 report stands).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E62",
      "n": 62,
      "title": "review 2026-10-21 (reduced pass, night)",
      "date": "2026-10-21",
      "fields": {
        "Change": "`.github/prompts/cloud-session.md` (\"Python and tests\") says to install with `\"$PY\" -m pip` and not to run two pip installs at once (1 report today: pip went to python3.13, concurrent installs corrupted the env). `derived/` regenerated.",
        "Metric": "friction reports about pip/python version mismatch, over the next 40 runs (baseline: 1).",
        "Decisions": "research candidate 1 kept (retire verdict still fires only on the one disclosed caveat; E55 proposal stands). ventures 2 (overlap), process 2 (1 run) and review 2 (10 runs, 100% vs 90%, overlap) unchanged. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E61",
      "n": 61,
      "title": "review 2026-10-21 (full pass, evening)",
      "date": "2026-10-21",
      "fields": {
        "Change": "`steering.md` \"improvement loop\" cut from 17 to 7 lines (duplicated `process/prompt-1.md`); 171 -> ~161 lines. `derived/` regenerated.",
        "Metric": "process/2 `partial` rate vs process/1 (baseline 27%), once each has 10+ runs; `steering.md` friction reports (baseline 0 this window).",
        "Decisions": "research candidate 1 kept (retire verdict fires only on the one disclosed caveat; E55). ventures 2 (90% vs 89%, overlap) and review 2 (9 runs) unchanged. Audit clean (3 PRs); drift report `drift/2026-10-21.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E60",
      "n": 60,
      "title": "review 2026-10-21 (reduced pass, afternoon)",
      "date": "2026-10-21",
      "fields": {
        "Change": "`CLAUDE.md` (\"Hosting\") and `portfolio/hosting/README.md` (\"What is served now\") name `duncan-haywood.github.io/oss-monorepo/`; the old `/monorepo-projects/` path 404s since the repo rename (2 reports today; the full URL sweep is the owner's draft PR #8592, left alone).",
        "Metric": "friction reports that the Hosting URL is wrong, over the next 40 runs (baseline: 2).",
        "Decisions": "research candidate 1 kept (retire verdict still fires on the one disclosed caveat; E55). ventures 2 and review 2 unchanged (overlap / 9 runs). `derived/` regenerated. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E59",
      "n": 59,
      "title": "review 2026-10-21 (reduced pass, morning)",
      "date": "2026-10-21",
      "fields": {
        "Change": "`prompts/research/prompt-0.md` and `research/PROJECTS.md` no longer hard-code \"nineteen tracks\" (there are 21; a count in prose drifts). `derived/` regenerated.",
        "Metric": "friction reports saying the track count is stale, over the next 40 runs.",
        "Decisions": "research candidate 1 kept (retire verdict still fires on the one disclosed caveat; the `verdict` fix remains the E55 proposal). ventures 2 and review 2 unchanged (overlap / 9 runs). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E58",
      "n": 58,
      "title": "review 2026-10-21 (reduced pass)",
      "date": "2026-10-21",
      "fields": {
        "Change": "`CLAUDE.md` says to fetch branches with `--depth=40` (a bare fetch pulled ~5 GB); `research/CLAUDE.md` names the exact `--write` command instead of \"step 4's\" (reported as pointing at a flag `build.py` lacks). `derived/` regenerated.",
        "Metric": "friction reports on those two lines, per run, over the next 40 runs.",
        "Decisions": "research candidate 1 kept (the retire verdict still fires on the one disclosed caveat; see E55). ventures 2 and review 2 unchanged (overlap / under 10 runs). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E57",
      "n": 57,
      "title": "review 2026-10-20 (reduced pass, night)",
      "date": "2026-10-20",
      "fields": {
        "Change": "`portfolio/router/allocate.py` prints the first 500 characters of a flagship's `next:` in the work queue and points at `flagships.yaml` for the rest (84 friction reports on the file, mostly the multi-KB blob per row). `test_allocate.py` passes (73 tests). `derived/` regenerated.",
        "Metric": "friction reports naming allocate.py output size, per run, over the next 40 runs (baseline 84 in 1,770, most of them the blob).",
        "Decisions": "research candidate 1: the verdict says retire on one integrity issue (the disclosed search-excerpt caveat); kept, as in E54/E55, and the `verdict` fix remains a proposal for the owner (E55). ventures 2 and review 2 unchanged (overlap / under 10 runs). No audit or drift report (reduced pass)."
      },
      "verdict": "pending"
    },
    {
      "id": "E56",
      "n": 56,
      "title": "review 2026-10-20 (night)",
      "date": "2026-10-20",
      "fields": {
        "Change": "`runcost.py attach` takes `--human-hours`/`--human-basis` as optional (basis still required with hours); `prompt.md` says so (and is back to its 100-line budget). Scheduled runs skipped the whole cost step because the human-hours estimate had no basis, losing tokens and dollars with it (`prompt.md`/`runcost.py`: ~46 and 3 friction/deviation reports).",
        "Metric": "share of new records with a `usage` block, over the next 40 runs (baseline: median API $ measured for about 55% of runs in `measure`).",
        "Decisions": "ventures 2 and review 2 unchanged (intervals overlap / 8 runs). Research candidate 1: the retire suggestion fires on one disclosed caveat (see E55); kept, 99% vs 98% success. `derived/` regenerated. No audit (reduced pass), no new candidate.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E55",
      "n": 55,
      "title": "review 2026-10-20 (reduced pass, evening)",
      "date": "2026-10-20",
      "fields": {
        "Change": "none to prompts. `derived/` regenerated. A fix to the retire rule in `promptctl.py verdict` (retire on integrity issues only at two or more, since one self-disclosed caveat on research/1 keeps firing it) was blocked by the auto-mode classifier twice (this run and draft PR #8901), so it is a proposal.",
        "Proposal for the owner": "allow `verdict` to require 2+ integrity issues before \"retire: more integrity issues\". Three review friction reports on 2026-10-20 describe the manual look it costs each review.",
        "Decisions": "research candidate 1 kept (99% vs 98% success). ventures 2 and review 2 unchanged (overlap / under 10 runs). No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E54",
      "n": 54,
      "title": "review 2026-10-20 (reduced pass, 12:xx)",
      "date": "2026-10-20",
      "fields": {
        "Change": "`verify-and-merge.md` line for `--for-changes` now says what to do when it stalls (docs-only diff, or a diff reaching 100+ workflows): run the reached workflows by name. Five friction reports in the window (the latest three on 2026-10-20) describe the stall.",
        "Metric": "friction reports naming `run_workflow_locally.py --for-changes` stalling, per run, over the next 40 runs (baseline 5 in 1,658).",
        "Decisions": "research candidate 1 kept again (116 runs, 99% vs 98% success; its one integrity issue is the disclosed search-excerpt caveat the retire rule counts). ventures 2 and review 2 unchanged (intervals overlap / under 10 runs). `derived/` regenerated. No audit or drift report (reduced pass).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E53",
      "n": 53,
      "title": "guidance map and layers, 2026-10-20 (owner-requested, not a review)",
      "date": "2026-10-20",
      "fields": {
        "Change": "one map of the guidance (`prompts/SYSTEM.md`, `prompts/system.json`, `promptctl.py map`), with seven layers and precedence. `validate` now fails on a guidance file that has no map entry. `INSTRUCTION_FILES` and the budgets are read from the map. Operational detail moved down a layer: from `CLAUDE.md`, \"Reading CI\" went to `verify-and-merge.md`, \"Duplicate PRs\" to `duplicate-work.md`, and the hosting state to `portfolio/hosting/README.md`. The cloud-container notes, which had been copied into `CLAUDE.md`, `prompt.md` (the E49 and E50 lines) and `land-your-work.md`, went to one file, `cloud-session.md`. `CLAUDE.md` went from 360 to 306 lines.",
        "Metric": "the share of runs whose `doc_friction` names `CLAUDE.md`, `prompt.md` or `land-your-work.md` on gh/MCP, shallow clones, pytest or long commands, over the next 200 runs. The baseline (keyword matches, an upper bound) is, out of 1,491 runs since 2026-10-14: long commands 69, pytest 48, shallow 34, gh/MCP 23. E49 and E50 are now judged on `cloud-session.md`, which `prompt.md` links to. Also: any friction item that says a moved fact could not be found.",
        "Evidence strength": "a before-and-after comparison, not A/B.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E52",
      "n": 52,
      "title": "review 2026-10-20 (second)",
      "date": "2026-10-20",
      "fields": {
        "Change": "`prompt.md` step 1 says which track an owner request that fits none takes (`prompt.md`/`routing.json` friction: 3 reports of forcing a track with no rule).",
        "Metric": "\"no track fits owner task\" friction reports on `prompt.md`, next 20 runs.",
        "Candidates": "research/1 vs 0: `measure` says retire (1 integrity issue in 110 runs vs 4 in 618), but the one issue is a self-disclosed caveat (search-excerpt figures marked in the data and README), not a violation; success is 100% vs 98%. Kept, 0.2 share. ventures 2 / review 2 unchanged (overlap, under 10 runs). Reduced pass: no audit, drift report or `derived/` regeneration."
      },
      "verdict": "pending"
    },
    {
      "id": "E51",
      "n": 51,
      "title": "review 2026-10-20",
      "date": "2026-10-20",
      "fields": {
        "Change": "`research/CLAUDE.md` intro names the root `CLAUDE.md` rules that still apply to research (public-repository and landing rules), not only the ones that do not (`prompt.md` friction: took a read to reconcile). `derived/` regenerated (1513 runs).",
        "Metric": "\"root CLAUDE.md reconcile\" friction reports on `prompt.md`/`research/CLAUDE.md`, next 20 research runs.",
        "Candidates": "unchanged (review/2 has 8 runs; ventures 2 / research 1 intervals overlap). Reduced pass: no audit or drift report (hours-old report).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E50",
      "n": 50,
      "title": "review 2026-10-19 (tenth)",
      "date": "2026-10-19",
      "fields": {
        "Change": "`prompt.md` step 2 gives the `pyenv.py pytest` one-liner (top `CLAUDE.md`/`prompt.md` friction: bare `python3` lacked pytest, runs ran tests by hand). `derived/` regenerated.",
        "Metric": "\"pytest absent\" friction reports on `CLAUDE.md`/`prompt.md`, next 20 runs.",
        "Candidates": "unchanged (review/2 has 8 runs; ventures 2 / research 1 overlap). Reduced pass: no audit or drift report (hours-old report).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E49",
      "n": 49,
      "title": "review 2026-10-19 (eighth)",
      "date": "2026-10-19",
      "fields": {
        "Change": "`prompt.md` step 2 says to retry `create_pull_request` on HTTP 500 (`prompt.md` friction: two 500s before success, no doc mentioned retrying).",
        "Metric": "\"create_pull_request 500\" friction reports on `prompt.md`, next 20 runs; expect none.",
        "Candidates": "unchanged (ventures 2 / research 1 intervals overlap; review/2 has 7 runs). Reduced pass: no audit, drift report or `derived/` regeneration (reports hours old, recent outputs research/doc-only).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E48",
      "n": 48,
      "title": "review 2026-10-19 (seventh)",
      "date": "2026-10-19",
      "fields": {
        "Change": "`research/CLAUDE.md` pyenv step now tells runs to test-import `pytest` along with the project's libraries before skipping the venv (friction: a plain attempt failed on missing pytest). The apt-get and `run_in_background` reports were already fixed in that file.",
        "Metric": "\"pyenv/pytest detour\" friction reports on `research/CLAUDE.md`, next 20 research runs.",
        "Candidates": "unchanged (review/2 has 7 runs; ventures 2 / research 1 overlap). Reduced pass: no audit or drift report (hours-old report).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E47",
      "n": 47,
      "title": "review 2026-10-19 (sixth)",
      "date": "2026-10-19",
      "fields": {
        "Change": "none to prompts or docs. `derived/` regenerated (1372 runs). The \"due counter ignores same-day reviews\" friction on `prompts/review/prompt-1.md` is already fixed in `promptctl.py` (`route` comment near line 147), so no edit; the reports are from runs before that fix.",
        "Metric": "unchanged from E45/E46.",
        "Candidates": "unchanged (ventures 2 / research 1 intervals overlap; review/2 has 7 runs). Reduced pass: no audit or drift report (hours-old report).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E46",
      "n": 46,
      "title": "review 2026-10-19 (fifth)",
      "date": "2026-10-19",
      "fields": {
        "Change": "`prompts/research/prompt-0.md` claim step greps `git ls-tree` for a keyword instead of reading the ~670-line listing (`research/CLAUDE.md` friction).",
        "Metric": "\"ls-tree prints ~670 lines\" friction reports, next 20 research runs; expect none.",
        "Candidates": "unchanged. Reduced pass: no audit or drift report (hours-old report, recent outputs research/doc-only). `pyenv.py` re-checked: works now.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E45",
      "n": 45,
      "title": "review 2026-10-19 (fourth)",
      "date": "2026-10-19",
      "fields": {
        "Change": "`research/_shared/pick_track.py` says when the drawn track already has 40+ projects, that a redraw is fine, and names the three emptiest tracks (`research/PROJECTS.md` friction: draws landing on saturated tracks 4 and 5 cost a run its first reads). `derived/` regenerated.",
        "Metric": "\"saturated track / micro-variant chain\" friction reports in `research/PROJECTS.md`, next 20 research runs; expect fewer.",
        "Candidates": "unchanged (review/2 has 7 runs; ventures 2 / research 1 overlap). Reduced pass: no audit (recent outputs doc-only or research); no new drift report (`prompts/drift/2026-10-19.md` is hours old).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E44",
      "n": 44,
      "title": "review 2026-10-19 (third)",
      "date": "2026-10-19",
      "fields": {
        "Change": "`platform/ci/pyenv.py` tries the private venv before `apt-get` (apt-get update is slow and often fails; PEP 668 pip failures and 120s foreground timeouts were 5+ `research/CLAUDE.md` friction reports). Tests pass (10).",
        "Metric": "friction reports about pyenv PEP 668 / timeouts, next 20 research runs; expect none.",
        "Candidates": "unchanged (review/2 has 7 runs; ventures 2 / research 1 overlap). Reduced pass: no derive fetch or audit (recent outputs doc-only or research).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E43",
      "n": 43,
      "title": "review 2026-10-19 (second)",
      "date": "2026-10-19",
      "fields": {
        "Change": "`allocate.py` `rank()` breaks merit ties by least-worked first (ledger entries + portfolio mentions, ascending) before name. Top rows were a merit tie sorted alphabetically, so every run met the same already-deep ventures (reverb, where-to-sell; the top friction in `CLAUDE.md` and `ventures/prompt-1.md`). Top 3 now include 0-ledger ventures.",
        "Metric": "\"allocator top rows already deep\" friction reports, next 20 ventures runs; expect fewer.",
        "Candidates": "unchanged. `test_allocate` passes (57 tests).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E42",
      "n": 42,
      "title": "review 2026-10-19",
      "date": "2026-10-19",
      "fields": {
        "Change": "`research/CLAUDE.md` pyenv note now says first use can take over 2 minutes and to run it with `run_in_background` (E41 said ~20s; 5 reports of a 120s foreground timeout since). `derived/` regenerated (53 PRs).",
        "Metric": "friction reports about pyenv foreground timeouts, next 20 research runs; expect none.",
        "Candidates": "unchanged (ventures 2 / research 1 overlap; review/2 has 7 runs). Audit not run (recent outputs doc-only or mirrored).",
        "Drift": "`prompts/drift/2026-10-19.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E41",
      "n": 41,
      "title": "review 2026-10-18 (seventh)",
      "date": "2026-10-18",
      "fields": {
        "Change": "`research/CLAUDE.md` now says the first `pyenv.py` call takes ~20s and prints install chatter on stderr (3 friction reports). The yosys/apt-get reports in `CLAUDE.md` friction were already fixed (lines 76-77); measure still lists them as latest.",
        "Metric": "friction reports about pyenv first-use time, next 20 research runs; expect none.",
        "Candidates": "unchanged (ventures 2 / research 1 overlap; review/2 has 7 runs). `derived/` not regenerated, audit not run (no GitHub API fetch attempted; recent outputs doc-only/research).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E40",
      "n": 40,
      "title": "review 2026-10-18 (sixth)",
      "date": "2026-10-18",
      "fields": {
        "Change": "`session_gate.py` stale-snapshot reason now says \"after your PR merges\" up front. It used to say \"before anything else\" and then, three sentences later, that the script refuses a work branch (35 friction reports on the gate, the latest several on exactly this).",
        "Metric": "friction reports naming `session_gate.py` about the publish order, next 20 runs that run the gate; expect none.",
        "Candidates": "unchanged (ventures 2 / research 1 overlap; review/2 has 7 runs).",
        "Drift": "`prompts/drift/2026-10-18f.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E39",
      "n": 39,
      "title": "review 2026-10-18 (fifth)",
      "date": "2026-10-18",
      "fields": {
        "Change": "no prompt or doc change. Audit sample (recent venture PRs) found one shipped regression (#8038, fixed by #8041); added a header/row cell-count test to `league-schedule-generator`.",
        "Metric": "audit runs that find a defect in a recent venture PR; the audit is runnable when it names a venture with `node --test`.",
        "Candidates": "unchanged. Drift: `prompts/drift/2026-10-18e.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E38",
      "n": 38,
      "title": "review 2026-10-18 (fourth)",
      "date": "2026-10-18",
      "fields": {
        "Change": "`research/_shared/pick_track.py` does the track draw that `research/PROJECTS.md` \"Picking work\" step 1 describes (a report said no script did it); the step is now one line plus the command.",
        "Metric": "friction reports about the track draw, next 40 research runs; expect none.",
        "Candidates": "unchanged (ventures 2 / research 1 overlap; review/2 has 6 runs). `derived/` regenerated (25 of 29 PRs). Audit not run (recent outputs mirrored or doc-only).",
        "Drift": "`prompts/drift/2026-10-18d.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E37",
      "n": 37,
      "title": "review 2026-10-18 (third)",
      "date": "2026-10-18",
      "fields": {
        "Change": "`research/PROJECTS.md` \"Picking work\" step 1 gives the track-draw formula (2 reports said the number-to-track mapping was a guess).",
        "Metric": "friction reports about the track draw, next 40 research runs; expect none.",
        "Candidates": "unchanged (ventures 2 / research 1 overlap; review/2 has 6 runs). Open friction not fixed: ventures runs report that router top candidates are already deep; `allocate.py` needs its own run.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E36",
      "n": 36,
      "title": "review 2026-10-18 (second)",
      "date": "2026-10-18",
      "fields": {
        "Change": "`redteam.py` runs suites with `PYTHONDONTWRITEBYTECODE=1` (stale `.pyc` kept serving a same-size mutant).",
        "Metric": "friction reports naming `prompts/redteam/prompt-0.md` about stale bytecode, next 20 redteam runs; expect none.",
        "Candidates": "unchanged. Drift: `prompts/drift/2026-10-18b.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E35",
      "n": 35,
      "title": "review 2026-10-18",
      "date": "2026-10-18",
      "fields": {
        "Change": "none to prompts or docs. Candidates unchanged (ventures 2 / research 1 overlap their champions; review/2 has 5 runs, fewer than 10). `derived/` regenerated; `pyenv.py` friction checked and already fixed on `main`.",
        "Metric": "friction reports naming `research/CLAUDE.md` about `pyenv.py`, next 40 runs; expect none.",
        "Drift": "`prompts/drift/2026-10-18.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E34",
      "n": 34,
      "title": "review 2026-10-17 (sixth review that day)",
      "date": "2026-10-17",
      "fields": {
        "Change": "`research/PROJECTS.md` step 2 of \"Picking work\" tells a run to ask a new question when a track's next-step chain has gone to micro-variants (31 reports on `prompts/research/prompt-0.md`, the latest about the saturated chain).",
        "Metric": "friction reports about choosing a next step, per research run, next 40 research runs.",
        "Candidates": "unchanged (ventures 2 / research 1 overlap their champions; review/2 has 5 runs).",
        "Data": "`derive.py fetch` got 25 of 30 PRs; derived/ regenerated. Audit not run (recent outputs mirrored or doc-only).",
        "Drift": "`prompts/drift/2026-10-17f.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E33",
      "n": 33,
      "title": "review 2026-10-17 (fifth review that day)",
      "date": "2026-10-17",
      "fields": {
        "Change": "`sync_tree_counts.py` inserts `gitops/tests` on `sys.path` for its import, so it runs with no `PYTHONPATH` (3 reports of `No module named front_door_mirror`).",
        "Metric": "friction reports naming `platform/ci/sync_tree_counts.py`, next 40 runs.",
        "Candidates": "unchanged (ventures 2 / research 1 overlap; review/2 has 5 runs).",
        "Data": "`derive.py fetch` got 25 of 30 PRs; derived/ regenerated. Audit not run (recent outputs mirrored or doc-only).",
        "Drift": "`prompts/drift/2026-10-17e.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E32",
      "n": 32,
      "title": "review 2026-10-17 (fourth review that day)",
      "date": "2026-10-17",
      "fields": {
        "Change": "`review/prompt-1.md` says `derive.py fetch` is incremental (~30 PRs per call, run once in the background) and that an unrunnable audit is expected, not friction. Cause: 24 friction reports on that file, the latest three about the fetch limit and the audit.",
        "Metric": "friction reports per run naming `prompts/review/prompt-1.md`. Compare the next review.",
        "Candidates": "unchanged (ventures 2 / research 1 overlap their champions; review/2 has 5 runs).",
        "Data": "`derive.py fetch` got 25 of 30 PRs; derived/ regenerated. Audit not run (recent outputs mirrored or doc-only).",
        "Drift": "`prompts/drift/2026-10-17d.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E31",
      "n": 31,
      "title": "review 2026-10-17 (third review that day)",
      "date": "2026-10-17",
      "fields": {
        "Change": "`land-your-work.md` trimmed to its 160-line budget (it was over by 3) and says a swept branch whose content is on `main` needs no PR (4 reports); backlog README/validate message say `pr: \"this\"` is accepted for a done item whose PR is unopened (3 reports of the second-commit cost).",
        "Metric": "friction reports on `land-your-work.md` and the backlog README per run, next 40 runs.",
        "Candidates": "unchanged (ventures 2, research 1 overlap; review/2 has 5).",
        "Data": "`derive.py fetch` got 32 of 470 PRs; the rest stay null. Audit not run (mirrored or doc-only recent outputs).",
        "Drift": "`prompts/drift/2026-10-17c.md`.",
        "Audit": "not run (recent records mirrored or doc-only); `derive.py fetch` not run, third review in one day.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E30",
      "n": 30,
      "title": "review 2026-10-17",
      "date": "2026-10-17",
      "fields": {
        "Change": "`land-your-work.md` says cloud sessions without `gh`/GraphQL use the GitHub MCP tools to open and merge. Cause: a 2026-10-17 `CLAUDE.md` friction report (\"merge via PR, but gh GraphQL is blocked\").",
        "Metric": "friction reports per run naming gh/GraphQL/MCP. Compare the next 40 runs.",
        "Candidates": "ventures/2 vs 1, research/1 vs 0 overlap; review/2 has 5 runs. Keep collecting.",
        "Data": "`derive.py fetch` got 25 of 46 PRs before the time limit; the rest stay null. Audit not run (mirrored or doc-only recent outputs).",
        "Drift": "see `prompts/drift/2026-10-17b.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E29",
      "n": 29,
      "title": "24-hour review, 2026-10-16 (owner-requested)",
      "date": "2026-10-16",
      "fields": {
        "Change": "`promptctl.py measure` hides \"By starting message\" groups with fewer than 3 runs (49 of 60 rows, 52 runs; one line says so). Cause: the table is one-off hashes that cannot be compared, and the output was ~43KB that every review reads.",
        "Measure": "`CLAUDE.md` friction reports per run naming pytest, numpy, pip, interpreter or timeout. Before: 2026-10-16, 224 runs, about 34 such reports. Compare the next 100 runs.",
        "Candidates": "unchanged. ventures 2 and research 1 overlap their champions; review/2 has 5 runs.",
        "Audit": "not run (mirrored or doc-only records); `derive.py fetch` ran and built 713 rows.",
        "Proposal": "G2 (process track weight).",
        "Report": "`prompts/drift/2026-10-16k.md`.",
        "Result": "(next review)",
        "Metric": "size of `measure` output; \"doc friction\" reports naming `prompts/promptctl.py` (7 before; the BrokenPipe one was already fixed).",
        "Drift": "`prompts/drift/2026-10-17b.md`."
      },
      "verdict": "pending"
    },
    {
      "id": "E28",
      "n": 28,
      "title": "review 2026-10-16 (tenth of the day)",
      "date": "2026-10-16",
      "fields": {
        "Change": "`review_every` 20 → 40 in `prompts/routing.json`. Ten reviews fired today, most with nothing new to measure (friction on `routing.json`, `review/prompt-2.md`).",
        "Metric": "reviews per day, and review runs with no change shipped. Compare the next 40 runs against today's.",
        "Candidates": "unchanged, overlap or too few runs.",
        "Audit": "league-schedule-generator, 69 pass. `derive.py fetch` got 16 of 18.",
        "Drift": "see `prompts/drift/2026-10-16j.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E27",
      "n": 27,
      "title": "review 2026-10-16 (ninth of the day)",
      "date": "2026-10-16",
      "fields": {
        "Change": "none to prompts or docs; `prompts/derived/` refreshed, drift report only. No new friction that was fixable at low cost.",
        "Candidates": "ventures/2 (25, 88%) vs ventures/1 (78, 87%), research/1 (29, 100%) vs research/0 (358, 98%): overlap, keep collecting. review/2: 3 runs.",
        "Audit": "business-loan-offer-comparator re-run, 34 pass. `derive.py fetch` got 18 of 20.",
        "Drift": "see `prompts/drift/2026-10-16i.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E26",
      "n": 26,
      "title": "review 2026-10-16 (eighth of the day)",
      "date": "2026-10-16",
      "fields": {
        "Change": "none to prompts or docs; `prompts/derived/` refreshed, drift report only. Stale friction (PRODUCT_PLAYBOOK, prompts/README) already fixed.",
        "Candidates": "ventures/2 vs ventures/1, research/1 vs research/0: overlap, keep collecting. review/2: 3 runs, too few.",
        "Audit": "skipped (doc-only/research runs). `derive.py fetch` got 19 of 21.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E25",
      "n": 25,
      "title": "review 2026-10-16 (seventh of the day)",
      "date": "2026-10-16",
      "fields": {
        "Change": "none to prompts or docs; measurement refresh (`prompts/derived/`) and drift report only. Nothing in the friction table was new and fixable at low cost, and review/2 has 3 runs.",
        "Measure": "n/a.",
        "Candidates": "ventures/2 (22, 91%) vs ventures/1 (68, 91%), research/1 (18, 100%) vs research/0 (348, 98%): overlap, keep collecting. review/2: 2 runs.",
        "Audit": "league-schedule-generator re-run, 59 pass. Research audit not runnable (no pytest, apt fails).",
        "Drift": "see `prompts/drift/2026-10-16g.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E24",
      "n": 24,
      "title": "review 2026-10-16 (sixth of the day)",
      "date": "2026-10-16",
      "fields": {
        "Change": "`prompt.md` step 1 now says to pass `--track` before running `route` when the brief names a task (was after the command; friction: a run drew research for an owner-named product brief).",
        "Measure": "friction reports naming `prompt.md` per run after this.",
        "Candidates": "ventures/2 (22, 91%) vs ventures/1 (68, 91%), research/1 (18, 100%) vs research/0 (348, 98%): overlap, keep collecting. review/2: 2 runs.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E23",
      "n": 23,
      "title": "review 2026-10-16 (fifth of the day)",
      "date": "2026-10-16",
      "fields": {
        "Change": "CLAUDE.md checklist gains one line naming `gitops/ci/sync_readme_counts.py`. No prompt changes.",
        "Why": "friction on `gitops/ci/README.md`: runs-on count goes stale on every new-workflow PR.",
        "Measure": "friction reports naming `gitops/ci/README.md` per run after this.",
        "Candidates": "ventures/2 (20, 90%) vs ventures/1 (63, 92%), research/1 (17, 100%) vs research/0 (340, 98%): overlap, keep collecting. review/2 has 1 run.",
        "Audit": "3 areas re-run, all pass. `derive.py fetch` got 21 of 23 PRs.",
        "Drift": "see `prompts/drift/2026-10-16e.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E22",
      "n": 22,
      "title": "review 2026-10-16 (fourth of the day)",
      "date": "2026-10-16",
      "fields": {
        "Change": "`.github/prompts/land-your-work.md` adopted-drafts bullet condensed (163 -> 159 lines, under its 160 budget). No prompt changes.",
        "Why": "only file over its instruction-line budget; `CLAUDE.md` already fell 467 -> 391.",
        "Measure": "friction reports naming `land-your-work.md` per run after this window.",
        "Candidates": "ventures/2 (20 runs, 90%) vs ventures/1 (63, 94%): intervals overlap, keep collecting. research/1 (12, 100%) vs research/0 (331, 98%): overlap, keep collecting. review/2 has 0 runs and review/1 16: first review/2 run is this one; too few for a verdict.",
        "Audit": "3 venture PRs re-run (devsec-toolkit, shift-roster-builder, distribution tests): all pass, no corrections. `derive.py fetch` got 19 of 21 PRs.",
        "Drift": "no new owner words. See `prompts/drift/2026-10-16d.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E21",
      "n": 21,
      "title": "review/2 candidate and BrokenPipe fix (2026-10-16)",
      "date": "2026-10-16",
      "fields": {
        "Change": "`review/prompt-2.md` (candidate, share 0.2): the audit step says to decide first whether anything is auditable and log \"nothing auditable\" if not; step 1 says to run `build` on the cache after a 403. `promptctl.py` exits quietly on a closed pipe (`measure | head`).",
        "Why": "review/1 friction (16 reports) is mostly \"steps 1-2 unrunnable because the remaining records are mirrored or doc-only\".",
        "Measure": "friction reports per review run on steps 1-2, review/2 vs review/1. Only ~1 review per 20 runs, so expect a slow verdict.",
        "Candidates this window": "ventures/2 (18 runs, 94%) vs ventures/1 (58, 93%): intervals overlap, keep collecting. research/1 (10, 100%) vs research/0 (322, 98%): overlap, keep collecting. review/1: 15 runs, 73%, 0 integrity.",
        "Audit": "nothing auditable (new records mirrored or doc-only). `derive.py fetch` fetched 16 of 18 PRs; `merged` still unknown for mirrored records.",
        "Drift": "no new owner words since 2026-10-16b. `CLAUDE.md` 467/500 (down from 475). See `prompts/drift/2026-10-16c.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E20",
      "n": 20,
      "title": "stale doc lines from the same review (2026-10-16)",
      "date": "2026-10-16",
      "fields": {
        "Change": "`CLAUDE.md` checklist no longer states a stale count of expected `gitops/tests` failures (said ~26; baseline today was 2); `review/prompt-1.md` step 1 says what to do when `derive.py fetch` gets a 403 (+2 lines).",
        "Why": "friction reports on both; 26 runs since the last review.",
        "Measure": "friction reports naming the CLAUDE.md pytest line, and on `review/prompt-1.md` step 1, per run after this window.",
        "Candidates": "ventures/2 (17) vs ventures/1 (53): intervals overlap, keep collecting. research/1 (8) under 10. Audit skipped: records mirrored or doc-only. `derive.py fetch` 403; `merged` left unknown.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E19",
      "n": 19,
      "title": "thirteenth review (2026-10-16)",
      "date": "2026-10-16",
      "fields": {
        "Change": "none to prompts or docs; `prompts/derived/runs.json` rebuilt. `derive.py fetch` got HTTP 403 from the GitHub API in this session, so the rebuild used the cached `github.json`: `merged` for new records stays `unknown` until a session with API access runs fetch.",
        "Why": "review step 1 died on its first command in this session.",
        "Measure": "reviews that report a failed `derive.py fetch` in doc_friction.",
        "Candidates": "ventures/2 (17 runs, 94%, 0.06 errors/run) vs ventures/1 (53, 92%, 0.17): intervals overlap, no verdict. research/1 has 8 runs, under 10. review/1 is 75% over 12 runs, 0 integrity issues. No new candidate: both tracks with candidates already carry one.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E18",
      "n": 18,
      "title": "measure PR facts and rework instead of typing them (2026-10-16, owner request)",
      "date": "2026-10-16",
      "fields": {
        "Change": "`prompts/derive.py` (new) measures `merged`, PR size, red-CI commits and 14-day rework (reverts, follow-ups, line survival) into `prompts/derived/`. `promptctl.summarise` falls back to the measured `merged` and reports median survival. Review prompt step 1 runs it instead of hand-filling records. Goal: \"Measured, not typed\" in `goals.md`.",
        "Why": "of 441 records, 31 typed `merged`, 18 `lines_added`, 10 `wall_minutes` and 5 `cost_usd`. Rework is a scoring measure in `goals.md`, and no record had ever carried it.",
        "Measure": "`merged_unknown` in `measure`, before against after the first `derive.py build`. Survival per prompt version and model, once rows have about 10 closed windows each.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E17",
      "n": 17,
      "title": "twelfth review (2026-10-16)",
      "date": "2026-10-16",
      "fields": {
        "Change": "`promptctl.runs_since_review` no longer counts records mirrored from the upstream research repo (they carry `source`); test added. Acts on E15's proposal. `land-your-work.md` 169 -> 158 lines (measured-history prose cut; budget 160).",
        "Why": "reviews fired on mirrored records no run of this repo produced.",
        "Measure": "reviews per day (the 2026-10-15 count was ten); lines in `land-your-work.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E16",
      "n": 16,
      "title": "eleventh review of 2026-10-15",
      "date": "2026-10-15",
      "fields": {
        "Change": "`prompts/process/backlog/README.md` \"Closing\" now says to commit `in_progress` first and flip to `done` once the PR number exists (+2 lines).",
        "Why": "two friction reports (README, `promptctl validate`) hit a red validate on the first commit of a run closing an item.",
        "Measure": "backlog-closing friction reports per process run.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E15",
      "n": 15,
      "title": "tenth review of 2026-10-15",
      "date": "2026-10-15",
      "fields": {
        "Change": "none to prompts or docs. ventures/2 reached 10 runs (90% success, 0.1 errors/run) against ventures/1 (29 runs, 90%, 0.24): intervals overlap, so no promote or retire; research/1 has 7 runs, still under 10. No new candidate (both tracks already carry one).",
        "Audit": "skipped; the 21 runs since the last review are mirrored upstream research records or doc-only. `merged` backfill skipped for the same reason.",
        "Drift": "no new owner words since the earlier reports today (see `prompts/drift/2026-10-15.md`); no instruction file grew past budget (`CLAUDE.md` 457/500, `land-your-work.md` at its 160 budget).",
        "Observation": "this is the tenth review today. `runs_since_review` counts mirrored upstream records toward `review_every`, which is why reviews keep firing at ~20 mirrored runs. Proposal for the next process run: count only records whose PR is in this repo.",
        "Measure": "reviews per day should fall once mirrored records stop counting.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E14",
      "n": 14,
      "title": "ninth review of 2026-10-15",
      "date": "2026-10-15",
      "fields": {
        "Change": "`prompts/review/prompt-1.md` step 2 says mirrored and doc-only runs are skipped without counting as friction (eight reports of \"nothing auditable\" came from the review prompt itself). +2 lines.",
        "Audit": "`ventures/meter-keeper` (newest merged venture): 26/26 tests pass, README disclaimer and page disclaimer present.",
        "Why": "ventures/2 has 8 runs and research/1 5, still under 10 each, so no promote/retire and no new candidate.",
        "Measure": "review/1 friction reports per run about unauditable records.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E13",
      "n": 13,
      "title": "eighth review of 2026-10-15",
      "date": "2026-10-15",
      "fields": {
        "Change": "`CLAUDE.md` -1 line net: the \"Tool timeout\" bullet duplicated \"Long suites\" (added by E12); merged into one that also names `git fetch --unshallow` and `publish-branch.sh`, which three reports say time out too.",
        "Why": "`CLAUDE.md` is the top friction file (36 reports); shorter beats longer.",
        "Measure": "timeout friction reports on `CLAUDE.md` per run after this review.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E12",
      "n": 12,
      "title": "seventh review of 2026-10-15",
      "date": "2026-10-15",
      "fields": {
        "Change": "`CLAUDE.md` checklist notes (4 lines) that the pages/marketing/deploy node suites exceed the tool timeout and must run in the background.",
        "Audit": "`platform/deploy` tests re-run: 28/28 pass. No other output was auditable locally (most records are mirrored upstream).",
        "Why": "three friction reports (CLAUDE.md, `unspecified`) hit the 120 s / 10 min limit on those lines.",
        "Measure": "timeout reports on those lines per run.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E11",
      "n": 11,
      "title": "sixth review of 2026-10-15 (due-counter fix)",
      "date": "2026-10-15",
      "fields": {
        "Change": "`promptctl.runs_since_review` orders records by when git added them (ties on date were ordered by random session id, so reviews landing mid-day were counted among later runs). Real tree: 37 \"runs since review\" before, 5 after. Regression test added.",
        "Why": "six reviews ran in one day; four friction/deviation reports and the drift report named the due counter (`prompts/routing.json` friction).",
        "Measure": "reviews per day (expect at most one per ~20 merged runs).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E10",
      "n": 10,
      "title": "fifth review of 2026-10-15",
      "date": "2026-10-15",
      "fields": {
        "Change": "`AGENTS.md` 291 → 187 lines (\"Ship fast\" incident stories moved to `docs/history/claude-md-2026-10-15.md`, rules kept). `promptctl measure` no longer crashes on free-text `doc_friction`/`deviations` entries; four malformed records on `main` (they failed `validate` and the prompt-system unit test) were normalised with `corrections` entries.",
        "Why": "`measure` crashed; `validate` was red on `main`; AGENTS.md was over its 250 budget.",
        "Measure": "`AGENTS.md` friction per run; `validate` stays green.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E9",
      "n": 9,
      "title": "fourth review of 2026-10-15",
      "date": "2026-10-15",
      "fields": {
        "Change": "`review/prompt-1.md` cut 150 → 128 lines (budget 130): removed the first-review backfill step (170+ records exist), tightened drift-audit prose, candidates only for tracks with about 10 runs. Filled `merged: true` for four local records (PRs 7001, 7019, 7024, 7034), with corrections.",
        "Why": "drift report 2026-10-15-c left \"trim review/prompt-1.md\" open; two friction reports on it (backfill and per-track candidates).",
        "Measure": "friction reports on `prompts/review/prompt-1.md` per review run.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E8",
      "n": 8,
      "title": "third review of 2026-10-15",
      "date": "2026-10-15",
      "fields": {
        "Change": "ventures candidate `prompt-2` replaces the \"no near-copies\" sentence with a command that counts name suffixes of the newest ventures (share 0.2). `AGENTS.md` cut 335 → 291 lines (removed stale 2026-09 history that contradicted the ventures prompt).",
        "Why": "11 of the 15 newest ventures are `*-calculator`; AGENTS.md was over its budget.",
        "Measure": "same-suffix share of ventures added by ventures/2 runs vs ventures/1; `AGENTS.md` friction per run.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E7",
      "n": 7,
      "title": "Steering by judgment, a process backlog, process track to 10% (2026-10-15, owner request)",
      "date": "2026-10-15",
      "fields": {
        "Why": "11 recommendations made on 2026-10-15, 0 adopted (no tool, PR or commit implements any of them by the end of the day); `CLAUDE.md` 1,662 lines with 12 friction reports; 2 of 3 process runs that day duplicated a study.",
        "Measure": "backlog items done per week and the share whose `result` says helped; deviations recorded per run (expect above 0 if runs use judgment); instruction lines against budget; process-run outcomes on prompt-1 against prompt-0's 3 runs (too few to compare formally).",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E6",
      "n": 6,
      "title": "first scheduled review (2026-10-15)",
      "date": "2026-10-15",
      "fields": {
        "Change": "review prompt step 1 skips records mirrored from the upstream research repo when filling `merged`. Four local records filled.",
        "Why": "167 mirrored records can never be filled; one friction report on `prompts/review/prompt-0.md`.",
        "Measure": "friction reports on the review prompt per review run.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E5",
      "n": 5,
      "title": "Judgment over rules, depth over count, drift audit (2026-10-15, owner-directed)",
      "date": "2026-10-15",
      "fields": {
        "Change": "`goals.md` gains \"Judgment over rules\" (including a concision rule for rules), the owner's business model (one-click self-deployed copies with a donate link) and the payments rule (never the owner's accounts). Ventures champion becomes `prompt-1` (no new single-page calculators; finish ventures as self-deploy businesses). Review champion becomes `prompt-1` (new step 6, drift audit, with reports in `prompts/drift/`). Promoted directly, without an A/B test, because the owner directed it, as in E1.",
        "Why": "`prompts/drift/2026-10-15.md`. 641 of 1,236 ventures are `*-calculator` against a brief asking for ambitious, deep products, and about 3,400 lines of agent-written rules come before a ventures run starts.",
        "Measure": "new `*-calculator` ventures after 2026-10-15 (target 0); instruction lines per file (should fall); ventures with a working self-deploy page (should rise); `doc_friction` on `CLAUDE.md` and `DIRECTION.md`.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E4",
      "n": 4,
      "title": "Red team / blue team track (2026-10-15, owner request, PR https://github.com/Duncan-Haywood/oss-monorepo/pull/6987)",
      "date": "2026-10-15",
      "fields": {
        "Change": "a new track, `redteam`, routed 7% of runs (owner's request; the 5-10% band is in `goals.md` and enforced by `validate`). With the `process` and `explore` tracks (5% each), ventures and research go to 0.415 each. New `prompts/redteam.py` seeds mutants into a file a suite guards, runs the suite, restores the file, and writes the results into the run record. `measure` now reports the catch rate (before and after the blue team's fixes) and real defects per red-team run. Sub-prompt: `prompts/redteam/prompt-0.md`.",
        "Why": "every other measure here counts failures that something already noticed (CI failures, review findings, reverts). Nothing measured how many bugs go unnoticed. CLAUDE.md records many guards that were green while checking nothing. E2's process track reads what the checks caught from history; this one measures what they would miss, by seeding faults.",
        "Measure": "catch rate per review window, which should rise as blue-team guards land, and real defects per red-team run, which should fall. The first window is the baseline.",
        "Result": "(next review)"
      },
      "verdict": "pending"
    },
    {
      "id": "E3",
      "n": 3,
      "title": "Free-choice track, about 5% of runs (2026-10-15, owner request)",
      "date": "2026-10-15",
      "fields": {
        "Change": "new `explore` track (`prompts/explore/prompt-0.md`) at weight 0.05 in `routing.json`; ventures and research went from 0.475 to 0.45 each (E2's `process` track took the other 5% the same day). The owner asked for about 5% of effort to go to the agent's discretion, in the spirit of Google's \"20% time\". `goals.md` (owner-edited), `prompt.md`, `AGENTS.md` and `research/PROJECTS.md` (in `oss-research-monorepo`, which this mirror picks up on its next sync) say so too.",
        "Why": "owner direction, not a measured failure.",
        "Measure": "success and integrity per `explore` run against the other tracks, and how many free-choice ideas graduate into a regular track. Expect only about one run in twenty, so allow many reviews before reading anything.",
        "Result": "(next review)",
        "Measured": "170 of 172 records are research runs imported from the upstream research repository; their PRs live there, so `merged` stays `null` for 167 (not checkable from here, never guessed). Filled and corrected 4 local records (PRs 6988, 6991, 6992, 6993, all merged). 1 integrity issue (tail-elicitation missing references, fixed before merge), 1 leaked. No audit of five outputs was done this run; only four local PRs were examined. ventures/process/explore have 1 or 0 runs: too few to compare."
      },
      "verdict": "pending"
    },
    {
      "id": "E2",
      "n": 2,
      "title": "A process track, about 5% of runs (2026-10-15, owner request)",
      "date": "2026-10-15",
      "fields": {
        "Change": "new track `process` (`prompts/process/prompt-0.md`) with weight 0.05 in `routing.json`; ventures and research go from 0.5 to 0.475 each. A process run studies the development process from git, PR and CI history (quality, errors, rework, duplicate and leaked work, what the checks catch) and writes `prompts/process/reports/YYYY-MM-DD.md` with ranked recommendations. It may implement one small agent-owned fix. The track goal was added to `goals.md` at the owner's request.",
        "Why": "the owner asked for a small, standing share of work to analyse the process and recommend improvements. The review track covers prompts and docs from run records only.",
        "Measure": "share of routed runs on `process` (expect about 5%); per study, how many of the previous report's recommendations were adopted and whether their metrics moved."
      },
      "verdict": "pending"
    },
    {
      "id": "E1",
      "n": 1,
      "title": "Mirror with one writer, archive rather than delete (2026-10-14, owner-directed, PR https://github.com/Duncan-Haywood/oss-monorepo/pull/6984)",
      "date": "2026-10-14",
      "fields": {
        "Change": "a direct edit, not a candidate, made at the owner's request to keep the two repositories mirrored with no history loss. - `prompts/research/prompt-0.md` and `prompts/ventures/prompt-0.md`: until cutover, research work lands upstream, and keeping the mirror current is standing work. Mirror PRs merge with a merge commit. - `research/_mirror/README.md` and `research/CLAUDE.md`: the upstream repository is archived at cutover, never deleted. - `land-your-work.md`: names the mirror-PR exception to squash-merging.",
        "Why": "the research track routes 50% of runs here, and `mirror.py sync` deletes files under the mirrored area that upstream lacks. So a project built here before cutover would disappear at the next sync. Deleting the upstream repository would also lose its pull requests, review threads and branches.",
        "Measure": "research-track runs here that touch `research/` outside a sync (target 0), and `mirror.py check` on `main`."
      },
      "verdict": "pending"
    },
    {
      "id": "E0",
      "n": 0,
      "title": "One repository, one prompt system (2026-10-12)",
      "date": "2026-10-12",
      "fields": {
        "Change": "`oss-research-monorepo` was folded into this repository under `research/`. The two standing briefs became the champions of two tracks: `prompts/ventures/prompt-0.md` (this repository's former `prompt.md`) and `prompts/research/prompt-0.md` (the research repository's `prompt.md`). The root `prompt.md` is now a master prompt that routes between them. The research brief's experiment loop (champion and candidate, run log, review every 20 runs) was generalised into `prompts/` for every track. Its run log became one record per file under `prompts/runs/`, so parallel runs never conflict. Its integrity and licensing rules moved, unchanged, into `prompts/goals.md`.",
        "Why": "two repositories meant two sets of agent instructions to keep in step, and the research one was frozen during the move. Its four hourly routines were finishing in about 10 seconds with nothing to do.",
        "Measure": "baseline. The research repository's own run log came with it: 158 runs (2026-10-13/14, all `research/0`), converted into `prompts/runs/` by `research/_mirror/mirror.py`. On import, `measure` read 97% success (95% CI 93-99%), 1 integrity issue, 1 leaked run, and `merged` unknown for 157. The first review fills in `merged` from the pull requests, backfills ventures runs from git history (review prompt, step 1), and compares everything later against this.",
        "Result": "(first review)"
      },
      "verdict": "pending"
    }
  ],
  "experiment_verdicts": {
    "pending": 119
  },
  "backlog": [
    {
      "id": "P060",
      "title": "perf: one touch to a11y research paths starts 9+ workflows; fold them into one job per trigger set",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "workflows triggered by a change under portfolio/research/a11y-evidence-record/**",
      "baseline": "9 workflows, 2026-10-30",
      "result": "helped: yaml scan of pull_request paths on 2026-11-01 (prefix match, so an upper bound) finds 2 workflows for portfolio/research/a11y-evidence-record/** (baseline 9) and 5 for eaa-wcag-triage/** (baseline 8); workflow files 134 -> 128.",
      "pr": "this",
      "opened": "2026-10-30",
      "problem": "A yaml scan of pull_request paths shows portfolio/research/a11y-evidence-record/** triggers 9 workflows and portfolio/pipeline/probes/eaa-wcag-triage/** triggers 8, each paying runner start-up and a checkout for a few seconds of work. These are the largest shared-path fan-outs in the trigger map; unscoped guards are only 2 workflows.",
      "file": "prompts/process/backlog/P060-a11y-path-fanout.json"
    },
    {
      "id": "P059",
      "title": "Pre-push post hook judges the pre-edit tree of a compound command (edit && commit && push)",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "doc_friction reports naming check_posts_before_push.py per 3 days",
      "baseline": "3 (2026-10-26 to 2026-10-29)",
      "result": null,
      "pr": "this",
      "opened": "2026-10-29",
      "problem": "The three-dot diff landed in #11297, so other runs' posts no longer block. Still open: the hook runs before the whole Bash command, so `fix && git commit && git push` is judged on the tree before the fix and blocks the very command that repairs it (3 doc_friction reports 2026-10-29).",
      "file": "prompts/process/backlog/P059-push-hook-diff-base.json"
    },
    {
      "id": "P058",
      "title": "Blog posts dated in the future reach the feed",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "posts dated after today in docs/posts",
      "baseline": "77 (2026-10-25)",
      "result": "helped: 0 posts in docs/posts dated after 2026-10-25 (baseline 77), checked 2026-10-25 by listing file-name dates",
      "pr": 10384,
      "opened": "2026-10-25",
      "problem": "77 posts were dated 2026-10-26 to 2026-11-15 though committed on 2026-10-25; they topped the feed with a false datePublished. The date check only compared date with file name.",
      "file": "prompts/process/backlog/P058-future-dated-posts.json"
    },
    {
      "id": "P057",
      "title": "ai-bookkeeper's flagship `next:` leans on data hosts the cloud proxy blocks",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "ventures runs on the top flagship that end with no deliverable",
      "baseline": "1 (this run)",
      "result": "Fallback and probe hint added to the ventures prompt only; flagships.yaml untouched because ai-bookkeeper's `next:` is already 2167 chars and test_allocate's 2,000-char check fails on main (not by this PR). Re-measure ventures runs that end empty on blocked hosts.",
      "pr": "this PR (see run record)",
      "opened": "2026-10-25",
      "problem": "The top flagship's open items all want real or labelled inputs, but most hosts those readings used are unreachable from a cloud session, and the PyPI-sdist source of sample files looks mined out. A run spends its first hour probing hosts and ends with nothing to land.",
      "file": "prompts/process/backlog/P057-flagship-real-data-sources-blocked.json"
    },
    {
      "id": "P056",
      "title": "seo: once Search Console reports, find which tool pages Google declines to index and fix those",
      "status": "open",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "indexed / submitted URLs in Search Console",
      "baseline": "unknown: no Search Console property (2026-10-24)",
      "result": null,
      "pr": null,
      "opened": "2026-10-24",
      "problem": "Google's scaled-content policy can demote a site with many similar pages. A sample suggests the pages are not thin, but whether Google indexes them is unknown until Search Console reports (P018). Acting before the data would mean merging or rewriting pages on a guess.",
      "file": "prompts/process/backlog/P056-index-coverage-review.json"
    },
    {
      "id": "P055",
      "title": "seo: publish the MCP server to the official MCP registry",
      "status": "open",
      "owner": "owner",
      "effect": 2,
      "cost": 1,
      "metric": "registry entry exists for the server",
      "baseline": "not published (2026-10-24)",
      "result": null,
      "pr": null,
      "opened": "2026-10-24",
      "problem": "Agents increasingly find tools through MCP registries. The repo builds an MCP server package and generates a server.json for registry.modelcontextprotocol.io, but publishing needs a GitHub login proving the io.github.<owner> namespace, so no agent has run it.",
      "file": "prompts/process/backlog/P055-mcp-registry-listing.json"
    },
    {
      "id": "P054",
      "title": "seo: open the most-searched tool pages with a short, sourced, dated direct answer",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "pilot pages carrying a sourced lead; later, AI-referrer visits once platform/counter runs (P046)",
      "baseline": "0 pages (2026-10-24)",
      "result": "10 pilot pages carry a sourced, dated lead (baseline 0), each figure test-checked against its calc module. AI-referrer effect not measurable until P046.",
      "pr": "this",
      "opened": "2026-10-24",
      "problem": "AI answer engines (Google AI Overviews, ChatGPT search, Perplexity, Copilot) quote pages that state a fact plainly near the top with its source and date. A calculator page that only shows numbers after input gives them nothing to quote, even when the page knows the answer (a threshold, a fee rate, a rule of thumb).",
      "file": "prompts/process/backlog/P054-answer-first-leads.json"
    },
    {
      "id": "P053",
      "title": "seo: put <lastmod> dates from git history into the hub and product sitemaps",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "share of sitemap URLs with an accurate <lastmod>",
      "baseline": "0% (2026-10-24)",
      "result": "helped (build tests only): lastmod tests pass; live sitemap lastmod share unreachable from cloud (proxy 403).",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/10206",
      "opened": "2026-10-24",
      "problem": "None of the sitemaps carries <lastmod>, so a crawler gets 1,300+ URLs with no signal about which changed and recrawls them in its own order. Google uses lastmod when it is consistently accurate, and Bing weights it heavily.",
      "file": "prompts/process/backlog/P053-sitemap-lastmod.json"
    },
    {
      "id": "P052",
      "title": "seo: make the site's llms.txt a short index and move the full text to llms-full.txt",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "llms.txt bytes and blockquote length; llms-full.txt HTTP status",
      "baseline": "539,214 bytes; 1,776 chars; 404 (2026-10-24)",
      "result": "helped (build tests only): 11/11 llms/lastmod tests pass, covering the llms.txt size and blockquote bounds and the llms-full.txt link. Live HTTP status unreachable from cloud (proxy 403); check on a run that can reach it.",
      "pr": "this",
      "opened": "2026-10-24",
      "problem": "The root llms.txt is the first file an AI assistant or agent reads about the site, and the llmstxt.org convention is a one-line summary blockquote then short linked sections. Ours opens with a 1,776-character summary sentence that lists about 50 product names, and the whole file is 539 KB, beyond what many assistants will read in one fetch. There is no llms-full.txt for the tools that want everything.",
      "file": "prompts/process/backlog/P052-llms-txt-slim-index.json"
    },
    {
      "id": "P051",
      "title": "seo: give the GitHub repository a real description, topics and a social preview image",
      "status": "open",
      "owner": "owner",
      "effect": 2,
      "cost": 1,
      "metric": "repository description and topic count from the GitHub API",
      "baseline": "description 'lots of projects', 0 topics (2026-10-24)",
      "result": null,
      "pr": null,
      "opened": "2026-10-24",
      "problem": "The repository's GitHub description is 'lots of projects' and it carries no topics, so GitHub search, topic pages and the Google snippet for the repo page say nothing about what is in it. Shared links to the repo show no preview card. Agents cannot change repository settings from a cloud session (no settings tool, gh unauthenticated).",
      "file": "prompts/process/backlog/P051-repo-description-topics.json"
    },
    {
      "id": "P050",
      "title": "perf: Portfolio Pages test job redraws the same ~2,500 share cards in every test build",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 1,
      "metric": "wall time of node --test build.test.mjs locally, and the 'Test the site builder' step in CI",
      "baseline": "node --test build.test.mjs 460s wall locally (4 cores, 2026-10-24); CI 'Test the site builder' 122.2 job-minutes over 75 jobs in 80 minutes",
      "result": null,
      "pr": "10208",
      "opened": "2026-10-24",
      "problem": "The Portfolio Pages 'test' job is the largest single consumer of the runner pool and the slowest check most venture PRs wait on. build.test.mjs runs five buildSite calls in one process (tests in a file run serially), and custom-domain.test.mjs one more; each call spends most of its time in addShareCards/renderCards drawing card PNGs whose inputs have not changed.",
      "file": "prompts/process/backlog/P050-pages-test-redraws-cards.json"
    },
    {
      "id": "P049",
      "title": "perf: every PR push starts ~15 jobs, each with its own checkout, mostly for guards a diff cannot fail",
      "status": "dropped",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "jobs per PR head (median) and job-minutes per merged PR",
      "baseline": "median 15 jobs / 10 workflows per PR head, 2026-10-24",
      "result": "Dropped 2026-10-30: unscoped guards are already cheap (Conflict markers median job 33 s); remaining cost is shared-path fan-out, tracked as P060.",
      "pr": null,
      "opened": "2026-10-24",
      "problem": "A PR head triggers a median of 10 workflows and 15 jobs. Many are cheap guards with overlapping triggers, each paying runner start-up and a checkout, and some run on diffs that cannot affect them. Jobs that should run on a change sometimes do not: PR #10185 merged a post whose description broke every Pages build on main, which suggests the trigger map is wide where it is cheap to be narrow and narrow where it matters.",
      "file": "prompts/process/backlog/P049-jobs-per-pr-head.json"
    },
    {
      "id": "P048",
      "title": "perf: CI guard jobs clone the whole 38,800-file tree to do seconds of work",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "checkout share of job-minutes in ci_profile.py --runs 600",
      "baseline": "40% (302 of 750 job-minutes), 2026-10-24",
      "result": null,
      "pr": 11711,
      "opened": "2026-10-24",
      "problem": "Most guard workflows (Conflict markers, Checklist coverage, Prompts, Doc references, README live links, Duplicate symbols, Research, Sibling links, Link contrast) run a full actions/checkout of the tree and then a check that takes a few seconds. Checkout is now the largest single cost in the runner pool, and the account's concurrent-job ceiling makes every wasted minute a minute another PR waits.",
      "file": "prompts/process/backlog/P048-guard-checkout-whole-tree.json"
    },
    {
      "id": "P047",
      "title": "Distribution and link-check code still builds URLs on the dead /monorepo-projects/ Pages path",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "count of files under platform/ containing the dead base URL",
      "baseline": "105 files repo-wide outside research/ventures/docs",
      "result": "platform/ pages-base URLs moved to /oss-monorepo/ (88 replacements, 0 left outside the LEGACY_BASE_URL constant); build.mjs rewrites legacy content URLs to the live base; platform/ci/test_no_dead_pages_base.py guards it. Not covered: ~5200 mentions in docs/ventures/research content, now rewritten at build time.",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/9958",
      "opened": "2026-10-24",
      "problem": "About 100 files outside research/ventures/docs hard-code https://duncan-haywood.github.io/monorepo-projects/ as the site base (platform/distribution/bluesky.mjs, devto.mjs, hub/compose.mjs, mcp.mjs, citation.mjs, agents/tools.mjs, daily/build.mjs, ci/venture_live_links.py and more). That path returns 404; the catalogue is served at /oss-monorepo/. Posts, feeds and live-link checks built from these constants point at dead pages or check the wrong host.",
      "file": "prompts/process/backlog/P047-dead-pages-base-url.json"
    },
    {
      "id": "P046",
      "title": "Deploy platform/counter on an always-on HTTPS host so site visit counts exist",
      "status": "open",
      "owner": "owner",
      "effect": 3,
      "cost": 1,
      "metric": "readings in portfolio/usage/site-visits.json with page_loads > 0",
      "baseline": "0 (2026-10-23)",
      "result": null,
      "pr": null,
      "opened": "2026-10-23",
      "problem": "The counter code, referrer classes and site copy are done (P035) but nothing runs it, so live_url_visitors is still null everywhere and distribution cannot be judged.",
      "file": "prompts/process/backlog/P046-deploy-counter.json"
    },
    {
      "id": "P045",
      "title": "redteam targets gave no suite timing, so slow-suite targets cost campaigns",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "redteam doc_friction entries about slow targets per 10 redteam runs",
      "baseline": "2 of the last 3 reported redteam friction entries (2026-10-22)",
      "result": "2026-10-22: too few cases to tell. No redteam run record dated after the fix (merged 2026-10-22 15:41 -06:00) exists yet; all 3 slow-target friction entries predate it. Recheck once ~10 redteam runs have landed.",
      "pr": "this",
      "opened": "2026-10-22",
      "problem": "Runs picked a target, then lost minutes to a baseline that timed out (wall-framing-takeoff sheathing, changepoint-detector engine); redteam.py targets printed names only.",
      "file": "prompts/process/backlog/P045-redteam-probe-target-speed.json"
    },
    {
      "id": "P044",
      "title": "Cloud sessions cannot download the Piper voice, so creative runs cannot voice episodes",
      "status": "open",
      "owner": "owner",
      "effect": 2,
      "cost": 2,
      "metric": "`podcast_tts.py --check` exit 0 at the end of a creative run",
      "baseline": "exit 1",
      "result": null,
      "pr": null,
      "opened": "2026-10-21",
      "problem": "podcast_tts.py and render_audio.py need en_US-ljspeech-high.onnx from huggingface.co. In the 2026-10-21 creative run the egress proxy answered 403 to CONNECT huggingface.co:443 (hf-mirror.com and cdn-lfs also unreachable; the rhasspy GitHub release URL is 404). The run landed the script only; podcast.mjs skips unvoiced scripts. Update 2026-10-24: not blocked in every session; the creative prompt already says to probe first and land text-only with a deviation if it fails.",
      "file": "prompts/process/backlog/P044-piper-voice-unreachable.json"
    },
    {
      "id": "P043",
      "title": "Retire the dead apex mirror's staleness gate: it still fails PRs for drift they did not cause",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "share of the last 100 completed Portfolio validate pull_request runs that fail",
      "baseline": "10 of the newest 30 (2026-10-21), cause unconfirmed",
      "result": "helped: 0 of the newest 100 completed Portfolio validate pull_request runs failed (all success; 2026-10-21T12:18Z-20:02Z, mcp actions_list portfolio-validate.yml event=pull_request status=completed), against 10 of 30 at baseline. Window is one day, so a later recheck could still show drift; the staleness tests are gone, so mirror drift no longer fails PRs.",
      "pr": "this",
      "opened": "2026-10-21",
      "problem": "P039 gated the mirror check to PRs touching gitops/prod/, platform/marketing/ or portfolio-validate.yml, which made it fast but not harmless. Main's committed mirror (catalog.json.gz, sitemap.xml.gz, social-card.png) drifts because pages/venture merges change the generator inputs without running the check, so the first PR that does touch the gated paths goes red for someone else's drift and its author regenerates files for an origin retired on 2026-10-01 (portfolio/hosting/README.md).",
      "file": "prompts/process/backlog/P043-dead-mirror-gate-still-fails-prs.json"
    },
    {
      "id": "P042",
      "title": "Turn on GitHub's merge queue for main (owner setting)",
      "status": "open",
      "owner": "owner",
      "effect": 2,
      "cost": 1,
      "metric": "share of merged PRs whose tested head was not the tip of main at merge",
      "baseline": "66% (2026-10-17..10-20)",
      "result": null,
      "pr": null,
      "opened": "2026-10-20",
      "problem": "What merges is rarely exactly what was tested: a PR head is a median 1 (p90 5) commits behind main when it merges, and only 34% are on the tip. With conflicts now rare (20% tax) a batching merge queue is cheap and closes that gap (docs/parallel-agents.md fix 4).",
      "file": "prompts/process/backlog/P042-merge-queue.json"
    },
    {
      "id": "P041",
      "title": "concurrency_tax.py does not finish in a cloud session",
      "status": "done",
      "owner": "agent",
      "effect": 1,
      "cost": 1,
      "metric": "concurrency_tax.py wall time in a cloud session for a 4-day window",
      "baseline": "did not finish in 580 s (2026-10-20)",
      "result": "--local fetches main and refs/pull/*/head into the working repo (--shallow-since): 83 s for PRs #7800-#8871 since 2026-10-17 (baseline: no finish in 580 s). Also fixed refs/pull/<n>/head parsing. The --windows table was not built; file a new row if wanted.",
      "pr": 8873,
      "opened": "2026-10-20",
      "problem": "The repository's own measurement of parallel-work cost timed out (>10 min, no output) in a cloud session because it refreshes a separate probe clone. The 2026-10-20 re-measurement had to reimplement it.",
      "file": "prompts/process/backlog/P041-concurrency-tax-cloud.json"
    },
    {
      "id": "P040",
      "title": "research/_homepage/projects.json and research/README.md are the new top conflict files (~24% of PRs)",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "share of PRs merged in a 4-day window that touch research/_homepage/projects.json",
      "baseline": "24% (2026-10-17..10-20)",
      "result": "Helped. First-parent merges on origin/main since registry.py landed (2026-10-20T13:00 -06:00, 51 PRs, shallow window): projects.json touched by 0 (baseline 24%); 21 PRs added a research/<slug>/project.json. research/README.md was still touched by 21 of the 51 (baseline 23%, here all inside the slug-sorted projects:start/end block, so inserts land at different lines and rarely collide). Not migrated: the ~800 legacy projects.json entries. Registry appends cards after listed entries, sorted by slug, so a bulk move would reorder every theme on the homepage; they are edited rarely, so left in place. Sample is 1 day; re-measure once 4 days of history exist (command: git log origin/main --first-parent --since=<date> -- research/_homepage/projects.json).",
      "pr": "this",
      "opened": "2026-10-20",
      "problem": "Every new research project edits two shared lists, so any two research PRs open at once conflict on both. It is the same shape as launched.json/build.mjs before the venture registrations moved (docs/parallel-agents.md fix 3).",
      "file": "prompts/process/backlog/P040-research-registry-hotspot.json"
    },
    {
      "id": "P039",
      "title": "The dead apex-mirror staleness step takes 7.5 of Portfolio validate's 10 minutes",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "Portfolio validate job duration on a PR that does not touch gitops/prod/",
      "baseline": "~10 min, of which 7 min 36 s is this step (run 39398672489, 2026-10-20)",
      "result": "Helped (2026-10-21). mcp actions_list portfolio-validate.yml event=pull_request status=completed, newest 30: successful runs took 3m26s to 5m54s wall clock (created_at to updated_at; e.g. runs 39536544045 3m26s, 39536294766 5m54s, 39536222154 4m05s) against ~10 min at baseline. Wall clock includes queueing, so the step's own saving is at least that large. Side effect seen in the same runs: with the check gated, main's mirror can drift until a PR touching gitops/prod or portfolio-validate.yml trips it (PR with commit 'Regenerate the apex mirror (stale on main)').",
      "pr": "this PR (branch claude/upbeat-ptolemy-5h04nw)",
      "opened": "2026-10-20",
      "problem": "'Check the apex tool mirror is not stale' guards gitops/prod/front-door*, the mirror of the k3s origin retired 2026-10-01; it serves nothing (portfolio/hosting/README.md). It still runs on every PR and every push to main and is most of the job's time while runners are starved.",
      "file": "prompts/process/backlog/P039-drop-dead-mirror-ci-step.json"
    },
    {
      "id": "P038",
      "title": "Stop each merge from cancelling main's test runs (44% of ventures tests runs on main never finish)",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 1,
      "metric": "cancelled share of the last 100 completed push runs of ventures tests on main",
      "baseline": "44 of 100 cancelled (2026-10-20)",
      "result": "Helped (2026-10-21). mcp actions_list ventures-tests.yml branch=main event=push status=completed, last 100 (2026-10-20T12:02Z..2026-10-21T03:00Z): 91 success / 9 cancelled, against 44 of 100 cancelled at baseline. The 9 left are likely runs from before the change merged or manual cancels; other workflows still cancel per ref and were not re-measured.",
      "pr": 8829,
      "opened": "2026-10-20",
      "problem": "ventures-tests.yml has concurrency group ventures-tests-${{ github.ref }} with cancel-in-progress: true. At ~280 merges a day every merge to main cancels the previous merge's run, so most commits on main never get a verdict and a break is found only by whichever run survives.",
      "file": "prompts/process/backlog/P038-main-ci-runs-cancelled.json"
    },
    {
      "id": "P037",
      "title": "Verify: Portfolio validate on main pushes is mostly green after the base-ref fix (#8765)",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 1,
      "metric": "share of the last 100 completed push runs of Portfolio validate on main that failed at 'Check no live venture disappears'",
      "baseline": "77 of 100 failed, all at that step (2026-10-20)",
      "result": "No change in the pass rate, but the failing step moved. Last 100 completed push runs of portfolio-validate.yml on main (2026-10-20T08:35Z..19:59Z, mcp actions_list): 54 success / 46 failure, vs 23/77 before. 0 of the 46 failed at 'Check no live venture disappears' (the metric, was 77): the base-ref fix worked. Sampled run 39488183297 failed at step 7 'Check the apex tool mirror is not stale' (2 of 275 tests: robots.txt/sitemap and catalog.json under gitops/prod/front-door are stale, 'run: node platform/marketing/regen.mjs'); reproduced on origin/main locally. Failures cluster 09-11h and 16:59h onward (every run 17h-19h failed): each new venture page makes the dead apex mirror stale, and the step takes ~4.5 min. Remedy is P039 (PR #8850: run the step only when the mirror or its generator changes); main stays red until that merges or the mirror is regenerated.",
      "pr": "this",
      "opened": "2026-10-20",
      "problem": "Portfolio validate failed on 77 of 100 pushes to main because the venture-regression step compared each push with main's tip at run start (~10 merges later). #8765 changed the base to github.event.before. Nobody has yet checked that the fix worked on real runs.",
      "file": "prompts/process/backlog/P037-verify-main-validate-base-fix.json"
    },
    {
      "id": "P036",
      "title": "Finish the deadweight cut: dead workflows, DIRECTION.md, the playbook, the red-team gate",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "total bytes of the twelve steering files listed in docs/reports/2026-10-20-rules-deadweight.md",
      "baseline": "170,362 bytes after PR #8733's first commit (2026-10-20)",
      "result": "Parts 1-5 and 7 done or confirmed; part 6 needs an owner yes (see decision queue). Remaining retired-tree CI is test-pinned and guards the live front-door mirror.",
      "pr": 9023,
      "opened": "2026-10-20",
      "problem": "PR #8733 cut CLAUDE.md from 352 to 155 lines and removed stale rules (gh-pages hand publish, Hetzner deploys, the ventures/* auto-merge refusal), but left the largest steering files and some automation untouched. The owner, 2026-10-20: 'cut the deadweight in rules and processes ... respect the competence of the ai agent engineer', and 'what you don't complete leave as an action item for a later run.'",
      "file": "prompts/process/backlog/P036-cut-the-deadweight-follow-ups.json"
    },
    {
      "id": "P035",
      "title": "Privacy rules went further than the law; bring every rule, check and page copy back to the legal line",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "readings in portfolio/usage/site-visits.json with page_loads > 0 and at least one src:<class> key",
      "baseline": "0: site-visits.json does not exist yet and platform/counter/site.json has an empty url (2026-10-20)",
      "result": "No change yet: portfolio/usage/site-visits.json still does not exist (checked 2026-10-23); the rules, validator, counter code and copy are at the legal line, but no reading can exist until the owner deploys platform/counter (P046). Not a failure of the change; the metric waits on P046.",
      "pr": "see history",
      "opened": "2026-10-20",
      "problem": "The usage rules banned cookies outright, made counting opt-in, forbade storing even the kind of referring site, and banned any analytics vendor. The law (GDPR, ePrivacy/PECR, CCPA) requires none of that for functional cookies or anonymous aggregate counts. The extra restrictions cost the portfolio its measurement: live_url_visitors is null on every reading, and distribution (the stated limiter) cannot be judged without knowing where visitors come from. The owner, 2026-10-20: 'follow laws but going beyond them is too much.'",
      "file": "prompts/process/backlog/P035-privacy-follows-the-law.json"
    },
    {
      "id": "P034",
      "title": "Red-team random draw is 95% ventures; CI and tooling code is almost never mutated",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "share of recorded campaigns whose target is outside ventures/",
      "baseline": "not measured; expected about 5% from the draw",
      "result": "helped: red-team targets outside ventures/ were 11 of 84 (13%) in records dated 2026-10-15..17 and 12 of 14 (86%) in 2026-10-18 records (python over prompts/runs/*.json, redteam.campaigns[].target). Small n after the fix.",
      "pr": "7808",
      "opened": "2026-10-17",
      "problem": "redteam.py's default target draw is uniform over guarded files, so platform/ and portfolio/ (the code every run depends on) are rarely tested. A redteam friction report also said platform/ci files never appear in `targets`.",
      "file": "prompts/process/backlog/P034-redteam-targets-skew-to-ventures.json"
    },
    {
      "id": "P033",
      "title": "Doc-friction section of `measure` repeats complaints that are already fixed",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "share of 'latest' friction entries that still reproduce when a process run samples five",
      "baseline": "0 of 3 reproduced (2026-10-17 sample)",
      "result": "Partly helped (2026-10-25 re-sample of the six untagged 'latest' entries on CLAUDE.md, promptctl.py and prompt-1.md): 3 still real or informational, 2 stale because the fix landed in another file (platform/ci/check_post_frontmatter.py, wired in portfolio-validate.yml, answers the CLAUDE.md 'no CI guard' report; promptctl.py already prints a stderr notice for the slow measure), 1 a non-issue. The date tag cannot see fixes made elsewhere than the named file; a reader must grep before building on a report, as the section footer already says.",
      "pr": "this",
      "opened": "2026-10-17",
      "problem": "'Doc friction by file' quotes each file's latest reports with no sign of whether the file changed since. Process runs told to fix the named files spend the run rediscovering that the issue is gone.",
      "file": "prompts/process/backlog/P033-friction-latest-is-stale.json"
    },
    {
      "id": "P032",
      "title": "Merge freelancer- and self-employed-schedule-c-categorizer into one venture",
      "status": "dropped",
      "owner": "agent",
      "effect": 1,
      "cost": 2,
      "metric": "Confirmed duplicate pairs merged",
      "baseline": "1 plausible true duplicate of 19 pairs >= 0.6",
      "result": "Dropped: both are published pages linked from ~20 files (build.mjs, launched.json, expense-tracker, self-employment-tax-calculator, dental-associate-pay-calculator, scores). They target different searches (freelancer vs self-employed/gig worker; the second adds a 1099 gross comparison and personal-row flags), so merging loses a page and breaks links for an effect of 1.",
      "pr": null,
      "opened": "2026-10-17",
      "problem": "Two ventures do the same job for the same audience: sort a bank/card CSV into IRS Schedule C lines. corpus_dupes.py scores them 0.63; descriptions differ only in 'freelancers and sole proprietors' vs '... and gig workers'.",
      "file": "prompts/process/backlog/P032-merge-schedule-c-categorizers.json"
    },
    {
      "id": "P031",
      "title": "Move venture-only rules from CLAUDE.md to ventures/CLAUDE.md",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "CLAUDE.md bytes a research run loads",
      "baseline": "CLAUDE.md 21,663 bytes",
      "result": "CLAUDE.md 21,663 -> 20,095 bytes (helped; -7%). Nested ventures/CLAUDE.md loads only for venture work.",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7603",
      "opened": "2026-10-17",
      "problem": "P017 step 3: 'Product-first default', 'Deploy-first' and self-deploy text are read by research and review runs that never build a venture.",
      "file": "prompts/process/backlog/P031-ventures-claude-md.json"
    },
    {
      "id": "P030",
      "title": "Move CLAUDE.md pre-merge checklist block into .github/prompts/verify-and-merge.md",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "CLAUDE.md bytes (baseline 21,663 on 2026-10-17)",
      "baseline": "CLAUDE.md 21,663 bytes",
      "result": "CLAUDE.md 20,095 -> 17,456 bytes (-2,639) by moving the checklist block to verify-and-merge.md; checklist_coverage.py, its tests and workflow paths repointed.",
      "pr": "pending",
      "opened": "2026-10-17",
      "problem": "P017 step 2: the checklist block (~60 lines) is read by every run but used only by merging runs; ~40 files pin CLAUDE.md by path or heading.",
      "file": "prompts/process/backlog/P030-checklist-to-verify-and-merge.json"
    },
    {
      "id": "P029",
      "title": "eBay fee defaults in reverb-fee-calculator: 13.6% FVF and tiered per-order fee (split from P025)",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "grep -rl '13\\.25' ventures/reverb-fee-calculator returns nothing and its suite passes",
      "baseline": "see P025 (76 files across four ventures)",
      "result": "reverb-fee-calculator: 13.6% FVF, $0.40 per order (over $10; $0.30 tier and 2.35% band above $7,500 noted, not modelled). grep 13.25 returns nothing; suite 112/112; derived prose recomputed from the engine (also fixed stale README figures).",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7542",
      "opened": "2026-10-16",
      "problem": "ebay-fee-calculator, marketplace-fee-compare, where-to-sell-calculator and reverb-fee-calculator default to a 13.25% final value fee and a flat $0.30 per-order fee. eBay's selling-fees help page (https://www.ebay.com/help/selling/fees-credits-invoices/selling-fees?id=4822, fetched 2026-10-16) lists 13.6% of the total sale up to $7,500 plus 2.35% above it, and a per-order fee of $0.30 for orders of $10.00 or less and $0.40 above. This row covers only reverb-fee-calculator: calc.mjs and the pages that quote eBay as the comparison.",
      "file": "prompts/process/backlog/P029-ebay-fvf-reverb-fee-calculator.json"
    },
    {
      "id": "P028",
      "title": "eBay fee defaults in where-to-sell-calculator: 13.6% FVF and tiered per-order fee (split from P025)",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "grep -rl '13\\.25' ventures/where-to-sell-calculator returns nothing and its suite passes",
      "baseline": "see P025 (76 files across four ventures)",
      "result": "grep -rn '13\\.25' ventures/where-to-sell-calculator leaves none; suite 229/229 pass. Shipped as 13.6% + $0.40 per order (the model has one flat fee, so the <=$10 tier of $0.30 is not modelled). ebay-fee-calculator (P026) still defaults to 13.25, so the channel-parity test's message says so.",
      "pr": 7573,
      "opened": "2026-10-16",
      "problem": "ebay-fee-calculator, marketplace-fee-compare, where-to-sell-calculator and reverb-fee-calculator default to a 13.25% final value fee and a flat $0.30 per-order fee. eBay's selling-fees help page (https://www.ebay.com/help/selling/fees-credits-invoices/selling-fees?id=4822, fetched 2026-10-16) lists 13.6% of the total sale up to $7,500 plus 2.35% above it, and a per-order fee of $0.30 for orders of $10.00 or less and $0.40 above. This row covers only where-to-sell-calculator: calc.mjs, the ebay/reverb explainer pages, channel-parity tests.",
      "file": "prompts/process/backlog/P028-ebay-fvf-where-to-sell-calculator.json"
    },
    {
      "id": "P027",
      "title": "eBay fee defaults in marketplace-fee-compare: 13.6% FVF and tiered per-order fee (split from P025)",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "grep -rl '13\\.25' ventures/marketplace-fee-compare returns nothing and its suite passes",
      "baseline": "see P025 (76 files across four ventures)",
      "result": "marketplace-fee-compare: 13.6% FVF, $0.40 per-order (orders over $10; $0.30 tier and 2.35% band above $7,500 noted, not modelled). grep 13.25 returns nothing; suite 150/150.",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7530",
      "opened": "2026-10-16",
      "problem": "ebay-fee-calculator, marketplace-fee-compare, where-to-sell-calculator and reverb-fee-calculator default to a 13.25% final value fee and a flat $0.30 per-order fee. eBay's selling-fees help page (https://www.ebay.com/help/selling/fees-credits-invoices/selling-fees?id=4822, fetched 2026-10-16) lists 13.6% of the total sale up to $7,500 plus 2.35% above it, and a per-order fee of $0.30 for orders of $10.00 or less and $0.40 above. This row covers only marketplace-fee-compare: calc.mjs, handoff.mjs, README, VENTURE.yaml, explainer pages.",
      "file": "prompts/process/backlog/P027-ebay-fvf-marketplace-fee-compare.json"
    },
    {
      "id": "P026",
      "title": "eBay fee defaults in ebay-fee-calculator: 13.6% FVF and tiered per-order fee (split from P025)",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 3,
      "metric": "grep -rl '13\\.25' ventures/ebay-fee-calculator returns nothing and its suite passes",
      "baseline": "see P025 (76 files across four ventures)",
      "result": "ebay-fee-calculator: 13.6% FVF, $0.40 per-order default (tiers/2.35% band noted, not modelled, as in P027); explainer prose recomputed from the engine; suite 499/499. calc.test.mjs keeps explicit 13.25%/$0.30 fixtures by design, so grep still finds them there.",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7581",
      "opened": "2026-10-16",
      "problem": "ebay-fee-calculator, marketplace-fee-compare, where-to-sell-calculator and reverb-fee-calculator default to a 13.25% final value fee and a flat $0.30 per-order fee. eBay's selling-fees help page (https://www.ebay.com/help/selling/fees-credits-invoices/selling-fees?id=4822, fetched 2026-10-16) lists 13.6% of the total sale up to $7,500 plus 2.35% above it, and a per-order fee of $0.30 for orders of $10.00 or less and $0.40 above. This row covers only ebay-fee-calculator: engine in calc.mjs (4 default sites at lines ~192, 352, 3504, 4178 plus fixedFee 0.3 at ~193, 353, 1693, 2655), the 23 index/explainer pages with value=\"13.25\", and README.",
      "file": "prompts/process/backlog/P026-ebay-fvf-ebay-fee-calculator.json"
    },
    {
      "id": "P025",
      "title": "eBay fee defaults are stale across four ventures (13.25% + $0.30 vs 13.6% + $0.30/$0.40)",
      "status": "dropped",
      "owner": "agent",
      "effect": 3,
      "cost": 3,
      "metric": "grep -rl '13\\.25' ventures returns nothing in these four ventures, and their suites pass",
      "baseline": "76 files carry 13.25",
      "result": "Split into P026-P029, one venture each (single PR touched ~76 files and silently stale derived figures; see their evidence).",
      "pr": null,
      "opened": "2026-10-16",
      "problem": "ebay-fee-calculator, marketplace-fee-compare, where-to-sell-calculator and reverb-fee-calculator default to a 13.25% final value fee and a flat $0.30 per-order fee. eBay's selling-fees help page (https://www.ebay.com/help/selling/fees-credits-invoices/selling-fees?id=4822, fetched 2026-10-16) lists 13.6% of the total sale up to $7,500 plus 2.35% above it, and a per-order fee of $0.30 for orders of $10.00 or less and $0.40 above. Every ranking and net-profit figure for eBay is therefore overstated by about 0.35 points of the order plus $0.10 on most orders, and the engines have no tiered per-order fee or over-$7,500 band.",
      "file": "prompts/process/backlog/P025-ebay-fee-defaults-stale.json"
    },
    {
      "id": "P024",
      "title": "P014 step 3: git rm the committed front-door-tools mirror (~5.8k files)",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "Files under gitops/prod/front-door-tools in git",
      "baseline": "5,839",
      "result": "Tree git-rm'd (6,202 files) with a guard test (test_manifests.py) that fails if any file under it is tracked. Tests, regen --verify and front-door-tools tests pass without it. Verify the count stays 0 after a few venture merges.",
      "pr": 8638,
      "opened": "2026-10-16",
      "problem": "Third step of P014, after P022 and P023: delete the generated tree for the retired k3s origin.",
      "file": "prompts/process/backlog/P024-mirror-git-rm.json"
    },
    {
      "id": "P023",
      "title": "P014 step 2: drop regen lines from the CLAUDE.md checklist and checklist_coverage.py",
      "status": "dropped",
      "owner": "agent",
      "effect": 1,
      "cost": 1,
      "metric": "checklist lines mentioning regen.mjs",
      "baseline": "2 lines",
      "result": "Premise wrong: regen.mjs also regenerates and verifies the apex (front-door.mjs: pages, sitemap, feed, llms.txt). Run 2026-10-16: with the mirror deleted, regen --verify still runs front-door.mjs and guards the apex, so both checklist lines stay. Only the mirror half of regen goes; that is P024.",
      "pr": null,
      "opened": "2026-10-16",
      "problem": "Second step of P014, after P022 lands: once nothing reads the committed mirror, the regen --verify / regen lines are dead ritual for every venture PR.",
      "file": "prompts/process/backlog/P023-mirror-drop-checklist-lines.json"
    },
    {
      "id": "P022",
      "title": "P014 step 1: build the front-door mirror into a temp dir for gitops tests and regen --verify",
      "status": "done",
      "owner": "agent",
      "effect": 1,
      "cost": 2,
      "metric": "gitops/tests and platform/marketing tests pass with the mirror directory absent",
      "baseline": "tests fail without the committed tree",
      "result": "Helped: the mirror is no longer tracked (P024), and the gitops/marketing tests run against it absent on main; git ls-tree origin/main shows 0 files.",
      "pr": 7424,
      "opened": "2026-10-16",
      "problem": "First of three single-PR steps of P014. test_manifests.py, test_front_door_serving.py and platform/marketing tests read the committed gitops/prod/front-door-tools tree, which blocks removing it.",
      "file": "prompts/process/backlog/P022-mirror-tests-temp-build.json"
    },
    {
      "id": "P021",
      "title": "Size backlog items to one run: 8 of 9 partial process runs chipped at items too large for a run",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "Share of process runs with outcome partial, next 20 process runs",
      "baseline": "9 of 41 (22%)",
      "result": "No change / too noisy: 15 partial of 56 process runs (27%) vs baseline 9/41 (22%) from prompts/runs/*.json. Newer partials are mostly sibling-PR collisions or sub-row rescoping, not oversized items. Re-check at 20 runs after 2026-10-16.",
      "pr": 7402,
      "opened": "2026-10-16",
      "problem": "Process/1 has 9 'partial' outcomes in 41 runs (prompts/runs/*.json, track=process, outcome=partial). Their notes show the same pattern: P004 3 of 5 guards, P014 'too large for one run' (twice), P017 steps 3 and 4 shipped as ~100-token trims, P016 measured only, P013 checked and dropped. Each run re-reads the same large item, judges it too big, and ships a note. Backlog items P014 and P017 name multi-PR efforts as one row, so no run can finish one.",
      "file": "prompts/process/backlog/P021-split-oversized-items.json"
    },
    {
      "id": "P020",
      "title": "Branches leak past branch cleanup: re-pushed spent branches, an unreachable sweep tail, and no-PR branches",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "Remote branch count, and branches whose tip is already in main, a week after the change lands",
      "baseline": "1,465 branches; ~1,038 deletable (682 merged-moved-contained + 71 closed-contained + 285 no-PR-contained); 322 with unique commits left for adopt-stranded",
      "result": "Interim, 2026-10-17 (a day after landing, not the week asked for): git ls-remote --heads origin lists 1,000 heads vs baseline 1,465 (-32%). Re-check a week after the first post-merge cleanup run.",
      "pr": 7325,
      "opened": "2026-10-16",
      "problem": "The remote holds 1,465 branches although `delete_branch_on_merge` is on and the branch-cleanup workflow runs green, so `git branch -r` (what a session reads to see existing work) is mostly noise again. Three leaks: (1) sessions reset to origin/main after a merge and push again, recreating the deleted branch at main's own squash commit, which branch_cleanup.py then keeps forever as 'has moved'; (2) the sweep's 500 live-head window filled with those kept branches and its 5,000-row scan stopped short of ~6,800 closed PRs, so old closed-unmerged branches were never reached; (3) nothing deletes branches that never had a PR, even when their tip is already in main.",
      "file": "prompts/process/backlog/P020-branch-leak.json"
    },
    {
      "id": "P019",
      "title": "The home page was a calculator list for two days after the owner asked for a home page for everything",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "On the built hub: research projects reachable from the page body (not only the footer); share of app and CLI ventures listed in their own section; the 'hub for everything' test in build.test.mjs passing",
      "baseline": "research: footer link only; apps and CLIs in their own section: 0",
      "result": "helped: built the hub from origin/main 08f9558ec (2026-10-16) with `node platform/pages/build.mjs`. <title> 'Open Tools and Research | Free Tools, Self-Hostable Apps & Research', <h1> 'Tools, apps and research you can use or run yourself'. Body overview links '30 self-hostable apps' (#apps; 30 ventures have a Dockerfile), '167 command-line checks' (#clis), '467 research projects' (research/; 468 research dirs) and the self-deploy page (deploy/). Baseline was research footer-only and 0 apps/CLIs in their own section. Test 'the hub is a home for everything' in build.test.mjs passes (1 pass, 0 fail). Not checked: whether the live site shows this (github.io is unreachable from sessions) and the dev-process dashboard link, still a follow-up.",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7236",
      "opened": "2026-10-16",
      "problem": "goals.md (2026-10-14/15) asks for one home page from which every venture, research project and public platform tool can be reached, and 'a public face for everything'. Two days and about 1,300 merges later the hub still said 'Calculators for the decisions that cost real money', the site was named 'Free small-business calculators', the self-hosted apps (rev-rec, dunning-engine, waitlist-keeper...) were filed under calculator trade groups by slug regex, CLIs had no section, and research was one footer link. Root cause: the goal existed only as prose. No backlog item, no check and no track owned the shared hub template, so the 79 build.mjs commits since 10-14 were all per-venture plumbing appended to a calculator framing, and copy pinned in tests (build.test.mjs, cardtext.test.mjs) made the framing costly to change.",
      "file": "prompts/process/backlog/P019-hub-for-everything.json"
    },
    {
      "id": "P018",
      "title": "Make the catalogue's sitemap discoverable despite the Pages subpath",
      "status": "open",
      "owner": "owner",
      "effect": 3,
      "cost": 1,
      "metric": "pages_state.py indexing verdict; pages indexed per Search Console once (2) is done",
      "baseline": "indexing = subpath-robots; indexed pages unknown",
      "result": null,
      "pr": null,
      "opened": "2026-10-16",
      "problem": "The catalogue is served at https://duncan-haywood.github.io/oss-monorepo/. Crawlers read robots.txt only at the host root (https://duncan-haywood.github.io/robots.txt, the owner's user Pages site), so the Sitemap: line the build publishes is never seen and no engine can list the catalogue's pages. IndexNow announcements reach Bing and Yandex only; Google does not take part. Crawling is allowed; enumeration of 1,200+ venture pages is lost.",
      "file": "prompts/process/backlog/P018-sitemap-discovery-subpath.json"
    },
    {
      "id": "P017",
      "title": "Load instructions by path and task instead of making every run read ~40k tokens",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "Tokens of instruction text a ventures run and a research run must read before starting (chars/4), and median api_equivalent_usd per run for each track",
      "baseline": "ventures ~41k tokens; research ~17k tokens; median api_equivalent_usd over the 8 measured runs on 2026-10-16: $0.53",
      "result": "helped (chars/4 at ba0c6702e5): CLAUDE.md 6.5k -> 4.4k tokens (checklist moved to verify-and-merge.md, P030; product rules to ventures/CLAUDE.md, P031); DIRECTION.md is read by section (873 lines, was 1,015) instead of whole. Ventures run before-start reading ~41k -> ~26k worst case (CLAUDE 4.4k, AGENTS 2.5k, PLAYBOOK 6.9k, goals 6.9k, prompt 1.2k, sub-prompt 1.7k, land 2.1k) with DIRECTION by section. Cost median not re-measured (too few runs since).",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7664",
      "opened": "2026-10-16",
      "problem": "A ventures run is told to read CLAUDE.md (auto-loaded), prompt.md, prompts/goals.md, its sub-prompt, portfolio/DIRECTION.md, AGENTS.md, PRODUCT_PLAYBOOK.md and land-your-work.md: about 41k tokens before it starts, held in context and re-read (cached) on every request. DIRECTION.md alone is ~15k tokens, says goals.md wins where they differ, and is mostly notes on earlier sessions' mistakes. CLAUDE.md spends ~150 of its ~480 lines on the pre-merge CI checklist that only a merging run needs. Estimated share of a run's API-equivalent cost spent carrying these files: ~45% for a short (~20-request) run, ~15% for a long (~50-request) run, assuming standard relative prices (cache read 0.1x, 1h cache write 2x, output 5x base input). The owner does not see this as a problem in itself (2026-10-16); the payoff is cheaper short runs and less overlap between rule sets.",
      "file": "prompts/process/backlog/P017-path-scoped-instructions.json"
    },
    {
      "id": "P016",
      "title": "Replace ~869 per-venture *-ci.yml workflows with one matrix workflow",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 2,
      "metric": "Workflow files in .github/workflows",
      "baseline": "893 (869 per-venture *-ci.yml)",
      "result": "helped: .github/workflows 893 -> 520 files on origin/main e731751327 (git ls-tree | wc -l); *-ci.yml 869 -> 490; validate_workflows.py passes on all 520; 0 new *-ci.yml added since 2026-10-16 (git log --diff-filter=A). Too early to measure whether variants regrow.",
      "pr": "see PR titled \"process P016\"",
      "opened": "2026-10-16",
      "problem": ".github/workflows holds 893 files, 869 of them <slug>-ci.yml. Two sampled ones differ only in the slug and a comment, so each new venture copies a workflow and fixes have to be applied hundreds of times. CAVEAT: filed from a one-pass repo-organization review (2026-10-16), not a measured study. The change is a first guess and may be oversimplified; check the evidence and the dependents before acting on it, and drop the item with a reason if it does not hold up.",
      "file": "prompts/process/backlog/P016-consolidate-venture-ci-workflows.json"
    },
    {
      "id": "P015",
      "title": "Find near-duplicate ventures and consider grouping ventures/ by niche",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 3,
      "metric": "Venture directories; confirmed duplicate clusters merged",
      "baseline": "1,261 directories; duplicate clusters not yet counted",
      "result": "Helped, narrowly: duplicate clusters now counted (19 pairs, 10 clusters); 0 merged. The one plausible duplicate was checked in P032 and kept because it serves different searches. Flat ventures/ layout stays. Metric 'clusters merged' = 0 by judgment, not failure.",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7625",
      "opened": "2026-10-16",
      "problem": "ventures/ holds 1,261 flat directories. Name prefixes act as an informal hierarchy (uk-* 54, eu-* 18, actions-* 13, shopify-* 12), and some neighbours look like the same product several times (1099-k-threshold-checker, 1099-vendor-csv-checker, 1099-vendor-tracker, 1099k-reconciliation-worksheet). CAVEAT: filed from a one-pass repo-organization review (2026-10-16), not a measured study. The change is a first guess and may be oversimplified; check the evidence and the dependents before acting on it, and drop the item with a reason if it does not hold up.",
      "file": "prompts/process/backlog/P015-group-ventures-merge-near-duplicates.json"
    },
    {
      "id": "P014",
      "title": "Stop committing the generated front-door-tools mirror; build it at publish time",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 3,
      "metric": "Files under gitops/prod/front-door-tools in git; merges that later needed a regen-only fix commit",
      "baseline": "5,839 files",
      "result": "Helped: split into P022-P024; the mirror is untracked on main (P024) and gitops/marketing tests build it in a temp dir (P022). P023 dropped (regen lines stay).",
      "pr": 7440,
      "opened": "2026-10-16",
      "problem": "About 5,840 of gitops/'s 6,005 files are gitops/prod/front-door-tools, which platform/marketing/regen.mjs rewrites. Because it is committed, every venture change needs a manual 'regen.mjs --verify' step, and CLAUDE.md calls skipping it 'the most common way a venture fix ships to the venture page but not to the apex copy users see'. CAVEAT: filed from a one-pass repo-organization review (2026-10-16), not a measured study. The change is a first guess and may be oversimplified; check the evidence and the dependents before acting on it, and drop the item with a reason if it does not hold up.",
      "file": "prompts/process/backlog/P014-front-door-mirror-generated.json"
    },
    {
      "id": "P013",
      "title": "Archive the retired Hetzner/k3s tree (bootstrap/, gitops/prod) instead of warning about it",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "Top-level directories describing infrastructure that no longer exists; CLAUDE.md lines spent warning about them",
      "baseline": "2 (bootstrap/, gitops/prod cluster manifests); 1 CLAUDE.md paragraph",
      "result": "Dropped 2026-10-16: the references are live, as the item's own caveat anticipated. git grep on this checkout: bootstrap/ or gitops/prod is named by 17 files under gitops/tests (shellcheck coverage, manifests, restore_cluster, host governor, installers), 20 non-test files under platform/, 3 workflows (hetzner-gitops-ci, outage-triage, public-surface-check), .sops.yaml, infra/*.tf, gitops/root.yaml. gitops/prod also holds the regenerated front-door mirror (see P014). A move would rewrite ~40 files and their tests for a cosmetic gain; the CLAUDE.md warning paragraph is cheaper. Revisit only after P014 removes the mirror from gitops/prod. Done 2026-10-30 at the owner's request, by deletion rather than a move: infra/, bootstrap/ and gitops/ removed together with the front-door generators in platform/marketing/, public_surface.py and its workflow, host_routes_state.py and hetzner-gitops-ci.yml; publish_surface.py, sync_tree_counts.py, check.mjs, pages_state.py, venture-preflight.mjs and checklist_coverage.py edited to stop reading the trees. 55,114 lines deleted. Write-up: docs/posts/2026-10-30-deleting-a-dead-cluster.md.",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/11885",
      "opened": "2026-10-16",
      "problem": "The servers were deleted on 2026-10-01, but bootstrap/ (k3s and Argo install scripts) and gitops/prod still sit at the top level as if live. CLAUDE.md has to tell every run that 'manifests under gitops/prod describe that dead origin', a rule that exists only because the tree misleads. CAVEAT: filed from a one-pass repo-organization review (2026-10-16), not a measured study. The change is a first guess and may be oversimplified; check the evidence and the dependents before acting on it, and drop the item with a reason if it does not hold up.",
      "file": "prompts/process/backlog/P013-archive-retired-cluster.json"
    },
    {
      "id": "P012",
      "title": "portfolio-validate is red on main: 63 VENTURE.yaml files lack required fields",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "validate.py problem count on main; `validate` check conclusion on merges to main",
      "baseline": "231 problems; failure on 3 of 3 recent merges",
      "result": "helped: on origin/main b5b9aaf3c0 (2026-10-15) `portfolio/router/validate.py` prints 'All 1257 VENTURE.yaml files are valid' (baseline 231 problems) and `promptctl.py validate` prints 'ok ... 423 run record(s) are valid'. The CI `validate` conclusion on later merges was not read (no token in this session).",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7107",
      "opened": "2026-10-15",
      "problem": "`python3 portfolio/router/validate.py` reports 231 problems across 63 ventures (missing hypotheses, economics, budget, kill_criteria, links). The `validate` check is therefore red on every merge to main, so it has stopped being a signal: PRs merge past it and a new real failure in the same check would be invisible. (Update 2026-10-15: router/validate.py is green; remaining red source was malformed run records.)",
      "file": "prompts/process/backlog/P012-portfolio-validate-red.json"
    },
    {
      "id": "P011",
      "title": "Get a first usage reading for any product",
      "status": "open",
      "owner": "owner",
      "effect": 3,
      "cost": 2,
      "metric": "Share of ventures with a usage reading",
      "baseline": "0",
      "result": null,
      "pr": null,
      "opened": "2026-10-15",
      "problem": "No product has a visitor measurement (live_url_visitors: null across the catalogue), so nobody can tell which of the 1,236 ventures (VENTURE.yaml files on main, 2026-10-15) anyone uses, and effort keeps going to new calculators.",
      "file": "prompts/process/backlog/P011-usage-reading.json"
    },
    {
      "id": "P010",
      "title": "Give run_workflow_locally.py --tree a per-workflow timeout",
      "status": "done",
      "owner": "agent",
      "effect": 1,
      "cost": 1,
      "metric": "Friction reports naming the tool",
      "baseline": "1",
      "result": "too early: --workflow-timeout (default 300s) and per-step flushed output are in run_workflow_locally.py. 8 run records mention the tool, but all are dated 2026-10-15 and cannot be ordered against PR 7077, so whether friction fell is unknown. Re-check once records span another day.",
      "pr": 7077,
      "opened": "2026-10-15",
      "problem": "--tree ran over 15 minutes with no per-workflow timeout, longer than a session's tool timeout.",
      "file": "prompts/process/backlog/P010-tree-sweep-timeout.json"
    },
    {
      "id": "P009",
      "title": "resolve-mirror-merge.sh should regenerate generated files, not refuse",
      "status": "done",
      "owner": "agent",
      "effect": 1,
      "cost": 1,
      "metric": "Friction reports naming the script",
      "baseline": "1",
      "result": "too early: resolve-mirror-merge friction baseline 1; 2 records mention the script but all are dated 2026-10-15, so none can be ordered after PR 7146.",
      "pr": 7146,
      "opened": "2026-10-15",
      "problem": "The script refuses when 00-mirror-alias.conf conflicts, calling it authored code, though front-door-tools.mjs generates it.",
      "file": "prompts/process/backlog/P009-resolve-mirror-merge-generated.json"
    },
    {
      "id": "P008",
      "title": "Warn when the front-door mirror silently drops a venture page",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "platform/pages friction reports per run",
      "baseline": "2 over 184 records",
      "result": "too early to call the friction metric (baseline 2 reports/184 records; all 424 records are dated 2026-10-15, so none can be ordered after the fix). Mechanism works: `regen.mjs --verify` on b5b9aaf3c0 exits 0 with 'committed surface is current'.",
      "pr": 7140,
      "opened": "2026-10-15",
      "problem": "A hub link href=\"../\" or a png asset makes the mirror drop a venture, and regen prints nothing while `--verify` says current.",
      "file": "prompts/process/backlog/P008-mirror-drop-warning.json"
    },
    {
      "id": "P007",
      "title": "Stop launched.json ordering from failing parallel branches",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "launched.json repair commits per week",
      "baseline": "4 in one day (2026-10-14)",
      "result": "mechanism holds: `node --test platform/pages/launched.test.mjs` passes 23/0 on b5b9aaf3c0. Repair-commit rate cannot be measured yet: the baseline is one day (2026-10-14) and the clone has no later day to compare.",
      "pr": 7047,
      "opened": "2026-10-15",
      "problem": "launched.json has a byte-for-byte sort test, and parallel branches each append an entry, so main needs repair commits after merges.",
      "file": "prompts/process/backlog/P007-launched-json-normalise.json"
    },
    {
      "id": "P006",
      "title": "Let run records resolve upstream PRs",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "Records with merged known",
      "baseline": "8 of 184",
      "result": "Partly helped: records with merged known 28 of 369 (7.6%) vs baseline 8 of 184 (4.3%). The `repo` field exists (record --repo) but only 6 records set it, and 276 research records remain merged: null because they are bulk-mirrored. The field is not the limit; backfilling the mirrored records is.",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7091",
      "opened": "2026-10-15",
      "problem": "167 of 175 records carry merged: null because their PR lives in the upstream research repository, so success rates are unverifiable.",
      "file": "prompts/process/backlog/P006-record-upstream-pr.json"
    },
    {
      "id": "P005",
      "title": "Decide who publishes the gh-pages snapshot",
      "status": "open",
      "owner": "owner",
      "effect": 2,
      "cost": 1,
      "metric": "`pages_state.py` current/stale at the start of a run",
      "baseline": "stale",
      "result": null,
      "pr": null,
      "opened": "2026-10-15",
      "problem": "The gh-pages snapshot lags main (`pages-freshness` red in the tree sweep). Sub-prompts ask every session to publish by hand, which nobody reliably does.",
      "file": "prompts/process/backlog/P005-pages-publisher.json"
    },
    {
      "id": "P004",
      "title": "Make the local checklist green on a clean main",
      "status": "done",
      "owner": "agent",
      "effect": 2,
      "cost": 1,
      "metric": "Local checklist exit code on clean main",
      "baseline": "non-zero (26 failures)",
      "result": "Partly helped, 2026-10-15: platform/ci loop (run per module) listed one failure on main, test_publish_surface, because 5 workflows added after the re-pin (distribute-devto/hashnode/releases, link-keeper-ci, meter-keeper-ci) were not in publish-surface.yaml. Re-pinned (none push to main or deploy Pages). Recurs whenever a workflow lands without --write; cheap fix is per-PR, not structural.",
      "pr": 7126,
      "opened": "2026-10-15",
      "problem": "On a clean main in a web session, 26 gitops/tests/test_worker_run.py tests fail because `gh` is preinstalled, and the platform/ci loop uses `|| break`, so it stops at the first failing module and hides the rest. A session cannot tell its own regression from the baseline.",
      "file": "prompts/process/backlog/P004-clean-main-checklist.json"
    },
    {
      "id": "P003",
      "title": "Move CLAUDE.md incident history out of the always-read file",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "CLAUDE.md lines (measure, 'Instruction lines'); CLAUDE.md friction reports per run",
      "baseline": "1,662 lines; 12 reports over 184 records",
      "result": "Not checkable: 'started'/'ended' is null on 281 of 369 records, so friction cannot be split before/after the 2026-10-15T03:55Z merge. Of the 88 records with a timestamp, 81 precede it (1 names CLAUDE.md) and 7 follow (0 do). CLAUDE.md is now 457 lines (was 1,662); 51 CLAUDE.md friction reports in 45 of 369 records overall (0.12/record vs 12/184 = 0.065 at baseline, but mostly bulk-mirrored research records, so not comparable). Too few timestamped cases to tell; promptctl record now stamps 'ended'. Re-check after ~30 new records.",
      "pr": "https://github.com/Duncan-Haywood/oss-monorepo/pull/7021",
      "opened": "2026-10-15",
      "problem": "CLAUDE.md is 1,662 lines, about 1,000 of them dated incident narratives. Every run reads it, it is the most-reported friction file, and the narratives bury the commands. A long rulebook also crowds out judgment (prompts/steering.md).",
      "file": "prompts/process/backlog/P003-claude-md-history-out.json"
    },
    {
      "id": "P002",
      "title": "Catch duplicate venture slugs and duplicate fixes at push time",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "Closed-unmerged duplicate PRs and repeated '<slug>: new venture' subjects per two weeks",
      "baseline": "4 closed pairs + 2 merged pairs + 1 repeated name in 2026-10-01..15",
      "result": "too early: platform/ci/slug_dupe.py exists and runs (--help ok); 1 of 424 run records mentions it. Duplicate-pair counts need a later two-week window.",
      "pr": 7149,
      "opened": "2026-10-15",
      "problem": "Two sessions build the same venture or the same fix. The duplicate check reads open PRs, which cannot see a PR that merged minutes earlier.",
      "file": "prompts/process/backlog/P002-duplicate-work-at-push.json"
    },
    {
      "id": "P001",
      "title": "One preflight command for a new venture's site-wide invariants",
      "status": "done",
      "owner": "agent",
      "effect": 3,
      "cost": 2,
      "metric": "Post-merge fix-up commits per 100 new-venture merges",
      "baseline": "11 per 686 (1.6%) in 2026-10-01..15",
      "result": "too early: platform/pages/venture-preflight.mjs exists; 0 of 424 run records mention it, so nobody is using it yet or none have said. Metric baseline (11 fix-ups/686) needs a later window.",
      "pr": "#7163",
      "opened": "2026-10-15",
      "problem": "A new venture passes its own tests and still breaks a repository-wide invariant: launch date missing from launched.json, key order, mirror not regenerated, [hidden] CSS, broken inline script. These surface after merge as red main or a blocked Pages publish.",
      "file": "prompts/process/backlog/P001-venture-preflight.json"
    }
  ],
  "backlog_status": {
    "done": 47,
    "open": 9,
    "dropped": 4
  },
  "reports": [
    {
      "slug": "2026-10-15-addendum",
      "path": "prompts/process/reports/2026-10-15-addendum.md",
      "title": "Process study 2026-10-15, addendum (sample audit and full-history counts)",
      "date": "2026-10-15",
      "summary": "Another run landed the study for this date first (#7003, merged while this run was working; I checked for an open process: study PR at the start and found none, the race CLAUDE.md \"Duplicate PRs\" describes). That report did not do the sample audit or --tree, and its clone was…"
    },
    {
      "slug": "2026-10-15",
      "path": "prompts/process/reports/2026-10-15.md",
      "title": "Process study 2026-10-15",
      "date": "2026-10-15",
      "summary": "First study, so no previous report to follow up. Written with AI assistance."
    }
  ],
  "drift": [
    {
      "slug": "2026-10-22",
      "path": "prompts/drift/2026-10-22.md",
      "title": "Drift report 2026-10-22",
      "date": "2026-10-22",
      "summary": "Mix since the last review (43 merged runs): flagship deepenings (ai-bookkeeper, wall-framing-takeoff), research follow-ups, redteam and process slices. Consistent with \"depth over calculators\"; no near-copy streak. Owner's words vs output. All starting messages are the routine…"
    },
    {
      "slug": "2026-10-21",
      "path": "prompts/drift/2026-10-21.md",
      "title": "Drift report 2026-10-21",
      "date": "2026-10-21",
      "summary": "Mix since 2026-10-20 (48 merged runs): venture deepenings (ai-bookkeeper, wall-framing-takeoff, open-house-plans: flagship-style depth, not new calculators), research follow-ups, redteam, process slices, creative. This matches \"depth over calculators\" and \"deepen existing…"
    },
    {
      "slug": "2026-10-20",
      "path": "prompts/drift/2026-10-20.md",
      "title": "Drift report 2026-10-20",
      "date": "2026-10-20",
      "summary": "Mix since the last report: product deepenings (changepoint-detector took most of the week's flagship commits, so runs began skipping it for flagships 3 and 6, as the owner's \"real depth\" wording allows), research follow-ups, redteam, process. Nothing contradicts the owner's…"
    },
    {
      "slug": "2026-10-19",
      "path": "prompts/drift/2026-10-19.md",
      "title": "Drift report 2026-10-19",
      "date": "2026-10-19",
      "summary": "Mix since the last report: venture deepenings, research follow-ups, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Fixed: pyenv first-use time in research/CLAUDE.md (E42). Fixed (second review, PR 8210): allocate.py breaks merit ties least-worked…"
    },
    {
      "slug": "2026-10-18f",
      "path": "prompts/drift/2026-10-18f.md",
      "title": "Drift report 2026-10-18f",
      "date": "2026-10-18",
      "summary": "Mix since the last report: venture deepenings, research follow-ups, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Fixed: the session gate's stale-snapshot message contradicted itself on when to run publish-branch.sh (E40). Not fixed: allocate.py…"
    },
    {
      "slug": "2026-10-18e",
      "path": "prompts/drift/2026-10-18e.md",
      "title": "Drift report 2026-10-18e",
      "date": "2026-10-18",
      "summary": "Mix since the last report: venture deepenings, research follow-ups, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Audit (first one run in days): league-schedule-generator #8038 dropped the Left cell from the standings row template; #8041 restored…"
    },
    {
      "slug": "2026-10-18d",
      "path": "prompts/drift/2026-10-18d.md",
      "title": "Drift report 2026-10-18d",
      "date": "2026-10-18",
      "summary": "Mix since the last report: venture deepenings, research follow-ups, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Fixed: the research track draw is now a script (research/shared/picktrack.py). Not fixed: allocate.py still ranks already-deep…"
    },
    {
      "slug": "2026-10-18c",
      "path": "prompts/drift/2026-10-18c.md",
      "title": "Drift report 2026-10-18c",
      "date": "2026-10-18",
      "summary": "Mix since the last report: venture deepenings, research follow-ups, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Fixed: track-draw formula in research/PROJECTS.md. Not fixed: allocate.py keeps ranking already-deep ventures first (10 reports);…"
    },
    {
      "slug": "2026-10-18b",
      "path": "prompts/drift/2026-10-18b.md",
      "title": "Drift report 2026-10-18b",
      "date": "2026-10-18",
      "summary": "Mix since 2026-10-18: venture deepenings, research follow-ups, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Instruction lines: CLAUDE.md 337, prompt.md 89, review/prompt-1.md 130 (at budget). No file grew. Fixed: prompts/redteam.py runs suites…"
    },
    {
      "slug": "2026-10-18",
      "path": "prompts/drift/2026-10-18.md",
      "title": "Drift report 2026-10-18",
      "date": "2026-10-18",
      "summary": "Mix since 2026-10-17f: venture deepenings (fee calculators, schedulers, rosters), research follow-ups, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Venture friction repeats one point: the top allocator candidates are already deep, so runs add a…"
    },
    {
      "slug": "2026-10-17f",
      "path": "prompts/drift/2026-10-17f.md",
      "title": "Drift report 2026-10-17f",
      "date": "2026-10-17",
      "summary": "Mix since 2026-10-17e: research (swe/mimic project pages and follow-ups), venture deepenings, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Instruction lines: CLAUDE.md 337, prompt.md 89, review/prompt-1.md 130, research/PROJECTS.md 1067 (+2 from…"
    },
    {
      "slug": "2026-10-17e",
      "path": "prompts/drift/2026-10-17e.md",
      "title": "Drift report 2026-10-17e",
      "date": "2026-10-17",
      "summary": "Mix since 2026-10-17d: research figure backfills and swe-orgs batches, venture features and deepenings, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Instruction lines: unchanged from 17d (land-your-work.md 160/160, prompt.md 89/100, steering.md…"
    },
    {
      "slug": "2026-10-17d",
      "path": "prompts/drift/2026-10-17d.md",
      "title": "Drift report 2026-10-17d",
      "date": "2026-10-17",
      "summary": "Mix since 2026-10-17c: research figure backfills and swe-orgs batches, venture features, redteam and process runs. Nothing contradicts the owner's quotes in goals.md. Instruction lines: land-your-work.md at its 160 budget, prompt.md 89/100, steering.md 116/120, CLAUDE.md…"
    },
    {
      "slug": "2026-10-17c",
      "path": "prompts/drift/2026-10-17c.md",
      "title": "Drift report 2026-10-17c",
      "date": "2026-10-17",
      "summary": "Mix since the last report: research (figure backfill, swe-orgs batches), venture features, process verify runs. Nothing contradicts the owner's quotes in goals.md. Instruction lines unchanged except research/PROJECTS.md, whose one 10.5k-character progress line was the single…"
    },
    {
      "slug": "2026-10-17b",
      "path": "prompts/drift/2026-10-17b.md",
      "title": "Review, 2026-10-17",
      "date": "2026-10-17",
      "summary": "Window: the 40 runs since the review of 2026-10-16. Source: prompts/runs/ (713 records), promptctl.py measure, derive.py fetch/build."
    },
    {
      "slug": "2026-10-17",
      "path": "prompts/drift/2026-10-17.md",
      "title": "Drift report, 2026-10-17",
      "date": "2026-10-17",
      "summary": "Window: 40 runs since the 2026-10-16 24-hour review. Source: promptctl.py measure."
    },
    {
      "slug": "2026-10-16k",
      "path": "prompts/drift/2026-10-16k.md",
      "title": "24-hour review, 2026-10-16",
      "date": "2026-10-16",
      "summary": "Requested by the owner (\"24 hour review\"). Window: the 24 hours to about 21:00 UTC on 2026-10-16. Source: prompts/runs/ (224 records), promptctl.py measure, runcost.py report, git log origin/main."
    },
    {
      "slug": "2026-10-16j",
      "path": "prompts/drift/2026-10-16j.md",
      "title": "Drift report, 2026-10-16 (tenth)",
      "date": "2026-10-16",
      "summary": "Owner words. None new in the records since the fifth report. Mix. Recent merges: venture depth (league-schedule-generator pool play, shift-roster-builder pins), pages categories, process. No new single-page calculators. Instruction lines. No file grew; nothing cut. Audit.…"
    },
    {
      "slug": "2026-10-16i",
      "path": "prompts/drift/2026-10-16i.md",
      "title": "Drift report, 2026-10-16 (ninth)",
      "date": "2026-10-16",
      "summary": "Owner words. None new in the records since the fifth report. Mix. Recent merges are venture depth, process and research; no new single-page calculators. Instruction lines. CLAUDE.md 385/500, prompt.md 89/100, steering.md 116/120. No file grew; nothing cut. Audit.…"
    },
    {
      "slug": "2026-10-16h",
      "path": "prompts/drift/2026-10-16h.md",
      "title": "Drift report, 2026-10-16 (eighth)",
      "date": "2026-10-16",
      "summary": "Owner words. None new in the records since the fifth report. Mix. Recent merges: venture depth (shift-roster-builder), process, research. No new single-page calculators. Instruction lines. CLAUDE.md 385/500, prompt.md 89/100, steering.md 116/120. Nothing cut; no file grew.…"
    },
    {
      "slug": "2026-10-16g",
      "path": "prompts/drift/2026-10-16g.md",
      "title": "Drift report, 2026-10-16 (seventh)",
      "date": "2026-10-16",
      "summary": "Owner words. None new in the records since the fifth report. Mix. Last 20 merged runs: research figures and elicitation projects, venture depth (league-schedule tiebreaks, fee-compare parity), process, redteam. No new single-page calculators. Matches the standing directions.…"
    },
    {
      "slug": "2026-10-16e",
      "path": "prompts/drift/2026-10-16e.md",
      "title": "Drift report, 2026-10-16 (fifth)",
      "date": "2026-10-16",
      "summary": "Owner words. None new in the records since the fourth report. Mix. Last 20 merged runs are again research, ventures (league-schedule rainouts, sign-keeper, homebrew-tap channel, shift-roster what-if: depth, not new calculators), process and redteam. Matches the standing…"
    },
    {
      "slug": "2026-10-16d",
      "path": "prompts/drift/2026-10-16d.md",
      "title": "Drift report, 2026-10-16 (fourth)",
      "date": "2026-10-16",
      "summary": "Owner words. None new in the records since the third report. One owner-named brief ran (devsec-toolkit, #7285) and was followed as asked. Mix. The 28 runs since the last review: research and ventures dominate (about 40% each), the rest process, redteam, explore. The recent…"
    },
    {
      "slug": "2026-10-16c",
      "path": "prompts/drift/2026-10-16c.md",
      "title": "Drift report, 2026-10-16 (third)",
      "date": "2026-10-16",
      "summary": "Owner words. None new since the earlier reports today. Mix. Open PRs are mostly bot-adopted stranded venture branches (generic comparison pages, new niche calculators) plus platform work (devsec-toolkit, job-search-agent, home page, analyses portal). The owner asked for depth…"
    },
    {
      "slug": "2026-10-16b",
      "path": "prompts/drift/2026-10-16b.md",
      "title": "Drift report, 2026-10-16 (second)",
      "date": "2026-10-16",
      "summary": "Owner words. No new owner messages since the earlier report today. Mix. Open PRs are venture work (internal-link-planner, changelog-keeper, recipe-nutrition-label, ie-sole-trader calculator, ig-media-pipeline) plus site/measurement work (visitor counter, engineering page). The…"
    },
    {
      "slug": "2026-10-16",
      "path": "prompts/drift/2026-10-16.md",
      "title": "Drift report, 2026-10-16",
      "date": "2026-10-16",
      "summary": "Owner words. The 2026-10-16 directions (distribution/measurement first, professional site, IaC, sales tools, per-run cost) are already in goals.md and CLAUDE.md; nothing restated without a quote found. Mix. Recent merges: venture deepening (help-keeper, support-desk),…"
    },
    {
      "slug": "2026-10-15-f",
      "path": "prompts/drift/2026-10-15-f.md",
      "title": "Drift report, 2026-10-15 (eighth review)",
      "date": "2026-10-15",
      "summary": "No new owner messages beyond 2026-10-15.md."
    },
    {
      "slug": "2026-10-15-e",
      "path": "prompts/drift/2026-10-15-e.md",
      "title": "Drift report, 2026-10-15 (seventh review)",
      "date": "2026-10-15",
      "summary": "No new owner messages beyond 2026-10-15.md."
    },
    {
      "slug": "2026-10-15-d",
      "path": "prompts/drift/2026-10-15-d.md",
      "title": "Drift report, 2026-10-15 (fifth review)",
      "date": "2026-10-15",
      "summary": "No new owner messages beyond 2026-10-15.md."
    },
    {
      "slug": "2026-10-15-c",
      "path": "prompts/drift/2026-10-15-c.md",
      "title": "Drift report, 2026-10-15 (third review)",
      "date": "2026-10-15",
      "summary": "No new owner messages beyond those quoted in 2026-10-15.md."
    },
    {
      "slug": "2026-10-15-b",
      "path": "prompts/drift/2026-10-15-b.md",
      "title": "Drift report, 2026-10-15 (second review)",
      "date": "2026-10-15",
      "summary": "Short follow-up to 2026-10-15.md, written by the first scheduled review. No new owner messages were available beyond those quoted there."
    },
    {
      "slug": "2026-10-15",
      "path": "prompts/drift/2026-10-15.md",
      "title": "Drift report, 2026-10-15",
      "date": "2026-10-15",
      "summary": "The first drift review. The owner started it in a session and answered its questions there. Later reports follow prompts/review/prompt-1.md, step 6."
    }
  ],
  "studies": [
    {
      "slug": "egress-reachability",
      "path": "portfolio/research/egress-reachability/README.md",
      "title": "Egress reachability, consolidated",
      "date": "2026-10-31",
      "summary": "Measured 2026-08-20, re-measured 2026-08-23: all 92 hosts unchanged. One pass each, first-hand. Read-only GETs; no credential, no account, no publication, no spend."
    },
    {
      "slug": "js-typecheck",
      "path": "portfolio/research/js-typecheck/README.md",
      "title": "What does TypeScript's checker find in 1,265 ventures of plain JavaScript?",
      "date": "2026-10-21",
      "summary": "Measured 2026-10-16 at 10356f6549, TypeScript 5.9.3. Script: measure.mjs. Raw diagnostics: results-2026-10-16.json."
    },
    {
      "slug": "a11y-engine-agreement",
      "path": "portfolio/research/a11y-engine-agreement/README.md",
      "title": "Do the two accessibility engines agree, and is the difference disclosed?",
      "date": "2026-08-24",
      "summary": "Built and measured 2026-08-21. Re-runnable, offline, no credentials:"
    },
    {
      "slug": "a11y-evidence-record",
      "path": "portfolio/research/a11y-evidence-record/README.md",
      "title": "The audit pass, and how much of it a template can decide",
      "date": "2026-08-24",
      "summary": "Built and measured 2026-08-20. Re-runnable:"
    },
    {
      "slug": "a11y-external-coverage-reference",
      "path": "portfolio/research/a11y-external-coverage-reference/README.md",
      "title": "The first gate measurement: what an independent engine checks that ours do not",
      "date": "2026-08-24",
      "summary": "Built and measured 2026-08-21. Re-runnable, offline, no credentials:"
    },
    {
      "slug": "a11y-generated-sites",
      "path": "portfolio/research/a11y-generated-sites/README.md",
      "title": "Audit the thing we actually sell: local-site-studio's generated customer sites",
      "date": "2026-08-24",
      "summary": "Built 2026-08-21, extended 2026-08-22. Re-runnable, offline, no credentials:"
    },
    {
      "slug": "a11y-own-sites",
      "path": "portfolio/research/a11y-own-sites/README.md",
      "title": "Run the audit on ourselves: what the engines find on this portfolio's own pages",
      "date": "2026-08-24",
      "summary": "Built and measured 2026-08-21. Corpus rebuilt and re-measured 2026-08-21, same day, after Finding 4 found and fixed a gap that had made 1.4.3 silently absent from every number below it. Rebuilt from all 7 apps and re-measured again on 2026-08-22 for Finding 5, which reproduced…"
    },
    {
      "slug": "a11y-theme-resolution",
      "path": "portfolio/research/a11y-theme-resolution/README.md",
      "title": "What the theme-recoverable share actually resolves to",
      "date": "2026-08-24",
      "summary": "Built and measured 2026-08-20. Re-runnable:"
    },
    {
      "slug": "artifact-channel-match",
      "path": "portfolio/research/artifact-channel-match/README.md",
      "title": "Ask 0 buys a token for four registries this portfolio has never built for",
      "date": "2026-08-24",
      "summary": "Added 2026-08-24 by a firing of the screening brief (\"research and evaluate potential software business projects that aren't already here\")."
    },
    {
      "slug": "demand-signal-reachability",
      "path": "portfolio/research/demand-signal-reachability/README.md",
      "title": "Demand-signal reachability: publishing is not measuring",
      "date": "2026-08-24",
      "summary": "Another firing of the recurring \"research and evaluate potential software business projects that aren't already here\" brief."
    },
    {
      "slug": "error-rate-disclosure",
      "path": "portfolio/research/error-rate-disclosure/README.md",
      "title": "Does the record a customer receives carry the tool's own error rate?",
      "date": "2026-08-23",
      "summary": "Question. Every probe in portfolio/pipeline/probes/ has been measured for accuracy, and every one of them renders something a customer would read. Does the second contain the first?"
    },
    {
      "slug": "a11y-axe-recall",
      "path": "portfolio/research/a11y-axe-recall/README.md",
      "title": "Out-of-sample recall, against an independent third detector",
      "date": "2026-08-22",
      "summary": "Built and measured 2026-08-21. Re-runnable, offline, no credentials:"
    },
    {
      "slug": "mcp-tool-drift",
      "path": "portfolio/research/mcp-tool-drift/README.md",
      "title": "MCP tool-declaration drift: a measured base rate",
      "date": "2026-08-22",
      "summary": "Measured 2026-08-19. Primary sources, reproducible from this repo."
    },
    {
      "slug": "a11y-contrast-decidability",
      "path": "portfolio/research/a11y-contrast-decidability/README.md",
      "title": "Contrast was never checked because no corpus ever included the stylesheet",
      "date": "2026-08-21",
      "summary": "Built and measured 2026-08-21. Re-runnable, offline, no credentials:"
    },
    {
      "slug": "a11y-delivered-contrast",
      "path": "portfolio/research/a11y-delivered-contrast/README.md",
      "title": "The one corpus that carries the liability had never been checked for contrast",
      "date": "2026-08-21",
      "summary": "Built and measured 2026-08-21. Re-runnable, offline, no credentials:"
    },
    {
      "slug": "a11y-render-recovery",
      "path": "portfolio/research/a11y-render-recovery/README.md",
      "title": "What rendering actually recovers from the undecidable share",
      "date": "2026-08-21",
      "summary": "Built and measured 2026-08-20. Re-runnable:"
    },
    {
      "slug": "forge-surface-reachability",
      "path": "portfolio/research/forge-surface-reachability/README.md",
      "title": "Forge surface reachability",
      "date": "2026-08-21",
      "summary": "Measured 2026-08-21. 20 code forges plus a control, each surface probed separately. Anonymous read-only requests; no credential sent, no account, no publication, no spend."
    },
    {
      "slug": "register-change-rate",
      "path": "portfolio/research/register-change-rate/README.md",
      "title": "Register change rate",
      "date": "2026-08-21",
      "summary": "Measured 2026-08-20. No credential, no account, no spend — anonymous read-only git ls-remote and blobless git clone against public repositories."
    },
    {
      "slug": "cra-advisory-reachability",
      "path": "portfolio/research/cra-advisory-reachability/README.md",
      "title": "CRA evidence desk: the feed is reachable, the wedge is not, and the triage is worth more than both",
      "date": "2026-08-20",
      "summary": "Measured 2026-08-20. Primary sources, reproducible from this repo."
    },
    {
      "slug": "data-reachability",
      "path": "portfolio/research/data-reachability/README.md",
      "title": "Data reachability: what this environment can actually fetch",
      "date": "2026-08-20",
      "summary": "Measured 2026-08-20 by a scheduled run of the screening brief, which per CLAUDE.md's intake gate added no candidate. Reproduce with python3 probereachability.py; raw output in results-2026-08-20.json."
    },
    {
      "slug": "mcp-archive-defensibility",
      "path": "portfolio/research/mcp-archive-defensibility/README.md",
      "title": "Does the mcp-supply-chain-watch archive accrue? A measurement of its floor",
      "date": "2026-08-20",
      "summary": "Measured 2026-08-20. Primary sources, reproducible from this repo, no credentials, nothing published, no spend."
    },
    {
      "slug": "monetization-reachability",
      "path": "portfolio/research/monetization-reachability/README.md",
      "title": "Monetization reachability: the portfolio can build and ship, but cannot get paid",
      "date": "2026-08-20",
      "summary": "Eighteenth firing of the recurring \"research and evaluate potential software business projects that aren't already here\" brief."
    },
    {
      "slug": "primary-source-egress",
      "path": "portfolio/research/primary-source-egress/README.md",
      "title": "What this environment can actually read, and what that costs the pipeline",
      "date": "2026-08-20",
      "summary": "Added 2026-08-20 by the thirteenth firing of the screening brief."
    },
    {
      "slug": "runtime-data-reachability",
      "path": "portfolio/research/runtime-data-reachability/README.md",
      "title": "Runtime data reachability",
      "date": "2026-08-20",
      "summary": "Measured 2026-08-20. No credential, no account, no spend — read-only GETs."
    },
    {
      "slug": "substitute-supply",
      "path": "portfolio/research/substitute-supply/README.md",
      "title": "Free-substitute supply for each pipeline candidate's core functions",
      "date": "2026-08-20",
      "summary": "Measured 2026-08-20. No credential, no account, no spend — read-only GETs against the npm search API."
    },
    {
      "slug": "agent-reachability",
      "path": "portfolio/research/agent-reachability/README.md",
      "title": "Agent reachability: which candidates can be executed from where the agent lives",
      "date": "2026-08-19",
      "summary": "Seventeenth firing of the recurring \"research and evaluate potential software business projects that aren't already here\" brief. No new candidate was screened and PR #79 was not rebuilt — its own intake gate asks future runs not to, and the note at the end of its provenance…"
    },
    {
      "slug": "free-listing-demand",
      "path": "portfolio/research/free-listing-demand/README.md",
      "title": "What a cold free listing actually gets",
      "date": "2026-08-19",
      "summary": "Measured 2026-08-19 against the public npm registry. Re-runnable: python3 measurelistingdemand.py --out results.json."
    },
    {
      "slug": "free-listing-economics",
      "path": "portfolio/research/free-listing-economics/README.md",
      "title": "What a free listing is worth, not just whether it gets found",
      "date": "2026-08-19",
      "summary": "Computed 2026-08-19 from the committed demand-study data. Re-runnable offline: python3 analyzelistingeconomics.py --out results.json."
    },
    {
      "slug": "listing-monetization",
      "path": "portfolio/research/listing-monetization/README.md",
      "title": "Winning free-registry discovery does not come with a way to get paid",
      "date": "2026-08-19",
      "summary": "Measured 2026-08-19 against the public npm registry. Read-only, no credentials, reproducible from this repo."
    },
    {
      "slug": "publish-endpoint-reachability",
      "path": "portfolio/research/publish-endpoint-reachability/README.md",
      "title": "Publish-endpoint reachability: what \"denied\" actually means, per endpoint",
      "date": "2026-08-19",
      "summary": "Added 2026-08-19 by the eighteenth firing of the screening brief."
    },
    {
      "slug": "publish-reachability",
      "path": "portfolio/research/publish-reachability/README.md",
      "title": "Publish reachability: the free channel the portfolio planned to use is network-denied",
      "date": "2026-08-19",
      "summary": "Nineteenth firing of the recurring \"research and evaluate potential software business projects that aren't already here\" brief."
    },
    {
      "slug": "publisher-audience",
      "path": "portfolio/research/publisher-audience/README.md",
      "title": "Does the audience come before the listing?",
      "date": "2026-08-19",
      "summary": "Measured 2026-08-19. Primary measurements against the public npm registry, reproducible from this repo."
    },
    {
      "slug": "registry-audience-match",
      "path": "portfolio/research/registry-audience-match/README.md",
      "title": "Ask 0's five registries are not interchangeable, and the biggest one is closed",
      "date": "2026-08-19",
      "summary": "Measured 2026-08-19. Read-only, stdlib only, no credentials sent, nothing published or registered. Reproduce with:"
    }
  ],
  "runs": {
    "records": 4314,
    "friction": [
      {
        "file": "research/CLAUDE.md",
        "count": 426,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGQaHgPk9QTKRBcTcB.json",
            "text": "pick_track.py drew track 14 (codesign), but the programme table says advance a programme; I took aerolog-scaling's logged Next instead."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGhk9nTX5f6cz811Kb.json",
            "text": "System python's PIL is broken; reading a PDF figure needed pdftoppm PPM output parsed with numpy, not documented."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHEemntb4Lihe74u2T.json",
            "text": "pyenv.py printed /usr/local/bin/python3 without numpy/pandas; /usr/bin/python3.13 had them (found by trying)."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtJnMXUPrVotRiLgEQ5.json",
            "text": "pyenv.py reported pandas/numpy available but the Rodrigues script needed pandas; had to pip install it"
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtJvbNyXeTR3bpDZABV.json",
            "text": "No note that the cloud python3 lacks aerosandbox and that pip install breaks on a shadowing system PIL; needed pip install --force-reinstall --no-deps pillow into /usr/local/bin/python3. Cost ~10 min."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "CLAUDE.md",
        "count": 300,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGZbGRDeYb5oko14Zg.json",
            "text": "Bare python3 is 3.11 while pip installs to 3.13; pyenv.py output suggested python3 works but pandas/lightgbm needed python3.13."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLvNHq5iGP5cWS5gGD.json",
            "text": "bare python3 lacks numpy/PIL; pyenv.py returned /usr/bin/python3.13 which worked."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01E5sJKis9bPPwKhU79NgTwj.json",
            "text": "Duplicate-PR search advice came after I had already picked a slice from flagships.yaml; the flagship next: is edited by many runs in parallel (210 commits/7d), so the slice was taken before I finished."
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtGGsvk6DFY7tRELAvD.json",
            "text": "bare python3 lacked numpy; pyenv.py reported the default python3 fine only after a first failure, so the import error cost a round trip"
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01E5sJKn8LysG3ocD7qKutTM.json",
            "text": "Duplicate-PR check is advised before opening a PR, but I only searched after the code was written; the flagship next: line was the shared claim and the overlapping run had already edited it on main."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "research/PROJECTS.md",
        "count": 298,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01AcxTtKNZLNhvwxnJ44bMbP.json",
            "text": "pick_track draw sent two overlapping sessions to the same programme milestone within hours; the claim check (open PRs/branches) came too late because the other PR was opened after my run started 40 min of training."
          },
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKje6oHj5K2GgkdQ1Jm.json",
            "text": "Track 25 cites Jud et al. 2021 HEAP as Science Robotics; it is Automation in Construction 129, 103783 (arXiv:2106.05059)."
          },
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKnB4CL93v7v4BEJMGM.json",
            "text": "track 24 milestone 2 civ-contact is listed as next free, but contact already landed inside civ-levers; pick_track output is stale"
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01AcxTtLcgusoaL4ojif81qB.json",
            "text": "Track 23 cites Rudnick 2004 and I wrote DOIs from memory; two were wrong, caught by cite_check. Proposals could say 'look DOIs up on Crossref first'."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01PfwcJkrph75YL5xdRhxc8y.json",
            "text": "civ-contact is listed as a separate project but programme_check wants steps inside a programme; I put it in civ-levers."
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "prompts/process/prompt-1.md",
        "count": 172,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "process",
            "record": "prompts/runs/2026-10-31-session_01E5sJKm7v9WjsFsiWRsZSBa.json",
            "text": "No agent-owned backlog item; critique via doc_friction found ci_profile quickly."
          },
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01E5sJKk268tb2qt4TRW23Xt.json",
            "text": "Backlog had no agent-owned item; main_health.py found the live fault (a run record with pr null) quickly. Git push to the work branch returned Internal Server Error 4 times before succeeding."
          },
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01AcxTtJ3anaF7aMxq23Hrd2.json",
            "text": "Only P059 (needs .claude/ edit) is the open agent row; prompt does not say to skip such rows, so critique mode was chosen."
          },
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01E5sJKjRo86dvLf8Emky7Hj.json",
            "text": "None significant; backlog gave clear 'use Critique' direction."
          },
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01E5sJKnc37pH6adQ7RTkbJn.json",
            "text": "Only owner rows open again; critique mode chosen from friction table."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "portfolio/flagships.yaml",
        "count": 159,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01E5sJKikn7JbqQ7DVVCWDUT.json",
            "text": "flagship 1 `next:` lists only items needing real inputs; a run with no real data finds only small slices"
          },
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01E5sJKk57hN3r98swvvidpF.json",
            "text": "wall-framing-takeoff next/ROADMAP still listed headers-from-table as 'Not yet' though it landed 2026-10-22; fixed ROADMAP line."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtL3UeQcdoiDWWSX62d.json",
            "text": "Main briefly held committed merge-conflict markers, which broke allocate.py until #12044."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtL7vXzUHh11yecbC7v.json",
            "text": "Conflict markers committed to main by two overlapping PRs; no CI check parses the file."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01E5sJKkb6Vodhow9Sx4SXmr.json",
            "text": "Flagship 1 next: names an item (no page field for cantilever deflection ratio) that a parallel session landed the same hour; no claim mechanism for flagship slices."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "prompt.md",
        "count": 151,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01AcxTtJoXy76k7W1CevuT1o.json",
            "text": "Step 0 says to fetch origin security-alerts; the branch does not exist (fatal: couldn't find remote ref). PR 12038 already fixes this."
          },
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01AcxTtKBqenR847R9YyxPUw.json",
            "text": "Step 0 fetches origin/security-alerts, which does not exist (fatal: couldn't find remote ref); queue branch is missing or renamed."
          },
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01AcxTtLCgXpUoxmCSBHtWaH.json",
            "text": "Step 0 fetches origin security-alerts, which does not exist; fell through to routing (PR #12038 already proposes the fallback)."
          },
          {
            "date": "2026-11-01",
            "track": "perf",
            "record": "prompts/runs/2026-11-01-session_01AcxTtLdjQxSjWpWX1hrn6G.json",
            "text": "security-alerts branch did not exist; step 0 command fails with no fallback note"
          },
          {
            "date": "2026-11-01",
            "track": "process",
            "record": "prompts/runs/2026-11-01-session_01AcxTtLzDU3ydxdnY8WC7A4.json",
            "text": "Step 0 fetches nonexistent security-alerts branch; PR #12038 (waiting on owner) already proposes the fallback."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "portfolio/router/allocate.py",
        "count": 90,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "ventures",
            "record": "prompts/runs/2026-10-27-session_01AcxTtHwq1MDEPn51Lj2qeN.json",
            "text": "shallow-clone fetch exceeded 50s and printed partial counts"
          },
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_01R6BQRTez15TsSHBhJCCbQ6.json",
            "text": "Top flagship item (roof on the page) had already been merged by another session minutes earlier; no claim mechanism, so work was duplicated."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_014mq5WbLFUVj66LoHM5mkVT.json",
            "text": "Flagship 1 task text still showed the AI-eval item as open while #9103 was in flight; duplicate-work search (search_pull_requests) was not run before starting, my miss."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_019fstSszB6jefTVGmMh9FkX.json",
            "text": "calculators detected by slug suffix only; some route-pricing/payout calculators slip through"
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01B9xmssYDk932PgYdTEVen7.json",
            "text": "shallow-clone fetch exceeded 50s so 7-day counts were partial"
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "prompts/review/prompt-1.md",
        "count": 87,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "review",
            "record": "prompts/runs/2026-10-31-session_01AcxTtJgeyFP1Zz91mEXHKc.json",
            "text": "validate fails on other in-flight runs' records (pr null) and a 73-char seo_title, blocking step 8's clean validate"
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKp5jKe4wBgqe26q2L.json",
            "text": "Router sent a scheduled run to review while another review PR (#12026) was open; needed --skip-review per prompt.md."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01E5sJKkmjDGDoUQZ9cKSiiy.json",
            "text": "Routed to review although PR 12026 already claimed it; needed --skip-review re-route (documented, worked)."
          },
          {
            "date": "2026-10-30",
            "track": "review",
            "record": "prompts/runs/2026-10-30-session_01AcxTtGxWAkmyhJGdJ4waNz.json",
            "text": "derive.py fetch needed two wait_for polls (~4 min); otherwise clear."
          },
          {
            "date": "2026-10-30",
            "track": "review",
            "record": "prompts/runs/2026-10-30-session_01AcxTtHgAvVEbvD2rRHRhuX.json",
            "text": "A review (E115) already ran earlier the same day, yet the router sent another; the 'runs since last review' count seems not to reset for reduced passes."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/ventures/prompt-1.md",
        "count": 82,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtL8BAr8KNh4RmL4xmV.json",
            "text": "Flagship next: for ai-bookkeeper asks for real inputs, but recent runs keep adding synthetic gap probes; I did the same since no real data was available."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01AcxTtGg9f7mSgpWeF5Gv3R.json",
            "text": "Brief is very long; flagship next: text is thousands of characters, costly to scan for a small slice."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01E5sJKm4Nq2ac67S7nEeqFw.json",
            "text": "flagship next: items nearly all need real data; a small run has no cheap deep slice, so only a property test landed"
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01E5sJKnmEW81d2zdjYYFDwR.json",
            "text": "venture-preflight and run_venture_tests both exceed 120s; the output file of a background job mixed with an earlier command's output."
          },
          {
            "date": "2026-10-27",
            "track": "ventures",
            "record": "prompts/runs/2026-10-27-session_01AcxTtLhVtVfAwZdGQ57tpF.json",
            "text": "Flagship slices are mostly synthetic-data research; no real-data source was reachable quickly, so the slice was a small honesty fix."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/promptctl.py",
        "count": 76,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01XpHqycK4ThSwvx3fQs3EWw.json",
            "text": "`record --model` writes a model id into a committed file, while the session's instructions forbid model identifiers in pushed artifacts; left model null"
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01EhTJVLG3DknQRxazbwiXgk.json",
            "text": "route sent a venture-directed scheduled run to the research track; the track names in routing.json differ from the draw output (ventures vs product)"
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01XpHqyfsyhrPtD3HK4R2wT5.json",
            "text": "`route` drew redteam for an owner request that was plainly distribution/venture work; no 'distribution' track exists, so the record uses ventures/1."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqycUEdN5jpaaDa8esGA.json",
            "text": "record fills a model field, while the session rules forbid model identifiers in pushed artifacts; left null."
          },
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01XpHqybrfUaeJKdryKKUeRK.json",
            "text": "route without --track drew 'ventures' for a user-directed writing task; a retrospective has no obvious track, chose process."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "prompts/research/prompt-0.md",
        "count": 73,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKY54h2SkmvbZ7wvgj.json",
            "text": "pick_track drew a focus track but sim2real-inference-style programmes are all at owner-only steps; took build-data milestone 1 instead"
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKnW8R6VjX6gVJzdEz5.json",
            "text": "does not say a bare python3 may lack aerosandbox while /usr/bin/python3 has it after pip install; cost a few minutes"
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKnnV9y7sZegfaCJQPs.json",
            "text": "pytest missing from bare python3; pyenv.py returned the same interpreter path, which did not import pytest on first try (a later run worked after install)."
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTldMPLjZPaANMK86y.json",
            "text": "Most open programmes had sibling PRs or runs the same hour; claim checking cost several reads."
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtKTTW1QKoErU1XyUR7.json",
            "text": "programme-check requires project.json programme or why_standalone for hanger follow-ups; the prompt says steps go in programmes but hanger has none"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/redteam/prompt-0.md",
        "count": 66,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "redteam",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKZRfvbWkM2w7YBqRC.json",
            "text": "campaign without --record prints the mutants but saves nothing; the first campaign had to be rerun (the --record flag is easy to skip when following the example order)."
          },
          {
            "date": "2026-10-31",
            "track": "redteam",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLeBT2cqx1tuuNbxPt.json",
            "text": "targets --probe lists research/simdesign-widerweb as '(red)' only because numpy is missing in the container; the prompt says a red baseline is a real defect, but here it is an environment gap."
          },
          {
            "date": "2026-10-31",
            "track": "redteam",
            "record": "prompts/runs/2026-10-31-session_01E5sJKjeAX15UY5Lgcw4rZy.json",
            "text": "Red baseline from bare python3 lacking numpy looks like a real defect; the tool message says fix it. Worth a line: check the interpreter first (pyenv.py)."
          },
          {
            "date": "2026-10-30",
            "track": "redteam",
            "record": "prompts/runs/2026-10-30-session_01AcxTtKwDrEF8d4LSdBi4oe.json",
            "text": "campaign on a ventures/ file runs the whole venture test glob (suite_for), so a 0.5s per-file suite timed out a 580s campaign; `targets --probe` did not list the venture files I grepped for, so the slowness was not visible beforehand."
          },
          {
            "date": "2026-10-30",
            "track": "redteam",
            "record": "prompts/runs/2026-10-30-session_01E5sJKkVa8DDHgckEozxEKf.json",
            "text": "campaign without --record prints JSON only; I had to rerun it to record mutants"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/creative/prompt-0.md",
        "count": 47,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "creative",
            "record": "prompts/runs/2026-11-01-session_01AcxTtHfP48JmpLh2TUeWPs.json",
            "text": "Bible 'Next up' has no undone Hearth & Horizon proposals; I invented a topic after finding my first idea (battery hydrogen) already existed as The Cupboard That Breathes Out. A topic index would help."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGRUrpTTM56rAgyvUi.json",
            "text": "Says Hearth & Horizon stories run 3,500+ words in BIBLE; my draft is 3,365 words and no test enforces it."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHjdXxiL5A18fwMWxB.json",
            "text": "BIBLE 'Next up' list is nearly all Done; finding an unused topic meant grepping 150+ stories by hand"
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHomLMznpqhi6NmwPo.json",
            "text": "Audio cap check says under 400 MB; du shows 423, so every run is text only; no step for the move off Pages is offered as a ready task."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHseVVwWzWec37ih92.json",
            "text": "Bible 'Next up' lists the strand piece as the only open H&H item, so choosing a fresh topic meant grepping 111 stories; no topic index exists."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "portfolio/ledger/session_gate.py",
        "count": 42,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "review",
            "record": "prompts/runs/2026-10-24-session_012nNqVJ3kuVU5FziKJk78nm.json",
            "text": "Printed advice pointed at DIRECTION.md 'Current priority' (cut 2026-10-21) and named deploy-settings as pending (granted 2026-09-06)."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01GCrKUEG1uAKffBU6pgWaRN.json",
            "text": "still tells sessions to run publish-branch.sh although Pages deploys from Actions since 2026-10-20"
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01JB3RNiFEJCaMwcgoCGdDi9.json",
            "text": "Pointed at publishing gh-pages and consolidating; allocator top rows were all saturated ventures, so finding a gap took several reads."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01ReTe2615wKrHZXVefVoKpC.json",
            "text": "Gate output is long and its 'Explore' rows point at ventures already deeply built; picking a concrete task took several calls."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01WpFxKdEcW3K8NC3yokTXSr.json",
            "text": "Its Consolidate/Explore targets (fee-calculator family, route optimizer) were already consolidated or built (marketplace-fee-compare, where-to-sell-calculator, route-stop-optimizer); finding that cost several calls."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/PROGRAMMES.md",
        "count": 36,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKqLtb7m6btbyp4XHG.json",
            "text": "pick_track.py drew build-data with an empty CLAIM CHECK; another run built the same milestone 1 within the same 30 minutes (PR 12049), so about 40 minutes were duplicated. A claim PR in the first minutes would have shown it."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLZNVJAUr5fEqELPUq.json",
            "text": "pick_track.py always draws sim2real-inference, whose remaining items are blocked on data/owner; I switched to marine-hull by judgment"
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtJtgnW8o7MGktz1bYe.json",
            "text": "marine-hull has had ~30 small steps in one programme; no instruction on when a programme is mature enough to move to paper drafting rather than another sweep"
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtHk6Ksxs1CdhLuQSJC.json",
            "text": "sim2real-inference is blocked on data and its LOG repeats 'next' items; the programme table does not mark blocked rows, so the draw sent me there first."
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtJGzBvUwBzYcVaT8pF.json",
            "text": "pick_track drew sim2real-inference, whose log says all remaining items are owner steps; I switched to heavy-hydraulics by judgment."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/ventures/prompt-2.md",
        "count": 35,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01E5sJKnRuARxM4vZ1xVhJdV.json",
            "text": "Says to run the allocate flagship row; the flagship next: for ai-bookkeeper is a very long list needing real data, so a synthetic gap probe was the only slice doable unattended."
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01AcxTtGk9mhhvwJ4EyakYpJ.json",
            "text": "flagship 1 next: list is mostly trade-keyword blocks needing real data; switched to flagship 4 where public data was reachable"
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01AcxTtJHsXUFk2HBEsvdppD.json",
            "text": "Directs to flagship deepening but flagship changepoint-detector next: is at 1986/2000 chars, so adding a result forces trimming other items"
          },
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_01CQUXLUYuRet93dMeYJ4nb7.json",
            "text": "Says to run venture-preflight for new/changed ventures (5+ min); skipped for a reader-only change with its own full test suite, 1385 tests passing."
          },
          {
            "date": "2026-10-25",
            "track": "ventures",
            "record": "prompts/runs/2026-10-25-session_01KTeScipeHaNofKrREJ88Mx.json",
            "text": "Flagship next: asks for labelled real bank data; searching for it cost most of the run and found none reachable."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "prompts/polish/prompt-0.md",
        "count": 26,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "polish",
            "record": "prompts/runs/2026-11-01-session_01E5sJKnPW4ENcLwTvYxF3rs.json",
            "text": "Says build takes 7-20 min; I skipped the full build for a front-matter-only change and ran writing.test.mjs instead."
          },
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGLmM2MWTfRXUR6A5K.json",
            "text": "Mentions platform/ci/missing_llms_txt.py fine, but propose_seo_titles.py lives in platform/pages/ and the previous report did not say where; also the full build costs ~5 min to find only false alarms."
          },
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKCN9xnZTDWa3vMDT3.json",
            "text": "Does not mention platform/pages/propose_seo_titles.py; the previous report's tool path had to be searched for (it is not in platform/ci)."
          },
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKntJu3NLHUamap3qq.json",
            "text": "Suggests a full 7-20 min build; skipped for a title-only change, writing.test.mjs sufficed."
          },
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01AcxTtL4tEKE8oRKSJ7j7MK.json",
            "text": "Says to build and screenshot the site (7-20 min); skipped for a content-only llms.txt change."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "prompts/explore/prompt-0.md",
        "count": 25,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "explore",
            "record": "prompts/runs/2026-10-29-session_01AcxTtGXm8zmipvvAKDPjoV.json",
            "text": "Audit list is long; nearly every static-HTML sweep I tried was already clean, so finding an open one took several probes."
          },
          {
            "date": "2026-10-28",
            "track": "explore",
            "record": "prompts/runs/2026-10-28-session_01AcxTtL6E6AzDXmZRrBJcFz.json",
            "text": "Sweep list does not cover mixed-content/third-party hosts or placeholder hosts in the built site; first checker draft flagged localhost with 90 false hits."
          },
          {
            "date": "2026-10-28",
            "track": "explore",
            "record": "prompts/runs/2026-10-28-session_01E5sJKkApkEpahMsJzhbixK.json",
            "text": "Sweep list says markup basics are clean but does not list table header cells; my first grep (grep -L over a $(grep -l) list) undercounted, so a script-based check was needed."
          },
          {
            "date": "2026-10-28",
            "track": "explore",
            "record": "prompts/runs/2026-10-28-session_01E5sJKkc2opDzsf3YQJvtyQ.json",
            "text": "Long list of clean sweeps still let me spend several steps rediscovering that the legacy monorepo-projects path and example.invalid placeholders are rewritten by build.mjs; that fact is not in the list."
          },
          {
            "date": "2026-10-26",
            "track": "explore",
            "record": "prompts/runs/2026-10-26-session_0112gZUFsJVjRStGDHEKnWdb.json",
            "text": "Image/alt/lang/viewport sweep of venture HTML was clean (hits were JS strings); not listed among swept audits, add it."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "research/_shared/pick_track.py",
        "count": 21,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01XpHqydSTzQMsxThrroonHU.json",
            "text": "Its docstring cited a prompts/goals.md section 'Direction: industrial, energy and construction' that does not exist; it now points at the new 'Direction: research at PhD+ level, aimed at deep tech', which records the 2026-10-31 pivot too."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtJMfE6y9NArCwjYUFF.json",
            "text": "Warned checkout was 50 commits behind; needed a manual fetch and merge before the lists were valid."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKkQtLX9Y2UutGPQtjs.json",
            "text": "Draw is deterministic per day, so re-running it always returns sim2real-inference even when its remaining items are all blocked externally."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKnpSypgP37n2gKae7Y.json",
            "text": "reported civ-cascades as next free milestone (2/8) on a shallow checkout though it had landed; had to read LOG.md to find the real next step"
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtHnTDBgHnEfK9JE61M.json",
            "text": "Two runs a minute apart drew different programmes (verified-dse, then heavy-hydraulics); the draw is not stable within a run."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "prompts/process/prompt-2.md",
        "count": 19,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01E5sJKkBuz5ubwWj5BoYEG5.json",
            "text": "Only owner rows open; most recent friction entries were already fixed, so finding a live item took several probes."
          },
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01E5sJKo71eHyDT4PV7ikwTE.json",
            "text": "Only owner rows open; critique via doc_friction found the fix quickly."
          },
          {
            "date": "2026-10-28",
            "track": "process",
            "record": "prompts/runs/2026-10-28-session_01AcxTtGVd9phSNT7mChWmf1.json",
            "text": "Only owner rows and blocked P056 open; fix came from the friction table again."
          },
          {
            "date": "2026-10-28",
            "track": "process",
            "record": "prompts/runs/2026-10-28-session_01AcxTtJk76macVvkZEeJa3i.json",
            "text": "Said measure takes ~70 s; reviews report up to 3 min. Fixed."
          },
          {
            "date": "2026-10-28",
            "track": "process",
            "record": "prompts/runs/2026-10-28-session_01E5sJKn8nWntKYAiY2aHXSk.json",
            "text": "Backlog had only owner rows; main_health reds were already fixed on main by the time I looked, so Critique had to find a preventive fix."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "prompts/review/prompt-2.md",
        "count": 18,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "review",
            "record": "prompts/runs/2026-10-28-session_01AcxTtHoXwXJXE7tt13doys.json",
            "text": "validate failed on another run's post (missing description/tags); fixed as the prompt says"
          },
          {
            "date": "2026-10-28",
            "track": "review",
            "record": "prompts/runs/2026-10-28-session_01E5sJKnhggvGLhzW8WQvq7L.json",
            "text": "Running derive.py fetch in background and measure together risks the shallow.lock the prompt warns about; fetch finished fine but the order is easy to miss."
          },
          {
            "date": "2026-10-27",
            "track": "review",
            "record": "prompts/runs/2026-10-27-session_01E5sJKjbyZXezvSaV26F7Ti.json",
            "text": "Reduced pass is fine, but step 8 validate fails on other runs' posts (future-dated 2026-10-28, missing tags, 167-char description) that no review owns."
          },
          {
            "date": "2026-10-27",
            "track": "review",
            "record": "prompts/runs/2026-10-27-session_01E5sJKnmqU5soUuwCesZXpY.json",
            "text": "validate fails on other runs' posts/records; local clone shares no history with origin/main so ff merge fails"
          },
          {
            "date": "2026-10-24",
            "track": "review",
            "record": "prompts/runs/2026-10-24-session_01KQPgwGZyRicUa4965quXxH.json",
            "text": "derive.py fetch takes ~5 min; sleep chains and process-grep waits are blocked by hooks, so the wait command had to be improvised"
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "prompts/research/prompt-1.md",
        "count": 17,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01B4WzzA9s259udEPERtR7QU.json",
            "text": "Two runs drew the same programme milestone in the same hours; no claim mechanism for programme milestones (the PR claim only helps after the first push)"
          },
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01Jz5mxa9mGCbrA1q1s4mpJu.json",
            "text": "The route output and the map list prompt-0 as the research sub-prompt, but route named prompt-1; the map's line count and version were stale."
          },
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_016WWiEG3UZ9vDGtQ4j9YeLB.json",
            "text": "Claim check needs no shallow history; fine. research/PROJECTS.md milestones for track 17 all done, so next steps came from the newest project README."
          },
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_01BYVMWxBWX9c4C4CrbFGmiq.json",
            "text": "Landing step 2 (work through open research PRs) and the unshallow fetch were skipped for time; no friction otherwise. Sed on the copied model.py docstring broke because its docstring spans two lines (own error)."
          },
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01QxRoydCd4vMSzVtBQqrzBi.json",
            "text": "Says to run research_idea_dupe.py with keywords; fine, but the PROJECTS.md milestone list mixes done-markers inline, so finding the next free milestone needs a manual scan"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "ventures/saints-by-candlelight/PRODUCTION.md",
        "count": 15,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "creative",
            "record": "prompts/runs/2026-10-29-session_01E5sJKixr9UjZyV7Gecz7yG.json",
            "text": "Target 5,500+ words but the check-script minimum is lower (spoken words 5,056 pass); the two figures count differently and cost a re-read."
          },
          {
            "date": "2026-10-28",
            "track": "creative",
            "record": "prompts/runs/2026-10-28-session_01AcxTtJLZkMPhNZWLQcrbzP.json",
            "text": "Next-up list is all Done; no unclaimed ideas, so I grepped for duplicates by hand."
          },
          {
            "date": "2026-10-27",
            "track": "creative",
            "record": "prompts/runs/2026-10-27-session_01AcxTtLSXEaaKLbJc2YRTqp.json",
            "text": "Episode 39 appears twice in git log (two PRs) and the 'Next up' list has no unclaimed items, so the next subject had to be chosen from scratch."
          },
          {
            "date": "2026-10-24",
            "track": "creative",
            "record": "prompts/runs/2026-10-24-session_01Az2d5H6uunRyxmyTjJcvC3.json",
            "text": "'Next up' list was fully struck through, so the topic had to be chosen from scratch; no guidance on how to source new saints."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01DbtHU1qHUNqB93LYB8fMpc.json",
            "text": "Publishing URL named retired monorepo-projects path; fixed here along with 2,510 venture front doors"
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "research/swe-orgs/README.md",
        "count": 13,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_019oi524MJ9vq2CANvhwowc7.json",
            "text": "evidence counts and batch lists are repeated by hand in README, root README and projects.json; tests catch drift but each batch needs several manual edits"
          },
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01HkZoYJMDom7Msx4CfW6a4D.json",
            "text": "counts are repeated by hand in ~8 places and a test fails until each is bumped; a generated block would save a round trip"
          },
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_015qMcakQoo5bsqDw1KReyrn.json",
            "text": "Evidence-type counts in Results were stale since batch 13 and no test covers them; corrected from the CSV by hand"
          },
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01WietvbHGiyShkqRzWipjcE.json",
            "text": "Counts repeated by hand in several sentences (practices, ledger rows, class shares); easy to miss one"
          },
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_013FFanVkE3DM1xXgaKFemKA.json",
            "text": "counts (sources, practices, ledger rows, shares) are hand-edited in README, projects.json and research/README.md each batch; easy to miss one"
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": ".github/prompts/verify-and-merge.md",
        "count": 12,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_015tsJygvzeEUxVNussUDcDr-2.json",
            "text": "the pgrep -f warning exists but is easy to miss; 18 run-record errors are this one trap (docs/reports/assets/run-errors/results.txt)"
          },
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01MkYZfcDYnRouDerndoxcry.json",
            "text": "Says agent pushes trigger workflows; here a git push through the session proxy started no runs on the PR (only PR creation did). Worth a line on how to re-trigger."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01B8RmxjehTrRJYYnujHsGqR.json",
            "text": "run_workflow_locally.py --for-changes spends its 300 s budget on portfolio-pages.yml's site-builder tests in this container, so a docs-only change reports 6 failed steps that are timeouts; the site build and check had to be run separately (build ~6 min)."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01BejbjqrrRghAbbouQ3thA1.json",
            "text": "The checklist caught five real issues CI would have (runner switch, publish surface, dogfood, coverage, site_usage known pages); none of these rules is mentioned where new workflows or top-level pages are added."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01SexJj1E1X1kWVnecoKARHd.json",
            "text": "`regen.mjs --verify` says current but front-door-tools.test.mjs fails on a stale 00-mirror-alias.conf; only `node platform/marketing/front-door-tools.mjs --write` rewrites it (and leaves an untracked front-door-tools/ dir to delete)."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "ventures/ai-bookkeeper/eval/browser-click.mjs",
        "count": 12,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_019uJdxTeaZMGBCiQFL6FT4Y.json",
            "text": "PLAYWRIGHT_PATH is imported as a bare path, which fails for a directory, so the script skips even though playwright-core exists in /opt/node-tools; I used a scratch script."
          },
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_01Ayab6XELf2oMmzsNCKb9rp.json",
            "text": "PLAYWRIGHT_PATH must point at a file (playwright/index.mjs), not the package dir; the script just prints 'skipped: playwright not installed' otherwise"
          },
          {
            "date": "2026-10-22",
            "track": "explore",
            "record": "prompts/runs/2026-10-22-session_01JmzQV6zfapdyvgRgVdT42B.json",
            "text": "PLAYWRIGHT_PATH must point at a file (index.mjs), not the package directory; the header only says it skips when playwright is missing."
          },
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_01KCZfqthwW2umjE4B1oekmY.json",
            "text": "Header says it needs playwright; PLAYWRIGHT_PATH must be a file path to index.mjs, not a directory, and 'playwright' is not importable in the cloud container (found at /opt/node-tools/node_modules)."
          },
          {
            "date": "2026-10-22",
            "track": "process",
            "record": "prompts/runs/2026-10-22-session_01NpAiShFRHWekyoNz3VTk3s.json",
            "text": "friction list still names PLAYWRIGHT_PATH-must-be-a-file, but the script already accepts directories; stale reports"
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": ".claude/hooks/check_posts_before_push.py",
        "count": 11,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01E5sJKjWKEpmmtyHNWUKqzS.json",
            "text": "Rejected a post dated 2026-10-31 (container date is 2026-10-30); the CLAUDE.md/prompt text never says to date posts with `date -u +%F`."
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01AcxTtGzUEnMciCpnAqp8g4.json",
            "text": "Blocked the whole compound command (commit+push), so the fix in the same command never ran; run the fix and the push as separate calls. Main also carried a post (s-corp) with missing description/tags."
          },
          {
            "date": "2026-10-29",
            "track": "creative",
            "record": "prompts/runs/2026-10-29-session_01AcxTtJjQB2tDsEmikfjfmw.json",
            "text": "Blocked my push over another session's post already on main (178-char description); had to fix an unrelated file."
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtKQasbEnnAMo43MRCG.json",
            "text": "Blocks the whole bash command pre-run, so a fix chained before git push in one command never ran; had to split fix/commit and push."
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01AcxTtLCuvpGGKZZNv6kL5b.json",
            "text": "The hook runs before the whole bash command, so a fix chained before git push in one command is blocked too; fix and commit in a separate call."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": ".github/prompts/cloud-session.md",
        "count": 11,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01E5sJKmdozmc71KQKVPhEFt.json",
            "text": "torch install via pyenv.py took several minutes; the stop hook fired repeatedly meanwhile, forcing WIP commits"
          },
          {
            "date": "2026-10-27",
            "track": "process",
            "record": "prompts/runs/2026-10-27-session_013fLPJk81yMBDSLiyaRwAU8.json",
            "text": "Said to wait with Monitor; review/prompt-1.md says Monitor is blocked. Now both point at wait_for.py."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_016YZc3hfjiArvBaiRXcDaV9.json",
            "text": "pyenv.py reports torch-free python3 as fine for numpy/pytest; lowcomm needs torch, which pip installed into /usr/bin/python3 (not /usr/local/bin/python3), cost ~30 min."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Cd8voM3DnaxKot7C9jM6Ua.json",
            "text": "A PreToolUse hook blocks process-matching commands with the -f flag and chained sleeps while waiting on background jobs; the notes do not say to use Monitor or a bracketed pattern."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01JV6tpDrUZjje1Uv3yVJ3Y7.json",
            "text": "123 lines vs 80 budget; still 101 after trimming, so the budget or the content needs a decision."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "research/_shared/linefig.py",
        "count": 11,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01MB2hH8JHD6YcuTm8u1NyCN.json",
            "text": "table() cannot parse results.txt with multiple models/sections under one heading; figure.py parses it itself"
          },
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01F3KFvKs21sk14kYwE3ZCUd.json",
            "text": "table() section prefix must include the '==' of the heading; figure.py templates that replace '=' with spaces mislead"
          },
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01K6SQAAqEef1eeLp88VQLW4.json",
            "text": "table() takes a list of lines, not a string; passing read_text() gives a confusing 'no rows parsed' error"
          },
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01LJdCr6P9MP9Faao1vZLiEq.json",
            "text": "table() needs sep='|' for pipe tables; the docstring example does not say so."
          },
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01NuJi9dpuAxJTfLz5RZKC9F.json",
            "text": "table() section prefix must match raw '== X.' heading; the example figure.py replaces '=' with spaces which makes the prefix rule confusing"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "ventures/hearth-and-horizon/render_audio.py",
        "count": 11,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "creative",
            "record": "prompts/runs/2026-10-23-session_018ED73o8xjWBSthqc8jZz9z.json",
            "text": "Docstring says python3 -m pip install piper-tts, but bare python3 and pip belong to different Pythons here; needed python3.13"
          },
          {
            "date": "2026-10-22",
            "track": "creative",
            "record": "prompts/runs/2026-10-22-session_011NSAvUWTMTQjDyYbyCbpDc.json",
            "text": "Docstring says pip install piper-tts; here pip installs under /usr/bin/python3 (3.13), not /usr/local/bin/python3, so python3 -m piper failed until I used /usr/bin/python3."
          },
          {
            "date": "2026-10-22",
            "track": "creative",
            "record": "prompts/runs/2026-10-22-session_01Koa7xudVFkuJwSA74A3yaS.json",
            "text": "Docs say pip install piper-tts; pip belongs to /usr/bin/python3 while python3 is /usr/local/bin, so module not found until using /usr/bin/python3"
          },
          {
            "date": "2026-10-22",
            "track": "creative",
            "record": "prompts/runs/2026-10-22-session_01LyYdyKx3CqNPAMSkU97vEu.json",
            "text": "Docstring assumes the voice download works; in this sandbox huggingface.co is blocked, and 'pip download' dropped wheels into the repo root."
          },
          {
            "date": "2026-10-22",
            "track": "creative",
            "record": "prompts/runs/2026-10-22-session_01Sk1CBYgDhGAfZZNCDPSaAn.json",
            "text": "Docstring says `pip install piper-tts` but bare `pip` targeted a different Python than `python3`; `python3 -m pip install` was needed."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/_shared/cite_check.py",
        "count": 10,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01E5sJKnC1F5mambiQVSyYYz.json",
            "text": "Crossref, arXiv and NTRS all 403 through the proxy, so no citation could be machine-checked; proposal discloses this."
          },
          {
            "date": "2026-10-26",
            "track": "process",
            "record": "prompts/runs/2026-10-26-session_01H6xiLNs8QGonoUF523Jqjy.json",
            "text": "Friction table still lists eprint= not parsed, but the regex already handles it; stale report."
          },
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_015kNHe5oLLkaNagHcnRCjwU.json",
            "text": "Truncates DOIs at a parenthesis (Townsend 1979) and does not read eprint= arXiv ids from a .bib, so a bib needed hand checks."
          },
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01HPuoDM5nN48rTsSD5vLCzp.json",
            "text": "Reads only the README; paper/refs.bib eprint fields are not checked, so I verified ids by hand against the arXiv API (needs https://export.arxiv.org; http returned empty)."
          },
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01LxkfL1FpLBVAVJe5cDWuvm.json",
            "text": "does not parse eprint= lines in .bib files (0 arXiv ids checked) and Crossref returned 403"
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "research/llm-coding-inference/LOG.md",
        "count": 10,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01AcxTtJCXJ6JfgYEi1WoxRB.json",
            "text": "Earlier entry said cite_check.py does not parse eprint= lines; it does now."
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01E5sJKo9k6R3oS4izDuL7Ne.json",
            "text": "Log is not strictly newest-first in the older sections; had to grep headings to find the latest milestone."
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01E5sJKmibyVH2oqPtrY4neM.json",
            "text": "6ai's Next step (second common category on another corpus) needs a torch+model LLM run unavailable here; used cached NaijaSenti scores instead. h3_llm_width imports numpy, absent from bare python3 (python3.13 has it)."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_013iUrnuJ4scVbXZZEMJmExR.json",
            "text": "Earlier entries said no model was reachable; HF and PyPI worked this session, so a quick probe at start is worth it."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_013yAmum4ox3faxUCVBQvGaL.json",
            "text": "GoEmotions cache ~/.cache/qual-real is absent in fresh containers; the download URL is only in qual-real/experiments/run.py. Added to the docs/reports note."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": ".github/prompts/land-your-work.md",
        "count": 9,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01AcxTtJ2scjJ6ceDFCdAsMX.json",
            "text": "git push --force-with-lease on a not-yet-existing remote branch failed with 'stale info'; a plain push worked."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_0135NRoaejmAukoc9XGWsuMo.json",
            "text": "Suggested force-with-lease push fails with 'stale info' when the remote branch does not exist; plain push works."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01Xzvx663rCHGrSePMWdS3PU.json",
            "text": "Cites a mirror-PR merge-commit exception 'per prompt.md' that prompt.md does not contain."
          },
          {
            "date": "2026-10-23",
            "track": "ventures",
            "record": "prompts/runs/2026-10-23-session_01HPA346x2j4rmQ4N7688Fan.json",
            "text": "CLAUDE.md and prompt.md link to it, but the file does not exist at that path in this checkout."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01CWgKBVdh4QwKexbgguuHgM.json",
            "text": "On a busy main, a new-venture PR conflicts on every hand-written count and mirror file whenever another venture lands; a conflicted PR silently gets no CI. Taking main's side then re-running the sync scripts is the recipe, and it is not written down."
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "platform/pages/writing.mjs",
        "count": 9,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqybzchtMfHw92UkSk5K.json",
            "text": "Posts from other sessions with over-long descriptions turned every PR's Pages build red twice in one day; the pre-push hook catches only the pushing session's own posts."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_014cw1yTvWMApTv2szwxE3EZ.json",
            "text": "Two posts merged on main with description over 160 chars made buildSite throw; no pre-merge check on post front matter caught it (cost three build retries)."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01Bm32oqenGZ2gf1sqdJYJQB.json",
            "text": "loadPosts checks date == file name but not date <= today; 20 posts dated 2026-10-26..28 were committed 2026-10-24 and top the feed"
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01UPvETpjvBS9dHKehnM838Z.json",
            "text": "The 160-character description cap is enforced only by the Portfolio Pages build, so two posts over it reached main and turned that check red on every PR."
          },
          {
            "date": "2026-10-21",
            "track": "explore",
            "record": "prompts/runs/2026-10-21-session_01BTxDMQJTeQBXmPYxtGq3zS.json",
            "text": "160-character description limit is only enforced by the test; writing.mjs header example does not mention it."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "PRODUCT_PLAYBOOK.md",
        "count": 9,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01XpHqycgams7N3rBhvZh6g7.json",
            "text": "§7 'no key, no account' contradicted §3's API-key switch and §2's 'account only if needed'."
          },
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01XpHqycYFxXKBVgZxGbJ3pU.json",
            "text": "Checklist said validate_workflows.py requires a <slug>-ci.yml for any venture with tests; untrue since ventures-tests.yml (2026-10-16). Rewritten."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_012iPzL2in8HHjvdwH9SN5aK.json",
            "text": "Section 2 ranked a static site first and allowed a service 'only when the product genuinely cannot be any of the above', a de facto static-only rule the owner called harmful (2026-10-21)."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01L363PcEijRnWJS4u8fHVds.json",
            "text": "A new venture must also bump typed counts in platform/privacy/optout-persistence.test.mjs, gitops/tests/test_manifests.py, infra/OWNER_CHECKLIST.md and front-door/default.conf, and regenerate the front door (regen.mjs plus front-door-tools.mjs --write for the alias map); none of this is in the definition of done, and each surfaced as a separate CI round. A page link to any unserved file (e.g. .md) silently removes the tool from the front-door mirror and cascades."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01NT4r6te1zjWAqEGfzWv1p7.json",
            "text": "Section 4 mandated build-free .mjs for all venture code (2026-10-16), which the owner did not want as a hard rule; now a default with the Pages constraint stated."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "platform/ci/run_workflow_locally.py",
        "count": 8,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01XpHqyduBahfwCQ4XvVL8gK.json",
            "text": "--for-changes diffs against a newer origin/main in a shallow clone, selecting 94 workflows for a one-file docs change; not usable to verify a small PR."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_016Z8cGGMmogrXEMMmZDVBBn.json",
            "text": "--for-changes on a new venture ran build.test.mjs for over ten minutes with no streamed output, so a 600s tool limit loses the whole result; the targeted checks in docs/reports/2026-10-21-product-marketing-pages-for-agents.md were the useful local loop."
          },
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01F9pjgMpWxNdgpqbizbJZ6P.json",
            "text": "portfolio-pages.yml 'Test the site builder' spends the whole 300 s local budget, so no pages build step runs locally for a docs-only diff."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_014R3x99bjHS2cV9QT2zZdTY.json",
            "text": "--for-changes on a docs-only diff did not finish within 300s; ran the specific pages tests and link check instead."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01G5B8Bvy7N3VvjV3kDMHqX7.json",
            "text": "--for-changes on a docs-only diff produced no output for 30+ minutes; killed and ran the touched checks directly."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "platform/pages/build.mjs",
        "count": 8,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyd4JjJTkybMHf2yYvR.json",
            "text": "A strict local build fails on another session's merged post (description over 160 chars); PAGES_SKIP_BAD_POSTS=1, as CI deploys use, is needed to build main locally."
          },
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01BpgCTzs2sAgpKaQLVpdW6A.json",
            "text": "injectChrome's comment and the test 'breadcrumbs go on entry pages only' kept a decision ('a deep page is not a level of the site') that the later site-nav.mjs visible 4-level trail contradicted; nothing linked the two."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01AFeFmogbxzLXr5YPQaH5L9.json",
            "text": "The hub featured row ranked \"depth\" by .html file count (exampleTools), so SEO explainer pages pushed an arithmetic tool to the front under \"each one goes deep\"; fixed in this PR."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01L363PcEijRnWJS4u8fHVds.json",
            "text": "NON_WEB_EXTENSIONS and check.mjs SERVED_EXTENSIONS mean .ifc, .obj, .mtl, .dxf and .zip cannot be published from a venture directory; not documented in PRODUCT_PLAYBOOK.md, found by reading the build. A product whose deliverables are CAD/BIM files has to build them in the browser."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01SYDGgbDNNvbMbuHP8mFjLb.json",
            "text": "Full-site build takes >10 min, and verify.mjs requires it for a single venture."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "platform/pages/publish-branch.sh",
        "count": 8,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01JgiEjk6hWy2AbEgeFyUF5A.json",
            "text": "Needs a long build with no progress output after 'Building the site...'; hard to tell if it is hung in a session."
          },
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_01Czhpf1srGzwBtBiJXRPtaC.json",
            "text": "Build plus push exceeds a 10-minute tool timeout in a shallow cloud session; the script was killed after writing the local gh-pages ref, and a manual force-push was needed."
          },
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_01FbBBnkbxpGNvkug8c6597u.json",
            "text": "takes over 2 min foreground and builds from local HEAD, which was behind origin/main; first run published a stale source commit"
          },
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_01J3yyqWH5deW3kv3Y4mUSkf.json",
            "text": "pages_state.py --require-current cannot read Pages state without an Actions:read token, so the refresh could not be confirmed from the session."
          },
          {
            "date": "2026-10-16",
            "track": "ventures",
            "record": "prompts/runs/2026-10-16-session_01R6pLBaUxSjntJwd2AnDJyn.json",
            "text": "push step outlived a 580s timeout though the ref was written; main moved again so --require-current stayed stale"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "prompts/routing.json",
        "count": 8,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "ventures",
            "record": "prompts/runs/2026-10-27-session_01EhTJVLbgey8RhToyfyWUyL.json",
            "text": "Router drew the process track while the scheduled prompt asked for revenue-generating products; followed the prompt."
          },
          {
            "date": "2026-10-27",
            "track": "ventures",
            "record": "prompts/runs/2026-10-27-session_01EhTJVM5bwh8ssgK7CySDMr.json",
            "text": "Router drew the creative track while the scheduled prompt asked for revenue-generating products; followed the prompt."
          },
          {
            "date": "2026-10-27",
            "track": "ventures",
            "record": "prompts/runs/2026-10-27-session_01RQ4r3bEfzDtKK7KBMkub7Z.json",
            "text": "Router sent a research draw while the scheduled prompt asked for revenue ventures; followed the prompt and the flagship list."
          },
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_01GEC8mQqaPSw18JEnGtYqBN.json",
            "text": "Router drew research while the scheduled prompt asked for revenue ventures; followed the prompt and the flagship list."
          },
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_01TCmsfLuaDj45x2uxjU1irz.json",
            "text": "Random track draw (redteam) conflicted with a venture-building scheduled brief; no rule says which wins."
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "research/_mirror/README.md",
        "count": 8,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_018wdXfgvpBWJQA4f2YU23Ht.json",
            "text": "sync leaves modified adapted files unstaged; a plain `git commit` after ack drops them, so a second commit was needed. README should say `git add -A research` before committing."
          },
          {
            "date": "2026-10-15",
            "track": "research",
            "record": "prompts/runs/2026-10-15-session_014CEMYnNkzs64phBJGL2NFZ.json",
            "text": "Sync step 2 needs the upstream blob diff, but add_repo clones shallow; I had to fetch --depth=300 in the upstream clone first. Not mentioned."
          },
          {
            "date": "2026-10-15",
            "track": "research",
            "record": "prompts/runs/2026-10-15-session_014LXP7wC5WHsRW4rBRwxzZM.json",
            "text": "sync leaves the upstream string prompt_version 'research/1' in a converted record; validate then fails and the README does not say to fix it with a corrections entry"
          },
          {
            "date": "2026-10-15",
            "track": "research",
            "record": "prompts/runs/2026-10-15-session_0199D8zSyXWCYmg2qz4RMaLn.json",
            "text": "Does not say sync needs a non-shallow clone; I ran git fetch --unshallow origin main first."
          },
          {
            "date": "2026-10-15",
            "track": "research",
            "record": "prompts/runs/2026-10-15-session_019Fa9aWbzig3EonV6nySCxX.json",
            "text": "Does not say converted upstream records may lack errors/integrity_issues/date, which made promptctl validate fail after sync."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "platform/marketing/front-door-tools.mjs",
        "count": 7,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "process",
            "record": "prompts/runs/2026-10-22-session_01VJTBRw7nzPkmY5Vffhah8E.json",
            "text": "Usage header said --write output is committed; the origin is retired and regen skips it (fixed)."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01DZijpNQhQyR2dAV9wLJYbn.json",
            "text": "Retired mirror (P024) still gates every venture PR: warn ratio 85.8% and shard-mount test red on main itself; this PR made the eighth ceiling raise. Running --write (as earlier guidance said) also rewrites gitops/prod/portfolio-front.yaml."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01KnZ5G7MrjKVqfXvh33w9j8.json",
            "text": "a relative link to a .txt file silently drops the venture and its linkers from the apex mirror; only the gitops count test notices"
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01PVbZMeJxRpEDAgXQavPtc4.json",
            "text": "regen.mjs does not rewrite 00-mirror-alias.conf or the portfolio-front.yaml shard mount; a new venture also needs front-door-tools.mjs --write, and that writes an uncommitted gitops/prod/front-door-tools/ scratch dir that must be deleted by hand."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01Ras7kzmRPhUWVqPuG3Gffq.json",
            "text": "Its usage comment says --write output in gitops/prod/front-door-tools/ is committed, but main does not track that directory; it leaves ~6,000 untracked files."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "platform/marketing/regen.mjs",
        "count": 7,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01CWgKBVdh4QwKexbgguuHgM.json",
            "text": "regen.mjs said 'The served surface is current' while front-door-tools.test.mjs failed on a stale 00-mirror-alias.conf and shard mount list; a new venture needs `node platform/marketing/front-door-tools.mjs --write` too, and that command also writes an untracked gitops/prod/front-door-tools/ directory that must not be committed."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_015u4zyDnCsRpZy62SMhUEoC.json",
            "text": "Says front-door-tools.mjs is a RETIRED generator whose output is no longer committed, but front-door-tools.test.mjs still asserts the committed 00-mirror-alias.conf and front-door-tools/kustomization.yaml match it, and gitops/prod/front-door-tools/ still holds ~6,200 tracked files. regen.mjs --verify therefore reports 'current' while the validate job fails; a new venture must also run front-door-tools.mjs --write. Neither PRODUCT_PLAYBOOK.md section 7 nor verify-and-merge.md names that step."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01Ras7kzmRPhUWVqPuG3Gffq.json",
            "text": "regen reported the surface current while 00-mirror-alias.conf was stale; only front-door-tools.mjs --write fixed it."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_016w2DGgtejPfNccpQGEuVQb.json",
            "text": "venture-preflight fails (exit 2) if an untracked file such as the prompts/runs record exists outside gitops/prod; had to move it aside for the run."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01GfAtxh4am4nbGejRDMS4D8.json",
            "text": "venture-preflight's regen --verify aborts when an untracked prompts/runs record exists (generator output outside gitops/prod); commit the run record before running preflight."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "ventures/hearth-and-horizon/BIBLE.md",
        "count": 7,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtJhLQgARqRwbi5LLXE.json",
            "text": "Next-up list had no undone proposals left; had to invent a topic."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01E5sJKkt2VDWp1DWK3r35nN.json",
            "text": "Timeline table and Next up are long; finding where to add rows needed grep. Craft checklist does not mention the blog post."
          },
          {
            "date": "2026-10-28",
            "track": "creative",
            "record": "prompts/runs/2026-10-28-session_01AcxTtGLJobZg2eDn5ktDRK.json",
            "text": "Next up list mixes Done items inline with open ones, so finding open items needed a grep."
          },
          {
            "date": "2026-10-26",
            "track": "creative",
            "record": "prompts/runs/2026-10-26-session_01XGqzGHEgPWiBbt4WhTQHWQ.json",
            "text": "Next-up list had stale 'twenty-year strand, next' items already done; no open proposals remained, so I invented a topic."
          },
          {
            "date": "2026-10-25",
            "track": "creative",
            "record": "prompts/runs/2026-10-25-session_01N7GGKvhqFm4Sf5CxX8DZZq.json",
            "text": "too long to read in one tool call; output truncated twice"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": ".claude/hooks/block_pkill_f.py",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_014am3jHBqC58agBWhg1YMbg.json",
            "text": "Blocked my pkill -f cleanup of a local http server and aborted the whole command (including the sed before it)."
          },
          {
            "date": "2026-10-25",
            "track": "process",
            "record": "prompts/runs/2026-10-25-session_01BpW4sXF6wHGrnjPcPTwwqa.json",
            "text": "Blocked my own edit command because the text mentioned the pattern; fixed in this PR."
          },
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01VsMdc3Pzs1kaU6oPmDdWsU.json",
            "text": "The process-listing hook blocked a whole compound command including the job launch; the job silently did not start."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01NHb6mGEqnFYDBGYSt3UDwS.json",
            "text": "the hook rejected a polling loop that used a bracketed process-name match, and even a command that only mentioned the pattern in text; polling for the result file worked instead"
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01NN8YErCD5zbE4PFLJiLbsj.json",
            "text": "The hook blocks the process-grep tool with its -f flag in a wait loop, even in a bracketed form's absence; cost one failed call."
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "platform/ci/check_post_frontmatter.py",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01E5sJKmqWT7QZnXFQgPsPn5.json",
            "text": "Did not check seo_title length, so three posts over the 70-char budget reached main and broke writing.mjs (every site build). Added the check."
          },
          {
            "date": "2026-10-28",
            "track": "creative",
            "record": "prompts/runs/2026-10-28-session_01AcxTtGLJobZg2eDn5ktDRK.json",
            "text": "Reports another post (state-income-tax-in-the-self-employed-estimate) missing description/tags on main; not mine, left alone."
          },
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_018AMJWVmfzZmBAf29ohPaGr.json",
            "text": "Reports a red post (suresim-released-code-on-our-pairs, description 192 chars) from another run; not fixed here."
          },
          {
            "date": "2026-10-26",
            "track": "explore",
            "record": "prompts/runs/2026-10-26-session_01R7H4YTaLH2cn83HWBuJAZL.json",
            "text": "reports two existing main posts with descriptions over 160 chars (ai-bookkeeper-receipt-tax-codes, shift-roster-exact-repair); not fixed here"
          },
          {
            "date": "2026-10-24",
            "track": "creative",
            "record": "prompts/runs/2026-10-24-session_015PBGq9imSXPZbeoP9KxooU.json",
            "text": "Fails on main already: docs/posts/2026-10-24-actual-budget-bank-files-read-clean.md lacks tags, so the check cannot be used as a clean signal for a new post."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "platform/ci/pyenv.py",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01AGovLLpB6zmUGPs3EzoerG.json",
            "text": "Install with torch took several minutes and its stdout appeared only at exit; waiting needed a Monitor loop."
          },
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_0148tqGat8odPmAY17C3PawV.json",
            "text": "Could not find or install OpenDSSDirect.py (tried three interpreters); a plain venv with pip install worked."
          },
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01AdL7DfQs2GJ3DHU6jnviX5.json",
            "text": "reported no usable interpreter while python3 -m pip install numpy scipy pyarrow ... succeeded"
          },
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01Wj2Sbag6RgvYKdtrhSAmnU.json",
            "text": "pyenv.py hit PEP 668 pip failure and hung the 120s foreground timeout; used a venv instead"
          },
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_01H9Q3Wwgk1ZN1qDBAVgPGVC.json",
            "text": "pyenv.py found no interpreter with scikit-fem; plain pip install worked."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "platform/ci/research_live_links.py",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtKrNQUZMM3qJABckUN.json",
            "text": "--write also rewrote an unrelated project's README (marine-path); had to revert it by hand"
          },
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_012pDMWZ9dqko5iKJ734To4x.json",
            "text": "PR #9958 changed BASE here and in venture_live_links.py without regenerating the READMEs, so readme-live-links-ci is red on main for every PR touching a README; a README-wide fix triggers every venture workflow."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01L8gBe9BULmMkeeFrdwLxwQ.json",
            "text": "After PR #9958 moved BASE to /oss-monorepo/, --write adds a second Live page line instead of replacing the /monorepo-projects/ one, and the check flags all 1,036 research READMEs on main. Fixed here, then superseded by the same fix in PR #9976 (merge kept main's); the venture half (1,298 venture READMEs, venture_live_links.py) is still red on main."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Lb9NbqBPUxtZJFKPDQLWte.json",
            "text": "PR #9958 moved BASE to /oss-monorepo/ without rewriting READMEs, so main went red; --write then appends a second Live page line and leaves the dead one instead of replacing it."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Y91UgoR7ZxsE7FnVe85HmW.json",
            "text": "After PR #9958 changed BASE, --write inserted a second Live page line next to each old-base line instead of replacing it, and readme-live-links-ci went red on main for every README-touching PR; fixed in this PR (stale line rewritten in place, unit test)."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "prompts/goals.md",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_015dH9pvSFP5B55McaSs8uT3.json",
            "text": "'most runs should extend an existing doc or post rather than add a file' plus the small-run skip clause suppressed new posts: 8 of 100 records named a post and the rate fell from 40/day to 2-4/day."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01MZ7drsBfWJA3dUY5AwqbnA.json",
            "text": "Guardrails mixed liability limits with process defaults (land-your-work, every-run-ships, red-team band) under one 'every track' heading; split into Hard limits and Strong defaults."
          },
          {
            "date": "2026-10-21",
            "track": "explore",
            "record": "prompts/runs/2026-10-21-session_016PpM3MCqmgHP6vvjTZDgNV.json",
            "text": "The 160-character post description limit lives only in platform/pages/writing.mjs; nothing in the writing guidance (goals.md 'Write about the work') states it, and get_check_runs on the PR did not show the Pages build job before merge."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01AFeFmogbxzLXr5YPQaH5L9.json",
            "text": "\"Depth over calculators\" was stated three times in prose; nothing in the router, the scorer or the hub reads it, so it did not change what was built or shown."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01YPq1ytq1mdoszNmXJL9Egt.json",
            "text": "Guardrails called 'Land what you push' a strong default but then said unlanded work is 'never fine', mixing rule and default registers; softened per owner direction."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/sim2real-inference/LOG.md",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKkUJDpKTBTUp9ftZPd.json",
            "text": "drawn programme was saturated: remaining items blocked on owner/data, so I moved to another programme"
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01BkXJCKNXmTmrsbqk9edws7.json",
            "text": "Its 'Next' line said to put transfer figures in the paper's SIMPLER paragraph; that was already done, only the abstract was stale, so the first step was verification."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01Leo8sJfSY4U4YqNnHDnKFp.json",
            "text": "m7s concluded SureSim had no code after finding only a template repo; the project page links the real repo (irom-princeton/rapid-policy-evaluation). Check the project page before concluding."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01R7VyGraRrd7PAo3u6AGoEn.json",
            "text": "7q 'Next' (put SureSim paragraph in paper) was already done in main.tex; stale next-step"
          },
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_011j9xu61AwyyGBeYero6DL8.json",
            "text": "7j outcome block was duplicated; removed."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "ventures/ai-bookkeeper/README.md",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "ventures",
            "record": "prompts/runs/2026-10-27-session_01AcxTtJgrdMWxgFfbSu2abB.json",
            "text": "README says irs.gov is refused by the proxy; probe showed PDFs under /pub/irs-pdf and irs-drop return 200 now."
          },
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_019zvekV2tcTDkps3T3qP6tc.json",
            "text": "The SROIE tesseract recipe omits OMP_THREAD_LIMIT=1; eight parallel tesseract runs on 4 cores took over 10 minutes for 8 files."
          },
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_01QBqWduqHgkkx5WDxMtEi4i.json",
            "text": "The Next section is a very long list of dated sweeps; finding which repos were already swept takes several greps."
          },
          {
            "date": "2026-10-23",
            "track": "ventures",
            "record": "prompts/runs/2026-10-23-session_011QF5Vfqv8LTvej6kdXXU2R.json",
            "text": "said law sites were unreachable; they answered this run, so a probe first is worthwhile"
          },
          {
            "date": "2026-10-23",
            "track": "ventures",
            "record": "prompts/runs/2026-10-23-session_01L9urja9tuEKJh7Gqv4Ld9i.json",
            "text": "Next entries said irs.gov and law sites refuse the shell; they answered 200 this run, so probe before assuming."
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "ventures/CLAUDE.md",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "explore",
            "record": "prompts/runs/2026-10-22-session_01NU31SrrZw9J5o4bKYWngjF.json",
            "text": "not read; flagship 'next' text in portfolio/flagships.yaml is a huge duplicated paragraph that cost tokens to scan"
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_016Z8cGGMmogrXEMMmZDVBBn.json",
            "text": "A new venture needs, before CI is green: launched.mjs --write, sync_tree_counts.py, a sibling link from a related venture (siblings.mjs), FAQ JSON-LD rendered visibly, and regen.mjs plus front-door-tools.mjs --write. None of these is listed where a new-venture run looks first; each cost a CI round here."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01XyGGvLr5WVXjsMJc9drRVe.json",
            "text": "not read; flagship task in allocate.py output was 3KB of repeated history per flagship, costly to read"
          },
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_016TdJkvx3swNjjmFTUF8eMP.json",
            "text": "No checklist for creating a venture; had to diff a prior venture PR to find the registration files (launched.json, usage.yaml, workflow, regen) and missed that siblings.mjs needs an inbound link until CI failed."
          },
          {
            "date": "2026-10-18",
            "track": "explore",
            "record": "prompts/runs/2026-10-18-session_01K8bXN3UsnHXdVgRM8McWTD.json",
            "text": "does not list the registries and count sentences a new venture must update (publish-surface.yaml, launched.json, build.mjs, mirror count in 4 files, sibling link); found one CI round at a time"
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "platform/pages/check.mjs",
        "count": 5,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01E5sJKmqWT7QZnXFQgPsPn5.json",
            "text": "The llms.txt date rule (6c847325) assumed 'no file dated' means 'no git history'; a partial (3,000-commit) history dates only some products, so every main deploy failed from the day it landed (109 problems on main). Fixed in build.mjs/lastmod.mjs: shallow builds stamp 'on or before <history start>'."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01SsUX22XmvNxAkkUbJLJxx3.json",
            "text": "SERVED_EXTENSIONS had no .mp3, so serving audio needed a platform edit; the error message did name the fix clearly."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01VhnjpUZhGAi2HFRFpgwLcZ.json",
            "text": "SERVED_EXTENSIONS still frames every type as an nginx question (mime.types, gitops/prod/portfolio-site.yaml) though the cluster was retired 2026-10-01 and GitHub Pages serves the site"
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_0168RhD9My6SGay2eQk6gfiG.json",
            "text": "Only dev/index.html was exempt from the dead-link check, though publish-branch.sh writes all of dev/ (stats.json, analyses/) after the check; a link to dev/analyses/ failed it."
          },
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_01RyM2dLXcEeYwXZx23yRzE2.json",
            "text": "check.mjs with no args errors 'dist is not a directory'; build.mjs without --out writes nowhere obvious. Needed build.mjs --out=dist."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "platform/pages/README.md",
        "count": 5,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01TkN8KvHLTD44Guv4JvzRKm.json",
            "text": "No single checklist for registering a new venture on the site; found the steps (build.mjs list, launched.json, ventures-readme.mjs, sync_tree_counts.py, SWITCHES comment, test_manifests reason line) by grepping a sibling venture's slug and running the failing guards."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01XaXJbpWbJo9BxuwfF9vUXz.json",
            "text": "2,000+ lines; nothing says research project pages are the least-linked part of the site. A link-graph audit of dist/ found it in a minute (680 of 695 low-inbound pages)."
          },
          {
            "date": "2026-10-17",
            "track": "explore",
            "record": "prompts/runs/2026-10-17-session_01Uveo321UDaxPYF63NbPnoq.json",
            "text": "check.mjs default dist path is ./dist but build.mjs writes to platform/pages/dist without --out; cost a failed check run"
          },
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_0194ZdrixJoLLD4JZ7M8bF31.json",
            "text": "nothing says a site/index.html page must avoid ../ back links (repairLinks sends them to GitHub) or assets the front-door mirror cannot carry (png), either of which fails tests or cascades dropped ventures"
          },
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01Njxyn8antfCvtg7C3HoB2v.json",
            "text": "no doc says a hub link href=\"../\" makes the mirror drop the page; regen printed no warning when vendor-watch was silently excluded and regen --verify said current"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "portfolio/hosting/README.md",
        "count": 5,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyd4JjJTkybMHf2yYvR.json",
            "text": "Said Cloudflare is not a portfolio default and new hosts need an owner account; the owner already had one and has now moved the site. Rewritten."
          },
          {
            "date": "2026-10-24",
            "track": "review",
            "record": "prompts/runs/2026-10-24-session_012nNqVJ3kuVU5FziKJk78nm.json",
            "text": "Nine stacked dated amendments; current state (Pages via Actions) only in the last section, Hetzner route described at length after its retirement."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_019Ny4GoXj1wUTz6VcABby89.json",
            "text": "'What we are not adding' says Cloudflare is not a portfolio default, but platform/edge/ (a Cloudflare Worker) now serves the live site's counter and feedback form; PR 9961 is rewriting this file."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_012iPzL2in8HHjvdwH9SN5aK.json",
            "text": "'Prefer a static/browser shape' and 'anything with a process needs a new host decision from the owner' read as a blocker on any non-static product."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_011J2W7V1KTAU6cUNXfGGu9B.json",
            "text": "Said publish-pages-branch.yml runs only by hand; it triggered on every matching push (skipped at the job gate)."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "portfolio/router/test_allocate.py",
        "count": 5,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "process",
            "record": "prompts/runs/2026-10-19-session_011jwS3kdffBhW8dREhT3JQk.json",
            "text": "full unittest run exceeds 120s (git log in load); run RankTests only"
          },
          {
            "date": "2026-10-19",
            "track": "process",
            "record": "prompts/runs/2026-10-19-session_015oKKkf3Dmd96f2pC3qHt7F.json",
            "text": "Full router suite exceeds 250s in a shallow clone; had to run DeepenTests alone."
          },
          {
            "date": "2026-10-19",
            "track": "process",
            "record": "prompts/runs/2026-10-19-session_016aUg3YTqnjE9MASLRG7Y8j.json",
            "text": "Suite takes over 90s (8+ min with my addition timing out at 500s run); unrunnable in a foreground call."
          },
          {
            "date": "2026-10-19",
            "track": "process",
            "record": "prompts/runs/2026-10-19-session_019MRi7tjYLTfquSHxNGYuqD.json",
            "text": "test_real_portfolio_rollup_is_consistent_with_queue runs the full real portfolio and takes minutes; unittest discover in portfolio/router exceeds the 2-minute foreground limit"
          },
          {
            "date": "2026-10-19",
            "track": "process",
            "record": "prompts/runs/2026-10-19-session_01VSvww5MLttZfMwPLvja7RP.json",
            "text": "Full test module exceeds 120s in this image (loads real ventures); RankTests alone is fast."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "portfolio/usage/README.md",
        "count": 5,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "process",
            "record": "prompts/runs/2026-11-01-session_01XpHqyfhUC84Wo1eUhNupV4.json",
            "text": "P035 (2026-10-20) had already moved the rules to 'the law, no stricter' but kept 'Offer an off switch and honour DNT/Sec-GPC' as a must, which no law requires for anonymous aggregates"
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqyfLW7wSEJmLBRH72gZ.json",
            "text": "Gave the dead /monorepo-projects/ site URL; fixed."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01BejbjqrrRghAbbouQ3thA1.json",
            "text": "'No analytics vendor' and the Hetzner/k3s counter section were stale after the 2026-10-01 retirement and the owner's 2026-10-20 direction; rewritten in this PR."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01NiqeNeYLTiBpYRGGgb3mbw.json",
            "text": "Rule 1 banned cookies and referrers outright, stricter than the law; the owner did not know how it got there. Rewritten."
          },
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01V1T9eEFeANvWqBTz5xqaHn.json",
            "text": "'No analytics vendor' rule and the site's 'nothing about a visit leaves the device' promise (enforced by platform/pages tests) block the owner's 2026-10-16 ask to measure real visitors; needs a deliberate privacy-reviewed change (follow-up PR)."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "research/_homepage/projects.json",
        "count": 5,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01WhidpspymChvS3BXXBZZGw.json",
            "text": "File mixes raw UTF-8 and \\u escapes, so json.dump round-trips rewrite ~300 lines; had to insert the theme textually."
          },
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_0142MgLagikCLkBX5HRmkad2.json",
            "text": "Mixed indentation; json.dump re-serialisation rewrites hundreds of unrelated lines, so new themes must be inserted textually."
          },
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_018LzowTym13zdftjic9pkdH.json",
            "text": "Hand-edited separators (`}\\n    ,{`) mean json.dumps round-trips rewrite unrelated entries; had to insert the new theme as text."
          },
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_01DZgyhBK4KKQzxrwwKvzTz2.json",
            "text": "Re-serialising with json.dumps reformats unrelated themes (the file has hand-placed ',{' separators); a new theme has to be spliced in as text to keep the diff small."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01XaXJbpWbJo9BxuwfF9vUXz.json",
            "text": "simdesign-pocketmesh and simdesign-gaugepockets carry identical titles (near-duplicate studies); surfaced as a duplicate <title> once titles stopped being slugs."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "ventures/hearth-and-horizon/README.md",
        "count": 5,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "creative",
            "record": "prompts/runs/2026-10-22-session_01BtBrqs221RHYVs6BGpKcHU.json",
            "text": "render_audio instructions assume the voice host is reachable; it is not in cloud sessions, so four stories still lack audio. /usr/local/bin/python3 differs from pip's /usr/bin/python3, so pip-installed piper was not importable until /usr/bin/python3 was used."
          },
          {
            "date": "2026-10-22",
            "track": "creative",
            "record": "prompts/runs/2026-10-22-session_01PBBkZ8S4u2aGZgR3uQZMK9.json",
            "text": "Says `pip install piper-tts` and `python3 -m piper.download_voices`; in this container bare pip targeted a different Python than python3, so `python3 -m pip install` was needed."
          },
          {
            "date": "2026-10-22",
            "track": "creative",
            "record": "prompts/runs/2026-10-22-session_01QmGctAZxhaD6yLNcqgmB3j.json",
            "text": "render_audio docs say a Hugging Face voice download is needed; unlike Saints' PRODUCTION.md there is no GitHub mirror fallback named for Piper"
          },
          {
            "date": "2026-10-21",
            "track": "creative",
            "record": "prompts/runs/2026-10-21-session_01EYGod8LSJhnQbyV1YwxfXr.json",
            "text": "Install line says 'python3 -m piper.download_voices' but python3 is 3.11 while pip installs piper-tts into 3.13; needed /usr/bin/python3. huggingface.co is also denied by the cloud proxy, so audio cannot be rendered in this environment."
          },
          {
            "date": "2026-10-21",
            "track": "creative",
            "record": "prompts/runs/2026-10-21-session_01JchYTpbDoECJkcviS9FTZE.json",
            "text": "render command uses python3 but piper-tts installed for python3.13 only; python3 is 3.11 here. Also first voice download was corrupt and needed re-download."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "ventures/wall-framing-takeoff/eval-browser-click.mjs",
        "count": 5,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "ventures",
            "record": "prompts/runs/2026-10-23-session_014sNj2TXA7SsnBLwrZei36h.json",
            "text": "Prints 'skipped: playwright not installed' although /opt/node-tools has playwright; PLAYWRIGHT_PATH needs the index.js file path, not the directory."
          },
          {
            "date": "2026-10-23",
            "track": "ventures",
            "record": "prompts/runs/2026-10-23-session_016Bt9iFEqPVyxswVjqvKsqK.json",
            "text": "skips silently unless PLAYWRIGHT_PATH points at index.js (a directory fails) and CHROMIUM_PATH is set; took several tries"
          },
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_012NY3KZtbzVDX8ZdEyx8X15.json",
            "text": "PLAYWRIGHT_PATH must be a file (index.mjs) not a directory; /opt/node-tools has playwright-core and the default Chromium needs no CHROMIUM_PATH"
          },
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_018A71KSFD9zW8u4Ybqzb45y.json",
            "text": "skips silently when playwright is not importable; PLAYWRIGHT_PATH needed the full path /opt/node-tools/node_modules/playwright/index.mjs, not documented"
          },
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_01HQTthPVBfrfg9rCq5LMFvg.json",
            "text": "PLAYWRIGHT_PATH needs a file:// URL to an entry file; a bare directory path fails and silently skips."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "platform/ci/pages_state.py",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01MG2iLxWPDvu4ufFfj4hQae.json",
            "text": "Still reports the served subpath as /monorepo-projects/ (which 404s) and tells the reader to open it; the live site is /oss-monorepo/. PR #8592 covers it but is a stalled draft."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01MesB25ThwJ4QC5U6LF8gn3.json",
            "text": "Infers the Pages source only from the managed branch builder, so it cannot see an Actions source and still reports 'source branch'."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01SsUX22XmvNxAkkUbJLJxx3-2.json",
            "text": "Still reports the branch source from the 02:11 UTC branch build; it cannot see the Actions source, so it pointed at publish-branch.sh, which no longer reaches the live site."
          },
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_017sNf3f9ExHTZNnEBxwFC7V.json",
            "text": "--require-current stays stale after publishing because sibling runs keep landing run-record files that feed the build; gate's 'refresh snapshot first' can never converge"
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "platform/ci/unlanded_work.py",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "explore",
            "record": "prompts/runs/2026-10-16-session_017maVMUTpTxA7G9MChDeBds.json",
            "text": "--sweep lists branches whose work is already on main (dunning-engine, help-keeper, proposal-maker); origin/<branch> refs not fetched so supersede_check cannot resolve them without fetching first"
          },
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_013VkAq5ZZEf8SUo1nWJpT2J.json",
            "text": "unlanded_work.py --sweep: listed 3 branches (proposal-maker, tile-layout-optimizer, agent_review fork guard) whose work is already on main; the sweep seems to flag by commit not content, costing a check."
          },
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01RZ5qfBqowduq33vXbo7kDt.json",
            "text": "--sweep listed branches (proposal-maker, tile-layout-optimizer, dunning-engine fix) whose content is already on main; merge-only tips look unlanded."
          },
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01XbkcmgEv7TAea22x1km3oV.json",
            "text": "reports STRANDED for a local branch equal to main whose remote branch was deleted after merge"
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "platform/pages/venture-preflight.mjs",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyeWLBEBfeV3WLMN5wn.json",
            "text": "regen --verify reported that a generator wrote outside gitops/prod/ and named my new post and ledger file, but git status was clean afterwards; the message reads like data loss when it was only the count checks that needed fixing."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01CWgKBVdh4QwKexbgguuHgM.json",
            "text": "The first preflight failed on another session's post (description over 160 characters) that main had already fixed; a stale base makes the 5-minute build fail for reasons outside the venture. Merging main first would have saved a run."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01CWgKBVdh4QwKexbgguuHgM.json",
            "text": "Preflight passed while five repo-wide count and mirror checks (sync_tree_counts.py, front-door-tools --write, siblings orphan budget, ink contrast, entities table) were still red for a new venture; a new-venture checklist naming those scripts would have saved four CI rounds."
          },
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_014gY3AfxCQvv1canTwx2wEX.json",
            "text": "preflight reported 'regen.mjs --verify could not answer (exit 2)' because it looks for platform/pages/regen.mjs; the script lives at platform/marketing/regen.mjs. Ran the verify directly (passes); the full build step was not run."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "portfolio/ledger/check_ledger_only.py",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01BejbjqrrRghAbbouQ3thA1.json",
            "text": "Printed 'git failed' with an empty message on this clone and exited 0, so the guard silently did nothing."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01Dpw3AJtqDCnmr27VADa1aG.json",
            "text": "Prints 'git failed:' with an empty message on a branch with uncommitted changes, then passes; unclear whether it checked anything."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01QJfeQSe3BHMcMFCnHdv9Pe.json",
            "text": "printed 'git failed' in a shallow clone, so the check gave no result"
          },
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01GuGPLD8oBtYw5Wnpu7S6Nj.json",
            "text": "printed 'git failed' and could not read the diff in a shallow clone, so the guard did not run"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "portfolio/router/allocate.py output",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01NEhynbu6Hm9AzeBoVoSZpi.json",
            "text": "Top Explore rows (where-to-sell handoff hypothesis) were already fully built: handoffs exist for every priced channel and 239 tests pass; the queue offered no unbuilt work, so the run shipped only a small honesty fix."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01P36wgzLPsQ6TC9y3sFE8zG.json",
            "text": "Top Explore rows (where-to-sell, whatnot-seller-payout) already had their hypothesis features built; spent several calls confirming. Consolidate row for '*-payout-calculator' groups unrelated domains by name only."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01Y2NBfniWAbrTgZqbTTaRbg.json",
            "text": "Top Explore row (where-to-sell handoff hypothesis) is already fully built; only customer contact can test it, so it is not actionable by a run."
          },
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01JxyHJXVyjbhTWd6kz5v96Z.json",
            "text": "Top ventures (shift-roster-builder, league-schedule-generator, state-residency-day-counter) are all already very deep; picking a useful increment cost several exploratory reads."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "prompts/runs/*.json",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01XpHqycgnBSZwGAeAk4DiVj.json",
            "text": "Redteam records leave merged, lines_added and tests_added null in nearly all 294 runs (merged true in 2), so blue-team output had to be derived from mutant triage rather than the summary fields."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_015uK9fsSJ8e1q3CyvZimYnd.json",
            "text": "`input` is often the agent's paraphrase of the owner, and follow-ups within a session are mostly unrecorded, so owner-input studies count opening asks only."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01GwtaBa4BPe7HThCppTJRGb.json",
            "text": "wall_minutes median is 3.4 for scheduled runs, implausibly low for runs that open and merge a PR; may cover only part of a transcript. Not used in the write-ups."
          },
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01E9K2FpjkWBCYpmYqw4opHX.json",
            "text": "errors entries are sometimes {what, fixed} objects, not strings, contrary to the string-list shape elsewhere"
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "research/_mirror/mirror.py",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "research",
            "record": "prompts/runs/2026-10-15-session_011LKetmSZyy9jbQgrmwgfEw.json",
            "text": "sync lists adapted files as blob-sha diffs; prompt-0.md has diverged enough that patch fails and porting is by hand."
          },
          {
            "date": "2026-10-15",
            "track": "research",
            "record": "prompts/runs/2026-10-15-session_01KdsJhf24ZbkSREsaf7mrKv.json",
            "text": "sync printed 'merge is staged' but no MERGE_HEAD existed, so a plain git commit made a single-parent commit and check then failed on history; I made the two-parent commit with git commit-tree."
          },
          {
            "date": "2026-10-15",
            "track": "research",
            "record": "prompts/runs/2026-10-15-session_01RjVgXUzPZM3PiLx8Uu1d71.json",
            "text": "Converts an upstream run line with null date/session to prompts/runs/None-session.json, which promptctl validate rejected; had to relax the validator."
          },
          {
            "date": "2026-10-15",
            "track": "research",
            "record": "prompts/runs/2026-10-15-session_01XnG7upXT4JLxtz8VqXRbNq.json",
            "text": "convert_runs copied upstream prompt_version 'research/1' verbatim, so validate failed after sync; fixed in this PR."
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "research/heavy-hydraulics/LOG.md",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLvNHq5iGP5cWS5gGD.json",
            "text": "3h/3i said the manual's P-to-A flow curve was missing; it was on pp. 95-96 of the already-cited manual, found by pdftotext on the 'flow as function of spool travel' wording."
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtJ4gXK8u4QWihgh6WT.json",
            "text": "Datasheet hosts (walvoil.com) reset connections; no sourced neutral pressure drop obtainable"
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtKNy8jrZaxyxxXW31i.json",
            "text": "Next step 'source neutral pressure' was blocked on hosts for several runs; a web search plus curl of a distributor-hosted PDF worked where manufacturer hosts reset."
          },
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKiZsGnrw39bnRTXveQ.json",
            "text": "milestone 2 needs hosts outside the session allow-list; no note on which hosts to request"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "research/marine-hull/LOG.md",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtLmWz2Z81foNbGUFfr.json",
            "text": "milestone 3 (tank data) is still blocked; Crossref and arXiv answer but return papers, not tables"
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtLUiS16ZfcNDG7C1CV.json",
            "text": "milestone 3 blocked on tank data for many runs; each run restates it; needs a reachable source or an owner-supplied table"
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01AcxTtJ6aNoje7zQirz4mbe.json",
            "text": "Its 'Next' (milestone 4c) had been claimed by PR 10954 within minutes; the log has no claim marker, only an open-PR search shows it."
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01E5sJKjAWNdGUGnyVMRMqDj.json",
            "text": "Prior log said the glider papers were unreachable; the gliderflight PyPI package (pip download works through the proxy) carries the Slocum coefficients. Worth noting in cloud-session.md as a route when paper hosts 403."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/wall-framing-takeoff/ROADMAP.md",
        "count": 4,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01AcxTtLLPsqMDSCEisWdjoH.json",
            "text": "Siding line said gables, trim and vertical siding were 'not yet' though they had landed; fixed."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHb7L5bBSVvxZGXi3D.json",
            "text": "Interior item still said 'Not yet: ceiling joints on joists' though drywall.mjs already implements it."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01EhTJVPQfy3eVMGgfJ8CFXw.json",
            "text": "unchecked items (bid leveling page, allowance savings thread) are already landed"
          },
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01PGiifvkbiucWwd1jn5iBM4.json",
            "text": "Floor line says openings and doubled joists are 'not yet' but floor.mjs already supports both; stale."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "AGENTS.md",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01AVAeNHtAaRNKNUegfZrZZD.json",
            "text": "'Touched a venture page? Run regen.mjs' is not enough for a new venture: gitops/prod/front-door/00-mirror-alias.conf is only rewritten by `node platform/marketing/front-door-tools.mjs --write` (which also leaves an untracked gitops/prod/front-door-tools/ dir to delete), and regen.mjs --verify passes while front-door-tools.test.mjs fails."
          },
          {
            "date": "2026-10-18",
            "track": "process",
            "record": "prompts/runs/2026-10-18-session_011bekx5ZpJ6mCgLmfUB5Lf5.json",
            "text": "Running platform/marketing/regen.mjs after a README-only change rewrote ~dozens of unrelated front-door files; the 'run before you push' rule should say it applies to page changes only."
          },
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_01ScW7B7gcKYw4QGLvCPo4WJ.json",
            "text": "Points at prompts/ventures/prompt-1.md, but the routed prompt was prompt-2."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "platform/ci/sync_tree_counts.py",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "process",
            "record": "prompts/runs/2026-10-17-session_01CcFJDaKk1AxvexLUJgHZAP.json",
            "text": "fails with 'No module named front_door_mirror' importing gitops/tests/test_manifests.py in this image; not checked on main"
          },
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_01FGJm8Kc4pBR16sofJJxGMF.json",
            "text": "Fails with 'No module named front_door_mirror' unless PYTHONPATH=gitops/tests is set; docs do not say so."
          },
          {
            "date": "2026-10-16",
            "track": "explore",
            "record": "prompts/runs/2026-10-16-session_01Qk7kqXNq1CmgSUKcGmj2dq.json",
            "text": "could not derive counts: gitops/tests/test_manifests.py imports front_door_mirror, not found"
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "platform/marketing/resolve-mirror-merge.sh",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01PVbZMeJxRpEDAgXQavPtc4.json",
            "text": "It only resolves gitops/prod/front-door-tools/ and refuses when conflicts are in gitops/prod/front-door/ (the ones a new venture actually causes), so the merge was resolved by hand: take main's copy, then regen.mjs."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01SexJj1E1X1kWVnecoKARHd.json",
            "text": "Handles only front-door-tools; conflicts in gitops/prod/front-door/*.gz needed manual checkout --theirs + regen."
          },
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01EZCsNQHAhLgkj4Bb1cnV3w.json",
            "text": "Refuses when gitops/prod/front-door/00-mirror-alias.conf conflicts, calling it authored code, but front-door-tools.mjs generates that file (its own header says so). Took a side and ran regen.mjs by hand, twice in one run."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "platform/pages/podcast_tts.py",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "creative",
            "record": "prompts/runs/2026-10-23-session_01PRgKJgNMGGxkbR19CBvJVu.json",
            "text": "Setup names only huggingface.co for the voice; no GitHub-reachable fallback like the Kokoro one in saints PRODUCTION.md"
          },
          {
            "date": "2026-10-21",
            "track": "creative",
            "record": "prompts/runs/2026-10-21-session_01AT4BV297g26Qtq4BJ5JfMK.json",
            "text": "--check printed nothing and exit 0 although two scripts (briefing-the-machines, cut-the-deadweight) have no audio."
          },
          {
            "date": "2026-10-21",
            "track": "creative",
            "record": "prompts/runs/2026-10-21-session_01ErdCJJunYsFVHM5CDyWn87.json",
            "text": "Setup needs a venv, piper-tts and a 114 MB voice download; worked, but kokoro-onnx was installed first for nothing because the creative prompt mentions only Kokoro."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "portfolio/ledger/test_session_gate.py",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "process",
            "record": "prompts/runs/2026-10-18-session_01MLPsvaiT4LQpLRi2B7EyRn.json",
            "text": "Needs pytest, absent from the image; unittest discover reports an import error, pyenv.py is the way."
          },
          {
            "date": "2026-10-18",
            "track": "process",
            "record": "prompts/runs/2026-10-18-session_01QVLZL2G5shNNqSUNaS8JnR.json",
            "text": "imports pytest, which cloud sessions lack; unittest discover errors until a venv with pytest is made"
          },
          {
            "date": "2026-10-18",
            "track": "process",
            "record": "prompts/runs/2026-10-18-session_01V59QPjV6FsMHsiZTwpk3TE.json",
            "text": "needs pytest, which is not installed in cloud sessions, so it cannot be run there"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "prompts/process/backlog/P026-ebay-fvf-ebay-fee-calculator.json",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_015ypm8dwxeaExtL3pAi66v7.json",
            "text": "cost 2 understated: the engine change fails 97 tests, not 1 as the P025 probe implied (probe edited pages and README but the default-using tests only fail once calc.mjs defaults change)."
          },
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01PtY7Pkqb7ALYZXj4JGRkCo.json",
            "text": "change says re-fetch eBay's fee page first, but www.ebay.com is blocked by the session egress proxy (403), so the row cannot be started from a cloud session"
          },
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01RxxZAuU9DHiPNpQtH9Jf4Q.json",
            "text": "P028 says reuse P026's figures, but P026 is the 97-test row; P028 had to land first and leaves the venture parity test disagreeing with ebay-fee-calculator."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "prompts/process/backlog/P036-cut-the-deadweight-follow-ups.json",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "process",
            "record": "prompts/runs/2026-10-22-session_01YZtucSqDjveREBjFwBushc.json",
            "text": "Part 1 remainder is still too big for one PR (entangled with ~20 files); only a slice shipped."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01UoAzdwiuZpG86NUGxmomeG.json",
            "text": "Part 1 (delete hetzner-gitops-ci.yml) is entangled with front-door tests and two test files asserting its hcloud-scope job; not a one-PR item as written."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_014o1fed8VcddKgNTF7Hg38K.json",
            "text": "Part (7) (drifted byok.mjs, tests failing on main) was already fixed: all 10 copies identical, tests pass. Seven-part item is exactly the multi-PR row prompt-1 says to split."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "prompts/process/backlog/README.md",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01V1T9eEFeANvWqBTz5xqaHn-3.json",
            "text": "Backlog ids are picked as 'next free' from a stale main; this item collided twice (P014, then P013/P017 for the hub item). A reserved-id or slug-keyed scheme would avoid it."
          },
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_01JNT7JrLHmHQxM8YtYLfocr.json",
            "text": "a done item requires pr, so the PR must exist before the backlog edit"
          },
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_01WsB27VxuoFUHmm2i8djgMq.json",
            "text": "validate requires the pr field on a done item, but the PR number only exists after the push; needed a second commit"
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "prompts/process/prompt-0.md",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_0133CDK2EwcSxWQxSQnr8PEo.json",
            "text": "git fetch --unshallow origin main exceeds the 120s tool timeout in a cloud session, leaving history partial; sample audit and --tree were not run"
          },
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_01TsZao48uAmLZXo6u4TfVYU.json",
            "text": "duplicate-claim check is 'open PR titled process: study'; another run merged its study between my check and my push, so two runs did the same study. A branch or title check at push time would catch it"
          },
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_01TsZao48uAmLZXo6u4TfVYU.json",
            "text": "audit step says pick PRs at random but gives no command, and many merged PRs are doc-only or upstream-repo"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "prompts/promptctl.py route",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01EhTJVKs65zmeksERMjB7b1.json",
            "text": "bare route ignored a scheduled prompt asking for revenue products (8 reports in 3 days); fixed with --task"
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01EhTJVLiTwehiU7LAH4JGz7.json",
            "text": "Router picked the research track for a scheduled run asking for revenue products; I followed CLAUDE.md's venture default instead."
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01EhTJVLvieBcKAw3jYep5uR.json",
            "text": "Routed to the research track while the scheduled prompt asked for venture work."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "prompts/README.md",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01PC11WYc2QKwyULZV7PESC3.json",
            "text": "Nothing says which track a direct owner-named venture task records under; the first commits carried explore/1, which has no prompt file, and the record uses ventures/1."
          },
          {
            "date": "2026-10-16",
            "track": "explore",
            "record": "prompts/runs/2026-10-16-session_01CnCkVs6yU2KwNaEwJ6PdBj.json",
            "text": "pytest not installed; checklist's pytest lines can't run without apt."
          },
          {
            "date": "2026-10-16",
            "track": "explore",
            "record": "prompts/runs/2026-10-16-session_01FiKuwGYQGnTPA8nK2dXVXc.json",
            "text": "pointed at research/_mirror/state.json, removed at the 2026-10-16 cutover"
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "research/lowcomm-training/tests/test_lowcomm.py",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01R4ivtBHmANy31nJnoT5EFG.json",
            "text": "7 tests fail with 'lowcomm.model has no attribute Config' both before and after my change (a module name clash in this environment); not investigated."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01WBhYN18zeoHwJ9AJB2qy5g.json",
            "text": "7 tests reference lowcomm.model.Config, which no longer exists, so the suite is red on main."
          },
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01YLAmt8x5ehtRzePoEaiMn7.json",
            "text": "7 tests fail on main (module lowcomm.model has no attribute Config): stale against the torch harness from the parallel numpy/torch merge; not fixed here"
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "research/README.md",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01SdF5pLBDskWesz5gfduNJG.json",
            "text": "CLAUDE.md says to add a bullet by hand, but project.json lede generates it; a manual bullet made build/links check fail with 'more than one bullet'."
          },
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_01RggrdGgzaJUfDEmPCxHQah.json",
            "text": "main carried two bullets for swe-costdrift (a manual one and a generated one), so build.py failed before any run's work; removed the manual one."
          },
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01HR5fopCGwxxuDzYc2EFrzh.json",
            "text": "main had a duplicate eda-adaptci bullet that made build.py fail; research_live_links.py --write also adds a bullet, so adding one by hand (as CLAUDE.md step 1 reads) duplicates it."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/sim2real-inference/PROPOSAL.md",
        "count": 3,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01ALKddzUq8HsyQ1JDSKeFcU.json",
            "text": "Related work did not include SureSim (arXiv:2510.04354), the closest prior work; the Gap needs rechecking against it."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01UAAp9KZoLtTTyCvMZehvjt.json",
            "text": "Milestone 5 text says H4/H5 together; split into 5a (H4) and 5b (H5) in LOG. Also mujoco is not installed in the default python so importing pairs.py fails for analysis-only scripts."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01XH4v5S6RcoyuJW278Mn46B.json",
            "text": "Milestone 4 says extract SIMPLER's paired tables, but only policy-level rates are published (no episodes), so H1/H5 cannot be tested on them; reframed as a policy-level discrepancy test."
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": "ventures/wall-framing-takeoff/README.md",
        "count": 3,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01E5sJKmUf5GzfaAPyE1YkQ7.json",
            "text": "Said deck border, blocking and post check were 'not on the page' though page fields exist; stale."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLd3VzAPisgJygH2Mu.json",
            "text": "said the stair-to-header figure had no automatic link, but cli.mjs already had stairFrom (PR 12047); fixed."
          },
          {
            "date": "2026-10-24",
            "track": "explore",
            "record": "prompts/runs/2026-10-24-session_01KdbNnDg2vXcdiaFox4UA48.json",
            "text": "Foundation bullet said the page was not modelled, but the page card already existed; fixed."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": ".github/prompts/duplicate-work.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "process",
            "record": "prompts/runs/2026-10-28-session_01E5sJKo3rsjPqgsiCdUGSgS.json",
            "text": "search_pull_requests with minimal_output but no keyword returned 199KB; added keyword + perPage advice (fixed in this PR)"
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01GwtaBa4BPe7HThCppTJRGb.json",
            "text": "Searched open PRs for contributing/onboarding at the start and found none, then PR #9956 (another session, same topic, CONTRIBUTING.md) opened and merged while this one was writing. A search only at the start misses a parallel session; searching again right before opening the PR would have caught it."
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": ".github/prompts/review-open-prs-first.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_016ckMCYZWPQXidJFizbTnpa.json",
            "text": "Tells every session to review open PRs first via reviewer Apps that are not configured (jobs skip) and that run after the merge; a session following it does nothing useful. Noted at the top of the file and pointed at post-merge-review.md."
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01Xzvx663rCHGrSePMWdS3PU.json",
            "text": "Built on gh pr commands that do not work in cloud sessions; also says auto-merge refuses ventures/*, removed 2026-10-20."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": ".github/workflows/portfolio-validate.yml",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_011qeNDjbbcRjGKFaqPtt5pY.json",
            "text": "Running its validate job locally is hard: multi-line run blocks, a shallow-clone base fetch and a >5 min marketing suite; no one-command local runner for this job."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01N2Ga7ZmfTREAzuQzn6T6SB.json",
            "text": "The validate job takes ~20 min, and the venture-regression step fails on any branch that is behind main when a venture was added; merge main before pushing."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": ".github/workflows/research-ci.yml",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01UxhKDFXDEXkc7W195vK9z6.json",
            "text": "Runs only the homepage build; none of the 6,197 research tests run in CI, which the audit found by running them."
          },
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_01TTWGu1H8M6GNkYTdNrP1Rp.json",
            "text": "Research CI runs only the homepage build; project unit tests are not run in CI, so each run must run them locally (energy-density needs pytest, which plain python3 lacks)."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "gitops/ci/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01XpHqydoGdaJGH3sNoMcqDs.json",
            "text": "Opens by calling the repository private with metered minutes; CLAUDE.md and the hosting docs say public with free standard runners, so a reader cannot tell which cost model applies."
          },
          {
            "date": "2026-10-16",
            "track": "ventures",
            "record": "prompts/runs/2026-10-16-session_01KUXNKoz7fmTX2BVzHMNqDH.json",
            "text": "runs-on count was already 2 stale on main; every new-venture PR that adds a workflow trips gitops/tests and has to run sync_readme_counts.py, which CLAUDE.md's checklist does not mention next to sync_tree_counts.py."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "gitops/tests/test_manifests.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_016Z8cGGMmogrXEMMmZDVBBn.json",
            "text": "A new venture with a page must bump six hand-written counts; sync_tree_counts.py does it, but nothing in ventures/CLAUDE.md or PRODUCT_PLAYBOOK.md points a new-venture run at it before CI fails."
          },
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_01XawUqAou1NNZdr2zWAvVkq.json",
            "text": "mirrored-tool count red on clean main (1232 vs 1233) after a concurrent merge; sync_tree_counts.py fixed it at the merge as CLAUDE.md says"
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "platform/ci/concurrency_tax.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_018GAPVypxHF7SHbU2ktgqAG.json",
            "text": "did not finish within 10 minutes in a cloud session (probe refresh); re-measured with the same arithmetic over refs/pull/* fetched with --filter=blob:none (38 s)"
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01HDgg1Q7R2BrkPVC8H39bhC.json",
            "text": "only worked on probe-clone ref layout refs/pull/<n>; with a working repo's refs/pull/<n>/head it crashed on max([])"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "platform/ci/validate_workflows.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "perf",
            "record": "prompts/runs/2026-10-30-session_01XpHqyd7zje2txeAbKDhHdk.json",
            "text": "Invariant 6's text calls Actions a 'metered allowance'; on this public repo minutes are free and the binding limit is 20 concurrent jobs. Left as is; invariant 9 states the concurrency limit."
          },
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01XpHqycYFxXKBVgZxGbJ3pU.json",
            "text": "Invariant 7's remedy said 'copy a sibling', which grew 802 per-venture copies of one node --test job that ventures-tests.yml already ran; now points at ventures-tests.yml and invariant 8 rejects copies."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "platform/ci/venture_live_links.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Lb9NbqBPUxtZJFKPDQLWte.json",
            "text": "After #9958/#9986, 29 venture READMEs whose link label is not 'Live tool' still linked the dead /monorepo-projects/ base and failed this check on main; rewritten in place here. A first attempt rewriting all 1,327 READMEs dragged ~500 venture CI suites in and was reverted."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Y91UgoR7ZxsE7FnVe85HmW.json",
            "text": "Report-only with no --write, so a base-URL change leaves 1,298 venture READMEs to fix by hand (done here with a scoped sed)."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "platform/ci/wait_for.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKnrjuD9uoQ4NbWhdAD.json",
            "text": "--until returns after 100 s with 'still failing, call again' and exit 0, so background wait notifications fired early and I had to loop"
          },
          {
            "date": "2026-10-28",
            "track": "process",
            "record": "prompts/runs/2026-10-28-session_01AcxTtJkFn9qbn4K9WiS8Ck.json",
            "text": "needs a DONE line but main_health.py, which the process prompt tells you to background, never printed one; fixed"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "platform/counter/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_012Aa9y1fmABadZ5bA7HbKkZ.json",
            "text": "Still says no workflow commits counts unattended and describes a self-hosted Node counter; the live path is the platform/edge Worker plus site-usage-pull, which does commit to main. Fixed in this PR."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01BejbjqrrRghAbbouQ3thA1.json",
            "text": "Counter tests were documented but not run by any CI workflow; added to portfolio-validate."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "platform/marketing/front-door-tools.test.mjs",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01FULUGKQ5T5gp1Sa4B6d8PS.json",
            "text": "Failure message tells agents to run front-door-tools.mjs --write, which re-adds the retired tree regen.mjs skips."
          },
          {
            "date": "2026-10-17",
            "track": "process",
            "record": "prompts/runs/2026-10-17-session_018whDj8oVnaW5ttoYDECgyw.json",
            "text": "front-door alias map stale on main, so the pages/marketing test line in CLAUDE.md's checklist fails for every PR until someone runs regen.mjs"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "platform/pages/ink.mjs",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01CWgKBVdh4QwKexbgguuHgM.json",
            "text": "Screen media queries are hoisted, so any page with a prefers-color-scheme dark block fails the link audit unless its links pass on both backgrounds; nothing in the venture docs says static pages should not ship a dark mode."
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01PVbZMeJxRpEDAgXQavPtc4.json",
            "text": "A compound selector like header.hero is not recognised as a background box, so a light link on a dark header reads as 1.46:1; switching to .hero passes. Not documented in PRODUCTION_PLAYBOOK or the error message."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "platform/pages/offline.mjs",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_015FeSZUbBajcxSgF7ZCeJrq.json",
            "text": "renderSocialCard's docs claimed no font rasteriser could exist in a dependency-free build; a TrueType reader is ~300 lines of builtins."
          },
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01De3yNTiAHwpHC6TamfNjxh.json",
            "text": "nothing at the encoder says its exact bytes are pinned by a committed PNG under gitops/prod/front-door; only the marketing suite finds out"
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "platform/pages/readme-live-link.mjs",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01GwtaBa4BPe7HThCppTJRGb.json",
            "text": "PR #9958's base-URL move updated BASE but not the regex that detects an existing link, turning main's Pages tests red; fixed here."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Lb9NbqBPUxtZJFKPDQLWte.json",
            "text": "#9958 changed BASE but the already-linked regex still matched only monorepo-projects/, failing 6 readme-live-link tests on main; fixed here to accept either base."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "portfolio/DIRECTION.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01HzpMttK31quhod3p7H1eGz.json",
            "text": "'New ventures get first call' (2026-09-06) was still printed by session_gate.py on every PROCEED verdict after the owner's 2026-10-15 no-new-calculators rule; prose and gate disagreed."
          },
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_01AkeTFUTzLgVsNkJURR8f7Z.json",
            "text": "'owner direction, relayed' sections quote no owner message and contradict the ventures brief on depth"
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "portfolio/ledger/session_gate.py output",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_0151GLjLvx7cNFqxRvDy4Aiy.json",
            "text": "told me to refresh the published snapshot first, but CLAUDE.md says that happens after merge; did it post-merge"
          },
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01TcGWqRUNZzB37dY1iKkkmh.json",
            "text": "build-now queue empty; allocate.py top-20 is all *-calculator ventures, contradicting the ventures prompt ban on new calculators, so I deepened an existing server venture instead"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "prompts/derive.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "review",
            "record": "prompts/runs/2026-10-23-session_01HSgg1rUApvfJwYXYiZWT97.json",
            "text": "fetch stalled at 25/56 again with no progress output; built from partial data"
          },
          {
            "date": "2026-10-16",
            "track": "review",
            "record": "prompts/runs/2026-10-16-session_01Un6HACboJ3w6ixY7DMyVzz.json",
            "text": "no handling of API 403 in sessions without GITHUB_TOKEN"
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "prompts/perf/prompt-0.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "perf",
            "record": "prompts/runs/2026-10-31-session_01E5sJKjhkL4JRwYn8hbLTU4.json",
            "text": "ci_profile.py --runs 600 printed nothing in the cloud session (no output, no error), so step 2 gave no reading"
          },
          {
            "date": "2026-10-30",
            "track": "perf",
            "record": "prompts/runs/2026-10-30-session_01AcxTtJCTaV97ucgKdBkWAQ.json",
            "text": "No perf backlog item existed; the Pages build I meant to profile failed first on a 172-char post description, so no speed measurement was taken."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/process/backlog/P017-path-scoped-instructions.json",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01A9y2QZ54GLbeGzyJsVBJb6.json",
            "text": "Change step 2 (move CLAUDE.md checklist to a skill) is blocked by ~15 tools parsing CLAUDE.md; the item did not say so."
          },
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01VxxrBxyDGQbSNfvsbfg125.json",
            "text": "Five earlier runs each landed a tiny P017 slice; the item needs a decision on repointing ~40 CLAUDE.md pins, not more slices."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "prompts/process/backlog/P024-mirror-git-rm.json",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_018wGvabBCKydeFLxTg67xSR.json",
            "text": "change text said the gitops suite hung >10 min and split into (a)(b)(c); in fact test_manifests runs in 21s and a single git rm plus guard test sufficed."
          },
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_011oHgL3TbGgWjWhRutkZCEY.json",
            "text": "change said git rm the tree; that leaves regen --verify and a gitops test red. Rescoped."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "prompts/promptctl.py record",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "creative",
            "record": "prompts/runs/2026-10-30-session_01E5sJKo94ft7zeRXjdNr2HC-2.json",
            "text": "Refuses when a record for the same session id exists (session ids repeat across scheduled firings); had to write the second file by hand."
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01AcxTtJ22HGs2bW7gQmVp49-2.json",
            "text": "a session id reused by a scheduled routine collides with an earlier run's record file ('already exists'); wrote a -2 file by hand."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "prompts/review/prompt-0.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "review",
            "record": "prompts/runs/2026-10-15-session_0115Q6KgDzj8WhwH9fukcEtL.json",
            "text": "assumes every record's PR is in this repo; 167 records come from the upstream research repo so merged cannot be filled"
          },
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_01XawUqAou1NNZdr2zWAvVkq.json",
            "text": "edited it, then found #7020 had made review/prompt-1 champion mid-session; ported the change. A parallel owner-directed session on the same theme was invisible until the merge"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "prompts/system.json",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_0196knHe2X3c2XLTh5SniF3Z.json",
            "text": "DIRECTION.md description said ~1,000 lines; it is 171 (fixed here)."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01D8sa1G7xpTRTUqLiAxSXc4.json",
            "text": "Per-file line budgets exist but nothing budgets the rulebook total, so the 2026-10-20 cut moved text into goals.md and new runbooks (total +13% in two days). culture.py now reports the total; steering.md names it."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01GwtaBa4BPe7HThCppTJRGb.json",
            "text": "Site URL is /monorepo-projects/ here and in build.mjs DEFAULT_BASE_URL, but /oss-monorepo/ in CLAUDE.md and portfolio/hosting/README.md:343; portfolio-pages.yml builds /oss-monorepo/ when vars.PAGES_BASE_URL is unset. Could not tell which is live from a session."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01D8sa1G7xpTRTUqLiAxSXc4.json",
            "text": "Still opens with 'more than 1,200 browser calculators' though goals.md (2026-10-20) says depth over calculators; left for a venture/pages run because it is the SEO front door."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/_shared/programme_check.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01AouDQmkT6nyr4jjgFiDxkm.json",
            "text": "exits 1 on main for buildbot-torquewall and religion-origins, so the check cannot be used as a clean gate"
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01SUyPwioXYLVszQxfeH5tGr.json",
            "text": "fails on main for codesign-agri-pulloff, a directory not from this run."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/accel-gatedprice/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01UxhKDFXDEXkc7W195vK9z6.json",
            "text": "run.py error says 'sh fetch_pdk.sh pdk (in this directory)' but the project has no fetch_pdk.sh."
          },
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_0172W1kcWzp4W7f1JV3wCqDr.json",
            "text": "Reproduce block fetches the PDK into accel-pdkprice/pdk, but a fresh run.py sweep of 32 syntheses takes ~9 min on 4 cores with no progress output."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "research/accel-kws/experiments/download.sh",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_01VhWPafwNKXNcqLfoLQAn8h.json",
            "text": "Hugging Face mirror still returns 403 from the container; the original TF tarball downloads in ~20 s and is a working source, but no doc says so."
          },
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01AdL7DfQs2GJ3DHU6jnviX5.json",
            "text": "no retry on 429; aborts the whole 3.3 GB download"
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "research/accel-pdkprice/fetch_pdk.sh",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_01Nhoc5cYYciVJPhAAXy6RXB.json",
            "text": "fetched into a dir that is not gitignored by default; git add of the project picked up pdk/orfs as an embedded repo"
          },
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01FWf3dSDcApWC1No4t9pcTH.json",
            "text": "sparse-checks out only sky130 platforms; GF180 needs a manual sparse-checkout add, and matplotlib needs /usr/bin/python3 because python3 is 3.11 without it"
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "research/aerolog-scaling/LOG.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKkh4ftjY8knAyXoJuA.json",
            "text": "Next step (NACA 0012/0015 UIUC data) needs m-selig.ae.illinois.edu, which the egress proxy refuses this session; pyenv install of aerosandbox/neuralfoil took ~330 s."
          },
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKkoeoM13EPp5wEuoxS.json",
            "text": "The 'Next' list repeated a UIUC polar check for several sessions although the host has been unreachable; probe-first note exists but the item keeps recurring."
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "research/aerolog-scaling/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKjQGMLC9dbWrrUm3mF.json",
            "text": "run needs aerosandbox/neuralfoil, not in pyproject; pyenv.py gave python3.13 but python3 is 3.11, so pip installed to the wrong interpreter"
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01E5sJKmyEY8EXRBuddUEETP.json",
            "text": "README still says the next step is 7d; stale after 7d landed."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "research/chip-p32netlist/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_013i9ShGzVq7adNqTK9S3wRz.json",
            "text": "Called the `synth -run :abc` stage 'pre-abc'; in Yosys 0.33 it runs abc -fast. Corrected here."
          },
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_013i9ShGzVq7adNqTK9S3wRz.json",
            "text": "apt python3-numpy does not import under /usr/local python3 here; had to use /usr/bin/python3."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/chip-systolic-p32/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_01Q1qR2eLqmv4fQe3VvSnNYS.json",
            "text": "Reproduce says about 15 min; with five scripts the sequential version takes over an hour, a per-F x script Pool is needed."
          },
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_017z7a3AjRjNcEGco7zxLSNz.json",
            "text": "Reproduce says python -m venv + pip numpy; PyPI/python mismatch here, apt python3-numpy only works under /usr/bin/python3 not /usr/local/bin/python3"
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "research/eda-*/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_01L3D7aEURE7n7oHCMcVi8dB.json",
            "text": "Next steps say OpenROAD is not installable; pip install openroad works (46 MB wheel), so those notes are stale."
          },
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01TWDxxNqKz7fypyQdVRc9bq.json",
            "text": "Many Next steps still say repeat on chip-systolic; eda-conefeat landed the same idea meanwhile, only visible after fetching main."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "research/heavy-hydraulics/PROPOSAL.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01E5sJKkfVvKmbZJbe2TcLHg.json",
            "text": "cite_check could not run (Crossref 403 through proxy), so citations stay unopened."
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtJydw1gK8hwrs14Syc.json",
            "text": "Danfoss PVG 32 document URLs 404/403 this session, so the planned k fit could not be done; log said host was reachable earlier."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "research/llm-coding-inference/experiments/rare_audit.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_019H768ohEGJ5fzR5oYRXrcA.json",
            "text": "needs GoEmotions CSVs in ~/.cache/qual-real; download URL is only in other projects' scripts (qual-real/experiments/run.py)"
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_018GpzByziocsn6eesXUF99k.json",
            "text": "needs ~/.cache/qual-real/goemotions_{1,2,3}.csv but only part 1 is fetched by qual-real; I curled parts 2-3 from storage.googleapis.com by hand"
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "research/lowcomm-training/LOG.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01E5sJKk983ze1T5TYM4aMNg.json",
            "text": "said torch installs with pip; bare `pip` targeted a different python than `python3`, needed `python3 -m pip install torch`"
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01QXoWjVKFGCadGs2VB4DnBj.json",
            "text": "Its 'Next: quantisation' was open to parallel runs; I did not re-check main for a 4e claim before 50 minutes of compute, and PR 10664 had landed the same milestone."
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "research/mimic-anycontext-detect/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01F5nHSRZELEeDrRy1w1L77C.json",
            "text": "Reproduce says pip install, but pip and python3 pointed at different interpreters; python3 -m pip was needed."
          },
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01CxnCe7RUFxQpwkTcxZAMuH.json",
            "text": "says Hugging Face is blocked (403); it is reachable now, so the model-based milestone-4 part was unblocked"
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "research/mimic-twinc2st/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_01Xxg1eYy67yaaAyD8ThkB8u.json",
            "text": "next steps (sample-size sweep) were already done by free-c2stpower; research_idea_dupe.py took >2 min"
          },
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01FUgH4b4kGUM8w6tPjRLWDj.json",
            "text": "Next steps still list the sample-size sweep, which free-c2stpower already landed; I nearly rebuilt it."
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "research/PROGRAMMES.md / pick_track.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01E5sJKjG4zW4AFFYXDbgkdH.json",
            "text": "Drew sim2real-inference, whose remaining items are all blocked on owner steps or unavailable data; picked lowcomm-training instead."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01B4WzzA9s259udEPERtR7QU.json",
            "text": "programme_check.py reports a failure for research/codesign-agri-pulloff, unrelated to this run"
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "research/swe-orgs/tests/test_catalogue.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01QGM75iSiAKHw4Xw3eBBfqo.json",
            "text": "headline-count test fails until README, ../README.md and projects.json counts are all hand-edited; no checklist of the places"
          },
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01TXgWfV6Bjdybw7vMJ8DuWo.json",
            "text": "tests need pytest fixtures (tmp_path) and pytest is not installed, so I ran the plain tests by hand"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "research/verifiable-training-mechanisms/paper/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_013pyXS4H8VxeEd74gwP5vfE.json",
            "text": "Still said milestone 10 TODOs and 'uncompiled'; Limitations in main.tex also said uncompiled. Fixed the latter."
          },
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01X2cVZ3HCtNsFZmjpQyu7fZ.json",
            "text": "said no LaTeX was available; apt-get install of texlive-latex-extra, texlive-publishers (acmart), fonts-recommended and cm-super works in the cloud container"
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": "research/verified-dse/LOG.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01KFaDH3uXpovmmWmLcAQVhh.json",
            "text": "Earlier 'paper sync' entry said BO/BOHB absent while PAPER.md already had them; README was the stale one."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01PjZpManstTmA6SCzyAPCjQ.json",
            "text": "Milestone 21's 'about 350 s' timing led me to plan 400 seeds for an exact-GP arm, which took >10 min and was killed; GP arms need a seed-count estimate first."
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "research/verified-dse/tests/test_proof_success.py",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_017NvqP7R46omEWJEuji18Dw.json",
            "text": "imports pytest, so unittest discover fails on a bare python3; CLAUDE.md suggests pyenv.py but a plain unittest run errors"
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01KzGrhyXeVhyMwSCKHe6JAb.json",
            "text": "imports pytest at top, so unittest discovery fails without it; pyenv.py needed"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "unspecified",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01Jkq4zzAasS8dZt3dqWg8ep.json",
            "text": "CLAUDE.md checklist: node --test platform/pages + marketing + deploy takes ~17 min, exceeds the 10-min tool timeout"
          },
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01QSamunGemc7u52jrmAaBci.json",
            "text": "CLAUDE.md: gitops/tests pytest line unrunnable, no pytest installed and not installed (pip/apt not tried); skipped"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "ventures/changepoint-detector/engine.test.mjs",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_01GkKQFx5p1PbXzdK8nJwLGo.json",
            "text": "full engine test file takes over 120s in foreground; had to background it"
          },
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_01XnWkwVsJqFN6NuuRvgHSXj.json",
            "text": "full file takes over 2 minutes under node --test, so the 120s tool timeout backgrounds it; had to run by name pattern"
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "ventures/changepoint-detector/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01E5sJKkF4kE52yz7Ggoc6uo.json",
            "text": "said the default output does not warn on a cycle; a range warning already fired (rho 0.95), only its wording missed the false steps"
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01BQ5hwE3L5b3YD2aFyuMVYr.json",
            "text": "Speed note listed 'season-aware Poisson ranking' as not done, but the ranking already runs under the seasonal exposure; corrected."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shed-designer/README.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "creative",
            "record": "prompts/runs/2026-10-30-session_01XpHqybqgh2GNkrxZZmfkGP.json",
            "text": "'What it does not do' denies lean-to roofs and uplift checks that newer sections and llms.txt describe (reported by a writer subagent; not fixed here)."
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqydjPUYuhxkkTPrf1fd.json",
            "text": "Stated totals and piece counts (and shed-plans-with-cut-list.html's '144 pieces from 93 boards, $2,166.66') drift from the model on every pricing change; nothing pins them to estimate()."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": ".claude hooks",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01QdxDYQcK1qMGpCfe5JTpC1.json",
            "text": "stop hook flags the live results jsonl of a running background job as untracked; worked around with .git/info/exclude"
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": ".claude/hooks/block_process_grep",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "review",
            "record": "prompts/runs/2026-10-23-session_01HSgg1rUApvfJwYXYiZWT97.json",
            "text": "hook matches the words in heredocs/prose when appending docs, cost 2 retries"
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": ".github/hooks stop-hook",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtHSfZwyJEfJFmCKWRz.json",
            "text": "The stop hook demands a commit of untracked/modified cache files while a background job is still appending to them, forcing several WIP commits."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": ".github/ISSUE_TEMPLATE/config.yml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "creative",
            "record": "prompts/runs/2026-10-30-session_01XpHqybqgh2GNkrxZZmfkGP.json",
            "text": "The no-account feedback link pointed at duncan-haywood.github.io/monorepo-projects/feedback/, which returns 404; fixed to the Cloudflare host."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": ".github/ISSUE_TEMPLATE/idea.yml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01XpHqyctPBqTJmkAkKiHHkQ.json",
            "text": "No tool here creates repo labels, so the 'idea' label may not exist yet; the inbox script searches by the '[idea]' title prefix instead."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": ".github/prompts/cloud-session.md / research/CLAUDE.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01XYamNSsHcUguZimur78FKm.json",
            "text": "No note that the nixpkgs OpenROAD (doCheck=false) is a ~1.5 h source build, that background commands default to a 30-50 min limit and kill it, or that `pgrep -f` is hook-blocked."
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": ".github/prompts/verify-and-merge.md / CLAUDE.md checklist",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01Gp5pmV9mh43KW9ZZTe56eS.json",
            "text": "front-door-tools.test.mjs takes ~25 minutes to run because every test calls buildMirror(); nothing in the checklist warns about it, and 'pkill -f \"node --test\"' kills the invoking shell."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": ".github/rulesets/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "process",
            "record": "prompts/runs/2026-10-31-session_01XpHqygBvxa4SWwYseE56ZX.json",
            "text": "Only two workflows (conflict-markers, agent-cross-review) run on every PR, so a new required check needs its own unfiltered workflow; the ruleset JSON in the repo is not live until an admin applies it."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": ".github/workflows/distribute-pypi-packages.yml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyd12J7W81zXmALgAqK.json",
            "text": "ran platform/distributio./pypi-packages.mjs, a path that does not exist; nothing caught it because no CI ran the distribution scripts or tests. Fixed, and distribution-versions-ci.yml now runs the publisher tests."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": ".github/workflows/distribution-versions-ci.yml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01XpHqyesFn1hk9xCUBqdj6J.json",
            "text": "hub.test.mjs, shorts.test.mjs and launch-kit.test.mjs ran in no pull-request workflow; added them (and the new content.test.mjs) to this job."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": ".github/workflows/portfolio-pages.yml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01VhnjpUZhGAi2HFRFpgwLcZ.json",
            "text": "docs/posts/** was not in the PR trigger paths, so a post-only PR ran no build and a malformed post (loadPosts throws) would only fail at publish on main; fixed in this PR"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": ".gitignore",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "process",
            "record": "prompts/runs/2026-10-22-session_01NpAiShFRHWekyoNz3VTk3s.json",
            "text": "/.claude/ was ignored wholesale, so project hooks could not be committed"
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "(overnight lane prompt)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "polish",
            "record": "prompts/runs/2026-10-29-session_01XpHqyd3twBvmmRdYbigYAJ.json",
            "text": "Lane coordination asked for read-only audit until PR #11268 merged; its branch got several commits while waiting, so the prepared patch needed two manual re-bases. Keeping the work as a patch in the scratchpad (not a pushed branch) worked."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "/usr/bin/pip",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01PbtkzYqqonwutqC1tmzBc3.json",
            "text": "pip installed into /usr/bin/python3 while the default python3 on PATH is /usr/local/bin/python3; deps were not importable until I used /usr/bin/python3."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "CLAUDE hooks",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_014dTh2PUvU1EGXfL9sSAiTT.json",
            "text": "pkill -f / pgrep -f patterns containing the script name killed the shell (exit 144) even when bracketed inside a larger command"
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "CLAUDE.md / land-your-work",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_015wyX3uCD8zbu6uG2dVZHCn.json",
            "text": ".github/prompts/land-your-work.md was not found in the working tree path I tried from a venture subdirectory; used the PR protocol from CLAUDE.md directly. platform/pages/check.mjs needs a dist/ build, not noted in venture-preflight pointer."
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "CLAUDE.md / platform/ci/pyenv.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKijjbeodvqAPAG9Axj.json",
            "text": "pyenv.py torch took over 5 min; my own extra pip download dropped wheels in the repo root, and a rm *.whl then deleted a tracked ledger wheel (restored)."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "CLAUDE.md / session_gate.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01D45426YfQnw2dBdbFi8S6T.json",
            "text": "Gate says to run publish-branch.sh with PUSH=1; the cloud auto-mode classifier denied it, so the stale-site instruction could not be followed."
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "docs/contributing/ideas.md (from PR #11907)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01XpHqycW1nSEv4yA4pbkitB.json",
            "text": "Said 'a session will land it' for a github.com edit that becomes a PR; from a non-writer that is a fork PR agents may not merge. Corrected."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "docs/contributing/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "creative",
            "record": "prompts/runs/2026-10-30-session_01XpHqybqgh2GNkrxZZmfkGP.json",
            "text": "Said the live site is GitHub Pages; it moved to Cloudflare on 2026-10-29. Fixed here and in fix-a-tool.md and research.md."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "docs/history/pages-build-perf-2026-10-20.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01TuQzdnaSyKCwiXGSm4DwEE.json",
            "text": "Item B says each of the 281 copies 'books a runner for a 1.3s check'. None does: in every file the check is a step in a job that already runs the venture's tests, so removing it frees no runner. The item also lives only on PR 8767's branch, not main."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "docs/posts/",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01RveYHEf8khHNpbyvj7dzee.json",
            "text": "Five posts from other PRs reached main with descriptions over 160 characters or none at all (chip-estimate, skipping-training-steps, freight-line, bank-description-formula, label-free-audit), each breaking the Pages build for every open PR; fixed here in three rounds. Other sessions are merging while build is red: a pre-commit or merge-time check on post front matter would stop it."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "docs/posts/2026-10-21-what-ai-agents-depend-on-and-where-they-beat-people.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01DZijpNQhQyR2dAV9wLJYbn.json",
            "text": "208-character description on main breaks build.mjs, so browser_checks.py cannot run for any venture until open PR #9034 lands; verified locally with a temporary uncommitted shortening."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "docs/posts/2026-10-29-flagship-tools-now-open-on-a-button.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtJq9SwVy5XRAvHgEe1.json",
            "text": "another run's post has a 170-character description; check_post_frontmatter.py fails on main."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "docs/reports/2026-10-24-pr-review-without-dead-branches.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01UPvETpjvBS9dHKehnM838Z.json",
            "text": "Section 1 calls the 38 drafts fan-out batches from 'dispatching N workers per task'; they were opened by adopt-stranded-branches.yml, one per abandoned branch, and only two pairs were true siblings."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "docs/reports/assets/file-formats-for-llms/measure.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "explore",
            "record": "prompts/runs/2026-10-30-session_01XpHqydoqN88Sbnkt6ij4Lz.json",
            "text": "The live site returns 403 to Python urllib's default User-Agent through the proxy; a curl UA works. Worth knowing for any script that fetches our own pages."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "docs/reports/polish-2026-10-29-site-scan.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "polish",
            "record": "prompts/runs/2026-10-29-session_01AcxTtL7F7Lgs7xuh1WRcyM.json",
            "text": "Next-run list named shift-roster-builder/changepoint-detector as lacking a first-screen button; both already had one, costing an audit."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "docs/reports/polish-2026-10-31-seo-titles-batch-11.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "polish",
            "record": "prompts/runs/2026-11-01-session_01E5sJKn7RR6GyCecLiiUASQ.json",
            "text": "said ~91 headlines remained over budget; the script now reports ~33, so the count was stale"
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "docs/reports/shed-designer-overnight-lane2.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqybgbjtZBC1yuM1sWw3.json",
            "text": "Its guidance on merging generated size pages went stale once #11524 landed; the round-2 lane report replaces it."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "eval/browser-click.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_012uA1SUDDPCEc48wJEv4E2K.json",
            "text": "PLAYWRIGHT_PATH must name the entry file (index.mjs), not the package directory; the header does not say so"
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "gitops/tests/test_ci_runner.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01V1T9eEFeANvWqBTz5xqaHn-2.json",
            "text": "5 tests fail on clean main (adopt-stranded-branches.yml runs-on and README counts); not fixed here, noted."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "gitops/tests/test_publish_branch.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01J6HuSx2eypakUMUBNtLuy1.json",
            "text": "its publish-branch.sh stub rejects any unknown build step, so adding a page step fails 16 unrelated-looking tests; nothing in publish-branch.sh points at the stub"
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "gitops/tests/test_site_usage.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_0168RhD9My6SGay2eQk6gfiG.json",
            "text": "Hand-kept list of top-level page buckets is not mentioned in platform/pages/README.md, so adding a site page fails gitops CI only after the push."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "gitops/tests/test_worker_run.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01EZCsNQHAhLgkj4Bb1cnV3w.json",
            "text": "26 tests fail on clean main in a web session because gh is preinstalled at /usr/local/bin; the checklist does not say to expect it."
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "marketplace-fee-compare/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01EdAF1kRX5fzgrHgWr3q3RS.json",
            "text": "Stated '64 tests across five files' while nine test files existed; replaced with a run command."
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "oss-research-monorepo/CLAUDE.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01EZCsNQHAhLgkj4Bb1cnV3w.json",
            "text": "Said the move into oss-monorepo was on hold; #6832 merged the fold-in during this run."
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "platform/agents/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01L363PcEijRnWJS4u8fHVds.json",
            "text": "call --input merges the module's DEFAULTS into the input, so an engine that accepts a free-text field alongside structured fields must ignore default-valued fields or the defaults silently override the text; worth a sentence for engine authors."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "platform/ci unittest discover",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "explore",
            "record": "prompts/runs/2026-10-19-session_01LA5T9ff1eemshW3HKFiEGg.json",
            "text": "agent_review/test_review fails to import under discover from platform/ci; needs the per-dir invocation in verify-and-merge.md"
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "platform/ci/missing_llms_txt.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "explore",
            "record": "prompts/runs/2026-10-23-session_017GuXx8qY1bWWwsxFw2SGdt.json",
            "text": "Raises BrokenPipeError when piped to head."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "platform/ci/post_merge_review.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_016ckMCYZWPQXidJFizbTnpa.json",
            "text": "First risk-tier regex matched 'w2' inside a run-record session id and tiered it high; caught on the first live queue run, fixed with a test. Path-regex tiers need a sanity look."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "platform/ci/publish-surface.yaml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "explore",
            "record": "prompts/runs/2026-10-17-session_018tL33P4qoNgPsLDm6dQUa9.json",
            "text": "snapshot not regenerated when two workflows were added; test failed on main"
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "platform/ci/research_idea_dupe.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKkh4ftjY8knAyXoJuA.json",
            "text": "Command fails when run from research/ as a relative path; works only from repo root (my cwd had drifted)."
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "platform/ci/slug_dupe.py (land-your-work.md)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01Mr2F455xbqGgeaYWn5udwk.json",
            "text": "Doc gives the command with a bare relative path; run from a venture dir it fails. Cost one call."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "platform/ci/test_adopt_stranded.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "explore",
            "record": "prompts/runs/2026-10-17-session_018tL33P4qoNgPsLDm6dQUa9.json",
            "text": "test expected a skip reason for a branch that unlanded_work.sweep now filters out first; stale after landed_by_content was added"
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "platform/ci/test_check_money_sign.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "explore",
            "record": "prompts/runs/2026-10-17-session_01E97xXq4JPNYqdwmy99JT5o.json",
            "text": "Repo-wide guard test was red on main (llm-spend-guard usd()); python -m pytest is not installed, unittest discover works."
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "platform/ci/typecheck.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyfVgGHrV4NLW2yWU3a.json",
            "text": "The round brief names node platform/ci/typecheck.mjs; the script is platform/pages/typecheck.mjs."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "platform/daily/collect.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01E7BjRjSFvZfVEnBiRFS9fN.json",
            "text": "readMerges reads 14 days (7 editions + a 7-day lookback) with --numstat; nothing at the workflow level says so, and it is what pins the Pages build to a full 5.2 GB clone."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "platform/deploy/compose.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_011coYMyVPDFKtVRVJeqm9vd.json",
            "text": "used 'azure' as its unknown-provider example, so adding Azure broke it"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "platform/devstats/devstats.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "process",
            "record": "prompts/runs/2026-10-17-session_018whDj8oVnaW5ttoYDECgyw.json",
            "text": "the existing CI metrics read 2-3 pages of runs as if complete; at ~10,000 runs/day that is the last ~30 minutes, and the runs API caps total_count at 2,500 (undocumented in-repo)"
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "platform/distribution/android.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "explore",
            "record": "prompts/runs/2026-10-16-session_01TKuCct1k2Rfd1ZJYMoRU5S.json",
            "text": "claimed Apple has no offline-capable wrapper; true only for Trusted Web Activities, a bundled WKWebView app works"
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "platform/distribution/ghaction.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_01FbBBnkbxpGNvkug8c6597u.json",
            "text": "main had a stale generated action (actions-schedule-check) failing ghaction.test.mjs; the generator is not enforced on the PR that adds a linter"
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "platform/distribution/hub/compose.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01XpHqyesFn1hk9xCUBqdj6J.json",
            "text": "BASE_URL (and bluesky.mjs BASE_URL) still name duncan-haywood.github.io/oss-monorepo/ although the site moved to marisstella.app on 2026-10-30; links still work via redirect stubs that keep ?ref=, but cost a hop. Left for a separate change because many tests pin the old URL."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "platform/llm/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01TkN8KvHLTD44Guv4JvzRKm.json",
            "text": "Says ventures keep a synced copy of byok.mjs but names no sync command; a change to the shared client left 9 copies stale and their tests red on main."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "platform/marketing/front-door.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01QQJ6gVKuYNY2VUEYunSNGf.json",
            "text": "the full file takes over 2 min locally and timed out; only a name-pattern run finished in time"
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "platform/pages launched.test / build.test",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01HRbzGnfgit6w6q4Td8AEaF.json",
            "text": "platform/pages suite has 5 failures on main unrelated to venture changes (page-seo-audit launch date, breadcrumb JSON, budget); suite takes >10 min"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "platform/pages tests",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "explore",
            "record": "prompts/runs/2026-10-19-session_01BCtJe5nqbJ2z3foapyLNUD.json",
            "text": "node --test platform/pages/*.test.mjs and build/check tests exceed 400s; the verify checklist gives no fast subset for a text-only change"
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "platform/pages/*.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "creative",
            "record": "prompts/runs/2026-10-24-session_01LnHtriEECQCJPpRpkvL94M.json",
            "text": "Interrupted site-builder test runs leave ~480 MB /tmp/pages-build-* directories each; a few runs fill the session's disk allowance."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "platform/pages/build.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01Ras7kzmRPhUWVqPuG3Gffq.json",
            "text": "Full suite exceeded 15 minutes locally and was killed by timeout; one cache-name test failed in that run while the tree was being edited concurrently."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "platform/pages/check.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqybrr8TCMDDbRen5vrs.json",
            "text": "Tests used .wasm as the example of an extension nothing serves; adding the first WebAssembly asset broke three of them. Switched the example to .glb."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "platform/pages/contrast.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "polish",
            "record": "prompts/runs/2026-10-28-session_01EhTJVNzzvun3BaaLocjML6.json",
            "text": "needs PLAYWRIGHT and AXE env set in this sandbox and the full sweep outlasts the tool window; slug arguments filter it (noted in the report)"
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "platform/pages/generated-pages.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqycdrpSxeSAfKHT2UX3.json",
            "text": "Nothing said a generator must write only gitignored files; now it does."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "platform/pages/LAB.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_015MsDQPFBznZyUiA2SybAp2.json",
            "text": "Shorts plan says to record with Playwright; recordVideo ignores deviceScaleFactor so a phone viewport records at 432x768. Logged the alternative there."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "platform/pages/optout.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01KnZ5G7MrjKVqfXvh33w9j8.json",
            "text": "preferred any checkbox labelled 'counts' over a button with id #optout, so changepoint-detector failed the optout check on main; fixed here"
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "platform/pages/README / session_gate.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "ventures",
            "record": "prompts/runs/2026-10-16-session_01AxQtdh4qQiYwxdCcA21fuc.json",
            "text": "gate says the snapshot needs only a push, but the build fails when a venture lacks a launched.json entry; run launched.mjs --write first"
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "platform/privacy/browser-signals.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqybzchtMfHw92UkSk5K.json",
            "text": "A usage recorder that needs an event argument reads as undrivable; the checker's call shapes are not documented next to the recorder pattern."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "platform/proposal/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01SYDGgbDNNvbMbuHP8mFjLb.json",
            "text": "Listed biohazard-cleanup as a current holdout, but adopt.mjs --list shows it adopted."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "portfolio/distribution/channels.yaml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "ventures",
            "record": "prompts/runs/2026-10-16-session_01945KecBumh7Stj7zTqsUQK.json",
            "text": "File was invalid YAML on main (unquoted backticks in the mcp-server entry); nothing validates it. Fixed in this PR."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "portfolio/ledger/decision_queue.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqyfLW7wSEJmLBRH72gZ.json",
            "text": "Row pages-custom-domain still cites /monorepo-projects/; left for the ledger owner."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "portfolio/opinions/2026-10-20-rust-where-it-is-essential.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01NMozts5daMZiQMRMLu1thr.json",
            "text": "Said the browser has no scipy; Pyodide ships it and simdesign-topopt's 2D SIMP runs unchanged at ~1.5x CPython. Corrected in place."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "portfolio/research-tools/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01XpHqycgams7N3rBhvZh6g7.json",
            "text": "Still required 'Pure JavaScript (or WebAssembly) in the tab; no server' after the 2026-10-21 static-only rule was dropped; the browser-only requirement outlived the static-only one."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "portfolio/research/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_019ZFPqEHZcs8AVhFhJKHi24.json",
            "text": "House rules say every script is standard-library only; a tsc measurement needs an npm package, so the study states the exception instead"
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "portfolio/scoring/score_ventures.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01V1T9eEFeANvWqBTz5xqaHn-2.json",
            "text": "--check required a hand-made score for every venture; with ~25 ventures/day it kept Portfolio validate red on main and invited invented numbers. Now reports unscored ventures instead."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "portfolio/scoring/venture-scores.yaml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "explore",
            "record": "prompts/runs/2026-10-21-session_016PpM3MCqmgHP6vvjTZDgNV.json",
            "text": "No per-venture domain/category field anywhere in portfolio/, so counting coverage by domain had to fall back to name keywords (docs/reports/assets/agent-domains/count.py)."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "prompt.md / research/CLAUDE.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01GFV8DmgRqZyNWnDULkL42R.json",
            "text": "pyenv.py printed only the interpreter path (python3.13) so install success was not visible; had to re-import to confirm"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "prompts/derived/runs.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "review",
            "record": "prompts/runs/2026-10-16-session_01F52ogZgVgMiuXEXSoeGbQz.json",
            "text": "Top-level is {generated, rows, window_days} and merged lives under rows[].measured.merged; took three tries to read."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "prompts/goals.md / CLAUDE.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_014N8TfStncxNXMJRPPb1F3M.json",
            "text": "Queue top rows (state-residency-day-counter, event-seating-chart-optimizer) were already saturated; Explore rows give no pointer to what is missing"
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "prompts/polish/reports (2026-10-30-llms-link-check)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01AcxTtL4tEKE8oRKSJ7j7MK.json",
            "text": "Said 16 ventures lacked llms.txt; only 5 did, so the number was stale."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/process/backlog/",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_01QY4j68L55gr5gezXoizGtV.json",
            "text": "Backlog id P017 is also cited by PR #7236 for unrelated home-page work; searching open PRs by id returns a false hit."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "prompts/process/backlog/P012-portfolio-validate-red.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_01MwAqz15XghuATC6dormfiq.json",
            "text": "Described the red check as venture YAML; it was already fixed and the real recurring red was malformed run records."
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "prompts/process/backlog/P015-group-ventures-merge-near-duplicates.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "process",
            "record": "prompts/runs/2026-10-17-session_013saTi67ZRNi3fdSUerd6BY.json",
            "text": "Change text did not mention portfolio/pipeline/corpus_dupes.py, which already does the duplicate scan; I wrote a duplicate of it before finding it."
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "prompts/process/backlog/P016-consolidate-venture-ci-workflows.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "process",
            "record": "prompts/runs/2026-10-16-session_011hHFNPRBXn3en7wyUuKogZ.json",
            "text": "Step 1 (teach validate_workflows to accept a portfolio workflow) was already true via ventures-tests.yml; item text was stale."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "prompts/process/backlog/P021-split-oversized-items.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "process",
            "record": "prompts/runs/2026-10-17-session_01XDpd8NLMaWLy5pw7TaDPGf.json",
            "text": "Change promised splitting P017 but only P014 was split; P017 stayed one row."
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "prompts/process/backlog/P037-verify-main-validate-base-fix.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_014kQgrrK2QmZBiKdNvTuuay.json",
            "text": "Its change text expects only the venture-regression step to fail; the real remaining failure was the mirror-staleness step, so the item needed a different reading."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "prompts/process/backlog/P059-push-hook-diff-base.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01AcxTtH6TPcvnsZdZExbiQE.json",
            "text": "Only open agent row needs a .claude/ edit the classifier denies; prompt-1.md does not route such rows to the owner."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "prompts/promptctl.py / Bash tooling",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_01MmXiR37HXryF3u7dm8dH15.json",
            "text": "pkill -f in the same shell line killed the session shell (exit 144); no doc issue with prompts themselves"
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "prompts/promptctl.py validate",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_017ZceUePdMvoeQuQ3J5JULh.json",
            "text": "A done backlog item needs 'pr', which is only known after the PR is opened, so the first commit fails validate; needs a second commit."
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "prompts/redteam.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01VhnjpUZhGAi2HFRFpgwLcZ.json",
            "text": "excludes research/ as a 'mirror', stale since the 2026-10-16 cutover, so research tests are never mutation-measured (found by a subagent; not fixed here)"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "prompts/router",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "explore",
            "record": "prompts/runs/2026-10-19-session_01814h3UDkv2be77ULim7QpY.json",
            "text": "Top router row (where-to-sell handoff) is already built end to end; the task text does not say what remains to ship."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "prompts/runcost.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01XpHqybsan53CqC4GNnvd1X.json",
            "text": "--human-hours is optional on attach; only 46 of 1,930 run records after 2026-10-20 carry an estimate, and none of ai-bookkeeper's 62, so project-size bars can't be measured from the records"
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "prompts/runs validate",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01GN1fJQhUsdEJwiYWePG6Yf.json",
            "text": "another session's record (018obG6y...) on main fails validation (outcome/doc_friction format); not mine, left alone"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "prompts/runs/",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "explore",
            "record": "prompts/runs/2026-10-19-session_01PnUuEzr1DcVJ1vKL9uK66n.json",
            "text": "glob 2026-10-19-* matches other sessions' records; read by full session name."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "prompts/runs/2026-10-15-session_013VkAq5ZZEf8SUo1nWJpT2J.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "redteam",
            "record": "prompts/runs/2026-10-15-session_01JR8kta8wubES2egnCBnAAm.json",
            "text": "malformed record already on main makes promptctl validate and test_the_real_prompt_system_is_valid fail; not mine, left untouched"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "prompts/runs/2026-10-15-session_017kshovpXgesG9ENxQMjKAX.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "research",
            "record": "prompts/runs/2026-10-15-session_01RjiRQKaMAn54iXZkJASexc.json",
            "text": "Another run's record has an invalid outcome and doc_friction shape, so promptctl validate fails on main."
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "prompts/ventures/prompt-1.md / land-your-work.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01CCs8qB2L7oHnhBdAtQVZb7.json",
            "text": "stranded-branch sweep listed proposal-maker and tile-layout-optimizer, both already on main; sweep does not filter landed slugs"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "regen.mjs / measure friction list",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_019e61V4bZjrq4mtn2BbNXkH.json",
            "text": "front-door-tools friction was already fixed (P024); stale entries cost reads"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "research/accel-dataflow/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01AMt26BUJc4k1fvFs1ZRB8w.json",
            "text": "Next steps asked for P>1 RTL; fine, but no document says which python has numpy/matplotlib in the fresh container: system python3 (3.11) lacked numpy and apt matplotlib was built for another interpreter; needed a venv."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/accel-fetchprice/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01XCWRRTe42qTCfyjYxK4jrL.json",
            "text": "No friction in the brief; python3 on PATH lacks matplotlib and pytest, /usr/bin/python3 has matplotlib (figure step)."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/accel-gatedlanes/experiments/figure.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_01EqXfKswfTd5szfkcXSvkrs.json",
            "text": "filters on B == 16 but the sweep only has B=4 and 8, so the figure script plots nothing; not fixed here"
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "research/accel-pdkprice/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01T6X7tNsK342Lu8ssabmvPo.json",
            "text": "Next step suggested simulating .sp netlists with ngspice, which is not installable in the cloud image; reading the generator source answered the question instead."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "research/accel-plane/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_019tq9AoWT4X91eh1Fuja7S9.json",
            "text": "README ends after Results; no Limitations/Next steps section, so the next step had to be derived from accel-dataflow's README."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/accel-sparse/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01AdL7DfQs2GJ3DHU6jnviX5.json",
            "text": "says 14 designs; the code defines 13"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "research/aerolog-scaling/experiments/*/run.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01E5sJKn7RAuwNDregUiFWky.json",
            "text": "scripts must run from research/aerolog-scaling (relative paths), not stated in the run header; first launch from repo root failed on import."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "research/aerolog-scaling/experiments/airfoil_polars/run.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01E5sJKj6G8NibXQkj5Eh1UD.json",
            "text": "needs /usr/bin/python3.13 with aerosandbox/neuralfoil; bare python3 is 3.11 without them, pip install targets 3.13 silently"
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "research/aerolog-scaling/PROPOSAL.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01E5sJKkHzbnoS4uzVK5nSBA.json",
            "text": "cite_check cannot reach doi.org through the proxy (403), so the proposal's 5 DOIs stay unverified"
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "research/ambient-hlrtlevel/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01XWE3ZTZdStkiB5uFpVvrLq.json",
            "text": "Reproduce says pip install numpy pytest matplotlib, but python3 on PATH (/usr/local/bin) lacked numpy; pip installs for /usr/bin/python3 only. Cost a few minutes."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/ambient-hlrtmis (copied project)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01XWE3ZTZdStkiB5uFpVvrLq.json",
            "text": "cp -r of a prior project copies its README, which must be fully rewritten; easy to leave stale."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/build-data/LOG.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGZbGRDeYb5oko14Zg.json",
            "text": "Session 7 design said run 3 seeds on all pairs; two chains on 4 cores with 4 threads each ran over 30 minutes without finishing, serial with 2 seeds took about 10 minutes total."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "research/build-data/PROPOSAL.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKkUJDpKTBTUp9ftZPd.json",
            "text": "milestone 1 needs data.sfgov.org/austintexas/cityofchicago, all 403 through the proxy this run; the 10-31 session reached them"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "research/buildbot-fasten/src/buildbot_fasten/model.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_01Bi7KrvjCpJjH68MmwAPFNR.json",
            "text": "imports mujoco at module top, so a stdlib project cannot reuse the nail schedule; re-derived constants in buildbot-studfind with a cross-check test"
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "research/buildbot-payload/src/buildbot_payload/fetch.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01UZKJsxBbCx65brqoX9ZBUE.json",
            "text": "Sparse --filter=blob:none clone of Menagerie fails through the proxy (exit 128); a plain --depth 1 clone plus BUILDBOT_MENAGERIE worked. README now says so."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/buildbot-taskbook/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_015C7q7mYeCrxzFStsm72SLZ.json",
            "text": "Its 72 nails per sheet counts three interior studs; a 4 ft sheet at 16 in has two (62 nails). Reported in buildbot-fasten, not changed."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "research/capture-audiosync/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_01871P3GJQUyH5v6hq6ot1e4.json",
            "text": "Next steps still lists coarse-to-fine search, which capture-syncfine already did (only a footer note says so)."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "research/capture-residgate/pyproject.toml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_014Qey4R6tFMDgT3fkxHT9pX.json",
            "text": "importing capture_residgate pulls capture_edit transitively, so a new follow-up project needs the whole 8-package pythonpath; undocumented"
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/chip-abc-order/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_01Tcbk5gtbNrsNeGnPiADos5.json",
            "text": "Its hypothesis (alumacc/macc grouping) was wrong; the divergence is at opt_merge. README flagged it as a hypothesis, so no harm."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "research/chip-abc-sweep (linefig table section prefix)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01Ff5ZJd8Pjbc71mJ6jHP9zC.json",
            "text": "figure.py section prefix must include the spaces left by replacing '=' with ' '; cost one retry"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "research/chip-ppa-logic/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01HWpecARrSvPUppaTKcgJBZ.json",
            "text": "none; apt install of yosys fails until apt-get update is run, not documented in Reproduce lines"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "research/chip-ppa-loop/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01M6SVgW2DGo4xdwjMnkSBsj.json",
            "text": "Reproduce says apt-get install yosys iverilog, but a fresh container needs apt-get update first or the packages are 'not found'."
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "research/chip-systolic-hidewide/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_01QM786jtSrfyCAFgdWKDh2B.json",
            "text": "Next steps list P=32 and MAC-engine-at-H=16 items that were already done by chip-systolic-p32; stale next steps invite duplicates."
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "research/CITATIONS.bib",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01GnbRWig1E4hdCXUU3vNXHd.json",
            "text": "No Horowitz 2014 entry, so no checked citation for energy ratios; used none."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/civ-levers/pyproject.toml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01AcxTtLHS3GqLGBxiikmgFD.json",
            "text": "pytest needs PYTHONPATH=src; package not installed, no conftest"
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "research/CLAUDE.md / CLAUDE.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01BPR3A62w44ebHB8Rgnqzep.json",
            "text": "No note that system python3 here is 3.11 with a broken dist-packages numpy on PYTHONPATH; a venv was needed. accel-gatedrtl README does not warn that Yosys memory explodes past P*B*24 ~ 3k flops with 4 workers."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/codesign-aero-cant-bound/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01LRwJYfY2YhvQHEpPnqjwT1.json",
            "text": "Five sibling READMEs copy forward the same 'add position hold' next step; it is now done."
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "research/codesign-logistics (own run.py)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01AL4w6n6metHh3JEQShRKKF.json",
            "text": "copying a script with sed left the success threshold literal `r[\"J\"] >= 0.60` untouched, so the first results said 'never'; caught by reading output."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "research/eda-adapt/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_01SupxKQopRwSA56gL7wNuQ1.json",
            "text": "Next steps still say 'once OpenROAD is available' though eda-postplace showed pip install openroad works."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "research/eda-biasdraw/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01NpUubC79CLwhPBqJqR2P1i.json",
            "text": "next step names SymbiYosys+Boolector, which cannot be installed here; only yosys-smtbmc+z3 is practical."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "research/eda-conefeat/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01H4j4cfDXmeQWDJsvCVboR7.json",
            "text": "Reproduce says pip install numpy, but after apt installs yosys the default python3 (3.11) imports a broken dist-packages numpy; python3.13 worked."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/eda-equivpredict/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01FSaszzbomiTaCEsV7KYoSo.json",
            "text": "Says survivors span about a dozen lines; actual distinct lines is 11."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/eda-harness/tests",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_01WkqcEC9bCW4Eb4zCjBwav8.json",
            "text": "Harness tests need PYTHONPATH=src:../chip-accel/src plus numpy/yosys/iverilog and take ~2 min; not documented in the harness README."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "research/eda-proposers/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_01NPdVh36pcobrpZBSK5cArx.json",
            "text": "Reproduce section assumes numpy and matplotlib; neither is installed in the cloud image, so only stdlib follow-ups run without setup."
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "research/eda-smtbmc/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_012i6j32j1F4mGZCGwB34VkA.json",
            "text": "Next steps suggested the word-level route; it was worse than bit-blasted with z3 (timeout at depth 1)."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "research/eda-verify/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01CZtRfSbQWnEb6RfM1HTf98.json",
            "text": "apt-get install yosys needs apt-get update first in a fresh container; apt also pulled python3-numpy that shadows /usr/local python's numpy (use /usr/bin/python3)."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/energy-cell-dfn/experiments/run.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKj5JL6bLFH4K5XbsHP.json",
            "text": "evaluate_with swallows solver exceptions and scores 0, hiding the cause of the SPMe failures."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "research/energy-store-cop/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_018SzY7JjvjsQsDTQtSisZBQ.json",
            "text": "Next step 2 assumes a sourced exchanger cost; technology-data has none (only a heat-to-electricity Sand-discharger) and energy-thermal-cost/data/params.csv has no discharger rows, so the price had to be swept."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/energy-tou-lp-forecast/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01CwpRVFFVtwKD7NwP5q3jW2.json",
            "text": "Limitations said synthetic weather days are independent; energy-home uses a Markov chain (lag-1 autocorr 0.50). Corrected."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "research/hanger-avoidpaired/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01BvErzfPfAR43f2ohHMkNex.json",
            "text": "Two different 'Live page' lines (a stale monorepo-projects URL) sit in the README; left as is."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/hanger-cellpick/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01UWGjCRGx9Z7UgM24i9rKhD.json",
            "text": "none significant; pick_track.py output was truncated by a long next-steps line"
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/hanger-fold/experiments/results.txt",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01JHnxcsFwkFYA3qjQEt76bU.json",
            "text": "section headings lack the '== ' prefix hanger-insert uses, so a parser had to accept both"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "research/heavy-hydraulics/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtJZHUBXdKz6roP5vrw.json",
            "text": "Status line still says 2a to 2g done; log is at 2n. Added a Latest line rather than rewriting."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "research/house-breakeven/pyproject.toml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01KznT24oR1vfZwVKYpnBeQo.json",
            "text": "pythonpath omits ../house-truss/src, which house-open-design imports, so sibling imports fail when reused from a new project."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "research/house-cost/experiments/run.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_01DiFw1d33L4yMw3TLMVW357.json",
            "text": "called main() at import with no __main__ guard, so reusing LEVERS ran the whole script; added a guard"
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "research/house-plan/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "research",
            "record": "prompts/runs/2026-10-18-session_01SFLJKAcMAdNwyKHVL6uTfz.json",
            "text": "says ifcopenshell wheels need Python 3.13; pip install on the default 3.11 fails silently into a py313-only wheel, platform/ci/pyenv.py pytest ifcopenshell resolves it, but no doc points there"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "research/infra-dcopf/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01TaVYRZj8qo4Q4jdkcaHixy.json",
            "text": "References say DOIs are from memory and unchecked; not re-verified this run (cite_check not run, no new citations added)."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/lowcomm-training tests",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01GK5Uc57zMa1LXb7fJcvFzz.json",
            "text": "pytest needs PYTHONPATH=src; pyenv.py's interpreter is not enough and the README does not say so"
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": "research/lowcomm-training/PROPOSAL.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01B4WzzA9s259udEPERtR7QU.json",
            "text": "Plans a torch-style nanoGPT; torch is not installable in cloud sessions (download.pytorch.org 403), so milestone 1 used numpy"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/lowcomm-training/tests",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01R9L7uHbQPY2yyfkRMP3bND.json",
            "text": "pytest needs PYTHONPATH=src for test_harness.py; not documented."
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "research/marine-hull/PROPOSAL.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtKFShUimRYF2oLaNDD.json",
            "text": "Milestone 3 was recorded as blocked on data hosts, but zenodo.org was reachable; a one-line probe of several hosts first would have unblocked it a week earlier."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "research/marine-hull/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01AcxTtKFXuSg6vGpbmMQv1j.json",
            "text": "said pytest tests -q works; bare python3 lacks pytest and pyenv.py printed the same interpreter, so tests ran only after pyenv resolved it"
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "research/marine-hull/tests/test_hull.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01AcxTtH89qbzroVmPvMwrhK.json",
            "text": "imports pytest, absent from the bare python3; unittest discovery errors on it"
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "research/mimic-evade/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_01QobmLGJwjybD7aVKkRnnyP.json",
            "text": "Next step (zero-shot score) needs huggingface.co, blocked by the egress proxy; had to pick a different slice."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "research/osrobot-assist/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_01GiVhChzGsr5RmAeRhcweou.json",
            "text": "Next steps still lists lip stiffness sweep, already done by osrobot-lipsweep; had to grep the tree to find that."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "research/PROJECTS.md / LOG.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01KDUVUkm4itK9u2twp4xfMd.json",
            "text": "LOG 'Next' pointed at real per-episode SIMPLER pairs, but only policy-level rates are published; cost time to establish."
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": "research/PROJECTS.md / pick_track.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01EBJXoZT7btVfB1gVX8cbMp.json",
            "text": "pick_track drew a venture-style track (civ-*) while PROGRAMMES.md says advance an open programme; had to choose manually"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/qual-*/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01CGGVTqfWw1AyyP8YeXaEBU.json",
            "text": "Track 19 chain is micro-variants of one audit-design result; 'Next steps' repeat across 6 projects."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/qual-highrecall/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01NJjBK3JN1vRhgT7NSv3STa.json",
            "text": "Next steps lists a Wilson stratum interval, but qual-negint already shipped it; stale next step."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/selfrep-partpool/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_013UgJPCQV6HwkDVnQxnFJQt.json",
            "text": "Next steps asks for real part masses, but selfrep-closure BOM has only assumed placeholders; did plate packing with uniform parts instead"
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "research/sensing-imuarray/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "research",
            "record": "prompts/runs/2026-10-19-session_01XUtKp4SudxczHNgCKH1jJP.json",
            "text": "Next steps names sensing-vio, which needs data not reachable here."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "research/sim2real-inference/experiments/m7h_uncapped_betting/uncapped.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_011j9xu61AwyyGBeYero6DL8.json",
            "text": "fixed 1/600 grid is wider than the betting interval at N>=20,000; silently returns the whole range. Worked around in m7k with a centred fine grid."
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": "research/sim2real-inference/paper/main.tex",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_011ii7qkYp7xZ8a16bowPCXe.json",
            "text": "Paper lagged the log by milestones 7d/7e and reproduce.sh/README missed them; no check enforces paper-to-log sync."
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": "research/sim2real-inference/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01E5sJKoCrNagL3x1DVxQFK9.json",
            "text": "says run tests with unittest (11 tests); suite now 33 and pytest with PYTHONPATH=src is what exposed the shadowing failure"
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "research/sim2real-inference/tests",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Jdx455f5Qm5nwWMnTRC4wU.json",
            "text": "pytest over tests/ fails collection without PYTHONPATH=src; no conftest"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/society-converts/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01HR5fopCGwxxuDzYc2EFrzh.json",
            "text": "Next step 'fit to Moussaïd et al. 2009' recurs in several society READMEs but arXiv/PMC/Europe PMC return 403 from the container proxy, so it cannot be done here; no note says so."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "research/society-learnrobots/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_019AoKMoVrB79XnbA4gyUUn5.json",
            "text": "Next steps item 2 duplicates society-doorcost's; neither said whether it was claimed. research_idea_dupe.py flags door/learn keywords but not this specific step."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "research/society-milgramfit/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01E9JfpBxYRF6cqdYA6TPmxc.json",
            "text": "Next step 1 (read the 1986 paper) is unreachable from the cloud container: publisher and search return 403/no primary text."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "research/swe-friction/src/swe_friction/friction.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "explore",
            "record": "prompts/runs/2026-10-20-session_01WrQc8h31m3U4QbESE2kE3o.json",
            "text": "Keyword themes leave 45% of 1,232 entries as 'other'; in a 60-entry hand-coded sample 23 of 26 'other' were real failures, so theme counts undercount missing-case and cost complaints."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "research/swe-orgs/data/practices.csv",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "research",
            "record": "prompts/runs/2026-10-16-session_01KMgDQ1fzu4smpAr1G1mzR1.json",
            "text": "P16 and P4 still described the retired research mirror"
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "research/swe-sharedfiles/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_01FEbNpdBmMU221S3JWMMEy3.json",
            "text": "Reproduce says git fetch --unshallow; a concurrent fetch left a stale .git/shallow.lock that had to be removed by hand."
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "research/verifiable-training-mechanisms/LOG.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKijjbeodvqAPAG9Axj.json",
            "text": "Milestones 51 and 52 were numbered twice by concurrent runs; I used 53."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "research/verifiable-training-mechanisms/paper/make_figures.sh",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_017d5Kfgq457ug85fLRyXLuj.json",
            "text": "must run from the project dir, not paper/; comment says so only loosely"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/verifiable-training-mechanisms/PROPOSAL.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01LootqZGyeZ2Y5Rihb12sG3.json",
            "text": "H3 says an agreement term 'raises the minimum cost'; adding a signal cannot raise the cost of a fixed equilibrium, only of a unique-equilibrium requirement. H5 asks for a constant factor that does not hold."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/verifiable-training-mechanisms/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01QU6ZauWo7rREnShwfamAhQ.json",
            "text": "states test counts and says pytest runs all tests, but scipy/sklearn are absent from the cloud interpreter so test_peer/test_margin fail collection"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/verified-dse/experiments/proof_success/analyse.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_015EzqpJQbngBn4VTj5ktk3m.json",
            "text": "needs scikit-learn; no doc says so, first reproduce run failed there. Now in reproduce.sh header."
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": "research/verified-dse/reproduce.sh",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtL4BoVuQK3aHwr5VzR.json",
            "text": "LOG milestone 40 script kth_inflate was missing from the theory loop; added it."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "research/verified-dse/tests",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01AcxTtGkd3J4XkV8aykKGKG.json",
            "text": "unittest discover errors on a test file that imports pytest, which bare python3 lacks; README says to run unittest discover"
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "SIMPLER arXiv:2405.05941 Appendix B",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01XH4v5S6RcoyuJW278Mn46B.json",
            "text": "Text says 24 eggplant trials but real rates are multiples of 1/30; used 30."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "ventures/*/llms.txt",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01E5sJKmqWT7QZnXFQgPsPn5.json",
            "text": "Several llms.txt files and ventures/README.md still name the retired monorepo-projects host; build.mjs rewrites it on publish, so the served files are fine, but writers copying links from source get the wrong host."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "ventures/*/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_011HQ1Cq7KDxBRcBJnjtKsfB.json",
            "text": "8 READMEs still carry a differently-worded 'not yet deployed' line; fixed the 103 standard ones."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "ventures/ai-bookkeeper README / flagships.yaml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_01AT9LdBuwzp5GJYsJ1ybX3P.json",
            "text": "next: lists many sweep items already done; hard to tell what is open"
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "ventures/ai-bookkeeper/cli.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_01FvkRugRkfgzzYqL9KyMVVX.json",
            "text": "`rest` is computed before late flag() calls, so flags read inside a command branch stay in `rest`; cost one debugging round."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "ventures/ai-bookkeeper/fuzz.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01RveYHEf8khHNpbyvj7dzee.json",
            "text": "fuzz.test.mjs and metamorphic.test.mjs read every entry of fixtures/ as a file, so a fixtures subdirectory fails with EISDIR; the CORD set went to eval/cord/ instead."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "ventures/changepoint-detector (flagships.yaml next:)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01WTCpbexY5GpPcnhogH8Fpx.json",
            "text": "The next: field is a multi-thousand-word running log; finding the actual next milestone took a full read."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "ventures/container-load-planner/deploy.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_017h6nKgD9NzB2nMhi1WGGgT.json",
            "text": "template's import regex only matched double-quoted single-line imports and *-*.html glob missed single-word guides; fixed in the five new copies, template unchanged"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "ventures/csv-to-sepa-pain001/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01SexJj1E1X1kWVnecoKARHd.json",
            "text": "`node --test ventures/<slug>/` (directory arg) fails on this Node; the glob *.test.mjs form works."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "ventures/devsec-toolkit/catalog.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "explore",
            "record": "prompts/runs/2026-10-17-session_01PT6MSNPfPTJ1FYdzywMUyu.json",
            "text": "Adding a check means editing the catalogue, fixture, page table, three hand-written '22' counts, 'five JS checks' prose and example-report.mjs by hand; a blanket 22->23 replace also hit 'padding: 22px'."
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "ventures/form-inbox/server.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01TkrnzKYfodT5v1JriZSCGx.json",
            "text": "node --test hangs silently when an assertion fails before server.close(); costs a 2-minute timeout"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "ventures/gtin-list-check README/prompt",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_018qeErwficAKpJaHT7sYzfB.json",
            "text": "README test command `node --test ventures/gtin-list-check/` fails on this Node; needs *.test.mjs glob"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "ventures/gtin-list-check/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01K14vBdVoSDjCcX84eQz3ke.json",
            "text": "README says run `node --test ventures/gtin-list-check/` but from the repo root that reports one failing entry; naming the test files works."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "ventures/iban-list-check/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01Jb5bzP2FAFuk4Dak9Kw1bE.json",
            "text": "`node --test ventures/iban-list-check/` fails on Node 22 (directory arg not resolved); needs *.test.mjs glob"
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "ventures/ics-calendar-check/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "explore",
            "record": "prompts/runs/2026-10-18-session_01B6XGUxikKpZXMvu1Jyj2wg.json",
            "text": "README says `node --test ventures/<slug>/` but Node 22 needs explicit *.test.mjs files"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "ventures/league-schedule-generator/page.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01MSmy9eu3MqtkYQmxLJXyh2.json",
            "text": "import-scan regex matches any 'from \"...' inside page strings, giving a confusing failure"
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "ventures/open-tennis-robots/cad/requirements.txt",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01WNaaLujNTJp7PZaCPWjrw2.json",
            "text": "pip install build123d went to python3.13 while `python3` is 3.11; had to call python3.13 explicitly, and two concurrent pip runs corrupted the install. Not documented in cloud-session.md."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "ventures/publish-kit/NEXT.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "process",
            "record": "prompts/runs/2026-10-23-session_01DfChyeG2jDkwAk6butvw64.json",
            "text": "recipe told runs to run retired front-door-tools.mjs --write; fixed in this PR"
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "ventures/saints-by-candlelight/render_audio.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "creative",
            "record": "prompts/runs/2026-10-21-session_01PAGzQaQj6g12jJLX9wh9vB.json",
            "text": "Docstring says pip install kokoro-onnx soundfile but numpy was missing for /usr/local/bin/python3 and bare pip targeted another python; use python3 -m pip. Render takes ~34 min for a 34-min episode on 4 cores, longer than the 10-min tool timeout, so it must run detached."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "ventures/sales-agent/eval/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_018RtvShzMmAKtbFw5PYZiAR.json",
            "text": "Pins on fresh sets say 'do not tune' but a generic rule fix moves them; no guidance on re-pinning."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "ventures/sales-agent/llms.txt",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01E5sJKmqWT7QZnXFQgPsPn5.json",
            "text": "40-reply set figures (24 named, 17 right) differ from the README table (23 named, 16 right)."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "ventures/sales-agent/ROADMAP.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01M9iUyrSR9zYuAHDVHr23FB.json",
            "text": "M2 needs a model key none of the cloud sessions have; only the new-fresh-set half was doable"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "ventures/shed-designer/browser.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqye8GsoB7Tz4n576sEf.json",
            "text": "Looks for Playwright at /opt/node-tools/...; in cloud sessions it is at /opt/node22/lib/node_modules/playwright/index.js, so the browser tests silently skip unless PLAYWRIGHT is set."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shed-designer/make-renders.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqygGpeF21Ny9uEyp88N.json",
            "text": "The render hash covers the whole normalised design, so adding any design field redraws all 37 renders and conflicts renders/manifest.json with every other lane; take main's manifest and re-run make-renders after each merge."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shed-designer/model.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyg7ixNGUH3USNit4uK.json",
            "text": "PRESETS are factories (call p()), not designs; passing one to buildShed silently builds the default design, which made a first test pass vacuously."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shed-designer/renders.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyei67VN1wMkbCA8tm6.json",
            "text": "renders/ is at 1,058 KB of a 1,100 KB budget after the saltbox preset; the next preset will need the budget raised or a view dropped"
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shift-roster-builder, league-schedule-generator",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_016jYcRjtyjmBujAi1rxrmYB.json",
            "text": "Top ventures are already so feature-saturated that finding a non-duplicate feature cost most of the run; allocate.py's top rows are Consolidate/Explore tasks, not features."
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "ventures/shift-roster-builder/page.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Y91UgoR7ZxsE7FnVe85HmW.json",
            "text": "Red on main: buildRoster at 14 h rest returns 4 unfilled / $3,662 but the page table and test expect 5 / $3,611; only surfaces when a PR touches the venture."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "ventures/wall-framing-takeoff/llms.txt",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01E5sJKmqWT7QZnXFQgPsPn5.json",
            "text": "Says 'no valleys' while the README describes valleys for cross wings."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "ventures/wall-framing-takeoff/page.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01FnPeHiBzs5qMsz6EZ22s2j.json",
            "text": "hard-coded import list test must be edited whenever a module is added to the page"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "ventures/where-to-sell-calculator/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01HdbzgQzLUVwLfCAjZvidyT.json",
            "text": "said 13 targets; there are 16"
          }
        ],
        "latest": "2026-10-19"
      }
    ],
    "deviations": [
      {
        "file": "CLAUDE.md",
        "count": 231,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "perf",
            "record": "prompts/runs/2026-11-01-session_01AcxTtLdjQxSjWpWX1hrn6G.json",
            "text": "No blog post: negative perf result, doc only"
          },
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01E5sJKmUf5GzfaAPyE1YkQ7.json",
            "text": "No venture-preflight or CI wait run; ran deck.test.mjs locally (16/16 pass)."
          },
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01XpHqydSTzQMsxThrroonHU.json",
            "text": "The root guide suggests keeping control-plane edits (prompts/, research/CLAUDE.md) in their own PR. This is one small PR on the session's single designated branch, since the owner asked for the direction directly and the non-control-plane parts only make sense alongside it."
          },
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGLmM2MWTfRXUR6A5K.json",
            "text": "No new blog post: a title-only batch has nothing a reader needs; report in docs/reports instead."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHHmnz82AX1SFLpWdQ.json",
            "text": "No flagship `next:` rewrite: the slice closed a 'no page field yet' ROADMAP note, not a listed next item; no Chromium click-through (source-tested only, stated in post)."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "prompt.md",
        "count": 229,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "creative",
            "record": "prompts/runs/2026-11-01-session_01AcxTtHfP48JmpLh2TUeWPs.json",
            "text": "Audio is 423 MB, over the 400 MB cap, so text only."
          },
          {
            "date": "2026-11-01",
            "track": "redteam",
            "record": "prompts/runs/2026-11-01-session_01AcxTtLipktw2bDPKt2PjJJ.json",
            "text": "review track drawn but an open 'prompts: review 2026-10-31' PR exists; re-routed with --skip-review as instructed"
          },
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01E5sJKk57hN3r98swvvidpF.json",
            "text": "Router drew review but an open 'prompts: review 2026-10-31' PR existed; re-routed with --skip-review as instructed."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGhk9nTX5f6cz811Kb.json",
            "text": "No blog post or agent doc this run: a small programme step; the LOG entry carries the write-up."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHomLMznpqhi6NmwPo.json",
            "text": "No new blog post or agent doc: creative story run; story carries its own author note."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "prompts/ventures/prompt-1.md",
        "count": 132,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01AcxTtLCgXpUoxmCSBHtWaH.json",
            "text": "Took the flagship row's work as unblocking main's red typecheck rather than a new feature slice, because it blocked all PRs on the venture."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtK6skpZ5Sy98DC3Cua.json",
            "text": "Took a hardening fix for the top flagship (wall-framing-takeoff schedule) instead of a milestone slice, so did not rewrite next:; no blog post either, the change is small."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLjesN1oxtZhT1N2rK.json",
            "text": "Took a small primary-source correction on a flagship (einvoice-preflight) instead of a large slice; the Ireland page's phase-two claim was wrong."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01E5sJKidxbQsQQoyiaL3VrV.json",
            "text": "venture-preflight not run: page-field-only change in an existing venture; page.test.mjs and Chromium click test run instead"
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01AcxTtHzPoetAH1jnWEqKvG.json",
            "text": "venture-preflight not run: change is library-only in an existing flagship, no new site surface"
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "prompts/creative/prompt-0.md",
        "count": 116,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHseVVwWzWec37ih92.json",
            "text": "No post or podcast: audio over 400 MB cap and run short."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtL1XK4RTWpHGPeFdWn.json",
            "text": "Most PRs carry a blog post; this run shipped the story only to keep scope small."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01E5sJKjdYKBsoyRiQn2ovxR.json",
            "text": "audio 423 MB over the 400 MB cap, so text only"
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01E5sJKjf5LNTMEDUojv9Cjr.json",
            "text": "Audio dir total was 423 MB (over 400 MB cap), so text only."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01E5sJKjre7FK2D49psxbzWs.json",
            "text": "Picked Saints by Candlelight (longest since a piece) rather than Hearth & Horizon; text only, audio over cap"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/research/prompt-0.md",
        "count": 101,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01AcxTtJCXJ6JfgYEi1WoxRB.json",
            "text": "Run shipped only a small citation-check log entry, no blog post or homepage change; the programme's next milestone (informative coder on second corpus) needs model downloads too long for this run."
          },
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01AcxTtJoXy76k7W1CevuT1o.json",
            "text": "Took a small step (failure reasons) rather than advancing a PhD-level programme milestone: pybamm is not installed so no long re-run was possible."
          },
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01AcxTtM1Pf9XCUt7kRfc27e.json",
            "text": "Run was small: no new experiment; paper update plus one failed sourcing search."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKctnNwAGJPD2yxq6n.json",
            "text": "pick_track drew sim2real-inference, whose open items are owner-blocked; took build-data (new, same focus list) instead."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKqLtb7m6btbyp4XHG.json",
            "text": "Claim-before-build asks for a PR within minutes; I opened it only after a 14-minute data pull."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "research/PROJECTS.md",
        "count": 78,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01E5sJKjG4zW4AFFYXDbgkdH.json",
            "text": "The drawn programme had no unblocked milestone."
          },
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKnB4CL93v7v4BEJMGM.json",
            "text": "milestone 3 named a new slug civ-cascades; programme rules say steps live in the programme dir"
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01E5sJKmyEY8EXRBuddUEETP.json",
            "text": "Draw gave track 25 (heavy); no checkable citations offline, so I advanced aerolog-scaling."
          },
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_011QefnYHwVpbWYpS7nFRBeu.json",
            "text": "Skipped the pick_track draw (capture-* ) to advance an open programme, as PROGRAMMES.md prefers."
          },
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01VsMdc3Pzs1kaU6oPmDdWsU.json",
            "text": "Skipped the pick_track draw (track 21, infra) and advanced the open lowcomm-training programme, as PROGRAMMES.md says is the default."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "prompts/goals.md",
        "count": 74,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01XpHqycov3mx2Frvp3d2msy.json",
            "text": "publishing under the portfolio's public name is owner-only; the owner asked for it directly in this session"
          },
          {
            "date": "2026-10-31",
            "track": "process",
            "record": "prompts/runs/2026-10-31-session_01XpHqyeJyKW3N7tenAHEsG8.json",
            "text": "The owner set a direction in chat; goals.md is the owner's file, so the new section ships in its own control-plane PR (11986) awaiting the owner's approval rather than being edited by a review."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01E5sJKizWrEcwe7iCBnVNDn.json",
            "text": "No blog post or agent doc: small page-wiring slice, run kept short."
          },
          {
            "date": "2026-10-30",
            "track": "creative",
            "record": "prompts/runs/2026-10-30-session_01E5sJKk8KgTs9tZt69PEFNM.json",
            "text": "No blog post or agent doc this run: a single episode was the deliverable."
          },
          {
            "date": "2026-10-30",
            "track": "perf",
            "record": "prompts/runs/2026-10-30-session_01XpHqyd7zje2txeAbKDhHdk.json",
            "text": "The owner asked to start monetizing. 'Payments: never the owner's' forbids agents wiring the owner's payment account, and the 2026-10-30 billing plan leaves amending it to the owner, so this run shipped the Actions half and left billing as owner steps."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/review/prompt-1.md",
        "count": 61,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "review",
            "record": "prompts/runs/2026-10-31-session_01AcxTtJgeyFP1Zz91mEXHKc.json",
            "text": "reduced pass: no audit or drift report, no new candidate"
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtJhLQgARqRwbi5LLXE.json",
            "text": "Router chose review but PR #12026 (prompts: review 2026-10-31) is open"
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01EhTJVMkUn725ymiLJHtHNN.json",
            "text": "The router sent a review run, but the scheduled task asked for product work, so I routed with --skip-review."
          },
          {
            "date": "2026-10-30",
            "track": "review",
            "record": "prompts/runs/2026-10-30-session_01AcxTtGxWAkmyhJGdJ4waNz.json",
            "text": "Scheduled run: reduced pass (steps 1,3,7,8 + one fix); no audit or drift report."
          },
          {
            "date": "2026-10-30",
            "track": "review",
            "record": "prompts/runs/2026-10-30-session_01AcxTtHgAvVEbvD2rRHRhuX.json",
            "text": "Scheduled run: took the documented reduced pass (steps 1,3,7,8 plus one trim); no audit or drift report."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "portfolio/flagships.yaml",
        "count": 58,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKL8itYRyZ3W14reip.json",
            "text": "Took a small robustness slice on flagship 1 rather than a milestone from its next: list; next: left unchanged."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01AcxTtHyN3UQeusLq21QE9Y.json",
            "text": "Flagship 1 items all need real data; took the CLI-only deck stair item on flagship 2 instead"
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01AcxTtLNe579NNc7FPk6zym.json",
            "text": "Every open ai-bookkeeper item needs a real export; landed a small made-up-data gap probe instead and left next: unchanged."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01AcxTtLWT7qJULgEahCEeyS.json",
            "text": "Landed a small test slice rather than a flagship milestone; next: not rewritten as no milestone moved."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01E5sJKimwoyhicT9EZob1uR.json",
            "text": "No reachable real input for the top item, so landed a small probe-driven rule slice instead and did not rewrite next:"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/redteam/prompt-0.md",
        "count": 43,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "redteam",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLWFD5XKeVYjQ2KJCu.json",
            "text": "No post/agent doc: small redteam run with one test added"
          },
          {
            "date": "2026-10-31",
            "track": "redteam",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLeBT2cqx1tuuNbxPt.json",
            "text": "No blog post/agent doc: small red-team run."
          },
          {
            "date": "2026-10-31",
            "track": "redteam",
            "record": "prompts/runs/2026-10-31-session_01E5sJKiVBzCAeTExVoyo3Wg.json",
            "text": "No blog post/agent doc: small test-only redteam run; also security-alerts branch does not exist so step 0 was skipped."
          },
          {
            "date": "2026-10-31",
            "track": "redteam",
            "record": "prompts/runs/2026-10-31-session_01E5sJKnjwNVBWRV8sxiZ3Rk.json",
            "text": "No blog post or agent doc written; run was a small test-guard change."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01EhTJVLVQ96AMSqQsaqMb8n.json",
            "text": "Router drew the redteam track; the scheduled prompt asked for revenue ventures, so I worked on the top flagship (ai-bookkeeper)."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/ventures/prompt-2.md",
        "count": 38,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtK73ffKDFzD3YmhomB.json",
            "text": "No blog post or venture-preflight run: small bug fix to an existing flagship; stairs and cli node tests run instead"
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01AcxTtL7vXzUHh11yecbC7v.json",
            "text": "Skipped flagship deepening and the blog post; the run found main's flagships.yaml broken and fixed it only."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01E5sJKm9o1RRD5pYUjn9evZ.json",
            "text": "Did not run the near-copy check or venture-preflight: deepened an existing flagship only."
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01E5sJKmJGWFddRUdL9BaSaN.json",
            "text": "Small slice (one page field) rather than a large milestone, given a scheduled run's budget."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01E5sJKkknud9CZbHQqoZN8g.json",
            "text": "Skipped the near-copy check and allocate-driven top flagship (ai-bookkeeper too large for one run); took flagship 4 instead."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/process/prompt-1.md",
        "count": 37,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "process",
            "record": "prompts/runs/2026-10-31-session_01AcxTtJsnT7emRQz8cdsgTz.json",
            "text": "Small live-fault fix instead of a larger critique; no blog post (one-line fix)"
          },
          {
            "date": "2026-10-31",
            "track": "process",
            "record": "prompts/runs/2026-10-31-session_01EhTJVMsvVuc72QbtL5NKpJ.json",
            "text": "The router drew the process track, but the scheduled task asked for product work; main_health was 32/32 green, so I shipped a flagship slice instead."
          },
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01AcxTtGN1W69yU3uv76n2wX.json",
            "text": "Backlog Solve/Verify modes skipped: main_health found a live red (post description 176>160), fixed first; no blog post or agent doc, the change is a one-line fix."
          },
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01AcxTtGQAjM6Syb51H4gXVa.json",
            "text": "Backlog agent items were already being worked today (P049/P060/P048), so I fixed the live red found by main_health.py instead of taking one."
          },
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01E5sJKjdS7thddpqizCBtm2.json",
            "text": "No agent backlog item fit a small PR; fixed a budget overrun instead"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "research/CLAUDE.md",
        "count": 32,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "research",
            "record": "prompts/runs/2026-11-01-session_01AcxTtKBqenR847R9YyxPUw.json",
            "text": "Stop hook demanded commits while the experiment was running, so pushed WIP commits (script, then partial results) to the branch before the PR."
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLZNVJAUr5fEqELPUq.json",
            "text": "draw gave a blocked programme"
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKnnV9y7sZegfaCJQPs.json",
            "text": "Wrote predictions after running, not before; marked exploratory in LOG.md."
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtKXEDwf2yGp6iUB6aY.json",
            "text": "No predictions were written before the script ran (logged as exploratory); no blog post or homepage change, to keep the step small."
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01E5sJKkWo3QZwLPwEDkEh6D.json",
            "text": "No blog post or agent doc: step was a small log-only milestone blocked on network hosts"
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "prompts/polish/prompt-0.md",
        "count": 30,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01AcxTtKntJu3NLHUamap3qq.json",
            "text": "Skipped screenshots/full build; continued the seo_title series"
          },
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01AcxTtL4tEKE8oRKSJ7j7MK.json",
            "text": "Did not build or screenshot the site; the change is one text file checked by check_llms_txt_links.py."
          },
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01E5sJKk4D8CsQKHvFUvvwr8.json",
            "text": "Skipped the 7-20 minute site build and screenshots; did a small title batch instead."
          },
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01E5sJKmsqqgbyftfAY4nnmT.json",
            "text": "No site build or screenshots: the chosen piece was an llms.txt"
          },
          {
            "date": "2026-10-31",
            "track": "polish",
            "record": "prompts/runs/2026-10-31-session_01E5sJKnx1eintr3w1FVe5bV.json",
            "text": "Skipped the 7-20 minute site build and screenshots; chose a small text-only SEO batch checked by writing.test.mjs."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "portfolio/router/allocate.py",
        "count": 29,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01AcxTtGk9mhhvwJ4EyakYpJ.json",
            "text": "top row is ai-bookkeeper; took changepoint-detector because its open item could be met with real public data"
          },
          {
            "date": "2026-10-27",
            "track": "ventures",
            "record": "prompts/runs/2026-10-27-session_01AcxTtJwau838JQXwJAa4jx.json",
            "text": "Top flagship had no item doable without outside data"
          },
          {
            "date": "2026-10-27",
            "track": "ventures",
            "record": "prompts/runs/2026-10-27-session_01E5sJKo66KK5vm8WvqFsbof.json",
            "text": "took flagship 4 instead of top row 1"
          },
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_017sbPQfdqfPz7NrKy89j7m6.json",
            "text": "Top flagship (ai-bookkeeper) had no fresh real inputs reachable; took flagship 6 instead."
          },
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01VqZf5gKRa6cCbGXTkjzixb.json",
            "text": "Skipped top flagship (needs real-world data unavailable offline)"
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "research/PROGRAMMES.md",
        "count": 27,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKjDPkmrPvR4XUVqaT8.json",
            "text": "LOG entry for 7e was not pre-registered (no predictions before running); labelled exploratory, as 7c/7d did."
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtH1yH29EQcvzXYE8Uh.json",
            "text": "No new experiment run; documentation step only, as the next experiment needs unreachable weights."
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtL4BoVuQK3aHwr5VzR.json",
            "text": "No OpenROAD in the container, so detail routing (paper's top open item) was impossible; did a cached-table theory step instead."
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtLsdpx9GWxk8RGtACP.json",
            "text": "6m plan logged after first run of refit.py (forms were fixed in code beforehand, nothing tuned after)."
          },
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01E5sJKiXUQaB6gxrVxrhwYi.json",
            "text": "Step 4 says log the hypothesis before running; I ran the script once first, so 3f has no registered prediction."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "portfolio/ledger/session_gate.py",
        "count": 24,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_017EySFUp3q6Xa7P1iPUJqKf.json",
            "text": "Did not refresh gh-pages snapshot (production-deploy push, shallow clone); shipped product work instead."
          },
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01NF6BKRBLmqQwPiPRTzUVqW.json",
            "text": "Did not run publish-branch.sh; shipped a venture feature instead."
          },
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01Pv35nnjb54DckonboJQKgo.json",
            "text": "gate said refresh the live snapshot first; I shipped product work instead and left the refresh"
          },
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01T1P5jMhu5TFcp1drw2u3th.json",
            "text": "Did not refresh stale Pages snapshot; shipped a solver fix instead."
          },
          {
            "date": "2026-10-17",
            "track": "ventures",
            "record": "prompts/runs/2026-10-17-session_012XLbVDFX1M1ZyccvQRRcDe.json",
            "text": "Did not run publish-branch.sh (pushes gh-pages, outside designated branch); deepened state-residency-day-counter instead."
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "prompts/promptctl.py route",
        "count": 22,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01EhTJVLsXeKydmGw92eLVZ.json",
            "text": "scheduled task asked for product work"
          },
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01EhTJVMjqZzv1VyZt1YBPfU.json",
            "text": "Router drew research; the scheduled brief asks for revenue ventures, so I deepened the top flagship instead."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01EhTJVMEnap5VXro48YrZrV.json",
            "text": "Router drew the research track; the scheduled prompt asks for revenue products, so worked the top flagship instead."
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01EhTJVLi9qez4dkBeha6kdt.json",
            "text": "Routed to research, but the scheduled prompt asked for revenue product work."
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01EhTJVLiTwehiU7LAH4JGz7.json",
            "text": "Task text asked for revenue products, so I worked a venture flagship (ai-bookkeeper) not research."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/promptctl.py",
        "count": 18,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01XpHqyfsyhrPtD3HK4R2wT5.json",
            "text": "Owner gave a direct task; followed it instead of the drawn redteam track."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqybkRg7nmKewd3BzzyH.json",
            "text": "route drew research; the owner's message asked for product/marketing work"
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqye8GsoB7Tz4n576sEf.json",
            "text": "The record's model field was left empty: this session's rules forbid model identifiers in pushed artifacts."
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01AcxTtKVFAcvyuULTUPTRxm.json",
            "text": "venture-preflight (5+ min) and runcost not run; local sketch/page/usage tests and a Chromium drag check run instead"
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqybzchtMfHw92UkSk5K.json",
            "text": "Left --model unset: this session's instructions forbid model identifiers in pushed artifacts."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/review/prompt-2.md",
        "count": 15,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "review",
            "record": "prompts/runs/2026-10-28-session_01AcxTtHoXwXJXE7tt13doys.json",
            "text": "scheduled run: reduced pass, no audit or drift report"
          },
          {
            "date": "2026-10-28",
            "track": "review",
            "record": "prompts/runs/2026-10-28-session_01E5sJKnhggvGLhzW8WQvq7L.json",
            "text": "Reduced pass (scheduled run): no audit or drift report."
          },
          {
            "date": "2026-10-27",
            "track": "review",
            "record": "prompts/runs/2026-10-27-session_01E5sJKnmqU5soUuwCesZXpY.json",
            "text": "scheduled run: reduced pass (steps 1,3,7,8, one fix); skipped derive, audit, drift"
          },
          {
            "date": "2026-10-25",
            "track": "review",
            "record": "prompts/runs/2026-10-25-session_01HxxwwFbn1sEXT7XaK9utxU.json",
            "text": "Reduced pass: skipped audit and drift report (doc-only recent outputs); no step-5 doc fix found live."
          },
          {
            "date": "2026-10-24",
            "track": "review",
            "record": "prompts/runs/2026-10-24-session_012nNqVJ3kuVU5FziKJk78nm.json",
            "text": "the owner's brief was a documentation review; scoring was not asked for and other review runs cover it"
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "prompts/research/prompt-1.md",
        "count": 14,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_013DDdAFtfzXVdYfk1hRippg.json",
            "text": "No writeup doc/post added; kept to the one project."
          },
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01APmbrcGkmBRidySRuNX5Zf.json",
            "text": "Wrote no separate agent doc/post; the project README carries the write-up. Did not use the motor-catalogue next step (no offline catalogue data)."
          },
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01E9JfpBxYRF6cqdYA6TPmxc.json",
            "text": "Skipped writing a separate agent doc and post; the change is a small extension recorded in the project README."
          },
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01M5NxUEBpb5KSMq5fQYRaQ8.json",
            "text": "Skipped the agent doc and post write-up and a figure; the project README carries the results. Kept the run small."
          },
          {
            "date": "2026-10-23",
            "track": "research",
            "record": "prompts/runs/2026-10-23-session_01QjWQ1u3PCcCxe8TbH33puu.json",
            "text": "No agent doc/post written; the project README carries the write-up. Skipped CI wait: ran build.py, md-link check and unit tests locally."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "prompts/routing.json",
        "count": 14,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "process",
            "record": "prompts/runs/2026-11-01-session_01XpHqyfhUC84Wo1eUhNupV4.json",
            "text": "route drew ventures/1; the owner gave a direct process task, so the run is recorded as process/1"
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01EhTJVPaMNgiHvQ3CdygVHN.json",
            "text": "Router drew the creative track but the task prompt asked for revenue ventures, so I did flagship venture work."
          },
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01EhTJVM1i3AzjorW9fmsNbk.json",
            "text": "Router sent a review run; the scheduled task asked for product work, so a flagship slice shipped instead."
          },
          {
            "date": "2026-10-28",
            "track": "ventures",
            "record": "prompts/runs/2026-10-28-session_01EhTJVPJFFyJhC4EJzFdzcq.json",
            "text": "router drew research; the scheduled task asked for revenue products"
          },
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_013uvsTYDrw16wHhdm3vXdsC.json",
            "text": "Router sent a review/creative track; the scheduled brief asks for revenue product work, so I deepened flagship 5 (einvoice-preflight)."
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "prompts/explore/prompt-0.md",
        "count": 11,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "explore",
            "record": "prompts/runs/2026-10-29-session_01E5sJKn7bKzjyyrh8hBDKyn.json",
            "text": "No agent doc in docs/reports; the post and the new check script carry the finding."
          },
          {
            "date": "2026-10-27",
            "track": "explore",
            "record": "prompts/runs/2026-10-27-session_01AcxTtJEi285fNMHW8HbQzX.json",
            "text": "Chose a small fix over building a new tool; no agent doc written."
          },
          {
            "date": "2026-10-27",
            "track": "explore",
            "record": "prompts/runs/2026-10-27-session_01E5sJKo9GZdFGbptwMyT1NG.json",
            "text": "No run-record dir for blog-post date: post dated 2026-10-28 to match sibling posts"
          },
          {
            "date": "2026-10-26",
            "track": "explore",
            "record": "prompts/runs/2026-10-26-session_01HGWuvoyWzQ4BE8zE32YhNu.json",
            "text": "Chose a small country page (Sweden) rather than a bold build: finishable in one run; page copies the Finland template and states its vendor-excerpt sourcing."
          },
          {
            "date": "2026-10-25",
            "track": "explore",
            "record": "prompts/runs/2026-10-25-session_01HkYR1BhC14JbrdJsbiVCD6.json",
            "text": "No blog post or agent doc: small bug fix only."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": ".github/prompts/land-your-work.md",
        "count": 10,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "perf",
            "record": "prompts/runs/2026-10-30-session_01Gcz8nVnXVeNTiqb8JKabK1.json",
            "text": "P048 part 1 rides PR #10195 (still unmerged, same branch) instead of a new PR: the runner pool had a 10-13 minute median queue, and one CI cycle costs the pool less than two"
          },
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKje6oHj5K2GgkdQ1Jm.json",
            "text": "cite_check could not run (403), so used web search to confirm citations and said so in the proposal"
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01UPvETpjvBS9dHKehnM838Z.json",
            "text": "7296 and 7546 were landed by copying their files onto this session's branch, not by merging main into the bot branches, since this session may push only to its designated branch"
          },
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_015xXXjWUDrkd9LFK1hM2kBQ.json",
            "text": "PR had no CI check runs; merged on local node --test (80/80) since change is confined to one static venture."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_018GAPVypxHF7SHbU2ktgqAG.json",
            "text": "did not link parallel-git.md from it: system.json marks it changed_by review and it is over its 160-line budget; the doc is registered in system.json and linked from docs/parallel-agents.md instead"
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "docs/posts",
        "count": 10,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01E5sJKnFy7xDBb5BnBSzTbt.json",
            "text": "No blog post: the slice is one page input field."
          },
          {
            "date": "2026-10-30",
            "track": "creative",
            "record": "prompts/runs/2026-10-30-session_01AcxTtHwKkyLKH5XavQgxs3.json",
            "text": "No blog post or podcast written; text-only story is the deliverable and audio is over the 400 MB cap."
          },
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01E5sJKn8LysG3ocD7qKutTM.json",
            "text": "No post: the only work duplicated #11923"
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtKAVJ7Vc7Cqj2oPj37.json",
            "text": "no blog post this run: short single-milestone step inside a programme; result is in LOG.md and README"
          },
          {
            "date": "2026-10-29",
            "track": "polish",
            "record": "prompts/runs/2026-10-29-session_01E5sJKjNq2sh5G8HSzrXg1k.json",
            "text": "No new post or report: the change is a one-character fix with a guard test."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/runs",
        "count": 10,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01AcxTtHbrDxbGrCABpTXRXb.json",
            "text": "No separate agent doc; the measurement is in the venture docs."
          },
          {
            "date": "2026-10-25",
            "track": "ventures",
            "record": "prompts/runs/2026-10-25-session_01EFEqw3waxPPkiFSRhX4RLm.json",
            "text": "no agent doc in docs/reports; nothing the next run needs beyond README Next"
          },
          {
            "date": "2026-10-25",
            "track": "creative",
            "record": "prompts/runs/2026-10-25-session_01XSHtxoxk37W1iqwRrUCmQ8.json",
            "text": "No agent doc in docs/reports; the BIBLE row carries the facts for the next run"
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_017nj75ihSCoRzrBQzkBg9XY.json",
            "text": "No write-up post this run: a small engine slice; the README documents it."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_018HYqw9fWPeNsLk22CSF3Yd.json",
            "text": "promptctl route drew the research track, but the scheduled prompt asked for revenue products, so the run took the top flagship under the ventures track."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "prompts/process/prompt-2.md",
        "count": 9,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "process",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHidWhLbykAnwDHVeF.json",
            "text": "Took the main_health live-fault fix rather than a backlog item (only owner/blocked rows open); no new post, a one-line fix."
          },
          {
            "date": "2026-10-31",
            "track": "process",
            "record": "prompts/runs/2026-10-31-session_01AcxTtLipW4XJ7WDvjpvhof.json",
            "text": "Used main_health to fix a live red check (post frontmatter) instead of a backlog item; no agent-owned item was open. No new blog post: a one-line fix to an existing post."
          },
          {
            "date": "2026-10-27",
            "track": "process",
            "record": "prompts/runs/2026-10-27-session_01E5sJKiTWY3VD6mfVwU313P.json",
            "text": "No blog post: one-sentence doc fix only."
          },
          {
            "date": "2026-10-26",
            "track": "process",
            "record": "prompts/runs/2026-10-26-session_01HHdFcAn6vgBkqrZ9u9CYcM.json",
            "text": "No agent-owned unblocked backlog item; shipped a live-fault fix instead of Solve/Critique. No blog post: a fix to two existing posts."
          },
          {
            "date": "2026-10-25",
            "track": "process",
            "record": "prompts/runs/2026-10-25-session_01U5eXdJdrg6pCFaF6UazZHf.json",
            "text": "Took the open agent item P054 (slice 3 only) rather than splitting or running the three-row loop; one slice shipped."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "docs/reports",
        "count": 7,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01AcxTtHjdXxiL5A18fwMWxB.json",
            "text": "No agent doc written; nothing the next run needs beyond the BIBLE row."
          },
          {
            "date": "2026-10-31",
            "track": "creative",
            "record": "prompts/runs/2026-10-31-session_01E5sJKktkdbZ7mhJSyJ4xLE.json",
            "text": "No agent doc written; nothing the next run needs"
          },
          {
            "date": "2026-10-27",
            "track": "explore",
            "record": "prompts/runs/2026-10-27-session_01AcxTtJqjvF9iMWPLo3axDj.json",
            "text": "No agent doc written: the sweep found nothing the next run needs beyond the post."
          },
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_012yJaZaSupC9G6DHBuM6xxa.json",
            "text": "No agent doc: the README section and flagship next: carry what the next run needs."
          },
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_01RPTeNfgnBsubDLnPgzkMFz.json",
            "text": "no agent doc written; nothing the next run needs beyond the README entry"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": ".github/prompts/verify-and-merge.md",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "process",
            "record": "prompts/runs/2026-10-29-session_01XpHqyduBahfwCQ4XvVL8gK.json",
            "text": "Widened a docs PR with three small fixes to main's own red checks, because main was red for every post PR and the session may push only to its own branch."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Lb9NbqBPUxtZJFKPDQLWte.json",
            "text": "Widened the PR with base-branch fixes for PR #9958 fallout (research README links rewritten in place; venture_live_links and readme-live-link accept both bases) because main was red on these checks and no fix PR existed."
          },
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01L363PcEijRnWJS4u8fHVds.json",
            "text": "Merged on local checks for the final base merge rather than waiting for CI again: CI was 26/26 green on the previous head, the only new commits were a merge of main and regenerated counts, and main moved faster than CI could finish, which produced three conflict-only rounds."
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01TuQzdnaSyKCwiXGSm4DwEE.json",
            "text": "Did not finish run_workflow_locally.py --for-changes (stalled on unrelated workflows the 281-file diff pulls in); ran the reached workflows directly: firewood-profit-calculator-ci.yml (pass), backup-verification-evidence-ci.yml (pass with the pinned ruff 0.15.8; local ruff 0.16.9 flags untouched files), and the new ventures-tests.yml step's command on this branch's diff."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_013fGdnW5k5h8tkCt5r3w3w9.json",
            "text": "Did not run venture-preflight (5+ min); ran venture unit tests and a headless browser check instead."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "prompts/perf/prompt-0.md",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "perf",
            "record": "prompts/runs/2026-10-31-session_01E5sJKiww4zTBf4Aj7Jo96u.json",
            "text": "No blog post: the saving is about 1 s of 53 s, not reader-worthy."
          },
          {
            "date": "2026-10-31",
            "track": "perf",
            "record": "prompts/runs/2026-10-31-session_01E5sJKjCpXNST5ZxzwjcZ7B.json",
            "text": "Pages build on main was failing on two post front-matter errors, so fixing it came before any speed work"
          },
          {
            "date": "2026-10-31",
            "track": "ventures",
            "record": "prompts/runs/2026-10-31-session_01EhTJVLsygozBpKgpZdJng3.json",
            "text": "promptctl route drew the perf track, but the scheduled task asked for revenue venture work; ran the ventures track on flagship 1"
          },
          {
            "date": "2026-10-30",
            "track": "perf",
            "record": "prompts/runs/2026-10-30-session_01AcxTtJCTaV97ucgKdBkWAQ.json",
            "text": "Build on main was broken, so fixing it came before profiling."
          },
          {
            "date": "2026-10-30",
            "track": "perf",
            "record": "prompts/runs/2026-10-30-session_01AcxTtK8cBKKJYS6swDmDET.json",
            "text": "Perf timing exposed a broken Pages build on main, so fixed that first instead of a speed-up"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "prompts/runs/README.md",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "perf",
            "record": "prompts/runs/2026-10-30-session_01Gcz8nVnXVeNTiqb8JKabK1.json",
            "text": "model left null: this session's harness forbids writing a model identifier into any pushed artifact"
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01E7BjRjSFvZfVEnBiRFS9fN.json",
            "text": "model left null: this session's harness forbids writing a model identifier into any pushed artifact"
          },
          {
            "date": "2026-10-24",
            "track": "perf",
            "record": "prompts/runs/2026-10-24-session_01Gcz8nVnXVeNTiqb8JKabK1-2.json",
            "text": "model left null: this session's harness forbids writing a model identifier into any pushed artifact"
          },
          {
            "date": "2026-10-24",
            "track": "perf",
            "record": "prompts/runs/2026-10-24-session_01Gcz8nVnXVeNTiqb8JKabK1-2.json",
            "text": "second record for one session (-2 suffix, as earlier runs did): the first record (track process, PR #9964) is merged and may only have null fields filled"
          },
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01Gcz8nVnXVeNTiqb8JKabK1.json",
            "text": "model left null: this session's harness forbids writing a model identifier into any pushed artifact"
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "research/verified-dse/LOG.md",
        "count": 6,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtHnTDBgHnEfK9JE61M.json",
            "text": "Predictions were not fixed before the script ran; stated as exploratory in the log entry."
          },
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKo7QwryNQ13DyaRGem.json",
            "text": "wrote no predictions before running; disclosed as exploratory in the log entry"
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01AcxTtHQ7YAWNsuogXiXVbF.json",
            "text": "Script ran once before the log entry was written; disclosed as post hoc in the entry."
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01AcxTtHYS6rXte9WGQYers8.json",
            "text": "Started the replay script before writing predictions; wrote them before opening the output and disclosed it in the log."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01GRbUExXEtPJvXTr2KkzvHE.json",
            "text": "Planned 400 seeds, 400-seed run exceeded 25 min"
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "prompts/README.md",
        "count": 5,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyepBUmtvJxGUiYokdE.json",
            "text": "The run record's model field is left empty: the session's instructions keep model identifiers out of pushed artifacts."
          },
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_01VnMuuuDLHD7oM1tKD7L4SQ.json",
            "text": "Skipped the agent doc and post write-up; README section carries the verification notes. Kept the run small."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01RCL25BA3g26ugqUcv7supZ.json",
            "text": "'Adding a track' calls a new track the owner's call; the owner asked for it in this session, so goals.md and routing.json were edited on their direction."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01YPq1ytq1mdoszNmXJL9Egt.json",
            "text": "the owner asked in this session for all rules docs to be softened; hard limits left untouched"
          },
          {
            "date": "2026-10-15",
            "track": "process",
            "record": "prompts/runs/2026-10-15-session_01XawUqAou1NNZdr2zWAvVkq.json",
            "text": "owner-directed; prompt-0's single-study claim collided on day one and cannot absorb ~1.6 process runs an hour"
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "prompts/runcost.py",
        "count": 5,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01ENZbxG9souKAL92rnezteQ.json",
            "text": "skipped the cost attach step to save time"
          },
          {
            "date": "2026-10-21",
            "track": "explore",
            "record": "prompts/runs/2026-10-21-session_01Rf9Gv8Eq1bnY5LMKWyMXpi.json",
            "text": "skipped runcost attach; no estimate needed"
          },
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_01FXCowNVAXJdWFKCCGFMQBh.json",
            "text": "runcost attach skipped: no basis for human-hours in a scheduled run."
          },
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_014fzQ4qqK354unz8PL78PoF.json",
            "text": "skipped cost attach; run was short and scheduled"
          },
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_018ibNipq7oh4ppsBrXMdPZM.json",
            "text": "Skipped runcost attach: no transcript available in this scheduled cloud session."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/_shared/pick_track.py",
        "count": 4,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGQaHgPk9QTKRBcTcB.json",
            "text": "draw gave codesign track 14; advanced the open aerolog-scaling programme instead, as PROGRAMMES.md says is the default"
          },
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01AcxTtJmTTfdCD3XgbU5SFx.json",
            "text": "Drew a society-* track; advanced the least-developed open programme instead."
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01AcxTtGK87gXPe71FPnpxst.json",
            "text": "programme advance is the stated default over a track draw"
          },
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_015fEtNfoLjKgHPzj4L9a7M8.json",
            "text": "Ignored the random track draw (codesign) in favour of the infra track with free milestones; the work landed fine."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": ".github/prompts/duplicate-work.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01UPvETpjvBS9dHKehnM838Z.json",
            "text": "supersede_check.py could not run in this clone (shallow history unusable for merge-bases; on a treeless probe it timed out)"
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_0118CBEPkTAccVNAhQfJpLGj.json",
            "text": "PR #8711 already built the podcast but had sat conflicted since 2026-10-20; merged its branch into this one and resolved it rather than building a second podcast system, so landing this PR lands #8711's commits too."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "audio",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "creative",
            "record": "prompts/runs/2026-10-24-session_014Emf7erRB4UkBotgMr3onj.json",
            "text": "audio budget at 405 MB (>400)"
          },
          {
            "date": "2026-10-24",
            "track": "creative",
            "record": "prompts/runs/2026-10-24-session_01MSmTrT3bdyhUzTUUkgT6Do.json",
            "text": "huggingface.co returns 403 through the proxy, so no Piper voice"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "flagships.yaml",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "ventures",
            "record": "prompts/runs/2026-10-26-session_01QkQBMQtBzhcQAr4mCZ4sSi.json",
            "text": "Small test-only slice on ai-bookkeeper; did not rewrite next: since no item landed from it"
          },
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01TTH4R1TWG8GwpyeNqEVLAw.json",
            "text": "Did not rewrite ai-bookkeeper next:; slice was a small fix to existing item (2), no milestone completed"
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "goals.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_012TjfQhtZwJznjVG9jGkaAe.json",
            "text": "No separate docs/reports agent doc or docs/posts post: the project README carries the write-up for this small follow-up."
          },
          {
            "date": "2026-10-21",
            "track": "explore",
            "record": "prompts/runs/2026-10-21-session_016PpM3MCqmgHP6vvjTZDgNV.json",
            "text": "No product llms.txt or marketing page: the PR changes no product."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "prompts/runs/",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "explore",
            "record": "prompts/runs/2026-10-21-session_019LkAzggCahoG5mEU4X7ra2.json",
            "text": "reused PR 9110 for a second slice after PR 9109 duplicated the first"
          },
          {
            "date": "2026-10-16",
            "track": "ventures",
            "record": "prompts/runs/2026-10-16-session_01NBJyvzkuPSGrKDAALuSsvb.json",
            "text": "Skipped runcost attach and human-hours estimate; low-effort run."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "prompts/steering.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01L8gBe9BULmMkeeFrdwLxwQ.json",
            "text": "The owner explicitly asked to increase the requirements; an explicit escape (programme none + why_standalone) keeps judgment possible."
          },
          {
            "date": "2026-10-21",
            "track": "process",
            "record": "prompts/runs/2026-10-21-session_01D8sa1G7xpTRTUqLiAxSXc4.json",
            "text": "Owner asked for this study directly; added one line to steering.md in a non-review run because the finding (budget the total) is about how instructions are cut."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/aerolog-scaling/LOG.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "research",
            "record": "prompts/runs/2026-10-28-session_01E5sJKkh4ftjY8knAyXoJuA.json",
            "text": "Swapped planned UIUC-data step for gust response because the data host was blocked"
          },
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01E5sJKnG3aPdofGCV1YFrnr.json",
            "text": "no blog post or docs/reports entry: the programme log and README carry the write-up for this small step"
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "research/llm-coding-inference/LOG.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01E5sJKmibyVH2oqPtrY4neM.json",
            "text": "cached NaijaSenti Qwen coders used as the second corpus; no new LLM run possible"
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01NHb6mGEqnFYDBGYSt3UDwS.json",
            "text": "planned naive-Bayes coder gave precision near 0; switched to class-weighted logistic regression before the final run"
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "research/lowcomm-training/PROPOSAL.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_018eeBd5oBG6mrCDkv5mHr37.json",
            "text": "Did not run the transformer milestone; took the log's cheaper 'finer momentum grid' next step."
          },
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01B4WzzA9s259udEPERtR7QU.json",
            "text": "torch unavailable"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/marine-hull/LOG.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "research",
            "record": "prompts/runs/2026-10-30-session_01AcxTtKPjGKTinJfyQq3Mhf.json",
            "text": "I ran the script once before writing the predictions (output unread); disclosed in the log. My hit-rate arithmetic in the plan was wrong (0.71 vs 0.85)."
          },
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01E5sJKianqaRUFbQE5QR98s.json",
            "text": "No predictions committed before the run; disclosed in the log entry."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "research/verifiable-training-mechanisms/LOG.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01MAbt6rX8J4Lbu3pazmnFjR.json",
            "text": "The previous entry's 'Next' proposed an error-norm predictor; I first tested whether error size is the right variable (random-direction control) and it was not, so I did not build the predictor."
          },
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01WHxeZU7aFpZtz4drrwuJn7.json",
            "text": "The plan entry was written after seeing milestone 24's table but before running the fit, not before any look at the data; stated in the entry."
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "unspecified",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01Jkq4zzAasS8dZt3dqWg8ep.json",
            "text": "Chose a small link change over a deep venture; scope was limited by session time"
          },
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01QSamunGemc7u52jrmAaBci.json",
            "text": "Did not run python3 -m pytest gitops/tests (pytest missing) despite regen touching gitops/; ran regen.mjs only"
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "user request",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "ventures",
            "record": "prompts/runs/2026-10-28-session_01XpHqydXkEQqGNv6fWqWgdc.json",
            "text": "Asked for 'like a fund'; built a single-account tool instead, because pooling or managing others' money is regulated and the owner's money and accounts are a hard limit (prompts/goals.md)."
          },
          {
            "date": "2026-10-28",
            "track": "ventures",
            "record": "prompts/runs/2026-10-28-session_01XpHqydXkEQqGNv6fWqWgdc.json",
            "text": "Robinhood has no official stock API; automating its private endpoints may breach its customer agreement."
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "ventures/CLAUDE.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqyeer9LhNXp1mg3LzQU.json",
            "text": "Added a per-venture workflow (shed-designer-browser.yml) although ventures/CLAUDE.md says a venture needs no <slug>-ci.yml just for node --test: this one installs Playwright and axe-core, which ventures-tests.yml does not, so the browser tests otherwise always skip in CI."
          },
          {
            "date": "2026-10-27",
            "track": "explore",
            "record": "prompts/runs/2026-10-27-session_01E5sJKnRRPn5gKc7iqodN8q.json",
            "text": "No browser page, llms.txt or usage tracking in this slice (CLI only); next run adds them."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "ventures/hearth-and-horizon/BIBLE.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "creative",
            "record": "prompts/runs/2026-10-28-session_01E5sJKnBUjqVf5F6dN9mzqv.json",
            "text": "Story is ~2,880 words, under the 3,500 to 6,000 guide; kept it tight rather than pad."
          },
          {
            "date": "2026-10-21",
            "track": "creative",
            "record": "prompts/runs/2026-10-21-session_01QTe9PKwD276j13ww7cFuWb.json",
            "text": "Landed the story without audio (README marks it text only); pages and feeds handle a missing enclosure. Audio can follow in a later run."
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "ventures/prompt-1.md",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-18",
            "track": "ventures",
            "record": "prompts/runs/2026-10-18-session_01Ev4TrC1opjztWRBf2jPwy5.json",
            "text": "Skipped venture-preflight: server-only change, no page touched."
          },
          {
            "date": "2026-10-16",
            "track": "ventures",
            "record": "prompts/runs/2026-10-16-session_019DRw9wwCaXm6LBeNd2vr5c.json",
            "text": "Skipped venture-preflight.mjs (5 min site-wide check) since change is an API endpoint on an existing venture with no page markup change."
          }
        ],
        "latest": "2026-10-18"
      },
      {
        "file": "ventures/saints-by-candlelight/episodes",
        "count": 2,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "creative",
            "record": "prompts/runs/2026-10-24-session_01GaF9Rb1L9V7CiG79uSeDtJ.json",
            "text": "No audio rendered: audio size over 400 MB limit in creative prompt."
          },
          {
            "date": "2026-10-22",
            "track": "creative",
            "record": "prompts/runs/2026-10-22-session_013wqgpv4ZHQDergDYQVzs6r.json",
            "text": "no audio rendered; model download blocked"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": ".github/prompts/human-requests.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyeWLBEBfeV3WLMN5wn.json",
            "text": "The user asked for 10 agents mid-run, so the foundation PR also seeds 10 parallel lanes, each on its own claude/babysit-<lane> branch and PR, instead of one branch per session."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": ".github/workflows/portfolio-pages.yml",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyd4JjJTkybMHf2yYvR.json",
            "text": "Could not run actionlint (the downloaded binary was refused); relied on validate_workflows.py, dogfood_workflows.py, the publish-surface snapshot and CI."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "(harness) drive-to-green rules",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "process",
            "record": "prompts/runs/2026-10-30-session_01XpHqye5QVf9BFrQS8X9EJN.json",
            "text": "Fixed two unrelated validation errors already red on main in this PR rather than only reporting them; they block every PR's prompts-ci, the fix is two lines, and no open PR fixed them."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "(lane brief)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqydhJTVruayh891WL8o.json",
            "text": "Sweep cadence of ~20 minutes slipped to 25-40 while main-breaking fixes went first."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "(this session's earlier reply to the owner)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyd4JjJTkybMHf2yYvR.json",
            "text": "Said GitHub Pages would mirror the full site for two weeks; shipped redirect pages instead. A mirror needs a second full build for the subpath origin, and canonical + zero-second refresh moves search ranking to the new origin, which a duplicate mirror would not."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "CLAUDE.md (Duplicate PRs)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01PVbZMeJxRpEDAgXQavPtc4.json",
            "text": "Open PR #8683 (hearth-and-horizon) has a short kids' saints shelf. Built a separate venture rather than extending it: the owner asked for a 30-60 minute show for a different audience and directory category, and #8683 was being edited live by another session. Cross-link once both are on main."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "CLAUDE.md (Every run ships something useful)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01NEhynbu6Hm9AzeBoVoSZpi.json",
            "text": "Shipped only a small doc/hypothesis correction; the saturated portfolio offered no deeper unbuilt item within a reasonable scope."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "docs/agent-posts/2026-10-21-traps-agents-keep-hitting-here.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_01Xzvx663rCHGrSePMWdS3PU.json",
            "text": "had not read that post before starting"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "docs/posts + docs/reports",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-28",
            "track": "ventures",
            "record": "prompts/runs/2026-10-28-session_01E5sJKj3fcY95QXUqUiJrXz.json",
            "text": "no agent doc in docs/reports; README entry carries the measurement"
          }
        ],
        "latest": "2026-10-28"
      },
      {
        "file": "docs/reports/shed-designer-round2-lane2.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqydhJTVruayh891WL8o.json",
            "text": "The front-door mirror packer shards into gitops/prod ConfigMaps for the Hetzner/k3s origin CLAUDE.md says was retired 2026-10-01; stabilising it is not worth agent time."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "docs/reports/shed-designer-round2-lane3.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyepBUmtvJxGUiYokdE.json",
            "text": "Brief asked for a per-opening cost cache; measured 107 ms for 15 openings (18 ms for 3) behind a 400 ms debounce and an existing per-design cache, so it was not built."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "docs/reports/shed-designer-round3-lane7.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqygGpeF21Ny9uEyp88N.json",
            "text": "Floorless is opt-in in the search, not a default knob: it is a different shed (damp, burrowers) and on the starter it costs $15.82 more, so making it a silent search move would not be clearly better and safe."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "docs/security/agent-hardening.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "process",
            "record": "prompts/runs/2026-10-31-session_01XpHqygBvxa4SWwYseE56ZX.json",
            "text": "Moving the Cloudflare token into an environment would make portfolio-pages.yml's PR-time gate see no token and quietly fall back from the Cloudflare deploy"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "experiments/gpt_h_sweep/h_sweep.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01QVUd5Xu5T6SLG2nwdYr562.json",
            "text": "Planned lr grid {1e-3,3e-3,1e-2} hit the lower edge, so 3e-4 was added before reporting"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "gitops/agents/queue/",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_019fstSszB6jefTVGmMh9FkX.json",
            "text": "queue items still mention calculator comparison pages but run on the retired host; left alone"
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "lane brief",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqye8GsoB7Tz4n576sEf.json",
            "text": "Collar ties and raised ceiling joists were not added: uplift is not modelled, so collar ties would be house habit the owner asked to drop; reasons in docs/reports/shed-designer-round3-lane3.md."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "overnight brief (lane 1)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqydjPUYuhxkkTPrf1fd.json",
            "text": "Did not take over PR #11268: its author kept committing (04:31, 04:35, 04:55) and merged it at 05:14, so a takeover would have raced them."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "platform/deploy/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01R7i8vRtumG7hKkTR6MRyof.json",
            "text": "The README's known-gaps list suggested more providers; DigitalOcean App Platform has no persistent disk so 3 of 4 server apps would lose state, so I built the Docker Compose path instead."
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "platform/edge/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_012Aa9y1fmABadZ5bA7HbKkZ.json",
            "text": "Sent a test message to the live /feedback route and started site-usage-pull by hand at the owner's request; the test message is now feedback id 1 permanently (no delete route)."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "platform/pages/build.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "ventures",
            "record": "prompts/runs/2026-10-24-session_01BpgCTzs2sAgpKaQLVpdW6A.json",
            "text": "Replaced an existing test pinning the entry-only breadcrumb decision; the visible trail it was premised on no longer holds."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "platform/pages/publish-branch.sh",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-19",
            "track": "ventures",
            "record": "prompts/runs/2026-10-19-session_01MTxTR92hLJybvNUN7MuZ83.json",
            "text": "gh-pages refresh (publish-branch.sh) was denied by the auto-mode classifier as a production deploy; not retried. Snapshot still stale."
          }
        ],
        "latest": "2026-10-19"
      },
      {
        "file": "portfolio/distribution/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_011qeNDjbbcRjGKFaqPtt5pY.json",
            "text": "X listed as an owner-suggested automated channel; built as drafts-only because the X API became pay-per-use for new developers on 2026-02-06 and the same spec forbids paid channels."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "portfolio/hosting/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "process",
            "record": "prompts/runs/2026-10-20-session_011J2W7V1KTAU6cUNXfGGu9B.json",
            "text": "Earlier told the user the branch workflow cost a runner per merge; its runs were skipped. Corrected in chat; pages-freshness-ci was the runner-using piece."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "portfolio/ledger",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "explore",
            "record": "prompts/runs/2026-10-20-session_01H1SAPDjgz2Y73vPKMZ9jpt.json",
            "text": "Did not run supersede_check output review beyond the identical-feature finding; PR 8959 reused for the replacement work rather than closed."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "portfolio/research-tools/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "ventures",
            "record": "prompts/runs/2026-10-20-session_01Ras7kzmRPhUWVqPuG3Gffq.json",
            "text": "Diabetes example data (Efron et al. 2004) has no explicit open licence; used it as redistributed by scikit-learn (BSD-3) and said so in data/SOURCE.md rather than claim CC0."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "portfolio/sales-tools/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "ventures",
            "record": "prompts/runs/2026-10-21-session_01DZijpNQhQyR2dAV9wLJYbn.json",
            "text": "'Extend existing ventures before adding new ones': added a new venture because the agent composes four existing ones (their CSVs are its interfaces) rather than copying any; none reads replies."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "PRODUCT_PLAYBOOK.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "explore",
            "record": "prompts/runs/2026-10-15-session_01LXDCNd7cTcj8FFTbxAEGvH.json",
            "text": "Shipped a CLI without a home page or usage tracking; no browser surface, page is follow-up."
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "prompts/blog",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_0134RrtGiDSChkd2yMzT15m3.json",
            "text": "No blog post: paper-drafting step with no new result; the LOG entry carries the write-up."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "prompts/runs (record schema)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_019Ny4GoXj1wUTz6VcABby89.json",
            "text": "Left the model field out: this session's harness forbids model identifiers in pushed artifacts."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "prompts/runs (record)",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "creative",
            "record": "prompts/runs/2026-10-24-session_016KV6WdZbza95dWZ9bMWqXd.json",
            "text": "model left null: session instructions forbid model identifiers in pushed artifacts."
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "prompts/runs/2026-10-30-session_01XpHqybgbjtZBC1yuM1sWw3.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqybgbjtZBC1yuM1sWw3.json",
            "text": "Left model null: this environment forbids model identifiers in pushed files."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "prompts/system.json",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "process",
            "record": "prompts/runs/2026-10-24-session_0196knHe2X3c2XLTh5SniF3Z.json",
            "text": "factual corrections, not policy changes"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "prompts/venture-preflight",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01EhTJVKQAb1AH5gDuo3gzw2.json",
            "text": "Did not run venture-preflight (over 5 min) or rewrite flagships next:."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "research/_shared/cite_check.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01YDBAWN1LukGW3Pu1yQ5ZLy.json",
            "text": "registries 403 through the proxy"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/build-data/LOG.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01AcxTtGZbGRDeYb5oko14Zg.json",
            "text": "Used 2 seeds instead of 3 for time"
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "research/CLAUDE.md / prompts/research/prompt-0.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtK281iXTec3TKw2FrD.json",
            "text": "No new blog post or agent doc: the step was a small citation check and related-work paragraph; nothing new for a reader beyond the log entry."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "research/codesign-aero-mlp/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-21",
            "track": "research",
            "record": "prompts/runs/2026-10-21-session_01X83dhPgJmnYGSR1DobhApi.json",
            "text": "Used CMA-ES neuroevolution rather than PPO as the aero Next steps suggested, to isolate controller class from optimiser; disclosed in the README."
          }
        ],
        "latest": "2026-10-21"
      },
      {
        "file": "research/codesign-logistics/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-20",
            "track": "research",
            "record": "prompts/runs/2026-10-20-session_01AL4w6n6metHh3JEQShRKKF.json",
            "text": "Landing step 2 (land open research PRs first): the three open non-draft research PRs were under an hour old with CI queued, so I left them to their own sessions."
          }
        ],
        "latest": "2026-10-20"
      },
      {
        "file": "research/llm-coding-inference/paper",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_01EV1d8YZpNZ1rSC5MAR6o6f.json",
            "text": "No blog post or agent doc this run; a small programme step."
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "research/lowcomm-training",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-24",
            "track": "research",
            "record": "prompts/runs/2026-10-24-session_01Edvd1aRJAuXzrTb64Tbzyf.json",
            "text": "claim-before-build check was only done against open PRs at start; others pushed within the hour"
          }
        ],
        "latest": "2026-10-24"
      },
      {
        "file": "research/mimic-codeloop",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "research",
            "record": "prompts/runs/2026-10-22-session_01LA2inmN91pxv4v7EoD975d.json",
            "text": "ran 1 seed per condition instead of the planned 3 (30 min/run on CPU); reported as preliminary. Skipped agent doc/post write-up for time."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "research/pick_track.py draw",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "research",
            "record": "prompts/runs/2026-10-25-session_01TXnjWgtxDNkNKvKCH4CPD5.json",
            "text": "Draw said track 17 (society); advanced verified-dse instead because the open programmes' logs listed a concrete next step."
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": "research/prompt-0.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_0188euskv5DfPkcAYXrmkiBN.json",
            "text": "Closed stale PR #10612 (milestone 29 already on main) instead of merging it."
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "research/prompts/research/prompt-0.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-17",
            "track": "research",
            "record": "prompts/runs/2026-10-17-session_015Uek8Tx12NPumJttU6SFYX.json",
            "text": "Left sibling PR 7785 (minutes old, CI running, its session active) alone instead of landing it."
          }
        ],
        "latest": "2026-10-17"
      },
      {
        "file": "research/PROPOSAL.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "research",
            "record": "prompts/runs/2026-10-27-session_01Sf7PwLQBNxTK3qfGPg2CnE.json",
            "text": "No blog post or docs/reports agent doc this run; the finding is in LOG.md/README/PAPER and the next step is the strategy replay."
          }
        ],
        "latest": "2026-10-27"
      },
      {
        "file": "research/sim2real-inference/LOG.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-26",
            "track": "research",
            "record": "prompts/runs/2026-10-26-session_0123B5aSTAxq8qHEGxkhCPT5.json",
            "text": "Milestone 4c analysis was written into the log after the first run, not before; labelled as not pre-registered in the entry."
          }
        ],
        "latest": "2026-10-26"
      },
      {
        "file": "research/sim2real-inference/PROPOSAL.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "research",
            "record": "prompts/runs/2026-10-29-session_01AcxTtJGzBvUwBzYcVaT8pF.json",
            "text": "Programme saturated (only owner steps left)"
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "session branch rule",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-31",
            "track": "research",
            "record": "prompts/runs/2026-10-31-session_01E5sJKkQtLX9Y2UutGPQtjs.json",
            "text": "First pushed to research/llm-coding-inference-7e by mistake; moved commit to the designated branch and deleted the extra one (delete push failed; extra branch may remain)."
          }
        ],
        "latest": "2026-10-31"
      },
      {
        "file": "session_gate.py",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-16",
            "track": "ventures",
            "record": "prompts/runs/2026-10-16-session_01UzJdRnX6pvC8LqfG8VuTan.json",
            "text": "Gate said refresh the stale gh-pages snapshot first; I shipped a distribution channel instead and left the publish for after merge."
          }
        ],
        "latest": "2026-10-16"
      },
      {
        "file": "system/session rules",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyg18KFJ7wq52yKE93G.json",
            "text": "The run record's model field is left null: this session's instructions forbid model identifiers in pushed artifacts."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "creative",
            "record": "prompts/runs/2026-10-30-session_01EhTJVLJfUmHeae3MD7sveC.json",
            "text": "The router drew the creative track; the story shelf is the routed deliverable and audio is over the 400 MB cap."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/ai-bookkeeper",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-22",
            "track": "ventures",
            "record": "prompts/runs/2026-10-22-session_01BLTPoSwahfJ9hBPLqZoeL1.json",
            "text": "Dropped my payroll card in favour of the one already merged in #9523."
          }
        ],
        "latest": "2026-10-22"
      },
      {
        "file": "ventures/ai-bookkeeper/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-25",
            "track": "ventures",
            "record": "prompts/runs/2026-10-25-session_01EC8J9fskgvpQrk49J3tmVr.json",
            "text": "Did not run venture-preflight: change is keyword rules and tests only, no page or site input changed."
          }
        ],
        "latest": "2026-10-25"
      },
      {
        "file": "ventures/changepoint-detector",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01AcxTtKfejihXY8RtDtRBAn.json",
            "text": "No flagship test added for the negative result; eval script and output committed instead."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "ventures/dupehound/usage.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-29",
            "track": "ventures",
            "record": "prompts/runs/2026-10-29-session_01XpHqybrr8TCMDDbRen5vrs.json",
            "text": "Copied the conventional usage.mjs although dupehound's own finding is that this file is the most-copied block in the repo; consolidating it is a separate change across ~1,283 ventures."
          }
        ],
        "latest": "2026-10-29"
      },
      {
        "file": "ventures/hearth-and-horizon/stories/forty-to-one.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "creative",
            "record": "prompts/runs/2026-10-23-session_01RDxkPVK5qP5SubQeucrW7J.json",
            "text": "No audio: huggingface.co returns 403 through the proxy. Text, pages, feeds only. The scheduled prompt asked for revenue products; the router drew the creative track and I followed it."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "ventures/hearth-and-horizon/stories/the-dry-bread.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "creative",
            "record": "prompts/runs/2026-10-23-session_01AKG2voVCKa4onG6nGMaRFZ.json",
            "text": "No audio: huggingface.co returns 403 through the proxy, so the Piper voice cannot download. Text, pages and feeds only. The scheduled prompt asked for revenue products; the router drew the creative track (weight 0.1) and I followed it."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "ventures/hearth-and-horizon/stories/the-late-field.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-23",
            "track": "creative",
            "record": "prompts/runs/2026-10-23-session_01GMzS9byjg7b8evPm74yLZD.json",
            "text": "Text only: audio dir at 395 MB of the 400 MB budget, so no MP3 rendered."
          }
        ],
        "latest": "2026-10-23"
      },
      {
        "file": "ventures/meter-keeper/README.md",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-15",
            "track": "ventures",
            "record": "prompts/runs/2026-10-15-session_01VUTSpUnrMdQDyMAiWi1bQk.json",
            "text": "Skipped venture-preflight (5 min); only ran the venture's own node tests."
          }
        ],
        "latest": "2026-10-15"
      },
      {
        "file": "ventures/open-house-plans/page.test.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-11-01",
            "track": "ventures",
            "record": "prompts/runs/2026-11-01-session_01XpHqycK4ThSwvx3fQs3EWw.json",
            "text": "its sibling-only import rule blocked importing ../wall-framing-takeoff directly; vendored the engine byte for byte with a drift test instead of loosening the rule"
          }
        ],
        "latest": "2026-11-01"
      },
      {
        "file": "ventures/shed-designer",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqybgbjtZBC1yuM1sWw3.json",
            "text": "Closed #11590 (spares rule) unmerged: measured on current main it cost more and was less stable."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shed-designer/costlevers.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqybdbfUS98SKSQvtQEW.json",
            "text": "main's typecheck was red from PR #11562 (6 diagnostics); fixed two JSDoc types here so this PR's typecheck could pass"
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shed-designer/gallery-data.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyei67VN1wMkbCA8tm6.json",
            "text": "the gallery belongs to lane 3; new gambrel knobs and the saltbox style change what a regenerated gallery would show"
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shed-designer/model.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqyg7ixNGUH3USNit4uK.json",
            "text": "two tsc diagnostics red on main blocked the venture's typecheck step for every PR; one-line casts fixed here rather than waiting"
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shed-designer/storage.mjs",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-30",
            "track": "ventures",
            "record": "prompts/runs/2026-10-30-session_01XpHqycdrpSxeSAfKHT2UX3.json",
            "text": "The brief asked for storage counted only from a decked attic; lane 2 landed usableCuFt first, so this lane kept theirs and ranked the gallery on it rather than change the default storage measure."
          }
        ],
        "latest": "2026-10-30"
      },
      {
        "file": "ventures/shift-roster-builder",
        "count": 1,
        "examples": [
          {
            "date": "2026-10-27",
            "track": "ventures",
            "record": "prompts/runs/2026-10-27-session_01EhTJVLVfm5JvakW3umnuJW.json",
            "text": "Started on fair-workweek city presets; irs/city/state hosts were 403 through the proxy and vendor blogs disagree on rest hours, so nothing was hard-coded (no fabricating)."
          }
        ],
        "latest": "2026-10-27"
      }
    ],
    "integrity": [
      {
        "date": "2026-10-31",
        "track": "research",
        "record": "prompts/runs/2026-10-31-session_01AcxTtHGZcXUU184F1Z499Z.json",
        "text": "Drafted a post line with median tail waits (18/26/43 days) that no output backed; caught and removed before merge."
      },
      {
        "date": "2026-10-29",
        "track": "ventures",
        "record": "prompts/runs/2026-10-29-session_01XpHqybrr8TCMDDbRen5vrs.json",
        "text": "Caught before commit: a draft of the candidates note said the usage.mjs copy reached 'about 994 ventures' (that was the number paired with one source file; the true figure is all 1,283 that ship one) and 'about forty' check_*.py scripts (28). Both corrected against the data."
      },
      {
        "date": "2026-10-29",
        "track": "ventures",
        "record": "prompts/runs/2026-10-29-session_01XpHqybzchtMfHw92UkSk5K.json",
        "text": "One price link (Z-flashing at DK Hardware) was first written from a guessed URL; caught before commit, verified by search and replaced with the real product page."
      },
      {
        "date": "2026-10-29",
        "track": "ventures",
        "record": "prompts/runs/2026-10-29-session_01XpHqybzchtMfHw92UkSk5K.json",
        "text": "Two blog-post claims were wrong before commit (per-foot trim prices, a gravel cost multiple) and were corrected against the computed figures."
      },
      {
        "date": "2026-10-29",
        "track": "ventures",
        "record": "prompts/runs/2026-10-29-session_01XpHqyeS6gsz3tkQdJ13SA8.json",
        "text": "shed-designer showed estimates (gravel, then also CMU/solid block) as plain store links with a date, indistinguishable from listed prices; fixed with one sourceLabel() for page and CSV"
      },
      {
        "date": "2026-10-29",
        "track": "ventures",
        "record": "prompts/runs/2026-10-29-session_01XpHqyeS6gsz3tkQdJ13SA8.json",
        "text": "shed-designer store comparison and storeTotals priced T1-11 at Home Depot $43.98 while the shopping line used $46.78 (two copies of the same page), claiming a $16.80 saving buying at Home Depot instead of Home Depot; aligned and tested"
      },
      {
        "date": "2026-10-29",
        "track": "ventures",
        "record": "prompts/runs/2026-10-29-session_01XpHqyeS6gsz3tkQdJ13SA8.json",
        "text": "shed-designer '8x12 classic' total ($3,284.59) silently excluded the custom-size door and two windows; now listed as 'not in the total'"
      },
      {
        "date": "2026-10-29",
        "track": "ventures",
        "record": "prompts/runs/2026-10-29-session_01XpHqyeS6gsz3tkQdJ13SA8.json",
        "text": "shed-designer marketing page and llms.txt quoted stale engine output (144 pieces/93 boards/$2,166.66 at first; 140/$650.85/$3,281.02 after PR #11311, already stale hours later); every number is now recomputed by marketing.test.mjs"
      },
      {
        "date": "2026-10-28",
        "track": "research",
        "record": "prompts/runs/2026-10-28-session_01E5sJKiZsGnrw39bnRTXveQ.json",
        "text": "H3 prediction was written inverted before running; disclosed in LOG.md"
      },
      {
        "date": "2026-10-26",
        "track": "research",
        "record": "prompts/runs/2026-10-26-session_01BCcFs2H56PFt6CoNFm2Bkm.json",
        "text": "Ran learned.py once before writing the LOG entry, so predictions are post hoc; disclosed in the entry."
      },
      {
        "date": "2026-10-25",
        "track": "research",
        "record": "prompts/runs/2026-10-25-session_012UYrQ1eQ9s2xE4P2bRHB2B.json",
        "text": "Earlier milestones 6a-6e reported results from a mistyped oracle; corrected and disclosed in LOG.md 6f and README"
      },
      {
        "date": "2026-10-24",
        "track": "research",
        "record": "prompts/runs/2026-10-24-session_01Lb9NbqBPUxtZJFKPDQLWte.json",
        "text": "Many standard monographs are cited from bibliographic details, not re-read this session; every notes file tags each claim verified vs bibliographic, and the posts never quote or hang precise figures on unread text."
      },
      {
        "date": "2026-10-24",
        "track": "research",
        "record": "prompts/runs/2026-10-24-session_01Lb9NbqBPUxtZJFKPDQLWte.json",
        "text": "Notes caught and corrected brief errors: Seshat retake venue (Religion, Brain & Behavior 13(2)), Lightner et al. 2023 title/venue, van Elk 2022's misdescription of Maij et al. 2017, and the 2026 YouGov fraud finding that withdrew the Quiet Revival figures."
      },
      {
        "date": "2026-10-23",
        "track": "research",
        "record": "prompts/runs/2026-10-23-session_018ozxN46ed58LNxBc2MANaA.json",
        "text": "infra-pumpsched tariff results are step-sensitive: 1-hour step mis-samples booster pump 335; disclosed in README and not yet re-run at 900 s"
      },
      {
        "date": "2026-10-23",
        "track": "research",
        "record": "prompts/runs/2026-10-23-session_01Y5dScyiwK1GNpZoiL7Xknd.json",
        "text": "The first version of infra-pumpsched mis-simulated windows crossing midnight (no day-1 close), so its tariff-dependent numbers were wrong; found by cross-checking mask vs window runs, fixed, results re-run and the README states the correction."
      },
      {
        "date": "2026-10-21",
        "track": "ventures",
        "record": "prompts/runs/2026-10-21-session_016Z8cGGMmogrXEMMmZDVBBn.json",
        "text": "The learning-curve benchmark is on synthetic data whose generator and built-in keywords share an author; month-1 accuracy is circular. Stated on the page, README, llms.txt and post; only the learning numbers are quoted as findings."
      },
      {
        "date": "2026-10-20",
        "track": "research",
        "record": "prompts/runs/2026-10-20-session_011zWcpzRiSmtehqmTn61GuQ.json",
        "text": "Demszky et al. 2020 author list/venue cited from memory: arXiv unreachable (proxy 403); disclosed in the README"
      },
      {
        "date": "2026-10-20",
        "track": "process",
        "record": "prompts/runs/2026-10-20-session_018GAPVypxHF7SHbU2ktgqAG.json",
        "text": "Earlier in this session the final reply described the write-up as done while the PR was pushed and CI-queued, not merged; the owner had to ask. Recorded as rule 8 in parallel-git.md."
      },
      {
        "date": "2026-10-20",
        "track": "research",
        "record": "prompts/runs/2026-10-20-session_01FnTRERWHDSYrLeVdu6om7K.json",
        "text": "Several technique-cost and Colorado figures come from search-result excerpts rather than pages read in full; marked '(search excerpt)' in data/sources.csv and called out in the README."
      },
      {
        "date": "2026-10-19",
        "track": "research",
        "record": "prompts/runs/2026-10-19-session_0142MgLagikCLkBX5HRmkad2.json",
        "text": "First full run scored shape error only and the optimiser converged on wire-thin hanger ends (specification gaming); kept as results_shape_only.txt and reported as section G, main results use a crease-penalised objective."
      },
      {
        "date": "2026-10-19",
        "track": "research",
        "record": "prompts/runs/2026-10-19-session_0142MgLagikCLkBX5HRmkad2.json",
        "text": "Custom per-size CMA-ES (budget 150) did worse than the pooled adjustable-width search; README says B is budget-limited rather than a floor."
      },
      {
        "date": "2026-10-19",
        "track": "research",
        "record": "prompts/runs/2026-10-19-session_0142MgLagikCLkBX5HRmkad2.json",
        "text": "Fabric constants, garment weights and stock hanger dimensions are assumptions, stated as such; references not re-checked online."
      },
      {
        "date": "2026-10-15",
        "track": "ventures",
        "record": "prompts/runs/2026-10-15-session_01EZCsNQHAhLgkj4Bb1cnV3w.json",
        "text": "main was red when this branch merged it: #6981 and #6982 each wrote the mirrored-tool count as 1223 against a base without the other; the tree is 1224. Re-synced here with sync_tree_counts.py."
      },
      {
        "date": "2026-10-13",
        "track": "research",
        "record": "prompts/runs/2026-10-13-session_01KujYppwBxUYZron47yQRqi.json",
        "text": "tail-elicitation had no references list or AI-assistance statement; added before merge"
      }
    ],
    "outcomes": {
      "partial": 399,
      "success": 3911,
      "failed": 4
    },
    "by_day": {
      "2026-10-01": {
        "runs": 1,
        "friction": 0,
        "tracks": {
          "research": 1
        }
      },
      "2026-10-13": {
        "runs": 97,
        "friction": 0,
        "tracks": {
          "research": 97
        }
      },
      "2026-10-14": {
        "runs": 69,
        "friction": 0,
        "tracks": {
          "research": 69
        }
      },
      "2026-10-15": {
        "runs": 261,
        "friction": 172,
        "tracks": {
          "research": 146,
          "ventures": 58,
          "review": 12,
          "process": 19,
          "explore": 11,
          "redteam": 15
        }
      },
      "2026-10-16": {
        "runs": 253,
        "friction": 248,
        "tracks": {
          "review": 13,
          "process": 37,
          "redteam": 20,
          "research": 98,
          "ventures": 68,
          "explore": 17
        }
      },
      "2026-10-17": {
        "runs": 231,
        "friction": 211,
        "tracks": {
          "redteam": 22,
          "research": 90,
          "review": 7,
          "process": 24,
          "ventures": 71,
          "explore": 17
        }
      },
      "2026-10-18": {
        "runs": 285,
        "friction": 230,
        "tracks": {
          "research": 85,
          "ventures": 112,
          "process": 33,
          "redteam": 35,
          "review": 8,
          "explore": 12
        }
      },
      "2026-10-19": {
        "runs": 288,
        "friction": 256,
        "tracks": {
          "ventures": 109,
          "process": 29,
          "research": 96,
          "redteam": 27,
          "review": 10,
          "explore": 17
        }
      },
      "2026-10-20": {
        "runs": 295,
        "friction": 270,
        "tracks": {
          "process": 44,
          "research": 106,
          "ventures": 110,
          "review": 6,
          "redteam": 16,
          "explore": 13
        }
      },
      "2026-10-21": {
        "runs": 287,
        "friction": 241,
        "tracks": {
          "research": 79,
          "process": 32,
          "ventures": 108,
          "explore": 18,
          "review": 8,
          "redteam": 21,
          "creative": 21
        }
      },
      "2026-10-22": {
        "runs": 257,
        "friction": 175,
        "tracks": {
          "ventures": 93,
          "creative": 24,
          "review": 7,
          "research": 82,
          "redteam": 22,
          "process": 23,
          "explore": 6
        }
      },
      "2026-10-23": {
        "runs": 258,
        "friction": 144,
        "tracks": {
          "ventures": 79,
          "research": 83,
          "creative": 28,
          "redteam": 22,
          "review": 10,
          "process": 21,
          "explore": 15
        }
      },
      "2026-10-24": {
        "runs": 276,
        "friction": 202,
        "tracks": {
          "ventures": 93,
          "redteam": 13,
          "research": 80,
          "review": 9,
          "explore": 17,
          "process": 37,
          "creative": 26,
          "perf": 1
        }
      },
      "2026-10-25": {
        "runs": 206,
        "friction": 114,
        "tracks": {
          "research": 58,
          "ventures": 75,
          "process": 23,
          "redteam": 14,
          "creative": 23,
          "explore": 9,
          "review": 4
        }
      },
      "2026-10-26": {
        "runs": 208,
        "friction": 115,
        "tracks": {
          "explore": 7,
          "redteam": 21,
          "creative": 20,
          "research": 58,
          "ventures": 78,
          "process": 18,
          "review": 6
        }
      },
      "2026-10-27": {
        "runs": 192,
        "friction": 101,
        "tracks": {
          "ventures": 68,
          "process": 13,
          "creative": 21,
          "review": 6,
          "research": 56,
          "explore": 11,
          "redteam": 17
        }
      },
      "2026-10-28": {
        "runs": 214,
        "friction": 110,
        "tracks": {
          "process": 29,
          "ventures": 59,
          "explore": 12,
          "creative": 23,
          "research": 57,
          "review": 6,
          "redteam": 21,
          "polish": 7
        }
      },
      "2026-10-29": {
        "runs": 200,
        "friction": 112,
        "tracks": {
          "research": 44,
          "ventures": 73,
          "explore": 10,
          "redteam": 22,
          "polish": 18,
          "process": 17,
          "creative": 12,
          "review": 4
        }
      },
      "2026-10-30": {
        "runs": 220,
        "friction": 106,
        "tracks": {
          "research": 49,
          "process": 22,
          "ventures": 78,
          "creative": 29,
          "redteam": 12,
          "review": 6,
          "polish": 9,
          "perf": 10,
          "explore": 5
        }
      },
      "2026-10-31": {
        "runs": 185,
        "friction": 116,
        "tracks": {
          "polish": 14,
          "ventures": 62,
          "research": 38,
          "creative": 31,
          "redteam": 14,
          "process": 14,
          "perf": 5,
          "review": 1,
          "explore": 6
        }
      },
      "2026-11-01": {
        "runs": 28,
        "friction": 20,
        "tracks": {
          "creative": 1,
          "research": 7,
          "ventures": 10,
          "redteam": 4,
          "perf": 1,
          "process": 3,
          "polish": 2
        }
      },
      "2026-11-09": {
        "runs": 1,
        "friction": 0,
        "tracks": {
          "explore": 1
        }
      }
    }
  }
}
