{
  "day": "2026-10-30",
  "merges": 400,
  "baseline_merges_per_day": 261.7,
  "lines_added": 146445,
  "lines_removed": 64583,
  "files_changed": 5344,
  "busiest_hour": {
    "hour": 2,
    "merges": 54
  },
  "hours": [
    9,
    40,
    54,
    27,
    17,
    12,
    10,
    8,
    12,
    6,
    13,
    10,
    9,
    9,
    8,
    10,
    15,
    11,
    8,
    9,
    25,
    36,
    29,
    13
  ],
  "agents": [
    [
      "Claude Sonnet 5.5",
      190
    ],
    [
      "Claude",
      96
    ],
    [
      "Claude Opus 5.5",
      75
    ],
    [
      "unattributed",
      38
    ],
    [
      "Codex",
      1
    ]
  ],
  "products": [
    {
      "name": "shed-designer",
      "merges": [
        {
          "sha": "0b088bf178eb3a307c7a0a51e863c655d86af1bc",
          "at": 1793323256000,
          "title": "shed-designer: r2 buildability — build steps fixed after a carpenter's read-through",
          "pr": 11525,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r2 buildability — build steps fixed after a carpenter's read-through",
            "shed-designer: post description under 160; trim landed history from wall-framing-takeoff next: (red on main, 2096 > 2000)"
          ],
          "detail": "Roof-edge layers in lapping order (fascia before eave drip edge, siding before rake board before rake drip edge), head flashing over the casing, door wall plates as the cut sheet has them, connector-seat rafter layout, site-built door assembly order,…",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 20,
          "lines_added": 388,
          "lines_removed": 211,
          "added_files": [
            "docs/posts/2026-10-30-reading-the-shed-instructions-like-a-carpenter.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "637424d5629e88a1853ebcdd81a1b866fbe1d196",
          "at": 1793323506000,
          "title": "shed-designer: plate joints may sit over a header; note when a longer board avoids a short stub",
          "pr": 11520,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "When no split on full studs keeps cap joints 24\" from top joints, a joint may land on a cripple over a header that runs a stud width past it each side; the connection check tests the same.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 5,
          "lines_added": 118,
          "lines_removed": 20,
          "added_files": [
            "docs/posts/2026-10-30-where-a-shed-plate-can-break.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f70c50dae985feed38d8009cffbb1b9af6247b77",
          "at": 1793324344000,
          "title": "shed-designer: r3 lane 7 — floor joists at 24\" and 2x4 to 2x8 as cost levers, subfloor checked against its APA span rating",
          "pr": 11551,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 9,
          "lines_added": 111,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-a-shed-floor-at-24-inches.md",
            "ventures/shed-designer/levers.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5dc627d866e36d0bdcfa8d99b48e137b5fca1205",
          "at": 1793324507000,
          "title": "shed-designer: round 2 lane 3 editor UX stack (#11518, #11532-#11535, #11538, #11544, #11545)",
          "pr": null,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 15,
          "lines_added": 472,
          "lines_removed": 47,
          "added_files": [
            "docs/posts/2026-10-30-seven-small-confusions-in-the-shed-designer.md",
            "docs/reports/shed-designer-round2-lane3.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a8dc8f852f488cd8196722eabaa1415ae343aadf",
          "at": 1793324558000,
          "title": "shed-designer: r2 cut sheet — stud centre labels on wall sheets spread apart with leaders",
          "pr": 11530,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "A king and a jack 1-1/2\" apart printed their 7 px centre labels 5 px apart (10x12 and 12x16 gable walls).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 2,
          "lines_added": 82,
          "lines_removed": 6,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4e1e33b219e6ff82eeb85b18ebae4b5d11a1b5ba",
          "at": 1793324612000,
          "title": "shed-designer: r3 lane 7 — what each foundation, floor, door and window choice costs, priced and checked against your design",
          "pr": 11555,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 9,
          "lines_added": 304,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-30-what-each-shed-part-costs.md",
            "ventures/shed-designer/costlevers.mjs",
            "ventures/shed-designer/costlevers.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c41dce6128ff92c7273f3cfed739dc16c95bf304",
          "at": 1793324754000,
          "title": "shed-designer: r3 lane 5 — HOA packet: coloured, dimensioned elevations, finishes and site plan as a PDF",
          "pr": 11556,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3 lane 5 — HOA packet: coloured, dimensioned elevations, finishes and site plan as a PDF",
            "shed-designer: r3 lane 5 — shorten the post description",
            "shed-designer: r3 lane 5 — record the post-merge test run"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 11,
          "lines_added": 699,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-30-a-shed-packet-for-the-hoa.md",
            "docs/reports/shed-designer-round3-lane5.md",
            "ventures/shed-designer/hoa-packet.html",
            "ventures/shed-designer/hoa-page.mjs",
            "ventures/shed-designer/hoa.mjs",
            "ventures/shed-designer/hoa.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e335b0e1db53e15b442eb3addb6fd0055e729138",
          "at": 1793324836000,
          "title": "shed-designer: r3 lane 7 — your limits and fixed choices: siding, roofing, foundation, floor, doors and windows kept out of every search",
          "pr": 11562,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 11,
          "lines_added": 147,
          "lines_removed": 14,
          "added_files": [
            "ventures/shed-designer/levers.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "255159437845d8df14cb999c560381cf747fa94d",
          "at": 1793324869000,
          "title": "shed-designer: r3 lane 5 — HOA packet gets a dimensioned roof and footprint plan",
          "pr": 11565,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 6,
          "lines_added": 94,
          "lines_removed": 7,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "37cd4346e270b15ef890fcd44f24295d07fb55db",
          "at": 1793324904000,
          "title": "shed-designer: r3 lane 8 — structural utilisation, visible (list, heat map, target margin)",
          "pr": 11560,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shed-designer: r3 utilisation — every member's use of capacity, written out and coloured",
            "shed-designer: r3 lane 8 run record; post description under 160",
            "shed-designer: r3 lane 8 run record, post-merge verification"
          ],
          "detail": "",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 14,
          "lines_added": 1142,
          "lines_removed": 13,
          "added_files": [
            "docs/posts/2026-10-30-why-a-shed-joist-runs-at-15-percent.md",
            "docs/reports/shed-designer-round3-lane8.md",
            "prompts/runs/2026-10-30-session_01XpHqyfDXAdp9bHYxsWRj44.json",
            "ventures/shed-designer/utilisation-sheets.mjs",
            "ventures/shed-designer/utilisation-ui.mjs",
            "ventures/shed-designer/utilisation.browser.test.mjs",
            "ventures/shed-designer/utilisation.mjs",
            "ventures/shed-designer/utilisation.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7d492ebf698875c636cb8f39783e7295174d7d4d",
          "at": 1793324915000,
          "title": "shed-designer: r3 design search — Pareto search over sizes, layouts and structure under a footprint limit",
          "pr": 11554,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Runners starved; verified locally on the merged tree: node --test *.test.mjs in ventures/shed-designer 209 pass 0 fail; build_pages_site + check_pages_links + check_built_site OK; post front matter OK.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 5,
          "lines_added": 602,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-searching-every-shed-under-100-square-feet.md",
            "ventures/shed-designer/designsearch.mjs",
            "ventures/shed-designer/designsearch.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3f1a61507de0445c12d2097435ffca4472a8d757",
          "at": 1793325038000,
          "title": "shed-designer: r3 looks — house paint colours, shingle families, textures, lawn and sky, presentation mode",
          "pr": 11563,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Colours move to looks.mjs (generic names, any hex for siding, trim and door, shingle colour families with tab blend).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 14,
          "lines_added": 503,
          "lines_removed": 54,
          "added_files": [
            "docs/posts/2026-10-30-making-a-shed-look-like-the-house.md",
            "docs/reports/shed-designer-round3-looks.md",
            "ventures/shed-designer/looks.mjs",
            "ventures/shed-designer/looks.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "8b366a6d9c70d8d947191c3df03c90c21ca72a6d",
          "at": 1793325168000,
          "title": "shed-designer: r2 buildability — site plan sheet and a fuller cover sheet for a permit or HOA review",
          "pr": 11542,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Lot, placement, house and setback typed by the user (feet, 0 for none) draw a site plan with every clearance to walls and eaves, and warn when the shed is off the lot, inside the setback or on the house.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 8,
          "lines_added": 208,
          "lines_removed": 9,
          "added_files": [
            "docs/posts/2026-10-30-shed-plans-for-the-permit-desk.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3d2a1b52a8bd7c9006f697ada5b467eaf0a76c39",
          "at": 1793325194000,
          "title": "shed-designer: r3 design search — doors, windows, siding and roofing as choices; locked choices honoured",
          "pr": 11569,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Runners starved; verified locally on merged tree: venture node --test 228 pass 0 fail; post front matter exit 0.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 5,
          "lines_added": 120,
          "lines_removed": 31,
          "added_files": [
            "docs/posts/2026-10-30-what-matching-the-house-costs-on-a-shed.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4ab2739e42ddbbd3628514f44139ef91bdb92a97",
          "at": 1793325281000,
          "title": "shed-designer: r3 looks — shade, shadow and texture on the HOA elevations",
          "pr": 11570,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3 looks — shade, shadow and texture on the HOA elevations",
            "shed-designer: r3 looks — shorten the post description"
          ],
          "detail": "Colours from looks.mjs (door paint, shingle family names), an eave and rake shadow at 45 degrees, lap butt shadows and blended shingle tabs.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 91,
          "lines_removed": 16,
          "added_files": [
            "docs/posts/2026-10-30-shade-and-shadow-on-a-shed-elevation.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fba7bccc6b6ce8f39c10f63f432f97f7fb223d87",
          "at": 1793325319000,
          "title": "shed-designer: r3b value — Pareto audit of the presets, storage per dollar beside real kits",
          "pr": 11566,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Runners were starved; verified locally after merging main: node --test *.test.mjs in the venture 250 pass / 0 fail (2 skips: axe, opt-in full audit), AUDIT_FULL=1 full brute force pass (gaps 0.3-2.4%), ink --strict, siblings --check and webcheck check_pages…",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 10,
          "lines_added": 549,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-is-a-designed-shed-a-better-deal-than-a-kit.md",
            "ventures/shed-designer/paretoaudit.mjs",
            "ventures/shed-designer/paretoaudit.test.mjs",
            "ventures/shed-designer/value.mjs",
            "ventures/shed-designer/value.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "63d466764dccfbe16099171b3cdaaa84e733ec1b",
          "at": 1793325352000,
          "title": "shed-designer: r2 cut sheet — sheet goods mix strip widths, rip offcuts, nest gable siding",
          "pr": 11540,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r2 cut sheet — sheet goods mix strip widths, rip offcuts, nest gable siding",
            "shed-designer: sheet goods — build steps for offcut strips and nested gable pieces; regenerate pages; post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 21,
          "lines_added": 270,
          "lines_removed": 111,
          "added_files": [
            "docs/posts/2026-10-30-the-sheet-hiding-in-the-offcut.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9351f913b0ac3305f16f8d74f4cd3f4524616a1b",
          "at": 1793325432000,
          "title": "shed-designer: r3b detail/compare — open a starting design, see what it holds, compare two or three",
          "pr": 11559,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shed-designer: r3b detail and compare — open a starting design, see what it holds, compare two or three",
            "shed-designer: picker uses the page's own primary button style; run record after merging main",
            "shed-designer: llms.txt picker lines on their own lines, so lanes stop colliding on the shared sentence"
          ],
          "detail": "A strip of the starting designs above the editor, each with a 3D render, price, size and why it is on the list.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 12,
          "lines_added": 936,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-what-a-shed-holds-per-hundred-dollars.md",
            "docs/reports/shed-designer-round3b-lane4.md",
            "prompts/runs/2026-10-30-session_01XpHqyg18KFJ7wq52yKE93G.json",
            "ventures/shed-designer/designfacts.mjs",
            "ventures/shed-designer/designfacts.test.mjs",
            "ventures/shed-designer/picker.browser.test.mjs",
            "ventures/shed-designer/picker.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a023ee491bad9cc630482529e5e914dd429552d9",
          "at": 1793325436000,
          "title": "shed-designer: r2 cut sheet — round the relaxation's fractional patterns up as well as down",
          "pr": 11546,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r2 cut sheet — round the relaxation's fractional patterns up as well as down",
            "shed-designer: optimizer — regenerate size pages and worked-example numbers after merging main"
          ],
          "detail": "Over the 217 cut lists of the presets and their options: $30,676.81 to $30,649.48 against a $30,543.37 bound, 139 to 143 proven optimal, and no measurable change in budget/simplify/candidates time.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 17,
          "lines_added": 84,
          "lines_removed": 56,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "afe3237900c6261456aa016cbd57145065f82cbf",
          "at": 1793325479000,
          "title": "shed-designer: lumber-list pages for 12x14, 14x14, 14x20, 16x20, 16x24 and 12x32",
          "pr": 11572,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 25,
          "lines_added": 590,
          "lines_removed": 9,
          "added_files": [
            "docs/posts/2026-10-30-shed-lumber-lists-up-to-16x24.md",
            "ventures/shed-designer/how-much-lumber-for-a-12x14-shed.html",
            "ventures/shed-designer/how-much-lumber-for-a-12x32-shed.html",
            "ventures/shed-designer/how-much-lumber-for-a-14x14-shed.html",
            "ventures/shed-designer/how-much-lumber-for-a-14x20-shed.html",
            "ventures/shed-designer/how-much-lumber-for-a-16x20-shed.html",
            "ventures/shed-designer/how-much-lumber-for-a-16x24-shed.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d5dc263ac0d124d4559e5350d94f1c2339740373",
          "at": 1793325546000,
          "title": "shed-designer: r3 design search — a search order that finds the cheapest end; lane 1 report",
          "pr": 11573,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Runners starved; verified locally on merged tree: venture node --test 264 pass 0 fail; promptctl validate ok.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 136,
          "lines_removed": 16,
          "added_files": [
            "docs/reports/shed-designer-round3-lane1.md",
            "prompts/runs/2026-10-30-session_01XpHqycUEdN5jpaaDa8esGA.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5311b31456e2544af4cfc71e727f68d5fa62df19",
          "at": 1793325562000,
          "title": "shed-designer: r3 integration — typecheck green again (locked and keep in their JSDoc types)",
          "pr": 11576,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "PR #11562 added a locked flag to cost-lever groups and a keep option to simplify(), but not to their @ts-check types, so changed-ventures failed on main with 6 diagnostics.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 2,
          "lines_added": 2,
          "lines_removed": 2,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "df46282723a7a181db37fdda2e7c799b63566eda",
          "at": 1793325586000,
          "title": "shed-designer: r3 lap siding — fiber cement and engineered wood lap, course by course over OSB and wrap",
          "pr": 11567,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3 lap siding — fiber cement and engineered wood lap, course by course over OSB and wrap"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 25,
          "lines_added": 747,
          "lines_removed": 38,
          "added_files": [
            "docs/posts/2026-10-30-lap-siding-on-a-small-shed.md",
            "docs/reports/shed-designer-round3-lap-siding.md",
            "prompts/runs/2026-10-30-session_01XpHqybdbfUS98SKSQvtQEW.json",
            "ventures/shed-designer/lap.mjs",
            "ventures/shed-designer/lap.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9847a9d242b8680e26c192903bcdeb326056c72c",
          "at": 1793325667000,
          "title": "shed-designer: r3b renders — pictures of every preset from the tool's own WebGL viewer, kept from drifting by a scene hash",
          "pr": 11558,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3b renders — pictures of every preset from the tool's own WebGL viewer, kept from drifting by a scene hash",
            "shed-designer: r3b renders — redraw after merging main (render3d.mjs draw loop and preset geometry moved)",
            "shed-designer: r3b renders — post and README sizes after the looks redraw"
          ],
          "detail": "make-renders.mjs draws each preset in headless Chromium (hero, front, gable end, back, framing cutaway) as WebP within a documented size budget, with a manifest of scene hashes and alt text written from the design.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 38,
          "lines_added": 748,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-pictures-of-a-shed-that-cannot-go-stale.md",
            "ventures/shed-designer/make-renders.mjs",
            "ventures/shed-designer/renders.mjs",
            "ventures/shed-designer/renders.test.mjs",
            "ventures/shed-designer/renders/10x12-back.webp",
            "ventures/shed-designer/renders/10x12-framing.webp",
            "ventures/shed-designer/renders/10x12-front.webp",
            "ventures/shed-designer/renders/10x12-hero.webp",
            "ventures/shed-designer/renders/10x12-side.webp",
            "ventures/shed-designer/renders/12x16-back.webp",
            "ventures/shed-designer/renders/12x16-framing.webp",
            "ventures/shed-designer/renders/12x16-front.webp",
            "ventures/shed-designer/renders/12x16-hero.webp",
            "ventures/shed-designer/renders/12x16-side.webp",
            "ventures/shed-designer/renders/8x10-back.webp",
            "ventures/shed-designer/renders/8x10-framing.webp",
            "ventures/shed-designer/renders/8x10-front.webp",
            "ventures/shed-designer/renders/8x10-hero.webp",
            "ventures/shed-designer/renders/8x10-side.webp",
            "ventures/shed-designer/renders/8x12-back.webp",
            "ventures/shed-designer/renders/8x12-classic-back.webp",
            "ventures/shed-designer/renders/8x12-classic-framing.webp",
            "ventures/shed-designer/renders/8x12-classic-front.webp",
            "ventures/shed-designer/renders/8x12-classic-hero.webp",
            "ventures/shed-designer/renders/8x12-classic-side.webp",
            "ventures/shed-designer/renders/8x12-framing.webp",
            "ventures/shed-designer/renders/8x12-front.webp",
            "ventures/shed-designer/renders/8x12-hero.webp",
            "ventures/shed-designer/renders/8x12-side.webp",
            "ventures/shed-designer/renders/8x8-lean-back.webp",
            "ventures/shed-designer/renders/8x8-lean-framing.webp",
            "ventures/shed-designer/renders/8x8-lean-front.webp",
            "ventures/shed-designer/renders/8x8-lean-hero.webp",
            "ventures/shed-designer/renders/8x8-lean-side.webp",
            "ventures/shed-designer/renders/manifest.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d9eb254ae24e6ce26e9067dea5ea0761ace0bf7d",
          "at": 1793325704000,
          "title": "shed-designer: r3 lane 7 — concrete piers to your frost depth, priced and checked; lane report",
          "pr": 11568,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3 lane 7 — concrete piers in form tubes to the frost depth you set, priced, checked and in the build steps",
            "shed-designer: r3 lane 7 report"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 17,
          "lines_added": 219,
          "lines_removed": 23,
          "added_files": [
            "docs/posts/2026-10-30-concrete-piers-under-a-shed.md",
            "docs/reports/shed-designer-round3-lane7.md",
            "ventures/shed-designer/foundation.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "726adb0dcd454a91a7b1399991b73e610d1160d5",
          "at": 1793325748000,
          "title": "shed-designer: r3 looks — presentation-look pictures, Save picture, lighter orbiting, lane report",
          "pr": 11581,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3 looks — presentation-look thumbnails and HOA image, Save picture, lighter orbiting"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 8,
          "lines_added": 54,
          "lines_removed": 14,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "404d7ad2f24018569e41336d2e710af2d66e3f4e",
          "at": 1793325923000,
          "title": "shed-designer: r3b detail/compare — starting designs priced at the store the page prices at; renders manifest re-hashed",
          "pr": 11580,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shed-designer: r3b detail/compare — starting designs priced at the store the page prices at",
            "shed-designer: detail panel names the new LP SmartSide lap siding",
            "shed-designer: renders manifest re-hashed (red on main: the looks and lap-siding merges moved the scene hash; the redrawn pictures are byte-identical)"
          ],
          "detail": "The detail panel priced every design at the mixed example prices, while the page prices at the store chosen under \"Price the list at\".",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 6,
          "lines_added": 35,
          "lines_removed": 13,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4c3d6a4180cd55b5432eee8593a3ca831c7dbbdd",
          "at": 1793326054000,
          "title": "shed-designer: r3 lap siding — even courses so the top plank meets the plate; correct the lap cost difference (OSB nails were left out)",
          "pr": 11586,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 8,
          "lines_added": 62,
          "lines_removed": 18,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f9b8fd379627758a4f47b1908152bb6bcd056d38",
          "at": 1793326109000,
          "title": "shed-designer: r2 cut sheet — longest board you can haul (default 12 ft), long boards say why",
          "pr": 11550,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r2 cut sheet — round the relaxation's fractional patterns up as well as down",
            "shed-designer: optimizer — regenerate size pages and worked-example numbers after merging main",
            "shed-designer: r2 cut sheet — longest board you can haul (default 12 ft)",
            "shed-designer: ridge-board props stay until the ties are on; round 2 lane 5 report"
          ],
          "detail": "Over the 217 cut lists of the presets and their options: $30,676.81 to $30,649.48 against a $30,543.37 bound, 139 to 143 proven optimal, and no measurable change in budget/simplify/candidates time.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 44,
          "lines_added": 729,
          "lines_removed": 513,
          "added_files": [
            "docs/posts/2026-10-30-boards-that-fit-in-the-truck.md",
            "docs/reports/shed-designer-round2-lane5.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "16b5a941cd4c503ecba5337752f9b12bcddbe0f6",
          "at": 1793326117000,
          "title": "shed-designer: r3 integration — all-pairs cross-feature matrix; presets must pass as shipped",
          "pr": 11553,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3 integration — all-pairs cross-feature matrix; presets must pass as shipped",
            "Post frontmatter within limits (shed post description; lowcomm seo_title, red for every PR on main)",
            "shed-designer: cross-feature matrix adds lane 7's floor options and renders the HOA packet for every pairing",
            "shed-designer: matrix adds the interior axis (49 designs); post updated, with the README conflict-marker break",
            "Post: matrix numbers with lap siding and piers"
          ],
          "detail": "invariants() moves from fuzz.test.mjs into invariants.mjs so the fuzz sweep and the new crossfeature.test.mjs share it.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 252,
          "lines_removed": 67,
          "added_files": [
            "docs/posts/2026-10-30-shed-designer-all-pairs-cross-feature-test.md",
            "ventures/shed-designer/crossfeature.test.mjs",
            "ventures/shed-designer/invariants.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b312e3e42cef0111120a27326ad274b621d01820",
          "at": 1793326286000,
          "title": "shed-designer: r3b renders — each size page shows its own design in 3D",
          "pr": 11594,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3b renders — each size page shows its own design in 3D",
            "shed-designer: r3b renders — re-hash after main"
          ],
          "detail": "make-renders.mjs also draws a hero of each per-size page's design, and make-size-pages.mjs puts it under 'The design behind these numbers'.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 42,
          "lines_added": 424,
          "lines_removed": 13,
          "added_files": [
            "ventures/shed-designer/renders/size-10x10-hero.webp",
            "ventures/shed-designer/renders/size-10x12-hero.webp",
            "ventures/shed-designer/renders/size-10x14-hero.webp",
            "ventures/shed-designer/renders/size-10x16-hero.webp",
            "ventures/shed-designer/renders/size-10x20-hero.webp",
            "ventures/shed-designer/renders/size-12x12-hero.webp",
            "ventures/shed-designer/renders/size-12x14-hero.webp",
            "ventures/shed-designer/renders/size-12x16-hero.webp",
            "ventures/shed-designer/renders/size-12x20-hero.webp",
            "ventures/shed-designer/renders/size-12x24-hero.webp",
            "ventures/shed-designer/renders/size-12x32-hero.webp",
            "ventures/shed-designer/renders/size-14x14-hero.webp",
            "ventures/shed-designer/renders/size-14x20-hero.webp",
            "ventures/shed-designer/renders/size-16x20-hero.webp",
            "ventures/shed-designer/renders/size-16x24-hero.webp",
            "ventures/shed-designer/renders/size-8x10-hero.webp",
            "ventures/shed-designer/renders/size-8x16-hero.webp",
            "ventures/shed-designer/renders/size-8x8-hero.webp"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e2097552a040e60b66c54960a20eb5bbcb3f3c28",
          "at": 1793326367000,
          "title": "shed-designer: r3 roof structures — site-built trusses with OSB gussets, NDS chord and gusset-nail checks",
          "pr": 11589,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 24,
          "lines_added": 791,
          "lines_removed": 85,
          "added_files": [
            "docs/posts/2026-10-30-trusses-for-a-small-shed.md",
            "ventures/shed-designer/truss.mjs",
            "ventures/shed-designer/truss.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6980e0c32d1ee4e5b667417d3537b063b3fc25ac",
          "at": 1793326570000,
          "title": "shed-designer: r3 lane 6 — where the money goes: cost by assembly, change by assembly, bridge to the cheapest passing design",
          "pr": 11557,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3 lane 6 — where the money goes: cost by assembly, change by assembly, bridge to the cheapest passing design",
            "shed-designer: r3 lane 6 run record",
            "shed-designer: r3 lane 6 — type the cost test's design list for tsc",
            "shed-designer: clear the two tsc diagnostics red on main (maxHaulFt, cut-sheet why); run record"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 12,
          "lines_added": 831,
          "lines_removed": 7,
          "added_files": [
            "docs/posts/2026-10-30-where-a-sheds-money-goes.md",
            "docs/reports/shed-designer-round3-lane6.md",
            "prompts/runs/2026-10-30-session_01XpHqyg7ixNGUH3USNit4uK.json",
            "ventures/shed-designer/costs.mjs",
            "ventures/shed-designer/costs.test.mjs",
            "ventures/shed-designer/costview.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "149a54dd8dbc32cc1c2dfecf00cf0aa444f168cf",
          "at": 1793326777000,
          "title": "shed-designer: r3b detail/compare — presets show their pictures from renders/; size-page renders redrawn",
          "pr": 11610,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": "The detail panel, the strip and the compare show a preset's pictures from renders/ (front corner, gable end, back and a framing cutaway, with the manifest's alt text) when the design is that preset unchanged; anything else is still drawn live.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 16,
          "lines_added": 75,
          "lines_removed": 30,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fa65ca3e165763ca5268d6f83d811108eb57f240",
          "at": 1793326790000,
          "title": "shed-designer: r3 lap siding — stud spacing each lap product allows, planks within the haul limit; fix main's red",
          "pr": 11611,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3 lap siding — stud spacing each lap product allows, cited and exposed for right-sizing",
            "shed-designer: lap planks honour the haul limit; fix main's typecheck red from #11550"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 6,
          "lines_added": 54,
          "lines_removed": 13,
          "added_files": [],
          "revert": false,
          "fix_forward": true
        },
        {
          "sha": "651dd723c208a816418064cbbad35ad32d55b819",
          "at": 1793326821000,
          "title": "shed-designer: r3 lane 6 — gallery detail prices by assembly, like the editor's cost tab",
          "pr": 11602,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 12,
          "lines_removed": 5,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e37c9746fa053bb4f6681267b2455a62a0db0873",
          "at": 1793326931000,
          "title": "shed-designer: r3b value — outside audit of the design search's front",
          "pr": 11605,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Runners starved; verified locally after merging main: node --test *.test.mjs in the venture 315 pass / 0 fail (4 skips).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 2,
          "lines_added": 74,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-auditing-the-shed-design-search.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6cb0f12be14a68268f6ae51a39dfac48a7d0090f",
          "at": 1793327118000,
          "title": "shed-designer: r3b renders — presentation look, a small card view for the picker strip, grouped alt text",
          "pr": 11616,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3b renders — picker strip uses drawn cards; presentation look; card view; grouped alt text",
            "shed-designer: r3b renders — redraw after merging main"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 65,
          "lines_added": 313,
          "lines_removed": 127,
          "added_files": [
            "docs/posts/2026-10-30-shed-picker-cards-drawn-ahead.md",
            "ventures/shed-designer/renders/10x12-card.webp",
            "ventures/shed-designer/renders/12x16-card.webp",
            "ventures/shed-designer/renders/8x10-card.webp",
            "ventures/shed-designer/renders/8x12-card.webp",
            "ventures/shed-designer/renders/8x12-classic-card.webp",
            "ventures/shed-designer/renders/8x8-lean-card.webp"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "8b2c6fdbdade2f2994c1f7d46b5a79e363ae9cf3",
          "at": 1793327197000,
          "title": "shed-designer: r3b renders — lane report and llms.txt line",
          "pr": 11621,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 2,
          "lines_added": 47,
          "lines_removed": 0,
          "added_files": [
            "docs/reports/shed-designer-round3b-renders.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4f6d58bdb819f5998dc71570be3e2838e1e2b507",
          "at": 1793327269000,
          "title": "shed-designer: r3 roof structures — attic storage deck on truss bottom chords; lane 3 report",
          "pr": 11618,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shed-designer: attic storage deck on truss bottom chords (20 psf, IRC R301.5); lane 3 report"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 12,
          "lines_added": 246,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-attic-storage-in-a-small-shed.md",
            "docs/reports/shed-designer-round3-lane3.md",
            "prompts/runs/2026-10-30-session_01XpHqye8GsoB7Tz4n576sEf.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "066d8dce88c27593ad036354a092ceeec0a112c7",
          "at": 1793327347000,
          "title": "shed-designer: r3b value — store-kit benchmark on the picker's detail panel; lane 5 report",
          "pr": 11622,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Runners starved; verified locally after merging main: venture node --test 316 pass / 0 fail (4 skips), ink --strict and webcheck check_pages clean, screenshots at 1280 and 390 px with no console errors.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 5,
          "lines_added": 96,
          "lines_removed": 0,
          "added_files": [
            "docs/reports/shed-designer-round3b-lane5.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "01279a4313e9560ab722474b387448d0ebcb5f58",
          "at": 1793327437000,
          "title": "shed-designer: r3b gambrel — barn roof in the engine: gusseted trusses, three-hinged frame checks, optional loft",
          "pr": 11619,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: gambrel (barn) roof in the engine: gusseted trusses, three-hinged frame checks, optional loft, storage measure",
            "shed-designer: the gambrel's knee-gusset row says the plywood itself is not checked"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 38,
          "lines_added": 1103,
          "lines_removed": 241,
          "added_files": [
            "docs/posts/2026-10-30-a-barn-roof-for-the-same-money.md",
            "ventures/shed-designer/gambrel.mjs",
            "ventures/shed-designer/gambrel.test.mjs",
            "ventures/shed-designer/storage.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c1e41cf923cbe89a5459fb318b9ab0ce9f32c11f",
          "at": 1793327589000,
          "title": "shed-designer: r3b renders — stale pictures no longer fail other lanes' PRs; the Pages build redraws them",
          "pr": 11625,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "renders.test.mjs reports stale designs as a diagnostic and skips them, and fails on staleness only under RENDERS_STRICT=1.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 62,
          "lines_removed": 16,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "02dca68587821c1af11b8802e1b59b8c6de72f88",
          "at": 1793327778000,
          "title": "shed-designer: r3 integration — typecheck green again (opening kind after the gambrel normalize change)",
          "pr": 11626,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "PR #11619 made normalize() build its result in a variable before returning it, so each opening's kind widened from 'door'|'window' to string and the @ts-check typecheck failed (TS2322, model.mjs:315).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 1,
          "lines_added": 1,
          "lines_removed": 1,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "095a7a446591d720da14c3267fcd045a6ced60e2",
          "at": 1793327912000,
          "title": "shed-designer: r3 integration — the fuzz checks the utilisation text for Infinity/NaN; pinned buckling case",
          "pr": 11606,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r3 integration — a stud past its buckling load says so, not \"Infinity%\"; typecheck green again",
            "Keep the invariant and pinned case only; main's checks.mjs already caps the stud ratio (PR #11589)"
          ],
          "detail": "Fuzz seed 18712 broke 3 of 2000 designs: 2x4 studs at 24\" in 12 ft walls under heavy snow pass their Euler buckling stress, structure.mjs returns Infinity (correctly failing), and the Structure tab, utilisation list and heat-map sheets printed \"Infinity%\".",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 3,
          "lines_added": 44,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-shed-designer-infinity-percent.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ec8ab2449f4e9d4b2a52ae5b1ba6d6a55434a344",
          "at": 1793327990000,
          "title": "shed-designer: r3 gallery — ten ready designs under 100 sq ft, picked from designsearch and shown in the picker strip",
          "pr": 11561,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [],
          "detail": "Ten sheds under 100 sq ft from two designsearch runs (every member at 90% or less, no warnings, peak 13 ft or less), each the best kept design on its card's measure; shown in r3b's picker strip with arrows, keys and swipe, drawn card pictures and a storage…",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 27,
          "lines_added": 1738,
          "lines_removed": 35,
          "added_files": [
            "docs/posts/2026-10-30-ten-sheds-under-100-square-feet.md",
            "docs/reports/shed-designer-round3-lane2.md",
            "ventures/shed-designer/gallery-data.mjs",
            "ventures/shed-designer/gallery-ui.mjs",
            "ventures/shed-designer/gallery.mjs",
            "ventures/shed-designer/gallery.test.mjs",
            "ventures/shed-designer/make-gallery.mjs",
            "ventures/shed-designer/renders/gallery-balanced-card.webp",
            "ventures/shed-designer/renders/gallery-cheapest-card.webp",
            "ventures/shed-designer/renders/gallery-house-card.webp",
            "ventures/shed-designer/renders/gallery-house-cheapest-card.webp",
            "ventures/shed-designer/renders/gallery-long-card.webp",
            "ventures/shed-designer/renders/gallery-looks-card.webp",
            "ventures/shed-designer/renders/gallery-mower-card.webp",
            "ventures/shed-designer/renders/gallery-square-card.webp",
            "ventures/shed-designer/renders/gallery-storage-card.webp",
            "ventures/shed-designer/renders/gallery-value-card.webp"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f6f392d06478ab5410c06f258ab37d8622a316a8",
          "at": 1793328120000,
          "title": "shed-designer: r3 integration — matrix adds trusses, gambrel, lofts and attic storage; gallery and search picks must pass as shipped and render their HOA packet",
          "pr": 11630,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 1,
          "lines_added": 45,
          "lines_removed": 20,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "193552bc14d0b4605903507c91da0266c7d19978",
          "at": 1793328150000,
          "title": "shed-designer: lap joints look one course ahead so a notched course can still break on a stud (fuzz seed 11)",
          "pr": 11631,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 3,
          "lines_added": 100,
          "lines_removed": 32,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "69ac0e33734540167377e9d760f63755f53515af",
          "at": 1793328162000,
          "title": "shed-designer: r3b detail/compare — every gallery design walked end to end in the browser",
          "pr": 11632,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 2,
          "lines_added": 51,
          "lines_removed": 8,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "40f6d706ccc339a35245113eb28dc36a163c83f9",
          "at": 1793328247000,
          "title": "shed-designer: r3 integration — every stored gallery design keeps every invariant and renders its HOA packet",
          "pr": 11633,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 1,
          "lines_added": 12,
          "lines_removed": 1,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "0e7d3f5dfe80958bc07638c09152261b69b5193c",
          "at": 1793328298000,
          "title": "shed-designer: r3b styles — lean-to shed: framed, checked, drawn, priced, in the menu and the design search",
          "pr": 11564,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [],
          "detail": "A single-slope style (style: 'leanTo') through the engine, structure and connection checks, estimate, plan sheets, 3D labels, build steps, editor (Shape box, preset) and the design search.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 32,
          "lines_added": 929,
          "lines_removed": 242,
          "added_files": [
            "docs/posts/2026-10-30-a-lean-to-shed-framed-and-priced.md",
            "docs/reports/shed-designer-round3b-lane1.md",
            "ventures/shed-designer/leanto.test.mjs",
            "ventures/shed-designer/renders/8x12-lean-to-back.webp",
            "ventures/shed-designer/renders/8x12-lean-to-card.webp",
            "ventures/shed-designer/renders/8x12-lean-to-framing.webp",
            "ventures/shed-designer/renders/8x12-lean-to-front.webp",
            "ventures/shed-designer/renders/8x12-lean-to-hero.webp",
            "ventures/shed-designer/renders/8x12-lean-to-side.webp"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "93fa91b6138b760884ea37720933417feaea0aae",
          "at": 1793328558000,
          "title": "shed-designer: r3 lane 1 — one storage definition, 8\" overhang and 88\" walls, a polish that leaves no cheaper twin",
          "pr": 11628,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Runners starved; verified locally on the tree merged with main (incl.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 18,
          "lines_added": 380,
          "lines_removed": 237,
          "added_files": [
            "docs/posts/2026-10-30-one-number-for-how-much-a-shed-holds.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "93e71739ba3c33fd200e702df1be720bfeee4d72",
          "at": 1793328584000,
          "title": "shed-designer: r3 gallery — cards name their siding and roof; \"match a house\" switch for lap siding and shingles",
          "pr": 11634,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [],
          "detail": "Verified locally on the merged head 58f9bd36 (runners starved): venture suite 354 pass / 0 fail / 3 skipped incl.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 8,
          "lines_added": 88,
          "lines_removed": 7,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4b10c75f2d056b59890bdefac064ae2deaa18720",
          "at": 1793328975000,
          "title": "shed-designer: r3b gambrel — the barn roof on the page: shape control, plan sheets, truss detail, build steps, HOA elevations, 10x10 barn preset",
          "pr": 11636,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 31,
          "lines_added": 587,
          "lines_removed": 76,
          "added_files": [
            "docs/posts/2026-10-30-drawing-a-barn-roof.md",
            "ventures/shed-designer/gambrel-sheets.mjs",
            "ventures/shed-designer/gambrel.browser.test.mjs",
            "ventures/shed-designer/renders/10x10-barn-back.webp",
            "ventures/shed-designer/renders/10x10-barn-card.webp",
            "ventures/shed-designer/renders/10x10-barn-framing.webp",
            "ventures/shed-designer/renders/10x10-barn-front.webp",
            "ventures/shed-designer/renders/10x10-barn-hero.webp",
            "ventures/shed-designer/renders/10x10-barn-side.webp"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d7e0438881efb4def6f3666d2f2e39d57f6d8b1a",
          "at": 1793329433000,
          "title": "main green again: money sign outside the $ (6 formatters); renders redraw step accepted by the workflow dogfood check",
          "pr": 11640,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "check_money_sign.py failed on main for four shed-designer formatters (designfacts, gallery, picker, value) and two in babysitting-business-kit; fixed with node platform/ci/fix_money_sign.mjs plus gallery.mjs by hand (the fixer skips a JSDoc-typed parameter).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 7,
          "lines_added": 32,
          "lines_removed": 6,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4cd8693814c688281a1a01d25a8203db3e80e116",
          "at": 1793330006000,
          "title": "shed-designer: r3b gambrel — barns in the design search and a barn card in the gallery; gambrel labour minutes; lane report",
          "pr": 11648,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 11,
          "lines_added": 253,
          "lines_removed": 66,
          "added_files": [
            "docs/posts/2026-10-30-the-barn-took-six-of-ten-cards.md",
            "docs/reports/shed-designer-round3b-gambrel.md",
            "ventures/shed-designer/renders/gallery-barn-card.webp"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "98989aedb880af73c9c1da04a87cf0bf091c26e2",
          "at": 1793330144000,
          "title": "shed-designer: r2 numbers that drift — size pages built by the site build, not committed",
          "pr": 11524,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: build the per-size lumber pages in the site build, not in git",
            "docs/posts: trim the deck-framing post's description to 160 characters",
            "pages.yml: generate built-not-committed venture pages before the mirror build",
            "Generated venture pages: one module, called by the site build, the front-door mirror and the mirror workflow",
            "front door: regenerate the committed pages (node platform/marketing/regen.mjs)",
            "front door: regenerate the committed pages (node platform/marketing/regen.mjs)"
          ],
          "detail": "A +/-5% move in lumber prices changes the board count on 188 of 240 size-page builds, so \"print only stable figures\" would leave only the piece count.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 32,
          "lines_added": 134,
          "lines_removed": 1635,
          "added_files": [
            "docs/posts/2026-10-30-shed-size-pages-built-not-committed.md",
            "platform/pages/generated-pages.mjs",
            "platform/pages/generated-pages.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4e1d0bb0e3723c3e7e0fbe1a37431d1b69f5c22d",
          "at": 1793330505000,
          "title": "shed-designer: r2 structure — Southern pine, skids and soil, uplift, racking, anchorage, and framing sized to the load",
          "pr": 11577,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shed-designer: Southern pine wet-service values, skid-on-blocks and soil-bearing checks",
            "shed-designer: shorten the soil-bearing post's description to 160 characters",
            "shed-designer: check rafter-tie uplift and wall racking against published values",
            "shed-designer: the Structure tab and FAQ say what is now checked",
            "shed-designer: weigh the shed and size the anchors that keep it on its blocks",
            "docs: shed-designer round 2 structure lane report"
          ],
          "detail": "structure.mjs (both copies) gains SYP No.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 79,
          "lines_added": 1613,
          "lines_removed": 389,
          "added_files": [
            "docs/posts/2026-10-30-a-shed-is-not-a-house.md",
            "docs/posts/2026-10-30-a-shed-on-blocks-needs-anchors.md",
            "docs/posts/2026-10-30-does-the-wind-lift-or-rack-a-shed.md",
            "docs/posts/2026-10-30-what-a-shed-block-presses-on-the-ground.md",
            "docs/reports/shed-designer-round2-structure.md",
            "prompts/runs/2026-10-30-session_01XpHqyfVgGHrV4NLW2yWU3a.json",
            "ventures/shed-designer/framing-moves.mjs",
            "ventures/shed-designer/framing.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e4221499fe5d19a13cafb9d579b3784d1f3fe75a",
          "at": 1793330624000,
          "title": "shed-designer: renders test reads the generated size pages",
          "pr": 11654,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Since #11524 the per-size pages are written at build time, so a fresh checkout has none and 'pages that show a picture use its current file and alt text' failed on main.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 1,
          "lines_added": 7,
          "lines_removed": 2,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "edca5b192aa7a4f1c7158e993a44a769967ddeb1",
          "at": 1793331141000,
          "title": "shed-designer: r2 — Home Depot and Lowe's only, compared like for like; 7 Lowe's gaps sourced",
          "pr": 11547,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: Home Depot and Lowe's only, compared like for like, with coverage shown",
            "shed-designer: source 7 missing Lowe's lines and Home Depot's Z-flashing; list the rest"
          ],
          "detail": "",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 11,
          "lines_added": 142,
          "lines_removed": 66,
          "added_files": [
            "docs/posts/2026-10-30-shed-designer-store-comparison-like-for-like.md",
            "docs/reports/shed-designer-price-gaps-2026-10-30.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c1c74296c96cd392d7e2585208989025a182952a",
          "at": 1793331196000,
          "title": "shed-designer: r2 — README and worked example tested against the model",
          "pr": 11528,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: test the README's numbers against the model, and fix three that drifted",
            "shed-designer README: resolve the merge conflict left in by the last main merge"
          ],
          "detail": "marketing.test.mjs now recomputes every figure in the README's worked example (walls, pitch, peaks, overhang, rafter, pieces, boards, cut-sheet cost, bound, lumber, total, ridge-beam ratio, the classic preset, the budget search's saving and step count, hours).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 77,
          "lines_removed": 8,
          "added_files": [
            "docs/posts/2026-10-30-shed-designer-readme-numbers-tested.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3ad2385229ed27ff53fc0d0248a2d0d9fef9e51a",
          "at": 1793331584000,
          "title": "shed-designer: r2 editor UX — option diffs, 3D pan, per-opening cost, section subtotals, lists↔3D↔plans↔build-step cross-reference",
          "pr": 11579,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "CI runners were starved (every job queued with no runner for 10+ minutes; ci_starvation.py: nothing finished), and main moved under this PR four times.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 15,
          "lines_added": 562,
          "lines_removed": 89,
          "added_files": [
            "docs/posts/2026-10-30-what-a-first-walkthrough-asked-of-the-shed-designer.md",
            "ventures/shed-designer/candidates.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "88e0301591746c8066dd6e2430977154578daa86",
          "at": 1793331827000,
          "title": "shed-designer: type designDiff's settings table (typecheck); the sitemap lists every hand-written page (hoa-packet.html was missing)",
          "pr": 11657,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Fixes main's red changed-ventures (typecheck) and test (venture-sitemap-coverage) after #11579.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 10,
          "lines_removed": 3,
          "added_files": [],
          "revert": false,
          "fix_forward": true
        },
        {
          "sha": "d4dbcdb661fd73d7dd06d83aa1d7580c05ddbc49",
          "at": 1793332395000,
          "title": "shed-designer: r2 numbers that drift — fastener and hardware audit (box mix for siding nails, birdsmouth swap); lane 2 report",
          "pr": 11620,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: fastener and hardware audit; siding nails by the cheapest box mix, birdsmouth swap offered",
            "fastener audit post: the 8x8 lean saves $3.41, not $8.98",
            "shed-designer: fastener audit figures on current main",
            "shed-designer: r2 lane 2 report and run record",
            "shed-designer: lane report notes the unframed-opening guard"
          ],
          "detail": "",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 12,
          "lines_added": 168,
          "lines_removed": 13,
          "added_files": [
            "docs/posts/2026-10-30-shed-designer-fastener-audit.md",
            "docs/reports/shed-designer-round2-lane2.md",
            "prompts/runs/2026-10-30-session_01XpHqybgbjtZBC1yuM1sWw3.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a0d347daf22149f9927959236c38dec0d0a44f88",
          "at": 1793332726000,
          "title": "shed-designer: r2 numbers that drift — auto overhang is the longest within $25 of the cheapest whole order",
          "pr": 11595,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: auto overhang is the longest within $X of the cheapest whole order",
            "shed-designer: overhang figures on current main (8\" costs no more than 6\"; the old rule's 9\" bought a fifth shingle bundle)",
            "shed-designer: auto overhang skips overhangs that leave an opening unframed"
          ],
          "detail": "The automatic overhang now prices the whole order (rafters, sheathing, roofing, trim) at every inch from 6\" to 18\" and takes the longest whose cost is within overhangBudget dollars (default $25, a new field beside the tick box) of the cheapest.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 8,
          "lines_added": 110,
          "lines_removed": 25,
          "added_files": [
            "docs/posts/2026-10-30-shed-designer-overhang-budget.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "0d270bfbce4c9132d9db7815cc6825e428705be7",
          "at": 1793333900000,
          "title": "shed-designer: r2 structure — studs at 24\" by default where the siding allows",
          "pr": 11656,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 30,
          "lines_added": 294,
          "lines_removed": 150,
          "added_files": [
            "docs/posts/2026-10-30-studs-at-24-inches-by-default.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "33c0e661c4440ab8969f3413ffbcbb5e396d0e85",
          "at": 1793392657000,
          "title": "shed-designer: r4 lane 4 — sloped rafter hangers and a cane bolt for door pairs",
          "pr": 11852,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Merged on local verification while CI jobs sat queued: full shed suite 390/390 after merging main, typecheck 0 diagnostics, post front matter passes.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 10,
          "lines_added": 51,
          "lines_removed": 11,
          "added_files": [
            "docs/posts/2026-10-30-a-sloped-rafter-needs-a-sloped-hanger.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7dfcbf2ab0109e9d239f2568de4eca77bd6249b7",
          "at": 1793392842000,
          "title": "shed-designer: r4 integration — renders redrawn on main",
          "pr": 11856,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "make-renders.mjs --check reported all 37 targets stale on main (a74fca17).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 7,
          "lines_added": 69,
          "lines_removed": 69,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e8e7d30ff4f06e2f38f4f49aa5b3062585dfc683",
          "at": 1793393356000,
          "title": "shed-designer: r4 lane 4 — climate setting picks HZ5 or HZ10 HardiePlank; 5/4 trim option (HardieTrim, LP 540)",
          "pr": 11866,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Merged on local verification (CI runners queued): shed suite 391/391 after merging main, typecheck 0, browser tests 42 pass.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 14,
          "lines_added": 76,
          "lines_removed": 10,
          "added_files": [
            "docs/posts/2026-10-30-hz5-or-hz10-and-what-5-4-trim-costs.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3342f31d91b9fe857c59e0636bf7feca527299bb",
          "at": 1793393400000,
          "title": "shed-designer: r4 lane 3 — gallery searched on each deploy, cards polished and audited",
          "pr": 11853,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 lane 3 — gallery searched on each deploy, cards polished and audited",
            "shed-designer: r4 lane 3 — redraw the gallery card pictures; make-renders --only=<prefix>"
          ],
          "detail": "",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 16,
          "lines_added": 213,
          "lines_removed": 56,
          "added_files": [
            "docs/posts/2026-10-30-the-shed-gallery-was-leaving-money-on-the-table.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "0d9eaafc87a7e3c243596d80314b453687ea64fc",
          "at": 1793393694000,
          "title": "shed-designer: r4 lane 3 — the auto overhang prices each eave at the visitor's prices",
          "pr": 11858,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "buildShed takes the page's prices (optional); only the automatic overhang reads them, and the build cache keys on them only when it does.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 10,
          "lines_added": 54,
          "lines_removed": 27,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9cc8206698fb8617a375140fcd7fffa672aab470",
          "at": 1793393784000,
          "title": "shed-designer: r4 lane7 — Show in 3D for every drawn part, panel picking, sharper siding note",
          "pr": 11855,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 lane7 — Show in 3D for sheets, siding, roofing, trim and hardware; door-frame geometry; panel picking; sharper siding note and catalogue range",
            "shed-designer: r4 lane7 — shorter post description",
            "shed-designer: r4 lane7 — looks test knows window glass is not siding texture",
            "shed-designer: r4 lane7 — renders redrawn after merging main"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 59,
          "lines_added": 547,
          "lines_removed": 156,
          "added_files": [
            "docs/posts/2026-10-30-pointing-at-every-shed-part.md",
            "ventures/shed-designer/xref.mjs",
            "ventures/shed-designer/xref.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "2103693454ae312b9828f83358a6400fe2392c11",
          "at": 1793393795000,
          "title": "shed-designer: r4 lane 6 — worked-example facts: --write refresh, run by the site build",
          "pr": 11857,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Verified locally after merging main: venture node --test 406/403 pass, 0 fail, 3 skipped; typecheck 0; check_money_sign clean.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 3,
          "lines_added": 142,
          "lines_removed": 55,
          "added_files": [
            "ventures/shed-designer/workedfacts.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "74ab84ce82e0629193496f88035312836d2e0304",
          "at": 1793393870000,
          "title": "shed-designer: r4 lane 6 — cutting layout for every sheet good",
          "pr": 11854,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Verified locally after merging main: venture node --test 409 tests, 406 pass, 0 fail, 3 skipped (then re-merged main with #11857: cutlayout/drawings/marketing/plans/fuzz/crossfeature 43/43); typecheck 0.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 8,
          "lines_added": 420,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-every-shed-sheet-drawn.md",
            "ventures/shed-designer/cutlayout.mjs",
            "ventures/shed-designer/cutlayout.test.mjs",
            "ventures/shed-designer/cutting-sheets.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "8bbb8c2e3fbf407fd20e3bb7c3d0ee7acb155677",
          "at": 1793393998000,
          "title": "shed-designer: r4 lane7 — first-time-user fixes, lane report",
          "pr": 11870,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 lane7 — Show in 3D for sheets, siding, roofing, trim and hardware; door-frame geometry; panel picking; sharper siding note and catalogue range",
            "shed-designer: r4 lane7 — shorter post description",
            "shed-designer: r4 lane7 — looks test knows window glass is not siding texture",
            "shed-designer: r4 lane7 — first-time-user fixes: HOA packet in the bar, phone shopping cards, folded gallery hint, total says what it adds, print hides screen controls; lane report",
            "shed-designer: r4 lane7 — keep main's wall-trim and climate options; reapply only this PR's page changes",
            "shed-designer: r4 lane7 — run record"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 6,
          "lines_added": 198,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-a-first-visit-to-the-shed-designer.md",
            "docs/reports/shed-designer-round4-lane7.md",
            "prompts/runs/2026-10-30-session_01XpHqyepBUmtvJxGUiYokdE.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "492de39bfc6e99b4daa538bd478814e2bd1c3d47",
          "at": 1793394116000,
          "title": "shed-designer: r4 lane 4 — trim paint line (two coats on the primed trim's face area)",
          "pr": 11877,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Merged on local verification (CI runners queued): shed suite 419/419 after merging main, typecheck 0.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 9,
          "lines_added": 69,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-the-shed-paint-line-was-missing-the-trim.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "2f31c0b149ce0413025dd53973c4b97a310f850d",
          "at": 1793394238000,
          "title": "shed-designer: r4 lane 5 — no-floor shed on PT 4x6 timbers, block/pier spacing, search knobs",
          "pr": 11861,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shed-designer: r4 lane 5 — no-floor shed on PT 4x6 timbers, block/pier spacing",
            "shed-designer: r4 lane 5 — floor and block spacing as search knobs, lane report, run record",
            "shed-designer: r4 lane 5 — renders after merging main",
            "shed-designer: r4 lane 5 — renders after merging main"
          ],
          "detail": "",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 26,
          "lines_added": 811,
          "lines_removed": 107,
          "added_files": [
            "docs/posts/2026-10-30-a-shed-with-no-floor.md",
            "docs/reports/shed-designer-round4-lane5.md",
            "prompts/runs/2026-10-30-session_01XpHqygGpeF21Ny9uEyp88N.json",
            "ventures/shed-designer/floorless.mjs",
            "ventures/shed-designer/floorless.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6617346936b33dd301030bb5127835dd74ab078d",
          "at": 1793394588000,
          "title": "shed-designer: r4 lane 6 — site plan facing, north arrow, easement; HOA packet site sheet, 3D corner, stored-render samples",
          "pr": 11865,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Verified locally after merging main (#11861, #11877; app.mjs FIELDS conflicts resolved keeping main's fields): venture node --test 438 tests, 435 pass, 0 fail, 3 skipped; typecheck 0; make-renders --check up to date; Playwright on hoa-packet.html, 0 console…",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 11,
          "lines_added": 239,
          "lines_removed": 43,
          "added_files": [
            "docs/posts/2026-10-30-a-shed-site-plan-an-hoa-can-read.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f806c7e286509c1c5f5a67d21fa6b0bc0775c363",
          "at": 1793394638000,
          "title": "shed-designer: r4 structure — truss heel uplift, chord brace, siding step fix",
          "pr": 11859,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 structure — truss heel uplift, chord brace, siding step names its siding",
            "shed-designer: r4 structure — shorten post description"
          ],
          "detail": "",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 7,
          "lines_added": 189,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-when-the-wind-turns-a-shed-truss-inside-out.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fda3af5a8790e88e852b276dc5b0de7da52ea19d",
          "at": 1793394721000,
          "title": "shed-designer: r4 lane 4 — board and batten in exterior LP 440 boards and battens; like-for-like Lowe's gable vent",
          "pr": 11886,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Merged on local verification (CI runners queued): shed suite 432/432 after merging main, typecheck 0.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 8,
          "lines_added": 44,
          "lines_removed": 13,
          "added_files": [
            "docs/posts/2026-10-30-board-and-batten-with-exterior-boards-costs-less.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e884b283e587ed4fb2603274d685abfd7d03118a",
          "at": 1793394937000,
          "title": "shed-designer: r4 lane 6 — share picture: the 8x12 render as og:image",
          "pr": 11851,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Verified locally after merging main: venture node --test 441 tests, 438 pass, 0 fail, 3 skipped; typecheck 0; make-renders --check up to date; share/check tests 124/124; build.test share-card tests 7/7.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 14,
          "lines_added": 205,
          "lines_removed": 20,
          "added_files": [
            "docs/posts/2026-10-30-a-shed-link-that-shows-the-shed.md",
            "docs/reports/shed-designer-round4-lane6.md",
            "ventures/shed-designer/renders/og-8x12-share.jpg"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5a2b41a94d5bc67467753b80b7131ba22629d828",
          "at": 1793395050000,
          "title": "shed-designer: r4 saltbox — engine, checks and estimate",
          "pr": 11862,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Saltbox style in the framing engine: off-centre ridge, two pitches, per-side checks (three-hinged tie force w·a·b/2h), per-wall loads, estimate by slope.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 11,
          "lines_added": 606,
          "lines_removed": 101,
          "added_files": [
            "docs/posts/2026-10-30-a-saltbox-roof-framed-and-checked.md",
            "ventures/shed-designer/saltbox.mjs",
            "ventures/shed-designer/saltbox.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3794cfad76e5a64d8d9f4e2ca7da7b4039c0ac47",
          "at": 1793395298000,
          "title": "shed-designer: r4 lane 6 — HOA packet page-count test (5 PDF pages for 5 packet pages)",
          "pr": 11898,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Test-only; hoa.browser.test.mjs 1/1 pass locally on current main.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 2,
          "lines_added": 80,
          "lines_removed": 0,
          "added_files": [
            "ventures/shed-designer/hoa.browser.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6c89d9e15001a65b4c9ac836975c33ac771dd1de",
          "at": 1793395343000,
          "title": "shed-designer: r4 lane 4 — price-gap second pass, kit recheck, HOA door finish, lane report",
          "pr": 11887,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Merged on local verification (CI runners queued): shed suite 439/439 after merging main, typecheck 0, browser.test.mjs 37 pass.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 9,
          "lines_added": 136,
          "lines_removed": 25,
          "added_files": [
            "docs/posts/2026-10-30-a-second-pass-at-the-shed-price-gaps.md",
            "docs/reports/shed-designer-round4-lane4.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "60fba3500c5875a12e744c7d9f5db83de26218df",
          "at": 1793395392000,
          "title": "shed-designer: r4 integration — matrix gains saltbox, lean-to, floorless, climate, 5/4 trim; two cross-lane fixes",
          "pr": 11878,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 integration — matrix gains climate and 5/4 trim; say when 5/4 trim breaks the haul limit",
            "shed-designer: r4 integration — matrix gains saltbox, lean-to and floorless; teen-bedroom rug sits on the gravel with no floor"
          ],
          "detail": "The all-pairs matrix adds lane 4's climate (mild, freezing) and wallTrim 5/4 (63 designs).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 3,
          "lines_added": 41,
          "lines_removed": 6,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e9807a6113f202df618b2619bbcf8904883d1a63",
          "at": 1793395504000,
          "title": "shed-designer: r4 integration — render manifest refreshed (27 hashes, pictures byte-identical)",
          "pr": 11902,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 1,
          "lines_added": 27,
          "lines_removed": 27,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b7d4887ff2d0d601100ee99ef3b4650b9de7bf30",
          "at": 1793395650000,
          "title": "shed-designer: r4 structure — LP SmartSide racking values (APA PR-N124)",
          "pr": 11864,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 structure — truss heel uplift, chord brace, siding step names its siding",
            "shed-designer: r4 structure — LP SmartSide panel racking values (APA PR-N124)",
            "shed-designer: r4 structure — shorten post description",
            "shed-designer: r4 structure — shorten LP post description",
            "shed-designer: refresh renders manifest after merging main"
          ],
          "detail": "",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 6,
          "lines_added": 93,
          "lines_removed": 23,
          "added_files": [
            "docs/posts/2026-10-30-what-lp-smartside-panels-hold-against-the-wind.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d48534d3bbf415552ace4b2f6c2d5d25eb9711b2",
          "at": 1793396146000,
          "title": "shed-designer: r4 saltbox — drawings, 3D, editor, steps, HOA and the preset",
          "pr": 11899,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "The saltbox is drawn wherever a centred ridge was assumed, and the 8x12 saltbox joins the New design menu.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 27,
          "lines_added": 332,
          "lines_removed": 101,
          "added_files": [
            "docs/posts/2026-10-30-drawing-a-saltbox.md",
            "ventures/shed-designer/renders/8x12-saltbox-back.webp",
            "ventures/shed-designer/renders/8x12-saltbox-card.webp",
            "ventures/shed-designer/renders/8x12-saltbox-framing.webp",
            "ventures/shed-designer/renders/8x12-saltbox-front.webp",
            "ventures/shed-designer/renders/8x12-saltbox-hero.webp",
            "ventures/shed-designer/renders/8x12-saltbox-side.webp"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e511d2aa8e7e4a4fde1b75455b81e8c6f506977d",
          "at": 1793396491000,
          "title": "shed-designer: r4 lane 5 — fix floorless plate-on-timber check, floorless fuzz",
          "pr": 11904,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shed-designer: r4 lane 5 — floorless plate check reads the run from its wall; decor on the gravel; floorless fuzz",
            "shed-designer: r4 lane 5 — report: the decor fix came from main"
          ],
          "detail": "A 4-1/2\" bottom-plate piece by a door on a 2x6 wall is deeper than it is long, so judging its run from its bounding box failed it (r4 lane 2's case, pinned).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 34,
          "lines_removed": 1,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "26d75d36a02d756920075aeace553d25f11b762d",
          "at": 1793396860000,
          "title": "shed-designer: r4 gambrel — gusset plywood check, gussets sized to pass, barn knobs in the search",
          "pr": 11905,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "APA PDS D510-2020 Table 9 capacities for the gambrel gussets; knee gussets reach into the corner (85% target).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 12,
          "lines_added": 211,
          "lines_removed": 18,
          "added_files": [
            "docs/posts/2026-10-30-the-barn-gusset-was-too-small.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c793633a7c616225ed259afa42e3e386acb25c1c",
          "at": 1793396882000,
          "title": "shed-designer: r4 integration — matrix draws the site plan; post on where the lanes met",
          "pr": 11908,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 integration — matrix draws the site plan (facing, easement, insulation); post on the round's seams",
            "post: description under 160 characters",
            "post: clearer description",
            "post: the matrix's final size"
          ],
          "detail": "Every matrix design now has a lot, so lane 6's site sheet (facing, easement) is drawn rather than skipped; insulation, siteFacing and easementSide join the axes (72 designs, all pass).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 2,
          "lines_added": 59,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-eight-agents-one-shed-designer.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "70a57cd24a17d9c1ebd9b4b5f2ce8202ee2a129e",
          "at": 1793397447000,
          "title": "shed-designer: r4 lane 4 — frame a stud for a lap joint between close openings (fuzz 27311); 3D door colour follows its material",
          "pr": 11913,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Merged on local verification (CI runners queued): shed suite 464/464 after merging main, typecheck 0, browser tests 46 pass, fuzz seed 27311 at 2,000 designs passes, renders regenerated.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 47,
          "lines_added": 180,
          "lines_removed": 85,
          "added_files": [
            "docs/posts/2026-10-30-two-doors-26-inches-apart-and-a-lap-joint-with-nothing-behind-it.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a398f9f136b8d12a7e1eeebc66a451153f0b2f0a",
          "at": 1793397673000,
          "title": "shed-designer: r4 gambrel — loft access: a ladder, and a hatch through a full loft",
          "pr": 11911,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Site-built ladder to a half loft; a 22-1/2 x 30 hatch (IRC R807.1) and ladder through a full one; ladder detail sheet; build steps.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 7,
          "lines_added": 163,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-a-way-up-to-the-barn-loft.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4b3ed69b342b2ca923a59435c28e125f54fdca35",
          "at": 1793397777000,
          "title": "shed-designer: r4 lean-to — clerestory windows in the tall wall",
          "pr": 11910,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "A front-wall layout with a row of fixed 23x12 transoms high in a lean-to's tall wall, seeded for lean-tos.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 70,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-clerestory-windows-on-a-lean-to.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6818bff1c4ac2a307fd1acfd20fa91e27f013d0a",
          "at": 1793398227000,
          "title": "shed-designer: r4 lane 3 — margin report's oversized members priced, and fed to the cheaper build",
          "pr": 11879,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 lane 3 — margin report's oversized members priced, and fed to the cheaper build",
            "shed-designer: r4 lane 3 — merge main; gallery regenerated and its card pictures redrawn (stale on main after other lanes' geometry changes)"
          ],
          "detail": "marginMoves (utilisation.mjs) turns each member far below the target whose lighter size still passes inside it into a move; budget() prices them beside its own (it adds the ridge beam's depth, which it never tried).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 8,
          "lines_added": 196,
          "lines_removed": 34,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5c4f5adac2ce9e1bc69829aadc059c8a295a9fc0",
          "at": 1793398367000,
          "title": "shed-designer: r4 structure — four rated ground anchors, overturning and sliding as a pass/fail row",
          "pr": 11906,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 structure — four rated ground anchors, overturning and sliding as a pass/fail row",
            "shed-designer: r4 structure — anchors on the floorless foundation, renders manifest, lane report",
            "shed-designer: refresh renders manifest after merging main",
            "shed-designer: refresh renders manifest after merging main",
            "shed-designer: refresh renders manifest after merging main",
            "shed-designer: refresh renders manifest after merging main"
          ],
          "detail": "New design setting anchors ('48' default, '30', 'none').",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 18,
          "lines_added": 265,
          "lines_removed": 46,
          "added_files": [
            "docs/posts/2026-10-30-four-ground-anchors-for-a-shed.md",
            "docs/reports/shed-designer-round4-structure.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "eb5769de89d0d5ea68a4782c6e32973c14ceb2ba",
          "at": 1793398617000,
          "title": "shed-designer: r4 gambrel — wind uplift check and a tie brace where it reverses the frame",
          "pr": 11917,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "0.6D + 0.6W through the gambrel frame; ties pushed into compression get a mid-span brace.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 7,
          "lines_added": 106,
          "lines_removed": 7,
          "added_files": [
            "docs/posts/2026-10-30-wind-turns-a-barn-tie-into-a-column.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "2a928e42c86945c1b1c2a6a82ad7d4e3dd84b666",
          "at": 1793398625000,
          "title": "shed-designer: r4 lane 3 — the gallery search leaves the build's generators (it raced build.test.mjs)",
          "pr": 11915,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [],
          "detail": "make-gallery.mjs rewrites the committed gallery-data.mjs.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 4,
          "lines_added": 21,
          "lines_removed": 15,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e8ef9f32a03a50faa5aa1ae6a6474662201f5f72",
          "at": 1793398772000,
          "title": "shed-designer: r4 saltbox — in the design search; lane 2 report and run record",
          "pr": 11920,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "'saltbox' joins the search's style knob (front at twice the back pitch, no trusses) with its own looks rule; the round 4 lane 2 report and run record.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 5,
          "lines_added": 255,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-the-search-tries-saltboxes.md",
            "docs/reports/shed-designer-round4-lane2.md",
            "prompts/runs/2026-10-30-session_01XpHqyei67VN1wMkbCA8tm6.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d99af75cb6dab0bb417eafddc0ace5722896fec7",
          "at": 1793399471000,
          "title": "shed-designer: r4 lane 3 — gallery cards show looks terms and cost against your design, with a bridge",
          "pr": 11868,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 lane 3 — gallery cards show looks terms and cost against your design, with a bridge",
            "shed-designer: r4 lane 3 — a long siding colour name no longer widens the page at 1366 px; merge main"
          ],
          "detail": "Each card: its looks score and the two terms it loses most on, and its materials cost against the design open in the editor (same pricing on both sides).",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 6,
          "lines_added": 98,
          "lines_removed": 5,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9097bb83c5ba25521dca95b960fc6c9b698b2965",
          "at": 1793399701000,
          "title": "shed-designer: r4 lane 3 — the path to your budget, and what $2,000 buys in lap siding",
          "pr": 11876,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "wip",
            "shed-designer: r4 lane 3 — the path to your budget, and a post on what $2,000 buys",
            "shed-designer: r4 lane 3 — budget path's money() puts a minus outside the dollar sign (check_money_sign)"
          ],
          "detail": "budgetpath.mjs: with a budget typed beside \"Find a cheaper build\", the panel shows each step's running total and the step that reaches it, opt-in savings that give something up (no gable vents, no spare boards) with what each gives up, and the largest size of…",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 6,
          "lines_added": 296,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-what-2000-dollars-buys-in-a-lap-sided-shed.md",
            "ventures/shed-designer/budgetpath.mjs",
            "ventures/shed-designer/budgetpath.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1fb0145801e8bb66fa74c0943abc22ec35b07d2c",
          "at": 1793399752000,
          "title": "shed-designer: r4 lane 4 — rip the siding nailer to the gap on its left too (fuzz seed 7, #990)",
          "pr": 11930,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Merged on local verification (CI runners queued): shed suite 471/471 after merging main, typecheck 0, fuzz seed 7 (1,000) and seed 27311 (2,000) both pass, renders unchanged.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 3,
          "lines_added": 39,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-a-1-3-inch-gap-behind-a-siding-joint.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "443a7a4d045997a1a7c8896bb7e1eaaa5f550ba8",
          "at": 1793399933000,
          "title": "shed-designer: r4 lane 3 — a first-time visitor opens on the balanced gallery design",
          "pr": 11869,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 lane 3 — a first-time visitor opens on the balanced gallery design",
            "shed-designer: r4 lane 3 — utilisation browser tests also start from the 8x12 default",
            "Fix the merge: import firstDesign beside matchesHouse",
            "shed-designer: r4 lane 3 — the first design is never dearer than the 8x12 default"
          ],
          "detail": "The 8x12 default (8 ft height limit, 10 ft peak) opened with a \"Check these\" warning on every first visit.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 5,
          "lines_added": 74,
          "lines_removed": 3,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7421d1a7949cc7c3b7551e4d6b1ee1a9c0f72e91",
          "at": 1793400351000,
          "title": "shed-designer: r4 lane 3 — attic storage is a search knob; the gallery ranks on usable storage",
          "pr": 11897,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "shed-designer: r4 lane 3 — storage counts roof space only where it is open or decked; attic storage and lofts are search knobs",
            "shed-designer: r4 lane 3 — gallery reasons say \"before it in the strip\", not \"above\" (lane 7, via the parent)",
            "Post: the gallery ranks on usable storage (lane 2's usableCuFt); attic storage is the new knob",
            "shed-designer: r4 lane 3 — lane report and run record",
            "Post and report: the regenerated barn card has no loft",
            "shed-designer: r4 lane 3 — gallery test follows the strip wording and usable storage; the re-price test types a 2x4 price every card buys"
          ],
          "detail": "storage.mjs: overheadCuFt is all the roof space under a ridge beam or a lean-to's slope, and over ties or chords only the space over a deck (a truss attic with attic storage, a gambrel's loft), measured from each deck panel.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 19,
          "lines_added": 328,
          "lines_removed": 153,
          "added_files": [
            "docs/posts/2026-10-30-storage-you-cannot-stand-on.md",
            "docs/reports/shed-designer-round4-lane3.md",
            "prompts/runs/2026-10-30-session_01XpHqycdrpSxeSAfKHT2UX3.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ac67a4cdce253134f3dab8db02feca984eaafbb9",
          "at": 1793401640000,
          "title": "shed-designer: r4 lane 3 — the gallery searches saltboxes too (none wins a card on usable storage)",
          "pr": 11933,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [],
          "detail": "Lane 2 asked (via the parent) for the saltbox and clerestory in the gallery.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 6,
          "lines_added": 21,
          "lines_removed": 14,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "wall-framing-takeoff",
      "merges": [
        {
          "sha": "94bacd58349eba8736e597a6b1f82ba2e27405f2",
          "at": 1793319050000,
          "title": "wall-framing-takeoff: landing guard shares corner posts between adjacent open edges",
          "pr": 11509,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: landing guard shares corner posts between adjacent open edges"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 61,
          "lines_removed": 6,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKmASwxufLzFNbV3Z6v.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9524d787b24519220c56a177d420c81721bb62b6",
          "at": 1793322077000,
          "title": "wall-framing-takeoff: deck framing (joists, beam, posts, footings, decking rows, hardware)",
          "pr": 11516,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 8,
          "lines_added": 326,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-deck-framing-in-the-wall-framing-takeoff.md",
            "ventures/wall-framing-takeoff/deck.mjs",
            "ventures/wall-framing-takeoff/deck.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b27fba5d125dcb206279904f5c0be87d89a38bb7",
          "at": 1793322657000,
          "title": "wall-framing-takeoff: deck framing page card",
          "pr": 11527,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: deck framing page card, plus post",
            "Fix post seo_title length; add run record",
            "Fill run record"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 110,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-deck-framing-on-the-wall-framing-page.md",
            "prompts/runs/2026-10-30-session_01AcxTtKZcqvTNcjQcqbqBD5.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fb7e82f7b6358bc56e02dccc7cc812b51d0b7d17",
          "at": 1793325517000,
          "title": "wall-framing-takeoff: post on the sliver last decking row (depth sweep from the deck takeoff)",
          "pr": 11574,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "wall-framing-takeoff: post on the sliver last decking row, depth sweep from the deck takeoff",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 2,
          "lines_added": 31,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-the-sliver-row-on-a-12-foot-deck.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d40e11006ef8316d1402b26d3cccc32564ff5ac2",
          "at": 1793326198000,
          "title": "wall-framing-takeoff: open-riser 4 in gap note on stairs",
          "pr": 11592,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: open-riser 4 in gap note on stairs; nosing note for solid risers only",
            "prompts: run record for open-riser gap slice"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 153,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-open-risers-and-the-4-inch-gap.md",
            "prompts/runs/2026-10-30-session_01AcxTtJcCqkzjTZAoRA65k2.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d5b9245328181e9b626fb5e4fd48d75cf27b0080",
          "at": 1793326248000,
          "title": "wall-framing-takeoff: stair stringer calculator page (SEO landing, runs the --stairs engine in the browser)",
          "pr": 11575,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 121,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-a-stair-stringer-calculator-that-checks-the-notch.md",
            "ventures/wall-framing-takeoff/stair-stringer-calculator.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f61ab2e0a1154b76bfb91abcc3c1de8659713907",
          "at": 1793326678000,
          "title": "wall-framing-takeoff: clear the 18 tsc diagnostics (typedefs only, no logic change)",
          "pr": 11600,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 6,
          "lines_removed": 5,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b0b62a13d0013c85028b500b26f104577706d786",
          "at": 1793326802000,
          "title": "wall-framing-takeoff: count posts under a stair landing",
          "pr": 11609,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: count posts under a stair landing (typed spacing, hand-computed tests)",
            "prompts: run record"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 72,
          "lines_removed": 3,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKkfacuVdPAZaSBhiWn.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "cf61b2022a14c856e7cb622fc18a7ae0c5a1db9e",
          "at": 1793329082000,
          "title": "wall-framing-takeoff: deck guard layout for decks over 30 in",
          "pr": 11637,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "process",
          "bullets": [
            "wall-framing-takeoff: deck guard layout (posts, balusters, 2x4 PT rails in the order) for decks over 30 in"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 111,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-a-deck-over-30-inches-needs-a-guard.md",
            "prompts/runs/2026-10-30-session_01EhTJVKuXSAXUAHsqLSPGTB.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f7e614a8011a65d6c5c5dc53098259d3e26a9386",
          "at": 1793329132000,
          "title": "wall-framing-takeoff: size stair landing footings from a typed soil bearing",
          "pr": 11638,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: size stair landing footings from a typed soil bearing"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 102,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-how-big-a-footing-under-a-stair-landing.md",
            "prompts/runs/2026-10-30-session_01EhTJVNKDmZvau3hXVjFsJW.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "249bd5080db08a2ce095ecd401f168fc39554eaf",
          "at": 1793330367000,
          "title": "wall-framing-takeoff: count stair handrail wall brackets from a typed spacing",
          "pr": 11652,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 20,
          "lines_removed": 4,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e0b57337ba1bb9297dc9e2007f18e3d70c99c254",
          "at": 1793332687000,
          "title": "wall-framing-takeoff: exterior window and door trim boards",
          "pr": 11669,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "wall-framing-takeoff: exterior window and door trim boards in the siding step"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 7,
          "lines_added": 96,
          "lines_removed": 8,
          "added_files": [
            "docs/posts/2026-10-30-counting-the-trim-around-every-window.md",
            "prompts/runs/2026-10-30-session_01EhTJVQ5RcJnukgGZQYwZhG.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "25f7bbaf6d4d2b6a9b1018a4fad7d8e1da2e3634",
          "at": 1793332731000,
          "title": "wall-framing-takeoff: winder tread layout with straight-edge depths (arc passes, chord can fail)",
          "pr": 11670,
          "agent": "Claude",
          "models": [],
          "track": "polish",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 78,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-30-winder-stairs-arc-vs-straight-edge.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "30acd645642d904c1d19f4db848a5031a55e3d59",
          "at": 1793333334000,
          "title": "wall-framing-takeoff: count stair stringer top connectors and foot anchors",
          "pr": 11673,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: count stair stringer top connectors and foot anchors",
            "shorten post description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 64,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-what-hardware-a-stair-needs.md",
            "prompts/runs/2026-10-30-session_01AcxTtGbcJvYYY73sZBJ6Xc.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c2e53b2bf147e65bf6b10c68d7c9d847527cc1b5",
          "at": 1793333570000,
          "title": "wall-framing-takeoff: name the stock board each stair stringer is cut from",
          "pr": 11676,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: name the stock board each stair stringer is cut from"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 141,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-which-board-a-stringer-comes-from.md",
            "prompts/runs/2026-10-30-session_01E5sJKn6dHeikXJhATLGv7T.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9ffa8d6124b73ad0e6f8d0791ba856870d4cd163",
          "at": 1793333980000,
          "title": "wall-framing-takeoff: note a stair guard bottom space over the 6 in sphere",
          "pr": 11677,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: note a stair guard bottom space over the 6 in sphere",
            "prompts: run record for stair guard slice"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 56,
          "lines_removed": 2,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKkW3e1cFLYo9BqPrZM.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b5d093225868ac7e04bd50d3ba91c632700b0bf4",
          "at": 1793336254000,
          "title": "wall-framing-takeoff: check landing post load against a typed capacity",
          "pr": 11683,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 28,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-checking-a-landing-post-against-your-own-table.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "2c5e3f194f56b9d58308224405bb61c800333ca1",
          "at": 1793336369000,
          "title": "wall-framing-takeoff: check stair landing posts for slenderness and load",
          "pr": 11684,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": null,
          "bullets": [
            "wall-framing-takeoff: check stair landing posts for slenderness",
            "flagships: note slenderness landed"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 43,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-how-tall-can-a-landing-post-be.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4999c206c9795dc1c64bbdb07aa84ac3b37deb74",
          "at": 1793336900000,
          "title": "wall-framing-takeoff: count radial supports under winder treads",
          "pr": 11686,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: count radial supports under winder treads"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 81,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-what-holds-up-a-winder-tread.md",
            "prompts/runs/2026-10-30-session_01AcxTtGg9f7mSgpWeF5Gv3R.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "862635bcbbad01f4458a6fd2852bd27db6094afb",
          "at": 1793336987000,
          "title": "wall-framing-takeoff: vertical siding",
          "pr": 11688,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: vertical siding (columns of full-height boards)",
            "post description length"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 7,
          "lines_added": 103,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-vertical-siding-a-window-cuts-four-columns.md",
            "prompts/runs/2026-10-30-session_01AcxTtLbKJzQPBYv9zC1gja.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1d1873e106008138c50f953f436e6f48d0080def",
          "at": 1793337600000,
          "title": "wall-framing-takeoff: battens for vertical siding",
          "pr": 11691,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: battens for vertical siding",
            "prompts: run record for batten slice"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 99,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-board-and-batten-takeoff.md",
            "prompts/runs/2026-10-30-session_01E5sJKmcrh9YVRhtoHAPAGm.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c46a59475b0ea70af8f67bb8fa41b353cbecad6b",
          "at": 1793339977000,
          "title": "wall-framing-takeoff: eave compression for attic loose fill",
          "pr": 11695,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 49,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-attic-insulation-thins-at-the-eave.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "2e90d8ae1432076164fafaf566c845e45139d375",
          "at": 1793350691000,
          "title": "wall-framing-takeoff: vertical siding, battens and opening trim on the page",
          "pr": 11725,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 36,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-siding-page-vertical-battens-trim.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "42d0f98d62cc6dedbaf920c99d014445a86e9d5a",
          "at": 1793350755000,
          "title": "wall-framing-takeoff: deck stairs take their rise from the deck height",
          "pr": 11726,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 35,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-deck-stairs-from-the-deck-height.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "35e8feae65ab3465bd5ea7e7795961f6aabf98cb",
          "at": 1793354483000,
          "title": "wall-framing-takeoff: deck guard switch and edges on the page",
          "pr": 11736,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "wall-framing-takeoff: deck guard switch and edges on the page"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 7,
          "lines_added": 66,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-a-deck-railing-on-the-page.md",
            "prompts/runs/2026-10-30-session_01EhTJVM45f4M5HvxN5KQAQ4.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7e9b58a47cbe93fefe8a82c6d4e23f1ff743709e",
          "at": 1793355118000,
          "title": "wall-framing-takeoff: deck stair select on the page",
          "pr": 11741,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: deck stair select on the page",
            "post: front matter",
            "post: tag spelling"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 76,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-deck-stair-on-the-page.md",
            "prompts/runs/2026-10-30-session_01AcxTtHyN3UQeusLq21QE9Y.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a23a6f1d1af78b64133b8040f895cf0449ed7fad",
          "at": 1793359076000,
          "title": "wall-framing-takeoff: attic heel field on the page (eave compression)",
          "pr": 11753,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: attic heel field on the page (eave compression)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 53,
          "lines_removed": 2,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKizWrEcwe7iCBnVNDn.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fb5cf8849f9ca7c4bedfd88694318d0c714e9016",
          "at": 1793363769000,
          "title": "wall-framing-takeoff: optional deck joist blocking rows, hand-computed test",
          "pr": 11766,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 32,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-blocking-between-deck-joists.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "dbbb2cf5ad902bd2a1b16b853616424d303a2dda",
          "at": 1793368749000,
          "title": "wall-framing-takeoff: joist hangers at floor openings",
          "pr": 11777,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: joist hangers at floor openings, budget lines, test and post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 7,
          "lines_added": 82,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-counting-joist-hangers-in-a-floor-takeoff.md",
            "prompts/runs/2026-10-30-session_01EhTJVLEq38uSjr2TjN1J9a.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "ai-bookkeeper",
      "merges": [
        {
          "sha": "486a8086c0d8686939536b5a0edb4b49ec31c484",
          "at": 1793340820000,
          "title": "ai-bookkeeper: property test for payout splits",
          "pr": 11699,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: property test for payout splits; post",
            "Shorten post description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 4,
          "lines_added": 115,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-payout-splits-random-reports.md",
            "prompts/runs/2026-10-30-session_01AcxTtLWT7qJULgEahCEeyS.json",
            "ventures/ai-bookkeeper/payouts-property.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "437964e39059cbc4c76edbb0201c98e289362b55",
          "at": 1793350682000,
          "title": "ai-bookkeeper: record online replay on a real makerspace bank export (96.0% right of all)",
          "pr": 11724,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 2,
          "lines_added": 42,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-bookkeeping-software-that-learns-your-payees.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "317c70ee75b5729615381f2059116e314374be31",
          "at": 1793359051000,
          "title": "ai-bookkeeper: property test for the cash forecast",
          "pr": 11752,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 2,
          "lines_added": 48,
          "lines_removed": 0,
          "added_files": [
            "ventures/ai-bookkeeper/recurring-property.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3866459b88a6c5cda963de439fbb3c1fbaa25f77",
          "at": 1793359325000,
          "title": "ai-bookkeeper: property test for payment reminders",
          "pr": 11755,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: property test for payment reminders",
            "ai-bookkeeper: date the reminders post today",
            "prompts: run record for reminders property test",
            "prompts: fix run record writeups shape"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 4,
          "lines_added": 110,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-testing-payment-reminders-on-random-books.md",
            "prompts/runs/2026-10-30-session_01E5sJKjWKEpmmtyHNWUKqzS.json",
            "ventures/ai-bookkeeper/collections-property.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b2cc311141e67df4d64e59e81836cab1ce912e96",
          "at": 1793361554000,
          "title": "ai-bookkeeper: check Schedule AI percentages and factors against excerpts",
          "pr": 11758,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 3,
          "lines_added": 5,
          "lines_removed": 3,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6a47eeb1372d4b1cadc53a8984f880af4f8b68c8",
          "at": 1793362357000,
          "title": "ai-bookkeeper: property test for the categorizer",
          "pr": 11760,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: property test for the categorizer"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 3,
          "lines_added": 94,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKm4Nq2ac67S7nEeqFw.json",
            "ventures/ai-bookkeeper/categorize-property.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "8faa7c2980ca50620d73407a0bd4283a5298b9e6",
          "at": 1793365056000,
          "title": "ai-bookkeeper: property test for fx convertCents (symmetry, monotone, half-cent bound)",
          "pr": 11769,
          "agent": "Claude",
          "models": [],
          "track": "explore",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 1,
          "lines_added": 23,
          "lines_removed": 0,
          "added_files": [
            "ventures/ai-bookkeeper/fx-convert-property.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "401e4f475597284b6759d345a4922dbe31ce1a84",
          "at": 1793367780000,
          "title": "ai-bookkeeper: movers and junk removal page, keyword block and test",
          "pr": 11776,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 9,
          "lines_added": 140,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-bookkeeping-for-movers-from-a-bank-statement.md",
            "ventures/ai-bookkeeper/fixtures/movers-checking.csv",
            "ventures/ai-bookkeeper/movers-bookkeeping.html",
            "ventures/ai-bookkeeper/movers.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "12683352f3d8aa89adab3f98ec3a70154f6a1c2f",
          "at": 1793375987000,
          "title": "ai-bookkeeper: pool service route page, keyword block and test",
          "pr": 11795,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "ai-bookkeeper: pool service route page, keyword block and test"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 10,
          "lines_added": 172,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-bookkeeping-for-pool-service-routes-from-a-bank-csv.md",
            "prompts/runs/2026-10-30-session_01EhTJVMhNkTE7y8fZvAuBJH.json",
            "ventures/ai-bookkeeper/fixtures/poolservice-checking.csv",
            "ventures/ai-bookkeeper/poolservice-bookkeeping.html",
            "ventures/ai-bookkeeper/poolservice.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d44af69a5fd25322b8a9b8496e3b88f1c382fbe3",
          "at": 1793378746000,
          "title": "ai-bookkeeper: yoga and Pilates studio page and rules; Gusto payroll debits file as wages",
          "pr": 11807,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 9,
          "lines_added": 138,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-yoga-studio-bookkeeping-from-a-bank-csv.md",
            "ventures/ai-bookkeeper/fixtures/yogastudio-checking.csv",
            "ventures/ai-bookkeeper/yogastudio-bookkeeping.html",
            "ventures/ai-bookkeeper/yogastudio.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "65fe3756c598233da453e3e86648c04fbcbf355f",
          "at": 1793379198000,
          "title": "ai-bookkeeper: QuickBooks and Intuit payroll debits file as wages, not software",
          "pr": 11808,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: QuickBooks and Intuit payroll debits file as wages, not software",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 5,
          "lines_added": 81,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-quickbooks-payroll-debits-were-filed-as-software.md",
            "prompts/runs/2026-10-30-session_01E5sJKkUvfo5bB8KBmZTBJu.json",
            "ventures/ai-bookkeeper/payroll-software.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "90bcec909fa2e8ab06e506c121c3b9e0ccea2141",
          "at": 1793379552000,
          "title": "ai-bookkeeper: pressure washing and window cleaning page and rules",
          "pr": 11809,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 9,
          "lines_added": 128,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-pressure-washing-bookkeeping-from-a-bank-csv.md",
            "ventures/ai-bookkeeper/fixtures/pressurewash-checking.csv",
            "ventures/ai-bookkeeper/pressurewash-bookkeeping.html",
            "ventures/ai-bookkeeper/pressurewash.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "239b00fa0ea3ae76f12777c1151594a8bc094d19",
          "at": 1793380861000,
          "title": "ai-bookkeeper: rent and non-US telecom keywords",
          "pr": 11817,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: rent and non-US telecom keywords, post, run record"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 4,
          "lines_added": 83,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-bookkeeper-keywords-outside-the-us.md",
            "prompts/runs/2026-10-30-session_01E5sJKnoShk5Yk2Zr4TsY7H.json",
            "ventures/ai-bookkeeper/keywords-international.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "74509eabdd0b5cc50eafe1819651094f1d11f91d",
          "at": 1793381153000,
          "title": "ai-bookkeeper: rules for ADP TotalSource, Square/Toast deposits, Amazon marketplace, SendGrid",
          "pr": 11818,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: rules for ADP TotalSource, Square/Toast deposits, Amazon marketplace, SendGrid"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 5,
          "lines_added": 83,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-bank-descriptions-probe-adp-square-toast.md",
            "prompts/runs/2026-10-30-session_01E5sJKm1QzEkHdGADeEtcDN.json",
            "ventures/ai-bookkeeper/processor-payroll-gaps.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fe4c47fde881b95ef5af143916ee3e8706a50f74",
          "at": 1793383081000,
          "title": "ai-bookkeeper: rules for HubSpot/Trello/Asana, PEOs, Deel, small-business lenders, eBay/Paddle payouts",
          "pr": 11819,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 4,
          "lines_added": 79,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01EhTJVPzkpWoSJU5WXcRLEc.json",
            "ventures/ai-bookkeeper/saas-peo-lender-gaps.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "90748b5a1cedec3ba6fe854267da4b4736518f8d",
          "at": 1793383173000,
          "title": "ai-bookkeeper: SaaS gap rule and a probe post",
          "pr": 11821,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "process",
          "bullets": [
            "ai-bookkeeper: SaaS gap rule (TaxJar, Bill.com, Expensify, Trello, HubSpot), probe post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 5,
          "lines_added": 73,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-probing-a-bookkeeper-with-95-bank-descriptions.md",
            "prompts/runs/2026-10-30-session_01EhTJVLYPium3RgkyG1s1ZA.json",
            "ventures/ai-bookkeeper/saas-gaps.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7cff78a9033ca9e507fdb202b62042cb1e6a57b5",
          "at": 1793387856000,
          "title": "ai-bookkeeper: tax-prep and VPN/storage rules from a 90-line gap probe",
          "pr": 11836,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: tax-prep and VPN/storage rules from a 90-line gap probe, plus a post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 5,
          "lines_added": 84,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-probing-a-categorizer-for-gaps.md",
            "prompts/runs/2026-10-30-session_01E5sJKimwoyhicT9EZob1uR.json",
            "ventures/ai-bookkeeper/tax-vpn-gaps.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d55c5468c3458276989db494d1c3b4b8d6bd8ccf",
          "at": 1793390350000,
          "title": "ai-bookkeeper: second gap probe (139 lines), 13 rule gaps closed, post",
          "pr": 11839,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 4,
          "lines_added": 59,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-second-gap-probe-trades-retail-health.md",
            "prompts/runs/2026-10-30-session_01EhTJVMEnap5VXro48YrZrV.json",
            "ventures/ai-bookkeeper/gaps-retail-trades.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b3ed5499882e981795c85fbde99dee6fbbffb6ab",
          "at": 1793394493000,
          "title": "ai-bookkeeper: fourth gap probe, 11 rules closed, post",
          "pr": 11880,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: fourth gap probe, 11 rules closed, post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 5,
          "lines_added": 81,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-ai-bookkeeper-fourth-gap-probe.md",
            "prompts/runs/2026-10-30-session_01AcxTtLNe579NNc7FPk6zym.json",
            "ventures/ai-bookkeeper/gaps4.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3de2ea1a30a0df83eebffa0d2732cc0ac94ffff1",
          "at": 1793395350000,
          "title": "ai-bookkeeper: fifth gap probe, rules for dental, landlord, gym and freelancer lines",
          "pr": 11900,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: fifth gap probe (67 descriptors), rules for dental, landlord, gym and freelancer lines, post",
            "Shorten post front matter"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 6,
          "lines_added": 202,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-ai-bookkeeper-fifth-gap-probe.md",
            "prompts/runs/2026-10-30-session_01E5sJKnRuARxM4vZ1xVhJdV.json",
            "ventures/ai-bookkeeper/eval/probe5.mjs",
            "ventures/ai-bookkeeper/probe5.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "404555eaf7f5a4bc9cb63a613efd326be4c552d1",
          "at": 1793401171000,
          "title": "ai-bookkeeper: sixth gap probe, rules for cafes, lawyers, agents, landscapers, vets, SaaS founders",
          "pr": 11931,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: sixth gap probe (79 descriptors), rules for cafes, lawyers, agents, landscapers, vets and SaaS founders, post",
            "Shorten post seo_title"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 6,
          "lines_added": 128,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-ai-bookkeeper-sixth-gap-probe.md",
            "prompts/runs/2026-10-30-session_01EhTJVLcToEEb9K87zfQnyY.json",
            "ventures/ai-bookkeeper/eval/probe6.mjs",
            "ventures/ai-bookkeeper/probe6.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "0311226f482f4ebbd224b734c6b92a11afa6ddb9",
          "at": 1793401860000,
          "title": "ai-bookkeeper: seventh gap probe, rules for salons, trades, podcasters, tutors, print-on-demand",
          "pr": 11938,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: seventh gap probe, rules for salons, trades, podcasters, tutors, print-on-demand; post",
            "Shorten post description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 7,
          "lines_added": 123,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-ai-bookkeeper-seventh-gap-probe.md",
            "docs/reports/2026-10-30-ai-bookkeeper-seventh-gap-probe.md",
            "prompts/runs/2026-10-30-session_01AcxTtL9Z22haEtLg2RfKkd.json",
            "ventures/ai-bookkeeper/eval/probe7.mjs",
            "ventures/ai-bookkeeper/probe7.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b2fc05502540c6eaf779544beec779cd7a4abb19",
          "at": 1793402012000,
          "title": "ai-bookkeeper: fifth gap probe, 13 keyword rules, post",
          "pr": 11940,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: fifth gap probe, 13 keyword rules, post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 5,
          "lines_added": 81,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-bookkeeper-fifth-gap-probe.md",
            "prompts/runs/2026-10-30-session_01E5sJKnipeQ6yvyj2BQGwxB.json",
            "ventures/ai-bookkeeper/gaps5.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e039d520ffcfe28d322c4d2797e4ff5e9b0efab8",
          "at": 1793402410000,
          "title": "ai-bookkeeper: eighth gap probe, keyword rules for truckers, farms, tattoo, trainers, DJs",
          "pr": 11941,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: eighth gap probe, keyword rules for truckers, farms, tattoo, trainers, DJs; post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 6,
          "lines_added": 111,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-ai-bookkeeper-eighth-gap-probe.md",
            "prompts/runs/2026-10-30-session_01E5sJKmkdGnNtV3AGrwr8Hp.json",
            "ventures/ai-bookkeeper/eval/probe8.mjs",
            "ventures/ai-bookkeeper/probe8.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "cf72671a19e70d2d9ba8f75fe353a140bb972947",
          "at": 1793404713000,
          "title": "ai-bookkeeper: ninth gap probe, rules for gig drivers, photographers, pet groomers, daycares, detailers; post",
          "pr": 11943,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 6,
          "lines_added": 117,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-ai-bookkeeper-ninth-gap-probe.md",
            "prompts/runs/2026-10-30-session_01EhTJVQ54HFeZEAKquJ4DMA.json",
            "ventures/ai-bookkeeper/eval/probe9.mjs",
            "ventures/ai-bookkeeper/probe9.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "hearth-and-horizon",
      "merges": [
        {
          "sha": "78c5ec3b15b0c27dd354c7ee6286ca404200a10f",
          "at": 1793319096000,
          "title": "hearth-and-horizon: Two Wrong Numbers (tidal causeway story, text only)",
          "pr": 11510,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: Two Wrong Numbers (tidal causeway story, text only)",
            "prompts: run record for creative 2026-10-30"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 462,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-two-wrong-numbers-a-tide-story.md",
            "prompts/runs/2026-10-30-session_01AcxTtLZvDkK8LWgsExMJYL.json",
            "ventures/hearth-and-horizon/stories/two-wrong-numbers.md",
            "ventures/hearth-and-horizon/two-wrong-numbers.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6ee96ef8d04e3dffcbae87797a51882bb1ceea55",
          "at": 1793322630000,
          "title": "hearth-and-horizon: The Bell Will Not Carry (flood-alarm acoustics story, text only)",
          "pr": 11526,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Bell Will Not Carry (flood-alarm acoustics story, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 11,
          "lines_added": 417,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-the-bell-will-not-carry-an-alarm-story.md",
            "prompts/runs/2026-10-30-session_01AcxTtLrT91UcUwEgXdZpN1.json",
            "ventures/hearth-and-horizon/stories/the-bell-will-not-carry.md",
            "ventures/hearth-and-horizon/the-bell-will-not-carry.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "284c22ef4c37f02f362b4121ec68364a313d9e47",
          "at": 1793323233000,
          "title": "hearth-and-horizon: The River Is Eight Degrees (cold-water baptism story, text only)",
          "pr": 11537,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The River Is Eight Degrees (cold-water river baptism story, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 11,
          "lines_added": 411,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-the-river-is-eight-degrees-a-cold-water-story.md",
            "prompts/runs/2026-10-30-session_01E5sJKjP4v1XFkfadS14ooR.json",
            "ventures/hearth-and-horizon/stories/the-river-is-eight-degrees.md",
            "ventures/hearth-and-horizon/the-river-is-eight-degrees.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "126f38190f43d9736fca7882e006b29324020a58",
          "at": 1793323290000,
          "title": "hearth-and-horizon: The Noon That Moves (solar noon vs permanent summer time, text only)",
          "pr": 11539,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Noon That Moves (solar noon vs permanent summer time story, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 335,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKo94ft7zeRXjdNr2HC.json",
            "ventures/hearth-and-horizon/stories/the-noon-that-moves.md",
            "ventures/hearth-and-horizon/the-noon-that-moves.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6a400bc9e56b9324b0a6e3153eec172dabd31a8a",
          "at": 1793326166000,
          "title": "hearth-and-horizon: The Kings Cross the Lake (frozen-lake Epiphany procession, text only)",
          "pr": 11588,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Kings Cross the Lake (frozen-lake Epiphany procession ice load, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 362,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtLdggsvpspKs9wLv69.json",
            "ventures/hearth-and-horizon/stories/the-kings-cross-the-lake.md",
            "ventures/hearth-and-horizon/the-kings-cross-the-lake.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "05be35919be680e53162c0f689878a166771c535",
          "at": 1793326450000,
          "title": "hearth-and-horizon: The Fifty-One Percent (Paschal candle wax density story, text only)",
          "pr": 11596,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Fifty-One Percent (Paschal candle wax density story, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 322,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKo94ft7zeRXjdNr2HC-2.json",
            "ventures/hearth-and-horizon/stories/the-fifty-one-percent.md",
            "ventures/hearth-and-horizon/the-fifty-one-percent.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f596bdab5bf780187e752a0137b7c6f9e20e6946",
          "at": 1793329841000,
          "title": "hearth-and-horizon: Three Cents a Degree (organ pitch vs temperature, text only)",
          "pr": 11645,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: Three Cents a Degree (organ pitch vs temperature, All Souls, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 349,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtHwKkyLKH5XavQgxs3.json",
            "ventures/hearth-and-horizon/stories/three-cents-a-degree.md",
            "ventures/hearth-and-horizon/three-cents-a-degree.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "94dfcf4b91bba5a4eb5e890cc6c91ec73a0c0626",
          "at": 1793332735000,
          "title": "hearth-and-horizon: The Sheet and the Gap (4 cm hail on old glass, text only)",
          "pr": 11671,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Sheet and the Gap (4 cm hail on old glass, text only) + blog post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 11,
          "lines_added": 283,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-hail-on-old-glass-twelve-joules.md",
            "prompts/runs/2026-10-30-session_01EhTJVLJfUmHeae3MD7sveC.json",
            "ventures/hearth-and-horizon/stories/the-sheet-and-the-gap.md",
            "ventures/hearth-and-horizon/the-sheet-and-the-gap.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "bdccd83bd2e4ca76604435a8c3eeee9b4d757471",
          "at": 1793334094000,
          "title": "hearth-and-horizon: The North Slope (snow load, text only)",
          "pr": 11679,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The North Slope (snow load, depth x density, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 485,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-a-metre-of-snow-is-not-a-load.md",
            "prompts/runs/2026-10-30-session_01E5sJKj5MpD28rU836YyCWM.json",
            "ventures/hearth-and-horizon/stories/the-north-slope.md",
            "ventures/hearth-and-horizon/the-north-slope.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "255e3e905d7b960b8c08781588f76d63a653f791",
          "at": 1793337656000,
          "title": "hearth-and-horizon: The Smoke That Stays (incense mass balance, text only)",
          "pr": 11692,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Smoke That Stays (incense mass balance, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 298,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-incense-smoke-mass-balance.md",
            "prompts/runs/2026-10-30-session_01E5sJKicNbQYb242CFty59Q.json",
            "ventures/hearth-and-horizon/stories/the-smoke-that-stays.md",
            "ventures/hearth-and-horizon/the-smoke-that-stays.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1b0679dc5a2dbf5471e6bdf54cdff9c902d4e1af",
          "at": 1793340980000,
          "title": "hearth-and-horizon: The Lid That Held (botulism spores vs boiling water at altitude, text only)",
          "pr": 11701,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Lid That Held (boiling-water bath vs botulism spores at 1,820 m, text only)",
            "creative run record"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 275,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-why-a-sealed-lid-is-not-a-safe-jar.md",
            "prompts/runs/2026-10-30-session_01AcxTtHNurhXvmTGQoJ8iqC.json",
            "ventures/hearth-and-horizon/stories/the-lid-that-held.md",
            "ventures/hearth-and-horizon/the-lid-that-held.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "8ddf7699cd0776d10e85220bccc0a2a7771942ce",
          "at": 1793341619000,
          "title": "hearth-and-horizon: The Water That Boils Down (nitrate in boiled well water, text only)",
          "pr": 11704,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Water That Boils Down (nitrate in boiled well water, text only)",
            "creative run record"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 278,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-why-boiling-well-water-raises-nitrate.md",
            "prompts/runs/2026-10-30-session_01E5sJKmyKFTzuX3Nyqdu4cy.json",
            "ventures/hearth-and-horizon/stories/the-water-that-boils-down.md",
            "ventures/hearth-and-horizon/the-water-that-boils-down.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "927d0f6a215c666141dff2b533ac472d6edc0346",
          "at": 1793359366000,
          "title": "hearth-and-horizon: Giles and the Doe (Little Lamps, text only)",
          "pr": 11756,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: Giles and the Doe (Little Lamps, text only)"
          ],
          "detail": "Audio shelf is over the 400 MB cap, so text and pages only.",
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 8,
          "lines_added": 314,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKkavqXFvmi4kEHaqAg.json",
            "ventures/hearth-and-horizon/giles-and-the-doe.html",
            "ventures/hearth-and-horizon/stories/giles-and-the-doe.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "62137f83cb77a68e9c0da19c257513f2e51374ae",
          "at": 1793363565000,
          "title": "hearth-and-horizon: The Gauge Reads Fifteen (pressure canning at altitude, text only)",
          "pr": 11765,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Gauge Reads Fifteen (pressure canning at altitude, text only)",
            "prompts: run record for creative/0"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 301,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKmE1GprP1dfvdd2BaU.json",
            "ventures/hearth-and-horizon/stories/the-gauge-reads-fifteen.md",
            "ventures/hearth-and-horizon/the-gauge-reads-fifteen.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "00ee567b37f42236c0ffd7e474d2124cd3427cfa",
          "at": 1793365980000,
          "title": "hearth-and-horizon: The Water in the Honey (text only)",
          "pr": 11771,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Water in the Honey (honey moisture and drying, text only)",
            "prompts: run record for creative/0"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 385,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtLPPDC6nZspucNq3rd.json",
            "ventures/hearth-and-horizon/stories/the-water-in-the-honey.md",
            "ventures/hearth-and-horizon/the-water-in-the-honey.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "32fb73ae5087ebe77353cdd6550ed6c1582aa282",
          "at": 1793365983000,
          "title": "hearth-and-horizon: Sixty-Two in a Hundred (seed library germination label, text only)",
          "pr": 11772,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: Sixty-Two in a Hundred (seed library germination label, text only)"
          ],
          "detail": "Audio skipped: shelf audio total is 423 MB, over the 400 MB cap.",
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 8,
          "lines_added": 308,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtJoBtCHQ3NGvx27vNQ.json",
            "ventures/hearth-and-horizon/sixty-two-in-a-hundred.html",
            "ventures/hearth-and-horizon/stories/sixty-two-in-a-hundred.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "edd469fee4d48f3470513e15ef18097f4cb4957a",
          "at": 1793366731000,
          "title": "hearth-and-horizon: The Coin on the Ice (freezer power-cut cooling curve, text only)",
          "pr": 11773,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Coin on the Ice (freezer power-cut cooling curve, text only)",
            "prompts: run record for creative/0"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 306,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKk3WDFGevsEH3gJh7f.json",
            "ventures/hearth-and-horizon/stories/the-coin-on-the-ice.md",
            "ventures/hearth-and-horizon/the-coin-on-the-ice.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "75ea95d45c3178204d92cffdd465ec189eac49c0",
          "at": 1793373107000,
          "title": "hearth-and-horizon: The Cold Corner of the Dormitory (text only)",
          "pr": 11789,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Cold Corner of the Dormitory (bed-bug heat treatment, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 289,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-the-cold-corner-of-the-dormitory.md",
            "prompts/runs/2026-10-30-session_01E5sJKnYcEFPTRwymmRdrBj.json",
            "ventures/hearth-and-horizon/stories/the-cold-corner-of-the-dormitory.md",
            "ventures/hearth-and-horizon/the-cold-corner-of-the-dormitory.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "631943d37fa5dc08e85e7b54cbe75e3977cca62a",
          "at": 1793373382000,
          "title": "hearth-and-horizon: The Rope and the Count (lightning flash-to-bang, text only)",
          "pr": 11791,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Rope and the Count (lightning flash-to-bang, text only)",
            "prompts: run record for creative run"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 262,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtJFoWEcuQRCHKBPQM8.json",
            "ventures/hearth-and-horizon/stories/the-rope-and-the-count.md",
            "ventures/hearth-and-horizon/the-rope-and-the-count.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5044c6d3331e2c1b5746a252eb1b20481e5b9f80",
          "at": 1793375710000,
          "title": "hearth-and-horizon: The Clean Plate (low-gluten hosts, sampling vs a crumb, text only)",
          "pr": 11794,
          "agent": "Claude",
          "models": [],
          "track": "creative",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 280,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01EhTJVP2LYJGk5RmcoFeD9q.json",
            "ventures/hearth-and-horizon/stories/the-clean-plate.md",
            "ventures/hearth-and-horizon/the-clean-plate.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ab995cd5ce8e5c9285fb44bde3ed2e9c0a09805e",
          "at": 1793380187000,
          "title": "hearth-and-horizon: The Roof Nobody Washed (text only)",
          "pr": 11812,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Roof Nobody Washed (asbestos-cement roof, jet-wash stopped, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 289,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtHUk6DVodtGqY3Co88.json",
            "ventures/hearth-and-horizon/stories/the-roof-nobody-washed.md",
            "ventures/hearth-and-horizon/the-roof-nobody-washed.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a27b078154663ea518da9cbcac1ec91493f373ed",
          "at": 1793390917000,
          "title": "hearth-and-horizon: The Shadow Rule (UV under thin cloud, text only)",
          "pr": 11841,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Shadow Rule (UV under thin cloud, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 306,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-the-shadow-rule-a-sports-day-story.md",
            "prompts/runs/2026-10-30-session_01AcxTtKBfEd5MgzyDDTk6SU.json",
            "ventures/hearth-and-horizon/stories/the-shadow-rule.md",
            "ventures/hearth-and-horizon/the-shadow-rule.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "026f4cb3c7a5519ef8bb45f0accde6a4357590f2",
          "at": 1793395240000,
          "title": "hearth-and-horizon: The Fifth Day (cemetery vases, text only)",
          "pr": 11894,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Fifth Day (cemetery vases, mosquito life cycle, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 321,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-the-fifth-day-a-cemetery-vase-story.md",
            "prompts/runs/2026-10-30-session_01E5sJKj7mugMeuCN8AB9hiR.json",
            "ventures/hearth-and-horizon/stories/the-fifth-day.md",
            "ventures/hearth-and-horizon/the-fifth-day.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "60e198130d1988ad1914058185b34220924f64f3",
          "at": 1793401721000,
          "title": "little-lamps: Brendan and the Island That Was a Whale (text only)",
          "pr": 11935,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "little-lamps: Brendan and the Island That Was a Whale (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 302,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-brendan-and-the-island-that-was-a-whale.md",
            "prompts/runs/2026-10-30-session_01AcxTtGY7TsEYFVfscuEUy4.json",
            "ventures/hearth-and-horizon/brendan-and-the-island-that-was-a-whale.html",
            "ventures/hearth-and-horizon/stories/brendan-and-the-island-that-was-a-whale.md"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "shift-roster-builder",
      "merges": [
        {
          "sha": "389dbb3e7fd20694aed0ae0ac314d72b87553867",
          "at": 1793319321000,
          "title": "shift-roster-builder: price split-shift and spread-of-hours premiums from a local minimum wage",
          "pr": 11511,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 5,
          "lines_added": 71,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-29-split-shift-premium-in-the-roster-notice.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "15df93a3f2a6b2a53f50d96fd1064fd4c702a052",
          "at": 1793319718000,
          "title": "shift-roster-builder: paid rest breaks from the operator's own spacing",
          "pr": 11508,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shift-roster-builder: suggest paid rest breaks from the operator's own spacing and length",
            "Fix merge: restore closing brace in rest-break test"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 6,
          "lines_added": 102,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-paid-rest-breaks-in-the-shift-roster-builder.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "8e5cdbfa056c8ddce6e95f4d2e100dd2450817ab",
          "at": 1793322064000,
          "title": "shift-roster-builder: name Sling and Humanity on the free-alternative page, plus post",
          "pr": 11515,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 2,
          "lines_added": 21,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-scheduling-app-names-people-search-for.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "aa51637bc510128b8fb8212b5217c6da55a88f90",
          "at": 1793324682000,
          "title": "shift-roster-builder: call-out page says 24 of 29, what the engine returns now",
          "pr": 11541,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "page.test.mjs #171 has been red on main since 2026-10-29: the engine changes after the call-out guide (#11508, #11511) mean a rebuild now covers 24 of the 29 call-outs on the sample cafe, not 22.",
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 1,
          "lines_added": 1,
          "lines_removed": 1,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c2ff2b92e3bfe5245a8c995edd6b08b6c1d83a63",
          "at": 1793340796000,
          "title": "shift-roster-builder: import a staff export from another scheduler (page + --import-staff)",
          "pr": 11698,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 7,
          "lines_added": 127,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-switching-from-a-paid-scheduler-in-one-file.md",
            "ventures/shift-roster-builder/import-staff.mjs",
            "ventures/shift-roster-builder/import-staff.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "cdb5289f2ca80c39d71f6d3bac261fc2bd0740e4",
          "at": 1793344062000,
          "title": "shift-roster-builder: import a published-schedule export as shift lines",
          "pr": 11706,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "process",
          "bullets": [
            "shift-roster-builder: import a published-schedule export as shift lines (page + --import-shifts)",
            "shift-roster-builder: page test lists the shifts import module"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 8,
          "lines_added": 152,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-switching-schedulers-import-your-shifts.md",
            "ventures/shift-roster-builder/import-shifts.mjs",
            "ventures/shift-roster-builder/import-shifts.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "921373901b1ea50ce27be6573623d9a088296cd8",
          "at": 1793355076000,
          "title": "shift-roster-builder: salon staff schedule page from real CLI output, with a pinned test and a post",
          "pr": 11738,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 6,
          "lines_added": 83,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-a-salon-week-with-three-chairs-nobody-can-fill.md",
            "ventures/shift-roster-builder/salon-staff-schedule.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f9551d1ebb04f3050c48042fcc202b4665e61d80",
          "at": 1793358502000,
          "title": "shift-roster-builder: 14-day notice page (late-change premium by days out)",
          "pr": 11749,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shift-roster-builder: 14-day notice page (late-change premium by days out), blog post",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 8,
          "lines_added": 134,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-the-14-day-window-moves-across-your-week.md",
            "prompts/runs/2026-10-30-session_01EhTJVKsZ7cNMNadcpC361B.json",
            "ventures/shift-roster-builder/predictive-scheduling-14-day-notice.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a7228a9fc061bb5150d0e3c16dbb28f7a524c6aa",
          "at": 1793362892000,
          "title": "shift-roster-builder: daily hour cap and days-in-a-row limits page, measured on the sample cafe",
          "pr": 11762,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 6,
          "lines_added": 109,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-what-a-daily-hour-cap-costs-a-schedule.md",
            "ventures/shift-roster-builder/days-in-a-row-and-daily-hour-limits.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "2f90b0106a284fb77ccf631406ebc51181c10d17",
          "at": 1793384468000,
          "title": "shift-roster-builder: flag 7+ day runs across week boundaries in --weeks",
          "pr": 11826,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shift-roster-builder: flag 7+ day runs across week boundaries in --weeks",
            "post: front matter"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 7,
          "lines_added": 111,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-seven-days-in-a-row-across-the-week-line.md",
            "prompts/runs/2026-10-30-session_01E5sJKjycoS2fn3nRVCe89j.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1eebbc44c4296d8454d8727c7ca50091857aa8a8",
          "at": 1793387276000,
          "title": "shift-roster-builder: daycare staff schedule page from real CLI output, pinned test and a post",
          "pr": 11831,
          "agent": "Claude",
          "models": [],
          "track": "venture",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 7,
          "lines_added": 94,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-a-daycare-week-where-a-split-shift-adds-six-covered-slots.md",
            "ventures/shift-roster-builder/daycare-staff-schedule.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7720ac707673ccb77195898aec83a14274b2735f",
          "at": 1793389614000,
          "title": "shift-roster-builder: streak cell carries the days-in-a-row limit across Monday",
          "pr": 11830,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "shift-roster-builder: streak cell carries the days-in-a-row limit across Monday",
            "flagships: shift-roster-builder next under the 2000 cap",
            "shift-roster-builder: rotation page numbers re-measured with the streak limit in the search"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 8,
          "lines_added": 147,
          "lines_removed": 21,
          "added_files": [
            "docs/posts/2026-10-30-the-days-in-a-row-limit-now-crosses-monday.md",
            "prompts/runs/2026-10-30-session_01EhTJVLnVHf5ayX1btL12Kf.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4427c779cbef12b53c98d8b93aee931cbd1d8bbe",
          "at": 1793395140000,
          "title": "fix main: marine-path README live-page link; 14-day notice page FAQ answers match their JSON-LD",
          "pr": 11892,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "research_live_links.py and faq-visible.test.mjs were red on main.",
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 2,
          "lines_added": 5,
          "lines_removed": 3,
          "added_files": [],
          "revert": false,
          "fix_forward": true
        },
        {
          "sha": "645c780869a9beb122b14e290dc9ab940c5dcde8",
          "at": 1793396399000,
          "title": "shift-roster-builder: split page.test.mjs so the engine-heavy page tests run in parallel",
          "pr": 11889,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 8,
          "lines_added": 316,
          "lines_removed": 247,
          "added_files": [
            "ventures/shift-roster-builder/eval/callout-cover-study.mjs",
            "ventures/shift-roster-builder/page-callout-spare.test.mjs",
            "ventures/shift-roster-builder/page-callout.test.mjs",
            "ventures/shift-roster-builder/page-limits.test.mjs",
            "ventures/shift-roster-builder/page-posted.test.mjs",
            "ventures/shift-roster-builder/page-timeoff.test.mjs",
            "ventures/shift-roster-builder/page-widening.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "aa325b35e023cdf35bd540a33d5cca154ef058f2",
          "at": 1793397633000,
          "title": "shift-roster-builder: coffee shop staff schedule page from real CLI output, pinned test",
          "pr": 11916,
          "agent": "Claude",
          "models": [],
          "track": "venture",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 6,
          "lines_added": 79,
          "lines_removed": 3,
          "added_files": [
            "ventures/shift-roster-builder/coffee-shop-staff-schedule.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "0bbd99b3a8a203e7b38e6de396b700810c499bd7",
          "at": 1793401604000,
          "title": "shift-roster-builder: seniority cell and seniorityClaims report; blog post",
          "pr": 11934,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-roster-builder"
          },
          "files": 6,
          "lines_added": 75,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-who-should-have-had-that-shift-seniority-report.md"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "changepoint-detector",
      "merges": [
        {
          "sha": "0e05ae9428cf9ba2e57b3565c4cdee52afdf039e",
          "at": 1793337843000,
          "title": "changepoint-detector: US accidental deaths is not a null (step at 1973-12)",
          "pr": 11693,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: US accidental deaths is not a null (step at 1973-12), test, eval, post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 8,
          "lines_added": 200,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-the-null-series-that-was-not-quiet.md",
            "prompts/runs/2026-10-30-session_01E5sJKkknud9CZbHQqoZN8g.json",
            "ventures/changepoint-detector/eval/us-accidental-deaths.mjs",
            "ventures/changepoint-detector/eval/us-accidental-deaths.out.txt",
            "ventures/changepoint-detector/us-accidental-deaths.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4758b4e930660dc3558637d8fb7c5c977e73311f",
          "at": 1793338237000,
          "title": "Pages: ship the Cloudflare site as one tarball; drop a stray changepoint-detector file",
          "pr": 11694,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [],
          "detail": "Verified locally: tar round trip 19,544/19,544 files incl.",
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 2,
          "lines_added": 15,
          "lines_removed": 3,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "67717252d40d5fe0fcaea42794d92f265eb433b6",
          "at": 1793340003000,
          "title": "changepoint-detector: two quiet real series (lh, treering) with false-alarm counts",
          "pr": 11696,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: two quiet real series (lh, treering) with false-alarm counts"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 8,
          "lines_added": 8145,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-quiet-series-false-alarms.md",
            "prompts/runs/2026-10-30-session_01EhTJVQ4rsKGGBaGMQoGJVk.json",
            "ventures/changepoint-detector/data/lh.csv",
            "ventures/changepoint-detector/data/treering.csv",
            "ventures/changepoint-detector/quiet-series.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f09a3172f67043dda9c64eed7237ce55dd57a3cd",
          "at": 1793344614000,
          "title": "changepoint-detector: two cyclic real series (lynx, sunspots) as false-alarm tests",
          "pr": 11709,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: two cyclic real series (lynx, sunspots) as false-alarm tests",
            "post front matter"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 10,
          "lines_added": 544,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-changepoint-detectors-read-cycles-as-steps.md",
            "prompts/runs/2026-10-30-session_01E5sJKmYv4i4txzke1YGxci.json",
            "ventures/changepoint-detector/cyclic-series.test.mjs",
            "ventures/changepoint-detector/data/lynx.csv",
            "ventures/changepoint-detector/data/sunspot-year.csv",
            "ventures/changepoint-detector/eval/cyclic-series.mjs",
            "ventures/changepoint-detector/eval/cyclic-series.out.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1ee8dc54dc9336934d06ef59bebcf30193fdc5d1",
          "at": 1793347087000,
          "title": "changepoint-detector: power on a step inside a cycle (--ar1 finds 0 of 18)",
          "pr": 11714,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: measure power on a step inside a cycle (--ar1 finds 0 of 18)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 7,
          "lines_added": 160,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-zero-false-alarms-can-mean-zero-power.md",
            "prompts/runs/2026-10-30-session_01EhTJVMJa3m24VWAMvR2AHm.json",
            "ventures/changepoint-detector/cyclic-power.test.mjs",
            "ventures/changepoint-detector/eval/cyclic-power.mjs",
            "ventures/changepoint-detector/eval/cyclic-power.out.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1f56271243eadb86a8d10285078b1666bbe18e5d",
          "at": 1793351389000,
          "title": "changepoint-detector: --ar1 joint keeps a step inside a cycle",
          "pr": 11729,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: --ar1 joint keeps a step inside a cycle (lynx, sunspots)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 9,
          "lines_added": 154,
          "lines_removed": 8,
          "added_files": [
            "docs/posts/2026-10-30-ar1-joint-keeps-a-step-in-a-cycle.md",
            "prompts/runs/2026-10-30-session_01AcxTtLhyuVR5VdUXEqhgaW.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "704ba6c31388f41529c49adeeb61b075ae1ca2ac",
          "at": 1793352444000,
          "title": "changepoint-detector: warn that many steps may be false alarms on autocorrelated series",
          "pr": 11734,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: warn that many steps may be false alarms on autocorrelated series"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 6,
          "lines_added": 75,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-changepoint-cycle-warning.md",
            "prompts/runs/2026-10-30-session_01E5sJKkF4kE52yz7Ggoc6uo.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "51151de66318878778d06882907b2d783b757c6b",
          "at": 1793354924000,
          "title": "changepoint-detector: residual autocorrelation is not a rho-free cycle test",
          "pr": 11739,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: residual autocorrelation is not a rho-free cycle test (measured, negative)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 6,
          "lines_added": 128,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-residual-autocorrelation-not-a-cycle-test.md",
            "prompts/runs/2026-10-30-session_01AcxTtKeKNKa47UFkrziKGj.json",
            "ventures/changepoint-detector/eval/residual-rho.mjs",
            "ventures/changepoint-detector/eval/residual-rho.out.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "95a18b6da799892e4f24e7fed44d7f372be7fa93",
          "at": 1793355340000,
          "title": "changepoint-detector: block-variance warning for slow drift when lag-1 rho is small",
          "pr": 11737,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 5,
          "lines_added": 56,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-slow-drift-looks-like-changepoints.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9534c03c30e9c604d33519c3a3a3da1f8c8705fa",
          "at": 1793355656000,
          "title": "changepoint-detector: Fisher's g spectral peak test on step residuals",
          "pr": 11745,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: Fisher's g spectral peak test on step residuals, measured and tested"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 7,
          "lines_added": 193,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-a-cycle-test-that-steps-cannot-fool.md",
            "prompts/runs/2026-10-30-session_01E5sJKjf1ceCeBDYivsrcqr.json",
            "ventures/changepoint-detector/eval/spectral-null.mjs",
            "ventures/changepoint-detector/eval/spectral-peak.mjs",
            "ventures/changepoint-detector/spectral-peak.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c2136a3a8061652da756e80bef6bff19caa44aae",
          "at": 1793362909000,
          "title": "changepoint-detector: wire the spectral peak test into the output as cycleWarning",
          "pr": 11763,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 6,
          "lines_added": 64,
          "lines_removed": 35,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "121902f461ac4937894be2e80c32ca49257c1b5e",
          "at": 1793363942000,
          "title": "changepoint-detector: block-variance warning fires on real staircases; residual ratio does not separate drift",
          "pr": 11767,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: block-variance warning fires on 95-100% of real staircases; residual ratio does not separate drift",
            "post: shorten description",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 9,
          "lines_added": 227,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-a-drift-warning-that-fires-on-real-steps.md",
            "prompts/runs/2026-10-30-session_01E5sJKnX1zMHgyi5MCfHJVg.json",
            "ventures/changepoint-detector/eval/staircase-residual.mjs",
            "ventures/changepoint-detector/eval/staircase-residual.out.txt",
            "ventures/changepoint-detector/eval/staircase-warning.mjs",
            "ventures/changepoint-detector/eval/staircase-warning.out.txt",
            "ventures/changepoint-detector/staircase-warning.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c7ad68e7c2f1e2f62ceb7639595eee2936010f24",
          "at": 1793369515000,
          "title": "changepoint-detector: AR(2) prewhitening tested on lynx and sunspots, fails (negative result)",
          "pr": 11780,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 6,
          "lines_added": 136,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-prewhitening-does-not-fix-a-cycle.md",
            "prompts/runs/2026-10-30-session_01AcxTtGVWwUbMCKm52q1buK.json",
            "ventures/changepoint-detector/eval/ar2-prewhiten.mjs",
            "ventures/changepoint-detector/eval/ar2-prewhiten.out.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "24adb0f5ee70e2dcbe42472a3827fe302e03e83f",
          "at": 1793398752000,
          "title": "changepoint-detector: page card shows range, drift and cycle warnings",
          "pr": 11923,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 3,
          "lines_added": 9,
          "lines_removed": 1,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "88a89506d036f024edde16b60e7bf7b37e07d27b",
          "at": 1793402153000,
          "title": "changepoint-detector: exact AR(2) likelihood in PELT, measured (no better than AR(1))",
          "pr": 11937,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: exact AR(2) likelihood in PELT, measured (no better than AR(1))"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 8,
          "lines_added": 227,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-two-lags-did-not-beat-one-on-a-cycle.md",
            "prompts/runs/2026-10-30-session_01AcxTtKMBEcSMZfZpjVMbHE.json",
            "ventures/changepoint-detector/ar2-profile.test.mjs",
            "ventures/changepoint-detector/eval/ar2-profile.mjs",
            "ventures/changepoint-detector/eval/ar2-profile.out.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "einvoice-preflight",
      "merges": [
        {
          "sha": "6ce2472f8fa01a10d8263e09684474804869f439",
          "at": 1793357934000,
          "title": "einvoice-preflight: UK page updated for the 28 Oct 2026 e-invoicing roadmap",
          "pr": 11748,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "process",
          "bullets": [
            "einvoice-preflight: UK page updated for the 28 Oct 2026 roadmap (excerpt only), post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 4,
          "lines_added": 64,
          "lines_removed": 8,
          "added_files": [
            "docs/posts/2026-10-30-uk-e-invoicing-roadmap-published.md",
            "prompts/runs/2026-10-30-session_01EhTJVKS3h4tTTWm1YHhcTG.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "bbc78f472e97682cb1303b7aa432cb66dd7e4146",
          "at": 1793358618000,
          "title": "einvoice-preflight: UK page read against the gov.uk roadmap",
          "pr": 11750,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "einvoice-preflight: UK page read against the gov.uk roadmap, post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 4,
          "lines_added": 65,
          "lines_removed": 8,
          "added_files": [
            "docs/posts/2026-10-30-uk-einvoicing-roadmap-no-penalty-amount.md",
            "prompts/runs/2026-10-30-session_01AcxTtJvTS6xTKhdT6YD7rp.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "647a78f3bac0f75c07351c6f5199430830e140f4",
          "at": 1793368941000,
          "title": "einvoice-preflight: example PDFs get a page; repaired PDF checked with poppler",
          "pr": 11778,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "einvoice-preflight: example PDFs get a page; repaired PDF checked with poppler"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 9,
          "lines_added": 98,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-our-example-invoice-pdfs-had-no-pages.md",
            "prompts/runs/2026-10-30-session_01EhTJVLV91TzTuDW4GM4vrY.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ed567524b8f7ceb526d81603dc36372db60d822a",
          "at": 1793371704000,
          "title": "einvoice-preflight: India INV-01 payload pre-check",
          "pr": 11785,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": null,
          "bullets": [
            "einvoice-preflight: India INV-01 payload pre-check (checkInv01)",
            "flagships: trim einvoice-preflight next under the 2000-character cap"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 5,
          "lines_added": 161,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-india-einvoice-payload-precheck.md",
            "ventures/einvoice-preflight/india-inv01.mjs",
            "ventures/einvoice-preflight/india-inv01.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "69bbf44a713d77d06809ee30f1fe0d5865ff0ae1",
          "at": 1793372531000,
          "title": "einvoice-preflight: Kenya eTIMS page with KRA PIN shape check",
          "pr": 11786,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": null,
          "bullets": [
            "einvoice-preflight: Kenya eTIMS page with KRA PIN shape check",
            "einvoice-preflight: link Kenya and South Korea from the Hungary page (fixes red country-link test)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 12,
          "lines_added": 239,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-kenya-etims-no-invoice-no-deduction.md",
            "prompts/runs/2026-10-30-session_01EhTJVLAQsmyXWZPd9FMsFr.json",
            "ventures/einvoice-preflight/kenya-etims-e-invoice-mandate.html",
            "ventures/einvoice-preflight/kenya-etims-e-invoice-mandate.test.mjs",
            "ventures/einvoice-preflight/kenya.mjs",
            "ventures/einvoice-preflight/kenya.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "226c9735d0b45cf2d23daf53c7ed2b93ee54e29b",
          "at": 1793372748000,
          "title": "einvoice-preflight: Turkey page tests VKN and TCKN check digits",
          "pr": 11788,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "process",
          "bullets": [
            "einvoice-preflight: Turkey page tests VKN and TCKN check digits"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 7,
          "lines_added": 146,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-turkish-tax-numbers-have-two-check-digit-rules.md",
            "prompts/runs/2026-10-30-session_01EhTJVLuKKErWXgchLje2kV.json",
            "ventures/einvoice-preflight/turkey.mjs",
            "ventures/einvoice-preflight/turkey.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f955de2249586eb52761625934fff4dbdc6ca2ba",
          "at": 1793383089000,
          "title": "einvoice-preflight: Luxembourg bill 8815 status after the 18 Sep committee hearing, with a post",
          "pr": 11820,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 2,
          "lines_added": 22,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-luxembourg-bill-8815-committee-stage.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "33b4608be4cc6d1ba238b12142fd3414b190422e",
          "at": 1793386751000,
          "title": "einvoice-preflight: Egypt ETA e-invoice page with registration number shape check",
          "pr": 11829,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "einvoice-preflight: Egypt ETA e-invoice page with registration number shape check",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 13,
          "lines_added": 238,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-30-egypt-eta-e-invoices-and-e-receipts.md",
            "prompts/runs/2026-10-30-session_01EhTJVMTredyiPudSXufmPA.json",
            "ventures/einvoice-preflight/egypt-eta-e-invoice-mandate.html",
            "ventures/einvoice-preflight/egypt-eta-e-invoice-mandate.test.mjs",
            "ventures/einvoice-preflight/egypt.mjs",
            "ventures/einvoice-preflight/egypt.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fe9f2ad81b93e04caec1b94e21714ef54d1f676b",
          "at": 1793387325000,
          "title": "einvoice-preflight: india-cli.mjs pre-checks an IRP INV-01 payload from the command line",
          "pr": 11832,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "einvoice-preflight: india-cli.mjs pre-checks an IRP INV-01 payload from the command line"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 8,
          "lines_added": 202,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-checking-an-indian-e-invoice-payload-from-the-command-line.md",
            "prompts/runs/2026-10-30-session_01AcxTtKoMqSEMhr3bAVKKGj.json",
            "ventures/einvoice-preflight/examples/india-inv01-with-defects.json",
            "ventures/einvoice-preflight/examples/india-inv01.json",
            "ventures/einvoice-preflight/india-cli.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9ab5ddc735a8d40682a151dd4843803b406cf37a",
          "at": 1793390289000,
          "title": "einvoice-preflight: INV-01 payload check card on the India page, with a post",
          "pr": 11838,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 5,
          "lines_added": 31,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-30-check-an-india-e-invoice-payload-in-your-browser.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7c34b28c1c8b77bc9562a6e24abc2d4af2df2895",
          "at": 1793393981000,
          "title": "einvoice-preflight: PDF envelope checks (PDF-001..004)",
          "pr": 11874,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "einvoice-preflight: PDF envelope checks (PDF/A-3 marker, attachment name, AFRelationship, XMP profile vs XML)",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 7,
          "lines_added": 191,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-the-pdf-around-the-e-invoice.md",
            "prompts/runs/2026-10-30-session_01EhTJVPE1krUmK8NmVcgHa8.json",
            "ventures/einvoice-preflight/pdf-envelope.mjs",
            "ventures/einvoice-preflight/pdf-envelope.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "eeb2c59edeccacfa447c013555f9ecaf89a4f5fd",
          "at": 1793394001000,
          "title": "einvoice-preflight: VAT check digits for 11 more countries (JS and Python)",
          "pr": 11875,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": null,
          "bullets": [
            "einvoice-preflight: VAT check digits for EE HU SI SK HR LV LT BG RO EL CZ, JS and Python, with a post",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 7,
          "lines_added": 204,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-vat-checksums-for-eleven-more-countries.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f9dff392b6ee882da7202f41cfcc5b53d5477f89",
          "at": 1793397501000,
          "title": "einvoice-preflight: Bulgaria draft re-checked 2026-10-30 (no outcome), post, flagship date",
          "pr": 11914,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 3,
          "lines_added": 18,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-bulgaria-e-invoicing-draft-status.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "cd8a57e87af287210c52a9d4ec11b6e4b1e65988",
          "at": 1793401223000,
          "title": "einvoice-preflight: Indonesia Coretax page with NPWP shape check; hub, index, sitemap and all country pages link it",
          "pr": 11932,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 61,
          "lines_added": 253,
          "lines_removed": 52,
          "added_files": [
            "docs/posts/2026-10-30-indonesia-faktur-pajak-coretax-npwp-16-digits.md",
            "ventures/einvoice-preflight/indonesia-coretax-e-invoice-mandate.html",
            "ventures/einvoice-preflight/indonesia-coretax-e-invoice-mandate.test.mjs",
            "ventures/einvoice-preflight/indonesia.mjs",
            "ventures/einvoice-preflight/indonesia.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "league-schedule-generator",
      "merges": [
        {
          "sha": "213be4b4a00ab56baac79e3fb0bd90c74931d9a7",
          "at": 1793330542000,
          "title": "league-schedule-generator: clinchedUnlessTied in the play-off race",
          "pr": 11653,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "league-schedule-generator: clinchedUnlessTied in the play-off race"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 5,
          "lines_added": 110,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-a-clinched-team-that-a-tie-could-still-cost.md",
            "prompts/runs/2026-10-30-session_01E5sJKmSHTJkDRd3EBM5ELa.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fb21a9ca7024e4f25da34f8b9ddb5a262c651973",
          "at": 1793334118000,
          "title": "league-schedule-generator: fuzz check for fixed-date pins",
          "pr": 11680,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "league-schedule-generator: fuzz check for fixed-date pins, post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 5,
          "lines_added": 130,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-fuzzing-fixed-date-pins-in-a-league-schedule.md",
            "prompts/runs/2026-10-30-session_01E5sJKkkUKP8KXpaVVUe2z8.json",
            "ventures/league-schedule-generator/eval/fuzz-pinned.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b1f5840f04affc4db75ac49a7cb54ec8a0a054b0",
          "at": 1793347956000,
          "title": "league-schedule-generator: warn on travel-table gaps and typos",
          "pr": 11718,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "league-schedule-generator: warn on travel-table gaps and typos"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 6,
          "lines_added": 109,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-30-league-travel-table-warnings.md",
            "prompts/runs/2026-10-30-session_01AcxTtL8prkFsKg3Hq4frzB.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f3c3d77df0292d1b5ddb9dedc0b978180117c984",
          "at": 1793348993000,
          "title": "league-schedule-generator: show travel-table warnings on the multi-division page",
          "pr": 11723,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "league-schedule-generator: show travel-table warnings on the multi-division page"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 5,
          "lines_added": 65,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-30-league-scheduler-travel-table-warnings-on-the-page.md",
            "prompts/runs/2026-10-30-session_01E5sJKo1Cth6oEspX4CbJEj.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "96a11d9858a5ebe03c3dfdf161c18e30155b9b5a",
          "at": 1793358621000,
          "title": "league-schedule-generator: season grid CSV for multi-division leagues",
          "pr": 11751,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "league-schedule-generator: season grid CSV for multi-division leagues"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 7,
          "lines_added": 109,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-30-one-sheet-for-every-division.md",
            "prompts/runs/2026-10-30-session_01AcxTtLsMUF7QcCuPj4rmXq.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "63d9b2f5effe4ed36f4f4510485ceb8055fb4a09",
          "at": 1793359615000,
          "title": "league-schedule-generator: click the season grid download in Chromium",
          "pr": 11757,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "league-schedule-generator: click the season grid download in Chromium"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 4,
          "lines_added": 64,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-clicking-the-season-grid-download.md",
            "prompts/runs/2026-10-30-session_01E5sJKjiNmhFsCNd8WBsCR5.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a0059717e4fba5d28d5207908d14a8ad443f4a83",
          "at": 1793365788000,
          "title": "league-schedule-generator: team unavailable dates on the multi-division page",
          "pr": 11770,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 7,
          "lines_added": 108,
          "lines_removed": 8,
          "added_files": [
            "docs/posts/2026-10-30-team-unavailable-dates-multi-division-schedule.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "760d72e55031ba2ecda86f35d2ec3c8311de1ee4",
          "at": 1793377045000,
          "title": "league-schedule-generator: multi-division validator mutation check",
          "pr": 11800,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "league-schedule-generator: multi-division validator mutation check (7,876 faults, 0 missed)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 5,
          "lines_added": 130,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-checking-the-schedule-checker.md",
            "prompts/runs/2026-10-30-session_01E5sJKmFFftpYTdfLRtKvgL.json",
            "ventures/league-schedule-generator/eval/mutate-divisions.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "35d4e97e8179fc03943c4840613e88dd4cb84da0",
          "at": 1793393917000,
          "title": "league-schedule-generator: optional VALARM reminders in .ics exports",
          "pr": 11873,
          "agent": "Claude",
          "models": [],
          "track": "explore",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 8,
          "lines_added": 44,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-league-calendar-reminders.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f84e64771ccc6d293830934670261bebea421003",
          "at": 1793398391000,
          "title": "league-schedule-generator: printable score sheets for multi-division leagues",
          "pr": 11922,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "league-schedule-generator: printable score sheets for multi-division leagues"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "league-schedule-generator"
          },
          "files": 8,
          "lines_added": 107,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-30-score-sheets-for-multi-division-leagues.md",
            "prompts/runs/2026-10-30-session_01E5sJKnc1NohJBCzfdG677a.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "babysitting-business-kit",
      "merges": [
        {
          "sha": "f44f5cb2cf0e1dc551f0c479c4ec1640f7ae0d00",
          "at": 1793334231000,
          "title": "babysitting-business-kit: three guide pages register the offline worker",
          "pr": 11681,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "babysitting-business-kit"
          },
          "files": 3,
          "lines_added": 3,
          "lines_removed": 0,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e46843fce5436156c90ea13ac78ceaea810cfc6e",
          "at": 1793334746000,
          "title": "babysitting-business-kit round 2: ten lanes (sit reports, credentials, safety, invoices, agreements, insights, waitlist, network, packages, activities)",
          "pr": 11668,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "babysitting-business-kit round 2: ten lanes (sit reports, credentials, safety, invoices, agreements, insights, waitlist, network, packages, activities)",
          "area": {
            "kind": "product",
            "name": "babysitting-business-kit"
          },
          "files": 69,
          "lines_added": 8411,
          "lines_removed": 41,
          "added_files": [
            "docs/posts/2026-10-30-babysitting-activities.md",
            "docs/posts/2026-10-30-babysitting-agreements.md",
            "docs/posts/2026-10-30-babysitting-credentials.md",
            "docs/posts/2026-10-30-babysitting-insights.md",
            "docs/posts/2026-10-30-babysitting-invoices.md",
            "docs/posts/2026-10-30-babysitting-network.md",
            "docs/posts/2026-10-30-babysitting-packages.md",
            "docs/posts/2026-10-30-babysitting-safety.md",
            "docs/posts/2026-10-30-babysitting-sitreports.md",
            "docs/posts/2026-10-30-babysitting-waitlist.md",
            "ventures/babysitting-business-kit/activities-ui.mjs",
            "ventures/babysitting-business-kit/activities.mjs",
            "ventures/babysitting-business-kit/activities.test.mjs",
            "ventures/babysitting-business-kit/agreements-ui.mjs",
            "ventures/babysitting-business-kit/agreements.mjs",
            "ventures/babysitting-business-kit/agreements.test.mjs",
            "ventures/babysitting-business-kit/babysitting-business-setup.html",
            "ventures/babysitting-business-kit/credentials-ui.mjs",
            "ventures/babysitting-business-kit/credentials.mjs",
            "ventures/babysitting-business-kit/credentials.test.mjs",
            "ventures/babysitting-business-kit/insights-ui.mjs",
            "ventures/babysitting-business-kit/insights.mjs",
            "ventures/babysitting-business-kit/insights.test.mjs",
            "ventures/babysitting-business-kit/invoices-server.mjs",
            "ventures/babysitting-business-kit/invoices-ui.mjs",
            "ventures/babysitting-business-kit/invoices.mjs",
            "ventures/babysitting-business-kit/invoices.test.mjs",
            "ventures/babysitting-business-kit/network-server.mjs",
            "ventures/babysitting-business-kit/network-ui.mjs",
            "ventures/babysitting-business-kit/network.mjs",
            "ventures/babysitting-business-kit/network.test.mjs",
            "ventures/babysitting-business-kit/packages-ui.mjs",
            "ventures/babysitting-business-kit/packages.mjs",
            "ventures/babysitting-business-kit/packages.test.mjs",
            "ventures/babysitting-business-kit/safety-server.mjs",
            "ventures/babysitting-business-kit/safety-ui.mjs",
            "ventures/babysitting-business-kit/safety.mjs",
            "ventures/babysitting-business-kit/safety.test.mjs",
            "ventures/babysitting-business-kit/sitreport-ui.mjs",
            "ventures/babysitting-business-kit/sitreport.mjs",
            "ventures/babysitting-business-kit/sitreport.test.mjs",
            "ventures/babysitting-business-kit/waitlist-server.mjs",
            "ventures/babysitting-business-kit/waitlist-ui.mjs",
            "ventures/babysitting-business-kit/waitlist.mjs",
            "ventures/babysitting-business-kit/waitlist.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "92a0632e475f968eefd53a308f39021a286ea8ad",
          "at": 1793352878000,
          "title": "babysitting-business-kit: privacy and child-safety check",
          "pr": 11732,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "babysitting-business-kit: remove descriptions of the person the kit was first built for",
            "babysitting-business-kit: child-safety fixes from a harm review",
            "Regenerate the front-door mirror and the runner README count"
          ],
          "detail": "The README, VENTURE.yaml, the launch post, the ledger and the run record said the kit was built for a friend's Christian business, and the run record stored the original request verbatim.",
          "area": {
            "kind": "product",
            "name": "babysitting-business-kit"
          },
          "files": 21,
          "lines_added": 117,
          "lines_removed": 46,
          "added_files": [
            "docs/posts/2026-10-30-babysitting-kit-safety-review.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "330b12eb1d3f6a8b8221097171191890af8c15b8",
          "at": 1793390889000,
          "title": "babysitting-business-kit: gender-neutral wording for the sitter",
          "pr": 11768,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [],
          "detail": "The kit, its posts and the ledger called the kit's user \"she/her\" throughout.",
          "area": {
            "kind": "product",
            "name": "babysitting-business-kit"
          },
          "files": 30,
          "lines_added": 87,
          "lines_removed": 87,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "saints-by-candlelight",
      "merges": [
        {
          "sha": "bcb5aca25b0b2f8e375fda286924aca10a1876b9",
          "at": 1793366860000,
          "title": "saints-by-candlelight: Peter and the Night on the Lake (episode 55, text only)",
          "pr": 11774,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: Peter and the Night on the Lake (episode 55, text only)",
            "prompts: run record for creative run"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 6,
          "lines_added": 496,
          "lines_removed": 2,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtKMAz6n72bs1UVxLr8.json",
            "ventures/saints-by-candlelight/episodes/055-peter-and-the-night-on-the-lake.md",
            "ventures/saints-by-candlelight/peter-and-the-night-on-the-lake.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "75388cd6f4bd8b7057180768e6e4f893a913e1d3",
          "at": 1793377520000,
          "title": "saints-by-candlelight: The Wedding at Cana and the Six Stone Jars (episode 56, text only)",
          "pr": 11802,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: The Wedding at Cana and the Six Stone Jars (episode 56, text only)",
            "prompts: run record for creative run"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 6,
          "lines_added": 423,
          "lines_removed": 2,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKmaKtSs8j3vBNXkAPE.json",
            "ventures/saints-by-candlelight/episodes/056-the-wedding-at-cana-and-the-six-stone-jars.md",
            "ventures/saints-by-candlelight/the-wedding-at-cana-and-the-six-stone-jars.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3713b14a4bc4082f96ce46fa099051f1a6f3e7d9",
          "at": 1793380466000,
          "title": "saints-by-candlelight: The Father Who Ran Down the Road (episode 57, text only)",
          "pr": 11815,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: The Father Who Ran Down the Road (episode 57, text only)",
            "prompts: run record for creative run"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 6,
          "lines_added": 491,
          "lines_removed": 2,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKmW6PvXwJVwRZbPHoo.json",
            "ventures/saints-by-candlelight/episodes/057-the-father-who-ran-down-the-road.md",
            "ventures/saints-by-candlelight/the-father-who-ran-down-the-road.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ff58a3ab4fb9708c172176237215536c31f7afeb",
          "at": 1793391638000,
          "title": "saints-by-candlelight: The Shepherds and the Night Watch Above Bethlehem (episode 58, text only)",
          "pr": 11847,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: The Shepherds and the Night Watch Above Bethlehem (episode 58, text only)",
            "prompts: run record for creative run"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 6,
          "lines_added": 497,
          "lines_removed": 2,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKk8KgTs9tZt69PEFNM.json",
            "ventures/saints-by-candlelight/episodes/058-the-shepherds-and-the-night-watch-above-bethlehem.md",
            "ventures/saints-by-candlelight/the-shepherds-and-the-night-watch-above-bethlehem.html"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "several products at once",
      "merges": [
        {
          "sha": "41d01234848b0ceed9b305f02846ecdc12f1bca6",
          "at": 1793333450000,
          "title": "polish: starter llms.txt for 1,286 tools, generated from each page's own title and description",
          "pr": 11675,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "polish",
          "bullets": [
            "polish: starter llms.txt for 1,286 tools, generated from each page's own title and description",
            "polish: run record",
            "polish: run record, shorter post description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "several products at once"
          },
          "files": 1291,
          "lines_added": 18412,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-llms-txt-for-1286-tools.md",
            "docs/reports/polish-2026-10-30-llms-txt-bulk.md",
            "platform/ci/gen_llms_txt.py",
            "platform/ci/test_gen_llms_txt.py",
            "prompts/runs/2026-10-30-session_01AcxTtJHB6yjYEe3cxbykRx.json",
            "ventures/1099-k-threshold-checker/llms.txt",
            "ventures/1099-vendor-csv-checker/llms.txt",
            "ventures/1099-vendor-tracker/llms.txt",
            "ventures/1099k-reconciliation-worksheet/llms.txt",
            "ventures/3d-print-price-calculator/llms.txt",
            "ventures/3pl-invoice-audit-checker/llms.txt",
            "ventures/3pl-quote-normalizer/llms.txt",
            "ventures/401k-loan-vs-withdrawal-calculator/llms.txt",
            "ventures/401k-plan-fee-calculator/llms.txt",
            "ventures/529-to-roth-rollover-calculator/llms.txt",
            "ventures/ab-test-significance-calculator/llms.txt",
            "ventures/aba-authorization-tracker/llms.txt",
            "ventures/aca-subsidy-cliff-calculator/llms.txt",
            "ventures/actions-artifact-poisoning-check/llms.txt",
            "ventures/actions-cache-poisoning-check/llms.txt",
            "ventures/actions-checkout-credentials-check/llms.txt",
            "ventures/actions-injection-check/llms.txt",
            "ventures/actions-minutes-estimator/llms.txt",
            "ventures/actions-permissions-check/llms.txt",
            "ventures/actions-runner-starvation-check/llms.txt",
            "ventures/actions-runtime-deprecation-check/llms.txt",
            "ventures/actions-schedule-check/llms.txt",
            "ventures/actions-secret-leak-check/llms.txt",
            "ventures/actions-secrets-inherit-check/llms.txt",
            "ventures/actions-self-hosted-exposure-check/llms.txt",
            "ventures/actions-timeout-check/llms.txt",
            "ventures/actions-transitive-pin-check/llms.txt",
            "ventures/activecampaign-import-csv-check/llms.txt",
            "ventures/ad-incrementality-test-analyzer/llms.txt",
            "ventures/ad-slot-sell-through-planner/llms.txt",
            "ventures/ad-spend-saturation-optimizer/llms.txt",
            "ventures/ada-title-ii-evidence/llms.txt",
            "ventures/adjunct-course-offer-calculator/llms.txt",
            "ventures/adu-payback-calculator/llms.txt",
            "ventures/affiliate-disclosure-checker/llms.txt",
            "ventures/ag-spray-drone-quote-calculator/llms.txt",
            "ventures/agent-brokerage-split-calculator/llms.txt",
            "ventures/agent-instructions-drift-check/llms.txt",
            "ventures/agent-permission-config-check/llms.txt",
            "ventures/ai-coding-plan-cost-calculator/llms.txt",
            "ventures/aid-award-letter-comparator/llms.txt",
            "ventures/airbnb-earnings-report-analyzer/llms.txt",
            "ventures/airbnb-payout-to-journal/llms.txt",
            "ventures/amazon-fba-calculator/llms.txt",
            "ventures/amazon-inventory-loader-check/llms.txt",
            "ventures/amazon-ppc-search-term-analyzer/llms.txt",
            "ventures/amazon-seller-profit-analyzer/llms.txt",
            "ventures/amazon-settlement-to-journal/llms.txt",
            "ventures/amusement-route-location-calculator/llms.txt",
            "ventures/android-data-safety-check/llms.txt",
            "ventures/apiary-profit-planner/llms.txt",
            "ventures/app-listing-metadata-check/llms.txt",
            "ventures/app-review-insights/llms.txt",
            "ventures/app-store-commission-calculator/llms.txt",
            "ventures/app-store-sales-report-analyzer/llms.txt",
            "ventures/app-store-screenshot-check/llms.txt",
            "ventures/app-subscription-proceeds-calculator/llms.txt",
            "ventures/apparel-decoration-price-calculator/llms.txt",
            "ventures/appliance-repair-quote-calculator/llms.txt",
            "ventures/appointment-deposit-calculator/llms.txt",
            "ventures/appointment-no-show-analyzer/llms.txt",
            "ventures/appointment-no-show-cost-calculator/llms.txt",
            "ventures/appointment-overbooking-optimizer/llms.txt",
            "ventures/appraisal-assignment-picker/llms.txt",
            "ventures/arcade-game-payback-calculator/llms.txt",
            "ventures/artificial-turf-bid-calculator/llms.txt",
            "ventures/asbestos-abatement-bid-calculator/llms.txt",
            "ventures/asphalt-driveway-pave-bid-calculator/llms.txt",
            "ventures/asphalt-sealcoat-bid-calculator/llms.txt",
            "ventures/atm-route-margin/llms.txt",
            "ventures/ats-resume-checker/llms.txt",
            "ventures/attic-insulation-bid-calculator/llms.txt",
            "ventures/au-gst-registration-checker/llms.txt",
            "ventures/au-redundancy-pay-calculator/llms.txt",
            "ventures/au-sole-trader-tax-set-aside-calculator/llms.txt",
            "ventures/auction-car-flip-calculator/llms.txt",
            "ventures/augusta-rule-calculator/llms.txt",
            "ventures/auth-mau-pricing-calculator/llms.txt",
            "ventures/auto-detailing-service-menu-picker/llms.txt",
            "ventures/auto-glass-bid-calculator/llms.txt",
            "ventures/auto-loan-interest-deduction-calculator/llms.txt",
            "ventures/auto-repair-effective-labor-rate/llms.txt",
            "ventures/automatic-driveway-gate-bid-calculator/llms.txt",
            "ventures/aws-bill-change-explainer/llms.txt",
            "ventures/aws-commitment-breakeven-calculator/llms.txt",
            "ventures/aws-iam-policy-risk-check/llms.txt",
            "ventures/axe-throwing-bar-profit-calculator/llms.txt",
            "ventures/backdoor-roth-pro-rata-calculator/llms.txt",
            "ventures/backflow-test-fee-calculator/llms.txt",
            "ventures/backup-file-exposure-check/llms.txt",
            "ventures/backup-verification-evidence/llms.txt",
            "ventures/backyard-egg-profit-calculator/llms.txt",
            "ventures/backyard-honey-profit-calculator/llms.txt",
            "ventures/bai2-statement-reader/llms.txt",
            "ventures/bai2-to-ofx-converter/llms.txt",
            "ventures/bail-bond-agency-exposure-calculator/llms.txt",
            "ventures/bakery-production-scheduler/llms.txt",
            "ventures/ball-python-morph-pairing-planner/llms.txt",
            "ventures/band-tour-profit-planner/llms.txt",
            "ventures/bandcamp-sales-report-analyzer/llms.txt",
            "ventures/bank-csv-to-qbo-converter/llms.txt",
            "ventures/bank-statement-pdf-to-csv/llms.txt",
            "ventures/barbershop-chair-profit-calculator/llms.txt",
            "ventures/basement-finishing-bid-calculator/llms.txt",
            "ventures/basement-waterproofing-bid-calculator/llms.txt",
            "ventures/bed-bug-heat-treatment-price-calculator/llms.txt",
            "ventures/beef-cattle-ration-optimizer/llms.txt",
            "ventures/bid-leveling-worksheet/llms.txt",
            "ventures/bid-price-engine/llms.txt",
            "ventures/bid-win-rate-optimizer/llms.txt",
            "ventures/bigcommerce-product-csv-check/llms.txt",
            "ventures/bigquery-query-cost-advisor/llms.txt",
            "ventures/bike-shop-repair-profit-calculator/llms.txt",
            "ventures/biohazard-cleanup-bid-calculator/llms.txt",
            "ventures/birth-doula-package-pricing-calculator/llms.txt",
            "ventures/boat-rental-fleet-profit-calculator/llms.txt",
            "ventures/boba-tea-shop-profit-calculator/llms.txt",
            "ventures/boi-reporting-exemption-checker/llms.txt",
            "ventures/boiler-replacement-bid-calculator/llms.txt",
            "ventures/bonus-depreciation-calculator/llms.txt",
            "ventures/bonus-take-home-gross-up-calculator/llms.txt",
            "ventures/booking-request-chooser/llms.txt",
            "ventures/bookkeeping-client-fee-calculator/llms.txt",
            "ventures/booth-rent-vs-commission/llms.txt",
            "ventures/bounce-house-rental-calculator/llms.txt",
            "ventures/boutique-fitness-studio-pricing-planner/llms.txt",
            "ventures/bowling-center-profit-calculator/llms.txt",
            "ventures/braiding-studio-profit-calculator/llms.txt",
            "ventures/branch-protection-drift-check/llms.txt",
            "ventures/brand-deal-rate-calculator/llms.txt",
            "ventures/breakeven-roas-calculator/llms.txt",
            "ventures/brevo-contacts-csv-check/llms.txt",
            "ventures/brewery-excise-tax-calculator/llms.txt",
            "ventures/brewery-tank-schedule-optimizer/llms.txt",
            "ventures/bridal-hair-makeup-pricing-calculator/llms.txt",
            "ventures/brrrr-calculator/llms.txt",
            "ventures/bundle-discount-optimizer/llms.txt",
            "ventures/business-insurance-policy-reader/llms.txt",
            "ventures/business-loan-offer-comparator/llms.txt",
            "ventures/business-vehicle-depreciation-calculator/llms.txt",
            "ventures/buymeacoffee-payout-to-journal/llms.txt",
            "ventures/ca-crypto-acb-calculator/llms.txt",
            "ventures/ca-gst-hst-small-supplier-checker/llms.txt",
            "ventures/ca-meal-rest-break-premium-checker/llms.txt",
            "ventures/ca-self-employed-tax-set-aside-calculator/llms.txt",
            "ventures/caa-record-check/llms.txt",
            "ventures/cabinet-refinishing-bid-calculator/llms.txt",
            "ventures/cache-control-check/llms.txt",
            "ventures/cafe-drink-margin-calculator/llms.txt",
            "ventures/cake-pricing-calculator/llms.txt",
            "ventures/call-recording-consent-check/llms.txt",
            "ventures/cam-reconciliation-check/llms.txt",
            "ventures/campground-site-profit-calculator/llms.txt",
            "ventures/camt053-statement-check/llms.txt",
            "ventures/camt053-to-ofx-converter/llms.txt",
            "ventures/cancel-flow/llms.txt",
            "ventures/candle-batch-cost-calculator/llms.txt",
            "ventures/cannabis-280e-tax-calculator/llms.txt",
            "ventures/canonical-tag-check/llms.txt",
            "ventures/capex-budget-prioritizer/llms.txt",
            "ventures/caption-quality-check/llms.txt",
            "ventures/car-hauler-load-planner/llms.txt",
            "ventures/car-lease-deal-checker/llms.txt",
            "ventures/car-wash-membership-calculator/llms.txt",
            "ventures/card-bonus-planner/llms.txt",
            "ventures/card-grading-submission-picker/llms.txt",
            "ventures/card-processing-fee-audit/llms.txt",
            "ventures/card-surcharge-vs-cash-discount-calculator/llms.txt",
            "ventures/cargo-audit-triage/llms.txt",
            "ventures/carpet-cleaning-bid-calculator/llms.txt",
            "ventures/carpet-install-bid-calculator/llms.txt",
            "ventures/cash-balance-plan-calculator/llms.txt",
            "ventures/cash-flow-risk-forecaster/llms.txt",
            "ventures/cash-runway-planner/llms.txt",
            "ventures/cat-adjuster-fee-calculator/llms.txt",
            "ventures/catering-quote-calculator/llms.txt",
            "ventures/cbam-cost-estimator/llms.txt",
            "ventures/cd-treasury-ladder-planner/llms.txt",
            "ventures/cdl-school-payback-calculator/llms.txt",
            "ventures/cdn-bandwidth-pricing-calculator/llms.txt",
            "ventures/cell-tower-lease-buyout-calculator/llms.txt",
            "ventures/certified-payroll-calculator/llms.txt",
            "ventures/change-order-margin-calculator/llms.txt",
            "ventures/changelog-keeper/llms.txt",
            "ventures/chargeback-evidence-packet/llms.txt",
            "ventures/chargeback-ratio-monitor/llms.txt",
            "ventures/charitable-deduction-calculator/llms.txt",
            "ventures/charity-bunching-planner/llms.txt",
            "ventures/cheap-meal-plan-optimizer/llms.txt",
            "ventures/child-tax-credit-calculator/llms.txt",
            "ventures/childcare-center-break-even-calculator/llms.txt",
            "ventures/childcare-enrollment-mix-optimizer/llms.txt",
            "ventures/childcare-tuition-calculator/llms.txt",
            "ventures/chimney-sweep-bid-calculator/llms.txt",
            "ventures/chiropractor-new-patient-roi-calculator/llms.txt",
            "ventures/christmas-tree-farm-profit-planner/llms.txt",
            "ventures/chrome-extension-permission-check/llms.txt",
            "ventures/churn-radar/llms.txt",
            "ventures/ci-minutes-pricing-calculator/llms.txt",
            "ventures/ci-test-shard-balancer/llms.txt",
            "ventures/class-price-and-minimum-optimizer/llms.txt",
            "ventures/claude-code-hooks-security-check/llms.txt",
            "ventures/claude-code-settings-check/llms.txt",
            "ventures/claude-code-subagent-check/llms.txt",
            "ventures/claude-skill-scaffold-generator/llms.txt",
            "ventures/cleaning-dilution-calculator/llms.txt",
            "ventures/clearance-markdown-planner/llms.txt",
            "ventures/clergy-housing-allowance-calculator/llms.txt",
            "ventures/client-concentration-risk-analyzer/llms.txt",
            "ventures/client-profitability-time-analyzer/llms.txt",
            "ventures/client-rebooking-predictor/llms.txt",
            "ventures/climbing-gym-profit-calculator/llms.txt",
            "ventures/cloud-bucket-exposure-check/llms.txt",
            "ventures/cloud-egress-calculator/llms.txt",
            "ventures/cloudflare-bill-estimator/llms.txt",
            "ventures/cloudwatch-logs-cost-advisor/llms.txt",
            "ventures/cnc-machining-quote-calculator/llms.txt",
            "ventures/coast-fire-calculator/llms.txt",
            "ventures/cobra-vs-marketplace-calculator/llms.txt",
            "ventures/codeowners-shadow-check/llms.txt",
            "ventures/coffee-cart-event-quote-calculator/llms.txt",
            "ventures/coffee-roaster-margin-calculator/llms.txt",
            "ventures/coi-expiry-gap-checker/llms.txt",
            "ventures/collision-shop-drp-profit-calculator/llms.txt",
            "ventures/commercial-lease-abstract-reader/llms.txt",
            "ventures/commercial-lease-effective-rent-calculator/llms.txt",
            "ventures/commercial-photo-license-calculator/llms.txt",
            "ventures/commercial-property-cap-rate-calculator/llms.txt",
            "ventures/commercial-solar-ppa-lease-buy-calculator/llms.txt",
            "ventures/commissary-kitchen-cost-split-calculator/llms.txt",
            "ventures/concrete-bid-calculator/llms.txt",
            "ventures/concrete-lifting-bid-calculator/llms.txt",
            "ventures/conformal-prediction-intervals/llms.txt",
            "ventures/consent-change-record/llms.txt",
            "ventures/consignment-markdown-planner/llms.txt",
            "ventures/construction-delay-claim-calculator/llms.txt",
            "ventures/construction-evidence-log/llms.txt",
            "ventures/container-demurrage-detention-calculator/llms.txt",
            "ventures/container-load-planner/llms.txt",
            "ventures/contract-vs-fte-rate-calculator/llms.txt",
            "ventures/contractor-bid-readiness/llms.txt",
            "ventures/contractor-wip-schedule/llms.txt",
            "ventures/convenience-store-gas-station-profit-calculator/llms.txt",
            "ventures/cookie-security-check/llms.txt",
            "ventures/cors-misconfig-check/llms.txt",
            "ventures/cost-segregation-study-calculator/llms.txt",
            "ventures/cottage-food-pricing-calculator/llms.txt",
            "ventures/countertop-bid-calculator/llms.txt",
            "ventures/courier-van-route-profit-calculator/llms.txt",
            "ventures/course-launch-revenue-calculator/llms.txt",
            "ventures/course-platform-fee-calculator/llms.txt",
            "ventures/court-reporter-transcript-calculator/llms.txt",
            "ventures/coverage-drop-check/llms.txt",
            "ventures/covered-call-wheel-calculator/llms.txt",
            "ventures/cow-calf-breakeven-calculator/llms.txt",
            "ventures/coworking-space-profit-calculator/llms.txt",
            "ventures/craft-brewery-batch-margin-calculator/llms.txt",
            "ventures/craft-fair-booth-calculator/llms.txt",
            "ventures/crawl-space-encapsulation-bid-calculator/llms.txt",
            "ventures/crew-dispatch-optimizer/llms.txt",
            "ventures/cron-dst-drift-check/llms.txt",
            "ventures/cron-heartbeat/llms.txt",
            "ventures/crop-insurance-coverage-calculator/llms.txt",
            "ventures/crown-molding-bid-calculator/llms.txt",
            "ventures/crypto-cost-basis-calculator/llms.txt",
            "ventures/csa-share-pricing-calculator/llms.txt",
            "ventures/csv-to-sepa-pain001/llms.txt",
            "ventures/csv-to-sepa-pain008/llms.txt",
            "ventures/csv-to-sql-generator/llms.txt",
            "ventures/custom-farm-rate-calculator/llms.txt",
            "ventures/customer-lifetime-value-predictor/llms.txt",
            "ventures/cut-list-optimizer/llms.txt",
            "ventures/dac7-seller-reporting-checker/llms.txt",
            "ventures/daily-prep-quantity-optimizer/llms.txt",
            "ventures/databricks-cluster-cost-advisor/llms.txt",
            "ventures/datadog-bill-estimator/llms.txt",
            "ventures/de-freiberufler-tax-set-aside-calculator/llms.txt",
            "ventures/deal-keeper/llms.txt",
            "ventures/deck-bid-calculator/llms.txt",
            "ventures/deck-staining-bid-calculator/llms.txt",
            "ventures/delivery-app-margin-calculator/llms.txt",
            "ventures/demand-charge-interval-analyzer/llms.txt",
            "ventures/demand-forecast-backtester/llms.txt",
            "ventures/dental-associate-pay-calculator/llms.txt",
            "ventures/dental-patient-financing-fee-calculator/llms.txt",
            "ventures/dental-ppo-writeoff-calculator/llms.txt",
            "ventures/dependabot-config-check/llms.txt",
            "ventures/dependency-confusion-check/llms.txt",
            "ventures/dependent-care-fsa-vs-credit-calculator/llms.txt",
            "ventures/deploy-concurrency-check/llms.txt",
            "ventures/depop-fee-calculator/llms.txt",
            "ventures/depreciation-recapture-calculator/llms.txt",
            "ventures/devsec-toolkit/llms.txt",
            "ventures/dining-room-table-mix-optimizer/llms.txt",
            "ventures/discogs-fee-calculator/llms.txt",
            "ventures/distillery-excise-tax-calculator/llms.txt",
            "ventures/distrokid-royalty-to-journal/llms.txt",
            "ventures/dj-gig-profit-calculator/llms.txt",
            "ventures/dmarc-report-reader/llms.txt",
            "ventures/dns-configuration-evidence/llms.txt",
            "ventures/docker-base-image-eol-check/llms.txt",
            "ventures/docker-base-image-pin-check/llms.txt",
            "ventures/docker-build-secrets-check/llms.txt",
            "ventures/docker-cache-order-check/llms.txt",
            "ventures/docker-compose-security-check/llms.txt",
            "ventures/dog-boarding-daycare-pricing/llms.txt",
            "ventures/dog-grooming-day-planner/llms.txt",
            "ventures/dog-grooming-price-calculator/llms.txt",
            "ventures/dog-grooming-profit-calculator/llms.txt",
            "ventures/dog-walking-route-pricing/llms.txt",
            "ventures/donor-acknowledgment-letter-generator/llms.txt",
            "ventures/donor-retention-analyzer/llms.txt",
            "ventures/dotenv-exposure-check/llms.txt",
            "ventures/drip-keeper/llms.txt",
            "ventures/driving-instructor-lesson-pricing-calculator/llms.txt",
            "ventures/driving-school-profit-calculator/llms.txt",
            "ventures/drone-mapping-job-calculator/llms.txt",
            "ventures/dry-cleaner-profit-calculator/llms.txt",
            "ventures/dryer-vent-bid-calculator/llms.txt",
            "ventures/drywall-bid-calculator/llms.txt",
            "ventures/duct-cleaning-bid-calculator/llms.txt",
            "ventures/dumpster-rental-margin-calculator/llms.txt",
            "ventures/dunning-engine/llms.txt",
            "ventures/duplicate-payment-audit/llms.txt",
            "ventures/dynamodb-capacity-mode-advisor/llms.txt",
            "ventures/eaa-accessibility-act-checker/llms.txt",
            "ventures/early-pay-discount-picker/llms.txt",
            "ventures/ebay-file-exchange-check/llms.txt",
            "ventures/ebay-payout-to-journal/llms.txt",
            "ventures/ebay-promoted-listings-roi-analyzer/llms.txt",
            "ventures/ebay-transaction-report-analyzer/llms.txt",
            "ventures/ebike-rental-fleet-profit-calculator/llms.txt",
            "ventures/ebs-volume-cost-advisor/llms.txt",
            "ventures/economic-nexus-threshold-tracker/llms.txt",
            "ventures/edi-x12-order-checker/llms.txt",
            "ventures/egress-window-bid-calculator/llms.txt",
            "ventures/eitc-calculator/llms.txt",
            "ventures/electrical-panel-upgrade-bid-calculator/llms.txt",
            "ventures/email-api-pricing-calculator/llms.txt",
            "ventures/email-auth-check/llms.txt",
            "ventures/email-list-csv-check/llms.txt",
            "ventures/embroidery-shop-quote-calculator/llms.txt",
            "ventures/employee-cost-calculator/llms.txt",
            "ventures/employer-payroll-tax-cost-calculator/llms.txt",
            "ventures/employment-contract-checker/llms.txt",
            "ventures/entry-door-bid-calculator/llms.txt",
            "ventures/env-example-drift-check/llms.txt",
            "ventures/epk-generator/llms.txt",
            "ventures/epoxy-garage-floor-bid-calculator/llms.txt",
            "ventures/equipment-auction-buyer-premium-calculator/llms.txt",
            "ventures/equipment-lease-buyout-calculator/llms.txt",
            "ventures/equipment-lease-vs-buy-calculator/llms.txt",
            "ventures/era-835-underpayment-finder/llms.txt",
            "ventures/error-keeper/llms.txt",
            "ventures/error-tracking-pricing-calculator/llms.txt",
            "ventures/escape-room-pricing-capacity-planner/llms.txt",
            "ventures/espp-tax-calculator/llms.txt",
            "ventures/estate-sale-net-proceeds-calculator/llms.txt",
            "ventures/estate-tax-exemption-calculator/llms.txt",
            "ventures/esthetician-studio-profit-calculator/llms.txt",
            "ventures/estimate-maker/llms.txt",
            "ventures/estimated-tax-penalty-calculator/llms.txt",
            "ventures/etsy-ads-roi-analyzer/llms.txt",
            "ventures/etsy-listing-csv-check/llms.txt",
            "ventures/etsy-statement-profit-analyzer/llms.txt",
            "ventures/etsy-statement-to-journal/llms.txt",
            "ventures/eu-ai-act-risk-checker/llms.txt",
            "ventures/eu-bank-statement-reader/llms.txt",
            "ventures/eu-battery-regulation-checker/llms.txt",
            "ventures/eu-csrd-scope-checker/llms.txt",
            "ventures/eu-data-act-checker/llms.txt",
            "ventures/eu-dora-readiness-checker/llms.txt",
            "ventures/eu-dsa-obligations-checker/llms.txt",
            "ventures/eu-einvoicing-mandate-checker/llms.txt",
            "ventures/eu-espr-readiness-checker/llms.txt",
            "ventures/eu-green-claims-checker/llms.txt",
            "ventures/eu-green-claims-copy-scanner/llms.txt",
            "ventures/eu-packaging-regulation-checker/llms.txt",
            "ventures/eu-pay-gap-report-calculator/llms.txt",
            "ventures/eu-platform-work-directive-checker/llms.txt",
            "ventures/eu-price-reduction-claim-checker/llms.txt",
            "ventures/eu-product-liability-directive-checker/llms.txt",
            "ventures/eu-vat-oss-calculator/llms.txt",
            "ventures/eu-whistleblower-channel-checker/llms.txt",
            "ventures/eudr-scope-checker/llms.txt",
            "ventures/ev-charger-bid-calculator/llms.txt",
            "ventures/ev-charging-site-roi-calculator/llms.txt",
            "ventures/event-rental-inventory-payback-calculator/llms.txt",
            "ventures/event-seating-chart-optimizer/llms.txt",
            "ventures/excess-business-loss-calculator/llms.txt",
            "ventures/exempt-salary-threshold-checker/llms.txt",
            "ventures/exemption-certificate-audit-check/llms.txt",
            "ventures/expense-tracker/llms.txt",
            "ventures/experience-mod-calculator/llms.txt",
            "ventures/exterior-painting-bid-calculator/llms.txt",
            "ventures/facebook-marketplace-fee-calculator/llms.txt",
            "ventures/fair-workweek-schedule-checker/llms.txt",
            "ventures/faire-wholesale-calculator/llms.txt",
            "ventures/family-child-care-time-space-calculator/llms.txt",
            "ventures/farm-crop-mix-optimizer/llms.txt",
            "ventures/farmers-market-booth-calculator/llms.txt",
            "ventures/farmland-lease-cash-rent-vs-crop-share-calculator/llms.txt",
            "ventures/farrier-visit-pricing-calculator/llms.txt",
            "ventures/fba-aged-inventory-fee-analyzer/llms.txt",
            "ventures/fba-reimbursement-claim-finder/llms.txt",
            "ventures/fbar-8938-checker/llms.txt",
            "ventures/feature-flag-pricing-calculator/llms.txt",
            "ventures/feedback-board/llms.txt",
            "ventures/feie-physical-presence-calculator/llms.txt",
            "ventures/fence-bid-calculator/llms.txt",
            "ventures/fers-retirement-planner/llms.txt",
            "ventures/fertilizer-blend-optimizer/llms.txt",
            "ventures/fifo-pick-evidence/llms.txt",
            "ventures/film-tax-credit-net-value-calculator/llms.txt",
            "ventures/final-paycheck-deadline-calculator/llms.txt",
            "ventures/fire-extinguisher-inspection-route-margin/llms.txt",
            "ventures/firebase-rules-check/llms.txt",
            "ventures/fireplace-insert-bid-calculator/llms.txt",
            "ventures/firewood-profit-calculator/llms.txt",
            "ventures/fishing-charter-trip-pricing-calculator/llms.txt",
            "ventures/fishing-crew-share-settlement-calculator/llms.txt",
            "ventures/fitness-studio-membership-calculator/llms.txt",
            "ventures/fiverr-earnings-fee-analyzer/llms.txt",
            "ventures/fiverr-earnings-to-journal/llms.txt",
            "ventures/fix-and-flip-deal-analyzer/llms.txt",
            "ventures/fixed-bid-overrun-forecaster/llms.txt",
            "ventures/flag-keeper/llms.txt",
            "ventures/flaky-test-finder/llms.txt",
            "ventures/flat-roof-bid-calculator/llms.txt",
            "ventures/fleet-ev-vs-diesel-tco-calculator/llms.txt",
            "ventures/fleet-repair-or-replace-planner/llms.txt",
            "ventures/flooring-bid-calculator/llms.txt",
            "ventures/flsa-regular-rate-overtime-audit/llms.txt",
            "ventures/food-truck-event-margin-calculator/llms.txt",
            "ventures/food-truck-prep-mix-optimizer/llms.txt",
            "ventures/forestry-mulching-bid-calculator/llms.txt",
            "ventures/form-2290-hvut-calculator/llms.txt",
            "ventures/form-5500-late-filing-calculator/llms.txt",
            "ventures/form-inbox/llms.txt",
            "ventures/foundation-repair-bid-calculator/llms.txt",
            "ventures/fractional-executive-rate-calculator/llms.txt",
            "ventures/franchise-item-19-reality-check/llms.txt",
            "ventures/franchise-unit-economics-calculator/llms.txt",
            "ventures/free-shipping-threshold-optimizer/llms.txt",
            "ventures/freelance-contract-checker/llms.txt",
            "ventures/freelance-contract-maker/llms.txt",
            "ventures/freelance-dashboard/llms.txt",
            "ventures/freelance-editor-quote-calculator/llms.txt",
            "ventures/freelance-lead-tracker/llms.txt",
            "ventures/freelance-platform-fee-calculator/llms.txt",
            "ventures/freelance-project-picker/llms.txt",
            "ventures/freelance-proposal-maker/llms.txt",
            "ventures/freelance-rate-increase-calculator/llms.txt",
            "ventures/freelance-retainer-calculator/llms.txt",
            "ventures/freelance-retainer-vs-hourly-calculator/llms.txt",
            "ventures/freelance-writer-rate-calculator/llms.txt",
            "ventures/freelancer-schedule-c-categorizer/llms.txt",
            "ventures/freelancer-tax-pack/llms.txt",
            "ventures/freight-accessorial-auditor/llms.txt",
            "ventures/freight-broker-load-margin-calculator/llms.txt",
            "ventures/french-drain-bid-calculator/llms.txt",
            "ventures/fuel-surcharge-schedule-calculator/llms.txt",
            "ventures/fundraising-event-net-calculator/llms.txt",
            "ventures/funeral-price-list-checker/llms.txt",
            "ventures/furnace-bid-calculator/llms.txt",
            "ventures/gabor-granger-price-analyzer/llms.txt",
            "ventures/gambling-loss-deduction-calculator/llms.txt",
            "ventures/garage-door-bid-calculator/llms.txt",
            "ventures/gbp-bulk-location-check/llms.txt",
            "ventures/ghost-kitchen-brand-picker/llms.txt",
            "ventures/ghost-members-export-analyzer/llms.txt",
            "ventures/ghostwriter-book-quote-calculator/llms.txt",
            "ventures/gift-vs-inherit-basis-calculator/llms.txt",
            "ventures/gig-driver-earnings-report-analyzer/llms.txt",
            "ventures/gig-driver-net-pay-calculator/llms.txt",
            "ventures/git-bus-factor-check/llms.txt",
            "ventures/git-exposure-check/llms.txt",
            "ventures/git-timesheet/llms.txt",
            "ventures/glamping-unit-payback-calculator/llms.txt",
            "ventures/golf-simulator-bay-profit-calculator/llms.txt",
            "ventures/good-faith-estimate-generator/llms.txt",
            "ventures/google-ads-editor-csv-check/llms.txt",
            "ventures/google-ads-wasted-spend-analyzer/llms.txt",
            "ventures/google-contacts-csv-check/llms.txt",
            "ventures/google-play-earnings-report-analyzer/llms.txt",
            "ventures/gpsr-product-safety-checker/llms.txt",
            "ventures/gpx-track-check/llms.txt",
            "ventures/grailed-fee-calculator/llms.txt",
            "ventures/grain-store-or-sell-calculator/llms.txt",
            "ventures/grant-deadline-tracker/llms.txt",
            "ventures/grant-indirect-cost-calculator/llms.txt",
            "ventures/grant-reporting-tracker/llms.txt",
            "ventures/grant-writer-proposal-price-calculator/llms.txt",
            "ventures/grape-grower-sell-vs-bottle-calculator/llms.txt",
            "ventures/graphql-introspection-exposure-check/llms.txt",
            "ventures/gravel-driveway-bid-calculator/llms.txt",
            "ventures/grazing-lease-rate-calculator/llms.txt",
            "ventures/grease-trap-pumping-price-calculator/llms.txt",
            "ventures/greenhouse-bench-planner/llms.txt",
            "ventures/gtin-list-check/llms.txt",
            "ventures/gumroad-sales-fee-analyzer/llms.txt",
            "ventures/gumroad-sales-to-journal/llms.txt",
            "ventures/gutter-cleaning-bid-calculator/llms.txt",
            "ventures/gutter-guard-bid-calculator/llms.txt",
            "ventures/gutter-install-bid-calculator/llms.txt",
            "ventures/h1b-weighted-lottery-odds-calculator/llms.txt",
            "ventures/hands-free-language-coach/llms.txt",
            "ventures/handyman-minimum-job-calculator/llms.txt",
            "ventures/hard-money-loan-cost-calculator/llms.txt",
            "ventures/hardwood-refinishing-bid-calculator/llms.txt",
            "ventures/hay-baling-own-vs-hire-calculator/llms.txt",
            "ventures/hay-sale-price-calculator/llms.txt",
            "ventures/hearing-aid-dispensing-margin-calculator/llms.txt",
            "ventures/heat-pump-vs-furnace-calculator/llms.txt",
            "ventures/helm-values-schema-check/llms.txt",
            "ventures/heloc-vs-cash-out-refinance-calculator/llms.txt",
            "ventures/help-keeper/llms.txt",
            "ventures/hidden-unicode-check/llms.txt",
            "ventures/hoa-reserve-fund-calculator/llms.txt",
            "ventures/hoarding-cleanout-bid-calculator/llms.txt",
            "ventures/holiday-light-bid-calculator/llms.txt",
            "ventures/home-care-agency-margin-calculator/llms.txt",
            "ventures/home-elevator-bid-calculator/llms.txt",
            "ventures/home-inspection-business-profit-calculator/llms.txt",
            "ventures/home-inspection-fee-calculator/llms.txt",
            "ventures/home-inspection-report-builder/llms.txt",
            "ventures/home-office-deduction-calculator/llms.txt",
            "ventures/home-sale-exclusion-calculator/llms.txt",
            "ventures/home-sale-net-proceeds-calculator/llms.txt",
            "ventures/home-service-lead-roi-analyzer/llms.txt",
            "ventures/home-staging-bid-calculator/llms.txt",
            "ventures/hood-cleaning-bid-calculator/llms.txt",
            "ventures/horse-boarding-stall-profit-calculator/llms.txt",
            "ventures/hos-trip-planner/llms.txt",
            "ventures/hot-tub-bid-calculator/llms.txt",
            "ventures/house-cleaning-quote-calculator/llms.txt",
            "ventures/house-hack-calculator/llms.txt",
            "ventures/hreflang-reciprocity-check/llms.txt",
            "ventures/hsa-contribution-limit-calculator/llms.txt",
            "ventures/hsa-shoebox-reimbursement-planner/llms.txt",
            "ventures/hubspot-contacts-csv-check/llms.txt",
            "ventures/hunting-lease-income-calculator/llms.txt",
            "ventures/hvac-maintenance-contract-calculator/llms.txt",
            "ventures/hvac-repair-tier-price-calculator/llms.txt",
            "ventures/hydroponic-farm-profit-calculator/llms.txt",
            "ventures/hydroseeding-job-bid-calculator/llms.txt",
            "ventures/iban-list-check/llms.txt",
            "ventures/ice-cream-shop-seasonal-profit-calculator/llms.txt",
            "ventures/ice-dam-removal-bid-calculator/llms.txt",
            "ventures/icp-lens/llms.txt",
            "ventures/ics-calendar-check/llms.txt",
            "ventures/ie-self-employed-tax-set-aside-calculator/llms.txt",
            "ventures/ifta-quarterly-fuel-tax-calculator/llms.txt",
            "ventures/import-landed-cost-calculator/llms.txt",
            "ventures/in-freelancer-advance-tax-set-aside-calculator/llms.txt",
            "ventures/incident-postmortem-timeline/llms.txt",
            "ventures/independent-pharmacy-rx-margin-calculator/llms.txt",
            "ventures/indie-game-payout-calculator/llms.txt",
            "ventures/indoor-play-center-profit-calculator/llms.txt",
            "ventures/influencer-media-kit-generator/llms.txt",
            "ventures/inherited-ira-10-year-withdrawal-planner/llms.txt",
            "ventures/injury-settlement-net-proceeds-calculator/llms.txt",
            "ventures/installment-sale-tax-calculator/llms.txt",
            "ventures/insurance-agency-book-valuation-calculator/llms.txt",
            "ventures/insurance-commission-reconciler/llms.txt",
            "ventures/insurance-denial-appeal-builder/llms.txt",
            "ventures/interior-design-fee-calculator/llms.txt",
            "ventures/interior-door-bid-calculator/llms.txt",
            "ventures/internal-link-planner/llms.txt",
            "ventures/interview-content-studio/llms.txt",
            "ventures/investor-update-builder/llms.txt",
            "ventures/invoice-aging-late-payer-analyzer/llms.txt",
            "ventures/invoice-factoring-cost-calculator/llms.txt",
            "ventures/invoice-maker/llms.txt",
            "ventures/invoice-payment-terms-calculator/llms.txt",
            "ventures/iolta-three-way-reconciliation-checker/llms.txt",
            "ventures/ios-privacy-manifest-check/llms.txt",
            "ventures/irrigation-install-bid-calculator/llms.txt",
            "ventures/irrigation-winterization-bid-calculator/llms.txt",
            "ventures/irs-iris-1099-csv-check/llms.txt",
            "ventures/iso-exercise-amt-calculator/llms.txt",
            "ventures/janitorial-bid-calculator/llms.txt",
            "ventures/job-application-tracker/llms.txt",
            "ventures/job-margin-variance/llms.txt",
            "ventures/job-offer-total-comp-calculator/llms.txt",
            "ventures/json-ld-rich-result-validator/llms.txt",
            "ventures/json-to-types-generator/llms.txt",
            "ventures/junk-car-buyer-offer-calculator/llms.txt",
            "ventures/junk-removal-bid-calculator/llms.txt",
            "ventures/jwt-security-check/llms.txt",
            "ventures/jwt-verification-misuse-check/llms.txt",
            "ventures/k8s-deprecated-api-check/llms.txt",
            "ventures/k8s-pod-security-check/llms.txt",
            "ventures/k8s-requests-rightsizer/llms.txt",
            "ventures/k8s-resource-limits-check/llms.txt",
            "ventures/k8s-rollout-safety-check/llms.txt",
            "ventures/kdp-royalty-calculator/llms.txt",
            "ventures/kdp-royalty-report-analyzer/llms.txt",
            "ventures/kdp-royalty-to-journal/llms.txt",
            "ventures/kickstarter-fee-calculator/llms.txt",
            "ventures/kids-birthday-party-package-profit-calculator/llms.txt",
            "ventures/kitchen-tile-backsplash-bid-calculator/llms.txt",
            "ventures/klaviyo-profile-csv-check/llms.txt",
            "ventures/ko-fi-payout-to-journal/llms.txt",
            "ventures/kombucha-brewery-profit-calculator/llms.txt",
            "ventures/lambda-memory-rightsizer/llms.txt",
            "ventures/lambda-vs-fargate-cost-breakeven/llms.txt",
            "ventures/land-survey-bid-calculator/llms.txt",
            "ventures/landlord-repair-or-replace-planner/llms.txt",
            "ventures/landscape-lighting-bid-calculator/llms.txt",
            "ventures/laser-cutting-engraving-job-price-calculator/llms.txt",
            "ventures/lash-studio-profit-calculator/llms.txt",
            "ventures/lash-studio-service-profit-calculator/llms.txt",
            "ventures/late-invoice-collections-kit/llms.txt",
            "ventures/laundromat-acquisition-offer-calculator/llms.txt",
            "ventures/laundromat-machine-payback-calculator/llms.txt",
            "ventures/law-firm-realization-rate-calculator/llms.txt",
            "ventures/lawn-aeration-overseeding-bid-calculator/llms.txt",
            "ventures/lawn-care-bid-calculator/llms.txt",
            "ventures/lcl-vs-fcl-container-calculator/llms.txt",
            "ventures/lead-response-time-analyzer/llms.txt",
            "ventures/lemonsqueezy-payout-to-journal/llms.txt",
            "ventures/liability-audit/llms.txt",
            "ventures/license-compat-check/llms.txt",
            "ventures/license-drift-check/llms.txt",
            "ventures/license-keeper/llms.txt",
            "ventures/lien-waiver-checker/llms.txt",
            "ventures/like-kind-exchange-1031-calculator/llms.txt",
            "ventures/link-keeper/llms.txt",
            "ventures/liquidation-pallet-bid-calculator/llms.txt",
            "ventures/listen-and-learn-audio/llms.txt",
            "ventures/llm-api-pricing-calculator/llms.txt",
            "ventures/llm-call-cost-scan/llms.txt",
            "ventures/llm-output-regression-diff/llms.txt",
            "ventures/llm-spend-guard/llms.txt",
            "ventures/llm-usage-log-analyzer/llms.txt",
            "ventures/llms-txt-generator/llms.txt",
            "ventures/lockfile-license-check/llms.txt",
            "ventures/locksmith-bid-calculator/llms.txt",
            "ventures/locum-tenens-vs-employed-calculator/llms.txt",
            "ventures/log-management-pricing-calculator/llms.txt",
            "ventures/lot-split-calculator/llms.txt",
            "ventures/ltl-freight-class-estimator/llms.txt",
            "ventures/lumper-fee-reimbursement-calculator/llms.txt",
            "ventures/mailchimp-audience-csv-check/llms.txt",
            "ventures/maple-syrup-sugarbush-profit-calculator/llms.txt",
            "ventures/market-event-picker/llms.txt",
            "ventures/market-garden-bed-planner/llms.txt",
            "ventures/marketplace-fee-compare/llms.txt",
            "ventures/massage-therapist-profit-calculator/llms.txt",
            "ventures/matrix-profile-explorer/llms.txt",
            "ventures/mcp-config-risk-check/llms.txt",
            "ventures/mechanics-lien-deadline-calculator/llms.txt",
            "ventures/med-spa-treatment-profit-calculator/llms.txt",
            "ventures/medicaid-lookback-penalty-calculator/llms.txt",
            "ventures/medical-bill-error-checker/llms.txt",
            "ventures/medical-billing-pricing-calculator/llms.txt",
            "ventures/medical-courier-route-margin/llms.txt",
            "ventures/medicare-irmaa-cliff-calculator/llms.txt",
            "ventures/meeting-action-items/llms.txt",
            "ventures/mega-backdoor-roth-calculator/llms.txt",
            "ventures/menu-engineering-calculator/llms.txt",
            "ventures/mercari-fee-calculator/llms.txt",
            "ventures/merchant-cash-advance-true-cost-calculator/llms.txt",
            "ventures/merchant-feed-check/llms.txt",
            "ventures/merchant-of-record-fee-calculator/llms.txt",
            "ventures/meta-ads-fatigue-analyzer/llms.txt",
            "ventures/meta-catalog-csv-check/llms.txt",
            "ventures/metal-roof-bid-calculator/llms.txt",
            "ventures/meter-keeper/llms.txt",
            "ventures/microgreens-tray-planner/llms.txt",
            "ventures/midterm-rental-calculator/llms.txt",
            "ventures/mileage-deduction-calculator/llms.txt",
            "ventures/mileage-deduction-method-calculator/llms.txt",
            "ventures/mileage-log/llms.txt",
            "ventures/mini-golf-course-profit-calculator/llms.txt",
            "ventures/mini-split-bid-calculator/llms.txt",
            "ventures/mobile-bartender-event-quote/llms.txt",
            "ventures/mobile-detailing-bid-calculator/llms.txt",
            "ventures/mobile-detailing-day-planner/llms.txt",
            "ventures/mobile-home-park-valuation-calculator/llms.txt",
            "ventures/mobile-mechanic-visit-pricing-calculator/llms.txt",
            "ventures/mobile-oil-change-route-profit-calculator/llms.txt",
            "ventures/mobile-phlebotomy-route-profit-calculator/llms.txt",
            "ventures/mobile-signing-agent-day-picker/llms.txt",
            "ventures/mobile-tire-van-job-picker/llms.txt",
            "ventures/mobile-vet-house-call-fee-calculator/llms.txt",
            "ventures/mobile-welding-job-price-calculator/llms.txt",
            "ventures/mold-remediation-bid-calculator/llms.txt",
            "ventures/mortgage-escrow-analysis-checker/llms.txt",
            "ventures/mortgage-extra-payment-vs-invest-calculator/llms.txt",
            "ventures/mortgage-points-break-even-calculator/llms.txt",
            "ventures/mosquito-control-program-pricing-calculator/llms.txt",
            "ventures/moving-bid-calculator/llms.txt",
            "ventures/mrr-pulse/llms.txt",
            "ventures/mrr-waterfall-calculator/llms.txt",
            "ventures/mt940-statement-check/llms.txt",
            "ventures/mushroom-fruiting-room-planner/llms.txt",
            "ventures/music-distribution-fee-calculator/llms.txt",
            "ventures/music-lesson-break-even/llms.txt",
            "ventures/music-teacher-studio-profit-calculator/llms.txt",
            "ventures/nacha-file-validator/llms.txt",
            "ventures/nail-tech-booth-rent-calculator/llms.txt",
            "ventures/nanny-tax-calculator/llms.txt",
            "ventures/nat-gateway-cost-advisor/llms.txt",
            "ventures/neon-bill-estimator/llms.txt",
            "ventures/newsletter-sponsorship-rate-calculator/llms.txt",
            "ventures/niit-calculator/llms.txt",
            "ventures/nis2-scope-checker/llms.txt",
            "ventures/nl-zzp-tax-set-aside-calculator/llms.txt",
            "ventures/no-show-fee-calculator/llms.txt",
            "ventures/no-tax-on-tips-overtime-calculator/llms.txt",
            "ventures/node-version-drift-check/llms.txt",
            "ventures/notary-trip-quote/llms.txt",
            "ventures/npm-audit-triage/llms.txt",
            "ventures/npm-deployment-evidence/llms.txt",
            "ventures/npm-lifecycle-script-check/llms.txt",
            "ventures/npm-lockfile-duplicates-check/llms.txt",
            "ventures/npm-provenance-check/llms.txt",
            "ventures/nsa-idr-offer-calculator/llms.txt",
            "ventures/nua-employer-stock-calculator/llms.txt",
            "ventures/ny-llc-transparency-act-tracker/llms.txt",
            "ventures/nz-gst-registration-checker/llms.txt",
            "ventures/nz-sole-trader-tax-set-aside-calculator/llms.txt",
            "ventures/object-storage-pricing-calculator/llms.txt",
            "ventures/obsidian-plugin-review-check/llms.txt",
            "ventures/ofx-file-check/llms.txt",
            "ventures/oidc-trust-policy-check/llms.txt",
            "ventures/oil-gas-mineral-rights-offer-calculator/llms.txt",
            "ventures/oncall-load-analyzer/llms.txt",
            "ventures/online-business-valuation-calculator/llms.txt",
            "ventures/open-floor-robots/llms.txt",
            "ventures/open-house-plans/llms.txt",
            "ventures/open-robot-mower/llms.txt",
            "ventures/openapi-breaking-change-check/llms.txt",
            "ventures/optical-dispensary-margin-calculator/llms.txt",
            "ventures/osha-trir-dart-calculator/llms.txt",
            "ventures/overtime-pay-calculator/llms.txt",
            "ventures/owner-operator-cpm-calculator/llms.txt",
            "ventures/owner-operator-load-chain-planner/llms.txt",
            "ventures/owner-operator-per-diem-calculator/llms.txt",
            "ventures/oyster-farm-growout-planner/llms.txt",
            "ventures/package-exports-drift-check/llms.txt",
            "ventures/paddle-payout-to-journal/llms.txt",
            "ventures/padel-club-profit-calculator/llms.txt",
            "ventures/page-seo-audit/llms.txt",
            "ventures/paid-sick-leave-accrual-calculator/llms.txt",
            "ventures/painting-bid-calculator/llms.txt",
            "ventures/paintless-dent-repair-quote-calculator/llms.txt",
            "ventures/parcel-dim-weight-calculator/llms.txt",
            "ventures/parcel-late-delivery-refund-finder/llms.txt",
            "ventures/parking-lot-striping-bid-calculator/llms.txt",
            "ventures/party-bus-charter-profit-calculator/llms.txt",
            "ventures/pastured-poultry-profit-planner/llms.txt",
            "ventures/patent-maintenance-fee-planner/llms.txt",
            "ventures/patio-door-bid-calculator/llms.txt",
            "ventures/patreon-fee-calculator/llms.txt",
            "ventures/patreon-members-churn-analyzer/llms.txt",
            "ventures/patreon-payout-to-journal/llms.txt",
            "ventures/paver-patio-bid-calculator/llms.txt",
            "ventures/pawn-loan-profit-calculator/llms.txt",
            "ventures/pay-application-generator/llms.txt",
            "ventures/pay-transparency-directive-checker/llms.txt",
            "ventures/payment-processor-fee-comparison-calculator/llms.txt",
            "ventures/payment-reconciliation-workbench/llms.txt",
            "ventures/payoneer-statement-to-journal/llms.txt",
            "ventures/paypal-activity-to-journal/llms.txt",
            "ventures/payroll-hours-csv-check/llms.txt",
            "ventures/payroll-register-to-journal/llms.txt",
            "ventures/payroll-tax-deposit-penalty-calculator/llms.txt",
            "ventures/pdf-accessibility-tag-check/llms.txt",
            "ventures/pension-lump-sum-vs-annuity-calculator/llms.txt",
            "ventures/percentage-rent-audit-checker/llms.txt",
            "ventures/pergola-bid-calculator/llms.txt",
            "ventures/persona-conversation-simulator/llms.txt",
            "ventures/personal-trainer-package-pricing-calculator/llms.txt",
            "ventures/pest-control-bid-calculator/llms.txt",
            "ventures/pet-boarding-daycare-profit-calculator/llms.txt",
            "ventures/pet-grooming-bid-calculator/llms.txt",
            "ventures/pet-sitting-platform-fee-calculator/llms.txt",
            "ventures/pet-waste-removal-route-calculator/llms.txt",
            "ventures/pg-stat-statements-analyzer/llms.txt",
            "ventures/phone-repair-shop-profit-calculator/llms.txt",
            "ventures/photo-addon-pricing-calculator/llms.txt",
            "ventures/photo-booth-event-quote/llms.txt",
            "ventures/physician-wrvu-compensation-calculator/llms.txt",
            "ventures/physician-wrvu-contract-calculator/llms.txt",
            "ventures/pickleball-facility-pro-forma/llms.txt",
            "ventures/pilot-car-escort-run-profit-calculator/llms.txt",
            "ventures/pinned-actions-check/llms.txt",
            "ventures/pip-audit-triage/llms.txt",
            "ventures/pipedrive-import-csv-check/llms.txt",
            "ventures/pizzeria-profit-calculator/llms.txt",
            "ventures/plantation-shutter-bid-calculator/llms.txt",
            "ventures/plumber-flat-rate-price-calculator/llms.txt",
            "ventures/podcast-feed-check/llms.txt",
            "ventures/podcast-sponsorship-rate-calculator/llms.txt",
            "ventures/pole-barn-bid-calculator/llms.txt",
            "ventures/pollination-contract-checker/llms.txt",
            "ventures/pool-opening-closing-price-calculator/llms.txt",
            "ventures/pool-plaster-bid-calculator/llms.txt",
            "ventures/pool-route-pricing/llms.txt",
            "ventures/pool-service-route-calculator/llms.txt",
            "ventures/popcorn-ceiling-bid-calculator/llms.txt",
            "ventures/portable-restroom-event-quote/llms.txt",
            "ventures/poshmark-fee-calculator/llms.txt",
            "ventures/poshmark-sales-report-analyzer/llms.txt",
            "ventures/postgres-explain-analyzer/llms.txt",
            "ventures/postgres-index-auditor/llms.txt",
            "ventures/pottery-piece-pricing-calculator/llms.txt",
            "ventures/pour-cost-calculator/llms.txt",
            "ventures/powder-coating-job-price-calculator/llms.txt",
            "ventures/ppf-ceramic-coating-price-calculator/llms.txt",
            "ventures/ppp-pricing-table-generator/llms.txt",
            "ventures/pql-radar/llms.txt",
            "ventures/pressure-washing-bid-calculator/llms.txt",
            "ventures/price-drop-watcher/llms.txt",
            "ventures/price-elasticity-estimator/llms.txt",
            "ventures/price-increase-breakeven-calculator/llms.txt",
            "ventures/print-on-demand-profit-calculator/llms.txt",
            "ventures/private-chef-service-price-calculator/llms.txt",
            "ventures/private-pilot-training-cost-calculator/llms.txt",
            "ventures/private-practice-payer-mix-calculator/llms.txt",
            "ventures/private-school-tuition-discount-calculator/llms.txt",
            "ventures/process-server-day-picker/llms.txt",
            "ventures/process-server-fee-calculator/llms.txt",
            "ventures/product-analytics-pricing-calculator/llms.txt",
            "ventures/production-mix-optimizer/llms.txt",
            "ventures/project-estimate-calibrator/llms.txt",
            "ventures/project-staffing-margin-optimizer/llms.txt",
            "ventures/prometheus-cardinality-cost/llms.txt",
            "ventures/prop-firm-challenge-calculator/llms.txt",
            "ventures/propane-delivery-route-margin/llms.txt",
            "ventures/property-management-profit-calculator/llms.txt",
            "ventures/property-tax-appeal-calculator/llms.txt",
            "ventures/proposal-maker/llms.txt",
            "ventures/provider-credentialing-delay-cost-calculator/llms.txt",
            "ventures/pslf-vs-refinance-calculator/llms.txt",
            "ventures/pte-tax-election-calculator/llms.txt",
            "ventures/pto-accrual-liability-calculator/llms.txt",
            "ventures/public-record-watch/llms.txt",
            "ventures/publish-kit/llms.txt",
            "ventures/pwa-installability-check/llms.txt",
            "ventures/pypi-provenance-check/llms.txt",
            "ventures/qbi-deduction-calculator/llms.txt",
            "ventures/qcd-calculator/llms.txt",
            "ventures/qif-file-check/llms.txt",
            "ventures/qsbs-exclusion-calculator/llms.txt",
            "ventures/quarterly-estimated-tax-calendar/llms.txt",
            "ventures/quickbooks-chart-of-accounts-csv-check/llms.txt",
            "ventures/quickbooks-iif-file-check/llms.txt",
            "ventures/quickbooks-import-csv-check/llms.txt",
            "ventures/quote-follow-up-timing/llms.txt",
            "ventures/radon-mitigation-bid-calculator/llms.txt",
            "ventures/rd-tax-credit-calculator/llms.txt",
            "ventures/rds-instance-cost-advisor/llms.txt",
            "ventures/rds-instance-rightsizer/llms.txt",
            "ventures/real-estate-photographer-shoot-profit-calculator/llms.txt",
            "ventures/real-estate-professional-status-calculator/llms.txt",
            "ventures/recipe-costing-calculator/llms.txt",
            "ventures/recompete-radar/llms.txt",
            "ventures/redirect-chain-check/llms.txt",
            "ventures/redirect-map-check/llms.txt",
            "ventures/referral-keeper/llms.txt",
            "ventures/referrer-permissions-policy-check/llms.txt",
            "ventures/regex-redos-check/llms.txt",
            "ventures/release-notes-generator/llms.txt",
            "ventures/renewal-rent-optimizer/llms.txt",
            "ventures/rent-increase-notice-checker/llms.txt",
            "ventures/rent-roll-delinquency-analyzer/llms.txt",
            "ventures/rent-vs-buy-breakeven-calculator/llms.txt",
            "ventures/rental-dscr-calculator/llms.txt",
            "ventures/rental-fleet-size-optimizer/llms.txt",
            "ventures/rental-ledger/llms.txt",
            "ventures/rental-property-schedule-e-categorizer/llms.txt",
            "ventures/rental-rent-optimizer/llms.txt",
            "ventures/repository-branch-hygiene/llms.txt",
            "ventures/required-checks-drift-check/llms.txt",
            "ventures/requirements-pin-check/llms.txt",
            "ventures/reseller-books/llms.txt",
            "ventures/restaurant-delivery-commission-analyzer/llms.txt",
            "ventures/restaurant-labor-cost-daypart-analyzer/llms.txt",
            "ventures/restaurant-pos-menu-mix-analyzer/llms.txt",
            "ventures/restaurant-tip-pool-calculator/llms.txt",
            "ventures/retainage-cashflow-calculator/llms.txt",
            "ventures/retaining-wall-bid-calculator/llms.txt",
            "ventures/retirement-plan-startup-credit-calculator/llms.txt",
            "ventures/retirement-withdrawal-sequencer/llms.txt",
            "ventures/retreat-profit-pricing-calculator/llms.txt",
            "ventures/returns-policy-cost-analyzer/llms.txt",
            "ventures/rev-rec/llms.txt",
            "ventures/revenue-target-lead-planner/llms.txt",
            "ventures/reverb-fee-calculator/llms.txt",
            "ventures/review-reply-desk/llms.txt",
            "ventures/revolut-business-statement-to-journal/llms.txt",
            "ventures/rfp-compliance-matrix/llms.txt",
            "ventures/rmd-calculator/llms.txt",
            "ventures/roofing-bid-calculator/llms.txt",
            "ventures/roofing-insurance-supplement-finder/llms.txt",
            "ventures/roommate-rent-splitter/llms.txt",
            "ventures/roth-conversion-bracket-fill-calculator/llms.txt",
            "ventures/route-account-pruner/llms.txt",
            "ventures/route-stop-optimizer/llms.txt",
            "ventures/rsu-withholding-gap-calculator/llms.txt",
            "ventures/rule-72t-sepp-calculator/llms.txt",
            "ventures/rush-job-sequencer/llms.txt",
            "ventures/rv-boat-storage-lot-calculator/llms.txt",
            "ventures/rv-rental-host-profit-calculator/llms.txt",
            "ventures/s-corp-basis-tracker/llms.txt",
            "ventures/s-corp-reasonable-compensation-calculator/llms.txt",
            "ventures/s3-bucket-exposure-check/llms.txt",
            "ventures/s3-storage-class-advisor/llms.txt",
            "ventures/s3-storage-class-savings/llms.txt",
            "ventures/saas-annual-plan-discount-calculator/llms.txt",
            "ventures/saas-cac-payback-calculator/llms.txt",
            "ventures/saas-efficiency-metrics-calculator/llms.txt",
            "ventures/saas-feature-packaging-optimizer/llms.txt",
            "ventures/saas-renewal-planner/llms.txt",
            "ventures/saas-seat-true-up/llms.txt",
            "ventures/saas-tier-price-optimizer/llms.txt",
            "ventures/safe-dilution-calculator/llms.txt",
            "ventures/saints-by-candlelight/llms.txt",
            "ventures/salary-range-posting-check/llms.txt",
            "ventures/sales-cadence-builder/llms.txt",
            "ventures/sales-call-notes-desk/llms.txt",
            "ventures/sales-commission-plan-comparison-calculator/llms.txt",
            "ventures/sales-export-to-journal/llms.txt",
            "ventures/sales-quota-capacity-planner/llms.txt",
            "ventures/sales-seasonality-forecaster/llms.txt",
            "ventures/salesforce-lead-import-csv-check/llms.txt",
            "ventures/salt-cap-calculator/llms.txt",
            "ventures/sauna-cold-plunge-install-bid-calculator/llms.txt",
            "ventures/sawmill-custom-sawing-calculator/llms.txt",
            "ventures/sba-loan-capacity-calculator/llms.txt",
            "ventures/sbir-budget-builder/llms.txt",
            "ventures/sbom-diff-check/llms.txt",
            "ventures/schengen-90-180-day-calculator/llms.txt",
            "ventures/scope-creep-change-order-calculator/llms.txt",
            "ventures/scrap-gold-buy-price-calculator/llms.txt",
            "ventures/scrap-metal-yard-payout-calculator/llms.txt",
            "ventures/screen-print-job-quote-calculator/llms.txt",
            "ventures/screened-porch-bid-calculator/llms.txt",
            "ventures/search-api-pricing-calculator/llms.txt",
            "ventures/seasonal-buy-quantity-optimizer/llms.txt",
            "ventures/secret-santa-draw/llms.txt",
            "ventures/section-1256-futures-tax-calculator/llms.txt",
            "ventures/section-174a-catchup-calculator/llms.txt",
            "ventures/section-83b-election-calculator/llms.txt",
            "ventures/security-camera-bid-calculator/llms.txt",
            "ventures/security-deposit-return-calculator/llms.txt",
            "ventures/security-headers-check/llms.txt",
            "ventures/security-questionnaire-matcher/llms.txt",
            "ventures/security-txt-check/llms.txt",
            "ventures/self-employed-health-insurance-deduction-calculator/llms.txt",
            "ventures/self-employed-schedule-c-categorizer/llms.txt",
            "ventures/self-employment-tax-calculator/llms.txt",
            "ventures/self-hosted-saas-stack/llms.txt",
            "ventures/self-serve-dog-wash-profit-calculator/llms.txt",
            "ventures/self-storage-rate-increase-calculator/llms.txt",
            "ventures/self-storage-unit-mix-optimizer/llms.txt",
            "ventures/seller-net-sheet/llms.txt",
            "ventures/senior-deduction-calculator/llms.txt",
            "ventures/sep-ira-contribution-calculator/llms.txt",
            "ventures/sep-ira-vs-solo-401k-calculator/llms.txt",
            "ventures/sepa-pain001-validator/llms.txt",
            "ventures/sepa-pain002-status-reader/llms.txt",
            "ventures/sepa-payment-file-validator/llms.txt",
            "ventures/septic-pumping-bid-calculator/llms.txt",
            "ventures/service-hourly-yield-analyzer/llms.txt",
            "ventures/service-van-stock-optimizer/llms.txt",
            "ventures/severance-package-calculator/llms.txt",
            "ventures/sewer-hydrojet-bid-calculator/llms.txt",
            "ventures/sewer-line-replace-bid-calculator/llms.txt",
            "ventures/sg-freelancer-tax-set-aside-calculator/llms.txt",
            "ventures/shared-kitchen-rate-planner/llms.txt",
            "ventures/shaved-ice-stand-profit-calculator/llms.txt",
            "ventures/shed-install-bid-calculator/llms.txt",
            "ventures/sheep-goat-flock-profit-planner/llms.txt",
            "ventures/shift-cover-optimizer/llms.txt",
            "ventures/shift-rotation-schedule-generator/llms.txt",
            "ventures/shipping-box-size-optimizer/llms.txt",
            "ventures/shoe-repair-shop-profit-calculator/llms.txt",
            "ventures/shop-rate-calculator/llms.txt",
            "ventures/shopify-a11y-evidence/llms.txt",
            "ventures/shopify-customer-csv-check/llms.txt",
            "ventures/shopify-discount-leakage-analyzer/llms.txt",
            "ventures/shopify-inventory-csv-check/llms.txt",
            "ventures/shopify-inventory-reorder-planner/llms.txt",
            "ventures/shopify-payments-fee-analyzer/llms.txt",
            "ventures/shopify-payout-profit-analyzer/llms.txt",
            "ventures/shopify-payout-to-journal/llms.txt",
            "ventures/shopify-product-csv-check/llms.txt",
            "ventures/shopify-to-woocommerce-converter/llms.txt",
            "ventures/siding-bid-calculator/llms.txt",
            "ventures/sign-keeper/llms.txt",
            "ventures/sign-language-interpreter-rate-calculator/llms.txt",
            "ventures/sign-shop-job-pricing-calculator/llms.txt",
            "ventures/sitemap-lastmod-freshness-check/llms.txt",
            "ventures/ski-snowboard-tune-shop-profit-calculator/llms.txt",
            "ventures/skill-manifest-check/llms.txt",
            "ventures/skylight-install-bid-calculator/llms.txt",
            "ventures/slo-burn-rate-alerts/llms.txt",
            "ventures/slopsquatting-check/llms.txt",
            "ventures/slot-keeper/llms.txt",
            "ventures/small-batch-run-size-optimizer/llms.txt",
            "ventures/small-business-acquisition-calculator/llms.txt",
            "ventures/sms-segment-cost-calculator/llms.txt",
            "ventures/snow-plow-contract-calculator/llms.txt",
            "ventures/snow-removal-bid-calculator/llms.txt",
            "ventures/snowflake-warehouse-cost-advisor/llms.txt",
            "ventures/soc2-readiness-checker/llms.txt",
            "ventures/social-preview-check/llms.txt",
            "ventures/social-security-benefits-tax-calculator/llms.txt",
            "ventures/social-security-claiming-age-calculator/llms.txt",
            "ventures/social-security-earnings-test-calculator/llms.txt",
            "ventures/social-security-survivor-spousal-benefit-calculator/llms.txt",
            "ventures/sod-install-bid-calculator/llms.txt",
            "ventures/soffit-fascia-bid-calculator/llms.txt",
            "ventures/solar-land-lease-offer-calculator/llms.txt",
            "ventures/solar-panel-cleaning-quote-planner/llms.txt",
            "ventures/solar-payback-calculator/llms.txt",
            "ventures/solar-pv-bid-calculator/llms.txt",
            "ventures/solo-401k-contribution-calculator/llms.txt",
            "ventures/source-map-leak-check/llms.txt",
            "ventures/speaker-fee-calculator/llms.txt",
            "ventures/speech-to-text-pricing-calculator/llms.txt",
            "ventures/sponsor-ready/llms.txt",
            "ventures/sports-official-game-fee-calculator/llms.txt",
            "ventures/spray-foam-bid-calculator/llms.txt",
            "ventures/sql-migration-lock-check/llms.txt",
            "ventures/square-catalog-csv-check/llms.txt",
            "ventures/square-sales-to-journal/llms.txt",
            "ventures/squarespace-product-csv-check/llms.txt",
            "ventures/sri-check/llms.txt",
            "ventures/staffing-markup-calculator/llms.txt",
            "ventures/stair-lift-bid-calculator/llms.txt",
            "ventures/standby-generator-bid-calculator/llms.txt",
            "ventures/standby-generator-install-price-calculator/llms.txt",
            "ventures/startup-exit-waterfall-calculator/llms.txt",
            "ventures/startup-option-value-calculator/llms.txt",
            "ventures/state-residency-day-counter/llms.txt",
            "ventures/status-keeper/llms.txt",
            "ventures/stocker-cattle-margin-calculator/llms.txt",
            "ventures/stockx-seller-payout-calculator/llms.txt",
            "ventures/storage-auction-max-bid-calculator/llms.txt",
            "ventures/str-arbitrage-lease-calculator/llms.txt",
            "ventures/str-cleaning-fee-pricing-calculator/llms.txt",
            "ventures/str-host-payout-calculator/llms.txt",
            "ventures/str-nightly-rate-optimizer/llms.txt",
            "ventures/str-occupancy-tax-calculator/llms.txt",
            "ventures/str-tax-loophole-calculator/llms.txt",
            "ventures/str-turnover-crew-planner/llms.txt",
            "ventures/str-turnover-scheduler/llms.txt",
            "ventures/stripe-churn-cohort-analyzer/llms.txt",
            "ventures/stripe-failed-payment-recovery-analyzer/llms.txt",
            "ventures/stripe-payout-to-journal/llms.txt",
            "ventures/structured-data-drift-check/llms.txt",
            "ventures/structured-settlement-buyout-calculator/llms.txt",
            "ventures/stucco-repair-bid-calculator/llms.txt",
            "ventures/student-loan-rap-ibr-standard-calculator/llms.txt",
            "ventures/studio-class-slot-optimizer/llms.txt",
            "ventures/stump-grinding-price-calculator/llms.txt",
            "ventures/subcontractor-cashflow-planner/llms.txt",
            "ventures/subdomain-takeover-check/llms.txt",
            "ventures/subpath-robots-check/llms.txt",
            "ventures/subscription-audit-from-statement/llms.txt",
            "ventures/subscription-price-impact/llms.txt",
            "ventures/subscription-proration-calculator/llms.txt",
            "ventures/substack-subscriber-export-analyzer/llms.txt",
            "ventures/sump-pump-bid-calculator/llms.txt",
            "ventures/sunroom-bid-calculator/llms.txt",
            "ventures/supabase-bill-estimator/llms.txt",
            "ventures/supabase-rls-check/llms.txt",
            "ventures/supplier-price-creep-checker/llms.txt",
            "ventures/support-desk/llms.txt",
            "ventures/support-staffing-planner/llms.txt",
            "ventures/surety-bond-capacity-calculator/llms.txt",
            "ventures/survey-keeper/llms.txt",
            "ventures/swim-lesson-pool-rental-profit-calculator/llms.txt",
            "ventures/syndication-waterfall-calculator/llms.txt",
            "ventures/tailor-alterations-shop-profit-calculator/llms.txt",
            "ventures/tattoo-piece-profit-calculator/llms.txt",
            "ventures/tax-deed-auction-max-bid-planner/llms.txt",
            "ventures/tax-lien-certificate-yield-calculator/llms.txt",
            "ventures/tax-loss-harvesting-calculator/llms.txt",
            "ventures/tax-lot-sale-optimizer/llms.txt",
            "ventures/tax-season-client-picker/llms.txt",
            "ventures/tcgplayer-fee-calculator/llms.txt",
            "ventures/teachable-payout-to-journal/llms.txt",
            "ventures/teachers-pay-teachers-earnings-analyzer/llms.txt",
            "ventures/tenant-security-deposit-deadline-checker/llms.txt",
            "ventures/tender-bid-readiness/llms.txt",
            "ventures/tent-rental-job-profit-calculator/llms.txt",
            "ventures/terraform-plan-blast-radius-check/llms.txt",
            "ventures/terraform-plan-cost-estimate/llms.txt",
            "ventures/terraform-plan-secret-exposure-check/llms.txt",
            "ventures/testimonial-keeper/llms.txt",
            "ventures/tfsa-over-contribution-checker/llms.txt",
            "ventures/therapy-8-minute-rule-calculator/llms.txt",
            "ventures/thrift-haul-buy-picker/llms.txt",
            "ventures/thumbtack-lead-roi-calculator/llms.txt",
            "ventures/ticket-resale-profit-calculator/llms.txt",
            "ventures/tiktok-shop-fee-calculator/llms.txt",
            "ventures/tiktok-shop-settlement-analyzer/llms.txt",
            "ventures/tile-layout-optimizer/llms.txt",
            "ventures/tile-layout-planner/llms.txt",
            "ventures/timber-sale-offer-checker/llms.txt",
            "ventures/time-off-request-planner/llms.txt",
            "ventures/time-tracker/llms.txt",
            "ventures/tip-fica-credit-calculator/llms.txt",
            "ventures/tip-pool-compliance-calculator/llms.txt",
            "ventures/tire-shop-ticket-margin-calculator/llms.txt",
            "ventures/toilet-replacement-bid-calculator/llms.txt",
            "ventures/tournament-pairing-manager/llms.txt",
            "ventures/tow-motor-club-call-calculator/llms.txt",
            "ventures/tow-truck-rate-calculator/llms.txt",
            "ventures/trade-bid-studio/llms.txt",
            "ventures/trade-show-roi-calculator/llms.txt",
            "ventures/training-gpu-pricing-calculator/llms.txt",
            "ventures/trampoline-park-profit-calculator/llms.txt",
            "ventures/translation-job-picker/llms.txt",
            "ventures/translator-project-quote/llms.txt",
            "ventures/travel-nurse-contract-comparison-calculator/llms.txt",
            "ventures/tree-service-bid-calculator/llms.txt",
            "ventures/trial-conversion-timing-analyzer/llms.txt",
            "ventures/trial-converter/llms.txt",
            "ventures/truck-detention-pay-calculator/llms.txt",
            "ventures/trump-account-calculator/llms.txt",
            "ventures/tuckpointing-bid-calculator/llms.txt",
            "ventures/turo-earnings-report-analyzer/llms.txt",
            "ventures/turo-host-payout-calculator/llms.txt",
            "ventures/tutor-effective-hourly-rate-calculator/llms.txt",
            "ventures/tutor-package-pricing-calculator/llms.txt",
            "ventures/tutor-weekly-schedule-optimizer/llms.txt",
            "ventures/tutoring-group-schedule-optimizer/llms.txt",
            "ventures/twitch-payout-calculator/llms.txt",
            "ventures/u-pick-farm-profit-planner/llms.txt",
            "ventures/ucr-fee-calculator/llms.txt",
            "ventures/ugc-creator-rate-calculator/llms.txt",
            "ventures/uk-100k-tax-trap-calculator/llms.txt",
            "ventures/uk-bonus-tax-calculator/llms.txt",
            "ventures/uk-capital-allowances-calculator/llms.txt",
            "ventures/uk-capital-gains-tax-calculator/llms.txt",
            "ventures/uk-child-benefit-charge-calculator/llms.txt",
            "ventures/uk-cis-deduction-refund-calculator/llms.txt",
            "ventures/uk-company-car-tax-calculator/llms.txt",
            "ventures/uk-crypto-cgt-calculator/llms.txt",
            "ventures/uk-directors-loan-s455-calculator/llms.txt",
            "ventures/uk-dividend-tax-calculator/llms.txt",
            "ventures/uk-eis-seis-relief-calculator/llms.txt",
            "ventures/uk-emi-share-option-tax-calculator/llms.txt",
            "ventures/uk-employer-hiring-cost-calculator/llms.txt",
            "ventures/uk-gift-aid-higher-rate-relief-calculator/llms.txt",
            "ventures/uk-holiday-pay-calculator/llms.txt",
            "ventures/uk-inheritance-tax-calculator/llms.txt",
            "ventures/uk-ir35-inside-outside-calculator/llms.txt",
            "ventures/uk-landlord-section-24-calculator/llms.txt",
            "ventures/uk-late-payment-interest-calculator/llms.txt",
            "ventures/uk-lifetime-isa-vs-pension-calculator/llms.txt",
            "ventures/uk-marriage-allowance-calculator/llms.txt",
            "ventures/uk-mileage-allowance-calculator/llms.txt",
            "ventures/uk-minimum-wage-checker/llms.txt",
            "ventures/uk-money-tools-finder/llms.txt",
            "ventures/uk-mortgage-overpayment-calculator/llms.txt",
            "ventures/uk-mtd-income-tax-checker/llms.txt",
            "ventures/uk-payments-on-account-calculator/llms.txt",
            "ventures/uk-pension-annual-allowance-calculator/llms.txt",
            "ventures/uk-pension-withdrawal-tax-calculator/llms.txt",
            "ventures/uk-rd-tax-relief-calculator/llms.txt",
            "ventures/uk-redundancy-pay-calculator/llms.txt",
            "ventures/uk-rent-a-room-relief-calculator/llms.txt",
            "ventures/uk-salary-sacrifice-calculator/llms.txt",
            "ventures/uk-savings-interest-tax-calculator/llms.txt",
            "ventures/uk-scottish-income-tax-calculator/llms.txt",
            "ventures/uk-self-assessment-late-penalty-calculator/llms.txt",
            "ventures/uk-self-assessment-tax-calculator/llms.txt",
            "ventures/uk-self-employed-tax-set-aside-calculator/llms.txt",
            "ventures/uk-shared-parental-pay-planner/llms.txt",
            "ventures/uk-simplified-expenses-calculator/llms.txt",
            "ventures/uk-sole-trader-vs-limited-company-calculator/llms.txt",
            "ventures/uk-stamp-duty-calculator/llms.txt",
            "ventures/uk-state-pension-ni-years-checker/llms.txt",
            "ventures/uk-statutory-maternity-pay-calculator/llms.txt",
            "ventures/uk-statutory-residence-test-checker/llms.txt",
            "ventures/uk-statutory-sick-pay-calculator/llms.txt",
            "ventures/uk-student-loan-repayment-calculator/llms.txt",
            "ventures/uk-take-home-pay-calculator/llms.txt",
            "ventures/uk-tax-code-checker/llms.txt",
            "ventures/uk-tax-free-childcare-calculator/llms.txt",
            "ventures/uk-trading-allowance-calculator/llms.txt",
            "ventures/uk-umbrella-company-take-home-calculator/llms.txt",
            "ventures/uk-unfair-dismissal-compensation-calculator/llms.txt",
            "ventures/uk-vat-flat-rate-scheme-calculator/llms.txt",
            "ventures/uk-vat-registration-checker/llms.txt",
            "ventures/uk-working-from-home-tax-relief-calculator/llms.txt",
            "ventures/upholstery-shop-job-profit-calculator/llms.txt",
            "ventures/upstash-redis-bill-estimator/llms.txt",
            "ventures/uptime-monitoring-pricing-calculator/llms.txt",
            "ventures/upwork-connects-roi-calculator/llms.txt",
            "ventures/upwork-earnings-fee-analyzer/llms.txt",
            "ventures/upwork-earnings-to-journal/llms.txt",
            "ventures/us-freelancer-tax-set-aside-calculator/llms.txt",
            "ventures/us-substantial-presence-test-calculator/llms.txt",
            "ventures/usage-based-pricing-simulator/llms.txt",
            "ventures/used-car-lot-aging-planner/llms.txt",
            "ventures/van-westendorp-pricing-analyzer/llms.txt",
            "ventures/vcard-contacts-check/llms.txt",
            "ventures/vector-db-cost-calculator/llms.txt",
            "ventures/vegetable-garden-planting-calendar/llms.txt",
            "ventures/vehicle-wrap-bid-calculator/llms.txt",
            "ventures/vending-machine-planogram-optimizer/llms.txt",
            "ventures/vending-machine-route-margin/llms.txt",
            "ventures/vendor-change-evidence/llms.txt",
            "ventures/vendor-change-watch/llms.txt",
            "ventures/vendor-contract-clause-reader/llms.txt",
            "ventures/vendor-rate-break-even/llms.txt",
            "ventures/vercel-bill-estimator/llms.txt",
            "ventures/veterinarian-associate-pay-calculator/llms.txt",
            "ventures/veterinary-dental-estimate-calculator/llms.txt",
            "ventures/veterinary-wellness-plan-pricing-calculator/llms.txt",
            "ventures/video-hosting-pricing-calculator/llms.txt",
            "ventures/vineyard-grape-vs-wine-calculator/llms.txt",
            "ventures/vinyl-liner-bid-calculator/llms.txt",
            "ventures/visit-keeper/llms.txt",
            "ventures/voiceover-project-rate-calculator/llms.txt",
            "ventures/volunteer-shift-scheduler/llms.txt",
            "ventures/vpat-acr-generator/llms.txt",
            "ventures/vscode-extension-drift-check/llms.txt",
            "ventures/w2-efw2-file-validator/llms.txt",
            "ventures/wage-garnishment-limit-calculator/llms.txt",
            "ventures/waitlist-keeper/llms.txt",
            "ventures/walk-in-shower-bid-calculator/llms.txt",
            "ventures/walk-in-tub-bid-calculator/llms.txt",
            "ventures/walmart-marketplace-calculator/llms.txt",
            "ventures/warehouse-slotting-optimizer/llms.txt",
            "ventures/wash-and-fold-price-calculator/llms.txt",
            "ventures/wash-sale-checker/llms.txt",
            "ventures/water-damage-drying-estimate-calculator/llms.txt",
            "ventures/water-heater-bid-calculator/llms.txt",
            "ventures/water-softener-bid-calculator/llms.txt",
            "ventures/water-well-drilling-bid-calculator/llms.txt",
            "ventures/waterfront-rental-season-planner/llms.txt",
            "ventures/webhook-relay/llms.txt",
            "ventures/webhook-signature-debugger/llms.txt",
            "ventures/wedding-budget-allocator/llms.txt",
            "ventures/wedding-day-timeline-builder/llms.txt",
            "ventures/wedding-florist-proposal-calculator/llms.txt",
            "ventures/wedding-flower-order-optimizer/llms.txt",
            "ventures/wedding-officiant-fee-calculator/llms.txt",
            "ventures/wedding-photographer-profit-calculator/llms.txt",
            "ventures/wedding-venue-date-pricing-optimizer/llms.txt",
            "ventures/wedding-videographer-profit-calculator/llms.txt",
            "ventures/weekly-staff-schedule-maker/llms.txt",
            "ventures/well-pump-bid-calculator/llms.txt",
            "ventures/whatnot-sales-report-analyzer/llms.txt",
            "ventures/whatnot-seller-payout/llms.txt",
            "ventures/wheelchair-ramp-bid-calculator/llms.txt",
            "ventures/where-to-sell-calculator/llms.txt",
            "ventures/which-job-first/llms.txt",
            "ventures/wholesale-line-sheet-maker/llms.txt",
            "ventures/wholesale-real-estate-offer-calculator/llms.txt",
            "ventures/wholesale-vs-retail-pricing-calculator/llms.txt",
            "ventures/wildlife-exclusion-bid-calculator/llms.txt",
            "ventures/window-cleaning-bid-calculator/llms.txt",
            "ventures/window-replacement-bid-calculator/llms.txt",
            "ventures/window-tinting-bid-calculator/llms.txt",
            "ventures/winery-excise-tax-calculator/llms.txt",
            "ventures/wise-statement-to-journal/llms.txt",
            "ventures/wix-product-csv-check/llms.txt",
            "ventures/woocommerce-product-csv-check/llms.txt",
            "ventures/wordpress-plugin-review-check/llms.txt",
            "ventures/worker-classification-checker/llms.txt",
            "ventures/workers-comp-audit-dispute-checker/llms.txt",
            "ventures/workers-comp-premium-calculator/llms.txt",
            "ventures/workflow-audit/llms.txt",
            "ventures/xero-bank-statement-csv-check/llms.txt",
            "ventures/xero-contacts-csv-check/llms.txt",
            "ventures/xero-invoice-csv-check/llms.txt",
            "ventures/yoga-pilates-studio-class-profit-calculator/llms.txt",
            "ventures/youth-lineup-rotator/llms.txt",
            "ventures/youtube-adsense-payout-to-journal/llms.txt",
            "ventures/youtube-chapters-check/llms.txt",
            "ventures/youtube-revenue-rpm-analyzer/llms.txt",
            "ventures/youtube-sponsorship-rate-calculator/llms.txt",
            "ventures/za-freelancer-provisional-tax-set-aside-calculator/llms.txt",
            "ventures/zoho-crm-import-csv-check/llms.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e598bed78a177cbab83516e73a4cf4b7dee3dc67",
          "at": 1793336376000,
          "title": "Add llms.txt for four tools; link checker finds pages under site/",
          "pr": 11685,
          "agent": "Claude",
          "models": [],
          "track": "polish",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "several products at once"
          },
          "files": 7,
          "lines_added": 107,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-four-more-tools-an-assistant-can-describe.md",
            "ventures/equipment-rental-break-even/llms.txt",
            "ventures/quote-margin-check/llms.txt",
            "ventures/tender-radar/llms.txt",
            "ventures/vendor-watch/llms.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "09215a2b9f97912979e0d3ca355b1a227dc81d65",
          "at": 1793380257000,
          "title": "polish: llms.txt generator reads site/index.html, six more starter files",
          "pr": 11813,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "polish",
          "bullets": [
            "llms.txt generator reads site/index.html; six more starter files"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "several products at once"
          },
          "files": 11,
          "lines_added": 176,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-llms-txt-for-sites-in-a-subfolder.md",
            "docs/reports/polish-2026-10-30-llms-site-subfolder.md",
            "prompts/runs/2026-10-30-session_01AcxTtHVD89HfLuZsnnGvwD.json",
            "ventures/garmin-world-traveler-watchface/llms.txt",
            "ventures/photos-import-tools/llms.txt",
            "ventures/print-atelier/llms.txt",
            "ventures/real-estate-agent-photo-app/llms.txt",
            "ventures/retail-pilot-intel/llms.txt",
            "ventures/world-clock-widget/llms.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "commercial-photo-license-calculator",
      "merges": [
        {
          "sha": "6648b0a3ad99a02f1d043e2842f64a76e5ca3947",
          "at": 1793325013000,
          "title": "commercial-photo-license-calculator: the extension-fee page runs again (opt-out now remembered)",
          "pr": 11548,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "license-extension-fee.html imports extension.mjs, which imports calculate from app.mjs.",
          "area": {
            "kind": "product",
            "name": "commercial-photo-license-calculator"
          },
          "files": 2,
          "lines_added": 18,
          "lines_removed": 1,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "cra-evidence-desk",
      "merges": [
        {
          "sha": "e4183a82d2b0fe5c6066bfec03a778ff164ac647",
          "at": 1793379633000,
          "title": "llms.txt for CRA Evidence Desk, Shopify Permission Drift and MCP Supply-Chain Watch",
          "pr": 11811,
          "agent": "Claude",
          "models": [],
          "track": "polish",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "cra-evidence-desk"
          },
          "files": 4,
          "lines_added": 48,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-llms-txt-for-three-browser-tools.md",
            "ventures/cra-evidence-desk/llms.txt",
            "ventures/mcp-supply-chain-watch/llms.txt",
            "ventures/shopify-permission-drift/llms.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "dupehound",
      "merges": [
        {
          "sha": "f256270e7109c056a52a8202ef48d898a58dea4a",
          "at": 1793377662000,
          "title": "dupehound: visible keyboard focus on result rows",
          "pr": 11804,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "dupehound: visible keyboard focus on result rows"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "dupehound"
          },
          "files": 4,
          "lines_added": 61,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-dupehound-keyboard-focus-was-invisible.md",
            "prompts/runs/2026-10-30-session_01E5sJKizw9WcC1AHsRGyfno.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "photo-editing",
      "merges": [
        {
          "sha": "d0bd4d986eeeca58c63890cfec71ed8d92b41ce2",
          "at": 1793373505000,
          "title": "photo-editing: cull --picks breaks rejected picks down by reason",
          "pr": 11793,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "photo-editing: cull --picks breaks rejected picks down by reason"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "photo-editing"
          },
          "files": 5,
          "lines_added": 70,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-why-the-cull-rejected-your-picks.md",
            "prompts/runs/2026-10-30-session_01AcxTtHzPoetAH1jnWEqKvG.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "quick-pick-survey",
      "merges": [
        {
          "sha": "5c5537fe08b9b4a4cf09c4475df7685d91d0ac82",
          "at": 1793359283000,
          "title": "quick-pick-survey: 1000 items through the route with Postgres",
          "pr": 11754,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "quick-pick-survey: 1000 items through the route with Postgres, next() under 60 ms at 1000 answers"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "quick-pick-survey"
          },
          "files": 5,
          "lines_added": 165,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-pairwise-survey-1000-items-through-the-route.md",
            "prompts/runs/2026-10-30-session_01AcxTtHbrDxbGrCABpTXRXb.json",
            "ventures/quick-pick-survey/src/app/api/trials/deepBudget.integration.test.ts"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "sales-agent",
      "merges": [
        {
          "sha": "ddce9dd6924ad9e636cc04233fae95f8bd034cd9",
          "at": 1793357896000,
          "title": "sales-agent: fifth reply set, four missed opt-outs patched, post",
          "pr": 11747,
          "agent": "Claude",
          "models": [],
          "track": "redteam",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "sales-agent"
          },
          "files": 4,
          "lines_added": 52,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-sales-reply-reader-missed-4-of-10-opt-outs.md",
            "ventures/sales-agent/eval/fresh-2026-10-30.jsonl"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "severance-package-calculator",
      "merges": [
        {
          "sha": "3b9f0db3984fc9977b2223d582c6ce44000497d3",
          "at": 1793347723000,
          "title": "redteam: severance-package-calculator 2026-10-30",
          "pr": 11716,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: severance-package-calculator 2026-10-30, catch rate 4/8 to 8/8",
            "redteam record: PR 11716"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "severance-package-calculator"
          },
          "files": 2,
          "lines_added": 201,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01EhTJVLxnR3BYhiXC7VviBs.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "shift-cover-optimizer",
      "merges": [
        {
          "sha": "c40f7ec9c9543bc6bb10ee0bd9cd04930bd77cf3",
          "at": 1793324514000,
          "title": "shift-cover-optimizer: build demand from a timestamped POS or booking export",
          "pr": 11517,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": null,
          "bullets": [
            "shift-cover-optimizer: build demand from a timestamped POS or booking export",
            "shift-roster-builder: call-out guide's covered count re-measured (22 -> 24 of 29) so its test passes"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "shift-cover-optimizer"
          },
          "files": 9,
          "lines_added": 240,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-30-from-pos-export-to-shift-plan.md",
            "docs/reports/2026-10-30-shift-cover-history-import.md"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "water-well-drilling-bid-calculator",
      "merges": [
        {
          "sha": "9d31e868433b70b0a35b9254964a17c9faf81a42",
          "at": 1793347509000,
          "title": "redteam: water-well-drilling-bid-calculator usage.mjs 2026-10-30",
          "pr": 11715,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: water-well-drilling-bid-calculator usage.mjs 2026-10-30"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "water-well-drilling-bid-calculator"
          },
          "files": 2,
          "lines_added": 185,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01EhTJVKfBEEasG3TgNrQ4nv.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    }
  ],
  "research": [
    {
      "name": "heavy-hydraulics",
      "merges": [
        {
          "sha": "6d80c033da28b6fa79b39e536f432e1ed43546a3",
          "at": 1793323162000,
          "title": "research/heavy-hydraulics: milestone 2k, 20 bar LS margin brackets the idle break-even",
          "pr": 11536,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 2k, 20 bar LS margin brackets the idle break-even",
            "prompts: run record for heavy-hydraulics 2k"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 4,
          "lines_added": 60,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKkWo3QZwLPwEDkEh6D.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c3894246349457e61a188f7771343249ea1f5f0b",
          "at": 1793329098000,
          "title": "research/heavy-hydraulics: milestone 2l, break-even LS margin against open-centre neutral pressure",
          "pr": 11639,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 7,
          "lines_added": 162,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-the-line-between-load-sensing-and-open-centre.md",
            "research/heavy-hydraulics/experiments/ranking_map.py",
            "research/heavy-hydraulics/experiments/ranking_map.svg",
            "research/heavy-hydraulics/experiments/ranking_map_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3dc5fbf4ea3b1fc376e231106d9b08451984c14b",
          "at": 1793329748000,
          "title": "research/heavy-hydraulics: milestone 2m, break-even LS margin vs load factor",
          "pr": 11643,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 2m, break-even LS margin against load factor",
            "post: shorten description"
          ],
          "detail": "Prediction refuted on direction; log, results and post.",
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 5,
          "lines_added": 113,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-does-a-machine-that-idles-more-favour-load-sensing.md",
            "prompts/runs/2026-10-30-session_01AcxTtKJorMi7JNAfLqMk2Y.json",
            "research/heavy-hydraulics/experiments/ranking_map_lf.py",
            "research/heavy-hydraulics/experiments/ranking_map_lf_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "38d1d3b167291f80d40574ef8145cd698884b4a8",
          "at": 1793333419000,
          "title": "research/heavy-hydraulics: milestone 2n, PVG 32 neutral drop puts LS break-even at 28 bar",
          "pr": 11674,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 2n, neutral drop from Danfoss PVG 32 curve puts LS break-even at 28 bar"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 6,
          "lines_added": 200,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-excavator-valve-neutral-drop-flips-load-sensing.md",
            "prompts/runs/2026-10-30-session_01AcxTtJZHUBXdKz6roP5vrw.json",
            "research/heavy-hydraulics/experiments/pvg_neutral.py",
            "research/heavy-hydraulics/experiments/pvg_neutral_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f77453b00db13acdb700f600b153e3a12006de5d",
          "at": 1793341653000,
          "title": "research/heavy-hydraulics: milestone 6c, paper draft carries the PVG 32 neutral-drop result",
          "pr": 11705,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 6c, paper draft carries the PVG 32 neutral-drop result",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 5,
          "lines_added": 62,
          "lines_removed": 10,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKnbpidqyixuYwq6ygC.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6b8c5a3a38747acf2ab32db69ecfd597e4ec2c65",
          "at": 1793355202000,
          "title": "research/heavy-hydraulics: 2o standby-flow sweep of the load-sensing break-even",
          "pr": 11743,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: 2o standby-flow sweep of the load-sensing break-even"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 5,
          "lines_added": 103,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-standby-flow-load-sensing-excavator.md",
            "prompts/runs/2026-10-30-session_01AcxTtJPLRsqm1DjGVtnVMg.json",
            "research/heavy-hydraulics/experiments/standby_sweep.py",
            "research/heavy-hydraulics/experiments/standby_sweep_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3676f0aa0340dfda6667e6347d2a04af70023607",
          "at": 1793363418000,
          "title": "research/heavy-hydraulics: milestone 3a, open-centre flow sharing costs cycle time",
          "pr": 11764,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 3a, open-centre flow sharing costs dig-phase cycle time",
            "shorten post description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 7,
          "lines_added": 188,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-open-centre-excavator-valve-cycle-time.md",
            "prompts/runs/2026-10-30-session_01AcxTtGuGT1mw5GBsyWmxrA.json",
            "research/heavy-hydraulics/experiments/flow_share.py",
            "research/heavy-hydraulics/experiments/flow_share_results.txt",
            "research/heavy-hydraulics/src/heavy_hydraulics/flow_share.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d471358d1d07347f2d52658c9b97efbce5342b79",
          "at": 1793377405000,
          "title": "research/heavy-hydraulics: milestone 3b, open-centre slowdown depends on the bypass closing law",
          "pr": 11801,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 3b, open-centre slowdown depends on the bypass closing law",
            "prompts: run record for heavy-hydraulics 3b"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 7,
          "lines_added": 128,
          "lines_removed": 8,
          "added_files": [
            "docs/posts/2026-10-30-open-centre-slowdown-depends-on-the-bypass-law.md",
            "prompts/runs/2026-10-30-session_01E5sJKnqefoq9677evxSA1m.json",
            "research/heavy-hydraulics/experiments/flow_share_shape.py",
            "research/heavy-hydraulics/experiments/flow_share_shape_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "0adae16095a829c3429a6b8e8b30183898422670",
          "at": 1793383778000,
          "title": "research/heavy-hydraulics: milestone 3c, open-centre cycle penalty is not a shared pump limit",
          "pr": 11822,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 3c, open-centre cycle penalty is not a shared pump limit"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 6,
          "lines_added": 138,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-open-centre-cycle-penalty-is-not-a-pump-limit.md",
            "prompts/runs/2026-10-30-session_01AcxTtJydw1gK8hwrs14Syc.json",
            "research/heavy-hydraulics/experiments/flow_share_ls.py",
            "research/heavy-hydraulics/experiments/flow_share_ls_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7ba7fac4cb6c936856fea5d65f73f76207e39716",
          "at": 1793383861000,
          "title": "research/heavy-hydraulics: milestone 3c, PVG 32 bypass closes in the dead band",
          "pr": 11824,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 3c, PVG 32 bypass closes in the dead band; open-centre time penalty median 0, with a post"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 5,
          "lines_added": 81,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-does-an-open-centre-valve-slow-the-dig.md",
            "prompts/runs/2026-10-30-session_01AcxTtHYMPB5TPpXwoL2qkx.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "262221591a62e3d0fbbbb14f06e56911f5216785",
          "at": 1793387371000,
          "title": "research/heavy-hydraulics: milestone 3e, sizing bracket fix and validity limit",
          "pr": 11833,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 3e, fix sizing bracket; large-k rows are a model-validity limit"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 7,
          "lines_added": 94,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-30-when-a-valve-model-stops-describing-a-valve.md",
            "prompts/runs/2026-10-30-session_01AcxTtGTTgAdXzMmCXwCnSo.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "0a308880416be9a9d2b85a743d8c1f3e517e6a8d",
          "at": 1793398997000,
          "title": "research/heavy-hydraulics: 3f time-penalised energy ranking",
          "pr": 11928,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: 3f time-penalised energy ranking",
            "post: shorten seo fields"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 5,
          "lines_added": 151,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-slow-excavator-valve-energy.md",
            "prompts/runs/2026-10-30-session_01E5sJKiXUQaB6gxrVxrhwYi.json",
            "research/heavy-hydraulics/experiments/time_penalised.py",
            "research/heavy-hydraulics/experiments/time_penalised_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "llm-coding-inference",
      "merges": [
        {
          "sha": "e948f237c3599a15832516a3ffaf1d4658743062",
          "at": 1793319658000,
          "title": "research/llm-coding-inference: milestone 6ak, informedness screen for coder-cell audits",
          "pr": 11512,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/llm-coding-inference: milestone 6ak planned (informedness screen)",
            "research/llm-coding-inference: milestone 6ak results, post, run record"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 5,
          "lines_added": 382,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-a-pilot-screen-for-llm-label-audits.md",
            "prompts/runs/2026-10-30-session_01E5sJKkg8cyfNvV1hMKpYuJ.json",
            "research/llm-coding-inference/experiments/h6ak_screen.py",
            "research/llm-coding-inference/experiments/h6ak_screen.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "434fe2e2e3814d721fe77feaa2a694c81ac6a2bb",
          "at": 1793329822000,
          "title": "research/llm-coding-inference: milestone 6al, prevalence guard on the informedness screen",
          "pr": 11644,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/llm-coding-inference: milestone 6al, prevalence guard on the informedness screen"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 4,
          "lines_added": 399,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtGGsvk6DFY7tRELAvD.json",
            "research/llm-coding-inference/experiments/h6al_guard.py",
            "research/llm-coding-inference/experiments/h6al_guard.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c56dc17714f5c1e174cf773c703fc1d1b7339445",
          "at": 1793330353000,
          "title": "research/llm-coding-inference: fold guarded informedness screen (6ak, 6al) into the paper",
          "pr": 11651,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/llm-coding-inference: fold the guarded informedness screen (6ak, 6al) into the paper; post",
            "post front matter; run record",
            "shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 3,
          "lines_added": 56,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-when-to-trust-an-llm-coder-cells.md",
            "prompts/runs/2026-10-30-session_01E5sJKj8X4AeRxrBVt1sTPR.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4b91ea50e80ea4f5175a758d258d26ed314018c9",
          "at": 1793341496000,
          "title": "research/llm-coding-inference: milestone 6am, J_hat cutoff sweep",
          "pr": 11703,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/llm-coding-inference: milestone 6am, sweep of the guarded screen's J_hat cutoff",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 5,
          "lines_added": 353,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-does-the-informedness-cutoff-matter.md",
            "prompts/runs/2026-10-30-session_01E5sJKo9k6R3oS4izDuL7Ne.json",
            "research/llm-coding-inference/experiments/h6am_tau.py",
            "research/llm-coding-inference/experiments/h6am_tau.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3c5c5d1eb45a646ac853cb7b93d5278bead9becd",
          "at": 1793344150000,
          "title": "research/llm-coding-inference: milestone 6am in paper section 6, blog post",
          "pr": 11708,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/llm-coding-inference: add milestone 6am to paper section 6, blog post",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 3,
          "lines_added": 63,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-is-the-informedness-cutoff-a-knife-edge.md",
            "prompts/runs/2026-10-30-session_01AcxTtH1yH29EQcvzXYE8Uh.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c3c9855fc30232f7cc7c03183f6937d71f0757f6",
          "at": 1793372559000,
          "title": "llm-coding-inference: screened audit-design rule as library code + post",
          "pr": 11787,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "llm-coding-inference: screened audit-design rule as llmci.audit_design, 3 tests, post"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 7,
          "lines_added": 145,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-a-two-line-rule-for-when-to-stratify-an-audit.md",
            "prompts/runs/2026-10-30-session_01AcxTtJnD6WepeMk4VUDTUK.json",
            "research/llm-coding-inference/llmci/audit_design.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5ec147ae75bd5b991c2dd0693a0b54e30a65ea83",
          "at": 1793379590000,
          "title": "research/llm-coding-inference: plan_audit, one call from a pilot to the audit plan (7b)",
          "pr": 11810,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "llm-coding-inference: plan_audit, one call from a pilot to the audit plan (7b) + post",
            "Shorten post description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 5,
          "lines_added": 96,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-one-call-from-a-pilot-to-the-rest-of-the-audit.md",
            "prompts/runs/2026-10-30-session_01EhTJVKrLSWn9xTvVCkTPU8.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3fbf3a7366808bdd8beb7e74e98fa9dbbb5f3d51",
          "at": 1793388211000,
          "title": "research/llm-coding-inference: audit_interval closes plan_audit; end-to-end check (7c)",
          "pr": 11837,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/llm-coding-inference: audit_interval closes plan_audit; end-to-end library check (7c)",
            "post: shorten seo fields",
            "post: description under 160"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 9,
          "lines_added": 296,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-audit-library-matches-the-experiments.md",
            "prompts/runs/2026-10-30-session_01E5sJKmv62mk4LcwNmBTYRN.json",
            "research/llm-coding-inference/experiments/h7c_end_to_end.py",
            "research/llm-coding-inference/experiments/h7c_end_to_end.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "aeca1188d1e83fe74dc1ee3e4ee20a44ea354444",
          "at": 1793391002000,
          "title": "research/llm-coding-inference: 7d, 2,000 draws settle admiration n=1000 coverage",
          "pr": 11843,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/llm-coding-inference: 7d, 2,000 draws settle the admiration n=1000 coverage (94.1%), with a post",
            "post: shorten seo_title"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 5,
          "lines_added": 123,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-500-draws-can-mislead-by-two-points.md",
            "prompts/runs/2026-10-30-session_01AcxTtGhYjyNGjkq8BwCCss.json",
            "research/llm-coding-inference/experiments/h7d_admiration_2000.py",
            "research/llm-coding-inference/experiments/h7d_admiration_2000.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "lowcomm-training",
      "merges": [
        {
          "sha": "975844bf1172367f72f04464c72f519720d51a3a",
          "at": 1793318916000,
          "title": "research/lowcomm-training: milestone 6g, rand-k rule scored on held-out top-k cells",
          "pr": 11506,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/lowcomm-training: milestone 6g, rand-k rule scored on held-out top-k cells"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "lowcomm-training"
          },
          "files": 5,
          "lines_added": 202,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-does-a-rand-k-rule-predict-top-k-lowcomm.md",
            "prompts/runs/2026-10-30-session_01AcxTtHvvCScaZeni1t7a9R.json",
            "research/lowcomm-training/experiments/gpt_composition/topk_heldout.py",
            "research/lowcomm-training/experiments/gpt_composition/topk_heldout_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "55106e3895a66785b4b358d849e161d226fe2148",
          "at": 1793324196000,
          "title": "research/lowcomm-training: milestone 6h, composition rule at a second model size",
          "pr": 11513,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/lowcomm-training: milestone 6h plan and scale-up harness (second model size)",
            "research/lowcomm-training: 6h runs in progress (partial outputs)",
            "research/lowcomm-training: milestone 6h outcome, post, run record",
            "docs: shorten post description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "lowcomm-training"
          },
          "files": 7,
          "lines_added": 320,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-does-compression-cost-shrink-with-model-size-lowcomm.md",
            "prompts/runs/2026-10-30-session_01E5sJKo9m5bzaWbfnuopTwy.json",
            "research/lowcomm-training/experiments/gpt_scale/run.out",
            "research/lowcomm-training/experiments/gpt_scale/scale.jsonl",
            "research/lowcomm-training/experiments/gpt_scale/scale.py",
            "research/lowcomm-training/experiments/gpt_scale/scale_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "810ff07db2ae2b50f1cfedb7b2bcb061a300fa66",
          "at": 1793329630000,
          "title": "research/lowcomm-training: milestone 6i, more seeds on the H=64 cells (negative result)",
          "pr": 11607,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/lowcomm-training: milestone 6i pre-registration (more seeds on the H=64 cells)",
            "research/lowcomm-training: milestone 6i outcome, four more seeds on the H=64 cells (negative)",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "lowcomm-training"
          },
          "files": 7,
          "lines_added": 202,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-more-seeds-did-not-fix-the-scaling-rule.md",
            "prompts/runs/2026-10-30-session_01E5sJKjG4zW4AFFYXDbgkdH.json",
            "research/lowcomm-training/experiments/gpt_scale/run_extra.out",
            "research/lowcomm-training/experiments/gpt_scale/scale_results_6i.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "dc6cadc8ac69d0d176cae497691a429b0eaeff18",
          "at": 1793355121000,
          "title": "research/lowcomm-training: milestone 6j, compression excess vs H at size 2",
          "pr": 11731,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "research/lowcomm-training: milestone 6j, compression excess vs H at size 2",
          "area": {
            "kind": "research",
            "name": "lowcomm-training"
          },
          "files": 6,
          "lines_added": 132,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtKsxQaB2ewFoVni32c.json",
            "research/lowcomm-training/experiments/gpt_scale/run_hshape.out",
            "research/lowcomm-training/experiments/gpt_scale/scale_results_6j.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "399fba0ee30a7f1f7370c523336397200223743a",
          "at": 1793367213000,
          "title": "research/lowcomm-training: milestone 6k, seed fill at H = 16, 32 (size 2)",
          "pr": 11761,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/lowcomm-training: plan milestone 6k (seed fill at H = 16, 32, size 2)",
            "research/lowcomm-training: 6k run log (in progress)",
            "research/lowcomm-training: milestone 6k outcome, size-2 excess is flat over H = 16 to 64"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "lowcomm-training"
          },
          "files": 6,
          "lines_added": 196,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtHCs7Hp8vxRxZpBdTR.json",
            "research/lowcomm-training/experiments/gpt_scale/run_hfill.out",
            "research/lowcomm-training/experiments/gpt_scale/scale_results_6k.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "70a43d68384a1f9e60cd987cdf3fa29f827ef4e2",
          "at": 1793377655000,
          "title": "research/lowcomm-training: 6l six seeds at H = 128, size-2 excess is flat in H",
          "pr": 11803,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "lowcomm-training: plan milestone 6l (H = 128 seeds 3 to 5), h128 job set",
            "lowcomm-training: 6l H = 128 runs in progress (partial output)",
            "lowcomm-training: 6l H = 128 runs, 4 of 6 done (partial)",
            "lowcomm-training: 6l six seeds at H = 128, size-2 excess is flat in H (+post)",
            "post: shorten description"
          ],
          "detail": "Planned before running; torch install still pending, no results yet.",
          "area": {
            "kind": "research",
            "name": "lowcomm-training"
          },
          "files": 7,
          "lines_added": 204,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-is-the-compression-excess-flat-in-h-lowcomm.md",
            "prompts/runs/2026-10-30-session_01E5sJKjFgfn7WRqRm9i2S7D.json",
            "research/lowcomm-training/experiments/gpt_scale/run_h128.out",
            "research/lowcomm-training/experiments/gpt_scale/scale_results_6l.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "06061c2fda0b1562cc493fcfe6a8979235ab6402",
          "at": 1793390975000,
          "title": "research/lowcomm-training: milestone 6m, four forms in H scored leave-one-cell-out",
          "pr": 11842,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/lowcomm-training: milestone 6m, four forms in H scored leave-one-cell-out (not separable)"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "lowcomm-training"
          },
          "files": 5,
          "lines_added": 165,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-four-curves-one-plateau-low-communication-training.md",
            "prompts/runs/2026-10-30-session_01AcxTtLsdpx9GWxk8RGtACP.json",
            "research/lowcomm-training/experiments/gpt_scale/refit.py",
            "research/lowcomm-training/experiments/gpt_scale/refit_results_6m.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f65bfecb644df6485e4658ea65ed1ef2c421599f",
          "at": 1793398221000,
          "title": "research/lowcomm-training: 7c, compression paper section from 6a-6m",
          "pr": 11918,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/lowcomm-training: 7c, draft the compression paper section from 6a-6m",
            "prompts: run record for lowcomm 7c",
            "docs: shorten post front matter"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "lowcomm-training"
          },
          "files": 4,
          "lines_added": 112,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-what-does-compression-cost-diloco-paper-section-lowcomm.md",
            "prompts/runs/2026-10-30-session_01AcxTtHCwpwgL4U4sjP9Ntr.json",
            "research/lowcomm-training/paper/section_compression.md"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "marine-hull",
      "merges": [
        {
          "sha": "81038d2a198deeb49de8f3570c45cfc6f2f71e8c",
          "at": 1793322576000,
          "title": "research/marine-hull: milestone 6d, value of a finite-skill sea-state forecast",
          "pr": 11523,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 6d, value of a finite-skill sea-state forecast",
            "prompts: run record for marine-hull 6d"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 5,
          "lines_added": 274,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-how-good-must-a-sea-state-forecast-be-for-a-solar-boat.md",
            "prompts/runs/2026-10-30-session_01AcxTtJtgnW8o7MGktz1bYe.json",
            "research/marine-hull/experiments/results_solar_seastate_forecast.txt",
            "research/marine-hull/experiments/run_solar_seastate_forecast.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6925cb53e635400d5879c0f0326b6a723e7a25c9",
          "at": 1793348491000,
          "title": "research/marine-hull: paper draft limits cite milestone 6d",
          "pr": 11722,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: paper draft limits cite milestone 6d (forecast skill)"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 2,
          "lines_added": 49,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKnyVScXUtgtSbSRXP4.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ca14fe7a4120585fba3e3b5758b4187166964284",
          "at": 1793383838000,
          "title": "research/marine-hull: milestone 6e, persistence forecast for sea-state back-off",
          "pr": 11823,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 6e, persistence forecast for sea-state back-off",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 6,
          "lines_added": 185,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-yesterdays-sea-state-solar-boat.md",
            "prompts/runs/2026-10-30-session_01AcxTtKPjGKTinJfyQq3Mhf.json",
            "research/marine-hull/experiments/results_solar_seastate_persist.txt",
            "research/marine-hull/experiments/run_solar_seastate_persist.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "37ebb56e6ff24f4d504444af5c75035c296c1115",
          "at": 1793387396000,
          "title": "research/marine-hull: milestone 6f, persistence forecast on iid and 3-day sea spells",
          "pr": 11834,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 6f, persistence forecast on an iid sea and 3-day spells",
            "Fix writeups path in run record"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 6,
          "lines_added": 274,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-persistence-forecast-needs-long-spells.md",
            "prompts/runs/2026-10-30-session_01AcxTtJQaLkwEiAUJJCJHYg.json",
            "research/marine-hull/experiments/results_solar_seastate_persist_iid.txt",
            "research/marine-hull/experiments/run_solar_seastate_persist_iid.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f8bc637ccb8c960be78421528008f66fc53e3b81",
          "at": 1793394675000,
          "title": "research/marine-hull: milestone 3a, first Wigley tank point",
          "pr": 11884,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 3a, Michell + ITTC against a published Wigley tank point",
            "post: shorten front matter"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 9,
          "lines_added": 199,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-first-tank-number-wigley-hull.md",
            "prompts/runs/2026-10-30-session_01AcxTtKFShUimRYF2oLaNDD.json",
            "research/marine-hull/experiments/results_wigley_tank.txt",
            "research/marine-hull/experiments/run_wigley_tank.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "67ebd48f30535ad5e153d78cb918c943a489a959",
          "at": 1793394934000,
          "title": "research/marine-hull: milestone 6g, persistence with three sea states",
          "pr": 11888,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 6g, persistence with three sea states",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 6,
          "lines_added": 263,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-persistence-three-sea-states-solar-boat.md",
            "prompts/runs/2026-10-30-session_01AcxTtLmWz2Z81foNbGUFfr.json",
            "research/marine-hull/experiments/results_solar_seastate_persist3.txt",
            "research/marine-hull/experiments/run_solar_seastate_persist3.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6793c62864e11923cd0e167cdb121875c3207950",
          "at": 1793398223000,
          "title": "research/marine-hull: milestone 3b, placeholder wave term vs a published catamaran tank curve",
          "pr": 11919,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 3b, placeholder wave term against a published catamaran tank curve"
          ],
          "detail": "Five bare-hull tank speeds (Zenodo 18459868, CC BY 4.0): the model is 35 to 43% low at Fn 0.33-0.58; no single wave scale keeps all five within 20%.",
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 9,
          "lines_added": 265,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-catamaran-tank-data-vs-placeholder-wave-term.md",
            "prompts/runs/2026-10-30-session_01AcxTtGatf2jSXdNszhYFjt.json",
            "research/marine-hull/experiments/data/catamaran_bare_hull_tank.csv",
            "research/marine-hull/experiments/results_catamaran_tank.txt",
            "research/marine-hull/experiments/run_catamaran_tank.py",
            "research/marine-hull/tests/test_catamaran_tank.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "688a8278feee2ddbe652ccb4320b9057cc280338",
          "at": 1793398279000,
          "title": "research/marine-hull: milestone 7b, paper intro, model and results table drafted",
          "pr": 11921,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 7b, paper intro, model and results table drafted"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 4,
          "lines_added": 195,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-30-marine-hull-paper-draft-two-open-hypotheses.md",
            "prompts/runs/2026-10-30-session_01AcxTtLxmf4ztHUESjWACmb.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "verifiable-training-mechanisms",
      "merges": [
        {
          "sha": "38b0209dab0443102bc712f0b0a2b0df7168af75",
          "at": 1793320675000,
          "title": "research/verifiable-training-mechanisms: milestone 49, aggregate-update check",
          "pr": 11514,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/verifiable-training-mechanisms: milestone 49 plan and aggregate-check script (results pending)",
            "research/verifiable-training-mechanisms: milestone 49 run in progress",
            "research/verifiable-training-mechanisms: milestone 49, aggregate-update check closes the per-tensor room"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verifiable-training-mechanisms"
          },
          "files": 6,
          "lines_added": 508,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKmdozmc71KQKVPhEFt.json",
            "research/verifiable-training-mechanisms/experiments/aggregate_check/results.json",
            "research/verifiable-training-mechanisms/experiments/aggregate_check/results.txt",
            "research/verifiable-training-mechanisms/experiments/aggregate_check/run.out",
            "research/verifiable-training-mechanisms/experiments/aggregate_check/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "66e11b5edb53623c38d2c4b80481819941230d80",
          "at": 1793331334000,
          "title": "research/verifiable-training-mechanisms: milestone 50, harm accumulates under a per-step aggregate check",
          "pr": 11647,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/verifiable-training-mechanisms: milestone 50 plan and script, spread-over-steps adversary (results pending)",
            "research/verifiable-training-mechanisms: milestone 50 outcome, harm accumulates under a per-step aggregate check"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verifiable-training-mechanisms"
          },
          "files": 7,
          "lines_added": 447,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-a-cheater-who-stays-under-the-check-every-step.md",
            "prompts/runs/2026-10-30-session_01E5sJKn7NSbHBRN6pw21bN2.json",
            "research/verifiable-training-mechanisms/experiments/spread_steps/results.json",
            "research/verifiable-training-mechanisms/experiments/spread_steps/results.txt",
            "research/verifiable-training-mechanisms/experiments/spread_steps/run.out",
            "research/verifiable-training-mechanisms/experiments/spread_steps/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "02a3d7b6c1d920d63aa54813c2250ca5f3fe6d58",
          "at": 1793377764000,
          "title": "research/verifiable-training-mechanisms: milestone 51, check factor C vs ascent window T",
          "pr": 11805,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verifiable-training-mechanisms"
          },
          "files": 6,
          "lines_added": 462,
          "lines_removed": 0,
          "added_files": [
            "research/verifiable-training-mechanisms/experiments/c_sweep/results.json",
            "research/verifiable-training-mechanisms/experiments/c_sweep/results.txt",
            "research/verifiable-training-mechanisms/experiments/c_sweep/run.out",
            "research/verifiable-training-mechanisms/experiments/c_sweep/run.py",
            "research/verifiable-training-mechanisms/experiments/c_sweep/smoke.out"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c59f5239a054c5d850d36b28aee999d191c55fd4",
          "at": 1793378252000,
          "title": "research/verifiable-training-mechanisms: milestone 51, C sweep and cumulative check (stalling is the hole)",
          "pr": 11806,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "verifiable-training-mechanisms: milestone 51 plan and script (C sweep and cumulative check), results pending",
            "verifiable-training-mechanisms: milestone 51 results (C sweep, cumulative check; stalling is the hole)"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verifiable-training-mechanisms"
          },
          "files": 6,
          "lines_added": 434,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKkLBKQXuxHcGmWg7Lc.json",
            "research/verifiable-training-mechanisms/experiments/c_sweep_cum/results.json",
            "research/verifiable-training-mechanisms/experiments/c_sweep_cum/results.txt",
            "research/verifiable-training-mechanisms/experiments/c_sweep_cum/run.out",
            "research/verifiable-training-mechanisms/experiments/c_sweep_cum/run.py"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "verified-dse",
      "merges": [
        {
          "sha": "d6f4c0bfb8319cfc9e499d627729fa452385408b",
          "at": 1793336966000,
          "title": "research/verified-dse: milestone 41, quantile bound on halving regret",
          "pr": 11687,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/verified-dse: milestone 41, quantile-of-excess bound on halving regret",
            "post: shorten description"
          ],
          "detail": "Prediction-first replay on the cached table: bound holds in 38 of 40 cells' worth of non-vacuity, 5.00% of draws violate, all in 2 cells.",
          "area": {
            "kind": "research",
            "name": "verified-dse"
          },
          "files": 7,
          "lines_added": 201,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-quantile-bound-halving-regret.md",
            "prompts/runs/2026-10-30-session_01AcxTtL4BoVuQK3aHwr5VzR.json",
            "research/verified-dse/experiments/theory/quantile_g.py",
            "research/verified-dse/experiments/theory/quantile_g_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "2dc1e87298ba2a2cb63dc5bd6d7ff4d81e7b9257",
          "at": 1793348275000,
          "title": "research/verified-dse: milestone 42, pilot-side quantile bound on halving regret",
          "pr": 11720,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/verified-dse: milestone 42, pilot-side quantile bound on halving regret"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verified-dse"
          },
          "files": 5,
          "lines_added": 205,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-pilot-quantile-halving-regret.md",
            "prompts/runs/2026-10-30-session_01AcxTtHnTDBgHnEfK9JE61M.json",
            "research/verified-dse/experiments/theory/quantile_g_pilot.py",
            "research/verified-dse/experiments/theory/quantile_g_pilot_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3ff753924b314bc537306236c14418ac120950b6",
          "at": 1793373563000,
          "title": "research/verified-dse: milestone 43, no quantile of g bounds halving regret",
          "pr": 11792,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/verified-dse: milestone 43, no quantile of g bounds halving regret (counterexample, test, post)",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verified-dse"
          },
          "files": 7,
          "lines_added": 132,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-no-quantile-bounds-halving-regret.md",
            "prompts/runs/2026-10-30-session_01AcxTtK2Z48kEvXq4N2Rt9a.json",
            "research/verified-dse/experiments/theory/quantile_counterexample.py",
            "research/verified-dse/experiments/theory/quantile_counterexample_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "bdea9b58a4c2eddd97ad6a3393f34417cc622029",
          "at": 1793376524000,
          "title": "research/verified-dse: milestone 44, rank displacement of the pool optimum",
          "pr": 11796,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/verified-dse: milestone 44, rank displacement of the pool optimum under the rungs",
            "prompts: run record for verified-dse milestone 44"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verified-dse"
          },
          "files": 4,
          "lines_added": 153,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtKXEDwf2yGp6iUB6aY.json",
            "research/verified-dse/experiments/theory/optimum_rank.py",
            "research/verified-dse/experiments/theory/optimum_rank_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "civ-levers",
      "merges": [
        {
          "sha": "9c3c4b954c34385f963e10c761866bb03a4cdfb5",
          "at": 1793352251000,
          "title": "research/civ-levers: public goods with peer punishment (milestone 5)",
          "pr": 11733,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/civ-levers: public goods with peer punishment (milestone 5)",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "civ-levers"
          },
          "files": 8,
          "lines_added": 216,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-punishment-works-only-if-the-punished-listen.md",
            "prompts/runs/2026-10-30-session_01E5sJKnbuvNTeoq7DBwGD5C.json",
            "research/civ-levers/experiments/commons/results.txt",
            "research/civ-levers/experiments/commons/run.py",
            "research/civ-levers/src/civ_levers/commons.py",
            "research/civ-levers/tests/test_commons.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "37ca2c38824bfafd85e4f2eab58d7296363cab5b",
          "at": 1793391291000,
          "title": "research/civ-levers: toy structural-demographic civilization, no secular cycles in 864 cells",
          "pr": 11845,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/civ-levers: toy structural-demographic civilization, 864 cells, no secular cycles (milestone 7)"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "civ-levers"
          },
          "files": 9,
          "lines_added": 236,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-a-toy-civilization-that-never-cycles.md",
            "prompts/runs/2026-10-30-session_01AcxTtKrNQUZMM3qJABckUN.json",
            "research/civ-levers/experiments/history/results.txt",
            "research/civ-levers/experiments/history/run.py",
            "research/civ-levers/src/civ_levers/history.py",
            "research/civ-levers/tests/test_history.py"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "aerolog-scaling",
      "merges": [
        {
          "sha": "722a74cfabaaa2115fb896fc8b0d216ebcaf1cbe",
          "at": 1793345270000,
          "title": "research/aerolog-scaling: milestone 9i, output-error fit of noisy free response",
          "pr": 11712,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 9i, output-error fit of noisy free response, blog post"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 6,
          "lines_added": 291,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-longer-flight-records-were-not-worse.md",
            "prompts/runs/2026-10-30-session_01AcxTtLBxsETMRmwEeExa97.json",
            "research/aerolog-scaling/experiments/output_error_fit/results.txt",
            "research/aerolog-scaling/experiments/output_error_fit/run.py"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "hanger-3dseeds",
      "merges": [
        {
          "sha": "dfa50785531c2cd272742e07deddc643a6e5b8bd",
          "at": 1793356104000,
          "title": "research/hanger-3dseeds: raise the end-radius limit to 9 and 12 cm",
          "pr": 11728,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/hanger-3dseeds: radius-cap sweep script (9, 12 cm)",
            "research/hanger-3dseeds: end-radius limit 9 and 12 cm, optimum stops binding, error flat",
            "prompts: run record for hanger-3dseeds radius cap"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "hanger-3dseeds"
          },
          "files": 6,
          "lines_added": 222,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-30-hanger-end-radius-limit.md",
            "prompts/runs/2026-10-30-session_01AcxTtLmJqHaZDTzfDUovQy.json",
            "research/hanger-3dseeds/experiments/radius_cap.py",
            "research/hanger-3dseeds/experiments/radius_cap_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "marine-path",
      "merges": [
        {
          "sha": "f8503f3755e930359955cc519b0d19b64e76255b",
          "at": 1793370259000,
          "title": "research/marine-path: LOS vs integral LOS in current, analytic offset checked",
          "pr": 11783,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-path: LOS vs integral LOS in current, analytic offset checked (milestone 1)",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-path"
          },
          "files": 14,
          "lines_added": 588,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-30-boat-current-line-of-sight-offset.md",
            "prompts/runs/2026-10-30-session_01AcxTtK9ifaHTucW5SzGtey.json",
            "research/marine-path/LOG.md",
            "research/marine-path/README.md",
            "research/marine-path/experiments/results.txt",
            "research/marine-path/experiments/run.py",
            "research/marine-path/project.json",
            "research/marine-path/pyproject.toml",
            "research/marine-path/src/marine_path/__init__.py",
            "research/marine-path/src/marine_path/boat.py",
            "research/marine-path/src/marine_path/guidance.py",
            "research/marine-path/src/marine_path/sim.py",
            "research/marine-path/tests/test_path.py"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "sim2real-inference",
      "merges": [
        {
          "sha": "f4db7ac5c42d6542a1de36a448d5575e96386a8e",
          "at": 1793326189000,
          "title": "research/sim2real-inference: finite-pool certificate result moves into the paper's main text (7y), plus post",
          "pr": 11591,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "sim2real-inference"
          },
          "files": 3,
          "lines_added": 33,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-a-bigger-twin-pool-shortens-the-certificate.md"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    }
  ],
  "writing": [
    {
      "sha": "0943f1ec9f131c99f6c0f468f9e1fafefe17e33c",
      "at": 1793320465000,
      "title": "Start here: onboarding posts and pitches for newcomers; repair the Pages deploy",
      "pr": 11504,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": "ventures",
      "bullets": [
        "writing: Start here topic; fix three overlong seo_titles that broke the blog build",
        "posts: Bring an idea, get it built (the Start here series' main pitch)",
        "posts: Start here drafts (work in progress, under review)",
        "posts: Start here drafts (work in progress, under review)",
        "posts: Start here drafts (work in progress, under review)",
        "posts: Start here drafts (work in progress, under review)"
      ],
      "detail": "Adds a 'Start here' topic (tag start-here) for the onboarding series, shortens three seo_titles over the 70-character budget (writing.mjs threw on them), and makes check_post_frontmatter.py catch that early.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 35,
      "lines_added": 2178,
      "lines_removed": 17,
      "added_files": [
        "docs/posts/2026-10-29-start-here-ai-agents-and-mcp.md",
        "docs/posts/2026-10-29-start-here-ai-bookkeeper.md",
        "docs/posts/2026-10-29-start-here-bring-an-idea.md",
        "docs/posts/2026-10-29-start-here-changepoint-detector.md",
        "docs/posts/2026-10-29-start-here-contributing.md",
        "docs/posts/2026-10-29-start-here-einvoice-preflight.md",
        "docs/posts/2026-10-29-start-here-free-tools-for-your-trade.md",
        "docs/posts/2026-10-29-start-here-league-schedule-generator.md",
        "docs/posts/2026-10-29-start-here-photo-editing.md",
        "docs/posts/2026-10-29-start-here-quick-pick-survey.md",
        "docs/posts/2026-10-29-start-here-research.md",
        "docs/posts/2026-10-29-start-here-sales-agent.md",
        "docs/posts/2026-10-29-start-here-self-hosting.md",
        "docs/posts/2026-10-29-start-here-shift-roster-builder.md",
        "docs/posts/2026-10-29-start-here-wall-framing-takeoff.md",
        "docs/posts/2026-10-29-start-here.md",
        "docs/reports/2026-10-29-start-here-onboarding-series.md",
        "prompts/runs/2026-10-29-session_01E5sJKmqWT7QZnXFQgPsPn5.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "691e432d06865bcfba09bf462a3a776f472a5d3e",
      "at": 1793324186000,
      "title": "shed-designer: nightly wide fuzz sweep (2000 designs, rotating seed)",
      "pr": 11529,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "Read-only scheduled workflow: FUZZ_N=2000 with the day number as seed; a red run prints the reproduce command with its seed in the job summary and uploads the failing designs.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 124,
      "lines_removed": 0,
      "added_files": [
        ".github/workflows/shed-designer-fuzz.yml",
        "docs/posts/2026-10-30-shed-designer-nightly-fuzz.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "d341bc9e9dc0d046df292efca76d465d0ebaa94a",
      "at": 1793326223000,
      "title": "Fix post front matter (description length, tag) and fill run record for #11591",
      "pr": 11593,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "research",
      "bullets": [
        "Fix post description length; fill run record",
        "Use existing digital-twin tag"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 49,
      "lines_removed": 2,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtKJNpBkuLkWvAzvoPX.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "6cd6f32c8a7bccdd8060633a014b97e3920a4167",
      "at": 1793326779000,
      "title": "polish: seo_title for the 25 newest long post headlines; fix over-length description",
      "pr": 11608,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title for the 25 newest long post headlines; shorten an over-length description"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 27,
      "lines_added": 89,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-30-seo-titles-batch.md",
        "prompts/runs/2026-10-30-session_01E5sJKnNCv2gxspPZGFs8rD.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "7338fc0553f0c61bcacc878fbdb2706d26ae6d32",
      "at": 1793327143000,
      "title": "shed-designer: r2 test/CI infra — site nav 2px phone overflow (23 pages), lane 4 report + post",
      "pr": 11552,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "Site nav: clip the venture top chrome so the phone nav strip can't widen the page",
        "posts: lowcomm seo_title under 70 characters (red on main, fails every build)"
      ],
      "detail": "On a phone the nav strip bleeds 16px right (margin-right:-16px) to reach the screen edge, which assumes a 16px gutter.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 92,
      "lines_removed": 1,
      "added_files": [
        "docs/posts/2026-10-30-the-browser-checks-ran-again.md",
        "docs/reports/shed-designer-round2-lane4-ci.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "ec64a2d048b70c1ac4cb034b0d8d62976b42c031",
      "at": 1793328576000,
      "title": "docs(posts): the numbers the Cloudflare move has to carry",
      "pr": 11597,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "docs(posts): GitHub Pages vs Cloudflare/Vercel, re-measured six days on",
        "docs(posts): reframe the hosting post around the owner's Cloudflare move (PR 11585)"
      ],
      "detail": "A fresh full build is 865 MB and 19,348 files: 97% of Cloudflare Pages' free 20,000-file cap and 86% of the 1 GB Pages cap.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 1,
      "lines_added": 131,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-30-cloudflare-or-github-pages-six-days-later.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "ad7481bbcc89d221b09c00028a8f62986797dae1",
      "at": 1793329562000,
      "title": "posts: one spelling of the excavator tag (check_post_frontmatter red on main)",
      "pr": 11642,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 1,
      "lines_added": 1,
      "lines_removed": 1,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "951ac9ddc2b42b39265ef69d2bbc0159b807fd92",
      "at": 1793336148000,
      "title": "docs: fix the snow-load post's Hearth & Horizon link (main's Pages build is red)",
      "pr": 11682,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [],
      "detail": "Verified locally: full build for the Cloudflare origin, then check.mjs: 1321 products, 5700 pages, no dead links.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 1,
      "lines_added": 1,
      "lines_removed": 1,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "43604b7b777f5f7bac5c34eab629c0e784efbbe6",
      "at": 1793336993000,
      "title": "redteam: platform/pages/writing.mjs 2026-10-30",
      "pr": 11689,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "redteam",
      "bullets": [
        "redteam: writing.mjs 2026-10-30; add missing post descriptions, pager guard test",
        "redteam: record PR number"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 4,
      "lines_added": 192,
      "lines_removed": 0,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtGjtPnfvb3QhKnfLz8.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "39b7d7952c2d7a6f5aa9e118b1c2d8ce65b576f9",
      "at": 1793345001000,
      "title": "perf: P048 part 2b, README live links sparse checkout",
      "pr": 11711,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "perf: P048 part 2b, README live links sparse checkout; sibling links stays whole",
        "P048: name PR 11711"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 5,
      "lines_added": 170,
      "lines_removed": 3,
      "added_files": [
        "docs/posts/2026-10-30-ci-guards-fetch-only-what-they-read.md",
        "prompts/runs/2026-10-30-session_01E5sJKju5hjHLAA9w6F2pBp.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "4bafd0c0017378e90dcd8403d1cab1c939695940",
      "at": 1793347732000,
      "title": "process: fix 176-char post description that turns main_health red",
      "pr": 11717,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "Fix 176-char post description that fails check_post_frontmatter and promptctl validate on main"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 47,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtGN1W69yU3uv76n2wX.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "f495228a8ee3fe2af9a2f1f9dce4c4fcc4a632a2",
      "at": 1793351371000,
      "title": "process: fix 'decks'/'deck' tag split that reddened main's front-matter check",
      "pr": 11727,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "docs/posts: spell the deck tag one way so main's front-matter check passes",
        "prompts: run record for process/1 tag fix"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 57,
      "lines_removed": 1,
      "added_files": [
        "docs/posts/2026-10-30-a-tag-spelled-two-ways-reddened-main.md",
        "prompts/runs/2026-10-30-session_01AcxTtGQAjM6Syb51H4gXVa.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "513e3b189e55b930c63ba46a63b418f4c4aa7735",
      "at": 1793366867000,
      "title": "redteam: hub.mjs 2026-10-30",
      "pr": 11775,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "redteam",
      "bullets": [
        "redteam: hub.mjs 2026-10-30, fix post front matter that turned hub tests red, add boundary tests",
        "redteam: run record"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 194,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-30-session_01E5sJKkVa8DDHgckEozxEKf.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "2207c2e03813f2ee50b408e9be6b448c2a2a25bb",
      "at": 1793369195000,
      "title": "pages tests: restore the share-card cache in the test job",
      "pr": 11779,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "perf",
      "bullets": [
        "pages tests: restore the share-card cache in the test job"
      ],
      "detail": "Fixture builds idle ~45 s of 64 s drawing cards the deploy already caches.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 4,
      "lines_added": 127,
      "lines_removed": 0,
      "added_files": [
        "docs/history/pages-test-perf-2026-10-30-card-cache.md",
        "docs/posts/2026-10-30-the-test-job-was-redrawing-1200-pictures.md",
        "prompts/runs/2026-10-30-session_01AcxTtJHSDcXDwY6bcXsfWw.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "9bd793fe25c913b5e8bea244efb6f490fd570c4d",
      "at": 1793376803000,
      "title": "redteam: stories page 2026-10-30",
      "pr": 11799,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "redteam",
      "bullets": [
        "redteam: stories page 2026-10-30, three shelf and audio-minutes guards"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 459,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-30-seeding-bugs-in-the-stories-page.md",
        "prompts/runs/2026-10-30-session_01EhTJVM4ANNpn9uh5DyT9He.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "460ae4ff3772b1142e2fede5d5f06257080b4624",
      "at": 1793380247000,
      "title": "process: fix red main (post descriptions over 160, null pr in run record)",
      "pr": 11814,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "Fix red main: shorten two post descriptions, fill creative run record pr"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 4,
      "lines_added": 49,
      "lines_removed": 3,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtJbCK1PqU2vnJvz4nW.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "0c7004e2689a671a137fc8d350fbadcf40a584e6",
      "at": 1793380756000,
      "title": "polish: seo_title for the next 25 long post headlines",
      "pr": 11816,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title for the next 25 long post headlines",
        "polish: run record"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 27,
      "lines_added": 92,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-30-seo-titles-batch-2.md",
        "prompts/runs/2026-10-30-session_01E5sJKnJSwVuEh9fLJAXojW.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "a2f2320e49adecda4c066b5f238e3a6c66dfdf96",
      "at": 1793383938000,
      "title": "Fix Pages build: Luxembourg 8815 post lacked front-matter description",
      "pr": 11825,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "perf",
      "bullets": [
        "Fix Pages build: Luxembourg 8815 post lacked front-matter description"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 65,
      "lines_removed": 0,
      "added_files": [
        "docs/history/pages-build-broken-post-2026-10-30.md",
        "prompts/runs/2026-10-30-session_01AcxTtK8cBKKJYS6swDmDET.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "f8a463348a516e6d4c1c9bc4eab5b714ed076504",
      "at": 1793384713000,
      "title": "Fix Pages build: heavy-hydraulics post seo_title and description over length limits",
      "pr": 11827,
      "agent": "Claude",
      "models": [],
      "track": "perf",
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 1,
      "lines_added": 2,
      "lines_removed": 2,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "4edb140469c83a66aaa2db599e7e7b04a25f6ae7",
      "at": 1793392321000,
      "title": "fix main: post frontmatter lengths, four flagship next: entries under 2,000 characters",
      "pr": 11850,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "check_post_frontmatter.py and portfolio/router/validate.py were red on main (found by the shed-designer round-4 integration sweep).",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 74,
      "lines_removed": 35,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "1e12077a2a7576f50530d84a25b38bd9ba8e28e1",
      "at": 1793392955000,
      "title": "docs: site stack alternatives report (Astro, TS, Rust, Hugo) and a post",
      "pr": 11860,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": "perf",
      "bullets": [
        "docs: site stack alternatives report (Astro, TS, Rust, Hugo) with measurements, and a post",
        "prompts: run record for site stack report"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 279,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-30-should-a-1300-tool-static-site-move-to-astro.md",
        "docs/reports/2026-10-30-site-stack-alternatives.md",
        "prompts/runs/2026-10-30-session_01XpHqydCmyimrEyDu2zptKU.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "aca767cec3f84db4ad00c18cf875ce95545443d6",
      "at": 1793394659000,
      "title": "polish: seo_title batch 3, 25 long post headlines",
      "pr": 11883,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title batch 3, 25 long post headlines",
        "polish: run record",
        "polish: add tags to post"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 28,
      "lines_added": 97,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-30-shorter-search-titles-batch-3.md",
        "docs/reports/polish-2026-10-30-seo-titles-batch-3.md",
        "prompts/runs/2026-10-30-session_01E5sJKipCFDG8vCyej47Nxh.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "3a3c97aaab1c64f3d8ac5335db6077a43d45fcbc",
      "at": 1793395077000,
      "title": "docs(posts): how to contribute from ChatGPT",
      "pr": 11891,
      "agent": "Codex",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "Four routes: draft an idea or bug report, check a calculator against a source, send a fix through Codex on a fork, and call the tools from the Codex CLI via the repo's MCP server.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 1,
      "lines_added": 90,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-30-contribute-from-chatgpt.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "271646641504164023ae9094deb07c6e66906fd1",
      "at": 1793395225000,
      "title": "polish: seo_title for 203 posts via propose_seo_titles.py",
      "pr": 11893,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title for 203 posts via propose_seo_titles.py"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 206,
      "lines_added": 325,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-30-seo-titles-script.md",
        "platform/pages/propose_seo_titles.py",
        "prompts/runs/2026-10-30-session_01E5sJKjTW5SJy6sa139fZmd.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "db9f339ac2da5032535bb1ec2d49cfbc282406f5",
      "at": 1793397025000,
      "title": "docs: 20 Start here guides (15 by reader, 5 on contributing), a series map, an agent doc and a link checker",
      "pr": 11895,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": "creative",
      "bullets": [
        "docs: Start here series map for people and agents, link checker, Cloudflare hosting in contributor docs",
        "posts: Start here guides for Open Tennis Robots, Shed Designer and freelancer tax set-aside",
        "posts: Start here guides for the agent-fleet measurements, running agents on your own repo, and LLM cost and safety tools",
        "posts: Start here guides for drone scale models, excavator hydraulics and house construction research",
        "posts: Start here guides for sim2real robot testing, verifiable training and low-communication training",
        "posts: Start here guides for open-source chip design, LLM coding of qualitative data and marine hull research"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 33,
      "lines_added": 2422,
      "lines_removed": 11,
      "added_files": [
        "docs/contributing/start-here.md",
        "docs/posts/2026-10-30-start-here-drone-scale-models.md",
        "docs/posts/2026-10-30-start-here-every-way-to-help.md",
        "docs/posts/2026-10-30-start-here-excavator-hydraulics.md",
        "docs/posts/2026-10-30-start-here-freelancer-tax-set-aside.md",
        "docs/posts/2026-10-30-start-here-house-construction-research.md",
        "docs/posts/2026-10-30-start-here-how-the-agent-fleet-is-measured.md",
        "docs/posts/2026-10-30-start-here-llm-coding-qualitative-data.md",
        "docs/posts/2026-10-30-start-here-llm-cost-and-safety-tools.md",
        "docs/posts/2026-10-30-start-here-low-communication-training.md",
        "docs/posts/2026-10-30-start-here-marine-hull-research.md",
        "docs/posts/2026-10-30-start-here-open-source-chip-design.md",
        "docs/posts/2026-10-30-start-here-open-tennis-robots.md",
        "docs/posts/2026-10-30-start-here-report-a-wrong-number.md",
        "docs/posts/2026-10-30-start-here-reproduce-a-result.md",
        "docs/posts/2026-10-30-start-here-run-agents-on-your-own-repo.md",
        "docs/posts/2026-10-30-start-here-share-real-data.md",
        "docs/posts/2026-10-30-start-here-shed-designer.md",
        "docs/posts/2026-10-30-start-here-sim2real-robot-testing.md",
        "docs/posts/2026-10-30-start-here-verifiable-training.md",
        "docs/posts/2026-10-30-start-here-your-first-pull-request.md",
        "docs/reports/start-here-series.md",
        "platform/ci/check_start_here.py",
        "platform/ci/test_check_start_here.py",
        "prompts/runs/2026-10-30-session_01XpHqybqgh2GNkrxZZmfkGP.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "7c26cb4d860ad60db4745df969a26586ea2954de",
      "at": 1793398684000,
      "title": "Add a contributor guide for blog posts, READMEs, llms.txt and docs",
      "pr": 11903,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "docs/contributing/writing.md says where each kind of writing goes, the post front matter and its enforced limits, what a README answers, and the checks to run.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 6,
      "lines_added": 193,
      "lines_removed": 3,
      "added_files": [
        "docs/contributing/writing.md",
        "docs/posts/2026-10-30-contribute-by-writing.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "da2e0497a54214f4d2b8dd7151423d799dfb6211",
      "at": 1793401930000,
      "title": "posts: shorten Indonesia Coretax description (site build was failing)",
      "pr": 11939,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "perf",
      "bullets": [
        "posts: shorten Indonesia Coretax description to 160 chars (site build was failing)",
        "perf: run record"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 52,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtJCTaV97ucgKdBkWAQ.json"
      ],
      "revert": false,
      "fix_forward": false
    }
  ],
  "platform": [
    {
      "name": "ci",
      "merges": [
        {
          "sha": "25fe1284ae4ae9355b6397b2153be8411239c4be",
          "at": 1793318956000,
          "title": "redteam: platform/ci/ci_starvation.py 2026-10-30",
          "pr": 11507,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: guard git_remote_repo output capture in ci_starvation",
            "redteam: run record"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 2,
          "lines_added": 253,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtKZTfVeBZCrAcvYKcC.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "76eb8097b7bc6d6d6f8bb4fa022c7cf26326ec50",
          "at": 1793324596000,
          "title": "shed-designer: r2 test/CI infra — Browser checks nightly back on its feet (Playwright 1.63, one job per check)",
          "pr": 11519,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "Browser checks nightly: Playwright 1.63.0, one job per check, skip when Chromium won't start",
            "journey: let the configured usage counter's /hit through the off-origin check"
          ],
          "detail": "Every nightly since 2026-10-13 failed: 10-13..10-20 cancelled at 60 min (5,400-page site, eight checks in one job), 10-21..10-29 Playwright 1.56 could not install Chromium on Ubuntu 26.04, and the harness then reported '8 of 8 checks failed' for a missing…",
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 8,
          "lines_added": 124,
          "lines_removed": 27,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fb5ac37f0d4ba53705d58f69af12cda2f93b7f75",
          "at": 1793340872000,
          "title": "perf: P048 part 2a, doc-references guard sparse checkout",
          "pr": 11700,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "process",
          "bullets": [
            "perf: doc-references guard fetches only Markdown and scripts (P048 part 2a)"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 6,
          "lines_added": 115,
          "lines_removed": 7,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKnKTDF7hUQPcNnrrYs.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b3ba61f311d9b6bdd1eeaf6021082c0a40c7c788",
          "at": 1793344941000,
          "title": "polish: llms.txt link check accepts build-time generated pages",
          "pr": 11710,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "polish",
          "bullets": [
            "llms.txt link check: accept pages written by build-time generators"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 5,
          "lines_added": 106,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-30-llms-txt-link-check-generated-pages.md",
            "docs/reports/polish-2026-10-30-llms-link-check.md",
            "prompts/runs/2026-10-30-session_01E5sJKkKj2ttVVNZkaef4Yx.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9e32479c38fca70e7ca341dd9e24dc85e66dce83",
          "at": 1793345441000,
          "title": "perf: inline-script check in one node process (52s to 1.8s)",
          "pr": 11713,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "perf",
          "bullets": [
            "perf: inline-script check screens all scripts in one node process (52s to 1.8s)",
            "perf: run record",
            "perf: post front matter"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 5,
          "lines_added": 196,
          "lines_removed": 4,
          "added_files": [
            "docs/history/ci-perf-2026-10-30-inline-scripts.md",
            "docs/posts/2026-10-30-1647-node-processes.md",
            "prompts/runs/2026-10-30-session_01E5sJKmBJYNzf2GxnWQ8BFM.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b41638e34b21943425c3e7bca8754cd2c96d8520",
          "at": 1793369941000,
          "title": "redteam: check_money_sign 2026-10-30",
          "pr": 11782,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: check_money_sign 2026-10-30, blank-first-line guard",
            "redteam record: pr number"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 2,
          "lines_added": 170,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKnx5d48KCRncUJjqvL.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c42400526d3b9e4c8aa68eb67813927664dba49d",
          "at": 1793391622000,
          "title": "perf: branch cleanup --pr skips main history and full branch listing",
          "pr": 11846,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "perf",
          "bullets": [
            "perf: branch cleanup --pr skips main history and full branch listing"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 4,
          "lines_added": 103,
          "lines_removed": 5,
          "added_files": [
            "docs/history/ci-perf-2026-10-30-branch-cleanup.md",
            "prompts/runs/2026-10-30-session_01E5sJKkNSF39Kw4D5w3UjYR.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a74fca178a5e966e38bdfc83221dda808031cdef",
          "at": 1793391689000,
          "title": "redteam: platform/ci checks 2026-10-30",
          "pr": 11848,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: platform/ci checks 2026-10-30",
            "redteam: record PR number"
          ],
          "detail": "Catch rate 0.862 -> 1.0 on 32 mutants; tests for check_local_fetch and check_aria_refs.",
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 3,
          "lines_added": 552,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKkcR816R4DtKZDCTtn.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7c4f58cb1bc322e92c2bb2e1e3fe10414cbab37b",
          "at": 1793397635000,
          "title": "ci: file-based security queue for the scheduled agents",
          "pr": 11867,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "polish",
          "bullets": [
            "ci: hand open code-scanning alerts to a Claude Code agent that opens a fix PR",
            "security alerts: queue them as issues for scheduled agents, no API key",
            "security queue: files on a data branch instead of GitHub issues",
            "ci: snapshot security-alert-queue.yml; repair three run records failing promptctl validate",
            "shift-roster-builder: make the 14-day-notice FAQ copy match its JSON-LD"
          ],
          "detail": "security-alert-fix.yml runs hourly.",
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 10,
          "lines_added": 402,
          "lines_removed": 3,
          "added_files": [
            ".github/workflows/security-alert-queue.yml",
            "docs/posts/2026-10-30-agents-fix-code-scanning-alerts.md",
            "platform/ci/security_alerts.py",
            "platform/ci/test_security_alerts.py",
            "prompts/runs/2026-10-30-session_01XpHqyepM9fa6ojWjcfNEsj.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "pages",
      "merges": [
        {
          "sha": "743b05e562e9aeb49f91058254e770fbf50ffd7e",
          "at": 1793326155000,
          "title": "redteam: reflow.mjs 2026-10-30",
          "pr": 11587,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: reflow.mjs/check_md_links 2026-10-30 — close 3 escaped mutants",
            "redteam: run record, PR 11587"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 2,
          "lines_added": 414,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtHYGvCfDQXu6oTrhne.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f7f93c7f5746be2e5808adf0ef1160d90cb92ac2",
          "at": 1793329135000,
          "title": "Move the site from GitHub Pages to Cloudflare (free plan, workers.dev)",
          "pr": 11585,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [],
          "detail": "Builds for https://monorepo-projects-site.duncan-andrew-haywood.workers.dev/, deploys to two free-plan Workers (the site is past one Worker's 20,000-file limit), and swaps GitHub Pages to redirect pages only after the Cloudflare deploy answers.",
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 58,
          "lines_added": 784,
          "lines_removed": 97,
          "added_files": [
            "docs/posts/2026-10-30-moving-a-20000-file-site-to-cloudflares-free-plan.md",
            "platform/pages/cloudflare/.wrangler/cache/cf.json",
            "platform/pages/cloudflare/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite",
            "platform/pages/cloudflare/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-shm",
            "platform/pages/cloudflare/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-wal",
            "platform/pages/cloudflare/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/metadata.sqlite",
            "platform/pages/cloudflare/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/metadata.sqlite-shm",
            "platform/pages/cloudflare/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/metadata.sqlite-wal",
            "platform/pages/cloudflare/.wrangler/state/v3/kv/miniflare-KVNamespaceObject/metadata.sqlite",
            "platform/pages/cloudflare/.wrangler/state/v3/kv/miniflare-KVNamespaceObject/metadata.sqlite-shm",
            "platform/pages/cloudflare/.wrangler/state/v3/kv/miniflare-KVNamespaceObject/metadata.sqlite-wal",
            "platform/pages/cloudflare/.wrangler/state/v3/observability/miniflare-wobs-trace-store/a590acd76969f996ec6e4b599c3c09f58c283a76f2d61392b5d3046caf557602.sqlite",
            "platform/pages/cloudflare/.wrangler/state/v3/observability/miniflare-wobs-trace-store/a590acd76969f996ec6e4b599c3c09f58c283a76f2d61392b5d3046caf557602.sqlite-shm",
            "platform/pages/cloudflare/.wrangler/state/v3/observability/miniflare-wobs-trace-store/a590acd76969f996ec6e4b599c3c09f58c283a76f2d61392b5d3046caf557602.sqlite-wal",
            "platform/pages/cloudflare/.wrangler/state/v3/observability/miniflare-wobs-trace-store/metadata.sqlite",
            "platform/pages/cloudflare/.wrangler/state/v3/observability/miniflare-wobs-trace-store/metadata.sqlite-shm",
            "platform/pages/cloudflare/.wrangler/state/v3/observability/miniflare-wobs-trace-store/metadata.sqlite-wal",
            "platform/pages/cloudflare/.wrangler/state/v3/r2/miniflare-R2BucketObject/metadata.sqlite",
            "platform/pages/cloudflare/.wrangler/state/v3/r2/miniflare-R2BucketObject/metadata.sqlite-shm",
            "platform/pages/cloudflare/.wrangler/state/v3/r2/miniflare-R2BucketObject/metadata.sqlite-wal",
            "platform/pages/cloudflare/README.md",
            "platform/pages/cloudflare/router.mjs",
            "platform/pages/cloudflare/shard/.wrangler/cache/cf.json",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-shm",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-wal",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/metadata.sqlite",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/metadata.sqlite-shm",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/metadata.sqlite-wal",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/kv/miniflare-KVNamespaceObject/metadata.sqlite",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/kv/miniflare-KVNamespaceObject/metadata.sqlite-shm",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/kv/miniflare-KVNamespaceObject/metadata.sqlite-wal",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/observability/miniflare-wobs-trace-store/a590acd76969f996ec6e4b599c3c09f58c283a76f2d61392b5d3046caf557602.sqlite",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/observability/miniflare-wobs-trace-store/a590acd76969f996ec6e4b599c3c09f58c283a76f2d61392b5d3046caf557602.sqlite-shm",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/observability/miniflare-wobs-trace-store/a590acd76969f996ec6e4b599c3c09f58c283a76f2d61392b5d3046caf557602.sqlite-wal",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/observability/miniflare-wobs-trace-store/metadata.sqlite",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/observability/miniflare-wobs-trace-store/metadata.sqlite-shm",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/observability/miniflare-wobs-trace-store/metadata.sqlite-wal",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/r2/miniflare-R2BucketObject/metadata.sqlite",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/r2/miniflare-R2BucketObject/metadata.sqlite-shm",
            "platform/pages/cloudflare/shard/.wrangler/state/v3/r2/miniflare-R2BucketObject/metadata.sqlite-wal",
            "platform/pages/cloudflare/shard/worker.mjs",
            "platform/pages/cloudflare/shard/wrangler.toml",
            "platform/pages/cloudflare/split.mjs",
            "platform/pages/cloudflare/split.test.mjs",
            "platform/pages/cloudflare/wrangler.toml",
            "platform/pages/redirect-stubs.mjs",
            "platform/pages/redirect-stubs.test.mjs",
            "platform/pages/verify-live.sh",
            "prompts/runs/2026-10-30-session_01XpHqyd4JjJTkybMHf2yYvR.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d727a7b0d0de7f79997bb4f9475c5c5cee8faba2",
          "at": 1793352763000,
          "title": "pages tests: render the kill-switch worker without a second full site build",
          "pr": 11735,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "perf",
          "bullets": [
            "pages tests: render the kill-switch worker without a second full site build",
            "perf run record"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 3,
          "lines_added": 161,
          "lines_removed": 1,
          "added_files": [
            "docs/history/pages-test-perf-2026-10-30.md",
            "prompts/runs/2026-10-30-session_01E5sJKkcCj3XdsfsZuajs2p.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5929c759e26231ff3ce1efe6038689f0c98a0478",
          "at": 1793393842000,
          "title": "distribution: CI install snippets on 19 linter pages + state-of-distribution report",
          "pr": 11281,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [],
          "detail": "Linter pages now show how to run the check from a terminal, GitHub Actions, pre-commit or Nix (channels that work with no account).",
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 6,
          "lines_added": 318,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-29-thirty-three-channels-none-switched-on.md",
            "docs/reports/distribution-state-2026-10-29.md",
            "platform/pages/ci-install.test.mjs",
            "prompts/runs/2026-10-29-session_01XpHqyfLW7wSEJmLBRH72gZ.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "224dcbe9fe317208ee10ac6b52667a49995195f3",
          "at": 1793400497000,
          "title": "Serve the site at marisstella.app",
          "pr": 11849,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "Serve the site at marisstella.app",
            "marisstella.app is attached in the dashboard; drop the routes key so deploys leave it alone"
          ],
          "detail": "The owner added marisstella.app to the Cloudflare account on 2026-10-30.",
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 6,
          "lines_added": 46,
          "lines_removed": 28,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5c5c0490d1f39d88ffec3eb48c219d92f0dccbac",
          "at": 1793402388000,
          "title": "Open custom development: request form, public request queue and status page",
          "pr": 11925,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "Open custom development: request form, file-backed queue, public status page, post",
            "custom-development: stack the request table on phones; run record verification notes",
            "verify-and-merge: name portfolio/requests tests in the merge checklist",
            "custom-development: pin it in the hub sitemap and llms-full tests; link the post into Start here",
            "site usage test: custom-development is a known root page"
          ],
          "detail": "Anyone can request a tool via the custom-build issue form (or the feedback form), get an ID and status in portfolio/requests/requests.json, and follow it on custom-development/ on the site, rebuilt on every merge.",
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 16,
          "lines_added": 473,
          "lines_removed": 7,
          "added_files": [
            ".github/ISSUE_TEMPLATE/custom-build.yml",
            "docs/posts/2026-10-30-open-custom-development.md",
            "platform/pages/custom-development-page.test.mjs",
            "portfolio/requests/README.md",
            "portfolio/requests/requests.json",
            "portfolio/requests/requests.mjs",
            "portfolio/requests/requests.test.mjs",
            "prompts/runs/2026-10-30-session_01XpHqybkRg7nmKewd3BzzyH.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "counter",
      "merges": [
        {
          "sha": "064ca545361fe6b54f75ee7ab1bc803dbcffd4f0",
          "at": 1793329727000,
          "title": "usage: pull GitHub repo traffic into portfolio/usage daily",
          "pr": 11635,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "process",
          "bullets": [
            "usage: pull GitHub repo traffic (views, clones, referrers, paths) daily",
            "prompts-ci: fix two validation errors already red on main"
          ],
          "detail": "GitHub keeps repo traffic for 14 days; site-usage-pull now copies it into portfolio/usage/github-traffic.json.",
          "area": {
            "kind": "platform",
            "name": "counter"
          },
          "files": 5,
          "lines_added": 251,
          "lines_removed": 2,
          "added_files": [
            "platform/counter/pull-github-traffic.mjs",
            "platform/counter/pull-github-traffic.test.mjs",
            "prompts/runs/2026-10-30-session_01XpHqye5QVf9BFrQS8X9EJN.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7063dc4a5de628c0c858c3efbc7be915b7461445",
          "at": 1793335229000,
          "title": "edge: country, device and crawler breakdowns on /hit; write up the live usage pipeline",
          "pr": 10177,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "counter"
          },
          "files": 17,
          "lines_added": 528,
          "lines_removed": 50,
          "added_files": [
            "docs/posts/2026-10-24-free-site-analytics-on-a-cloudflare-worker.md",
            "docs/reports/2026-10-24-site-usage-pipeline-live.md",
            "prompts/runs/2026-10-24-session_012Aa9y1fmABadZ5bA7HbKkZ.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "distribution",
      "merges": [
        {
          "sha": "a1bc93249e916f0d10e48ab4c4dd058f1a27a9e1",
          "at": 1793341257000,
          "title": "redteam: platform/distribution mastodon+releases 2026-10-30",
          "pr": 11702,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: guard mastodon and releases announcers against escaped mutants",
            "redteam: run record"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "distribution"
          },
          "files": 3,
          "lines_added": 372,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01AcxTtKwDrEF8d4LSdBi4oe.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c0f7d61eb69cc40d750072d344f2b1169621947e",
          "at": 1793398048000,
          "title": "Publish an allow-listed set of dev tools, versioned by what they ship",
          "pr": 11890,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "Publish an allow-listed set of dev tools, versioned by what they ship"
          ],
          "detail": "The npm and PyPI pipelines would have published all 180 / 24 qualifying CLIs at 0.1.0 forever, and tried to publish over two npm names other people own.",
          "area": {
            "kind": "platform",
            "name": "distribution"
          },
          "files": 47,
          "lines_added": 1402,
          "lines_removed": 90,
          "added_files": [
            ".github/workflows/distribute-tool-releases.yml",
            ".github/workflows/distribution-versions-ci.yml",
            "docs/posts/2026-10-30-31-tools-not-180-packages.md",
            "platform/distribution/tool-releases.mjs",
            "platform/distribution/tool-releases.test.mjs",
            "platform/distribution/versions.mjs",
            "platform/distribution/versions.test.mjs",
            "portfolio/distribution/allowlist.json",
            "portfolio/distribution/versions.json",
            "prompts/runs/2026-10-30-session_01XpHqyd12J7W81zXmALgAqK.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "daily",
      "merges": [
        {
          "sha": "69e76bfdc1683ec4d736c8e71eaa98c374a98b9b",
          "at": 1793326706000,
          "title": "progress posts: daily, three-day and weekly editions with a facts script",
          "pr": 11239,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "progress posts: daily, three-day and weekly editions with a facts script",
            "progress posts: record the schedule ids",
            "flagships: trim landed history from two next entries over the 2,000-character cap",
            "posts: fix dead site links (writing slugs drop the date; einvoice-preflight pages sit at the site root)",
            "fix two red checks from main: a 180-character post description, a doc_friction entry keyed 'what' instead of 'issue'"
          ],
          "detail": "platform/daily/progress.mjs prints the facts a progress post starts from for a 1-, 3- or 7-day window (merges, flagships against their order, busiest areas with their biggest merges, new products and programmes, run records, previous edition).",
          "area": {
            "kind": "platform",
            "name": "daily"
          },
          "files": 8,
          "lines_added": 475,
          "lines_removed": 70,
          "added_files": [
            "docs/posts/2026-10-28-progress-daily-real-files-beat-hand-written-tests.md",
            "platform/daily/progress.mjs",
            "platform/daily/progress.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "edge",
      "merges": [
        {
          "sha": "06de22270c97b18473f9dc7abdb914f17c1f938d",
          "at": 1793373328000,
          "title": "redteam: platform/edge/worker 2026-10-30",
          "pr": 11790,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: platform/edge/worker 2026-10-30",
            "redteam: run record"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "edge"
          },
          "files": 2,
          "lines_added": 178,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-30-session_01E5sJKkiLpS2bWbMoMRLo5L.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    }
  ],
  "ci": [
    {
      "sha": "44d22585bbe9792853b03ad4cf62cb907e198e4f",
      "at": 1793330216000,
      "title": "CI: three workflow jobs read the full runner switch; sync the runner README count (rest of PR #11571)",
      "pr": 11650,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "gitops/tests/test_ci_runner.py failed on main (4 failures): browser-checks-ci.yml's plan job hard-coded ubuntu-latest, and shed-designer-fuzz.yml's fuzz job and portfolio-pages.yml's deploy-cloudflare job used the switch without its fork guard.",
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 4,
      "lines_added": 4,
      "lines_removed": 4,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "83028f16f1dd7ac10b989049b6bd3f1e38ec8cc7",
      "at": 1793330226000,
      "title": "CI: three new workflow jobs read the runner switch; pages.yml sets up Node",
      "pr": 11641,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "CI: three new workflow jobs read the runner switch; sync the runner README count",
        "pages.yml: set up Node before the page generators (#11524 added a node step)"
      ],
      "detail": "browser-checks-ci.yml (plan), shed-designer-fuzz.yml (fuzz) and portfolio-pages.yml (deploy-cloudflare) skipped the fork guard of the runner switch, so gitops/tests/test_ci_runner.py failed on main.",
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 1,
      "lines_added": 5,
      "lines_removed": 0,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "9c2a530533044101d213999b20acc28e3f0f0351",
      "at": 1793340411000,
      "title": "Pages: an IndexNow refusal no longer holds back the GitHub Pages redirects",
      "pr": 11697,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [],
      "detail": "Verified locally: validate_workflows 134 valid; publish-surface/validate tests 133 passed.",
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 1,
      "lines_added": 6,
      "lines_removed": 0,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "a7be110346a8f68a9b6525ec314ae1b1401fbd57",
      "at": 1793348456000,
      "title": "ci: fold nine a11y research workflows into one job (P060)",
      "pr": 11721,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "ci: fold nine a11y research workflows into one job (P060)"
      ],
      "detail": null,
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 16,
      "lines_added": 287,
      "lines_removed": 753,
      "added_files": [
        ".github/workflows/a11y-research-ci.yml",
        "docs/posts/2026-10-30-nine-workflows-one-job.md",
        "prompts/runs/2026-10-30-session_01E5sJKiTtrq2fcotNDBhXzr.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "4cbef63882d39acfe2010e02b87d4a85fe88062e",
      "at": 1793376705000,
      "title": "prompts: review 2026-10-30 (reduced pass)",
      "pr": 11797,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "review",
      "bullets": [
        "prompts: review 2026-10-30 (reduced pass)",
        "prompts: run record for review 2026-10-30"
      ],
      "detail": null,
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 3,
      "lines_added": 61,
      "lines_removed": 5,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtHgAvVEbvD2rRHRhuX.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "fd3ece48bd9f7fa8995c8fa1157c3f160ba714e5",
      "at": 1793393516000,
      "title": "Add main branch ruleset and give the conflict-markers job a unique name",
      "pr": 11863,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "The ruleset requires one check, the only one that runs on every PR.",
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 4,
      "lines_added": 70,
      "lines_removed": 4,
      "added_files": [
        ".github/rulesets/README.md",
        ".github/rulesets/main.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "df77fcabd97dacf4c92cb43c3f3930d0686b8a93",
      "at": 1793394455000,
      "title": "workflows: commit as github-actions[bot], not the stranger GitHub calls noreply",
      "pr": 11871,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "site-usage-pull and distribute-homebrew committed as noreply@users.noreply.github.com, which GitHub reads as the private address of the account whose login is \"noreply\", so six usage-data commits on main (2026-10-24..30) show that account as a contributor.",
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 2,
      "lines_added": 4,
      "lines_removed": 2,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "1de87194843bda730e2b436200f3c8efffe927c4",
      "at": 1793397212000,
      "title": "ci: cancel superseded PR runs, skip the site test on main pushes, guard it in validate_workflows",
      "pr": 11909,
      "agent": null,
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "Merged on local verification (CI runners queued): validate_workflows 125 files valid; pytest 451 passed, 1 skipped; test_ci_runner 24 passed; node tests 34 passed.",
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 26,
      "lines_added": 394,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-30-cancelling-superseded-ci-runs.md",
        "docs/reports/2026-10-30-actions-usage.md",
        "prompts/runs/2026-10-30-session_01XpHqyd7zje2txeAbKDhHdk.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "e7d7305ca2d8dd081f9513e93aaee3ef45ca0314",
      "at": 1793398720000,
      "title": "ci: CI/CD evolution report; inert review loop skips before taking a runner",
      "pr": 11901,
      "agent": null,
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "CI green on the PR head (validate x2, scripts, gitops, conflict-markers, Pages build+test, check); the review jobs skipped before taking a runner, which is the change working.",
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 7,
      "lines_added": 417,
      "lines_removed": 4,
      "added_files": [
        "docs/posts/2026-10-30-evolving-our-ci-from-a-gate-nobody-trusts.md",
        "docs/reports/2026-10-30-ci-platform-evolution.md",
        "prompts/runs/2026-10-30-session_01XpHqydoGdaJGH3sNoMcqDs.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "6c870e714bacc7c4c3472a10b5f4f215d29b9bec",
      "at": 1793398728000,
      "title": "ideas: dictation inbox and one-box idea form for people without an agent",
      "pr": 11907,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": "process",
      "bullets": [
        "ideas: a dictation inbox and one-box idea form for people without an agent"
      ],
      "detail": "ideas/INBOX.md takes ideas typed or dictated on github.com; prompts/ideas.py lists them for sessions and moves a picked-up idea to a log with its PR.",
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 13,
      "lines_added": 378,
      "lines_removed": 0,
      "added_files": [
        ".github/ISSUE_TEMPLATE/idea.yml",
        "docs/posts/2026-10-30-dictate-an-idea-no-agent-needed.md",
        "ideas/INBOX.md",
        "ideas/README.md",
        "prompts/ideas.py",
        "prompts/runs/2026-10-30-session_01XpHqyctPBqTJmkAkKiHHkQ.json",
        "prompts/test_ideas.py"
      ],
      "revert": false,
      "fix_forward": false
    }
  ],
  "process": [
    {
      "sha": "443604e1dbb64d49f1eb3ac3368b5170807eef4d",
      "at": 1793322624000,
      "title": "prompts: review 2026-10-30",
      "pr": 11522,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "review",
      "bullets": [
        "prompts: review 2026-10-30 (claim)",
        "prompts: review 2026-10-30: hook message, derived rows, E112",
        "prompts: review 2026-10-30: fix two posts' front matter, run record"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 7,
      "lines_added": 6216,
      "lines_removed": 460,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtGxWAkmyhJGdJ4waNz.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "3e763e081702500b6480807f57ecdcd527ef4a4d",
      "at": 1793322937000,
      "title": "Fix main: post frontmatter (deck description length, roster post tags/description) and wall-framing-takeoff next: under the cap",
      "pr": 11521,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "portfolio"
      },
      "files": 1,
      "lines_added": 2,
      "lines_removed": 2,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "d33b58d91b3c35ed3c2da1f88d329c7f60e6f5fe",
      "at": 1793325949000,
      "title": "shed-designer: redraw preset pictures after the looks change (scene hashes only; images unchanged)",
      "pr": 11582,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "renders.test.mjs went red on main when #11581 merged after #11558.",
      "area": {
        "kind": "process",
        "name": "repository root"
      },
      "files": 0,
      "lines_added": 0,
      "lines_removed": 0,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "035379f50e727b958108c70dd4af03601f7134f7",
      "at": 1793325962000,
      "title": "shed-designer: r3 integration — render manifest current again after PR #11581",
      "pr": 11584,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "PR #11581 edited render3d.mjs, which moves every preset's scene hash, but did not rerun make-renders.mjs, so renders.test.mjs failed on main (726adb0d) for all six presets.",
      "area": {
        "kind": "process",
        "name": "repository root"
      },
      "files": 0,
      "lines_added": 0,
      "lines_removed": 0,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "0eb56395019295422814dccac27fe891c2453aa3",
      "at": 1793326063000,
      "title": "guidance: drop the browser-only requirement; where a tool runs is the agent's call",
      "pr": 11578,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": "process",
      "bullets": [
        "guidance: drop the browser-only requirement; where a tool runs is the agent's call"
      ],
      "detail": "The owner, 2026-10-30: browser is fine, but a strict requirement on every project is an unnecessary restriction.",
      "area": {
        "kind": "process",
        "name": "portfolio"
      },
      "files": 7,
      "lines_added": 110,
      "lines_removed": 19,
      "added_files": [
        "docs/posts/2026-10-30-no-browser-only-rule.md",
        "prompts/runs/2026-10-30-session_01XpHqycgams7N3rBhvZh6g7.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "dcffb7bbe2b2d06e2094fba44c974450650b74a3",
      "at": 1793327883000,
      "title": "shed-designer: r3b detail/compare — final lane report",
      "pr": 11627,
      "agent": "Claude",
      "models": [],
      "track": "ventures",
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "docs"
      },
      "files": 2,
      "lines_added": 52,
      "lines_removed": 22,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "3970958697bed8ecdbc8befd254aea8a1501683d",
      "at": 1793328075000,
      "title": "shed-designer: r3b renders — report: gallery pictures landed with #11561",
      "pr": 11629,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "docs"
      },
      "files": 1,
      "lines_added": 1,
      "lines_removed": 6,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "44e3e91bbaf4dd33cff1bf10718820c9cfb5f75a",
      "at": 1793329021000,
      "title": "babysitting-business-kit: a back office for a one-person babysitting business, foundation and ten lanes",
      "pr": 11583,
      "agent": null,
      "models": [],
      "track": null,
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "gitops"
      },
      "files": 157,
      "lines_added": 11289,
      "lines_removed": 42,
      "added_files": [
        "docs/posts/2026-10-30-babysitting-automations.md",
        "docs/posts/2026-10-30-babysitting-booking.md",
        "docs/posts/2026-10-30-babysitting-business-kit.md",
        "docs/posts/2026-10-30-babysitting-content.md",
        "docs/posts/2026-10-30-babysitting-deploy.md",
        "docs/posts/2026-10-30-babysitting-intake.md",
        "docs/posts/2026-10-30-babysitting-print.md",
        "docs/posts/2026-10-30-babysitting-pwa-seo.md",
        "docs/posts/2026-10-30-babysitting-references.md",
        "docs/posts/2026-10-30-babysitting-taxes.md",
        "docs/posts/2026-10-30-babysitting-website.md",
        "prompts/runs/2026-10-30-session_01XpHqyeWLBEBfeV3WLMN5wn.json",
        "ventures/babysitting-business-kit/Dockerfile",
        "ventures/babysitting-business-kit/LICENSE",
        "ventures/babysitting-business-kit/README.md",
        "ventures/babysitting-business-kit/VENTURE.yaml",
        "ventures/babysitting-business-kit/a11y.test.mjs",
        "ventures/babysitting-business-kit/admin.html",
        "ventures/babysitting-business-kit/apple-touch-icon.png",
        "ventures/babysitting-business-kit/automations-server.mjs",
        "ventures/babysitting-business-kit/automations-server.test.mjs",
        "ventures/babysitting-business-kit/automations-ui.mjs",
        "ventures/babysitting-business-kit/automations.mjs",
        "ventures/babysitting-business-kit/automations.test.mjs",
        "ventures/babysitting-business-kit/babysitting-references.html",
        "ventures/babysitting-business-kit/babysitting-taxes.html",
        "ventures/babysitting-business-kit/backup.mjs",
        "ventures/babysitting-business-kit/backup.test.mjs",
        "ventures/babysitting-business-kit/book.test.mjs",
        "ventures/babysitting-business-kit/byok.mjs",
        "ventures/babysitting-business-kit/content-ui.mjs",
        "ventures/babysitting-business-kit/content.mjs",
        "ventures/babysitting-business-kit/content.test.mjs",
        "ventures/babysitting-business-kit/deploy.test.mjs",
        "ventures/babysitting-business-kit/docker-compose.yml",
        "ventures/babysitting-business-kit/e2e.test.mjs",
        "ventures/babysitting-business-kit/engine.mjs",
        "ventures/babysitting-business-kit/engine.test.mjs",
        "ventures/babysitting-business-kit/fly.toml",
        "ventures/babysitting-business-kit/guides.test.mjs",
        "ventures/babysitting-business-kit/how-much-to-charge-for-babysitting.html",
        "ventures/babysitting-business-kit/how-to-start-a-babysitting-business.html",
        "ventures/babysitting-business-kit/icon-192.png",
        "ventures/babysitting-business-kit/icon-512.png",
        "ventures/babysitting-business-kit/icon-maskable-512.png",
        "ventures/babysitting-business-kit/icon.svg",
        "ventures/babysitting-business-kit/index.html",
        "ventures/babysitting-business-kit/intake.mjs",
        "ventures/babysitting-business-kit/intake.test.mjs",
        "ventures/babysitting-business-kit/llms.txt",
        "ventures/babysitting-business-kit/make-icons.mjs",
        "ventures/babysitting-business-kit/manifest.webmanifest",
        "ventures/babysitting-business-kit/meet-and-greet.html",
        "ventures/babysitting-business-kit/page.test.mjs",
        "ventures/babysitting-business-kit/print.mjs",
        "ventures/babysitting-business-kit/print.test.mjs",
        "ventures/babysitting-business-kit/pwa.test.mjs",
        "ventures/babysitting-business-kit/qr.fixtures.json",
        "ventures/babysitting-business-kit/qr.mjs",
        "ventures/babysitting-business-kit/qr.test.mjs",
        "ventures/babysitting-business-kit/references.mjs",
        "ventures/babysitting-business-kit/references.test.mjs",
        "ventures/babysitting-business-kit/render.yaml",
        "ventures/babysitting-business-kit/robots.txt",
        "ventures/babysitting-business-kit/self-host.html",
        "ventures/babysitting-business-kit/server.mjs",
        "ventures/babysitting-business-kit/server.test.mjs",
        "ventures/babysitting-business-kit/site.mjs",
        "ventures/babysitting-business-kit/site.test.mjs",
        "ventures/babysitting-business-kit/sitemap.xml",
        "ventures/babysitting-business-kit/slots.mjs",
        "ventures/babysitting-business-kit/slots.test.mjs",
        "ventures/babysitting-business-kit/sw.js",
        "ventures/babysitting-business-kit/tabs.mjs",
        "ventures/babysitting-business-kit/taxes.mjs",
        "ventures/babysitting-business-kit/taxes.test.mjs",
        "ventures/babysitting-business-kit/usage.mjs",
        "ventures/babysitting-business-kit/usage.test.mjs"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "c3fdecd2556b1fd3677bd64fe25b19df32f4b79b",
      "at": 1793330093000,
      "title": "shed-designer: r3 integration — round report (what merged, what broke main and why, what is open)",
      "pr": 11649,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "docs"
      },
      "files": 1,
      "lines_added": 86,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/shed-designer-round3-integration.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "500601df6a7006e05695f45d3d2c34be34778f29",
      "at": 1793333310000,
      "title": "process P059: pre-push post hook skips compound edit-then-push commands",
      "pr": 11672,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "P059: pre-push post hook skips compound edit-then-push commands",
        "P059: mark pr"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": ".claude"
      },
      "files": 4,
      "lines_added": 134,
      "lines_removed": 4,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtGwmGWbtAke7rAhJNS.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "27c69de1cc796cdf9e96ed11c7529f7ceadd04ca",
      "at": 1793334009000,
      "title": "flagships: wall-framing-takeoff next: back under its 2,000-character cap (validate red on main)",
      "pr": 11678,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "The stairs clause and the trim-board sentence carried landed history (dates and 'hand-checked' per item); history lives in ventures/wall-framing-takeoff/README.md.",
      "area": {
        "kind": "process",
        "name": "portfolio"
      },
      "files": 1,
      "lines_added": 1,
      "lines_removed": 1,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "97707770f46b80b95a7407f983853344161c98e4",
      "at": 1793337251000,
      "title": "prompts: review 2026-10-30",
      "pr": 11690,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "review",
      "bullets": [
        "prompts: review 2026-10-30 (torch note, post front matter, derived refresh)"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 6,
      "lines_added": 2337,
      "lines_removed": 73,
      "added_files": [
        "prompts/runs/2026-10-30-session_01E5sJKirzuvcp9kcAXS7BMd.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "50543b450322370496a8ef5e585aa595c7c683c7",
      "at": 1793337549000,
      "title": "perf: a perf track (~5% of runs), backlog P048–P050, and P048 part 1: guards fetch only what they read",
      "pr": 10195,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 21,
      "lines_added": 746,
      "lines_removed": 6,
      "added_files": [
        "docs/history/ci-perf-2026-10-30-guard-checkouts.md",
        "docs/history/pages-test-perf-2026-10-24.md",
        "docs/posts/2026-10-24-the-test-suite-drew-the-same-pictures-five-times.md",
        "docs/posts/2026-10-30-half-our-repository-is-80-mp3-files.md",
        "prompts/perf/prompt-0.md",
        "prompts/process/backlog/P048-guard-checkout-whole-tree.json",
        "prompts/process/backlog/P049-jobs-per-pr-head.json",
        "prompts/process/backlog/P050-pages-test-redraws-cards.json",
        "prompts/runs/2026-10-24-session_01Gcz8nVnXVeNTiqb8JKabK1-2.json",
        "prompts/runs/2026-10-30-session_01Gcz8nVnXVeNTiqb8JKabK1.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "f66de20de3b3f386a48e8de6f42145f82375536d",
      "at": 1793338010000,
      "title": "usage: daily site page-load counts, feedback and GitHub repo traffic",
      "pr": null,
      "agent": null,
      "models": [],
      "track": null,
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "portfolio"
      },
      "files": 1,
      "lines_added": 1431,
      "lines_removed": 2,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "541534734267da46ddcf22d7b23419fd30d9afe9",
      "at": 1793348134000,
      "title": "process: P049 re-measured, fan-out split into P060",
      "pr": 11719,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "process: P049 re-measured, split fan-out into P060"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 3,
      "lines_added": 72,
      "lines_removed": 2,
      "added_files": [
        "prompts/process/backlog/P060-a11y-path-fanout.json",
        "prompts/runs/2026-10-30-session_01AcxTtHjz84V31JLXxasTP4.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "d3c4006d13e572aca9a93306d5d1a01bb8c44325",
      "at": 1793355176000,
      "title": "process: bring prompt.md back under its 100-line budget",
      "pr": 11742,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "process: bring prompt.md back under its 100-line budget"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "repository root"
      },
      "files": 2,
      "lines_added": 61,
      "lines_removed": 14,
      "added_files": [
        "prompts/runs/2026-10-30-session_01E5sJKjdS7thddpqizCBtm2.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "5ef22fdffd6b0755cc87f951f17df9d68a583061",
      "at": 1793355709000,
      "title": "prompts: review 2026-10-30",
      "pr": 11744,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "review",
      "bullets": [
        "prompts: review 2026-10-30 start (derived metrics refresh)",
        "prompts: review 2026-10-30 (record suffixes duplicate session ids)"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 6,
      "lines_added": 2234,
      "lines_removed": 98,
      "added_files": [
        "prompts/runs/2026-10-30-session_01E5sJKo2Mqsh6BYJsFF2QDq.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "a146f8d7c98a0f32eb0a67551f7a4610f23c8e97",
      "at": 1793362023000,
      "title": "process: drop P049 after fresh CI profile; fan-out is P060",
      "pr": 11759,
      "agent": "Claude",
      "models": [],
      "track": "process",
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 46,
      "lines_removed": 2,
      "added_files": [
        "prompts/runs/2026-10-30-session_01EhTJVLjUUZUJ3g4ggrzZxM.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "2274c6e57c1ef46447518a446f8bdc665e082661",
      "at": 1793369643000,
      "title": "process: promptctl measure ends with DONE so wait_for.py can poll it",
      "pr": 11781,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "promptctl measure ends with DONE so wait_for.py can poll it"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 4,
      "lines_added": 59,
      "lines_removed": 1,
      "added_files": [
        "docs/posts/2026-10-30-a-background-job-needs-a-last-line.md",
        "prompts/runs/2026-10-30-session_01E5sJKkBuz5ubwWj5BoYEG5.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "f27f055e177d43de7b933837d8dc9cc9c4c8b0bc",
      "at": 1793370243000,
      "title": "process: fix main's red promptctl validate (run record missing pr)",
      "pr": 11784,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "process: fix main's red promptctl validate (run record missing pr, PR #11780)"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 50,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-30-session_01E5sJKk268tb2qt4TRW23Xt.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "b1c06f85a4393d1d9416db61aae1ffbc0028da12",
      "at": 1793376818000,
      "title": "prompts: review 2026-10-30 (second reduced pass)",
      "pr": 11798,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "review",
      "bullets": [
        "prompts: review 2026-10-30 second reduced pass log",
        "prompts: run record for review 2026-10-30"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 62,
      "lines_removed": 0,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtHx9Mz9ZDcZHnkGkyU.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "5c733e51edc4d07e3099060eeac367be071780e2",
      "at": 1793384925000,
      "title": "Fix Pages build: open-centre post description and seo_title over limit",
      "pr": 11828,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "Fix Pages build: shorten open-centre post description and seo_title",
        "Report: note concurrent fix"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "docs"
      },
      "files": 2,
      "lines_added": 68,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-30-build-front-matter-limits.md",
        "prompts/runs/2026-10-30-session_01E5sJKjDTxmLB6d8CmZ6hzc.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "06eb43a7f6c320b7be535ee1cc2a203d2f775926",
      "at": 1793391069000,
      "title": "process: pick_track.py keeps the session's first draw (doc_friction lens)",
      "pr": 11844,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "research: pick_track.py reuses the session's first draw (--new redraws)",
        "prompts: run record for pick_track draw fix"
      ],
      "detail": "Three run reports in three days said a re-run drew a different programme.",
      "area": {
        "kind": "process",
        "name": "research"
      },
      "files": 3,
      "lines_added": 93,
      "lines_removed": 3,
      "added_files": [
        "prompts/runs/2026-10-30-session_01E5sJKo71eHyDT4PV7ikwTE.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "72eb01bf209124cb53ea1448aca0790bec3de932",
      "at": 1793393898000,
      "title": "Plan for turning on billing without a payment-key leak",
      "pr": 11872,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "Owner asked how to start charging without risking a Stripe key leak via code injection.",
      "area": {
        "kind": "process",
        "name": "docs"
      },
      "files": 2,
      "lines_added": 153,
      "lines_removed": 1,
      "added_files": [
        "docs/reports/2026-10-30-billing-plan.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "353c8f460c02da03796ea0fead1ff6988658e311",
      "at": 1793394648000,
      "title": "prompts: review 2026-10-30 night",
      "pr": 11882,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "review",
      "bullets": [
        "prompts: review 2026-10-30 night (reduced pass)",
        "prompts: run record for review 2026-10-30 night"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 5,
      "lines_added": 4329,
      "lines_removed": 221,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtJ39jhteFZgqi9fY6C.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "45bfe4d16e85d0cb6779ebb7a416ad2ad46a4f46",
      "at": 1793395090000,
      "title": "Post: what files an LLM reads best, measured in tokens",
      "pr": 11881,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": "explore",
      "bullets": [
        "Post: what files an LLM reads best, measured in tokens"
      ],
      "detail": "Same content as Markdown/HTML, CSV/Markdown/JSON/XML, YAML/JSON/TOML/XML, and Python modules vs their interfaces, tokenised with o200k_base and cl100k_base.",
      "area": {
        "kind": "process",
        "name": "docs"
      },
      "files": 4,
      "lines_added": 794,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-30-what-files-llms-read-best.md",
        "docs/reports/assets/file-formats-for-llms/measure.py",
        "docs/reports/assets/file-formats-for-llms/results.json",
        "prompts/runs/2026-10-30-session_01XpHqydoqN88Sbnkt6ij4Lz.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "18aefb13a98dc41cb70b9393625f73a771642a26",
      "at": 1793395252000,
      "title": "fix main: three run records fail promptctl validate",
      "pr": 11896,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "writeups as a list (session_01AcxTtHYMPB5TPpXwoL2qkx); pr filled from the merge commits (#11839, #11821) where it was missing or null.",
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 3,
      "lines_added": 10,
      "lines_removed": 4,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "6449518db35e3134aabcb09deead3503a00e92c8",
      "at": 1793397356000,
      "title": "shed-designer: r4 integration — lane report and run record",
      "pr": 11912,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "shed-designer: r4 integration — lane report and run record"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "docs"
      },
      "files": 2,
      "lines_added": 149,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/shed-designer-round4-integration.md",
        "prompts/runs/2026-10-30-session_01XpHqydhJTVruayh891WL8o.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "f439137580a1c5c519f0d59f9dbf54b11c9ad695",
      "at": 1793398846000,
      "title": "changepoint-detector: page shows cycle, drift and range warnings",
      "pr": 11924,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "ventures",
      "bullets": [
        "changepoint-detector: page shows cycle, drift and range warnings"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 1,
      "lines_added": 51,
      "lines_removed": 0,
      "added_files": [
        "prompts/runs/2026-10-30-session_01E5sJKn8LysG3ocD7qKutTM.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "c5acce1a23e8207edbfdda032f60b89f670d6fa2",
      "at": 1793400083000,
      "title": "ideas: inbox moves to IDEAS.md at the root; website-form ideas listed too",
      "pr": 11929,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": "process",
      "bullets": [
        "ideas: move the inbox to IDEAS.md at the root; list website-form ideas too",
        "prompts: run record for the IDEAS.md follow-up",
        "flagships: trim shift-roster-builder next: under the 2000-char cap",
        "ci: give distribution-versions-ci a concurrency group"
      ],
      "detail": "The dictation inbox from PR #11907 moves from ideas/INBOX.md to IDEAS.md at the repository root, the first place a person looks; its guide moves to docs/contributing/ideas.md.",
      "area": {
        "kind": "process",
        "name": "repository root"
      },
      "files": 17,
      "lines_added": 248,
      "lines_removed": 42,
      "added_files": [
        "prompts/runs/2026-10-30-session_01XpHqycW1nSEv4yA4pbkitB.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "229359dc529e4f23d51946df9e800d29e7e78425",
      "at": 1793400825000,
      "title": "platform/ci: runner_probe.py + measured specs of the Claude Code cloud runner, plan and post",
      "pr": 11926,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "platform/ci: runner_probe.py — measure the cloud session VM (specs + quick benchmarks)",
        "runner_probe: sha_ni, CPU generation, cgroup limit, first-touch vs warm memory; B/C data",
        "runner-probe data: sessions D-F specs (all Cascade Lake)",
        "docs: runner resources report + post; A round-2 probe",
        "post: shorten description to 160 chars",
        "flagships: trim shift-roster-builder next: under the 2000-char cap (validate red on main)"
      ],
      "detail": "Merges the two 2026-10-30 page landings into one line; details stay in the venture README.",
      "area": {
        "kind": "process",
        "name": "docs"
      },
      "files": 12,
      "lines_added": 983,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-30-what-a-claude-code-cloud-session-runs-on.md",
        "docs/reports/claude-code-runner-resources.md",
        "docs/reports/data/runner-probe/session-a-r2.json",
        "docs/reports/data/runner-probe/session-a.json",
        "docs/reports/data/runner-probe/session-b-r2.json",
        "docs/reports/data/runner-probe/session-b.json",
        "docs/reports/data/runner-probe/session-c-r2.json",
        "docs/reports/data/runner-probe/session-c.json",
        "docs/reports/data/runner-probe/session-d-quick.json",
        "docs/reports/data/runner-probe/session-e-quick.json",
        "docs/reports/data/runner-probe/session-f-quick.json",
        "platform/ci/runner_probe.py"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "3d2ac23574f0a947d3dce3bcbcc09aef1b6d0bc6",
      "at": 1793401501000,
      "title": "Delete the retired hel1 cluster trees (infra/, bootstrap/, gitops/)",
      "pr": 11885,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "Delete the retired hel1 cluster trees (infra/, bootstrap/, gitops/)",
        "P013: name the PR that did it",
        "Drop the test that pinned hetzner-gitops-ci.yml; revert a stray regenerated shed-designer file",
        "Point an old post's gitops/README.md link at its last commit",
        "research/marine-path: add the live-page line (research_live_links.py --write)",
        "egress-reachability: stop exempting hosts only the deleted gitops/ served"
      ],
      "detail": "The servers were deleted on 2026-10-01; the trees were still read by CI, tools and docs.",
      "area": {
        "kind": "process",
        "name": "gitops"
      },
      "files": 264,
      "lines_added": 263,
      "lines_removed": 55185,
      "added_files": [
        "docs/posts/2026-10-30-deleting-a-dead-cluster.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "d3d6992743ea3cb5d94d413616ab0bd348a13064",
      "at": 1793401760000,
      "title": "flagships: trim shift-roster-builder next: under the 2,000-character cap",
      "pr": 11936,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "#11934 pushed it to 2,038 characters, which fails portfolio/router/validate.py for every PR.",
      "area": {
        "kind": "process",
        "name": "portfolio"
      },
      "files": 1,
      "lines_added": 1,
      "lines_removed": 1,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    }
  ],
  "new_ventures": [
    "babysitting-business-kit"
  ],
  "new_research": [
    "marine-path"
  ],
  "new_posts": [
    "2026-10-30-does-a-rand-k-rule-predict-top-k-lowcomm",
    "2026-10-30-two-wrong-numbers-a-tide-story",
    "2026-10-29-split-shift-premium-in-the-roster-notice",
    "2026-10-30-a-pilot-screen-for-llm-label-audits",
    "2026-10-30-paid-rest-breaks-in-the-shift-roster-builder",
    "2026-10-29-start-here-ai-agents-and-mcp",
    "2026-10-29-start-here-ai-bookkeeper",
    "2026-10-29-start-here-bring-an-idea",
    "2026-10-29-start-here-changepoint-detector",
    "2026-10-29-start-here-contributing",
    "2026-10-29-start-here-einvoice-preflight",
    "2026-10-29-start-here-free-tools-for-your-trade",
    "2026-10-29-start-here-league-schedule-generator",
    "2026-10-29-start-here-photo-editing",
    "2026-10-29-start-here-quick-pick-survey",
    "2026-10-29-start-here-research",
    "2026-10-29-start-here-sales-agent",
    "2026-10-29-start-here-self-hosting",
    "2026-10-29-start-here-shift-roster-builder",
    "2026-10-29-start-here-wall-framing-takeoff",
    "2026-10-29-start-here",
    "2026-10-30-scheduling-app-names-people-search-for",
    "2026-10-30-deck-framing-in-the-wall-framing-takeoff",
    "2026-10-30-how-good-must-a-sea-state-forecast-be-for-a-solar-boat",
    "2026-10-30-the-bell-will-not-carry-an-alarm-story",
    "2026-10-30-deck-framing-on-the-wall-framing-page",
    "2026-10-30-the-river-is-eight-degrees-a-cold-water-story",
    "2026-10-30-reading-the-shed-instructions-like-a-carpenter",
    "2026-10-30-where-a-shed-plate-can-break",
    "2026-10-30-shed-designer-nightly-fuzz",
    "2026-10-30-does-compression-cost-shrink-with-model-size-lowcomm",
    "2026-10-30-a-shed-floor-at-24-inches",
    "2026-10-30-seven-small-confusions-in-the-shed-designer",
    "2026-10-30-from-pos-export-to-shift-plan",
    "2026-10-30-what-each-shed-part-costs",
    "2026-10-30-a-shed-packet-for-the-hoa",
    "2026-10-30-why-a-shed-joist-runs-at-15-percent",
    "2026-10-30-searching-every-shed-under-100-square-feet",
    "2026-10-30-making-a-shed-look-like-the-house",
    "2026-10-30-shed-plans-for-the-permit-desk",
    "2026-10-30-what-matching-the-house-costs-on-a-shed",
    "2026-10-30-shade-and-shadow-on-a-shed-elevation",
    "2026-10-30-is-a-designed-shed-a-better-deal-than-a-kit",
    "2026-10-30-the-sheet-hiding-in-the-offcut",
    "2026-10-30-what-a-shed-holds-per-hundred-dollars",
    "2026-10-30-shed-lumber-lists-up-to-16x24",
    "2026-10-30-the-sliver-row-on-a-12-foot-deck",
    "2026-10-30-lap-siding-on-a-small-shed",
    "2026-10-30-pictures-of-a-shed-that-cannot-go-stale",
    "2026-10-30-concrete-piers-under-a-shed",
    "2026-10-30-no-browser-only-rule",
    "2026-10-30-boards-that-fit-in-the-truck",
    "2026-10-30-shed-designer-all-pairs-cross-feature-test",
    "2026-10-30-a-bigger-twin-pool-shortens-the-certificate",
    "2026-10-30-open-risers-and-the-4-inch-gap",
    "2026-10-30-a-stair-stringer-calculator-that-checks-the-notch",
    "2026-10-30-trusses-for-a-small-shed",
    "2026-10-30-where-a-sheds-money-goes",
    "2026-10-28-progress-daily-real-files-beat-hand-written-tests",
    "2026-10-30-auditing-the-shed-design-search",
    "2026-10-30-shed-picker-cards-drawn-ahead",
    "2026-10-30-the-browser-checks-ran-again",
    "2026-10-30-attic-storage-in-a-small-shed",
    "2026-10-30-a-barn-roof-for-the-same-money",
    "2026-10-30-shed-designer-infinity-percent",
    "2026-10-30-ten-sheds-under-100-square-feet",
    "2026-10-30-a-lean-to-shed-framed-and-priced",
    "2026-10-30-one-number-for-how-much-a-shed-holds",
    "2026-10-30-cloudflare-or-github-pages-six-days-later",
    "2026-10-30-drawing-a-barn-roof",
    "2026-10-30-babysitting-automations",
    "2026-10-30-babysitting-booking",
    "2026-10-30-babysitting-business-kit",
    "2026-10-30-babysitting-content",
    "2026-10-30-babysitting-deploy",
    "2026-10-30-babysitting-intake",
    "2026-10-30-babysitting-print",
    "2026-10-30-babysitting-pwa-seo",
    "2026-10-30-babysitting-references",
    "2026-10-30-babysitting-taxes",
    "2026-10-30-babysitting-website",
    "2026-10-30-a-deck-over-30-inches-needs-a-guard",
    "2026-10-30-the-line-between-load-sensing-and-open-centre",
    "2026-10-30-how-big-a-footing-under-a-stair-landing",
    "2026-10-30-moving-a-20000-file-site-to-cloudflares-free-plan",
    "2026-10-30-more-seeds-did-not-fix-the-scaling-rule",
    "2026-10-30-does-a-machine-that-idles-more-favour-load-sensing",
    "2026-10-30-the-barn-took-six-of-ten-cards",
    "2026-10-30-shed-size-pages-built-not-committed",
    "2026-10-30-when-to-trust-an-llm-coder-cells",
    "2026-10-30-a-shed-is-not-a-house",
    "2026-10-30-a-shed-on-blocks-needs-anchors",
    "2026-10-30-does-the-wind-lift-or-rack-a-shed",
    "2026-10-30-what-a-shed-block-presses-on-the-ground",
    "2026-10-30-a-clinched-team-that-a-tie-could-still-cost",
    "2026-10-30-shed-designer-store-comparison-like-for-like",
    "2026-10-30-shed-designer-readme-numbers-tested",
    "2026-10-30-a-cheater-who-stays-under-the-check-every-step",
    "2026-10-30-what-a-first-walkthrough-asked-of-the-shed-designer",
    "2026-10-30-shed-designer-fastener-audit",
    "2026-10-30-counting-the-trim-around-every-window",
    "2026-10-30-shed-designer-overhang-budget",
    "2026-10-30-winder-stairs-arc-vs-straight-edge",
    "2026-10-30-hail-on-old-glass-twelve-joules",
    "2026-10-30-what-hardware-a-stair-needs",
    "2026-10-30-excavator-valve-neutral-drop-flips-load-sensing",
    "2026-10-30-llms-txt-for-1286-tools",
    "2026-10-30-which-board-a-stringer-comes-from",
    "2026-10-30-studs-at-24-inches-by-default",
    "2026-10-30-a-metre-of-snow-is-not-a-load",
    "2026-10-30-fuzzing-fixed-date-pins-in-a-league-schedule",
    "2026-10-30-babysitting-activities",
    "2026-10-30-babysitting-agreements",
    "2026-10-30-babysitting-credentials",
    "2026-10-30-babysitting-insights",
    "2026-10-30-babysitting-invoices",
    "2026-10-30-babysitting-network",
    "2026-10-30-babysitting-packages",
    "2026-10-30-babysitting-safety",
    "2026-10-30-babysitting-sitreports",
    "2026-10-30-babysitting-waitlist",
    "2026-10-24-free-site-analytics-on-a-cloudflare-worker",
    "2026-10-30-checking-a-landing-post-against-your-own-table",
    "2026-10-30-how-tall-can-a-landing-post-be",
    "2026-10-30-four-more-tools-an-assistant-can-describe",
    "2026-10-30-what-holds-up-a-winder-tread",
    "2026-10-30-quantile-bound-halving-regret",
    "2026-10-30-vertical-siding-a-window-cuts-four-columns",
    "2026-10-24-the-test-suite-drew-the-same-pictures-five-times",
    "2026-10-30-half-our-repository-is-80-mp3-files",
    "2026-10-30-board-and-batten-takeoff",
    "2026-10-30-incense-smoke-mass-balance",
    "2026-10-30-the-null-series-that-was-not-quiet",
    "2026-10-30-attic-insulation-thins-at-the-eave",
    "2026-10-30-quiet-series-false-alarms",
    "2026-10-30-switching-from-a-paid-scheduler-in-one-file",
    "2026-10-30-payout-splits-random-reports",
    "2026-10-30-why-a-sealed-lid-is-not-a-safe-jar",
    "2026-10-30-does-the-informedness-cutoff-matter",
    "2026-10-30-why-boiling-well-water-raises-nitrate",
    "2026-10-30-switching-schedulers-import-your-shifts",
    "2026-10-30-is-the-informedness-cutoff-a-knife-edge",
    "2026-10-30-changepoint-detectors-read-cycles-as-steps",
    "2026-10-30-llms-txt-link-check-generated-pages",
    "2026-10-30-ci-guards-fetch-only-what-they-read",
    "2026-10-30-longer-flight-records-were-not-worse",
    "2026-10-30-1647-node-processes",
    "2026-10-30-zero-false-alarms-can-mean-zero-power",
    "2026-10-30-league-travel-table-warnings",
    "2026-10-30-pilot-quantile-halving-regret",
    "2026-10-30-nine-workflows-one-job",
    "2026-10-30-league-scheduler-travel-table-warnings-on-the-page",
    "2026-10-30-bookkeeping-software-that-learns-your-payees",
    "2026-10-30-siding-page-vertical-battens-trim",
    "2026-10-30-deck-stairs-from-the-deck-height",
    "2026-10-30-a-tag-spelled-two-ways-reddened-main",
    "2026-10-30-ar1-joint-keeps-a-step-in-a-cycle",
    "2026-10-30-punishment-works-only-if-the-punished-listen",
    "2026-10-30-changepoint-cycle-warning",
    "2026-10-30-babysitting-kit-safety-review",
    "2026-10-30-a-deck-railing-on-the-page",
    "2026-10-30-residual-autocorrelation-not-a-cycle-test",
    "2026-10-30-a-salon-week-with-three-chairs-nobody-can-fill",
    "2026-10-30-deck-stair-on-the-page",
    "2026-10-30-standby-flow-load-sensing-excavator",
    "2026-10-30-slow-drift-looks-like-changepoints",
    "2026-10-30-a-cycle-test-that-steps-cannot-fool",
    "2026-10-30-hanger-end-radius-limit",
    "2026-10-30-sales-reply-reader-missed-4-of-10-opt-outs",
    "2026-10-30-uk-e-invoicing-roadmap-published",
    "2026-10-30-the-14-day-window-moves-across-your-week",
    "2026-10-30-uk-einvoicing-roadmap-no-penalty-amount",
    "2026-10-30-one-sheet-for-every-division",
    "2026-10-30-pairwise-survey-1000-items-through-the-route",
    "2026-10-30-testing-payment-reminders-on-random-books",
    "2026-10-30-clicking-the-season-grid-download",
    "2026-10-30-what-a-daily-hour-cap-costs-a-schedule",
    "2026-10-30-open-centre-excavator-valve-cycle-time",
    "2026-10-30-blocking-between-deck-joists",
    "2026-10-30-a-drift-warning-that-fires-on-real-steps",
    "2026-10-30-team-unavailable-dates-multi-division-schedule",
    "2026-10-30-bookkeeping-for-movers-from-a-bank-statement",
    "2026-10-30-counting-joist-hangers-in-a-floor-takeoff",
    "2026-10-30-our-example-invoice-pdfs-had-no-pages",
    "2026-10-30-the-test-job-was-redrawing-1200-pictures",
    "2026-10-30-prewhitening-does-not-fix-a-cycle",
    "2026-10-30-a-background-job-needs-a-last-line",
    "2026-10-30-boat-current-line-of-sight-offset",
    "2026-10-30-india-einvoice-payload-precheck",
    "2026-10-30-kenya-etims-no-invoice-no-deduction",
    "2026-10-30-a-two-line-rule-for-when-to-stratify-an-audit",
    "2026-10-30-turkish-tax-numbers-have-two-check-digit-rules",
    "2026-10-30-the-cold-corner-of-the-dormitory",
    "2026-10-30-why-the-cull-rejected-your-picks",
    "2026-10-30-no-quantile-bounds-halving-regret",
    "2026-10-30-bookkeeping-for-pool-service-routes-from-a-bank-csv",
    "2026-10-30-seeding-bugs-in-the-stories-page",
    "2026-10-30-checking-the-schedule-checker",
    "2026-10-30-open-centre-slowdown-depends-on-the-bypass-law",
    "2026-10-30-is-the-compression-excess-flat-in-h-lowcomm",
    "2026-10-30-dupehound-keyboard-focus-was-invisible",
    "2026-10-30-yoga-studio-bookkeeping-from-a-bank-csv",
    "2026-10-30-quickbooks-payroll-debits-were-filed-as-software",
    "2026-10-30-pressure-washing-bookkeeping-from-a-bank-csv",
    "2026-10-30-one-call-from-a-pilot-to-the-rest-of-the-audit",
    "2026-10-30-llms-txt-for-three-browser-tools",
    "2026-10-30-llms-txt-for-sites-in-a-subfolder",
    "2026-10-30-bookkeeper-keywords-outside-the-us",
    "2026-10-30-bank-descriptions-probe-adp-square-toast",
    "2026-10-30-luxembourg-bill-8815-committee-stage",
    "2026-10-30-probing-a-bookkeeper-with-95-bank-descriptions",
    "2026-10-30-open-centre-cycle-penalty-is-not-a-pump-limit",
    "2026-10-30-yesterdays-sea-state-solar-boat",
    "2026-10-30-does-an-open-centre-valve-slow-the-dig",
    "2026-10-30-seven-days-in-a-row-across-the-week-line",
    "2026-10-30-egypt-eta-e-invoices-and-e-receipts",
    "2026-10-30-a-daycare-week-where-a-split-shift-adds-six-covered-slots",
    "2026-10-30-checking-an-indian-e-invoice-payload-from-the-command-line",
    "2026-10-30-when-a-valve-model-stops-describing-a-valve",
    "2026-10-30-persistence-forecast-needs-long-spells",
    "2026-10-30-probing-a-categorizer-for-gaps",
    "2026-10-30-audit-library-matches-the-experiments",
    "2026-10-30-the-days-in-a-row-limit-now-crosses-monday",
    "2026-10-30-check-an-india-e-invoice-payload-in-your-browser",
    "2026-10-30-second-gap-probe-trades-retail-health",
    "2026-10-30-the-shadow-rule-a-sports-day-story",
    "2026-10-30-four-curves-one-plateau-low-communication-training",
    "2026-10-30-500-draws-can-mislead-by-two-points",
    "2026-10-30-a-toy-civilization-that-never-cycles",
    "2026-10-30-a-sloped-rafter-needs-a-sloped-hanger",
    "2026-10-30-should-a-1300-tool-static-site-move-to-astro",
    "2026-10-30-hz5-or-hz10-and-what-5-4-trim-costs",
    "2026-10-30-the-shed-gallery-was-leaving-money-on-the-table",
    "2026-10-30-pointing-at-every-shed-part",
    "2026-10-29-thirty-three-channels-none-switched-on",
    "2026-10-30-every-shed-sheet-drawn",
    "2026-10-30-league-calendar-reminders",
    "2026-10-30-the-pdf-around-the-e-invoice",
    "2026-10-30-a-first-visit-to-the-shed-designer",
    "2026-10-30-vat-checksums-for-eleven-more-countries",
    "2026-10-30-the-shed-paint-line-was-missing-the-trim",
    "2026-10-30-a-shed-with-no-floor",
    "2026-10-30-ai-bookkeeper-fourth-gap-probe",
    "2026-10-30-a-shed-site-plan-an-hoa-can-read",
    "2026-10-30-when-the-wind-turns-a-shed-truss-inside-out",
    "2026-10-30-shorter-search-titles-batch-3",
    "2026-10-30-first-tank-number-wigley-hull",
    "2026-10-30-board-and-batten-with-exterior-boards-costs-less",
    "2026-10-30-persistence-three-sea-states-solar-boat",
    "2026-10-30-a-shed-link-that-shows-the-shed",
    "2026-10-30-a-saltbox-roof-framed-and-checked",
    "2026-10-30-contribute-from-chatgpt",
    "2026-10-30-what-files-llms-read-best",
    "2026-10-30-the-fifth-day-a-cemetery-vase-story",
    "2026-10-30-a-second-pass-at-the-shed-price-gaps",
    "2026-10-30-ai-bookkeeper-fifth-gap-probe",
    "2026-10-30-what-lp-smartside-panels-hold-against-the-wind",
    "2026-10-30-drawing-a-saltbox",
    "2026-10-30-the-barn-gusset-was-too-small",
    "2026-10-30-eight-agents-one-shed-designer",
    "2026-10-30-start-here-drone-scale-models",
    "2026-10-30-start-here-every-way-to-help",
    "2026-10-30-start-here-excavator-hydraulics",
    "2026-10-30-start-here-freelancer-tax-set-aside",
    "2026-10-30-start-here-house-construction-research",
    "2026-10-30-start-here-how-the-agent-fleet-is-measured",
    "2026-10-30-start-here-llm-coding-qualitative-data",
    "2026-10-30-start-here-llm-cost-and-safety-tools",
    "2026-10-30-start-here-low-communication-training",
    "2026-10-30-start-here-marine-hull-research",
    "2026-10-30-start-here-open-source-chip-design",
    "2026-10-30-start-here-open-tennis-robots",
    "2026-10-30-start-here-report-a-wrong-number",
    "2026-10-30-start-here-reproduce-a-result",
    "2026-10-30-start-here-run-agents-on-your-own-repo",
    "2026-10-30-start-here-share-real-data",
    "2026-10-30-start-here-shed-designer",
    "2026-10-30-start-here-sim2real-robot-testing",
    "2026-10-30-start-here-verifiable-training",
    "2026-10-30-start-here-your-first-pull-request",
    "2026-10-30-cancelling-superseded-ci-runs",
    "2026-10-30-two-doors-26-inches-apart-and-a-lap-joint-with-nothing-behind-it",
    "2026-10-30-bulgaria-e-invoicing-draft-status",
    "2026-10-30-agents-fix-code-scanning-alerts",
    "2026-10-30-a-way-up-to-the-barn-loft",
    "2026-10-30-clerestory-windows-on-a-lean-to",
    "2026-10-30-31-tools-not-180-packages",
    "2026-10-30-what-does-compression-cost-diloco-paper-section-lowcomm",
    "2026-10-30-catamaran-tank-data-vs-placeholder-wave-term",
    "2026-10-30-marine-hull-paper-draft-two-open-hypotheses",
    "2026-10-30-four-ground-anchors-for-a-shed",
    "2026-10-30-score-sheets-for-multi-division-leagues",
    "2026-10-30-wind-turns-a-barn-tie-into-a-column",
    "2026-10-30-contribute-by-writing",
    "2026-10-30-evolving-our-ci-from-a-gate-nobody-trusts",
    "2026-10-30-dictate-an-idea-no-agent-needed",
    "2026-10-30-the-search-tries-saltboxes",
    "2026-10-30-slow-excavator-valve-energy",
    "2026-10-30-what-2000-dollars-buys-in-a-lap-sided-shed",
    "2026-10-30-a-1-3-inch-gap-behind-a-siding-joint",
    "2026-10-30-storage-you-cannot-stand-on",
    "2026-10-30-what-a-claude-code-cloud-session-runs-on",
    "2026-10-30-ai-bookkeeper-sixth-gap-probe",
    "2026-10-30-indonesia-faktur-pajak-coretax-npwp-16-digits",
    "2026-10-30-deleting-a-dead-cluster",
    "2026-10-30-who-should-have-had-that-shift-seniority-report",
    "2026-10-30-brendan-and-the-island-that-was-a-whale",
    "2026-10-30-ai-bookkeeper-seventh-gap-probe",
    "2026-10-30-bookkeeper-fifth-gap-probe",
    "2026-10-30-two-lags-did-not-beat-one-on-a-cycle",
    "2026-10-30-open-custom-development",
    "2026-10-30-ai-bookkeeper-eighth-gap-probe",
    "2026-10-30-ai-bookkeeper-ninth-gap-probe"
  ],
  "reverts": [],
  "fix_forwards": [
    {
      "sha": "3e763e081702500b6480807f57ecdcd527ef4a4d",
      "at": 1793322937000,
      "title": "Fix main: post frontmatter (deck description length, roster post tags/description) and wall-framing-takeoff next: under the cap",
      "pr": 11521,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "portfolio"
      },
      "files": 1,
      "lines_added": 2,
      "lines_removed": 2,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "fa65ca3e165763ca5268d6f83d811108eb57f240",
      "at": 1793326790000,
      "title": "shed-designer: r3 lap siding — stud spacing each lap product allows, planks within the haul limit; fix main's red",
      "pr": 11611,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "shed-designer: r3 lap siding — stud spacing each lap product allows, cited and exposed for right-sizing",
        "shed-designer: lap planks honour the haul limit; fix main's typecheck red from #11550"
      ],
      "detail": null,
      "area": {
        "kind": "product",
        "name": "shed-designer"
      },
      "files": 6,
      "lines_added": 54,
      "lines_removed": 13,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "88e0301591746c8066dd6e2430977154578daa86",
      "at": 1793331827000,
      "title": "shed-designer: type designDiff's settings table (typecheck); the sitemap lists every hand-written page (hoa-packet.html was missing)",
      "pr": 11657,
      "agent": null,
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "Fixes main's red changed-ventures (typecheck) and test (venture-sitemap-coverage) after #11579.",
      "area": {
        "kind": "product",
        "name": "shed-designer"
      },
      "files": 4,
      "lines_added": 10,
      "lines_removed": 3,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "951ac9ddc2b42b39265ef69d2bbc0159b807fd92",
      "at": 1793336148000,
      "title": "docs: fix the snow-load post's Hearth & Horizon link (main's Pages build is red)",
      "pr": 11682,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [],
      "detail": "Verified locally: full build for the Cloudflare origin, then check.mjs: 1321 products, 5700 pages, no dead links.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 1,
      "lines_added": 1,
      "lines_removed": 1,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "50543b450322370496a8ef5e585aa595c7c683c7",
      "at": 1793337549000,
      "title": "perf: a perf track (~5% of runs), backlog P048–P050, and P048 part 1: guards fetch only what they read",
      "pr": 10195,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 21,
      "lines_added": 746,
      "lines_removed": 6,
      "added_files": [
        "docs/history/ci-perf-2026-10-30-guard-checkouts.md",
        "docs/history/pages-test-perf-2026-10-24.md",
        "docs/posts/2026-10-24-the-test-suite-drew-the-same-pictures-five-times.md",
        "docs/posts/2026-10-30-half-our-repository-is-80-mp3-files.md",
        "prompts/perf/prompt-0.md",
        "prompts/process/backlog/P048-guard-checkout-whole-tree.json",
        "prompts/process/backlog/P049-jobs-per-pr-head.json",
        "prompts/process/backlog/P050-pages-test-redraws-cards.json",
        "prompts/runs/2026-10-24-session_01Gcz8nVnXVeNTiqb8JKabK1-2.json",
        "prompts/runs/2026-10-30-session_01Gcz8nVnXVeNTiqb8JKabK1.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "4bafd0c0017378e90dcd8403d1cab1c939695940",
      "at": 1793347732000,
      "title": "process: fix 176-char post description that turns main_health red",
      "pr": 11717,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "Fix 176-char post description that fails check_post_frontmatter and promptctl validate on main"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 47,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtGN1W69yU3uv76n2wX.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "f495228a8ee3fe2af9a2f1f9dce4c4fcc4a632a2",
      "at": 1793351371000,
      "title": "process: fix 'decks'/'deck' tag split that reddened main's front-matter check",
      "pr": 11727,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "docs/posts: spell the deck tag one way so main's front-matter check passes",
        "prompts: run record for process/1 tag fix"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 57,
      "lines_removed": 1,
      "added_files": [
        "docs/posts/2026-10-30-a-tag-spelled-two-ways-reddened-main.md",
        "prompts/runs/2026-10-30-session_01AcxTtGQAjM6Syb51H4gXVa.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "f27f055e177d43de7b933837d8dc9cc9c4c8b0bc",
      "at": 1793370243000,
      "title": "process: fix main's red promptctl validate (run record missing pr)",
      "pr": 11784,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "process: fix main's red promptctl validate (run record missing pr, PR #11780)"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 50,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-30-session_01E5sJKk268tb2qt4TRW23Xt.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "460ae4ff3772b1142e2fede5d5f06257080b4624",
      "at": 1793380247000,
      "title": "process: fix red main (post descriptions over 160, null pr in run record)",
      "pr": 11814,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "Fix red main: shorten two post descriptions, fill creative run record pr"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 4,
      "lines_added": 49,
      "lines_removed": 3,
      "added_files": [
        "prompts/runs/2026-10-30-session_01AcxTtJbCK1PqU2vnJvz4nW.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "4edb140469c83a66aaa2db599e7e7b04a25f6ae7",
      "at": 1793392321000,
      "title": "fix main: post frontmatter lengths, four flagship next: entries under 2,000 characters",
      "pr": 11850,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "check_post_frontmatter.py and portfolio/router/validate.py were red on main (found by the shed-designer round-4 integration sweep).",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 74,
      "lines_removed": 35,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "4427c779cbef12b53c98d8b93aee931cbd1d8bbe",
      "at": 1793395140000,
      "title": "fix main: marine-path README live-page link; 14-day notice page FAQ answers match their JSON-LD",
      "pr": 11892,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "research_live_links.py and faq-visible.test.mjs were red on main.",
      "area": {
        "kind": "product",
        "name": "shift-roster-builder"
      },
      "files": 2,
      "lines_added": 5,
      "lines_removed": 3,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "18aefb13a98dc41cb70b9393625f73a771642a26",
      "at": 1793395252000,
      "title": "fix main: three run records fail promptctl validate",
      "pr": 11896,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "writeups as a list (session_01AcxTtHYMPB5TPpXwoL2qkx); pr filled from the merge commits (#11839, #11821) where it was missing or null.",
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 3,
      "lines_added": 10,
      "lines_removed": 4,
      "added_files": [],
      "revert": false,
      "fix_forward": true
    }
  ],
  "biggest": {
    "sha": "3d2ac23574f0a947d3dce3bcbcc09aef1b6d0bc6",
    "at": 1793401501000,
    "title": "Delete the retired hel1 cluster trees (infra/, bootstrap/, gitops/)",
    "pr": 11885,
    "agent": "Claude Opus 5.5",
    "models": [
      "Claude Opus 5.5"
    ],
    "track": null,
    "bullets": [
      "Delete the retired hel1 cluster trees (infra/, bootstrap/, gitops/)",
      "P013: name the PR that did it",
      "Drop the test that pinned hetzner-gitops-ci.yml; revert a stray regenerated shed-designer file",
      "Point an old post's gitops/README.md link at its last commit",
      "research/marine-path: add the live-page line (research_live_links.py --write)",
      "egress-reachability: stop exempting hosts only the deleted gitops/ served"
    ],
    "detail": "The servers were deleted on 2026-10-01; the trees were still read by CI, tools and docs.",
    "area": {
      "kind": "process",
      "name": "gitops"
    },
    "files": 264,
    "lines_added": 263,
    "lines_removed": 55185,
    "added_files": [
      "docs/posts/2026-10-30-deleting-a-dead-cluster.md"
    ],
    "revert": false,
    "fix_forward": false
  },
  "runs": {
    "runs": 220,
    "by_track": [
      [
        "ventures",
        78
      ],
      [
        "research",
        49
      ],
      [
        "creative",
        29
      ],
      [
        "process",
        22
      ],
      [
        "redteam",
        12
      ],
      [
        "perf",
        10
      ],
      [
        "polish",
        9
      ],
      [
        "review",
        6
      ],
      [
        "explore",
        5
      ]
    ],
    "by_outcome": [
      [
        "success",
        198
      ],
      [
        "partial",
        22
      ]
    ],
    "by_model": [
      [
        "claude-sonnet-5-5",
        181
      ],
      [
        "unrecorded",
        25
      ],
      [
        "claude-opus-5-5",
        13
      ],
      [
        "null",
        1
      ]
    ],
    "measured": 39,
    "api_usd": 37.49,
    "active_minutes": 302,
    "errors": [
      "ci_profile.py hit HTTP 502 from the GitHub API",
      "first launch of scale.py failed: torch missing from the container; pyenv.py install took about 25 min",
      "assets.danfoss.com and hydraulicsonline.com do not resolve from the session; PVG 32 manual unopened",
      "numpy missing from default python3; used /usr/bin/python3.13",
      "a stray 'cat >> /dev/null' in my own command hung the shell for 120s",
      "Drafted an ergot story before finding The Float Test already covers it; switched topic (cost one draft's thinking, no files).",
      "Merging PR #10195 took 9 CI cycles (02:17-05:05 UTC): each run failed on something main broke during the previous ~30-minute cycle (post descriptions, run records, shed-designer sitemap/money, apex mirror, runner switch, flagships.yaml, babysitting worker/favicons/table headers, verify-live shellcheck, shard count) or conflicted with main. Each was fixed or ported here.",
      "Committed unresolved conflict markers in the README on #11528 once; caught by the README test and fixed before merge.",
      "#11524 broke two things after it merged: pages.yml had no setup-node for the generator (fixed in #11641), and renders.test.mjs read size pages from disk (fixed in #11654).",
      "An instructions test hard-coded a 6\" overhang and failed once the auto overhang moved; pinned it to autoOverhang:false.",
      "Fastener post first said 660 siding nails (the build needs 600) and gave the wrong preset counts; corrected before merge.",
      "First version accepted T1-11 on 24-inch studs (unrated); caught before merge and rejected in evaluateDesign.",
      "#11853 put make-gallery.mjs among the build's generators; it rewrites a committed file, which raced build.test.mjs's parallel builds and turned main's pages test red. Fixed in #11915.",
      "#11876 failed check_money_sign (a money() that put the minus inside the $); fixed before merge.",
      "Merged #11853 and #11858 believing no check runs had registered (get_check_runs returned none); CI had in fact run and gone red on early heads. Later PRs read the job logs before merging.",
      "Planned a single static-assets Worker; a measured build (18,646 files plus 1,454 from the dev analyses and deploy guide) is over the free plan's 20,000-file limit, so the site is split across two Workers.",
      "A sweep script edited while bash was running it garbled one step (bash reads scripts incrementally); later sweeps ran a copy.",
      "My own post went in at 161 characters of description once; fixed in the same PR before merge.",
      "First fuzz run with trusses broke 629 of 2000 designs (stale row name, chord over a cap splice, overhang-0 profile, buckling reported as Infinity); all fixed before the first push.",
      "First draft of the blog post claimed trusses were cheapest on the default 8x12; a like-for-like recheck (birdsmouth seats) showed the ridge board cheapest everywhere, and the post was rewritten before push.",
      "First preflight failed: count files (sync_tree_counts, sync_readme_counts) were stale after adding a venture; regenerated and committed.",
      "Nine lane posts had descriptions over 160 characters; shortened before merging.",
      "PR1 merge attempts were refused three times by a stale mergeability state and moving main; resolved by merging main again each time",
      "the squash merge of PR1 left the part-2 branch with many add/add conflicts; rebuilt part 2 as a fresh branch with only its own diff",
      "subscribe_pr_activity was first called with a guessed PR number (11884, then 11920 for 11917); fixed by subscribing to the right numbers",
      "First background test run ran the whole repository's tests (a cd that did not take in a backgrounded command); killed and rerun with absolute paths.",
      "First siding-note version compared against unnested current strips and over-claimed a saving; estimate.test caught it before merge.",
      "Pushed PR 11855 before running the looks test after adding window-glass flags; CI changed-ventures went red on it, fixed in the next commit.",
      "Resolving PR 11870's merge conflict with `git checkout --ours` dropped main's new wall-trim and climate options from index.html; caught by diffing against main and redone by re-applying only this PR's patch.",
      "A merge-resolution loop committed two files with a bad auto-resolution (app.mjs, checks.mjs import conflicts) because the commit was not gated on node --check; fixed in the next commit.",
      "One push carried a failing test because the test step was not gating the commit in a && chain; fixed minutes later."
    ],
    "friction": [
      {
        "file": "CLAUDE.md",
        "n": 16,
        "issue": "bare python3 lacked numpy; pyenv.py reported the default python3 fine only after a first failure, so the import error cost a round trip"
      },
      {
        "file": "research/CLAUDE.md",
        "n": 16,
        "issue": "plain python3 lacks pytest; ran tests with a stub, so two pytest-specific tests could not run locally"
      },
      {
        "file": "prompt.md",
        "n": 8,
        "issue": "Step 0 says fetch origin security-alerts; the branch did not exist (fatal), so the queue was unreadable. Harmless but unmentioned."
      },
      {
        "file": "prompts/review/prompt-1.md",
        "n": 6,
        "issue": "derive.py fetch needed two wait_for polls (~4 min); otherwise clear."
      },
      {
        "file": "prompts/creative/prompt-0.md",
        "n": 5,
        "issue": "Says the BIBLE next-up list holds proposals; nearly all are Done, so the run had to invent a Little Lamps subject."
      },
      {
        "file": "prompts/polish/prompt-0.md",
        "n": 4,
        "issue": "Points at a duncan-haywood.github.io hub URL, but CLAUDE.md says the catalogue is served from workers.dev."
      },
      {
        "file": "research/_shared/pick_track.py",
        "n": 4,
        "issue": "Two runs a minute apart drew different programmes (verified-dse, then heavy-hydraulics); the draw is not stable within a run."
      },
      {
        "file": "prompts/redteam/prompt-0.md",
        "n": 4,
        "issue": "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."
      },
      {
        "file": "prompts/ventures/prompt-1.md",
        "n": 2,
        "issue": "Brief is very long; flagship next: text is thousands of characters, costly to scan for a small slice."
      },
      {
        "file": "prompts/process/prompt-2.md",
        "n": 2,
        "issue": "Only owner rows open; most recent friction entries were already fixed, so finding a live item took several probes."
      },
      {
        "file": "prompts/perf/prompt-0.md",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "research/heavy-hydraulics/README.md",
        "n": 1,
        "issue": "Status line still says 2a to 2g done; log is at 2n. Added a Latest line rather than rewriting."
      },
      {
        "file": "research/PROGRAMMES.md",
        "n": 1,
        "issue": "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"
      },
      {
        "file": "research/heavy-hydraulics/PROPOSAL.md",
        "n": 1,
        "issue": "Danfoss PVG 32 document URLs 404/403 this session, so the planned k fit could not be done; log said host was reachable earlier."
      },
      {
        "file": "research/marine-hull/PROPOSAL.md",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "platform/ci/research_live_links.py",
        "n": 1,
        "issue": "--write also rewrote an unrelated project's README (marine-path); had to revert it by hand"
      },
      {
        "file": "research/verified-dse/reproduce.sh",
        "n": 1,
        "issue": "LOG milestone 40 script kth_inflate was missing from the theory loop; added it."
      },
      {
        "file": "research/marine-hull/LOG.md",
        "n": 1,
        "issue": "milestone 3 (tank data) is still blocked; Crossref and arXiv answer but return papers, not tables"
      },
      {
        "file": "portfolio/flagships.yaml",
        "n": 1,
        "issue": "ai-bookkeeper next: names a third real labelled set as wanted, but no reachable public source was found; hackedu/finances is Hack Club's already-scored ledger."
      },
      {
        "file": "research/PROGRAMMES.md / pick_track.py",
        "n": 1,
        "issue": "Drew sim2real-inference, whose remaining items are all blocked on owner steps or unavailable data; picked lowcomm-training instead."
      },
      {
        "file": ".claude/hooks/check_posts_before_push.py",
        "n": 1,
        "issue": "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`."
      },
      {
        "file": "prompts/process/prompt-1.md",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "ventures/changepoint-detector/README.md",
        "n": 1,
        "issue": "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"
      },
      {
        "file": ".github/prompts/cloud-session.md",
        "n": 1,
        "issue": "torch install via pyenv.py took several minutes; the stop hook fired repeatedly meanwhile, forcing WIP commits"
      },
      {
        "file": "prompts/ventures/prompt-2.md",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "prompts/promptctl.py record",
        "n": 1,
        "issue": "Refuses when a record for the same session id exists (session ids repeat across scheduled firings); had to write the second file by hand."
      },
      {
        "file": "research/llm-coding-inference/LOG.md",
        "n": 1,
        "issue": "Log is not strictly newest-first in the older sections; had to grep headings to find the latest milestone."
      },
      {
        "file": "docs/reports/shed-designer-overnight-lane2.md",
        "n": 1,
        "issue": "Its guidance on merging generated size pages went stale once #11524 landed; the round-2 lane report replaces it."
      },
      {
        "file": ".github/ISSUE_TEMPLATE/config.yml",
        "n": 1,
        "issue": "The no-account feedback link pointed at duncan-haywood.github.io/monorepo-projects/feedback/, which returns 404; fixed to the Cloudflare host."
      },
      {
        "file": "docs/contributing/README.md",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "ventures/shed-designer/README.md",
        "n": 1,
        "issue": "'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)."
      },
      {
        "file": "prompts/promptctl.py",
        "n": 1,
        "issue": "record fills a model field, while the session rules forbid model identifiers in pushed artifacts; left null."
      },
      {
        "file": "docs/contributing/ideas.md (from PR #11907)",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "platform/pages/generated-pages.mjs",
        "n": 1,
        "issue": "Nothing said a generator must write only gitignored files; now it does."
      },
      {
        "file": "portfolio/research-tools/README.md",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "PRODUCT_PLAYBOOK.md",
        "n": 1,
        "issue": "§7 'no key, no account' contradicted §3's API-key switch and §2's 'account only if needed'."
      },
      {
        "file": ".github/ISSUE_TEMPLATE/idea.yml",
        "n": 1,
        "issue": "No tool here creates repo labels, so the 'idea' label may not exist yet; the inbox script searches by the '[idea]' title prefix instead."
      },
      {
        "file": ".github/workflows/distribute-pypi-packages.yml",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "portfolio/hosting/README.md",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "platform/pages/build.mjs",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "platform/ci/validate_workflows.py",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "gitops/ci/README.md",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "docs/reports/assets/file-formats-for-llms/measure.py",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "ventures/shed-designer/browser.test.mjs",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "platform/pages/venture-preflight.mjs",
        "n": 1,
        "issue": "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."
      },
      {
        "file": "ventures/shed-designer/renders.mjs",
        "n": 1,
        "issue": "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"
      },
      {
        "file": "platform/ci/typecheck.mjs",
        "n": 1,
        "issue": "The round brief names node platform/ci/typecheck.mjs; the script is platform/pages/typecheck.mjs."
      },
      {
        "file": "ventures/shed-designer/model.mjs",
        "n": 1,
        "issue": "PRESETS are factories (call p()), not designs; passing one to buildShed silently builds the default design, which made a first test pass vacuously."
      },
      {
        "file": "ventures/shed-designer/make-renders.mjs",
        "n": 1,
        "issue": "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."
      }
    ],
    "notes": [
      "Milestone 6al: guarded J_hat screen. 3 of 4 predictions held, 1 refuted on a tie. Local check: research/_homepage/build.py ok.",
      "main_health 28/30 before fix. Backlog ids untouched; P048 result still unmeasured (ci_profile needs API). Run ended partial: only the red-main fix.",
      "main_health.py: 28/30; check_post_frontmatter and promptctl validate red on a deck/decks tag split; fixed. No backlog ids touched.",
      "heavy-hydraulics 3e: bracket fix, prediction refuted, large-k rows recorded as validity limit.",
      "Negative result on flagship 4 (AR(2) prewhitening); no engine change. Venture preflight not run: no venture code changed.",
      "creative: Little Lamps, brendan-and-the-island-that-was-a-whale; text only (audio 423 MB > 400 MB cap). No security-alerts branch existed; ideas inbox empty.",
      "Free-choice draw; advanced marine-hull milestone 3 with CC BY tank data from Zenodo. Checks run: 3 new tests, build.py ok, check_md_links ok.",
      "Filled in by session_01XpHqyeWLBEBfeV3WLMN5wn from git only: this skeleton landed with PR #11673 (merged, commit 30acd645) with outcome unset, which turned `promptctl.py validate` red on main. Outcome is success because the PR merged; nothing else is known about the run.",
      "wall-framing-takeoff: winder framing supports counted; stairs.test.mjs 43 pass.",
      "Red baseline on platform/pages/writing.mjs: 2 committed posts (from #11684, #11685) lacked description, failing the suite and the site build. Fixed both. Campaign 8 mutants, catch 5/8 -> 6/8 equivalent excluded; after fix 100%.",
      "Milestone 3a of heavy-hydraulics: flow-sharing model, prediction half refuted (median 6.4%). pytest 10 pass, homepage build ok, md links ok.",
      "Backlog P059. Hook tests pass; promptctl validate ok. Not run: unittest discover, main_health.",
      "No new blog post: review-only reduced pass, nothing for readers. Also fixed front matter of two main posts that failed validate.",
      "Small step: carried milestone 6am into paper section 6 plus a post. No new experiment; the programme is blocked on model weights (HF 403).",
      "6k: 14 size-2 runs; H=16/32/64 excess flat at about +0.044 with six seeds; 6j dip was seed noise. torch via pyenv.py worked.",
      "Paper-section draft from logged 6a-6m results; no new runs. Cite ids not re-checked this run (checked 2026-10-29).",
      "Project hearth-and-horizon, slug the-lid-that-held; text only (audio 423 MB over cap). Caught and fixed two arithmetic slips in the draft (500x not 1000x; 3x not 50x) before commit.",
      "Project: Hearth & Horizon. Slug: the-roof-nobody-washed. Text only (423 MB audio over 400 cap). First drafted topic (nitrate) already existed as the-water-that-boils-down; switched to asbestos roof.",
      "Campaigns on check_md_links.py, reflow.mjs, check_duplicate_ids.py (22 mutants, 17 caught). 3 gaps in reflow.mjs closed by tests; 2 equivalent. No real defects found.",
      "Local checks: research homepage build ok, check_md_links ok. heavy-hydraulics tests not run (no pytest). k=20 row flagged as solver artefact.",
      "Local Postgres 16 via scripts/test-db.sh; full integration suite 111 passed. Single respondent, noiseless.",
      "No blog post: reduced scheduled review. validate flags pre-existing record 2026-10-30-session_01EhTJVP2LYJGk5RmcoFeD9q.json with pr null (another run's).",
      "Backlog ids P049 (re-measured, premise partly stale), P060 (filed). Critique/split run; no blog post: bookkeeping-only, shipped no product change.",
      "Stdlib analysis of existing cells; build.py ok and md links ok locally. Predictions disclosed as non-blind. No agent doc written.",
      "creative: hearth-and-horizon, slug three-cents-a-degree, text only (audio 423 MB > 400). Caught and fixed a weekday error (2 Nov 2048 is Monday) and euro vs pounds before commit.",
      "Reduced pass: log only. No blog post: nothing found worth writing up.",
      "Page source tests only; no browser run. Full venture preflight not run.",
      "Reduced pass (steps 1, 3, 7, 8, one fix from 5). Cut steering.md 137 to 125 lines. No post: process-only change, 5th review today.",
      "No before/after perf metric. Found main's Pages build failing on a post description over the 160-char limit (writing.mjs:176), fixed it. No new post: tiny fix, said here.",
      "hearth-and-horizon, the-rope-and-the-count, text only (audio 423 MB over 400 cap).",
      "Did not run node --test for platform/pages (no pages changed); front-door.test.mjs was started in background and not awaited.",
      "Metric: first fixture buildSite wall clock. Before 64.1 s (empty PAGES_CARD_CACHE), after 16.9 s (warm), via /tmp phase script timing buildSite over one-page ventures dir, local container. CI effect not measured. Profile: node --cpu-prof, 45.7/63.8 s idle on card workers.",
      "Hosts that refused earlier runs (assets.danfoss.com) were reachable; read the PVG 32 p.16 curve from a rendered page. Checks: research build.py ok, check_md_links ok, post frontmatter ok. Not run: research CI locally, cite_check (no new citations).",
      "main_health found main red (promptctl validate + check_post_frontmatter): two 2026-10-30 posts had descriptions over 160 chars and the creative run record had pr null. Fixed all three. portfolio-pages.yml runs the frontmatter check before deploy, so the red state could block the site deploy. No backlog ids touched.",
      "Flagship 2 slice: open-riser gap note; venture node tests 380 pass locally; CI not awaited beyond checks below.",
      "Milestone 7a: screened audit rule moved into llmci.audit_design with 3 tests; equivalence to experiment code checked on 2000 random inputs. No new empirical claim. Homepage build ok. No runcost attached.",
      "creative: hearth-and-horizon, slug sixty-two-in-a-hundred, text only (audio 423 MB > 400 MB cap)",
      "Both pre-registered predictions refuted; ran 8 min script in background. Checks: research/_homepage/build.py ok. Did not run cite_check (no new citations).",
      "Small slice: UK mandate page of einvoice-preflight now follows the gov.uk roadmap (read via WebFetch). uk test 8/8. No agent doc written; the change is self-contained.",
      "verified-dse milestone 43: constructed counterexample shows no quantile q<1 of g bounds halving regret. Test file 13 pass; homepage build ok. No OpenROAD in session, so detail routing was not attempted. CI not waited on; checks run locally.",
      "Metric: cold full Pages build wall clock, no before/after speed-up taken. Before the fix the build crashed after ~49 s; after, 133 s cold on a loaded container (time node platform/pages/build.mjs). No post written (small fix); no perf change shipped.",
      "marine-path milestone 1; 7 tests, homepage build, programme_check pass locally; cite_check found no ids (citations not fetched, marked so).",
      "Milestone 3a: Michell+ITTC vs Ju 1983 Wigley CT=4.16e-3 via Wang et al. 2017 (Zenodo). Checks run: homepage build ok, check_md_links ok, new test passes (pytest unavailable; ran the function directly). cite_check not run: source cited by Zenodo record only. No separate agent doc in docs/reports.",
      "Writing step on sim2real-inference; no new experiment. Per-episode SIMPLER data and CoRL 2027 style file still unavailable.",
      "Outcome filled by session 01XpHqybgbjtZBC1yuM1sWw3 from the record of PR #11643 (merged); the authoring session left the record empty, which turned promptctl validate red on main.",
      "Saints by Candlelight episode 55, peter-and-the-night-on-the-lake (Matthew 14:22-33), text only; 5302 words; node --test 12 pass.",
      "Negative result landed honestly. Ran only the new tests and the eval locally; the full venture suite was not run. No security queue branch existed.",
      "Milestone 6e marine-hull. Build and md-link checks pass; CI not awaited locally.",
      "Milestone 44: optimum_rank.py; 11 of 40 cells guaranteed zero regret, 0 violations; homepage build ok. CI not waited on; local checks only.",
      "Target platform/ci/ci_starvation.py, 8 mutants, 7 caught then 8/8 after one kwargs test. No real defects found in hunt. No blog post: small redteam run.",
      "Flagship 2 slice: deck page card. page+deck tests pass; headless Chromium check. Full CI/venture-preflight not run locally; CI was queued.",
      "Negative result: no code change. Residual lag-1 rho does not separate cycles from real steps.",
      "Flagship 5 slice: india-cli.mjs. Local tests only (india-inv01, examples). No agent doc written; rules unchanged and from memory. Skipped venture-preflight (no page change).",
      "Null result: 0/864 cells cycle. tests/test_history.py 3 passed; build.py ok; check_md_links ok.",
      "Two campaigns: releases.mjs (6/8 caught), mastodon.mjs (1/8). Added tests; rerun 15/16 caught after fix, 1 equivalent. First target (wall-framing stairs) abandoned: venture-wide suite too slow.",
      "league-schedule-generator travelWarnings; small slice; page display not done",
      "Seventh gap probe on ai-bookkeeper; ventures tests 2116 pass locally; CI not awaited. flagships.yaml next: unchanged (no real-input item landed).",
      "hearth-and-horizon, slug the-water-in-the-honey, text only; stories tests 9/9.",
      "Property test for payouts; 50 tests in payouts*.test.mjs pass locally; no fault found. Full CI not run locally.",
      "creative; hearth-and-horizon; slug two-wrong-numbers; text only (audio 423 MB > 400 MB cap). Tide arithmetic computed with a Python script, results in the story's note.",
      "Vertical siding in siding.mjs; siding+cli node tests pass locally (35). Hand-computed tests only; CLI/engine only, no page card. No venture-preflight run (existing venture, engine-only change).",
      "Hearth & Horizon: the-kings-cross-the-lake, text only (audio 423 MB > 400 MB cap). Tests 9/9.",
      "Ran hanger-3dseeds next step 1: radius limit 9/12 cm, 8 seeds each; local checks: homepage build ok, md links ok. Unit tests not rerun (no code changed in src).",
      "Milestone 6g: 3-state persistence; predictions 1-3 held, 4 refuted with a spell-length confound. build.py ok, check_md_links ok.",
      "creative track, hearth-and-horizon: The Bell Will Not Carry (the-bell-will-not-carry), text only (audio 423 MB > 400 MB cap). 11/11 shelf tests pass. No agent doc written.",
      "lowcomm-training 6m: leave-one-cell-out comparison of four H-forms for size-2 compression excess; forms not separable; no new training.",
      "Drafted paper sections from logged numbers; no experiment run. Found H1 and H5 never tested as written.",
      "Solved P060: nine a11y workflows folded into a11y-research-ci.yml; 20 steps pass locally. No CI wait: PR merged after local checks (validate_workflows, publish_surface --check, promptctl validate).",
      "security-alerts branch absent. Local checks: 13 tests pass, build.py ok, check_numbers 22 claims 0 missing. Ran 3f in 26 s.",
      "Hearth & Horizon, slug the-smoke-that-stays; text only (audio 423 MB > 400 cap). Footnote/number inconsistency (9 vs 6 ug/m3) caught and fixed before commit.",
      "Reduced pass: derive refresh, measure, one doc fix (research/CLAUDE.md torch note), E113. No new post: review run, doc/process work only.",
      "Flagship 2 slice: attic heel input on page; page.test.mjs 35 pass; venture-preflight not run.",
      "Explore idea: accessibility sweep (tabindex, zoom-blocking viewport, autofocus, outline:none) over venture pages; one real gap in dupehound, fixed with test. Agent doc skipped: nothing the next run needs beyond the post. Add this sweep class to the explore 'already clean' list.",
      "hearth-and-horizon, slug the-north-slope; node --test 11/11 pass; CI not awaited locally beyond shelf tests.",
      "Project hearth-and-horizon, slug the-fifth-day, text only (audio over 400 MB cap). node --test 11/11.",
      "Outcome filled by session 01XpHqybgbjtZBC1yuM1sWw3 from the record of PR #11651 (merged); the authoring session left the record empty, which turned promptctl validate red on main.",
      "Milestone 6l: 6 runs, H=128 excess +0.0505 at six seeds; H6l-i refuted. Stop hook forced two partial commits of run_h128.out.",
      "Torch install was slow; 8 runs ran in two batches of four. Homepage build prints ok.",
      "hearth-and-horizon: the-river-is-eight-degrees (text only; audio 423 MB over 400 MB cap). Wading numbers fixed to surface speed before commit.",
      "No blog post: title-only change. First apply corrupted front matter (offset bug), caught by tests, fixed.",
      "Local: node --test collections-property.test.mjs passes. First push landed the branch at main's sha (no commits); a plain push of HEAD fixed it.",
      "Small slice: browser-click.mjs passes in Chromium with the grid download check. CI not awaited.",
      "Backlog P048 done: README live links sparse checkout; sibling links left whole. Verified locally in sparse worktree; CI not awaited beyond workflow validation.",
      "shift-roster-builder planStreaks; calc+cli tests 152 pass. No agent doc: nothing the next run needs beyond the flagships next.",
      "Critique mode via main_health.py: promptctl validate was red on main because the ventures record 01AcxTtG... had pr null; set to 11780. Backlog ids touched: none. validate passes.",
      "hearth-and-horizon story the-coin-on-the-ice, text only (audio 423 MB > 400 cap). Wrote story, generate.mjs, tests pass.",
      "Creative track, Saints by Candlelight episode 58 the-shepherds-and-the-night-watch-above-bethlehem (Luke 2:1-20), text only (audio 423 MB, over the 400 MB line).",
      "Critique mode; no backlog ids touched. main_health 30/30 ok.",
      "Venture suite 211/211 pass locally; venture-preflight not run.",
      "Metric: API requests per on-close branch cleanup. Before ~50 history + ceil(branches/100) listing + 3 (read from code); after 3 in not-moved case. Step time 2.1 min from ci_profile.py --runs 100; live after-time not measured (no token).",
      "Stairs guard bottom-space sphere note; stairs.test.mjs 40/40. Did not run venture-preflight.",
      "Ran dp_ls=20 sweep; source is a search excerpt, flagged unopened.",
      "creative; hearth-and-horizon / little-lamps; slug giles-and-the-doe; text only (audio 423 MB > 400 cap).",
      "Metric: kill-switch test in platform/pages/build.test.mjs. Before: alone it did not finish in 120 s (builds whole site; 10-24 note measured ~80 s build); the exact before time was lost to truncated output. After: 1.1 s wall (node --test --test-name-pattern). Full suite 1344 pass/0 fail, 548 s on a loaded container, not a clean before/after.",
      "Landing post count for wall-framing-takeoff stairs; node --test stairs.test.mjs 33 pass locally; CI not awaited.",
      "Milestone 6ak: informedness screen; 3 of 4 predictions held, 1 partly refuted. No separate docs/reports agent doc: LOG.md carries it.",
      "Target platform/edge/worker.mjs, 8 mutants, 3 escaped (400 body status, GET /healthz, POST path gate); one new test covers all three. No real defects found. No blog post: small guard-only run.",
      "node --test fuzz-build.test.mjs 8/8 pass locally. No agent doc written.",
      "ai-bookkeeper flagship: 69-description probe, 5 rules added, full suite 2098/2098 pass locally. Small slice; no real export. Flagship next: left unchanged (item list still accurate). No agent doc written.",
      "Local check: node --test stairs.test.mjs. Did not run venture-preflight or update flagships next:.",
      "Metric: wall time of platform/ci/check_inline_scripts.py. Before 52.4s (time, 4-core container, 1647 scripts); after 1.8s same command. Unit tests 6 pass. ci_profile.py timed out at 100s so the target came from the guard-checkouts history doc.",
      "hearth-and-horizon, story the-gauge-reads-fifteen, text only (audio 423 MB over 400 MB cap). Process times deliberately not quoted; facts to check against current extension guide.",
      "Ran node --test fuzz-build.test.mjs locally (9 pass); did not run venture-preflight.",
      "Flagship 9 slice: clinchedUnlessTied in playoffRace + raceText; brute-force test; 295 venture tests pass locally. Did not rewrite flagship next: (still real travel times). No venture-preflight run.",
      "Project: saints-by-candlelight, episode 57 the-father-who-ran-down-the-road (Luke 15, text only; audio 423 MB over cap). No blog post: short scheduled creative run.",
      "Ran cyclic-series.test.mjs (2 pass); full venture suite and CI not run locally.",
      "Creative: saints-by-candlelight episode 56 the-wedding-at-cana-and-the-six-stone-jars, text only (audio 423 MB > 400 MB cap). Fixed jar volume sums after self-review.",
      "Flagship 2 slice: vertical siding battens. No docs/reports agent doc written.",
      "Eighth keyword gap probe; local checks 31/31 pass. Did not rewrite flagships next: (probe pattern already described).",
      "Milestone 7c: audit_interval + end-to-end library check; prediction partly refuted on coverage in 2 of 14 cells (logged). Tests 20 pass; homepage build ok.",
      "creative: hearth-and-horizon, slug the-water-that-boils-down, text only (audio 423 MB over cap). No agent doc written.",
      "Small flagship slice (wall-framing-takeoff stringerStock); 392 venture tests pass locally; no agent doc written, the change is small.",
      "Milestone 50 of verifiable-training-mechanisms: spread-over-steps adversary against the per-step aggregate check. Two of four predictions refuted, one narrowly; ascent 'flagged' counts are a float boundary artefact, disclosed in the log. build.py ok, check_md_links ok.",
      "Built the page warnings block for changepoint-detector, then found #11923 had landed the same change first; took main's version and dropped my diff and post. Nothing else shipped. security-alerts branch did not exist, so step 0 was skipped.",
      "seo_title for 25 newest long headlines. No new blog post: housekeeping change, not worth a reader's time.",
      "P048 part 2a (doc references). README live links and sibling links remain. Checked: unit tests, sparse worktree run, validate_workflows. CI not awaited.",
      "Found main failing writing.test.mjs (180-char description); fixed.",
      "Probe 5: 36/3/28 before rules, 67/67 after; one rule dropped after salon.test.mjs caught a deliberate no-suggestion.",
      "Negative result: block-variance warning fires 95-100% on synthetic real staircases; local test passes; CI not awaited locally.",
      "Hearth & Horizon, the-cold-corner-of-the-dormitory, text only (audio 423 MB over cap). venture node --test 11/11.",
      "Paper draft updated for 2n; no new experiment (data hosts blocked). check_numbers 22/0, homepage build ok.",
      "Advanced civ-levers milestone 5 (public goods + punishment). Not compared numerically to Fehr and Gaechter; flagged as next step. Local checks: 4 tests, homepage build ok, md links ok.",
      "Small slice (keyword rules, 2 tests, full ai-bookkeeper suite 2117 pass). No agent doc; flagship next: not rewritten since the open items are unchanged. No flagship-scale work this run.",
      "Probed two made-up layouts; both read right. A bare landlord keyword broke card-descriptor.test.mjs and was dropped.",
      "heavy-hydraulics milestone 3b: bypass closing-law sweep; 11 tests pass; build.py ok; check_md_links ok. 3b used 300 cycles/seed vs 3a 1000, disclosed.",
      "Target platform/ci/check_money_sign.py, 8 mutants, 7 caught, 1 gap (blank-first-line number) guarded. No post: small run, no real defects.",
      "Doc-only change; homepage build and link check were started but exceeded the 120 s tool timeout, output not read. Next run: pick another programme or source tank data for milestone 3.",
      "divisions.test.mjs + page.test.mjs: 102 pass locally. No browser click-through of the new notice.",
      "Reduced pass (steps 1,3,7,8 + one fix). No candidate decisions changed. Fixed promptctl record collision on reused session ids. No post: process-only run.",
      "Critique mode; no backlog ids touched. main_health.py was still running at PR time. Tests: test_pick_track 16 OK.",
      "creative: hearth-and-horizon, slug the-fifty-one-percent; text only (audio 423 MB > 400 MB cap). Same session id as the-noon-that-moves record, so this file has a -2 suffix.",
      "creative: hearth-and-horizon, slug the-noon-that-moves; text only (audio 423 MB > 400 MB cap).",
      "Second-corpus informative coder was infeasible (HF 403, no torch); ran the cutoff sweep on cached scores instead. Bare python3 lacked numpy; used pyenv.py.",
      "Milestone 6h: 14 runs at 915k params. H6h-i refuted (2.54% vs 0.71%), ii and iii supported. Homepage build ok, md links ok.",
      "Small slice: UK einvoice page refreshed after the 28 Oct 2026 roadmap, from a search excerpt only (gov.uk host not allowed in session network). Node test passes 8/8. Did not run the process-track critique; the stored prompt asked for venture work.",
      "First target ventures/shift-roster-builder/import-shifts.mjs: baseline timeout 300s, abandoned. Random draw water-well-drilling-bid-calculator/usage.mjs: 8 mutants, 7 caught, 1 gap (noStorage catch) closed with a test; 8/8 after.",
      "Milestone 7b of llm-coding-inference: plan_audit library function plus test (19 pass), LOG entry, post. No new experiment.",
      "Added shift-roster-builder 14-day notice page and blog post. Numbers from callout-churn-bench at three changedAt values; page test added (page.test.mjs run in background). No city law stated; page defers to the reader's own rule. Did not touch the flagship's branch-and-price item.",
      "node --test deck.test.mjs page.test.mjs cli.test.mjs usage.test.mjs: 79 pass, 0 fail. Hand-computed tests only; no real deck permit set.",
      "Sources secondary (web search summaries); page states this. No KRA PIN check digit rule found, shape only.",
      "wall-framing-takeoff: joist hangers counted at floor openings (flagship 2). node --test floor/budget/cli: 57 pass. Hand-counted only; CI not awaited beyond that.",
      "creative: hearth-and-horizon, slug the-sheet-and-the-gap. Hail figures recomputed in python (4 cm: 30.7 g, 28.3 m/s, 12.3 J; 3.5 cm: 20 g, 7 J); dew point 10.1 C; surface temp 3.05 C. generate.mjs run, node --test 11 pass.",
      "einvoice-preflight: Bulgaria re-check found no change since 26 Oct (skipped). Ran repaired Factur-X PDF through poppler: repair held; example PDFs had zero pages, fixed. node 46 tests and python 357 pass locally. veraPDF/Acrobat unrun.",
      "Routed to process; backlog had no agent-open item and main_health was 30/30 green, so shipped a product slice (ai-bookkeeper SaaS rule, 2103 tests pass) and a post.",
      "Probe 6: 47 right/4 wrong/28 none before rules, 79/79 after (self-tuned). Venture suite 2115 pass. Did not run venture-preflight: keyword-rule slice, no page.",
      "Process track. main_health.py 30/30 pass. ci_profile.py --runs 200: 255 jobs, 250.8 job-min, checkout 21%. P049 re-measured and dropped in favour of P060; no CI change shipped (the unscoped guards are already cheap).",
      "shift-roster-builder streak: cell enforced in validList, written by carryOverStaff; calc.test.mjs run.",
      "Routed to process track but the scheduled prompt asked for product work; shipped an einvoice-preflight flagship slice instead. Local node tests pass (17 + page wiring).",
      "Baselines of shift-roster-builder/calc.mjs and changepoint-detector/engine.mjs suites exceed 120-300s (glob **/*.test.mjs hangs/slow), so target switched to severance-package-calculator/calc.mjs (0.5s/mutant). Catch 4/8 -> 8/8 after 5 new tests. No real defects found in the short hunt.",
      "Idea: put the CLI-only deck guard on the wall-framing-takeoff page (Guard switch + guarded edges). Found the deck card already existed, roadmap text was stale. Verified: page.test.mjs and deck.test.mjs pass (46), driven in Chromium (16x12 ft, 48 in, outer edge: 4 posts, 33 balusters, 2 rails). Small slice; deck stairs still CLI only. No real deck plan.",
      "Three campaigns of 8 mutants (stories.mjs 0/8, releases.mjs 7/8, serp_snippets.py 7/8): 14/24 caught. Of the 10 escapes, 7 equivalent (5 CSS, exit code, divisor) and 3 gaps in stories.test.mjs, now caught on rerun (catch_rate_after_fix 1.0 on non-equivalent). No real defects found.",
      "Descriptions are synthetic from public names; finds gaps, not accuracy. flagships.yaml next: not rewritten (no real input reached).",
      "Added eval/cyclic-power.mjs + test (2 pass), README section, flagships next, post. Venture preflight not run (eval/test/docs only).",
      "Egypt ETA page (53rd country) with nine-digit registration number shape check; sources are vendor guides via web search, page says so; no check-digit rule found. 948 einvoice-preflight tests pass.",
      "Idea: pool service route bookkeeping page + categorizer rules (movers-page pattern). Fixture made up, rules from public names. Full ai-bookkeeper suite 2069/2069 pass locally.",
      "Routed to research track; owner's scheduled prompt asked for revenue products, so did flagship 2 venture work instead. stairs.test.mjs 34/34 pass locally; full CI not run.",
      "hearth-and-horizon, the-clean-plate, text only (audio over cap).",
      "Flagship 5 (einvoice-preflight): PDF envelope checks PDF-001..004 in the Node reader. Full venture suite 1007 tests run locally, all pass after one example expectation changed. Primary-source hosts (revenue.ie, gov.uk, ato.gov.au) unreachable through the proxy, so no mandate-date refresh. The 'page button for PDFs' item in next: was already landed; removed.",
      "Ninth keyword gap probe; ventures suite 2120/2120 pass. Router drew research but the scheduled task asked for ventures, so deviated. Probe pattern is self-tuned coverage; real labelled books remain the need.",
      "ai-bookkeeper flagship: 69-description probe, 5 rules added, full suite 2098/2098 pass locally. Small slice; no real export. Flagship next: left unchanged (item list still accurate). No agent doc written.",
      "Campaigns on faq-duplicate.mjs (8 mutants, 2 escaped) and share-location.mjs (8 sampled, 1 escaped); 3 gap tests added, all caught after fix. No real defects found; a one-site campaign on check_main_landmark.py was not recorded. Commit trailer Prompt-Version: redteam/0 .",
      "changepoint-detector: lh and treering quiet real series; quiet-series.test.mjs 3/3 pass locally (20s). Full venture-preflight not run.",
      "Ninth keyword gap probe; full ai-bookkeeper suite 2120 pass, 0 fail. flagships next not rewritten (probe pattern already described).",
      "Explore idea: exterior window/door trim boards (siding.openingTrim) in wall-framing-takeoff; siding+cli tests pass locally (34/34, 69 with page tests). Hand-packed example only; no real trim order.",
      "ci_profile.py 600 runs 2026-10-30 01:48-02:17 UTC: 319 jobs, 356.5 job-min, checkout 95.2 (27%), q50 589-787s. Tree 893 MB / 43,798 files, 442 MB in 80 MP3s. Clone from GitHub (one sample): full 38.3s/46.3s 542MB; conflict-markers pattern 29.5s; checklist-coverage 9.3s; duplicate-symbols 6.5s; link-contrast 4.6s. Verification in sparse worktrees: conflict markers exit 0 (43,195 files), seeded marker exit 1, pattern narrowed to drop *.yaml exit 1; checklist coverage output identical to full tree, seeded unlisted test dir exit 1; duplicate symbols output identical, seeded duplicate exit 1, unit tests OK; link contrast output identical, unit tests OK. validate_workflows ok; test_check_conflict_markers OK (2 new). Expected saving ~16 of 356 job-min per 29 min; re-measure after a day.",
      "Local verification (runners starved): node --test *.test.mjs in the venture 272 pass / 0 fail / 3 skipped on the merged head (main merged four times; resolved conflicts with lanes 2, 5 and 7 and the looks lane); browser.test.mjs with Playwright 11 pass / 1 skipped; node platform/pages/typecheck.mjs shed-designer 0 diagnostics; a sweep of 224 sizes/spacings/pitches had 0 lap or sheathing check failures. Prices come from search-result copies seen 2026-10-30 because store pages 403; the lines with no Lowe's listing are in the report. Default 8x12 painted: fiber cement lap +$207 and LP lap +$248 over T1-11, driven by OSB ($128) and wrap ($115); the planks alone are cheaper than the panels. Follow-up PR (even courses): exposure evened to the wall height so the top course meets the plate; corrected the cost difference, which had left out the OSB's 8d nails (true +$261/+$302 at #11567; +$293/+$314 with even courses). That PR's local run: 273 pass / 0 fail / 3 skipped; typecheck 0.",
      "PRs: #11524, #11641, #11654, #11528, #11547, #11595, #11620 merged; #11571 closed as superseded (parts landed via a9ba244b, #11640, #11650, #11641); #11590 closed with measurements. Local verification: shed-designer full suite (node --test *.test.mjs) passed on each branch after merging main; marketing.test.mjs 263/263; gitops suite 603 passed; full site build with size pages deleted from disk passed check.mjs (5,575 pages, no dead links). Measured: lumber +-5% changed board count on 188/240 size-page builds, pieces 0. Default 8x12 now $3,143.08 with the fastener fix; auto overhang 8\" (9\" would add $40.47).",
      "requests.test.mjs pass; custom-development-page, feedback-page, check, product-llms, writing tests pass after merging main (pre-merge failure was the Bulgaria post description, fixed on main). Full local `node build.mjs --out=dist --audio-cdn` exit 0 and `node check.mjs dist`: 'looks publishable: 1321 products, 44 category pages, 5904 pages, no dead links'. custom-development/ in sitemap-hub.xml and llms.txt; 390px screenshot has no horizontal scroll, request table stacks on phones. GitHub Actions had started no runs on the PR, so I ran it locally: platform/pages `node --test *.test.mjs cloudflare/*.test.mjs` gave 1353 pass and 2 fail. Both failures were pinned counts my change moves (llms-full bullet count, hub sitemap list); I updated them and they now pass. portfolio-validate.yml: 102/108 pass. Fixed in this PR: Start-here links both ways and the checklist naming portfolio/requests tests. Already failing on main and untouched here: flagships.yaml shift-roster-builder `next:` is 2038 chars (router validate + test_allocate) and distribution-versions-ci.yml has no concurrency group (validate_workflows + its test).",
      "Posts drafted by 7 parallel subagents with one brief (no fabrication, every figure from a repo file, quick commands re-run); each reported claims it left out. Three subagent runs rewrote tracked results files with float noise and restored them from HEAD; git status confirmed clean. Live URLs probed: workers.dev pages for open-tennis-robots, shed-designer, research/marine-hull, freelancer-tax-pack, feedback all 200. Checks: check_post_frontmatter, check_start_here (+6 unit tests), post_similarity. CI starved (ci_starvation.py --run 41131396912: job never got a runner); verified locally at head: build.test.mjs 305/305, writing.test.mjs 21/21, check_start_here ok (37 posts), check_md_links ok, check_post_frontmatter ok, unit tests ok. run_workflow_locally --for-changes hit its 300 s budget so its FAILs were timeouts. The new check caught a real gap on main: 2026-10-30-contribute-from-chatgpt.md (another session) was tagged start-here but unlinked; linked it both ways.",
      "Local verification: #11554 merged tree 209 pass 0 fail plus build_pages_site/check_pages_links/check_built_site OK; #11569 228 pass 0 fail. Search-order change: at 2000 designs 44 of 67 old-front designs dominated by the new front, 8 of 56 the other way. PRs: #11554, #11569, #11573. #11573 local: 238 pass 0 fail.",
      "Direct request. Moved ideas/INBOX.md to root IDEAS.md, guide to docs/contributing/ideas.md; prompts/ideas.py lists website-form ideas (site-feedback.json, 30 days) as data. Local: unittest discover -s prompts OK; promptctl validate ok; check_md_links ok on touched files.",
      "PRs: #11853 (gallery on each deploy, cards polished, audited), #11858 (visitor prices in auto overhang), #11868 (card looks terms, cost delta, bridge), #11869 (first design passes cleanly, never dearer than the 8x12), #11876 (budget path; $2,000 lap-and-shingle = about 6x7), #11879 (margin moves, Saves column, gallery pictures redrawn), #11915 (fix main: gallery generator raced build tests), #11897 (attic knob, gallery on usable storage, lane report). Each merged on the venture's full node --test suite after merging main (counts in each PR's comment) and typecheck 0 diagnostics.",
      "Docs-only change. promptctl.py validate: ok. Site copy calling Pages tools 'browser-only' left as is: it describes what is served today.",
      "Direct request. Added ideas/INBOX.md, ideas/README.md, idea issue form, prompts/ideas.py + tests, prompt.md hook. Local: promptctl validate ok; unittest discover -s prompts 122 tests OK.",
      "Dry runs before: npm would publish 180 CLIs, PyPI 24, all at 0.1.0 with name-only dedupe. After: 7 npm, 3 PyPI, 31 release tags, versions from a SHA-256 of shipped files. npm names llm-spend-guard and llms-txt-generator are taken (HTTP 200 on registry.npmjs.org, other repository) and are skipped. devsec-toolkit bundle tarball 128147 bytes, reproducible across two builds, runs from a fresh dir. Tests: versions 9, tool-releases 8, npm 16, pypi 11, pypi-packages 8, homebrew+ghcr 9, all pass; gitops test_ci_runner 24 pass after sync_readme_counts; publish_surface --check, ghaction --check, check_md_links pass.",
      "Verified locally: full build for the workers.dev origin passes check.mjs (1,318 products, 5,349 pages, no dead links, robots/sitemaps name the new origin); split.mjs gives 14,818 + 5,283 files; wrangler 4.145.0 deploy --dry-run accepts both configs; the shard Worker alone serves /research/, /writing/, /research/marine-hull/ with 200; the router test covers path routing. wrangler dev with both configs returns 500 for shard pages because it reads the shard's files from the first Worker's directory (a page placed there was served): local-only. Tests: redirect-stubs 2, split 3, edge worker 6, publish_surface/validate/pin 145 passed. Not verifiable from here: the real Cloudflare deploy (needs the repo secrets); the first main run of portfolio-pages.yml is the proof.",
      "Local verification, because CI runners were queued: validate_workflows reports 125 files valid; pytest 451 passed, 1 skipped (platform/ci workflow-related suites); gitops/tests/test_ci_runner.py 24 passed; node devstats/pages tests 34 passed. No job-minute before/after: gh has no token in the container.",
      "Local build 218 s cold, 19,899 files, 5,835 HTML. CI run 41118044966 timings. 500 main runs: 340 cancelled, 125 failed, 35 success; since ~11:10 UTC 10-30 failures are the test job only (deploys green). Docs-only PR; loadPosts verified.",
      "Merged on local verification throughout: CI runs on main were cancelled by concurrency. PRs: #11850, #11856, #11878, #11889, #11892, #11896, #11902, #11908, and this one. Last sweep on d48534d3 seed 9203: unit 393 pass, browser 64/64, fuzz 2000/2000, typecheck 0, renders current, repo checks clean. shift-roster-builder suite 479 s -> 377 s (4 cores, back to back). Handed lane 4 fuzz seed 27311 design 591 (lap butt joint with no stud between two close doors; pre-round-4).",
      "Data: 10,071 runs 2026-10-29T21:00Z..2026-10-30T21:00Z via the Actions API in hourly windows; ci_profile.py --runs 300. Local checks: validate_workflows.py (125 valid), dogfood_workflows.py (no unaccepted findings), check_post_frontmatter.py exit 0, check_md_links.py ok, both workflow YAMLs parse. promptctl validate was already red on main for three other sessions' run records.",
      "Checks: node platform/pages/writing.mjs built 1400 pages including writing/what-files-llms-read-best/; node --test platform/pages/writing.test.mjs 21 pass 0 fail. Token counts from tiktoken o200k_base/cl100k_base in a scratch venv.",
      "Direct owner request. The pull job had been checked earlier in the session (it succeeds daily and commits site-visits.json). Verified: node --test platform/counter/*.test.mjs passed 21/21. Live API with a bogus token answered 401, which the script handles. Blocked on the owner: a TRAFFIC_TOKEN secret (fine-grained PAT, Administration: Read-only). CI runners stayed queued for 20+ min (ci_starvation: no verdict, nothing finished), so verification was local: run_workflow_locally --for-changes gave 4/8 workflows passing. The review bots and the pages deploy did not run. prompts-ci failed on two errors that were already red on origin/main: run record 01E5sJKo94ft7zeRXjdNr2HC-2 used 'what' in place of 'issue', and the stair-stringer post's description was 180 characters. Both were fixed on main by another session while this PR was open; the merge of main took main's versions, so this PR no longer touches those files. After the fix, promptctl validate passes and unittest discover -s prompts passes 117 tests.",
      "PR #11589 (trusses) and PR #11618 (attic storage, report) merged with local verification while runners were starved: node --test 303 pass, the one failure (renders manifest) also red on origin/main; browser tests 33 pass; fuzz 2000 designs clean at seed 7 for #11589; seed 11 shows lap-siding stagger failures that also appear on clean main.",
      "43 tests pass (run_venture_tests.py babysitting-business-kit). clauses.mjs 2/2 pages pass, validate.py passes, launched.json updated. Playwright smoke at 390px: every tab, add lead, add sit with live quote, tax panel, settings persisted across reload, no page errors (the only console line is the sandboxed website-preview iframe refusing inline script, which is intended). Tax constants come from sibling ventures that checked them against IRS/SSA. Ten lane agents (worktrees) each opened a PR (#11598, #11599, #11601, #11603, #11604, #11612, #11613, #11614, #11615, #11617). I merged all ten branches into this PR's branch with merge commits so their PRs close as merged when this one lands, resolving shared-file conflicts: a union for the Dockerfile COPY and server FILES lines, both-sides for additive blocks, and by hand where lanes collided: slots.mjs and site.mjs were both imported as S (site renamed SITE); the desk PUT ran keepIntakes before mergeReferences (a stale app copy undid a referee's answer, caught by references.test.mjs); the ?ref= prefill moved from the old buildSite into site.mjs; /site/blog had to precede /site/; self-host.html lacked 15 variables other lanes added (deploy.test caught one; the test now scans all server modules). 197 tests pass, including the Playwright e2e; my own Playwright pass at 390 and 1280 px over all 11 tabs had no page errors. Final local verification on 47054e4a (CI queued on runners at merge time): venture-preflight.mjs babysitting-business-kit clean (launched.json, regen --verify, counts, full Pages build + check.mjs); run_venture_tests.py babysitting-business-kit nanny-tax-calculator pass (198 tests in the kit); siblings.mjs --check 0 orphans; check_post_frontmatter.py exit 0; platform/pages/writing.test.mjs 21/21; platform/marketing/front-door-tools.test.mjs pass with the ported #11571 fix; sync_tree_counts and sync_readme_counts --check current. Preflight also caught admin.html linking '/' and a './x.mjs' comment in sw.js; the siblings check caught the kit as an orphan (now paired with nanny-tax-calculator). Round 2 (PR #11668): ten more lane agents (agreements, network, safety, credentials, insights, sitreports, invoices, packages, waitlist, activities), PRs #11658-#11667, merged into one integration branch. 321 tests pass locally (node --test ventures/babysitting-business-kit/*.test.mjs). favicons.py --fix added tab icons to four pages; intake.mjs now emits the icon so meet-and-greet.html stays generated. clauses, post frontmatter, siblings, tree counts and readme counts all pass. Harm and privacy check (PR #11732), on the user's request: removed descriptions of the person the kit was first built for (religion is sensitive personal data even unnamed); confirmed no names, contacts or locations of real people, invented example data only, and no family or child data served without the admin key or a per-family token (probed every public route with the example desk). A child-safety review found and fixed: allergy notes starting 'EpiPen'/'inhaler'/'Notes:' were dropped whole (a peanut-allergic child was offered a peanut-butter craft); small-part activities for children with no birth date; activity wording (toddler sensory bin, cracker stack, balloons under 6, baby blanket, raw carrot/celery under 4, salt dough, hide-and-seek latches, emptying water tubs); the sit-report email labelled flagged doses as 'from your written instructions'; doses the parents gave before the sit were not counted for spacing; the alarm-code note printed on the emergency card; photo-consent wording. 325 tests pass.",
      "Round 4 lane 2 (saltbox, gambrel and lean-to depth). Merged #11862 (saltbox engine), #11899 (saltbox drawings, 3D, editor, steps, HOA, preset), #11905 (gusset plywood check against APA PDS D510-2020; knee gussets were 334%, now sized to 85%; gambrel search knobs and a usable-storage objective), #11911 (loft ladder and IRC R807.1 hatch), #11910 (lean-to clerestory layout). Also merged #11917 (gambrel wind uplift and tie brace); #11920 (saltbox in the search) carries this record. Verification per PR: full venture suite once (latest 466 tests, 0 fail, 3 skipped for axe-core), typecheck 56 files 0 diagnostics, make-renders up to date, byte-identical snapshots of gable/lean-to/barn output where the change should not touch them.",
      "PR 11855: xref.mjs (Show in 3D for sheet goods, siding, roofing, trim, hardware), panel/fixture picking, door-frame geometry, siding note only when cheaper (1 of 168 preset x wall-height combos), catalogue range by area, fixed compare tray, sticky bar fade, details usage, window glass. PR 11870: first-time-user fixes (HOA packet in bar, phone shopping cards, folded gallery hint, total label, print hides screen controls). Local verification: venture unit suite, typecheck 0 diagnostics, make-renders, browser suites (50 pass, 2 axe skips). CI reds unrelated to this venture: check (research/marine-path README live link), site test (shift-roster-builder FAQ page).",
      "Owner asked for agents to fix GitHub security scan results. v1 ran claude-code-action on ANTHROPIC_API_KEY: rejected (no API-key billing; use the scheduled agents). v2 mirrored alerts into GitHub issues: rejected (file based, easier to process). Final: security-alert-queue.yml writes QUEUE.md + alerts/<n>.md to the security-alerts data branch with GITHUB_TOKEN; prompt.md step 0 sends scheduled sessions there; claim = pushing security-fix/code-scanning-<n>; branch_cleanup protects security-alerts. 5 unit tests + test_branch_cleanup pass; validate_workflows and the repo's actions-* checkers (incl. secret-leak) clean; commit/push shell logic simulated against a local bare repo. Live alerts unreadable from the container (403): first scheduled run is the end-to-end test.",
      "Local verification (CI runners starved; all jobs queued). Before merging main: node --test *.test.mjs 165 pass/0 fail/1 skip. After merging main (0b7703ed, which added a Subfloor row now handled): node --test *.test.mjs 206 pass/0 fail/1 skip; typecheck 28 files 0 diagnostics; utilisation.browser.test.mjs 3/3. Hand calcs reproduce default joist 15.0% and stud 15.4%.",
      "Local verification on head before merge: shed-designer node --test *.test.mjs: 375 pass, 0 fail (includes browser.test.mjs 30/30); open-house-plans 33/33; node platform/pages/typecheck.mjs shed-designer: 0 diagnostics; platform/ci/check_post_frontmatter.py: pass; portfolio/router/validate.py: all valid. CI on this head: every job queued 10+ min with no runner. Follow-up PR #11656 (studs at 24\" by default where the siding allows): on head after merging main, shed-designer node --test *.test.mjs: 388 pass, 0 fail, 3 skipped (two axe checks without axe-core, one opt-in full audit); typecheck 0 diagnostics; validate.py and check_post_frontmatter.py pass. Gallery regenerated with make-gallery.mjs and renders redrawn with make-renders.mjs. Lap direct-to-studs with let-in bracing (IRC LIB) not added: no citable table values found (APA handouts 404, ICC 403); recorded in docs/reports/shed-designer-round2-structure.md.",
      "Verification, local (runners starved). After merging main (e335b0e1): venture `node --test *.test.mjs` 209 pass, 0 fail, 2 skipped (with Playwright in the container this includes both browser files; the two skips are the axe tests), then both axe tests with axe-core 4.13.0: 2/2. Earlier: browser.test.mjs 12/12 and picker.browser.test.mjs 6/6. Screenshots checked by eye on desktop and a Pixel 7. Follow-ups in the same session: #11580 (panel priced through the page's storeEstimate; renders manifest re-hashed, red on main), #11610 (stored pictures from renders/; 13 stale size-page renders redrawn, red on main), and a final report PR. The gallery integration (PR #11561, still a draft) is left as the next step in docs/reports/shed-designer-round3b-lane4.md.",
      "Local verification (no check runs were scheduled on the PR; runners starved): after merging main at d5b92453, node --test *.test.mjs in ventures/shed-designer with Playwright and axe-core 4.13.0: 302 pass, 1 fail, 2 skipped. The one failure, renders.test.mjs 'every starting design has up-to-date pictures' (13 size-* renders stale), fails identically on origin/main and is left to the renders lane. node platform/pages/typecheck.mjs shed-designer: 3 diagnostics on origin/main (app.mjs b.why, model.mjs maxHaulFt), fixed here with casts; 0 now. run_workflow_locally --for-changes on the pre-merge head caught a tsc error in costs.test.mjs, fixed. Palette validated with the dataviz validator. Screenshots (desktop, Pixel 7) and print PDF checked by eye. Post and report numbers re-derived on the merged engine.",
      "Local verification: node --test *.test.mjs in ventures/shed-designer after merging main: 404 tests, 0 failures (before the search-knob commit); designsearch, crossfeature, gallery, paretoaudit and levers tests after it: 39 pass, 0 fail. platform/pages/typecheck.mjs shed-designer: 0 diagnostics. make-renders.mjs re-run after the merge. Baseline run on main before any change had 2 flaky browser-test failures (3D orbit labels, store table catch-up) that passed on later runs."
    ]
  },
  "asks": null,
  "snapshot": null
}
