{
  "day": "2026-10-31",
  "merges": 239,
  "baseline_merges_per_day": 276.1,
  "lines_added": 44971,
  "lines_removed": 1675,
  "files_changed": 1681,
  "busiest_hour": {
    "hour": 0,
    "merges": 20
  },
  "hours": [
    20,
    13,
    11,
    11,
    9,
    11,
    10,
    8,
    9,
    10,
    10,
    10,
    8,
    6,
    11,
    8,
    9,
    9,
    11,
    8,
    9,
    12,
    8,
    8
  ],
  "agents": [
    [
      "Claude Sonnet 5.5",
      174
    ],
    [
      "Claude",
      57
    ],
    [
      "Claude Opus 5.5",
      7
    ],
    [
      "unattributed",
      1
    ]
  ],
  "products": [
    {
      "name": "wall-framing-takeoff",
      "merges": [
        {
          "sha": "88a58e440ae27b79f4581609c4b4599605f9d1ad",
          "at": 1793415474000,
          "title": "wall-framing-takeoff: deck picture-frame border (deck.border), test, README and post",
          "pr": 11989,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 80,
          "lines_removed": 9,
          "added_files": [
            "docs/posts/2026-10-31-picture-frame-deck-border-in-the-takeoff.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "884a5c55288c643abdc694d4085c3d7965491c12",
          "at": 1793415786000,
          "title": "wall-framing-takeoff: effective wall R from the framing placed",
          "pr": 11991,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "wall-framing-takeoff: effective wall R from the framing placed (parallel path), page control, tests, post",
            "post: shorten description",
            "README: drop the stale duplicate deck bullet from the merge"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 7,
          "lines_added": 158,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-what-a-r15-batt-is-worth-in-a-real-wall-layout.md",
            "prompts/runs/2026-10-31-session_01EhTJVPQfy3eVMGgfJ8CFXw.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "72b78f4c1a21561cd46065939dac0603b85a5bfa",
          "at": 1793416943000,
          "title": "wall-framing-takeoff: floor cantilever (joists, rim and subfloor past the support)",
          "pr": 11998,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 94,
          "lines_removed": 8,
          "added_files": [
            "docs/posts/2026-10-31-floor-cantilevers-in-the-framing-takeoff.md",
            "prompts/runs/2026-10-31-session_01E5sJKkGwbhivrUevZ2yeN8.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ce3991aa4243c354dda4c40cbdba30518d1f40bc",
          "at": 1793419018000,
          "title": "wall-framing-takeoff: floor cantilever field on the page, test, roadmap and post",
          "pr": 12000,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 19,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-a-floor-cantilever-field-on-the-framing-page.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3cfc8c777f5a645c24f9cb92ab717129482d377a",
          "at": 1793419049000,
          "title": "wall-framing-takeoff: picture-frame border select on the deck card",
          "pr": 12002,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 7,
          "lines_removed": 3,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d8035c41abce0deb30f71162456bfd6f0c986f48",
          "at": 1793419977000,
          "title": "wall-framing-takeoff: click-check the floor cantilever field in Chromium",
          "pr": 12005,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: click-check the floor cantilever field in Chromium"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 77,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-clicking-through-the-floor-cantilever-field.md",
            "prompts/runs/2026-10-31-session_01AcxTtJBvaqAMKMVndFsKv8.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4e7d7460eb40114353ef807374d79d5a4d8768d2",
          "at": 1793422773000,
          "title": "wall-framing-takeoff: wall heat loss (UA, design load, seasonal kBTU) from the placed layout",
          "pr": 12011,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 72,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-what-the-walls-of-a-house-lose-in-a-winter.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fabecefaf9d742d0f2065b288a7985b3f53ed8dd",
          "at": 1793423284000,
          "title": "wall-framing-takeoff: ROADMAP stops listing landed roof valleys and page as missing",
          "pr": 12012,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: ROADMAP no longer lists landed roof valleys and page as missing"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 2,
          "lines_added": 49,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtLnU2p2jzfPBtaCeJF.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "212d2a8ed2cccab377dd5959fabada64037727fe",
          "at": 1793423300000,
          "title": "wall-framing-takeoff: page fields for wall heat loss",
          "pr": 12013,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: page fields for wall heat loss (window U, door U, design delta, degree-days)",
            "Shorten front matter of the wall heat-loss post (validator limits)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 71,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-wall-heat-loss-fields-on-the-framing-page.md",
            "prompts/runs/2026-10-31-session_01AcxTtHHmnz82AX1SFLpWdQ.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "22db2bacbb7d1b5f4492ab46d9468959e9c2ccef",
          "at": 1793424001000,
          "title": "process: fix check_step_grid failure on wall-framing-takeoff degree-day field",
          "pr": 12017,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "process",
          "bullets": [
            "wall-framing-takeoff: degree-day field accepts whole numbers (step any); post",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 55,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-a-number-field-that-refused-your-degree-days.md",
            "prompts/runs/2026-10-31-session_01E5sJKmx56Y9DGr9SUYVt4D.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "702d4ed82882679a00a4a76d009f114f2e0d8b66",
          "at": 1793426292000,
          "title": "wall-framing-takeoff: birdsmouth depth check for gable roofs",
          "pr": 12020,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 59,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-31-can-a-steep-roof-rafter-take-a-birdsmouth.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "332e541c7f87ddd282f91a527b499c47d796730b",
          "at": 1793426294000,
          "title": "wall-framing-takeoff: pier bearing check against typed soil pressure",
          "pr": 12021,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 23,
          "lines_removed": 4,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "79e81afcc9f80408f6eb044c24b3dbea5e573041",
          "at": 1793426346000,
          "title": "wall-framing-takeoff: starter strip for lap siding",
          "pr": 12022,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": null,
          "bullets": [
            "wall-framing-takeoff: starter strip for lap siding (engine, budget line, hand-packed test)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 91,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-the-starter-strip-under-lap-siding-is-now-counted.md",
            "prompts/runs/2026-10-31-session_01EhTJVMkUn725ymiLJHtHNN.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7c1c4577d55fc01e5dc317903d5af1f40c640a22",
          "at": 1793426889000,
          "title": "wall-framing-takeoff: head flashing over exterior openings",
          "pr": 12023,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: head flashing over exterior openings (engine, budget line, hand-packed test)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 89,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-31-head-flashing-over-every-window-and-door-is-now-counted.md",
            "prompts/runs/2026-10-31-session_01AcxTtHM5ikJxAvqCNfM3Wa.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "0bbfbec3ab3f0f47264e331a60ba2d0cd8d5298a",
          "at": 1793426982000,
          "title": "wall-framing-takeoff: joist hole and notch check",
          "pr": 12024,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: joist hole and notch check against typed depth-fraction limits"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 127,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-can-you-drill-that-joist.md",
            "prompts/runs/2026-10-31-session_01AcxTtHb7L5bBSVvxZGXi3D.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c755b199d3f5a38b99ddbc7292f9b3612b47d2bf",
          "at": 1793427173000,
          "title": "wall-framing-takeoff: ceiling under the attic in the heat-loss figure",
          "pr": 12027,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: ceiling under the attic in the heat-loss figure",
            "shorten post description",
            "shorten post description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 96,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-31-the-ceiling-is-half-your-heat-loss-estimate.md",
            "prompts/runs/2026-10-31-session_01E5sJKj68BuAu8deQXwgpvY.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b63c30ac4edbf0aba984d512395bac95b968746c",
          "at": 1793429861000,
          "title": "wall-framing-takeoff: joist hanger nails from typed per-hanger counts",
          "pr": 12031,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: joist hanger nails from typed per-hanger counts"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 70,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-counting-the-nails-in-a-joist-hanger.md",
            "prompts/runs/2026-10-31-session_01EhTJVNqWvHHv8v9da37JRa.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d3a4dc32241b150e14c1cf8eae54d320ff6ef567",
          "at": 1793429949000,
          "title": "wall-framing-takeoff: gable dormer framing quantities (--dormer)",
          "pr": 12033,
          "agent": "Claude",
          "models": [],
          "track": "creative",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 214,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-31-framing-a-gable-dormer-from-four-numbers.md",
            "ventures/wall-framing-takeoff/dormer.mjs",
            "ventures/wall-framing-takeoff/dormer.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9bc23723990a25f21c82146d6327e3275b5f749e",
          "at": 1793429954000,
          "title": "wall-framing-takeoff: stairwell header bending/shear/deflection check",
          "pr": 12032,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: stairwell header bending/shear/deflection check from typed loads"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 136,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-checking-the-header-around-a-stairwell.md",
            "prompts/runs/2026-10-31-session_01EhTJVPWkpbajiLH9fnbnve.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4b26a5aef37fafb898fa55f0b6ceb93aa2498bd5",
          "at": 1793430528000,
          "title": "wall-framing-takeoff: stairwell header end reaction and hanger capacity check",
          "pr": 12035,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: stairwell header end reaction and typed hanger capacity check"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 65,
          "lines_removed": 5,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtJumGBRzLXfbADbjvM.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "cb5d6fc20e514a11a934ee4ff849b1e601c08e8e",
          "at": 1793433461000,
          "title": "wall-framing-takeoff: stair stringer throat check (bending, shear, deflection)",
          "pr": 12041,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 75,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-is-my-notched-stair-stringer-strong-enough.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "07150aa40ffa0710f71511c8d723382e591dd6d8",
          "at": 1793433565000,
          "title": "wall-framing-takeoff: stairwell trimmer joist check under the header reaction",
          "pr": 12042,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 73,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-the-stairwell-trimmer-carries-the-header.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "be28c28cd71390f20d4e226e8251b50fda00a55f",
          "at": 1793433617000,
          "title": "wall-framing-takeoff: stairwell header check field on the page",
          "pr": 12043,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 38,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-checking-a-stairwell-header-from-the-browser.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "776f174cad339877e67ce8103888ec03d9ae3755",
          "at": 1793434181000,
          "title": "wall-framing-takeoff: stair top reaction as a point load on the stairwell header",
          "pr": 12045,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: stair top reaction as a point load on the stairwell header"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 8,
          "lines_added": 118,
          "lines_removed": 10,
          "added_files": [
            "docs/posts/2026-10-31-the-stair-hangs-from-the-header.md",
            "prompts/runs/2026-10-31-session_01AcxTtL3UeQcdoiDWWSX62d.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c53706f198a1033cad3ab7153075f486673d1557",
          "at": 1793434299000,
          "title": "wall-framing-takeoff: typed bearing capacity check on stairwell trimmers",
          "pr": 12046,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 74,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-checking-the-trimmer-bearing-in-a-stairwell.md",
            "prompts/runs/2026-10-31-session_01E5sJKmdNhkcYPpt5ewegQ8.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3f4094eb199e71d85ef5ca01db7b55c5e6a2e62c",
          "at": 1793434796000,
          "title": "wall-framing-takeoff: headerCheck.stairFrom links the stairwell header to the stair's stringer reaction",
          "pr": 12047,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: headerCheck.stairFrom links the stairwell header to the stair's stringer reaction",
            "post: shorten seo_title"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 97,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-linking-a-stair-to-the-header-it-hangs-from.md",
            "prompts/runs/2026-10-31-session_01E5sJKm9o1RRD5pYUjn9evZ.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f16a0f4b164b533624a9c9326765a9b218e6aea5",
          "at": 1793437236000,
          "title": "wall-framing-takeoff: stair stringer check as one typed page field (clicked in Chromium)",
          "pr": 12053,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 47,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-typing-your-engineers-numbers-into-a-stair-calculator.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "09e896cce40c0c34e52018086e309be1165facaa",
          "at": 1793437728000,
          "title": "wall-framing-takeoff: strap count per stairwell header from typed figures",
          "pr": 12054,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: strap count per stairwell header from typed force and capacity"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 76,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-31-counting-straps-at-a-stairwell.md",
            "prompts/runs/2026-10-31-session_01AcxTtKKHsUZCTVRRD6zwCE.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f5453427a527191832d0dab2fb4bb7df7cf94168",
          "at": 1793437772000,
          "title": "wall-framing-takeoff: frame the main-roof opening under a dormer",
          "pr": 12056,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: frame the main-roof opening under a dormer"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 112,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-31-framing-the-hole-under-a-dormer.md",
            "prompts/runs/2026-10-31-session_01AcxTtKjQhbW8JMi9m7oJYD.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "504f62678b9750a1e36188e47cecca385626e2de",
          "at": 1793437943000,
          "title": "wall-framing-takeoff: stair reaction reaches the stairwell header from the page",
          "pr": 12057,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: stair reaction reaches the stairwell header from the page (linkStairReaction shared with the CLI)",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 8,
          "lines_added": 180,
          "lines_removed": 17,
          "added_files": [
            "docs/posts/2026-10-31-stair-load-onto-the-stairwell-header-from-the-page.md",
            "prompts/runs/2026-10-31-session_01AcxTtLd3VzAPisgJygH2Mu.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c12929021b95126c9a77ab5d21c002d408e93842",
          "at": 1793438725000,
          "title": "wall-framing-takeoff: page fields for siding starter strip and head flashing",
          "pr": 12060,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: page fields for siding starter strip and head flashing",
            "prompts: run record for siding page fields"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 93,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-31-siding-starter-strip-and-flashing-on-the-page.md",
            "prompts/runs/2026-10-31-session_01E5sJKkmjDGDoUQZ9cKSiiy.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "50bf100529b3f5d7714389042420c3212c5ed7cd",
          "at": 1793440755000,
          "title": "wall-framing-takeoff: shed dormer framing",
          "pr": 12061,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "process",
          "bullets": [
            "wall-framing-takeoff: shed dormer framing, CLI plan key, tests, post",
            "post: fix stud lengths"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 91,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-31-shed-dormer-where-two-roof-planes-meet.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b4fbacad143e0bc8ae449868f7ca952511097dae",
          "at": 1793440838000,
          "title": "wall-framing-takeoff: typed deck post compression and bearing check (NDS Cp)",
          "pr": 12062,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 100,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-does-a-deck-post-ever-fail-in-compression.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fdd4ed011f1433f60d20120a17881d88bf8ebe96",
          "at": 1793440951000,
          "title": "wall-framing-takeoff: stair winders page field",
          "pr": 12063,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: stair winders page field (turn check, solved inner radius)",
            "prompts: run record for winders page field"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 7,
          "lines_added": 99,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-winder-stairs-on-the-page.md",
            "prompts/runs/2026-10-31-session_01EhTJVLsygozBpKgpZdJng3.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "506b347a41137d46d6bf5bfd4fd496fc90ce8453",
          "at": 1793441352000,
          "title": "wall-framing-takeoff: NDS column check for stair landing posts",
          "pr": 12065,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: NDS column check for stair landing posts",
            "post front matter"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 104,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-landing-posts-column-check.md",
            "prompts/runs/2026-10-31-session_01AcxTtJ7cdBccAaQvsKm6VD.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f78061af8d8a779a2abd2becbf615316c8671071",
          "at": 1793442086000,
          "title": "wall-framing-takeoff: landing post column check page field",
          "pr": 12068,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: landing post column check page field",
            "prompts: run record for landing post page field"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 7,
          "lines_added": 83,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-landing-post-check-on-the-page.md",
            "prompts/runs/2026-10-31-session_01E5sJKidxbQsQQoyiaL3VrV.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c34ddb0aeeeaeb8912925a1eac70d4f92fa8abf8",
          "at": 1793444503000,
          "title": "wall-framing-takeoff: deck post check page field",
          "pr": 12073,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 43,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-deck-post-check-on-the-page.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c405a21be79ba6fe873a9af715e630f218a25591",
          "at": 1793444726000,
          "title": "wall-framing-takeoff: winder walkline uniformity check",
          "pr": 12071,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "wall-framing-takeoff: winder walkline uniformity check (3/8 in against the straight tread)",
            "flagships: trim next under the cap",
            "research: live-page link for build-data (tool --write)",
            "research/build-data: README title (tool --write)",
            "research/README: drop duplicate build-data bullet"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 10,
          "lines_added": 86,
          "lines_removed": 9,
          "added_files": [
            "docs/posts/2026-10-31-winder-walkline-uniformity.md",
            "prompts/runs/2026-10-31-session_01EhTJVKZNUGJd66CSQXYbFN.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "dcf643e2cb91ce8ccb83a25a3dfd3d2b817fab3d",
          "at": 1793444938000,
          "title": "wall-framing-takeoff: winder tread span fix and tread-table check",
          "pr": 12074,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: winder tread span is the fanned gap between supports, checked against the tread table"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 69,
          "lines_removed": 10,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtK73ffKDFzD3YmhomB.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b54ae1e79b54c56f4a23abf2b2b4635cd61549af",
          "at": 1793447871000,
          "title": "wall-framing-takeoff: sheathing sheet marks on shop drawings",
          "pr": 12080,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 42,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-31-sheathing-sheet-marks-on-shop-drawings.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "266898ea7d0f45a5d5056c701c862496a7e442c9",
          "at": 1793447937000,
          "title": "wall-framing-takeoff: ganged openings (--gang)",
          "pr": 12081,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: ganged openings (--gang), post, run record",
            "post: shorten seo_title"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 161,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-ganged-windows-in-the-framing-takeoff.md",
            "prompts/runs/2026-10-31-session_01EhTJVPaMNgiHvQ3CdygVHN.json",
            "ventures/wall-framing-takeoff/ganged.mjs",
            "ventures/wall-framing-takeoff/ganged.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7d266b8fde64ca57800c4f9283e531fbdf834a3c",
          "at": 1793448252000,
          "title": "wall-framing-takeoff: click-test siding opening trim and vertical battens in Chromium",
          "pr": 12082,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 32,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-31-siding-trim-and-battens-clicked.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f91266383e2d717797ebea58328f8edff9e72d82",
          "at": 1793448829000,
          "title": "wall-framing-takeoff: gable dormer page card",
          "pr": 12084,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: gable dormer page card"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 110,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-31-gable-dormer-on-the-page.md",
            "prompts/runs/2026-10-31-session_01AcxTtJQHjamMTi8t1E7xgU.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "bcd88bc8e1d6dc82f717771107c214cf2f56e4e8",
          "at": 1793449307000,
          "title": "wall-framing-takeoff: slab edge heat loss from a typed F-factor",
          "pr": 12085,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 21,
          "lines_removed": 2,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7422b35d273c44641581dddc3abea462b611b4d6",
          "at": 1793449472000,
          "title": "wall-framing-takeoff: page field for slab edge F-factor",
          "pr": 12086,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: page field for slab edge F-factor",
            "prompts: run record for slab edge page field"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 51,
          "lines_removed": 4,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKnFy7xDBb5BnBSzTbt.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "143fee27e7746b236cb724c8262ea66304a90ff6",
          "at": 1793451430000,
          "title": "wall-framing-takeoff: shed dormer front-wall window",
          "pr": 12087,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 38,
          "lines_removed": 5,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6fc6b0c79aacdf4c2228fd5a0b4352c8036e1518",
          "at": 1793451520000,
          "title": "wall-framing-takeoff: shed dormer window and main-roof opening",
          "pr": 12089,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 46,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-shed-dormer-roof-opening.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "54159d6f0652da1331197f44a07d5724a752c9f3",
          "at": 1793451576000,
          "title": "wall-framing-takeoff: air leakage (ACH50, N, volume) in the heat load",
          "pr": 12088,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 45,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-31-air-leakage-in-the-heat-load.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5ecf2aa4bf2fc8f457dafb17f70807e89184b171",
          "at": 1793452421000,
          "title": "wall-framing-takeoff: ROADMAP lists shed dormers as landed",
          "pr": 12093,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 1,
          "lines_added": 1,
          "lines_removed": 1,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d533e3386f5eba41a5b5321de60efd45a38c56fa",
          "at": 1793455219000,
          "title": "wall-framing-takeoff: shed dormer on the page (shape select, roof opening depth)",
          "pr": 12097,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 46,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-31-shed-dormer-on-the-page.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "269335450380c06fefa6d20663524507f90d5e28",
          "at": 1793455614000,
          "title": "wall-framing-takeoff: shed dormer front window fields on the page",
          "pr": 12099,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 10,
          "lines_removed": 3,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "adb00d70af793cb0e0bf5df69a070d22f558ccf2",
          "at": 1793455923000,
          "title": "wall-framing-takeoff: gable dormer front window on the page",
          "pr": 12101,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: gable dormer front window on the page"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 74,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-gable-dormer-window-on-the-page.md",
            "prompts/runs/2026-10-31-session_01AcxTtHrJd8yAM7Nci849rV.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "2d32e7e53c728f7565cfb71c5e6abf5d211a6ca0",
          "at": 1793458698000,
          "title": "wall-framing-takeoff: schedule durations from takeoff quantities and typed production rates",
          "pr": 12106,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 105,
          "lines_removed": 9,
          "added_files": [
            "docs/posts/2026-10-31-schedule-durations-from-the-takeoff.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "27800518b6e2fd19eaddc8b0841710b678582fc6",
          "at": 1793458742000,
          "title": "wall-framing-takeoff: deck blocking field on the page",
          "pr": 12108,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 30,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-deck-blocking-on-the-page.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "cf9039b51a840c3abb4d6eb57c848ee27d6567b0",
          "at": 1793459413000,
          "title": "wall-framing-takeoff: reject a negative dormer window sill",
          "pr": 12110,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: reject a negative dormer window sill"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 73,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-dormer-window-negative-sill.md",
            "prompts/runs/2026-10-31-session_01AcxTtLK1Y9NNpS2GukUzfG.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f8c0d7598a91a2bc566971797a964df435994c99",
          "at": 1793459755000,
          "title": "wall-framing-takeoff: refuse bad stringer spacing, nosing and landing dimensions",
          "pr": 12112,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: refuse zero stringer spacing, negative nosing and bad landing post/footing dimensions"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 60,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKnYkfxUTftXYqxQFeT.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "de1b9035ee73300982a8b8f865d5f6cbabc7508f",
          "at": 1793460005000,
          "title": "wall-framing-takeoff: walkout stem wall quantities",
          "pr": 12113,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "wall-framing-takeoff: walkout stem wall quantities",
            "Post front matter"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 174,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-walkout-stem-wall-quantities.md",
            "prompts/runs/2026-10-31-session_01E5sJKnjDTPj8DN34pDyQph.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c6f5b24948c5c69a0a90a8850dcd78af10aade63",
          "at": 1793462546000,
          "title": "wall-framing-takeoff: foundation validator errors on wrong-shaped input instead of throwing",
          "pr": 12117,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "wall-framing-takeoff: foundation validator returns errors for wrong-shaped input instead of throwing"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 84,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-foundation-takeoff-bad-json.md",
            "prompts/runs/2026-10-31-session_01EhTJVQ4gTJHVMBLSic6T14.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7e6cae359e92719e71064ebca6668eddce0025a1",
          "at": 1793462640000,
          "title": "wall-framing-takeoff: drywall calculator page (sheets with cuts counted)",
          "pr": 12118,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "polish",
          "bullets": [
            "wall-framing-takeoff: drywall calculator page (sheets with cuts counted, tape, compound), FAQ, sitemap, llms.txt, test"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 174,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-a-drywall-calculator-that-counts-the-cuts.md",
            "prompts/runs/2026-10-31-session_01EhTJVLdJtgTpPesHhhSUk2.json",
            "ventures/wall-framing-takeoff/drywall-calculator.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "30dad4db55def19808ebfed6ebd91c05bcdd369d",
          "at": 1793462986000,
          "title": "wall-framing-takeoff: nine settings validators return an error for wrong-shaped input",
          "pr": 12120,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: nine settings validators return an error for wrong-shaped input instead of throwing"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 12,
          "lines_added": 92,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-takeoff-validators-wrong-shape.md",
            "prompts/runs/2026-10-31-session_01AcxTtKL8itYRyZ3W14reip.json",
            "ventures/wall-framing-takeoff/validators-shape.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5d41e94de08633f290d1ad7571d01905dd5f0d46",
          "at": 1793463159000,
          "title": "wall-framing-takeoff: construction schedule page",
          "pr": 12121,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: construction schedule page (critical path, crews, slips, bar chart)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 7,
          "lines_added": 152,
          "lines_removed": 3,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKiwbjjQiJqb45vKoZE.json",
            "ventures/wall-framing-takeoff/schedule-calculator.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f9e90e15b2cf0d9791ab2194a7202da451e362eb",
          "at": 1793463172000,
          "title": "wall-framing-takeoff: stair guard and handrail page field",
          "pr": 12122,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: stair guard and handrail page field (sides, handrail height)",
            "wall-framing-takeoff: README note and post for the stair guard field"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 77,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-stair-guards-on-the-framing-page.md",
            "prompts/runs/2026-10-31-session_01AcxTtLVN8Wvuqk471NgfUs.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "be63281a00ee0583a796a16b449b7ea6c67bc5d5",
          "at": 1793465824000,
          "title": "wall-framing-takeoff: per-crew days off in the schedule (resource calendar)",
          "pr": 12125,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 44,
          "lines_removed": 10,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6ca75c4f38dcd6edd78bbc50033dbc4916839af9",
          "at": 1793465880000,
          "title": "wall-framing-takeoff: standalone siding calculator page",
          "pr": 12126,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 134,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-siding-calculator-course-by-course.md",
            "ventures/wall-framing-takeoff/siding-calculator.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "2390b2662de53ce3e95c4849fe17db77589b9875",
          "at": 1793466284000,
          "title": "wall-framing-takeoff: landing open edges page field",
          "pr": 12127,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 50,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-landing-edge-guards-on-the-framing-page.md",
            "prompts/runs/2026-10-31-session_01EhTJVKoFeqwo4X9b6UfgNP.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d3c07abd6157454a860d879e590473827b8b2f9b",
          "at": 1793466517000,
          "title": "wall-framing-takeoff: weather allowance for exposed schedule activities",
          "pr": 12128,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: weather allowance for exposed schedule activities"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 78,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-31-schedule-weather-allowance.md",
            "prompts/runs/2026-10-31-session_01AcxTtGxCZdfwLxXJpUSCEb.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6d878a620bd47cea70c4f79a9218e23098218c62",
          "at": 1793466679000,
          "title": "wall-framing-takeoff: monthly weather-loss rates in the schedule",
          "pr": 12131,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: monthly weather-loss rates in the schedule"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 101,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-weather-loss-rates-in-the-build-schedule.md",
            "prompts/runs/2026-10-31-session_01AcxTtGTwhUQnJMi55nnB4N.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "488f0a7f5c5015b1e79678ce4a99be4a8230f2fa",
          "at": 1793467283000,
          "title": "wall-framing-takeoff: weather allowance field on the schedule page",
          "pr": 12134,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: weather allowance field on the schedule page"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 70,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-weather-allowance-on-the-schedule-page.md",
            "prompts/runs/2026-10-31-session_01E5sJKmJGWFddRUdL9BaSaN.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e885820a06f9016b9921cc37350405f919226d69",
          "at": 1793469454000,
          "title": "wall-framing-takeoff: monthly weather-rates field on the schedule page",
          "pr": 12136,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 29,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-31-monthly-weather-rates-on-the-schedule-page.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "44d05e05d48467d767349a81f2467e036e7914cb",
          "at": 1793469559000,
          "title": "wall-framing-takeoff: concrete calculator page (slab, footing, piers; quarter-yard order, bags)",
          "pr": 12137,
          "agent": "Claude",
          "models": [],
          "track": "venture",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 8,
          "lines_added": 207,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-a-concrete-calculator-that-orders-in-quarter-yards.md",
            "prompts/runs/2026-10-31-session_01EhTJVLsXeKydmGw92eLVZ.json",
            "ventures/wall-framing-takeoff/concrete-calculator.html",
            "ventures/wall-framing-takeoff/slab.mjs",
            "ventures/wall-framing-takeoff/slab.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6cef7bb73aad6101d3a48a8adee055b618446d19",
          "at": 1793470145000,
          "title": "wall-framing-takeoff: schedule notBefore start dates",
          "pr": 12139,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: schedule notBefore start dates for deliveries and permits",
            "post: fix lengths"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 101,
          "lines_removed": 13,
          "added_files": [
            "docs/posts/2026-10-31-schedule-not-before-dates.md",
            "prompts/runs/2026-10-31-session_01AcxTtGQGBvCuKZBDXzY3nr.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4f5d8363f27157f2dd0089cc9eb0fdae11682475",
          "at": 1793470368000,
          "title": "wall-framing-takeoff: footing steps box on the foundation card",
          "pr": 12141,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: footing steps box on the foundation card"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 96,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-stepped-footing-on-the-page.md",
            "prompts/runs/2026-10-31-session_01E5sJKmLN1oQrQX5zanPPXj.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "83b9cda5d75c49dacd5232fb1a1d0a332dc0b630",
          "at": 1793470674000,
          "title": "wall-framing-takeoff: slab edge line in insulation text, F-factor field clicked in Chromium",
          "pr": 12143,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: print the slab edge term in the insulation text; click-test the F-factor field"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 159,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-slab-edge-line-was-missing.md",
            "prompts/runs/2026-10-31-session_01AcxTtJ4CFSWkhLibGvwQLF.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "8ca929fb9816d91dc8638c1fae916f244d896d78",
          "at": 1793473085000,
          "title": "wall-framing-takeoff: every page links to the other six, with a test",
          "pr": 12148,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "wall-framing-takeoff: every page links to the other six, with a test",
            "fix seo_title length"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 11,
          "lines_added": 84,
          "lines_removed": 7,
          "added_files": [
            "docs/posts/2026-10-31-linking-the-seven-framing-pages.md",
            "prompts/runs/2026-10-31-session_01EhTJVPA2tTLV3GkRfS7PnM.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ff0fc47e926cc86a4c782c2af7da495b7f94faff",
          "at": 1793473092000,
          "title": "wall-framing-takeoff: schedule page documents notBefore hold dates, example carries one",
          "pr": 12149,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 16,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-31-schedule-hold-dates.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1d81f8bcf170f1fdebd99621036648d9db09149f",
          "at": 1793474386000,
          "title": "wall-framing-takeoff: schedule page hold-dates field",
          "pr": 12155,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: schedule page hold-dates field (id=YYYY-MM-DD), clicked in Chromium"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 81,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-schedule-hold-dates-field.md",
            "prompts/runs/2026-10-31-session_01E5sJKj7vbL7wrTRVAZfJyz.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "27a32eed0657d7faa55d041063ab0917ecdea158",
          "at": 1793476611000,
          "title": "wall-framing-takeoff: --schedule-template starter activity list (order only, no durations)",
          "pr": 12158,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 4,
          "lines_added": 58,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-schedule-starter-template.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7ba6e0a07a6b7bc6a04ca9f56da54157933cb89d",
          "at": 1793476694000,
          "title": "wall-framing-takeoff: standalone bid leveling page",
          "pr": 12160,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 16,
          "lines_added": 152,
          "lines_removed": 12,
          "added_files": [
            "docs/posts/2026-10-31-bid-leveling-page.md",
            "ventures/wall-framing-takeoff/bid-leveling-calculator.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fa82d206f5827dc64e23069246df75b45afab696",
          "at": 1793476700000,
          "title": "wall-framing-takeoff: schedule page takes durations from the takeoff",
          "pr": 12159,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "wall-framing-takeoff: schedule page takes durations from the takeoff (per/rate)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 76,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-31-schedule-days-from-the-takeoff-on-the-page.md",
            "prompts/runs/2026-10-31-session_01EhTJVPv8VwNpEA4WSxMo9A.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a143b5097c49637b31426ec5b589362441290bdc",
          "at": 1793477288000,
          "title": "wall-framing-takeoff: schedule prices slips with a typed carryPerDay",
          "pr": 12161,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 77,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-what-a-slipped-week-costs.md",
            "prompts/runs/2026-10-31-session_01AcxTtGoRDw5wwAq9uMtM2F.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "190a27b42f4ecc60c9b2e0fdfa0c6bec04d347ff",
          "at": 1793480412000,
          "title": "wall-framing-takeoff: cantilever joist check from typed loads",
          "pr": 12170,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: cantilever joist check from typed loads (bending, shear, tip deflection, uplift)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 135,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-31-cantilevered-floor-joist-check.md",
            "prompts/runs/2026-10-31-session_01EhTJVNSjhrrru23eUouLn1.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3c08b3d7f73309dfc244a725b6020c86573a1f69",
          "at": 1793480458000,
          "title": "wall-framing-takeoff: nailer note for gable sheathing joints over openings",
          "pr": 12171,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "process",
          "bullets": [
            "wall-framing-takeoff: gable sheathing joints over openings get a nailer note instead of a by-hand refusal"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 105,
          "lines_removed": 4,
          "added_files": [
            "docs/posts/2026-10-31-gable-sheathing-nailers.md",
            "prompts/runs/2026-10-31-session_01EhTJVMsvVuc72QbtL5NKpJ.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f3d9eda564c28abd5e6f79315608caea6d918271",
          "at": 1793480983000,
          "title": "wall-framing-takeoff: walkout footing steps down with the grade",
          "pr": 12173,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: walkout footing steps down with the grade"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 88,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-31-walkout-footing-steps.md",
            "prompts/runs/2026-10-31-session_01AcxTtHXASc1znQaNmxDHyf.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ad9e52d3f9bf5c505cf0143916669c4bfd8a9257",
          "at": 1793481050000,
          "title": "wall-framing-takeoff: page field for the cantilever tip deflection ratio",
          "pr": 12174,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: page field for the cantilever tip deflection ratio"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 70,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-31-cantilever-tip-ratio-on-the-page.md",
            "prompts/runs/2026-10-31-session_01AcxTtJWhSvwVRwa9ze88KM.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "aa04b6a72182000029763f860727c6d43bfcafe6",
          "at": 1793481614000,
          "title": "wall-framing-takeoff: schedule exports to CSV",
          "pr": 12176,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: schedule exports to CSV (CLI and page button)",
            "prompts: run record"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 8,
          "lines_added": 109,
          "lines_removed": 6,
          "added_files": [
            "docs/posts/2026-10-31-schedule-to-spreadsheet.md",
            "prompts/runs/2026-10-31-session_01E5sJKmhncZzCUmQWG59hDx.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e5b21ad1b425752fc9404c2dbd0b951c51b7fc34",
          "at": 1793482964000,
          "title": "wall-framing-takeoff: Chromium click check for the cantilever tip ratio field",
          "pr": 12178,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: page field for the cantilever tip deflection ratio",
            "Keep only the Chromium check for the cantilever tip field; update record"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 2,
          "lines_added": 66,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKkb6Vodhow9Sx4SXmr.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "33ffa554247c92a84f30dca4a9f0f9bde9387d04",
          "at": 1793483815000,
          "title": "Click-check schedule page CSV button in Chromium; post",
          "pr": 12179,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 61,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-schedule-csv-button-clicked.md",
            "ventures/wall-framing-takeoff/eval-schedule-click.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1f99b405f1a0a4db9c6bd54a4dccbf0d6a36afa6",
          "at": 1793483888000,
          "title": "wall-framing-takeoff: click-check the schedule CSV button; stop it exporting a stale schedule",
          "pr": 12180,
          "agent": "Claude",
          "models": [],
          "track": "creative",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 31,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-the-download-button-that-exported-yesterdays-schedule.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "bbfc5fcad99da836c8b06e3e9d4821ce9dcd2c5b",
          "at": 1793483936000,
          "title": "wall-framing-takeoff: carrying cost field on the schedule page and a job total",
          "pr": 12181,
          "agent": "Claude",
          "models": [],
          "track": "redteam",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 31,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-what-a-slipped-day-costs.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "136fd8021d2d4caf14df177ba54852127658a729",
          "at": 1793484565000,
          "title": "wall-framing-takeoff: schedule refuses crew counts below 1 (they hung the engine) and malformed shapes",
          "pr": 12183,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: schedule refuses crew counts below 1 (they hung the engine) and malformed shapes"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 80,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtK6skpZ5Sy98DC3Cua.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "86b7bd2e8dd6888060051e48803ffb1aaff36661",
          "at": 1793484717000,
          "title": "wall-framing-takeoff: schedule deadline reports working days late or to spare",
          "pr": 12184,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: schedule deadline reports working days late or to spare",
            "Shorten post description",
            "Shorten a post seo_title over the limit",
            "Fix merge of schedule tests"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 98,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-schedule-deadline-days-late.md",
            "prompts/runs/2026-10-31-session_01AcxTtLfhzE8r8yjyqxJCeP.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "eb9bc0aa1797a5ac4424b6d9052a93babc67cf03",
          "at": 1793485168000,
          "title": "wall-framing-takeoff: contract completion date field on the schedule page",
          "pr": 12186,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: contract completion date field on the schedule page"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 6,
          "lines_added": 70,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-schedule-deadline-field.md",
            "prompts/runs/2026-10-31-session_01E5sJKoAVF7yYNFSvg73pd6.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "34a9c16d8b23ac6dedb70cff829b67379e2a6bfc",
          "at": 1793487457000,
          "title": "wall-framing-takeoff: schedule risk, seeded Monte Carlo P50/P80/P90 and criticality (--risk)",
          "pr": 12189,
          "agent": "Claude",
          "models": [],
          "track": "review",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 7,
          "lines_added": 151,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-how-likely-is-your-house-to-finish-on-time.md",
            "ventures/wall-framing-takeoff/risk.mjs",
            "ventures/wall-framing-takeoff/risk.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6da9876ed31a414186e6bb432fa41c3cfe9a61d7",
          "at": 1793487665000,
          "title": "wall-framing-takeoff: per-activity cost with spend by month on the schedule; post",
          "pr": 12191,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 58,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-schedule-spend-by-month.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "adb6314c5c8d75beb2e72cc3be8cdbaa15792097",
          "at": 1793488006000,
          "title": "wall-framing-takeoff: weekly cash-out and peak week; fix post front matter, flagships cap, research links",
          "pr": 12190,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "wall-framing-takeoff: per-activity cost gives a weekly cash-out curve in the schedule",
            "flagships: shorten wall-framing-takeoff next under the cap",
            "research: regenerate live-page links (fixes red check on main)",
            "flagships: shorten wall-framing-takeoff next under the cap; run record notes"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 8,
          "lines_added": 84,
          "lines_removed": 31,
          "added_files": [
            "prompts/runs/2026-10-31-session_01EhTJVLG3DknQRxazbwiXgk.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "718be84461118ea16f33a974aa75e027219915cb",
          "at": 1793488104000,
          "title": "wall-framing-takeoff: activity-costs field on the schedule page, clicked in Chromium",
          "pr": 12192,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 3,
          "lines_added": 26,
          "lines_removed": 1,
          "added_files": [],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "bb189ffebb4420217064a79d8df48999f292a8db",
          "at": 1793491037000,
          "title": "wall-framing-takeoff: sill and jamb flashing tape counted per opening, in rolls",
          "pr": 12197,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 43,
          "lines_removed": 5,
          "added_files": [
            "docs/posts/2026-10-31-window-flashing-tape-count.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1e6e9cb04504b001ef0c5bfc56d8806fef344a06",
          "at": 1793491075000,
          "title": "wall-framing-takeoff: schedule risk (P50/P80/P90) on the page via a day-ranges field",
          "pr": 12198,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "wall-framing-takeoff: day-ranges field puts schedule risk (P50/P80/P90) on the page; post",
            "post: shorten front matter"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wall-framing-takeoff"
          },
          "files": 5,
          "lines_added": 99,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-schedule-risk-on-the-page.md",
            "prompts/runs/2026-10-31-session_01EhTJVMjqZzv1VyZt1YBPfU.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "hearth-and-horizon",
      "merges": [
        {
          "sha": "f7e9cbfafa322ed04d3000b2d49d41bf929d40bd",
          "at": 1793406078000,
          "title": "hearth-and-horizon: The Lake Under the Stairs (text only)",
          "pr": 11954,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Lake Under the Stairs (text only) + blog post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 449,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-the-lake-under-the-stairs.md",
            "prompts/runs/2026-10-31-session_01E5sJKjf5LNTMEDUojv9Cjr.json",
            "ventures/hearth-and-horizon/stories/the-lake-under-the-stairs.md",
            "ventures/hearth-and-horizon/the-lake-under-the-stairs.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "45c0a391c542e96ee69b124fa3ff10db308a6a7b",
          "at": 1793409012000,
          "title": "hearth-and-horizon: The Black Grains (text only)",
          "pr": 11968,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Black Grains (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 347,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtHseVVwWzWec37ih92.json",
            "ventures/hearth-and-horizon/stories/the-black-grains.md",
            "ventures/hearth-and-horizon/the-black-grains.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ffe6cef23201491272f255adf4879a3c2bd11d51",
          "at": 1793409079000,
          "title": "hearth-and-horizon: One in Eleven (text only)",
          "pr": 11967,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: One in Eleven (text only)",
            "Shorten seo_title"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 403,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-a-positive-screen-is-one-in-eleven.md",
            "prompts/runs/2026-10-31-session_01AcxTtGRUrpTTM56rAgyvUi.json",
            "ventures/hearth-and-horizon/one-in-eleven.html",
            "ventures/hearth-and-horizon/stories/one-in-eleven.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "07ca716e3c604e37fef94ad51f617c04898ab609",
          "at": 1793409174000,
          "title": "hearth-and-horizon: The Number on the Pier (text only)",
          "pr": 11970,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Number on the Pier (text only)",
            "runs: record creative/0 run"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 386,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-wind-chill-is-not-a-temperature.md",
            "prompts/runs/2026-10-31-session_01E5sJKktkdbZ7mhJSyJ4xLE.json",
            "ventures/hearth-and-horizon/stories/the-number-on-the-pier.md",
            "ventures/hearth-and-horizon/the-number-on-the-pier.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c17a0551500a28003f7d7b7555b9407ce2cba318",
          "at": 1793412611000,
          "title": "hearth-and-horizon: Aim Off (text only)",
          "pr": 11980,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: Aim Off (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 355,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-aim-off-navigation-story.md",
            "prompts/runs/2026-10-31-session_01AcxTtHjdXxiL5A18fwMWxB.json",
            "ventures/hearth-and-horizon/aim-off.html",
            "ventures/hearth-and-horizon/stories/aim-off.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "da2a5b0a6a3dd7537ead0a51f91db4e58bbac32b",
          "at": 1793413283000,
          "title": "hearth-and-horizon: The Night the Blossom Was Wet (text only)",
          "pr": 11984,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Night the Blossom Was Wet (text only)",
            "Shorten post description",
            "Shorten post description again"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 453,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-the-night-the-blossom-was-wet.md",
            "prompts/runs/2026-10-31-session_01E5sJKkt2VDWp1DWK3r35nN.json",
            "ventures/hearth-and-horizon/stories/the-night-the-blossom-was-wet.md",
            "ventures/hearth-and-horizon/the-night-the-blossom-was-wet.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "875a4417ee29edb6fb3beb52c798b12dbe503fb0",
          "at": 1793423458000,
          "title": "hearth-and-horizon: Frances Cabrini and the Big Water (text only)",
          "pr": 12016,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: Frances Cabrini and the Big Water (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 311,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-the-saint-who-was-afraid-of-the-sea.md",
            "prompts/runs/2026-10-31-session_01E5sJKmEBgzLxjEpJDePnJp.json",
            "ventures/hearth-and-horizon/frances-cabrini-and-the-big-water.html",
            "ventures/hearth-and-horizon/stories/frances-cabrini-and-the-big-water.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "917fb45a2b5212a2262150eadbae041b49629aab",
          "at": 1793441625000,
          "title": "hearth-and-horizon: The Pitch of the Cold Church (text only)",
          "pr": 12066,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Pitch of the Cold Church (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 433,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-why-a-cold-church-organ-goes-out-of-tune-with-itself.md",
            "prompts/runs/2026-10-31-session_01E5sJKixbGXeREW7f2K6oxm.json",
            "ventures/hearth-and-horizon/stories/the-pitch-of-the-cold-church.md",
            "ventures/hearth-and-horizon/the-pitch-of-the-cold-church.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "551be29478ca6b7a4c7665dbfe72b877010b3eff",
          "at": 1793444297000,
          "title": "hearth-and-horizon: The Dry Ice in the Closed Room (text only)",
          "pr": 12072,
          "agent": "Claude",
          "models": [],
          "track": "creative",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 313,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-dry-ice-in-a-closed-room-the-blackout-arithmetic.md",
            "prompts/runs/2026-10-31-session_01EhTJVLbw3iTN2zSX7t3a7X.json",
            "ventures/hearth-and-horizon/stories/the-dry-ice-in-the-closed-room.md",
            "ventures/hearth-and-horizon/the-dry-ice-in-the-closed-room.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5294422583fbbb85677fe9746c7713e135a5a90b",
          "at": 1793445017000,
          "title": "hearth-and-horizon: The Landing Every Thirty Inches (text only)",
          "pr": 12076,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Landing Every Thirty Inches (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 11,
          "lines_added": 404,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-the-ramp-that-fits-the-yard.md",
            "prompts/runs/2026-10-31-session_01AcxTtKTN4EcCLa4REWZzq4.json",
            "ventures/hearth-and-horizon/stories/the-landing-every-thirty-inches.md",
            "ventures/hearth-and-horizon/the-landing-every-thirty-inches.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "fcf5eab2db1f908e0179107959cd008ac928eda9",
          "at": 1793445776000,
          "title": "hearth-and-horizon: The Well That Took the Bleach (text only)",
          "pr": 12078,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Well That Took the Bleach (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 11,
          "lines_added": 310,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-the-well-that-took-the-bleach.md",
            "prompts/runs/2026-10-31-session_01E5sJKmHB1zbBLWu3pPxHTa.json",
            "ventures/hearth-and-horizon/stories/the-well-that-took-the-bleach.md",
            "ventures/hearth-and-horizon/the-well-that-took-the-bleach.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9b5af389184c74794439176a8c456872a80cc718",
          "at": 1793452837000,
          "title": "hearth-and-horizon: The Lid That Stayed Shut (text only)",
          "pr": 12094,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Lid That Stayed Shut (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 329,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKmntgrt7N7EtpdfkhA.json",
            "ventures/hearth-and-horizon/stories/the-lid-that-stayed-shut.md",
            "ventures/hearth-and-horizon/the-lid-that-stayed-shut.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f8ee0760156a9c860a9e0f56b3ed1031e1e20720",
          "at": 1793455771000,
          "title": "hearth-and-horizon: The Cupboard That Breathes Out (text only)",
          "pr": 12100,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Cupboard That Breathes Out (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 271,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtL1XK4RTWpHGPeFdWn.json",
            "ventures/hearth-and-horizon/stories/the-cupboard-that-breathes-out.md",
            "ventures/hearth-and-horizon/the-cupboard-that-breathes-out.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f1f1df2c82300e10a0a4181b42a75bab9caabf1f",
          "at": 1793460037000,
          "title": "hearth-and-horizon: The Finger That Reads Ninety-Four (text only)",
          "pr": 12115,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Finger That Reads Ninety-Four (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 291,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKjkHN9kX8wdreMhjEj.json",
            "ventures/hearth-and-horizon/stories/the-finger-that-reads-ninety-four.md",
            "ventures/hearth-and-horizon/the-finger-that-reads-ninety-four.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "74d87ca656d32f3318a5b46e83cf0a182c68045f",
          "at": 1793463640000,
          "title": "hearth-and-horizon: The Foot of the Ladder (text only)",
          "pr": 12123,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Foot of the Ladder (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 334,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-the-foot-of-the-ladder.md",
            "prompts/runs/2026-10-31-session_01E5sJKjdYKBsoyRiQn2ovxR.json",
            "ventures/hearth-and-horizon/stories/the-foot-of-the-ladder.md",
            "ventures/hearth-and-horizon/the-foot-of-the-ladder.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6dd39d2715c4644cb52a91a5db05b0bd4cf4950b",
          "at": 1793463722000,
          "title": "hearth-and-horizon: The Weight on the Pfarrsaal (text only)",
          "pr": 12124,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Weight on the Pfarrsaal (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 423,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKjKKwsRQCLQAehYPRc.json",
            "ventures/hearth-and-horizon/stories/the-weight-on-the-pfarrsaal.md",
            "ventures/hearth-and-horizon/the-weight-on-the-pfarrsaal.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5a00e1e8600e47ca969b2e1fa4eaf4e5f723121a",
          "at": 1793470202000,
          "title": "hearth-and-horizon: The Count Between (text only)",
          "pr": 12140,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Count Between (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 403,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtLh7a54veTrS9PPA4t.json",
            "ventures/hearth-and-horizon/stories/the-count-between.md",
            "ventures/hearth-and-horizon/the-count-between.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5577b50ecd4162afbad7ae7a573da9e9108c58d7",
          "at": 1793473792000,
          "title": "hearth-and-horizon: The Stone That Keeps the Sun (text only)",
          "pr": 12152,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Stone That Keeps the Sun (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 499,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtHomLMznpqhi6NmwPo.json",
            "ventures/hearth-and-horizon/stories/the-stone-that-keeps-the-sun.md",
            "ventures/hearth-and-horizon/the-stone-that-keeps-the-sun.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5fd5af4cc28d0403c95a134756f7caaba2644856",
          "at": 1793477426000,
          "title": "hearth-and-horizon: The Door Left Open at the Vigil (text only)",
          "pr": 12163,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Door Left Open at the Vigil (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 10,
          "lines_added": 373,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtJhLQgARqRwbi5LLXE.json",
            "ventures/hearth-and-horizon/stories/the-door-left-open-at-the-vigil.md",
            "ventures/hearth-and-horizon/the-door-left-open-at-the-vigil.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b384465c76e9392da8e08c1b4effd518b0c52ccf",
          "at": 1793480268000,
          "title": "hearth-and-horizon: Clare and the Loaves with a Cross (Little Lamps, text only)",
          "pr": 12169,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: Clare and the Loaves with a Cross (Little Lamps, text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 9,
          "lines_added": 268,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01EhTJVLBd4HDoNWEevEdU4K.json",
            "ventures/hearth-and-horizon/clare-and-the-loaves-with-a-cross.html",
            "ventures/hearth-and-horizon/stories/clare-and-the-loaves-with-a-cross.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e3be67641b1ab6cf0c46247f64404776a51af652",
          "at": 1793481624000,
          "title": "hearth-and-horizon: The Kettle That Concentrates (text only)",
          "pr": 12177,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Kettle That Concentrates (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 11,
          "lines_added": 394,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-boiling-well-water-raises-the-nitrate.md",
            "prompts/runs/2026-10-31-session_01E5sJKmC2TGrPun34ggsLwG.json",
            "ventures/hearth-and-horizon/stories/the-kettle-that-concentrates.md",
            "ventures/hearth-and-horizon/the-kettle-that-concentrates.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d8719fd7d09a7251b15f3a140a132d1048ecffc9",
          "at": 1793488400000,
          "title": "hearth-and-horizon: The Pot That Needs Dry Air (text only)",
          "pr": 12194,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "hearth-and-horizon: The Pot That Needs Dry Air (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "hearth-and-horizon"
          },
          "files": 11,
          "lines_added": 575,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-clay-pot-cooler-needs-dry-air.md",
            "prompts/runs/2026-10-31-session_01E5sJKmC2TGrPun34ggsLwG-2.json",
            "ventures/hearth-and-horizon/stories/the-pot-that-needs-dry-air.md",
            "ventures/hearth-and-horizon/the-pot-that-needs-dry-air.html"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "saints-by-candlelight",
      "merges": [
        {
          "sha": "6618666cb93f02c54a8ab77c7db3b3c485bcd04e",
          "at": 1793452867000,
          "title": "saints-by-candlelight: Hezekiah and the Letter Spread Out in the Temple (text only)",
          "pr": 12095,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: Hezekiah and the Letter Spread Out in the Temple (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 7,
          "lines_added": 451,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-hezekiah-and-the-letter-spread-out.md",
            "prompts/runs/2026-10-31-session_01E5sJKjre7FK2D49psxbzWs.json",
            "ventures/saints-by-candlelight/episodes/059-hezekiah-and-the-letter-spread-out-in-the-temple.md",
            "ventures/saints-by-candlelight/hezekiah-and-the-letter-spread-out-in-the-temple.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "29bb73da26123afe5e5e66b540f71def1f817600",
          "at": 1793456452000,
          "title": "saints-by-candlelight: episode 60, Simeon and Anna and the Child in the Temple (text only)",
          "pr": 12104,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: episode 60, Simeon and Anna and the Child in the Temple (text only)"
          ],
          "detail": "Luke 2:22-38 told straight; traditions labelled; blog post added.",
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 7,
          "lines_added": 557,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-simeon-and-anna-bedtime-episode.md",
            "prompts/runs/2026-10-31-session_01E5sJKnVmanCSTwc6ZvkFRi.json",
            "ventures/saints-by-candlelight/episodes/060-simeon-and-anna-and-the-child-in-the-temple.md",
            "ventures/saints-by-candlelight/simeon-and-anna-and-the-child-in-the-temple.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a64960fd36ea4607022f273e12393b84c76154ea",
          "at": 1793466551000,
          "title": "saints-by-candlelight: episode 61, Bartimaeus and the Cloak Thrown Aside (text only)",
          "pr": 12129,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: episode 61, Bartimaeus and the Cloak Thrown Aside (text only)"
          ],
          "detail": "Mark 10:46-52 told straight; Matthew and Luke differences named; blog post added.",
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 7,
          "lines_added": 449,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-bartimaeus-bedtime-episode.md",
            "prompts/runs/2026-10-31-session_01AcxTtKyu66wHjyNbqV4t77.json",
            "ventures/saints-by-candlelight/bartimaeus-and-the-cloak-thrown-aside.html",
            "ventures/saints-by-candlelight/episodes/061-bartimaeus-and-the-cloak-thrown-aside.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "cbdb989f3e9904ff57437a6bf070ba61d60aae10",
          "at": 1793470883000,
          "title": "saints-by-candlelight: episode 62, Philip and the Traveller on the Gaza Road (text only)",
          "pr": 12146,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: episode 62, Philip and the Traveller on the Gaza Road (text only)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 6,
          "lines_added": 527,
          "lines_removed": 2,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKkBj563KyeDtAeSVfh.json",
            "ventures/saints-by-candlelight/episodes/062-philip-and-the-traveller-on-the-gaza-road.md",
            "ventures/saints-by-candlelight/philip-and-the-traveller-on-the-gaza-road.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "f636e6b3b94509d2d39b28ec40c4358219fff4a4",
          "at": 1793477562000,
          "title": "saints-by-candlelight: episode 63, Peter and the Knock at the Gate (text only)",
          "pr": 12165,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: episode 63, Peter and the Knock at the Gate (text only)",
            "prompts: run record for episode 63"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 7,
          "lines_added": 576,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-the-gate-that-opened-and-the-gate-that-waited.md",
            "prompts/runs/2026-10-31-session_01E5sJKmUmH143pPk66uGC62.json",
            "ventures/saints-by-candlelight/episodes/063-peter-and-the-knock-at-the-gate-of-mary-mother-of-mark.md",
            "ventures/saints-by-candlelight/peter-and-the-knock-at-the-gate-of-mary-mother-of-mark.html"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "864c659b587bcf8ead771ae884acf95f1bc3fe06",
          "at": 1793484734000,
          "title": "saints-by-candlelight: episode 64, Tabitha and the Tunics in the Upper Room (text only)",
          "pr": 12185,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "creative",
          "bullets": [
            "saints-by-candlelight: episode 64, Tabitha and the Tunics in the Upper Room (text only)",
            "prompts: run record for episode 64"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "saints-by-candlelight"
          },
          "files": 7,
          "lines_added": 530,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-a-seamstress-in-joppa-episode-64.md",
            "prompts/runs/2026-10-31-session_01E5sJKVFVAWktXMzQ5JCL8.json",
            "ventures/saints-by-candlelight/episodes/064-tabitha-and-the-tunics-in-the-upper-room-at-joppa.md",
            "ventures/saints-by-candlelight/tabitha-and-the-tunics-in-the-upper-room-at-joppa.html"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "ai-bookkeeper",
      "merges": [
        {
          "sha": "41914eb00f1a0fc79e60d95e00b66c3b357b8300",
          "at": 1793408365000,
          "title": "ai-bookkeeper: eleventh gap probe, keyword rules for pressure washers, jewelry makers, notaries, sign shops, beekeepers; post",
          "pr": 11964,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 6,
          "lines_added": 93,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-ai-bookkeeper-eleventh-gap-probe.md",
            "prompts/runs/2026-10-31-session_01EhTJVPTh2U2udvrBk4CyXo.json",
            "ventures/ai-bookkeeper/eval/probe11.mjs",
            "ventures/ai-bookkeeper/probe11.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c9829a90f4f34a708b7439235519df716fd8881c",
          "at": 1793411908000,
          "title": "ai-bookkeeper: twelfth gap probe, keyword rules for florists, home inspectors, food trucks, translators, event planners; post",
          "pr": 11975,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 6,
          "lines_added": 87,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-ai-bookkeeper-twelfth-gap-probe.md",
            "prompts/runs/2026-10-31-session_01EhTJVLVQ96AMSqQsaqMb8n.json",
            "ventures/ai-bookkeeper/eval/probe12.mjs",
            "ventures/ai-bookkeeper/probe12.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "810be27b9a7e70555bf2fd30502d30b0e8324cb9",
          "at": 1793412001000,
          "title": "ai-bookkeeper: twelfth gap probe, keyword rules for florists, painters, translators, process servers; post",
          "pr": 11976,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 6,
          "lines_added": 96,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-ai-bookkeeper-thirteenth-gap-probe.md",
            "prompts/runs/2026-10-31-session_01EhTJVPTh2U2udvrBk4CyXo-b.json",
            "ventures/ai-bookkeeper/eval/probe13.mjs",
            "ventures/ai-bookkeeper/probe13.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "d6b08bb3c45e10703e080bf32a5af4bb793d7a1e",
          "at": 1793412590000,
          "title": "ai-bookkeeper: fourteenth gap probe, keyword rules for cleaners, landscapers, yoga teachers, potters, dog trainers",
          "pr": 11979,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: fourteenth gap probe, keyword rules for cleaners, landscapers, yoga teachers, potters, dog trainers; post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 6,
          "lines_added": 109,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-ai-bookkeeper-fourteenth-gap-probe.md",
            "prompts/runs/2026-10-31-session_01AcxTtL8BAr8KNh4RmL4xmV.json",
            "ventures/ai-bookkeeper/eval/probe14.mjs",
            "ventures/ai-bookkeeper/probe14.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "96be6a4a48c1df6addecc78567fdee01bc866048",
          "at": 1793413188000,
          "title": "ai-bookkeeper: fifteenth gap probe, keyword rules for roofers, HVAC, chefs, music teachers, massage therapists",
          "pr": 11983,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: fifteenth gap probe, keyword rules for roofers, HVAC, chefs, music teachers, massage therapists; post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-bookkeeper"
          },
          "files": 6,
          "lines_added": 104,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-ai-bookkeeper-fifteenth-gap-probe.md",
            "prompts/runs/2026-10-31-session_01E5sJKnm3b4RBYevEB2LqZL.json",
            "ventures/ai-bookkeeper/eval/probe15.mjs",
            "ventures/ai-bookkeeper/probe15.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "einvoice-preflight",
      "merges": [
        {
          "sha": "adefe502cf993f28b61f238cdf94c7735b706b1f",
          "at": 1793408322000,
          "title": "einvoice-preflight: Nigeria MBS mandate page, hub row, index link, post",
          "pr": 11963,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 8,
          "lines_added": 144,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-nigeria-joins-the-e-invoicing-country-pages.md",
            "ventures/einvoice-preflight/nigeria-mbs-e-invoice-mandate.html",
            "ventures/einvoice-preflight/nigeria-mbs-e-invoice-mandate.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "843d31d48f12894690ca235d4bc78ad947b1158e",
          "at": 1793411975000,
          "title": "einvoice-preflight: PDF-005/006 envelope notes; Nigeria page country links (fixes 16 link tests)",
          "pr": 11977,
          "agent": "Claude",
          "models": [],
          "track": "ventures",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 42,
          "lines_added": 87,
          "lines_removed": 38,
          "added_files": [
            "docs/posts/2026-10-31-two-more-pdf-checks-for-factur-x-invoices.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9e647a3317981daaa228314f1351343016e2bdc6",
          "at": 1793412890000,
          "title": "einvoice-preflight: Ireland page read against Revenue's eInvoicing hub",
          "pr": 11981,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "einvoice-preflight: Ireland page read against Revenue's eInvoicing hub (phase two narrower), post"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 6,
          "lines_added": 95,
          "lines_removed": 20,
          "added_files": [
            "docs/posts/2026-10-31-ireland-einvoice-dates-from-revenue.md",
            "prompts/runs/2026-10-31-session_01AcxTtLjesN1oxtZhT1N2rK.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "8a2b1823528991fefea1744b2846ab9f1cfbc755",
          "at": 1793420076000,
          "title": "redteam: einvoice-preflight document.mjs 2026-10-31",
          "pr": 12007,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: einvoice-preflight document.mjs 2026-10-31",
            "redteam: record PR"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "einvoice-preflight"
          },
          "files": 2,
          "lines_added": 185,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtLeBT2cqx1tuuNbxPt.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "several products at once",
      "merges": [
        {
          "sha": "a5b1bd6f7942fb374b611d15b12681abfea4df9e",
          "at": 1793406485000,
          "title": "ai-bookkeeper: tenth gap probe, keyword rules for bakers, drone pilots, locksmiths, streamers, locums",
          "pr": 11942,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "ai-bookkeeper: ninth gap probe, keyword rules for bakers, drone pilots, locksmiths, streamers, locums; post",
            "ai-bookkeeper: rename to tenth gap probe (a sibling landed the ninth)"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "several products at once"
          },
          "files": 15,
          "lines_added": 374,
          "lines_removed": 11,
          "added_files": [
            "docs/posts/2026-10-30-ai-bookkeeper-tenth-gap-probe.md",
            "prompts/runs/2026-10-30-session_01EhTJVPGhVdQFDiKs3qfqMM.json",
            "ventures/ai-bookkeeper/eval/probe10.mjs",
            "ventures/ai-bookkeeper/probe10.test.mjs",
            "ventures/open-robot-mower/src/mowerbot.egg-info/PKG-INFO",
            "ventures/open-robot-mower/src/mowerbot.egg-info/SOURCES.txt",
            "ventures/open-robot-mower/src/mowerbot.egg-info/dependency_links.txt",
            "ventures/open-robot-mower/src/mowerbot.egg-info/entry_points.txt",
            "ventures/open-robot-mower/src/mowerbot.egg-info/requires.txt",
            "ventures/open-robot-mower/src/mowerbot.egg-info/top_level.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "16967e973ff5f7b3e2ba12e1f007339fe40cbec1",
          "at": 1793456639000,
          "title": "Sweep duplicate meta descriptions; make 22 vs- pages unique",
          "pr": 12103,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "Sweep duplicate meta descriptions; make 22 vs- pages unique"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "several products at once"
          },
          "files": 26,
          "lines_added": 196,
          "lines_removed": 22,
          "added_files": [
            "docs/posts/2026-10-31-duplicate-meta-descriptions.md",
            "platform/ci/duplicate_descriptions.py",
            "platform/ci/test_duplicate_descriptions.py",
            "prompts/runs/2026-10-31-session_01E5sJKo1rLHdvbu6UWqyCgw.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e519777fe17a8d2ac32d22c69297ea0c09b9c021",
          "at": 1793477956000,
          "title": "a11y sweep: aria-live on calculator result regions, reduced-motion on 3 pages",
          "pr": 12166,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "a11y sweep: aria-live on 12 calculator result regions, reduced-motion on 3 pages"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "several products at once"
          },
          "files": 15,
          "lines_added": 74,
          "lines_removed": 17,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKoB4DeP7o7wpLH4Wzx.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "actions-continue-on-error-check",
      "merges": [
        {
          "sha": "07704779611f03920b56f9e880ed6500ea58d174",
          "at": 1793408271000,
          "title": "actions-continue-on-error-check: llms.txt for answer engines",
          "pr": 11961,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "polish",
          "bullets": [
            "actions-continue-on-error-check: llms.txt for answer engines"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "actions-continue-on-error-check"
          },
          "files": 3,
          "lines_added": 64,
          "lines_removed": 3,
          "added_files": [
            "prompts/runs/2026-10-31-session_01EhTJVLsnn4s1LfMZTqzZjX.json",
            "ventures/actions-continue-on-error-check/llms.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "ai-engineering-academy",
      "merges": [
        {
          "sha": "81c00593bcbef1a69c8b5e292aee6086106ca144",
          "at": 1793412499000,
          "title": "polish: llms.txt for ai-engineering-academy calculators",
          "pr": 11978,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "polish",
          "bullets": [
            "ai-engineering-academy: llms.txt with worked examples; post and polish report",
            "post: shorten front matter"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "ai-engineering-academy"
          },
          "files": 4,
          "lines_added": 176,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-llms-txt-for-the-electronics-calculators.md",
            "docs/reports/polish-2026-10-31-academy-llms-txt.md",
            "prompts/runs/2026-10-31-session_01AcxTtL4tEKE8oRKSJ7j7MK.json",
            "ventures/ai-engineering-academy/llms.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "changepoint-detector",
      "merges": [
        {
          "sha": "9694b0894c2f155c0362dbd144dcecea82982761",
          "at": 1793405613000,
          "title": "changepoint-detector: --bootstrap swept over 33 real series; post",
          "pr": 11952,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "changepoint-detector: --bootstrap swept over 33 real series; post",
            "prompts: run record for PR 11952"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "changepoint-detector"
          },
          "files": 7,
          "lines_added": 144,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-31-bootstrap-penalty-on-33-real-series.md",
            "prompts/runs/2026-10-31-session_01E5sJKkgcPWzVkFGfqnT4VG.json",
            "ventures/changepoint-detector/eval/real-bootstrap-sweep.mjs",
            "ventures/changepoint-detector/eval/real-bootstrap-sweep.out.txt",
            "ventures/changepoint-detector/real-bootstrap-sweep.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "local-site-studio",
      "merges": [
        {
          "sha": "35aad39ca1c6d2f034a2ec6d75a664884bca11a8",
          "at": 1793412660000,
          "title": "polish: hand-written llms.txt for local-site-studio",
          "pr": 11982,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "polish",
          "bullets": [
            "polish: hand-written llms.txt for local-site-studio",
            "polish: run record",
            "polish: shorten post description"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "local-site-studio"
          },
          "files": 4,
          "lines_added": 112,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-an-llms-txt-that-says-prototype.md",
            "docs/reports/polish-2026-10-31-local-site-studio-llms-txt.md",
            "prompts/runs/2026-10-31-session_01E5sJKmsqqgbyftfAY4nnmT.json",
            "ventures/local-site-studio/llms.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "rsu-withholding-gap-calculator",
      "merges": [
        {
          "sha": "1aebbf3a1e3d5697641a3891d3471cb7063abaa0",
          "at": 1793473751000,
          "title": "redteam: rsu-withholding-gap-calculator 2026-10-31",
          "pr": 12151,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: rsu-withholding-gap-calculator 2026-10-31",
            "redteam: record PR number"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "rsu-withholding-gap-calculator"
          },
          "files": 2,
          "lines_added": 185,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtKiry4ouSu7xG4ENYH.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "shed-designer",
      "merges": [
        {
          "sha": "983f0fa874787541b8b7987029c3424ad45e8024",
          "at": 1793407851000,
          "title": "shed-designer: r4 lane 4 — bound the top-plate joint search on long walls (fuzz hang)",
          "pr": 11960,
          "agent": null,
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "Merged on local verification (CI runners queued): shed suite 482/482 after merging main, typecheck 0, fuzz seed 202 at 1,500 now completes 17/17, renders unchanged.",
          "area": {
            "kind": "product",
            "name": "shed-designer"
          },
          "files": 3,
          "lines_added": 34,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-a-shed-wall-with-too-many-ways-to-join-its-plates.md"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "wildlife-exclusion-bid-calculator",
      "merges": [
        {
          "sha": "f39089aab3c01e2ded167cf5c564ef84a423f4ee",
          "at": 1793408873000,
          "title": "redteam: wildlife-exclusion share.mjs 2026-10-31",
          "pr": 11966,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: wildlife-exclusion share.mjs 2026-10-31",
            "redteam: record PR"
          ],
          "detail": null,
          "area": {
            "kind": "product",
            "name": "wildlife-exclusion-bid-calculator"
          },
          "files": 2,
          "lines_added": 185,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtLh6prTSXkqWAKeDxu.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    }
  ],
  "research": [
    {
      "name": "aerolog-scaling",
      "merges": [
        {
          "sha": "88863481c9015abf9b1140c1aecd49b126f43840",
          "at": 1793405275000,
          "title": "research/aerolog-scaling: paper section 4.10, adjustable tail and identification (9d to 9i)",
          "pr": 11947,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: paper section 4.10, adjustable tail and identification (9d to 9i)",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 4,
          "lines_added": 65,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-adjustable-tail-sub-scale-cargo-uav.md",
            "prompts/runs/2026-10-31-session_01AcxTtGXQJDAqzyNszZZfPX.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "4a1ebe6d8927799af404749c7009bde9fe871cf5",
          "at": 1793410837000,
          "title": "research/aerolog-scaling: milestone 9j, output-error fit at 10% sensor noise",
          "pr": 11974,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 9j plan (output-error fit at 10% noise)",
            "research/aerolog-scaling: milestone 9j result, output-error fit at 10% noise"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 4,
          "lines_added": 348,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKnW8R6VjX6gVJzdEz5.json",
            "research/aerolog-scaling/experiments/output_error_10pct/results.txt",
            "research/aerolog-scaling/experiments/output_error_10pct/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "76e0d031e1cf6ae812cad775d3d3e5d8be1d0dda",
          "at": 1793416209000,
          "title": "research/aerolog-scaling: milestone 2a, energy per package vs a diesel truck",
          "pr": 11994,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 2a, energy per package from measured flights vs a diesel truck; post",
            "post: shorten front matter"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 6,
          "lines_added": 286,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-drone-versus-truck-energy-per-package.md",
            "prompts/runs/2026-10-31-session_01AcxTtGqhPP3rGPLhGSrpa7.json",
            "research/aerolog-scaling/experiments/energy_per_package/results.txt",
            "research/aerolog-scaling/experiments/energy_per_package/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5ea7664063c9083e1f5fedf4a5519613f7f87752",
          "at": 1793419801000,
          "title": "research/aerolog-scaling: milestone 2b, whole-flight energy and battery range",
          "pr": 12003,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 2b, whole-flight energy and battery range from measured flights",
            "prompts: run record for aerolog-scaling 2b"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 6,
          "lines_added": 216,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-a-delivery-drone-spends-77-percent-of-its-energy-not-cruising.md",
            "prompts/runs/2026-10-31-session_01AcxTtJnMXUPrVotRiLgEQ5.json",
            "research/aerolog-scaling/experiments/mission_energy/results.txt",
            "research/aerolog-scaling/experiments/mission_energy/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7aa0d463c778991f80958f98d252ddbd4fee6783",
          "at": 1793423375000,
          "title": "research/aerolog-scaling: milestone 2c, altitude and payload in fixed flight energy",
          "pr": 12015,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 2c, altitude and payload in the fixed flight energy",
            "Shorten post description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 6,
          "lines_added": 188,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-how-much-energy-a-delivery-drone-spends-climbing.md",
            "prompts/runs/2026-10-31-session_01AcxTtHEemntb4Lihe74u2T.json",
            "research/aerolog-scaling/experiments/altitude_energy/results.txt",
            "research/aerolog-scaling/experiments/altitude_energy/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6db91c3836890cfb7b964a6be49e7587ed8fcc3c",
          "at": 1793424215000,
          "title": "research/aerolog-scaling: milestone 9k, continuation start for the output-error fit at 10% noise",
          "pr": 12019,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 9k, continuation start for the output-error fit at 10% noise"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 5,
          "lines_added": 314,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-fitting-a-long-noisy-flight-record-start-short.md",
            "prompts/runs/2026-10-31-session_01AcxTtGQaHgPk9QTKRBcTcB.json",
            "research/aerolog-scaling/experiments/output_error_start/results.txt",
            "research/aerolog-scaling/experiments/output_error_start/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7a6f495a4e0d7ff408f67ab60bdea043534a701a",
          "at": 1793431726000,
          "title": "research/aerolog-scaling: milestone 9l, estimated initial state in the output-error fit",
          "pr": 12040,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 9l, estimated initial state in the output-error fit at 10% noise",
            "prompts: run record for aerolog-scaling 9l"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 4,
          "lines_added": 275,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKmxTf3DKqFibcupve3.json",
            "research/aerolog-scaling/experiments/estimated_x0/results.txt",
            "research/aerolog-scaling/experiments/estimated_x0/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5e1ffa8f1d6fe8e0bf634c83980ccf1da35e9991",
          "at": 1793441361000,
          "title": "research/aerolog-scaling: paper draft catches up with milestones 2a-2c and 9j-9l",
          "pr": 12064,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: paper draft catches up with milestones 2a-2c and 9j-9l",
            "prompts: run record for research/aerolog-scaling paper step",
            "prompts: fix run record writeups format"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 5,
          "lines_added": 79,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-what-a-drone-battery-says-about-package-delivery.md",
            "prompts/runs/2026-10-31-session_01AcxTtLFB6vfT2GPSHLiCvJ.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e606e09766d05ff8cc6fab9d6de39b9105ad20a6",
          "at": 1793442952000,
          "title": "research/aerolog-scaling: 9i output-error fit at 10% noise (1 period)",
          "pr": 12070,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: 9i output-error fit at 10% noise, one phugoid period"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 4,
          "lines_added": 68,
          "lines_removed": 4,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKjQGMLC9dbWrrUm3mF.json",
            "research/aerolog-scaling/experiments/output_error_fit/results_noise10_1period.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e198c2a4d985922c19f3d7ff6452d8550e086b7b",
          "at": 1793453728000,
          "title": "research/aerolog-scaling: milestone 9m, coloured sensor noise in the output-error fit",
          "pr": 12096,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 9m, coloured sensor noise in the output-error fit",
            "flagships: trim wall-framing-takeoff next under the 2000-char cap (main was red)"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 6,
          "lines_added": 330,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-aerolog-coloured-noise.md",
            "prompts/runs/2026-10-31-session_01AcxTtJvbNyXeTR3bpDZABV.json",
            "research/aerolog-scaling/experiments/coloured_noise/results.txt",
            "research/aerolog-scaling/experiments/coloured_noise/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "a057a7a5878a1dc1d82f0228a3a1cf8de0033fa3",
          "at": 1793468300000,
          "title": "research/aerolog-scaling: milestone 9n, whitened residuals for coloured noise",
          "pr": 12135,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 9n plan, whitened residuals for coloured noise",
            "research/aerolog-scaling: milestone 9n outcome, whitened residuals recover 14 of 17 gust-share points"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 4,
          "lines_added": 293,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKnrjuD9uoQ4NbWhdAD.json",
            "research/aerolog-scaling/experiments/whitened_noise/results.txt",
            "research/aerolog-scaling/experiments/whitened_noise/run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "541f0b1cde98f824fa5ee7250192e5d69ca3dfd7",
          "at": 1793474425000,
          "title": "research/aerolog-scaling: milestone 9o, estimated noise correlation (GLS)",
          "pr": 12153,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/aerolog-scaling: milestone 9o plan, estimated-rho GLS (run in progress)",
            "research/aerolog-scaling: milestone 9o outcome, estimated rho matches known rho"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "aerolog-scaling"
          },
          "files": 5,
          "lines_added": 330,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-estimating-sensor-noise-correlation.md",
            "prompts/runs/2026-10-31-session_01AcxTtKp5jKe4wBgqe26q2L.json",
            "research/aerolog-scaling/experiments/estimated_rho/results.txt",
            "research/aerolog-scaling/experiments/estimated_rho/run.py"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "build-data",
      "merges": [
        {
          "sha": "3b46d9d39dd082b1bb546d7e37c216603c919173",
          "at": 1793420004000,
          "title": "build-data: research programme proposal and permit-feed probe",
          "pr": 12006,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "build-data: programme proposal, feed probe, log and post"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "build-data"
          },
          "files": 8,
          "lines_added": 201,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-permit-feeds-what-they-hold.md",
            "prompts/runs/2026-10-31-session_01AcxTtHBYVVfuypHisvWxqT.json",
            "research/build-data/LOG.md",
            "research/build-data/PROPOSAL.md",
            "research/build-data/README.md",
            "research/build-data/project.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7ef5e0425abc53d04b2d4f05da5bb613c436588e",
          "at": 1793435095000,
          "title": "build-data: milestone 1, three-city permit loader, datasheets, first lags",
          "pr": 12049,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "build-data: milestone 1, three-city permit loader, datasheets, first lags",
            "post: shorten seo_title"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "build-data"
          },
          "files": 13,
          "lines_added": 378,
          "lines_removed": 3,
          "added_files": [
            "docs/posts/2026-10-31-most-building-permits-are-issued-the-day-you-apply.md",
            "prompts/runs/2026-10-31-session_01AcxTtKY54h2SkmvbZ7wvgj.json",
            "research/build-data/datasheets/austin.md",
            "research/build-data/datasheets/chicago.md",
            "research/build-data/datasheets/sf.md",
            "research/build-data/results/lags.json",
            "research/build-data/results/manifest.json",
            "research/build-data/src/describe.py",
            "research/build-data/src/permits.py",
            "research/build-data/tests/test_permits.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "50844e16af72e19d9299e48db683837fab3ddcb0",
          "at": 1793435561000,
          "title": "research/build-data: Austin cost field correction (milestone 1 duplicate dropped)",
          "pr": 12048,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/build-data: milestone 1, loaders, schema and datasheets for Chicago, SF and Austin",
            "build-data post: shorten front matter",
            "build-data: descriptive README title, writeups as list"
          ],
          "detail": "Pulled 4,532,374 permit rows onto one schema; row counts match the feeds.",
          "area": {
            "kind": "research",
            "name": "build-data"
          },
          "files": 4,
          "lines_added": 142,
          "lines_removed": 2,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtKqLtb7m6btbyp4XHG.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "6c47b795a42f13d53f4f8fbbceef29fa3bdaf9d3",
          "at": 1793437087000,
          "title": "research/build-data: milestone 2 harness (quantile-loss, forward split, reference-class baseline), hand-tested; not yet run on real data",
          "pr": 12052,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "build-data"
          },
          "files": 5,
          "lines_added": 221,
          "lines_removed": 3,
          "added_files": [
            "research/build-data/src/harness.py",
            "research/build-data/tests/test_harness.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "924b5c5a135d7bfcc6bbc434baeef4b64ba9cde3",
          "at": 1793442091000,
          "title": "research/build-data: baselines run on real feeds (milestone 2)",
          "pr": 12069,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/build-data: baselines run on real feeds for 3 cities (milestone 2), log, post",
            "post: drop an unsourced line"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "build-data"
          },
          "files": 9,
          "lines_added": 196,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-permit-wait-times-three-cities-baseline.md",
            "prompts/runs/2026-10-31-session_01AcxTtHGZcXUU184F1Z499Z.json",
            "research/build-data/results/baseline_austin_a2i_2024.json",
            "research/build-data/results/baseline_austin_i2c_2024.json",
            "research/build-data/results/baseline_chicago_a2i_2024.json",
            "research/build-data/results/baseline_sf_a2i_2024.json",
            "research/build-data/results/baseline_sf_i2c_2024.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c65ca279db3e20af409e0e5d525c63ef51e81628",
          "at": 1793456112000,
          "title": "research/build-data: milestone 3, boosted quantile models vs baseline (H1)",
          "pr": 12091,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/build-data: milestone 3 boosted quantile script (not yet run)",
            "research/build-data: milestone 3, boosted quantile models vs baseline on real feeds (H1)",
            "build-data post: shorten seo_title",
            "flagships: trim wall-framing-takeoff next under the 2000-character cap (landed item belongs in the README)"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "build-data"
          },
          "files": 17,
          "lines_added": 929,
          "lines_removed": 22,
          "added_files": [
            "docs/posts/2026-10-31-permit-durations-boosted-vs-baseline.md",
            "prompts/runs/2026-10-31-session_01AcxTtKctnNwAGJPD2yxq6n.json",
            "research/build-data/results/boosted_austin_a2i_2024.json",
            "research/build-data/results/boosted_austin_i2c_2024.json",
            "research/build-data/results/boosted_chicago_a2i_2024.json",
            "research/build-data/results/boosted_sf_a2i_2024.json",
            "research/build-data/results/boosted_sf_i2c_2024.json",
            "research/build-data/results/m3_table.md",
            "research/build-data/src/boosted.py",
            "research/build-data/src/summarise_m3.py",
            "research/build-data/tests/test_boosted.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ee31277e78724dd389484d20d06fc64fc303f700",
          "at": 1793458721000,
          "title": "research/build-data: milestone 4 instrument, split-conformal (CQR) and drift diagnostic, tests; no real-data run (feeds unreachable)",
          "pr": 12107,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "build-data"
          },
          "files": 3,
          "lines_added": 138,
          "lines_removed": 0,
          "added_files": [
            "research/build-data/src/conformal.py",
            "research/build-data/tests/test_conformal.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "917c748ac85c455eaf905fd65d1a1d05b4532507",
          "at": 1793476723000,
          "title": "research/build-data: milestone 4, conformal calibration on the real feeds (H2)",
          "pr": 12156,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/build-data: milestone 4 runner, CQR on the real feeds (odd/even week split)",
            "research/build-data: milestone 4, conformal coverage on real feeds (H2 refuted); post; run record",
            "post: shorten front matter"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "build-data"
          },
          "files": 20,
          "lines_added": 1437,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-permit-interval-conformal-hits-a-floor.md",
            "prompts/runs/2026-10-31-session_01AcxTtGZbGRDeYb5oko14Zg.json",
            "research/build-data/results/conformal_austin_a2i_2022.json",
            "research/build-data/results/conformal_austin_a2i_2023.json",
            "research/build-data/results/conformal_austin_a2i_2024.json",
            "research/build-data/results/conformal_austin_i2c_2022.json",
            "research/build-data/results/conformal_austin_i2c_2023.json",
            "research/build-data/results/conformal_austin_i2c_2024.json",
            "research/build-data/results/conformal_chicago_a2i_2022.json",
            "research/build-data/results/conformal_chicago_a2i_2023.json",
            "research/build-data/results/conformal_chicago_a2i_2024.json",
            "research/build-data/results/conformal_sf_a2i_2022.json",
            "research/build-data/results/conformal_sf_a2i_2023.json",
            "research/build-data/results/conformal_sf_a2i_2024.json",
            "research/build-data/results/conformal_sf_i2c_2022.json",
            "research/build-data/results/conformal_sf_i2c_2023.json",
            "research/build-data/results/conformal_sf_i2c_2024.json",
            "research/build-data/src/conformal_run.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "85a0aa20b8a17ebbf41285687ee39cfb23721bc8",
          "at": 1793490048000,
          "title": "research/build-data: milestone 5, permutation importance and drop-one (H3)",
          "pr": 12196,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/build-data: milestone 5, permutation importance and drop-one (H3); post"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "build-data"
          },
          "files": 11,
          "lines_added": 778,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-permit-duration-which-fields-matter.md",
            "prompts/runs/2026-10-31-session_01AcxTtJaRRkXy8E4wiMSRK2.json",
            "research/build-data/results/importance_austin_a2i_2024.json",
            "research/build-data/results/importance_austin_i2c_2024.json",
            "research/build-data/results/importance_chicago_a2i_2024.json",
            "research/build-data/results/importance_sf_a2i_2024.json",
            "research/build-data/results/importance_sf_i2c_2024.json",
            "research/build-data/results/m5_table.md",
            "research/build-data/src/importance.py"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "heavy-hydraulics",
      "merges": [
        {
          "sha": "29d65f513cd80da7aea652a06eb8b52b7ff4113b",
          "at": 1793405965000,
          "title": "research/heavy-hydraulics: paper draft gains the cycle-time section (milestone 6b)",
          "pr": 11953,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: 6b paper draft gains cycle-time section (3a to 3f)"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 4,
          "lines_added": 66,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKjLPgmrap1YNtvRf1Q.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7c5f7f3c31e7200569b2816f2a2358d6bb959cc3",
          "at": 1793426974000,
          "title": "research/heavy-hydraulics: milestone 3g, open-centre sections sized from PVG 32 rated flows",
          "pr": 12025,
          "agent": "Claude",
          "models": [],
          "track": "research",
          "bullets": [],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 3,
          "lines_added": 67,
          "lines_removed": 0,
          "added_files": [
            "research/heavy-hydraulics/experiments/rated_sizing.py",
            "research/heavy-hydraulics/experiments/rated_sizing_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "8b94122a52a275cb8cd01a3207661c005e175b4c",
          "at": 1793430622000,
          "title": "research/heavy-hydraulics: milestone 3h, spool drop at rated flow from PVG 32 curves",
          "pr": 12037,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 3h, spool drop at rated flow digitised from PVG 32 curves"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 6,
          "lines_added": 158,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtGhk9nTX5f6cz811Kb.json",
            "research/heavy-hydraulics/experiments/data/pvg32_dp_at_rated.csv",
            "research/heavy-hydraulics/experiments/digitise_pvg_dp.py",
            "research/heavy-hydraulics/experiments/rated_sizing_curve.py",
            "research/heavy-hydraulics/experiments/rated_sizing_curve_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "12c2d2fe849e1bc4df7f6e0b917a76b6f71695ef",
          "at": 1793431176000,
          "title": "research/heavy-hydraulics: 3i time-penalised break-even with manual-curve sizing",
          "pr": 12039,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: 3i time-penalised break-even with manual-curve sizing",
            "Fix post lint"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 5,
          "lines_added": 141,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-open-centre-excavator-valves-cost-time-and-energy.md",
            "prompts/runs/2026-10-31-session_01E5sJKk4TGViWXUAFnUzChh.json",
            "research/heavy-hydraulics/experiments/time_penalised_rated.py",
            "research/heavy-hydraulics/experiments/time_penalised_rated_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "eccec0dea3fdd14a2ee4510dbfc6cf470920cf73",
          "at": 1793452410000,
          "title": "heavy-hydraulics: fold milestone 3i into paper section 3.5",
          "pr": 12092,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "heavy-hydraulics: fold milestone 3i into paper section 3.5, add blog post",
            "Shorten seo_title",
            "Shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 5,
          "lines_added": 66,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-excavator-valve-sizing-from-the-manual.md",
            "prompts/runs/2026-10-31-session_01AcxTtJ6cMB9jipbfUxqk7P.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "c623e9bfbd665eb5b6d8eb0612b4115865d93657",
          "at": 1793459526000,
          "title": "research/heavy-hydraulics: milestone 3j, two manual figures agree on the rating-point drop",
          "pr": 12111,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/heavy-hydraulics: milestone 3j, PVG 32 P-to-A flow curves cross-check the rating-point drop",
            "post: shorten front matter"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "heavy-hydraulics"
          },
          "files": 9,
          "lines_added": 169,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-excavator-valve-rating-two-figures.md",
            "prompts/runs/2026-10-31-session_01AcxTtLvNHq5iGP5cWS5gGD.json",
            "research/heavy-hydraulics/experiments/data/pvg32_flow_full_travel.csv",
            "research/heavy-hydraulics/experiments/digitise_pvg_flow.py",
            "research/heavy-hydraulics/experiments/pvg_flow_rating.py",
            "research/heavy-hydraulics/experiments/pvg_flow_rating_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "marine-hull",
      "merges": [
        {
          "sha": "552fe53d6991c06ec19d6a8af0c77cba2630bde0",
          "at": 1793405407000,
          "title": "research/marine-hull: milestone 7c, H1 and H5 run as stated",
          "pr": 11950,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 7c, H1 and H5 run as stated (both refuted)",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 8,
          "lines_added": 168,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-battery-energy-cannot-flip-a-hull-ranking.md",
            "prompts/runs/2026-10-31-session_01AcxTtLZNVJAUr5fEqELPUq.json",
            "research/marine-hull/experiments/results_h1_h5.txt",
            "research/marine-hull/experiments/run_h1_h5.py",
            "research/marine-hull/tests/test_best_speed_share.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "039c1a4317e2756bca3b57481bee4161f674b1fc",
          "at": 1793416280000,
          "title": "research/marine-hull: milestone 7d, fixed mission energy and the mono/cat ranking",
          "pr": 11995,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 7d, hull-specific fixed mission energy and the mono/cat ranking"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 5,
          "lines_added": 134,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKnnV9y7sZegfaCJQPs.json",
            "research/marine-hull/experiments/results_h5_overhead.txt",
            "research/marine-hull/experiments/run_h5_overhead.py",
            "research/marine-hull/tests/test_h5_overhead.py"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "efe6582b739cccda638096567195b7439b7660d4",
          "at": 1793419886000,
          "title": "research/marine-hull: milestone 7e, H5 glider vs AUV fixed-energy flip",
          "pr": 12004,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-hull: milestone 7e, H5 for glider against AUV with a fixed mission energy gap",
            "post: fix description length and tag"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-hull"
          },
          "files": 6,
          "lines_added": 158,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-glider-or-auv-which-flips-first.md",
            "prompts/runs/2026-10-31-session_01E5sJKjDPkmrPvR4XUVqaT8.json",
            "research/marine-hull/experiments/results_h5_glider.txt",
            "research/marine-hull/experiments/run_h5_glider.py",
            "research/marine-hull/tests/test_h5_glider.py"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "civ-levers",
      "merges": [
        {
          "sha": "a1574f93a2001877124ba480ea5fc02b37ebfa7b",
          "at": 1793430570000,
          "title": "research/civ-levers: pooled sanctioning vs peer punishment (milestone 5)",
          "pr": 12036,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/civ-levers: pooled sanctioning against peer punishment at n up to 40",
            "posts: shorten description",
            "posts: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "civ-levers"
          },
          "files": 8,
          "lines_added": 132,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-pooled-fines-vs-peer-punishment-in-a-simulated-commons.md",
            "prompts/runs/2026-10-31-session_01AcxTtLYxgLyoDQDM4yq3F8.json",
            "research/civ-levers/experiments/commons/pooled.py",
            "research/civ-levers/experiments/commons/pooled_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3a1ddc7cca77f04868a8992939ebc18cd0f2e493",
          "at": 1793460090000,
          "title": "research/civ-levers: lagged elite recruitment and stress (history milestone, second run)",
          "pr": 12116,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/civ-levers: lagged elite recruitment and stress in the structural-demographic model (period in band, amplitude not)"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "civ-levers"
          },
          "files": 7,
          "lines_added": 249,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKnpSypgP37n2gKae7Y.json",
            "research/civ-levers/experiments/history/lag_results.txt",
            "research/civ-levers/experiments/history/run_lag.py"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "verified-dse",
      "merges": [
        {
          "sha": "e53a6304dc210c83f60656d9e839db7f9fe2f1a2",
          "at": 1793424122000,
          "title": "research/verified-dse: milestone 45, rank displacement vs pool size",
          "pr": 12018,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "verified-dse: milestone 45, rank displacement of the optimum vs pool size; post",
            "post: shorten front matter",
            "post: shorten description",
            "post: shorten description"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verified-dse"
          },
          "files": 5,
          "lines_added": 140,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-bigger-design-pools-make-zero-regret-search-harder.md",
            "prompts/runs/2026-10-31-session_01E5sJKkUJDpKTBTUp9ftZPd.json",
            "research/verified-dse/experiments/theory/optimum_rank_n.py",
            "research/verified-dse/experiments/theory/optimum_rank_n_results.txt"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "387f0834e451dae3b13c97d9649e11afb31767c9",
          "at": 1793477341000,
          "title": "research/verified-dse: milestone 46, rank-displacement result into the paper plus a zero-regret test",
          "pr": 12162,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/verified-dse: milestone 46, rank-displacement result into the paper plus a zero-regret test"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verified-dse"
          },
          "files": 4,
          "lines_added": 71,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtLvmMaqcwWiDGy25tL.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "energy-cell-dfn",
      "merges": [
        {
          "sha": "637ccb421ca1c996e929c01a132c7dc1f8465eea",
          "at": 1793427831000,
          "title": "research/energy-cell-dfn: why SPMe scored good cells zero",
          "pr": 12030,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/energy-cell-dfn: diagnose why SPMe scores good cells zero (rate effect, thick electrodes)",
            "post: add tags and description",
            "post: add tags and description; run record"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "energy-cell-dfn"
          },
          "files": 9,
          "lines_added": 322,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-why-a-fast-battery-model-scored-good-cells-zero.md",
            "prompts/runs/2026-10-31-session_01E5sJKj5JL6bLFH4K5XbsHP.json",
            "research/energy-cell-dfn/experiments/diagnose.py",
            "research/energy-cell-dfn/experiments/diagnose.txt",
            "research/energy-cell-dfn/experiments/diagnose2.py",
            "research/energy-cell-dfn/experiments/diagnose2.txt",
            "research/energy-cell-dfn/experiments/diagnose3.py",
            "research/energy-cell-dfn/experiments/diagnose3.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "llm-coding-inference",
      "merges": [
        {
          "sha": "7b6cae41d4f32da67a70a9ea3365ff66ed7da60a",
          "at": 1793466718000,
          "title": "research/llm-coding-inference: milestone 7e, 2,000-draw coverage check into paper and README",
          "pr": 12132,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/llm-coding-inference: milestone 7e, 2,000-draw coverage check into paper and README"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "llm-coding-inference"
          },
          "files": 5,
          "lines_added": 84,
          "lines_removed": 2,
          "added_files": [
            "docs/posts/2026-10-31-a-92-percent-that-was-noise.md",
            "prompts/runs/2026-10-31-session_01E5sJKkQtLX9Y2UutGPQtjs.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "lowcomm-training",
      "merges": [
        {
          "sha": "2cd2a2c9a37edb46e1112a87daa593b13769d936",
          "at": 1793460092000,
          "title": "research/lowcomm-training: 6n compression excess not linear in omega",
          "pr": 12114,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/lowcomm-training: 6n keep-1/4 at H=64 job (in progress)",
            "research/lowcomm-training: 6n compression excess is not linear in omega (keep 1/4 free at H=64)",
            "posts: shorten seo_title"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "lowcomm-training"
          },
          "files": 7,
          "lines_added": 93,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-compression-cost-is-not-linear.md",
            "prompts/runs/2026-10-31-session_01E5sJKmmtAW9mKw8iY6RjMj.json",
            "research/lowcomm-training/experiments/gpt_scale/run_keep64.out",
            "research/lowcomm-training/experiments/gpt_scale/scale_results_6n.txt"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "marine-colregs",
      "merges": [
        {
          "sha": "6673d22cf522ab8d258460128de8da2109fd6f6e",
          "at": 1793456688000,
          "title": "research/marine-colregs: COLREGs-aware collision avoidance, three planners on 115 encounters",
          "pr": 12105,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/marine-colregs: kinematic COLREGs encounter library and three planners (work in progress)",
            "research/marine-colregs: README, results, homepage entry and post",
            "post: fit length limits"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "marine-colregs"
          },
          "files": 12,
          "lines_added": 450,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-colregs-planners-compared.md",
            "prompts/runs/2026-10-31-session_01AcxTtJMfE6y9NArCwjYUFF.json",
            "research/marine-colregs/LOG.md",
            "research/marine-colregs/README.md",
            "research/marine-colregs/experiments/results.txt",
            "research/marine-colregs/experiments/run.py",
            "research/marine-colregs/project.json",
            "research/marine-colregs/pyproject.toml",
            "research/marine-colregs/src/marine_colregs/__init__.py",
            "research/marine-colregs/src/marine_colregs/core.py",
            "research/marine-colregs/tests/test_colregs.py"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "verifiable-training-mechanisms",
      "merges": [
        {
          "sha": "397351d022c8fbcb0100d980955c2861907c3db6",
          "at": 1793446992000,
          "title": "research/verifiable-training-mechanisms: milestone 53, progress check vs stall and reversed-step workers",
          "pr": 12079,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "research",
          "bullets": [
            "research/verifiable-training-mechanisms: milestone 53 plan and progress-check experiment script (not yet run)",
            "research/verifiable-training-mechanisms: milestone 53 smoke run output (n=4, not a result)",
            "research/verifiable-training-mechanisms: milestone 53, progress check catches the reversed step, not the stall",
            "docs: post on the progress check (milestone 53)"
          ],
          "detail": null,
          "area": {
            "kind": "research",
            "name": "verifiable-training-mechanisms"
          },
          "files": 8,
          "lines_added": 313,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-progress-check-stall-vs-ascent.md",
            "prompts/runs/2026-10-31-session_01E5sJKijjbeodvqAPAG9Axj.json",
            "research/verifiable-training-mechanisms/experiments/progress_check/results.json",
            "research/verifiable-training-mechanisms/experiments/progress_check/results.txt",
            "research/verifiable-training-mechanisms/experiments/progress_check/run.out",
            "research/verifiable-training-mechanisms/experiments/progress_check/run.py",
            "research/verifiable-training-mechanisms/experiments/progress_check/smoke_n4.out"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    }
  ],
  "writing": [
    {
      "sha": "63b1224467791cafe92afd52236f7c5e152857d6",
      "at": 1793409586000,
      "title": "polish: seo_title for 23 more long post headlines",
      "pr": 11971,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title for 23 more long post headlines"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 25,
      "lines_added": 82,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-31-seo-titles-batch-4.md",
        "prompts/runs/2026-10-31-session_01E5sJKnx1eintr3w1FVe5bV.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "89f4a62d8d9d8a05d1545b7448b4d60fcb14ab68",
      "at": 1793415146000,
      "title": "research: match the site's colour scheme on the research pages",
      "pr": 11987,
      "agent": "Claude",
      "models": [],
      "track": null,
      "bullets": [],
      "detail": "Swap the warm cream/indigo palette for the site's cool grey, navy and blue tokens, and give the research hero the dark navy field used by the homepage and every .pf-hero section.",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 40,
      "lines_removed": 15,
      "added_files": [
        "docs/posts/2026-10-31-research-page-joins-the-site-palette.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "d85d2314b4adb895c955937a57e613a3096ee8e5",
      "at": 1793416129000,
      "title": "posts: shorten picture-frame post description (main_health red)",
      "pr": 11992,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "posts: shorten picture-frame post description to 160 characters (main_health red)"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 45,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtLNVdxvYVE8L5w4ykR.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "2274629fc632145bd8cdfa9bf43ec31c8eb29916",
      "at": 1793416746000,
      "title": "polish: seo_title for 22 more long post headlines (batch 5)",
      "pr": 11997,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title for 22 more long post headlines (batch 5)",
        "polish: run record"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 24,
      "lines_added": 156,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-31-seo-titles-batch-5.md",
        "prompts/runs/2026-10-31-session_01E5sJKkBRTniVUETeUafSZp.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "490ac17e94db457cf14e6d261cf7b7f65582d8c4",
      "at": 1793419199000,
      "title": "docs: shorten cantilever post front matter (push hook rejected it)",
      "pr": 12001,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "ventures",
      "bullets": [
        "wall-framing-takeoff: page field for the floor cantilever",
        "docs: shorten cantilever post front matter",
        "prompts: run record for the cantilever page field"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 42,
      "lines_removed": 2,
      "added_files": [
        "prompts/runs/2026-10-31-session_01EhTJVM5jsps2VH8HLXQ2Zn.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "235f572c163231170f7d045af943c16ba51c2dda",
      "at": 1793423329000,
      "title": "polish: seo_title batch 6 (22 posts) and fix over-budget wall heat loss post",
      "pr": 12014,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title batch 6 (22 posts) and fix over-budget wall heat loss post metadata",
        "polish: run record"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 24,
      "lines_added": 77,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-31-seo-titles-batch-6.md",
        "prompts/runs/2026-10-31-session_01AcxTtLHzWmwtyHTZKaevbh.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "b6b699e1ec1673cba6a40e7110392b3c4bda6dea",
      "at": 1793427671000,
      "title": "redteam: platform/audio/narrate.py 2026-10-31",
      "pr": 12029,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "redteam",
      "bullets": [
        "redteam: platform/audio/narrate.py 2026-10-31, catch rate 37.5% -> 100%",
        "fix post tag spelling"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 245,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-31-redteam-narrate-catch-rate.md",
        "prompts/runs/2026-10-31-session_01E5sJKjeAX15UY5Lgcw4rZy.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "838c1a55000d16afdc3346f7db400111a6ded733",
      "at": 1793430516000,
      "title": "polish: seo_title batch 7 (22 posts) and dormer title fix",
      "pr": 12034,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title batch 7, 22 posts, fix dormer title budget"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 26,
      "lines_added": 92,
      "lines_removed": 1,
      "added_files": [
        "docs/posts/2026-10-31-shorter-search-titles-for-22-more-posts.md",
        "docs/reports/polish-2026-10-31-seo-titles-batch-7.md",
        "prompts/runs/2026-10-31-session_01AcxTtKCN9xnZTDWa3vMDT3.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "b1b4e335a3eb91b3fdc41f98b3ef7cda4b27e3b4",
      "at": 1793435166000,
      "title": "posts: fix two front-matter errors that break the Pages build",
      "pr": 12050,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "perf",
      "bullets": [
        "posts: fix two front-matter errors that broke the Pages build"
      ],
      "detail": "Stairwell header post lacked description; stair stringer post seo_title was 74 chars (limit 70).",
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 49,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01E5sJKjCpXNST5ZxzwjcZ7B.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "5fd66630607c6014503a4729dcc65359b8dbefd7",
      "at": 1793437363000,
      "title": "flagships: bring wall-framing-takeoff next: under the cap; post on the stringer check",
      "pr": 12051,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "research",
      "bullets": [
        "wall-framing-takeoff: page field for the stair stringer strength check, post",
        "flagships: trim wall-framing-takeoff next: under the 2000-character cap"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 16,
      "lines_removed": 1,
      "added_files": [
        "docs/posts/2026-10-31-stair-stringer-strength-check-on-the-page.md"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "3349774299ec4d2c32ad49a26c13481bbb8c13b7",
      "at": 1793437739000,
      "title": "redteam: writing.mjs 2026-10-31",
      "pr": 12055,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "redteam",
      "bullets": [
        "docs: shorten two post seo_title/description fields past the site build limits",
        "redteam: writing.mjs 2026-10-31, relatedPosts guard and run record"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 4,
      "lines_added": 182,
      "lines_removed": 4,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtGwQSPKFRue1R5YXph.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "a9262c26ae8ac204e739b265db4d8b3402941543",
      "at": 1793437922000,
      "title": "polish: seo_title batch 8, 22 posts",
      "pr": 12058,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title batch 8, 22 posts under the 70-character budget"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 24,
      "lines_added": 84,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-31-seo-titles-batch-8.md",
        "prompts/runs/2026-10-31-session_01E5sJKk4D8CsQKHvFUvvwr8.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "fbb9de3e4bab6c810c604dd0835e287ec0b4fdb6",
      "at": 1793448573000,
      "title": "process: fix red main (siding post description over 160 chars)",
      "pr": 12083,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "posts: trim siding-trim post description to 160 chars (main red)"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 45,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtJipCyg5t8Wd2rjzDM.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "1df38f1aab2e5d68b494929beb210da8251a5c7a",
      "at": 1793452191000,
      "title": "polish: seo_title batch 9 (22 posts) + shed-dormer post description",
      "pr": 12090,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title batch 9, 22 posts; description for shed-dormer post",
        "shed-dormer post: tags"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 25,
      "lines_added": 90,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-31-seo-titles-batch-9.md",
        "prompts/runs/2026-10-31-session_01AcxTtLc8fubQoWogQ4anAr.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "6e775ff3bf14c316a5660083fd73a7fb6b7f6152",
      "at": 1793459373000,
      "title": "process: shorten over-long seo_title that turned main red (check_post_frontmatter)",
      "pr": 12109,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "posts: shorten seo_title that broke check_post_frontmatter on main"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 47,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtJsnT7emRQz8cdsgTz.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "bcc9525f69d9a3bfd2f19eb9f10277f190cd282c",
      "at": 1793470399000,
      "title": "polish: seo_title batch 10, 25 titles for 2026-10-26 posts",
      "pr": 12142,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title batch 10, 25 titles for 2026-10-26 posts"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 27,
      "lines_added": 159,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-31-seo-titles-batch-10.md",
        "prompts/runs/2026-10-31-session_01AcxTtGLmM2MWTfRXUR6A5K.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "e12d267c9fa10e26229683bf659dccee391e2a89",
      "at": 1793470733000,
      "title": "polish: seo_title batch 11, 20 titles for 2026-10-25/26 posts",
      "pr": 12144,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title batch 11, 20 titles for 2026-10-25/26 posts"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 22,
      "lines_added": 68,
      "lines_removed": 0,
      "added_files": [
        "docs/reports/polish-2026-10-31-seo-titles-batch-11.md",
        "prompts/runs/2026-10-31-session_01E5sJKjK9HCLxLZHnwwCvTj.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "ed659848502804a7c846c86027c16f66615458d3",
      "at": 1793477418000,
      "title": "process: fix red main — missing frontmatter on schedule-starter-template post",
      "pr": 12164,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "process: add missing frontmatter to the schedule-starter-template post (main_health red)"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 50,
      "lines_removed": 0,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtLipW4XJ7WDvjpvhof.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "3e8dd4e40482b78d8069d774c6c0a18ac38ae699",
      "at": 1793484466000,
      "title": "polish: seo_title batch 12, 20 titles for 2026-10-25 posts",
      "pr": 12182,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "polish",
      "bullets": [
        "polish: seo_title batch 12, 20 titles for 2026-10-25 posts; fix over-budget title"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 23,
      "lines_added": 87,
      "lines_removed": 1,
      "added_files": [
        "docs/reports/polish-2026-10-31-seo-titles-batch-12.md",
        "prompts/runs/2026-10-31-session_01AcxTtKntJu3NLHUamap3qq.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "6424a703e42677931002780a00dd9970e2539388",
      "at": 1793485216000,
      "title": "wall-framing-takeoff: deadline field on the schedule page",
      "pr": 12187,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "ventures",
      "bullets": [
        "wall-framing-takeoff: deadline field on the schedule page, clicked in Chromium"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 66,
      "lines_removed": 0,
      "added_files": [
        "docs/posts/2026-10-31-schedule-deadline-on-the-page.md",
        "prompts/runs/2026-10-31-session_01E5sJKis9bPPwKhU79NgTwj.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "a0b8642be678249e32c9f8822241a5bb7e5c2c20",
      "at": 1793488890000,
      "title": "process: ci_profile.py reads run jobs in parallel with progress and a timeout",
      "pr": 12195,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "ci_profile: fetch run jobs in parallel, show progress, set request timeout"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 3,
      "lines_added": 73,
      "lines_removed": 4,
      "added_files": [
        "docs/posts/2026-10-31-ci-profile-faster.md",
        "prompts/runs/2026-10-31-session_01E5sJKm7v9WjsFsiWRsZSBa.json"
      ],
      "revert": false,
      "fix_forward": false
    }
  ],
  "platform": [
    {
      "name": "pages",
      "merges": [
        {
          "sha": "c143129655c67dd7d40eb21b8d68a3646c23ca78",
          "at": 1793404918000,
          "title": "redteam: faq-duplicate and share-location 2026-10-30",
          "pr": 11944,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: faq-duplicate and share-location guard tests 2026-10-30",
            "redteam: record PR number"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 3,
          "lines_added": 310,
          "lines_removed": 1,
          "added_files": [
            "prompts/runs/2026-10-30-session_01EhTJVQ2HbPgkZ2PKWXERQL.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "396760b376d5a92fd4837c65e3b5cacc48f4f469",
          "at": 1793407350000,
          "title": "Forward workers.dev to marisstella.app; README at the domain; LinkedIn copy; post",
          "pr": 11945,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": "ventures",
          "bullets": [
            "Point README and citation at marisstella.app; LinkedIn page copy for Maris Stella Labs; post",
            "Forward the workers.dev address to marisstella.app; post no longer names the old host",
            "Drop build output the local workflow run left behind",
            "audiences test: README audience links count on any origin, not only the old Pages path"
          ],
          "detail": "Static files on workers.dev get a _headers rule (Refresh to the same path on the domain, noindex), written by split.mjs; router paths answer with a 301.",
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 12,
          "lines_added": 278,
          "lines_removed": 21,
          "added_files": [
            "docs/posts/2026-10-31-the-site-moved-to-marisstella-app.md",
            "portfolio/distribution/linkedin-company-page.md",
            "prompts/runs/2026-10-31-session_01XpHqyfsyhrPtD3HK4R2wT5.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "065c5e32fcb17e5eebad61a85ab209e25f49b8ee",
          "at": 1793407643000,
          "title": "Site palette: trade neon green/violet for navy and steel blue",
          "pr": 11959,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "The site-owned pages (hub, category pages, About, shared header/footer, hero bands, logo mark, share cards) used a teal + indigo light palette and a near-black hero with mint, indigo and violet glows and a rainbow gradient headline.",
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 13,
          "lines_added": 114,
          "lines_removed": 87,
          "added_files": [
            "docs/posts/2026-10-31-the-site-trades-neon-for-navy.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "9950d02f802a6519a1376de0f59ff07156f08460",
          "at": 1793407754000,
          "title": "Rebrand as Maris Stella Labs; everything-as-code principle; email routing as code",
          "pr": 11955,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "Rebrand the site as Maris Stella Labs",
            "Everything as code: the principle, and email routing for marisstella.app",
            "publish-surface: cloudflare-email.yml publishes nothing"
          ],
          "detail": "One name instead of four: page headers, titles, share cards, og:site_name, breadcrumbs, llms.txt, podcast and research homepage now say Maris Stella Labs.",
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 32,
          "lines_added": 413,
          "lines_removed": 41,
          "added_files": [
            ".github/workflows/cloudflare-email.yml",
            "docs/posts/2026-10-31-the-project-is-now-maris-stella-labs.md",
            "platform/pages/cloudflare/email-routing.json",
            "platform/pages/cloudflare/email-routing.mjs",
            "platform/pages/cloudflare/email-routing.test.mjs",
            "prompts/runs/2026-10-31-session_01XpHqycov3mx2Frvp3d2msy.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "91c1071a616283d160b1789acf856c3493d44e99",
          "at": 1793408761000,
          "title": "Give the site the Maris Stella Labs mark: compass-star logo, favicon, app icons, header and link cards",
          "pr": 11958,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "The navy-and-gold compass star from the company's LinkedIn banner replaces the teal bars mark.",
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 7,
          "lines_added": 161,
          "lines_removed": 104,
          "added_files": [
            "docs/posts/2026-10-31-a-compass-star-for-maris-stella-labs.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "05911c77b0c3282fe94bcdad76ef5d954b21c97a",
          "at": 1793409971000,
          "title": "pages: linkSiblings in one pass over hrefs",
          "pr": 11973,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "perf",
          "bullets": [
            "pages: linkSiblings in one pass over hrefs",
            "perf/0 run record"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 3,
          "lines_added": 85,
          "lines_removed": 3,
          "added_files": [
            "docs/history/pages-build-perf-2026-10-31-link-siblings.md",
            "prompts/runs/2026-10-31-session_01E5sJKiww4zTBf4Aj7Jo96u.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "e0bf6dc712733351f56d3c4dba2c174702fb4867",
          "at": 1793420376000,
          "title": "redteam: platform/pages/jobs.mjs 2026-10-31",
          "pr": 12008,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: guard keep-ranking charged threshold in jobs.mjs",
            "redteam: run record"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 2,
          "lines_added": 183,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKihuDUo9rH3vVJRdPf.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "5fb09cf0abe91af17132686d969b8c8a13cdf5e8",
          "at": 1793422732000,
          "title": "redteam: platform/pages/invalid.mjs 2026-10-31",
          "pr": 12010,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: platform/pages/invalid.mjs 2026-10-31",
            "redteam: record PR number"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 2,
          "lines_added": 318,
          "lines_removed": 4,
          "added_files": [
            "prompts/runs/2026-10-31-session_01EhTJVKjQUQe9FJdpEkFu1T.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "ab894c066a451e19fe3958456243af5fa9e1ba28",
          "at": 1793445220000,
          "title": "redteam: platform/pages/faq-coverage 2026-10-31",
          "pr": 12077,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: guard faq-coverage CLI (catch rate 1/8 -> 7/8)",
            "redteam: run record"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 2,
          "lines_added": 461,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKnjwNVBWRV8sxiZ3Rk.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "75f0abf2dfe27837bb048b8cad8d69d8fed483f9",
          "at": 1793478658000,
          "title": "pages: rasterise the share-card mark once per size",
          "pr": 12168,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "perf",
          "bullets": [
            "pages: rasterise the share-card mark once per size (43 s to 0.3 s CPU per 2759 cards)"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 3,
          "lines_added": 127,
          "lines_removed": 0,
          "added_files": [
            "docs/history/pages-build-perf-2026-10-31-mark-coverage.md",
            "prompts/runs/2026-10-31-session_01E5sJKkHaZCgbWHi4WERR7i.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "7c524499172efa2e544f982192a86ddbabe33e62",
          "at": 1793480959000,
          "title": "redteam: platform/pages/share.mjs 2026-10-31",
          "pr": 12172,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: platform/pages/share.mjs 2026-10-31",
            "redteam: record PR number"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 2,
          "lines_added": 182,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtLWFD5XKeVYjQ2KJCu.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "1f5fffa6d00117849755ae87e4934d456931a0a6",
          "at": 1793481394000,
          "title": "pages: quantize card palette with a counting sort (byte-identical)",
          "pr": 12175,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "perf",
          "bullets": [
            "pages: quantize card palette with a counting sort (16 -> 11 ms per card, byte-identical)",
            "perf/0: run record"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 3,
          "lines_added": 115,
          "lines_removed": 17,
          "added_files": [
            "docs/history/pages-build-perf-2026-10-31-quantize.md",
            "prompts/runs/2026-10-31-session_01AcxTtJbMUxVpTqC5XhR4y8.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "507f843d27f23d1d80b1b4cf6e95afc49fc4cf26",
          "at": 1793485433000,
          "title": "pages: run-length shortcut in quantize (perf)",
          "pr": 12188,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "perf",
          "bullets": [
            "pages: run-length shortcut in quantize histogram and index passes"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "pages"
          },
          "files": 3,
          "lines_added": 93,
          "lines_removed": 2,
          "added_files": [
            "docs/history/pages-build-perf-2026-10-31-run-length.md",
            "prompts/runs/2026-10-31-session_01E5sJKjhkL4JRwYn8hbLTU4.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "distribution",
      "merges": [
        {
          "sha": "1ab235373465a7775c9d47ed73e21b39d9b4a0d0",
          "at": 1793407059000,
          "title": "distribution hub: platform-native content quoted from each post",
          "pr": 11956,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "distribution hub: platform-native content quoted from each post"
          ],
          "detail": "The hub built every post draft from title + description alone, so every platform got the same one-line announcement.",
          "area": {
            "kind": "platform",
            "name": "distribution"
          },
          "files": 10,
          "lines_added": 843,
          "lines_removed": 12,
          "added_files": [
            "docs/posts/2026-10-31-threads-from-the-posts-own-words.md",
            "docs/reports/2026-10-31-content-kit-sample.md",
            "platform/distribution/hub/content.mjs",
            "platform/distribution/hub/content.test.mjs",
            "prompts/runs/2026-10-31-session_01XpHqyesFn1hk9xCUBqdj6J.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "731cfa79a7ca782a976e410b3292fbcef2549d80",
          "at": 1793409027000,
          "title": "Rebrand, round two: footer, citation, package READMEs, brand file",
          "pr": 11965,
          "agent": "Claude Opus 5.5",
          "models": [
            "Claude Opus 5.5"
          ],
          "track": null,
          "bullets": [
            "Rebrand, round two: footer, citation, package READMEs, brand file",
            "Shorten the Nigeria post's seo_title to 66 characters",
            "Fix two more breakages from main: flagship next: over its cap, a run record with no pr"
          ],
          "detail": "Every page footer says 'A Maris Stella Labs project, MIT licensed.'; CITATION.cff names Maris Stella Labs; npm, PyPI and MCP package READMEs say 'from Maris Stella Labs' (patch bumps in versions.json); contributor docs link marisstella.app;…",
          "area": {
            "kind": "platform",
            "name": "distribution"
          },
          "files": 14,
          "lines_added": 84,
          "lines_removed": 37,
          "added_files": [
            "portfolio/brand/README.md"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "b00cde2a2a69fea91f0170936e86f42aa9ea9bd1",
          "at": 1793427650000,
          "title": "redteam: homebrew.mjs 2026-10-31",
          "pr": 12028,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: homebrew.mjs 2026-10-31",
            "redteam record: name PR"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "distribution"
          },
          "files": 2,
          "lines_added": 198,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKiVBzCAeTExVoyo3Wg.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "ci",
      "merges": [
        {
          "sha": "d01e28ac6ade2a67c0de4ea369393e4b1a813644",
          "at": 1793416732000,
          "title": "polish: llms.txt lister skips NOT-A-VENTURE tools",
          "pr": 11996,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "polish",
          "bullets": [
            "polish: llms.txt lister skips NOT-A-VENTURE tools"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 5,
          "lines_added": 73,
          "lines_removed": 1,
          "added_files": [
            "docs/posts/2026-10-31-llms-txt-backlog-is-empty.md",
            "docs/reports/polish-2026-10-31-llms-lister-skips-not-a-venture.md",
            "prompts/runs/2026-10-31-session_01E5sJKo5VMmZDmChVTDNstX.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "94e6f90e58b11f45efc23fc0176657f7690287ff",
          "at": 1793438363000,
          "title": "ci: check_json_valid.py sweep of tracked JSON (explore)",
          "pr": 12059,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "explore",
          "bullets": [
            "ci: check_json_valid.py sweep of tracked JSON (all clean; one JSONL file noted)"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "ci"
          },
          "files": 4,
          "lines_added": 152,
          "lines_removed": 0,
          "added_files": [
            "docs/posts/2026-10-31-every-tracked-json-file-parses.md",
            "platform/ci/check_json_valid.py",
            "platform/ci/test_check_json_valid.py",
            "prompts/runs/2026-10-31-session_01E5sJKivjdxPfU4yNBbNRu6.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "edge",
      "merges": [
        {
          "sha": "4ca547d40c7b5dec608d320373af57b7cf172247",
          "at": 1793405382000,
          "title": "redteam: platform/edge/worker.mjs 2026-10-31",
          "pr": 11949,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: platform/edge/worker.mjs 2026-10-31",
            "redteam: record PR"
          ],
          "detail": "Guard the feedback body-size boundary and the /counts since filter.",
          "area": {
            "kind": "platform",
            "name": "edge"
          },
          "files": 2,
          "lines_added": 257,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01AcxTtKZRfvbWkM2w7YBqRC.json"
          ],
          "revert": false,
          "fix_forward": false
        },
        {
          "sha": "3599f5d6f2c5b3d29929690f576d145c0d6ee45c",
          "at": 1793442016000,
          "title": "redteam: platform/edge/worker.mjs 2026-10-31",
          "pr": 12067,
          "agent": "Claude Sonnet 5.5",
          "models": [
            "Claude Sonnet 5.5"
          ],
          "track": "redteam",
          "bullets": [
            "redteam: guard edge worker limiter 429 and preflight 204",
            "redteam: run record"
          ],
          "detail": null,
          "area": {
            "kind": "platform",
            "name": "edge"
          },
          "files": 2,
          "lines_added": 259,
          "lines_removed": 0,
          "added_files": [
            "prompts/runs/2026-10-31-session_01E5sJKmMTk6R6Scu7DmqyNa.json"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    },
    {
      "name": "counter",
      "merges": [
        {
          "sha": "1b1bfded0f7967cdb23283b6ee29914198d19218",
          "at": 1793406093000,
          "title": "usage: pull Cloudflare edge analytics into the repo daily",
          "pr": 11951,
          "agent": "Claude",
          "models": [],
          "track": null,
          "bullets": [],
          "detail": "platform/counter/pull-cloudflare.mjs reads Cloudflare's GraphQL Analytics (zone daily totals, eyeball requests by kind of client and top pages per kind, Worker invocations) into portfolio/usage/cloudflare-analytics.json.",
          "area": {
            "kind": "platform",
            "name": "counter"
          },
          "files": 7,
          "lines_added": 448,
          "lines_removed": 7,
          "added_files": [
            "docs/posts/2026-10-31-our-first-day-on-cloudflare-was-mostly-bots.md",
            "docs/reports/cloudflare-analytics-pull.md",
            "platform/counter/pull-cloudflare.mjs",
            "platform/counter/pull-cloudflare.test.mjs"
          ],
          "revert": false,
          "fix_forward": false
        }
      ]
    }
  ],
  "ci": [
    {
      "sha": "0dee17a9a46ead8d52733d42012797831598d443",
      "at": 1793406032000,
      "title": "Guard the control plane against misbehaving agents",
      "pr": 11946,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "Guard the control plane against misbehaving agents",
        "Fix the run record from PR #11943 that turned promptctl validate red on main",
        "Keep the corrected record in its original two-space layout",
        "Pin control-plane-guard.yml in the publish-surface snapshot (publishes nothing)"
      ],
      "detail": "CODEOWNERS now covers the files that steer every agent: instructions, session-start hooks and MCP config, CI, the reviewer config and the ruleset.",
      "area": {
        "kind": "ci",
        "name": "CI and automation"
      },
      "files": 25,
      "lines_added": 735,
      "lines_removed": 19,
      "added_files": [
        ".github/CODEOWNERS",
        ".github/workflows/control-plane-guard.yml",
        "docs/posts/2026-10-31-the-files-that-steer-the-agents.md",
        "docs/security/agent-hardening.md",
        "platform/ci/control_plane_guard.py",
        "platform/ci/test_control_plane_guard.py",
        "prompts/runs/2026-10-31-session_01XpHqygBvxa4SWwYseE56ZX.json"
      ],
      "revert": false,
      "fix_forward": false
    }
  ],
  "process": [
    {
      "sha": "262f70e0723476096e83687d968fe347f760b281",
      "at": 1793405325000,
      "title": "prompts: fix run record that failed validate (pr null, deviations as string)",
      "pr": 11948,
      "agent": "Claude",
      "models": [],
      "track": "process",
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 1,
      "lines_added": 6,
      "lines_removed": 3,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "0796df83e8f9470fe8d1ae6fed43147f03081c6c",
      "at": 1793408160000,
      "title": "Record the owner's 2026-10-31 answers: payout rail, egress, billing model; queue 13 → 7",
      "pr": 11957,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "Post: fit description and seo_title to the frontmatter limits",
        "Post: shorten seo_title"
      ],
      "detail": "The owner answered eight decision-queue rows in two messages.",
      "area": {
        "kind": "process",
        "name": "portfolio"
      },
      "files": 7,
      "lines_added": 2020,
      "lines_removed": 569,
      "added_files": [
        "docs/posts/2026-10-31-eight-answers-in-two-messages.md",
        "docs/reports/2026-10-31-payout-rail-next-steps.md",
        "portfolio/research/egress-reachability/results-2026-10-31.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "f68c322f08acea88c5b31f618dd98e3e5ed5ef49",
      "at": 1793409076000,
      "title": "prompts: review 2026-10-31",
      "pr": 11969,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "review",
      "bullets": [
        "prompts: review 2026-10-31 (trim land-your-work.md, log E119)",
        "prompts: run record for review 2026-10-31"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 5,
      "lines_added": 2373,
      "lines_removed": 92,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtJgeyFP1Zz91mEXHKc.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "556ffdb1426105bf59f38aa891f5ab54ee8dcdc1",
      "at": 1793409607000,
      "title": "redteam: platform/pages/share.mjs 2026-10-31",
      "pr": 11972,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "redteam",
      "bullets": [
        "redteam: share.mjs 2026-10-31 (8 mutants, 7 caught)",
        "redteam: record PR url"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 1,
      "lines_added": 172,
      "lines_removed": 0,
      "added_files": [
        "prompts/runs/2026-10-31-session_01E5sJKm792RZ55gcz9P3ZQb.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "b47e766e3cb7385b782b133e9bb2ede4e6cb1799",
      "at": 1793414201000,
      "title": "Pivot research draws and flagships to industrial, energy and construction",
      "pr": 11985,
      "agent": "Claude Opus 5.5",
      "models": [
        "Claude Opus 5.5"
      ],
      "track": null,
      "bullets": [
        "Pivot research draws and flagships to industrial, energy and construction",
        "Post frontmatter: shorten seo_title and description to the limits"
      ],
      "detail": "Owner direction 2026-10-31: deep tech industrial, energy, real estate development and construction, and a construction data warehouse become the overarching directions.",
      "area": {
        "kind": "process",
        "name": "research"
      },
      "files": 10,
      "lines_added": 207,
      "lines_removed": 43,
      "added_files": [
        "docs/posts/2026-10-31-industrial-energy-construction.md",
        "docs/reports/2026-10-31-industrial-energy-construction-pivot.md",
        "prompts/runs/2026-10-31-session_01XpHqyeJyKW3N7tenAHEsG8.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "b60bc7ae9057e4c99ccc22c3f34eec5a21cc865c",
      "at": 1793416189000,
      "title": "process: fix red post-frontmatter check (picture-frame post description)",
      "pr": 11993,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "process: shorten picture-frame post description to the 160-char limit",
        "process: record that main already had the fix"
      ],
      "detail": "main_health showed check_post_frontmatter and promptctl validate red on main.",
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 1,
      "lines_added": 46,
      "lines_removed": 0,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtHidWhLbykAnwDHVeF.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "b2304a615f4b85755f53eda5148c722bd32c1e57",
      "at": 1793422648000,
      "title": "Fix main health: record PR 11998 on a run record that left pr null",
      "pr": 12009,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "Fix main health: record PR 11998 on a run record that left pr null"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 40,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01EhTJVKtiZZfmMpPKwRTxAT.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "1668e018a11ca252cefd359c4e972430a4ec76a5",
      "at": 1793434047000,
      "title": "flagships.yaml: resolve leftover merge-conflict markers",
      "pr": 12044,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "ventures",
      "bullets": [
        "flagships.yaml: resolve leftover merge-conflict markers (keeps both landed items)"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "docs"
      },
      "files": 3,
      "lines_added": 64,
      "lines_removed": 5,
      "added_files": [
        "docs/reports/2026-10-31-flagships-conflict-markers.md",
        "prompts/runs/2026-10-31-session_01AcxTtL7vXzUHh11yecbC7v.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "f5ef792c36a1f4921df94c6188f744e610f7fbde",
      "at": 1793444962000,
      "title": "process: fix red main_health (null pr on creative run record)",
      "pr": 12075,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "runs: fill pr on the 2026-10-31 creative record (main_health red)",
        "runs: record for process run"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 45,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtJQMwjNXZq48YBtJDH.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "62b79d8f4f53885f4fd1640894f88e936a712aaf",
      "at": 1793470772000,
      "title": "process: repair two malformed run records that turn main_health red",
      "pr": 12145,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 3,
      "lines_added": 85,
      "lines_removed": 10,
      "added_files": [
        "prompts/runs/2026-10-31-session_01E5sJKjopCtSnNRUhf5zxXh.json"
      ],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "759e7a6ce7eb4887230b96cf288f7fd21fea0217",
      "at": 1793473110000,
      "title": "process: repair run record writeups value and name the fix in the validator error",
      "pr": 12150,
      "agent": "Claude",
      "models": [],
      "track": "process",
      "bullets": [],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 2,
      "lines_removed": 2,
      "added_files": [],
      "revert": false,
      "fix_forward": false
    },
    {
      "sha": "074455279ed68124ca7f6d69c4cc4f3a936d4b82",
      "at": 1793477972000,
      "title": "process: fix run record with null pr (promptctl validate red on main)",
      "pr": 12167,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "process: name PR 12161 in a run record that left pr null (main_health red)"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 50,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01E5sJKmBG5FPcomUqs3K2gN.json"
      ],
      "revert": false,
      "fix_forward": true
    }
  ],
  "new_ventures": [],
  "new_research": [
    "build-data",
    "marine-colregs"
  ],
  "new_posts": [
    "2026-10-31-adjustable-tail-sub-scale-cargo-uav",
    "2026-10-31-battery-energy-cannot-flip-a-hull-ranking",
    "2026-10-31-bootstrap-penalty-on-33-real-series",
    "2026-10-31-the-files-that-steer-the-agents",
    "2026-10-31-the-lake-under-the-stairs",
    "2026-10-31-our-first-day-on-cloudflare-was-mostly-bots",
    "2026-10-30-ai-bookkeeper-tenth-gap-probe",
    "2026-10-31-threads-from-the-posts-own-words",
    "2026-10-31-the-site-moved-to-marisstella-app",
    "2026-10-31-the-site-trades-neon-for-navy",
    "2026-10-31-the-project-is-now-maris-stella-labs",
    "2026-10-31-a-shed-wall-with-too-many-ways-to-join-its-plates",
    "2026-10-31-eight-answers-in-two-messages",
    "2026-10-31-nigeria-joins-the-e-invoicing-country-pages",
    "2026-10-31-ai-bookkeeper-eleventh-gap-probe",
    "2026-10-31-a-compass-star-for-maris-stella-labs",
    "2026-10-31-a-positive-screen-is-one-in-eleven",
    "2026-10-31-wind-chill-is-not-a-temperature",
    "2026-10-31-ai-bookkeeper-twelfth-gap-probe",
    "2026-10-31-two-more-pdf-checks-for-factur-x-invoices",
    "2026-10-31-ai-bookkeeper-thirteenth-gap-probe",
    "2026-10-31-llms-txt-for-the-electronics-calculators",
    "2026-10-31-ai-bookkeeper-fourteenth-gap-probe",
    "2026-10-31-aim-off-navigation-story",
    "2026-10-31-an-llms-txt-that-says-prototype",
    "2026-10-31-ireland-einvoice-dates-from-revenue",
    "2026-10-31-ai-bookkeeper-fifteenth-gap-probe",
    "2026-10-31-the-night-the-blossom-was-wet",
    "2026-10-31-industrial-energy-construction",
    "2026-10-31-research-page-joins-the-site-palette",
    "2026-10-31-picture-frame-deck-border-in-the-takeoff",
    "2026-10-31-what-a-r15-batt-is-worth-in-a-real-wall-layout",
    "2026-10-31-drone-versus-truck-energy-per-package",
    "2026-10-31-llms-txt-backlog-is-empty",
    "2026-10-31-floor-cantilevers-in-the-framing-takeoff",
    "2026-10-31-a-floor-cantilever-field-on-the-framing-page",
    "2026-10-31-a-delivery-drone-spends-77-percent-of-its-energy-not-cruising",
    "2026-10-31-glider-or-auv-which-flips-first",
    "2026-10-31-clicking-through-the-floor-cantilever-field",
    "2026-10-31-permit-feeds-what-they-hold",
    "2026-10-31-what-the-walls-of-a-house-lose-in-a-winter",
    "2026-10-31-wall-heat-loss-fields-on-the-framing-page",
    "2026-10-31-how-much-energy-a-delivery-drone-spends-climbing",
    "2026-10-31-the-saint-who-was-afraid-of-the-sea",
    "2026-10-31-a-number-field-that-refused-your-degree-days",
    "2026-10-31-bigger-design-pools-make-zero-regret-search-harder",
    "2026-10-31-fitting-a-long-noisy-flight-record-start-short",
    "2026-10-31-can-a-steep-roof-rafter-take-a-birdsmouth",
    "2026-10-31-the-starter-strip-under-lap-siding-is-now-counted",
    "2026-10-31-head-flashing-over-every-window-and-door-is-now-counted",
    "2026-10-31-can-you-drill-that-joist",
    "2026-10-31-the-ceiling-is-half-your-heat-loss-estimate",
    "2026-10-31-redteam-narrate-catch-rate",
    "2026-10-31-why-a-fast-battery-model-scored-good-cells-zero",
    "2026-10-31-counting-the-nails-in-a-joist-hanger",
    "2026-10-31-framing-a-gable-dormer-from-four-numbers",
    "2026-10-31-checking-the-header-around-a-stairwell",
    "2026-10-31-shorter-search-titles-for-22-more-posts",
    "2026-10-31-pooled-fines-vs-peer-punishment-in-a-simulated-commons",
    "2026-10-31-open-centre-excavator-valves-cost-time-and-energy",
    "2026-10-31-is-my-notched-stair-stringer-strong-enough",
    "2026-10-31-the-stairwell-trimmer-carries-the-header",
    "2026-10-31-checking-a-stairwell-header-from-the-browser",
    "2026-10-31-the-stair-hangs-from-the-header",
    "2026-10-31-checking-the-trimmer-bearing-in-a-stairwell",
    "2026-10-31-linking-a-stair-to-the-header-it-hangs-from",
    "2026-10-31-most-building-permits-are-issued-the-day-you-apply",
    "2026-10-31-typing-your-engineers-numbers-into-a-stair-calculator",
    "2026-10-31-stair-stringer-strength-check-on-the-page",
    "2026-10-31-counting-straps-at-a-stairwell",
    "2026-10-31-framing-the-hole-under-a-dormer",
    "2026-10-31-stair-load-onto-the-stairwell-header-from-the-page",
    "2026-10-31-every-tracked-json-file-parses",
    "2026-10-31-siding-starter-strip-and-flashing-on-the-page",
    "2026-10-31-shed-dormer-where-two-roof-planes-meet",
    "2026-10-31-does-a-deck-post-ever-fail-in-compression",
    "2026-10-31-winder-stairs-on-the-page",
    "2026-10-31-landing-posts-column-check",
    "2026-10-31-what-a-drone-battery-says-about-package-delivery",
    "2026-10-31-why-a-cold-church-organ-goes-out-of-tune-with-itself",
    "2026-10-31-landing-post-check-on-the-page",
    "2026-10-31-permit-wait-times-three-cities-baseline",
    "2026-10-31-dry-ice-in-a-closed-room-the-blackout-arithmetic",
    "2026-10-31-deck-post-check-on-the-page",
    "2026-10-31-winder-walkline-uniformity",
    "2026-10-31-the-ramp-that-fits-the-yard",
    "2026-10-31-the-well-that-took-the-bleach",
    "2026-10-31-progress-check-stall-vs-ascent",
    "2026-10-31-sheathing-sheet-marks-on-shop-drawings",
    "2026-10-31-ganged-windows-in-the-framing-takeoff",
    "2026-10-31-siding-trim-and-battens-clicked",
    "2026-10-31-gable-dormer-on-the-page",
    "2026-10-31-shed-dormer-roof-opening",
    "2026-10-31-air-leakage-in-the-heat-load",
    "2026-10-31-excavator-valve-sizing-from-the-manual",
    "2026-10-31-hezekiah-and-the-letter-spread-out",
    "2026-10-31-aerolog-coloured-noise",
    "2026-10-31-shed-dormer-on-the-page",
    "2026-10-31-gable-dormer-window-on-the-page",
    "2026-10-31-permit-durations-boosted-vs-baseline",
    "2026-10-31-simeon-and-anna-bedtime-episode",
    "2026-10-31-duplicate-meta-descriptions",
    "2026-10-31-colregs-planners-compared",
    "2026-10-31-schedule-durations-from-the-takeoff",
    "2026-10-31-deck-blocking-on-the-page",
    "2026-10-31-dormer-window-negative-sill",
    "2026-10-31-excavator-valve-rating-two-figures",
    "2026-10-31-walkout-stem-wall-quantities",
    "2026-10-31-compression-cost-is-not-linear",
    "2026-10-31-foundation-takeoff-bad-json",
    "2026-10-31-a-drywall-calculator-that-counts-the-cuts",
    "2026-10-31-takeoff-validators-wrong-shape",
    "2026-10-31-stair-guards-on-the-framing-page",
    "2026-10-31-the-foot-of-the-ladder",
    "2026-10-31-siding-calculator-course-by-course",
    "2026-10-31-landing-edge-guards-on-the-framing-page",
    "2026-10-31-schedule-weather-allowance",
    "2026-10-31-bartimaeus-bedtime-episode",
    "2026-10-31-weather-loss-rates-in-the-build-schedule",
    "2026-10-31-a-92-percent-that-was-noise",
    "2026-10-31-weather-allowance-on-the-schedule-page",
    "2026-10-31-monthly-weather-rates-on-the-schedule-page",
    "2026-10-31-a-concrete-calculator-that-orders-in-quarter-yards",
    "2026-10-31-schedule-not-before-dates",
    "2026-10-31-stepped-footing-on-the-page",
    "2026-10-31-slab-edge-line-was-missing",
    "2026-10-31-linking-the-seven-framing-pages",
    "2026-10-31-schedule-hold-dates",
    "2026-10-31-schedule-hold-dates-field",
    "2026-10-31-estimating-sensor-noise-correlation",
    "2026-10-31-schedule-starter-template",
    "2026-10-31-bid-leveling-page",
    "2026-10-31-schedule-days-from-the-takeoff-on-the-page",
    "2026-10-31-permit-interval-conformal-hits-a-floor",
    "2026-10-31-what-a-slipped-week-costs",
    "2026-10-31-the-gate-that-opened-and-the-gate-that-waited",
    "2026-10-31-cantilevered-floor-joist-check",
    "2026-10-31-gable-sheathing-nailers",
    "2026-10-31-walkout-footing-steps",
    "2026-10-31-cantilever-tip-ratio-on-the-page",
    "2026-10-31-schedule-to-spreadsheet",
    "2026-10-31-boiling-well-water-raises-the-nitrate",
    "2026-10-31-schedule-csv-button-clicked",
    "2026-10-31-the-download-button-that-exported-yesterdays-schedule",
    "2026-10-31-what-a-slipped-day-costs",
    "2026-10-31-schedule-deadline-days-late",
    "2026-10-31-a-seamstress-in-joppa-episode-64",
    "2026-10-31-schedule-deadline-field",
    "2026-10-31-schedule-deadline-on-the-page",
    "2026-10-31-how-likely-is-your-house-to-finish-on-time",
    "2026-10-31-schedule-spend-by-month",
    "2026-10-31-clay-pot-cooler-needs-dry-air",
    "2026-10-31-ci-profile-faster",
    "2026-10-31-permit-duration-which-fields-matter",
    "2026-10-31-window-flashing-tape-count",
    "2026-10-31-schedule-risk-on-the-page"
  ],
  "reverts": [],
  "fix_forwards": [
    {
      "sha": "b2304a615f4b85755f53eda5148c722bd32c1e57",
      "at": 1793422648000,
      "title": "Fix main health: record PR 11998 on a run record that left pr null",
      "pr": 12009,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "Fix main health: record PR 11998 on a run record that left pr null"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 40,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01EhTJVKtiZZfmMpPKwRTxAT.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "fbb9de3e4bab6c810c604dd0835e287ec0b4fdb6",
      "at": 1793448573000,
      "title": "process: fix red main (siding post description over 160 chars)",
      "pr": 12083,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "posts: trim siding-trim post description to 160 chars (main red)"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 45,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtJipCyg5t8Wd2rjzDM.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "6e775ff3bf14c316a5660083fd73a7fb6b7f6152",
      "at": 1793459373000,
      "title": "process: shorten over-long seo_title that turned main red (check_post_frontmatter)",
      "pr": 12109,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "posts: shorten seo_title that broke check_post_frontmatter on main"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 47,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtJsnT7emRQz8cdsgTz.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "ed659848502804a7c846c86027c16f66615458d3",
      "at": 1793477418000,
      "title": "process: fix red main — missing frontmatter on schedule-starter-template post",
      "pr": 12164,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "process: add missing frontmatter to the schedule-starter-template post (main_health red)"
      ],
      "detail": null,
      "area": {
        "kind": "writing",
        "name": "posts"
      },
      "files": 2,
      "lines_added": 50,
      "lines_removed": 0,
      "added_files": [
        "prompts/runs/2026-10-31-session_01AcxTtLipW4XJ7WDvjpvhof.json"
      ],
      "revert": false,
      "fix_forward": true
    },
    {
      "sha": "074455279ed68124ca7f6d69c4cc4f3a936d4b82",
      "at": 1793477972000,
      "title": "process: fix run record with null pr (promptctl validate red on main)",
      "pr": 12167,
      "agent": "Claude Sonnet 5.5",
      "models": [
        "Claude Sonnet 5.5"
      ],
      "track": "process",
      "bullets": [
        "process: name PR 12161 in a run record that left pr null (main_health red)"
      ],
      "detail": null,
      "area": {
        "kind": "process",
        "name": "prompts"
      },
      "files": 2,
      "lines_added": 50,
      "lines_removed": 1,
      "added_files": [
        "prompts/runs/2026-10-31-session_01E5sJKmBG5FPcomUqs3K2gN.json"
      ],
      "revert": false,
      "fix_forward": true
    }
  ],
  "biggest": {
    "sha": "0796df83e8f9470fe8d1ae6fed43147f03081c6c",
    "at": 1793408160000,
    "title": "Record the owner's 2026-10-31 answers: payout rail, egress, billing model; queue 13 → 7",
    "pr": 11957,
    "agent": "Claude Opus 5.5",
    "models": [
      "Claude Opus 5.5"
    ],
    "track": null,
    "bullets": [
      "Post: fit description and seo_title to the frontmatter limits",
      "Post: shorten seo_title"
    ],
    "detail": "The owner answered eight decision-queue rows in two messages.",
    "area": {
      "kind": "process",
      "name": "portfolio"
    },
    "files": 7,
    "lines_added": 2020,
    "lines_removed": 569,
    "added_files": [
      "docs/posts/2026-10-31-eight-answers-in-two-messages.md",
      "docs/reports/2026-10-31-payout-rail-next-steps.md",
      "portfolio/research/egress-reachability/results-2026-10-31.json"
    ],
    "revert": false,
    "fix_forward": false
  },
  "runs": {
    "runs": 185,
    "by_track": [
      [
        "ventures",
        62
      ],
      [
        "research",
        38
      ],
      [
        "creative",
        31
      ],
      [
        "polish",
        14
      ],
      [
        "redteam",
        14
      ],
      [
        "process",
        14
      ],
      [
        "explore",
        6
      ],
      [
        "perf",
        5
      ],
      [
        "review",
        1
      ]
    ],
    "by_outcome": [
      [
        "success",
        165
      ],
      [
        "partial",
        20
      ]
    ],
    "by_model": [
      [
        "claude-sonnet-5-5",
        167
      ],
      [
        "unrecorded",
        15
      ],
      [
        "claude-opus-5-5",
        3
      ]
    ],
    "measured": 19,
    "api_usd": 13.9,
    "active_minutes": 138,
    "errors": [
      "cite_check.py hit arXiv 429/timeouts; ids verified by hand via arxiv.org abstract pages",
      "first Flyvbjerg DOI guessed wrong, corrected via Crossref",
      "first NYC SoQL query used wrong column names",
      "First fit silently zeroed: altitude column is text in parameters.csv; predictions assumed two altitudes, data has four. Discarded and redone, disclosed in LOG.md.",
      "10% noise run for 2 and 4 periods killed at background time limit; only 1 period reported",
      "{\"what\":\"owner first said marisstellalabs.app for email, then corrected to marisstella.app (mistyped); switched before merge\",\"fixed\":true}",
      "{\"what\":\"first post draft named the old github.io host; custom-domain.test.mjs caught it in CI\",\"fixed\":true}"
    ],
    "friction": [
      {
        "file": "prompt.md",
        "n": 49,
        "issue": "step 0 fetches origin security-alerts, which does not exist on the remote (fatal); no fallback stated."
      },
      {
        "file": "research/CLAUDE.md",
        "n": 9,
        "issue": "pick_track.py drew track 14 (codesign), but the programme table says advance a programme; I took aerolog-scaling's logged Next instead."
      },
      {
        "file": "prompts/polish/prompt-0.md",
        "n": 8,
        "issue": "Mentions platform/ci/missing_llms_txt.py fine, but propose_seo_titles.py lives in platform/pages/ and the previous report did not say where; also the full build costs ~5 min to find only false alarms."
      },
      {
        "file": "prompts/creative/prompt-0.md",
        "n": 7,
        "issue": "Says Hearth & Horizon stories run 3,500+ words in BIBLE; my draft is 3,365 words and no test enforces it."
      },
      {
        "file": "CLAUDE.md",
        "n": 3,
        "issue": "Bare python3 is 3.11 while pip installs to 3.13; pyenv.py output suggested python3 works but pandas/lightgbm needed python3.13."
      },
      {
        "file": "research/_shared/pick_track.py",
        "n": 3,
        "issue": "Warned checkout was 50 commits behind; needed a manual fetch and merge before the lists were valid."
      },
      {
        "file": "prompts/review/prompt-1.md",
        "n": 3,
        "issue": "validate fails on other in-flight runs' records (pr null) and a 73-char seo_title, blocking step 8's clean validate"
      },
      {
        "file": "prompts/research/prompt-0.md",
        "n": 3,
        "issue": "pick_track drew a focus track but sim2real-inference-style programmes are all at owner-only steps; took build-data milestone 1 instead"
      },
      {
        "file": "prompts/redteam/prompt-0.md",
        "n": 3,
        "issue": "campaign without --record prints the mutants but saves nothing; the first campaign had to be rerun (the --record flag is easy to skip when following the example order)."
      },
      {
        "file": "portfolio/flagships.yaml",
        "n": 3,
        "issue": "Main briefly held committed merge-conflict markers, which broke allocate.py until #12044."
      },
      {
        "file": "ventures/wall-framing-takeoff/ROADMAP.md",
        "n": 2,
        "issue": "Interior item still said 'Not yet: ceiling joints on joists' though drywall.mjs already implements it."
      },
      {
        "file": "ventures/hearth-and-horizon/BIBLE.md",
        "n": 2,
        "issue": "Next-up list had no undone proposals left; had to invent a topic."
      },
      {
        "file": "research/PROGRAMMES.md",
        "n": 2,
        "issue": "pick_track.py drew build-data with an empty CLAIM CHECK; another run built the same milestone 1 within the same 30 minutes (PR 12049), so about 40 minutes were duplicated. A claim PR in the first minutes would have shown it."
      },
      {
        "file": "prompts/promptctl.py",
        "n": 2,
        "issue": "route sent a venture-directed scheduled run to the research track; the track names in routing.json differ from the draw output (ventures vs product)"
      },
      {
        "file": "research/build-data/LOG.md",
        "n": 1,
        "issue": "Session 7 design said run 3 seeds on all pairs; two chains on 4 cores with 4 threads each ran over 30 minutes without finishing, serial with 2 seeds took about 10 minutes total."
      },
      {
        "file": "prompts/polish/reports (2026-10-30-llms-link-check)",
        "n": 1,
        "issue": "Said 16 ventures lacked llms.txt; only 5 did, so the number was stale."
      },
      {
        "file": "prompts/ventures/prompt-1.md",
        "n": 1,
        "issue": "Flagship next: for ai-bookkeeper asks for real inputs, but recent runs keep adding synthetic gap probes; I did the same since no real data was available."
      },
      {
        "file": "ventures/wall-framing-takeoff/README.md",
        "n": 1,
        "issue": "said the stair-to-header figure had no automatic link, but cli.mjs already had stairFrom (PR 12047); fixed."
      },
      {
        "file": "research/heavy-hydraulics/LOG.md",
        "n": 1,
        "issue": "3h/3i said the manual's P-to-A flow curve was missing; it was on pp. 95-96 of the already-cited manual, found by pdftotext on the 'flow as function of spool travel' wording."
      },
      {
        "file": "CLAUDE.md / platform/ci/pyenv.py",
        "n": 1,
        "issue": "pyenv.py torch took over 5 min; my own extra pip download dropped wheels in the repo root, and a rm *.whl then deleted a tracked ledger wheel (restored)."
      },
      {
        "file": "research/verifiable-training-mechanisms/LOG.md",
        "n": 1,
        "issue": "Milestones 51 and 52 were numbered twice by concurrent runs; I used 53."
      },
      {
        "file": "research/energy-cell-dfn/experiments/run.py",
        "n": 1,
        "issue": "evaluate_with swallows solver exceptions and scores 0, hiding the cause of the SPMe failures."
      },
      {
        "file": "research/aerolog-scaling/README.md",
        "n": 1,
        "issue": "run needs aerosandbox/neuralfoil, not in pyproject; pyenv.py gave python3.13 but python3 is 3.11, so pip installed to the wrong interpreter"
      },
      {
        "file": "prompts/perf/prompt-0.md",
        "n": 1,
        "issue": "ci_profile.py --runs 600 printed nothing in the cloud session (no output, no error), so step 2 gave no reading"
      },
      {
        "file": "research/sim2real-inference/LOG.md",
        "n": 1,
        "issue": "drawn programme was saturated: remaining items blocked on owner/data, so I moved to another programme"
      },
      {
        "file": "research/build-data/PROPOSAL.md",
        "n": 1,
        "issue": "milestone 1 needs data.sfgov.org/austintexas/cityofchicago, all 403 through the proxy this run; the 10-31 session reached them"
      },
      {
        "file": "prompts/process/prompt-1.md",
        "n": 1,
        "issue": "No agent-owned backlog item; critique via doc_friction found ci_profile quickly."
      },
      {
        "file": "platform/ci/wait_for.py",
        "n": 1,
        "issue": "--until returns after 100 s with 'still failing, call again' and exit 0, so background wait notifications fired early and I had to loop"
      },
      {
        "file": "platform/distribution/hub/compose.mjs",
        "n": 1,
        "issue": "BASE_URL (and bluesky.mjs BASE_URL) still name duncan-haywood.github.io/oss-monorepo/ although the site moved to marisstella.app on 2026-10-30; links still work via redirect stubs that keep ?ref=, but cost a hop. Left for a separate change because many tests pin the old URL."
      },
      {
        "file": ".github/workflows/distribution-versions-ci.yml",
        "n": 1,
        "issue": "hub.test.mjs, shorts.test.mjs and launch-kit.test.mjs ran in no pull-request workflow; added them (and the new content.test.mjs) to this job."
      },
      {
        "file": ".github/rulesets/README.md",
        "n": 1,
        "issue": "Only two workflows (conflict-markers, agent-cross-review) run on every PR, so a new required check needs its own unfiltered workflow; the ruleset JSON in the repo is not live until an admin applies it."
      }
    ],
    "notes": [
      "Added notBefore to schedule.mjs; node --test schedule/cli/page tests: 93 pass. Hand tests only; CI not awaited locally beyond that. No security-alerts branch existed; IDEAS.md empty.",
      "9k ran about 3 h CPU (BLAS oversubscribed at ~400% CPU). CI not waited on beyond local research build ok.",
      "Project: hearth-and-horizon; piece: one-in-eleven (text only, audio 423 MB over 400 cap). node --test 11 pass. Story is slightly under the 3,500-word guide.",
      "Security queue branch absent; ideas inbox empty. Added weatherRate/exposed to wall-framing-takeoff schedule; node tests and run_venture_tests pass locally. Not run: venture-preflight, no new venture.",
      "Paper-writing step for aerolog-scaling: no new simulation. check_numbers.py all ok, homepage build.py ok. CI had not started when merged; local checks only.",
      "Ran milestone 4 on real feeds; H2 refuted. Pytest not run for build-data (not installed under python3.13); the homepage build printed ok.",
      "Programme heavy-hydraulics, 3h: digitised PVG 32 p.99 curves; predictions held; homepage build ok.",
      "schedule.carryPerDay: priced slips; 21 schedule tests pass. flagship next: not rewritten (list already long). security-alerts branch absent.",
      "aerolog-scaling milestone 2a. Prediction 1 failed (speed mix), reported. Homepage build ok, cite_check ok.",
      "Fixed red baseline in two posts; added relatedPosts test; 3 escapes in inline client script left unguarded. Not landed via PR in this run record yet.",
      "Review was due but PR 12026 already claimed it, so routed with --skip-review to ventures. Landed weatherLoss in wall-framing-takeoff schedule; schedule.test.mjs 14/14 pass locally; venture-preflight not run.",
      "Ran with python3.13; homepage build and md link check ok. Security-alerts branch absent; ideas inbox empty.",
      "Baselines run for 5 city/target pairs; ~20 min pull via background process.",
      "Page fields for wall heat loss in wall-framing-takeoff; page.test.mjs + insulation.test.mjs 47 pass. venture-preflight not run.",
      "node --test siding, budget, cli: 54 pass. Did not rewrite flagships next: (small slice, items already listed).",
      "Walkout footing steps (foundation.mjs); node --test '*.test.mjs' in wall-framing-takeoff: 505 pass. security-alerts branch absent; ideas inbox empty. venture-preflight not run.",
      "Limits typed from memory, flagged as unverified in README. Did not update flagships.yaml next: (feature was small); node tests for floor/cli/page pass.",
      "Another run fixed the same post description on main first; this PR ended as run record only. Backlog ids touched: none.",
      "Creative track, hearth-and-horizon story aim-off (text only; audio 423 MB over cap). Draft had inconsistent clock times, fixed before build. node --test 11 pass.",
      "Hearth & Horizon, slug the-stone-that-keeps-the-sun; text only (audio 423 MB). Stories tests 9/9; generate.mjs regenerated pages.",
      "page.test and dormer.test 49 pass; eval-browser-click.mjs ok in Chromium. Run was slow because the click test outlasts the 120s timeout.",
      "Project hearth-and-horizon, slug the-black-grains. Dropped lightning topic after finding it already covered.",
      "Flagship 1 slice: click-tested slab edge F field, fixed missing printed line. Tests 59 pass, browser click exit 0. Did not rewrite flagship next: (item was small). Reduced scope; no agent doc.",
      "Scheduled research run; drew programme heavy-hydraulics; wrote milestone 6c (paper section 3.5 gains 3i) plus blog post. check_numbers.py: 37 claims, 0 missing. Homepage build.py not run to completion (no project added or renamed; it exceeded the 120 s foreground timeout).",
      "Landing post NDS Cp check, hand-tested. Flagship next: was not rewritten (open items list already names post sizing).",
      "eval-browser-click.mjs run locally in Chromium: exit 0, 0 page errors. Sandbox timeout 100s killed an early run; rerun foreground fine.",
      "Ran pytest (5 passed) and experiments/run.py (about 6 min); homepage build ok. cite_check not run; citations marked not fetched.",
      "Dormer page card; page.test 37/37; Chromium click test ok. flagships.yaml next: not rewritten (small slice).",
      "Critique mode (no agent-owned backlog item workable). main_health.py: 31/32, promptctl validate red from null pr in a creative record; fixed, validate ok. No new post: one-line fix (see deviations).",
      "build-data milestone 5. H3 holds as worded; caveat that permutation importance is not gain decomposition. Skipped the security-alerts queue (branch absent). Sim2real-inference was saturated so drew build-data.",
      "Metric: quantize ms per card. Before 59.9 ms/card, after 50.7 ms/card (hrtime, 60 cards, one process); cold build wall 2m49s baseline (time). Output byte-identical (SHA-1 over cards, A/B of old vs new module).",
      "Reduced review pass; no blog post (process-only run). security-alerts branch absent.",
      "Project hearth-and-horizon, slug the-door-left-open-at-the-vigil. Text only: audio folders 423 MB, over 400 MB cap.",
      "Backlog had no agent-owned open item; main_health found check_post_frontmatter/promptctl red on a 162-char post description; trimmed it. No backlog ids touched.",
      "Milestone 2b; prediction 1 failed (77% non-cruise). Checks: build.py ok, check_md_links ok.",
      "Backlog had no agent-owned open item; main_health found seo_title 76>70 chars. No backlog ids touched. Post-merge lint gap: the over-long title merged despite check_post_frontmatter.",
      "floor.test.mjs 23/23 pass locally. security-alerts branch absent; ideas inbox empty.",
      "Experiment ran 15 min wall; 2 of 3 predictions held, gust-share prediction refuted. Paper draft check_numbers not updated (follow-up).",
      "Review track was drawn but PR 12026 (prompts: review) was open, so re-routed with --skip-review to ventures. Tests run: schedule, page and cli test files, 103 pass.",
      "Found winder framing treadSpan reported stair width instead of fanned support gap; fixed, tested by hand figures. flagships.yaml next: left as is (README holds the detail).",
      "writing.test.mjs 21 pass. Full site build and CI-local workflow not run.",
      "Security queue branch absent. Floor and cli tests pass locally (56/56). Page and venture-preflight not run.",
      "Ran validators-shape.test.mjs and the nine modules' own suites: 0 fail. No security-alerts branch existed; ideas inbox empty.",
      "creative track; hearth-and-horizon story the-landing-every-thirty-inches, text only (audio 423 MB over the 400 MB cap). Routed with --skip-review because review PR #12026 was open. No agent doc written.",
      "platform/edge/worker.mjs: 12 mutants, 8 caught (0.667); 4 escaped (body-cap boundary, /counts since filter), all gaps, guarded by 2 new tests; catch_rate_after_fix 1.0. platform/deploy/build.mjs showed (red) baseline in targets --probe, not investigated (likely environment).",
      "Slow first LightGBM config (40+ min) abandoned for lr 0.15/300 rounds/3 seeds; disclosed in LOG. Drift years 2022-23 not run.",
      "Target rsu-withholding-gap-calculator/calc.mjs, 8 mutants, 5 escaped (3 caught). Added 3 tests; 4 gaps now caught, 1 equivalent. No post: small guard-only run, no finding worth a reader.",
      "Experiment 9o ran 25 min; predictions all held. Paper draft not updated (stated in limits).",
      "Dropped my duplicate loader and blog post to avoid conflicting numbers; kept the Austin cost-field correction. 4 tests pass, build.py ok.",
      "Project: saints-by-candlelight, slug bartimaeus-and-the-cloak-thrown-aside (episode 61). Text only; audio folders 423 MB, over the 400 MB line. No agent doc written.",
      "creative: hearth-and-horizon, slug the-cupboard-that-breathes-out; text only (audio 423 MB > 400 cap). security-alerts branch absent; no ideas.",
      "ai-bookkeeper suite passed locally (run_venture_tests.py). No security-alerts branch existed; IDEAS.md empty.",
      "Paper-only step for aerolog-scaling: sections 4.10/4.11, check_numbers all ok, homepage build ok. No new simulation.",
      "Full site build not run; ran writing.test.mjs only. No blog post: small metadata change.",
      "Small slice: negative dormer window sill rejected; dormer.test.mjs 13 pass. No CI wait; node tests run locally.",
      "Critique mode (backlog had only owner/blocked rows). main_health: 29/31 green; fixed the 166-char post description that turned check_post_frontmatter and promptctl validate red. No new blog post: one-line fix. Backlog ids touched: none.",
      "Page field for stairs.rail; page.test.mjs 39 pass; eval-browser-click.mjs passed in Chromium including the new guard steps. venture-preflight not run. flagships.yaml next: not rewritten (open items list unchanged except landing edge guards still not on page).",
      "share.mjs: 8 mutants, 6 caught, 1 gap closed with a test, 1 equivalent. No real defects.",
      "Unrequested session: scheduled prompt.md run; no security-alerts branch, empty ideas inbox.",
      "einvoice-preflight/document.mjs: 8 mutants, 3 escaped (untested UNCL 1001 codes 82/202/623); added table-wide test; 8/8 after fix. No real defects found.",
      "Added schedule.deadline to wall-framing-takeoff; venture suite passed. No agent doc, no page field.",
      "Target wildlife-exclusion-bid-calculator/share.mjs, 8 mutants, 6 caught (75%); 2 gaps (MAX_TERM_TEXT boundary, key-less loadBid) closed with 2 tests, 100% after fix. No real defects found; hunt was brief. Suite 47/47.",
      "Creative track, Hearth & Horizon, slug the-count-between, text only (audio 423 MB > 400 MB cap). Sections: tests 11/11 pass.",
      "Backlog had only owner/blocked rows. main_health found 2 red checks, both from the same post (#12158) merged without frontmatter. Fixed in #12164. Small run; the CI check exists but the PR merged red, cause not investigated.",
      "Ran node --test on ireland and hub tests locally (8 and 6 pass). Full venture-preflight not run.",
      "Routed ventures; flagship 1 (wall-framing-takeoff). Found its items need real plans/data; landed only a stale ROADMAP line fix (roof valleys and page already landed). roof.test.mjs 27/27 pass. Doc-only, no blog post or flagship next: rewrite.",
      "Project: saints-by-candlelight, episode 64 slug tabitha-and-the-tunics-in-the-upper-room-at-joppa. Text only (audio 423 MB > 400).",
      "No agent doc: nothing the next run needs beyond README line.",
      "Full run n=20 per cell; predictions (1),(2) held, (3),(4) refuted. Build.py ok. CI not awaited locally beyond build.py; stray wheel deletion reverted.",
      "Built the deadline page field and clicked it in Chromium, but another run landed the same field on main first; resolved the conflict by taking main's code and keeping only the blog post. Duplicate work: the pre-PR duplicate search was skipped.",
      "Explore idea: JSON validity sweep of 5,714 tracked files; clean, one JSONL file. Small result; script not wired into CI (CODEOWNERS).",
      "Metric: warm Pages build local wall clock. Before 53 s, after 55 s (noise). Microbench linkSiblings 50 calls: 226 ms to 68 ms, byte-identical; diff -rq of whole site empty. Taken with date +%s and a hand microbench.",
      "hearth-and-horizon / the-pitch-of-the-cold-church; text only (audio 423 MB over cap).",
      "Review track was skipped because PR 12026 already claimed it. Merge status of PR 12030 not confirmed in this record.",
      "Venture suite wall-framing-takeoff passed locally (96s). Security queue branch absent; ideas inbox empty. Did not run venture-preflight (engine-only change).",
      "page.test.mjs 46/46; clicked in Chromium (valid hold, unknown id, malformed entry). No security-alerts branch existed; IDEAS.md empty. Did not run venture-preflight or CI-equivalents locally; no agent doc written (nothing for next run beyond flagships.yaml).",
      "No metric: no speed-up. Pages build failed after 29s (missing description; seo_title 74>70 chars); after fixes full build completes (>120s wall, not timed precisely). Gap: no pre-merge check caught the front matter errors.",
      "20 seo_title values for 2026-10-25/26 posts; writing.test.mjs 22/22 pass; no security-alerts branch existed.",
      "Project: Hearth & Horizon. Slug: the-weight-on-the-pfarrsaal. Text only (audio 423 MB, over the 400 MB cap). Not re-verified: the story's snow-load figures were worked by hand, not by a structural check. node --test 11/11.",
      "Routed to review first but PR 12026 already claimed it; re-routed with --skip-review. No runcost attach.",
      "check_jsonld.py campaign 8/8 caught. narrate.py 3/8 -> 8/8 after 4 Voicing tests.",
      "Project hearth-and-horizon, slug the-lake-under-the-stairs; security-alerts branch absent; no ideas pending.",
      "Metric: quantize ms per 1200x630 mixed image, hrtime mean of 30 in one process. Before 6.4-9.4, after 4.0-6.8 (noisy). Output byte-identical. Cold full Pages build 2m33s, not re-timed after.",
      "Creative track, Hearth & Horizon, slug the-finger-that-reads-ninety-four. Text only: audio dir was 423 MB (>400 cap). No blog post/agent doc this run (short creative run; story itself is the deliverable). Study figures (Sjoding 2020) cited from memory, flagged as 'about' in the story note.",
      "Critique mode (no agent-owned backlog items open). main_health.py: 31/32, promptctl validate red from two malformed records of #12127/#12137; repaired, validate now ok. No blog post: small repair. Suggest validate run in PR CI for records.",
      "saints-by-candlelight, slug hezekiah-and-the-letter-spread-out-in-the-temple; no agent doc written",
      "Creative track, Saints by Candlelight episode 62 (philip-and-the-traveller-on-the-gaza-road), text only (audio 423 MB > 400 MB cap). First route drew review but PR #12026 had already claimed it, so re-routed with --skip-review. security-alerts branch missing, step 0 skipped.",
      "Floor cantilever in wall-framing-takeoff. floor/cli/budget/page/insulation tests pass locally (full suite exceeded the tool timeout). Flagship next: unchanged except cantilever now landed.",
      "Metric: drawMark for 2759 card-size marks 43009 ms before, 289 ms after (hrtime, one process). Cold build 3m22 before, 2m33 after (noisy, test ran concurrently); user CPU 6m07 to 4m25. Whole-site diff -rq identical. No blog post: small internal change, covered by history doc.",
      "Small step; build-data milestone 1 still open pending network access.",
      "Built the cantilever tip ratio page field; PR 12177-era session landed the identical feature on main first. Merged main, kept only the Chromium click check (eval-browser-click.mjs). Duplicate-work friction: overlapping sessions on flagship 1.",
      "Swept --bootstrap over 33 real series; first draft read the wrong JSON key (all zeros), caught and fixed before commit. node --test real-bootstrap-sweep.test.mjs passes.",
      "Flagship 1 slice: page fields for siding starter strip and head flashing. page.test.mjs 36 pass; eval-browser-click.mjs ok, 0 page errors. No agent doc in docs/reports (nothing next run needs beyond README).",
      "creative: hearth-and-horizon, slug the-night-the-blossom-was-wet; text only (audio 423 MB > 400 cap). Caught and fixed a pond-arithmetic error in my own draft before commit.",
      "Project: hearth-and-horizon; slug the-number-on-the-pier. Venture node --test 11 pass. Audio not rendered (423 MB > 400).",
      "Scheduled run. One campaign on platform/pages/share.mjs: 8 mutants, 7 caught, 1 equivalent (thread-count default). No real defects found in the limited hunt. No post written: run found nothing to report.",
      "Fixed platform/ci/ci_profile.py (parallel fetch, progress, timeout). main_health run in background; tests 12 passed. No backlog ids touched.",
      "Backlog: owner rows only; Critique mode. main_health found promptctl validate red from a record with pr null (PR 12161); fixed. Step 0 fix already in PR 12038. No blog post: a one-line record fix has nothing to tell a reader.",
      "Hearth & Horizon, slug the-pot-that-needs-dry-air, text only (audio 423 MB over the 400 MB cap). Wet-bulb figures from Stull formula; story tests 9/9.",
      "Hearth & Horizon, slug the-kettle-that-concentrates; text only; node --test passes.",
      "creative: hearth-and-horizon Little Lamps, slug frances-cabrini-and-the-big-water; text only (audio 423 MB > 400 MB cap).",
      "Creative track; project hearth-and-horizon; slug the-well-that-took-the-bleach. Security queue branch absent; ideas inbox empty.",
      "page.test.mjs 45 pass; eval-browser-click.mjs step ran in Chromium and passed.",
      "Target platform/edge/worker.mjs: 8 mutants, 6 caught, 2 escaped (limiter 429 status, preflight 204); both guarded by new tests, rerun caught both. No real defects found. No blog post: small run.",
      "saints-by-candlelight episode 63 (peter-and-the-knock-at-the-gate-of-mary-mother-of-mark), Acts 12, text only (audio 423 MB > 400 MB cap). No agent doc written; run had nothing for the next run to know beyond the audio cap already documented.",
      "Small slice: trimmer bearingCapacity check, floor.test.mjs 25/25. Did not run venture-preflight or runcost attach.",
      "Review claimed by an open PR, so routed with --skip-review to ventures. Added schedule CSV export; schedule/cli/page tests 101 pass; button not click-checked.",
      "Hearth & Horizon, slug the-lid-that-stayed-shut; text only, audio 423 MB over cap.",
      "Critique mode: no agent-owned backlog item workable; main_health found check_step_grid red; fixed. security-alerts branch absent. No backlog ids touched.",
      "Reduced run (every third design, 10 draws) to fit session CPU; predictions fixed before run, all held.",
      "Added slab edge F-factor page field to wall-framing-takeoff; page+insulation tests 51/51. Not clicked in Chromium. Small slice; flagships.yaml next left unchanged.",
      "creative track; saints-by-candlelight episode 60 simeon-and-anna-and-the-child-in-the-temple, text only (audio 423 MB > 400 MB). Security queue branch absent; ideas inbox empty. No docs/reports agent doc: nothing the next run needs. check-script ok, node --test 12/12.",
      "Ran 9i's script at 10% noise (~1h CPU). Predictions 1 held, 2 and 3 refuted. Homepage build and CI not run beyond this; LOG-only change plus a results file.",
      "Fuzzed stairs.mjs; fixed zero stringer spacing, negative nosing, bad landing post/footing dims. 463 venture tests pass locally. Did not update flagships next: (bug-fix slice, not a milestone); no blog post (small run).",
      "Explore idea: walkout stem wall (stem.walkout) in wall-framing-takeoff foundation.mjs; hand test only.",
      "Full ai-bookkeeper node suite run locally: 2126 pass. Security queue branch absent; ideas inbox empty.",
      "Milestone 9n: whitened residuals recover 14 of 17 points of gust share lost to AR(1) noise; frequency-gap prediction refuted by 0.02 points.",
      "Explore idea: duplicate meta description sweep. 22 pages fixed. First regex draft truncated at apostrophes; replaced with HTMLParser.",
      "Small polish run: no site build or screenshots; fixed lister per previous report's next step.",
      "Schedule page deadline field; eval-schedule-click.mjs passes, schedule.test.mjs 25/25. No agent doc written: nothing the next run needs beyond flagships next:.",
      "Routed to review but PR #12026 already claimed it; re-routed with --skip-review to explore. Idea: aria-live/reduced-motion sweep, 14 pages. Checks run locally; CI not awaited.",
      "Explore track. Idea: close the last unchecked winder rule (walkline within 3/8 in of the straight tread). stairs.test.mjs, cli.test.mjs, page.test.mjs: 116 pass. Hand-computed test only; page wiring source-tested, not clicked.",
      "Campaigns on platform/pages/invalid.mjs (6/8 caught) and entities.mjs (7/8, escape equivalent). Two invalid.mjs gaps closed with behavioural tests; no real defects found.",
      "Page field for stairs.landing.openEdges; page.test.mjs 41 pass; eval-browser-click.mjs passed in Chromium incl. new steps.",
      "Routed to process. main_health found one red check (run record with null pr); fixed. No larger slice shipped this run.",
      "hearth-and-horizon, slug clare-and-the-loaves-with-a-cross, text only (audio 423 MB over the 400 MB cap). stories.test.mjs 9/9 pass.",
      "Built per-activity cost -> weekly cashFlow; a parallel session landed the monthly version first (PR 12191), so rebuilt on main and kept only the weekly buckets and peak week. Also fixed main's red validate (post front matter, flagships next cap) and research live links. node --test schedule.test.mjs 28/28 locally.",
      "Eleventh keyword gap probe (34 made-up descriptors, tuned on itself). Real labelled books remain the need.",
      "hearth-and-horizon / the-dry-ice-in-the-closed-room; text only (audio over cap). Numbers recomputed in python; generate.mjs and stories.test.mjs pass (9/9).",
      "Skipped the 7-20 min full site build; verified with node --test page.test.mjs (39 pass) and a Chromium click at 390px (17 sheets default, 12 sheets of 4x12 at 14 ft, no errors, no horizontal scroll).",
      "External hosts all 403 through the proxy, so no primary sources were read. node --test slab.test.mjs page.test.mjs: 48 pass. Chromium click at 390px: slab, pier, footing and bad input, no page errors, no horizontal scroll. Bag yields and the 4 yd short-load figure are label/rule-of-thumb figures, stated as such on the page.",
      "Polish track, AEO pass: llms.txt for actions-continue-on-error-check (only working tool of the 6 ventures lacking one). Small slice; no site build or screenshots done. Tests: 8 unittest pass.",
      "Winders (CLI-only) now have a page field on the stairs card, restored from a saved plan. page.test.mjs wiring test, eval-browser-click.mjs steps, 83 node tests pass. Blog post winder-stairs-on-the-page. Chromium click run: winders fail/solved radius, pass at 12 in, malformed refused; page errors 0.",
      "Built a page field for floor.cantilever, then found PR 12000 had landed the same feature; dropped mine and kept only the post front-matter fix (the push hook rejected the earlier post). Duplicate-PR search was skipped at the start: lesson, search open PRs before building.",
      "Schedule page day-ranges field; eval-schedule-click.mjs 5 new checks ok; page.test.mjs 49 pass.",
      "Checked: node --test siding/budget/cli/page tests, 88 pass. Bulgaria e-invoice page re-searched, no new outcome, so no change. gov.il unreachable (not on the allowed hosts).",
      "main_health 32/32. Ran engine, sheathing-fuzz, panels and drawings tests locally. The nailer is a note, not a line in the lumber order; no real gable plan.",
      "floor.test.mjs 30/30; full wall-framing-takeoff node suite passes after the fix. Venture preflight and CI not run locally.",
      "Small slice: hanger nails on floor hangers. node --test floor.test.mjs budget.test.mjs: 34 pass. venture-preflight not run (small engine change, no new page).",
      "node --test page.test.mjs: 46 pass. Visit effect unmeasured.",
      "Roadmap said bid leveling and the allowance bench had no page / were open; both already existed (stale checkboxes). Built effective wall R instead. Ran venture suite locally: 404 pass, 0 fail. Layer R values are typed handbook defaults, hand-arithmetic tests only.",
      "Twelfth keyword gap probe (40 made-up descriptors, tuned on itself). Real labelled books remain the need.",
      "Eleventh keyword gap probe (41 made-up descriptors, tuned on itself). Real labelled books remain the need.",
      "floor.test.mjs + cli.test.mjs: 49 pass locally. Hand-arithmetic checked (53.125 lb/ft, 27.97 psi bending). venture-preflight not run (engine-only change, no new page).",
      "Router drew creative; the scheduled prompt asked for revenue products, so worked the top flagship (wall-framing-takeoff). Added --gang; node tests 39 pass. Not checked in a browser; no page control.",
      "Campaign on ai-bookkeeper/categorize.mjs, 8 mutants; 1 escaped (naive Bayes unseen-token smoothing), now caught. research/mimic-evade baseline red in this container only because sklearn is not installed (not a defect). Suite: node --test categorize-property.test.mjs 3 pass.",
      "Chromium click on example house: 211.5 wallFeet/40 = 6 days. node --test page.test.mjs schedule.test.mjs: 66 pass. Task still lacks a real builder's rates.",
      "Router drew research; the scheduled prompt asked for revenue products, so I took the top flagship (wall-framing-takeoff) instead. Fuzzed layoutFoundation with malformed JSON, found 7 throwing shapes, added shape guard and test; node --test foundation.test.mjs 19/19 pass.",
      "SITE_NAME and hardcoded copies -> Maris Stella Labs; About 'Who makes this'; Organization founder; llms.txt line; local-site-studio email fallbacks -> marisstella.app. DNS 2026-10-31: marisstella.app has no MX (Cloudflare NS) so mail to it bounces until Email Routing is set up; marisstellalabs.com has Google MX but the owner cannot find the registration; marisstellalabs.app is on Vercel DNS with no MX. Repo slug and LICENSE copyright left unchanged on purpose. Local: node --test site-nav/home/share/writing/podcast/lab tests 84/84 pass; build.test.mjs see below. Owner then asked for 'everything as code' as a principle: added goals.md 'Direction: everything as code' + CLAUDE.md line, and email routing as code (platform/pages/cloudflare/email-routing.{json,mjs,test.mjs}, workflow_dispatch cloudflare-email.yml; forwarding inbox only as secret EMAIL_FORWARD_TO). email-routing.test.mjs 3/3; validate_workflows: 127 valid. build.test.mjs full run: all pass except 'identical build produces an identical cache name', which failed because I added a docs/posts file between its two builds; rerun alone, result in PR. PR 11955 merged green (all check runs success). Follow-up PR: footer line 'A Maris Stella Labs project, MIT licensed.' on every page; CITATION title/author; npm/PyPI/MCP README 'from Maris Stella Labs' (10 packages patch-bumped in versions.json, as versions.test requires); contributor docs workers.dev -> marisstella.app; portfolio/brand/README.md (name, spelling, what is kept on purpose and why). Local: build.test + custom-development + distribution tests 530/530.",
      "pick_track.py FOCUS (9 tracks) at FOCUS_SHARE 0.5: test_pick_track 20/20 pass, measured share within 0.02 of 0.68 (tracks) and 0.03 of 0.75 (programmes). test_allocate 71 passed. check_post_frontmatter and promptctl validate pass. Also set pr=11980 on another session's run record that left it null and was failing promptctl validate on main.",
      "New platform/distribution/hub/content.mjs extracts a post's lead, numeric findings and stated limits verbatim and lays them out as threads (X 280, Bluesky 300, Threads/Mastodon 500), LinkedIn, Reddit (with affiliation disclosure), HN first comment, carousel slides and a video script. Draft-mode platforms get it in `pack`; new `hub.mjs kit` writes every shape; the daily distribute-hub job adds kits for the last day's posts to its uploaded artifact (files only, posts nothing). api/delegated platforms' text is unchanged (tested). Corpus check over all docs/posts: 1,456 of 1,470 yield a kit, avg 3.35 findings and 1.35 limits, 0 sentences not verbatim, 0 pieces over limit. Fixed during build: code spans losing <n> to the HTML stripper; empty description deduping every sentence away; grapheme counting cut from ~63 s to ~6 s over the corpus with an exact fast path. Local: node --test hub.test.mjs hub/content.test.mjs shorts.test.mjs launch-kit.test.mjs bluesky mastodon attribution devto hashnode: 85/85 pass; versions.mjs --check current; workflow YAML parses; new post loads (description 158, seo_title 59).",
      "GHP redirect was already live (run 41143849046: deploy-cloudflare then deploy both success). Changed README/CITATION links to marisstella.app; wrote LinkedIn copy with sourced counts (tools.mjs search total 1306; 1058 research dirs); post. Local checks: run_workflow_locally --for-changes, see PR. Owner then asked for the workers.dev address to redirect: _headers Refresh+noindex for static files (unmetered), 301 in router.mjs for code paths. Local: node --test platform/pages/cloudflare/split.test.mjs 6/6; custom-domain.test.mjs 5/5 (it had failed in CI because the post named the old host). Also fixed PR #11943's run record, which failed promptctl validate on main.",
      "Local checks: test_control_plane_guard 14 OK; control_plane_guard --check-coverage OK; agent-permission-harness check_results_current exit 0 on branch and on main, its 93 tests OK; check_md_links, check_code_refs, check_conflict_markers, promptctl validate clean. validate_workflows.py reports one pre-existing problem in distribution-versions-ci.yml (untouched). --pr and --audit-commit not run against the live API locally (no token). GitHub settings (agent identities, applying the ruleset, Actions settings, moving secrets, push protection) are owner steps listed in docs/security/agent-hardening.md."
    ]
  },
  "asks": null,
  "snapshot": {
    "at": "2026-11-01T04:29:16.798Z",
    "red_on_main": [
      {
        "workflow": "einvoice-preflight CI",
        "since": "2026-11-01T00:58:01Z",
        "hours": 3.5
      },
      {
        "workflow": "proposal module CI",
        "since": "2026-11-01T02:25:06Z",
        "hours": 2.1
      },
      {
        "workflow": "ventures tests",
        "since": "2026-11-01T04:13:05Z",
        "hours": 0.3
      }
    ],
    "ci_pass_share": 0.88,
    "ci_failed_14d": 13537,
    "worst_workflows": [
      {
        "name": "Portfolio Pages",
        "runs": 80,
        "passed": 34,
        "failed": 24,
        "cancelled": 22,
        "skipped": 0,
        "pass_share": 0.586,
        "minutes_p50": 7.2,
        "minutes_p90": 14.1
      },
      {
        "name": "ventures tests",
        "runs": 50,
        "passed": 11,
        "failed": 23,
        "cancelled": 16,
        "skipped": 0,
        "pass_share": 0.324,
        "minutes_p50": 1.9,
        "minutes_p90": 2.9
      },
      {
        "name": "Portfolio validate",
        "runs": 88,
        "passed": 39,
        "failed": 14,
        "cancelled": 35,
        "skipped": 0,
        "pass_share": 0.736,
        "minutes_p50": 2.4,
        "minutes_p90": 4.1
      }
    ],
    "main_recovery_p50": 0.2,
    "open_prs": {
      "count": 40,
      "drafts": 16,
      "older_than_7d": 20,
      "oldest_days": 33.1,
      "recent": [
        {
          "number": 12253,
          "title": "site-usage-pull: land daily usage files on a usage-data branch (main push hit GH013)",
          "draft": true,
          "created_at": "2026-11-01T04:28:01Z"
        },
        {
          "number": 12244,
          "title": "Usage, SEO and AI-search review: report, post, llms.txt fix, build fix",
          "draft": true,
          "created_at": "2026-11-01T04:04:53Z"
        },
        {
          "number": 12243,
          "title": "Turn on for profit, never a blocker (control plane: needs owner approval; supersedes PR #11962)",
          "draft": false,
          "created_at": "2026-11-01T04:02:59Z"
        },
        {
          "number": 12236,
          "title": "process: prompt.md step 0 handles a missing security-alerts branch",
          "draft": false,
          "created_at": "2026-11-01T03:19:44Z"
        },
        {
          "number": 12154,
          "title": "research/lowcomm-training: milestone 6o, keep 1/8 and 1/32 at H=64 (draft)",
          "draft": true,
          "created_at": "2026-10-31T19:13:47Z"
        },
        {
          "number": 12133,
          "title": "explore prompt: record JSON-LD, http:// and duplicate-id sweeps as clean",
          "draft": false,
          "created_at": "2026-10-31T17:18:47Z"
        },
        {
          "number": 12130,
          "title": "wall-framing-takeoff: schedule durations from the takeoff on the whole-house page",
          "draft": false,
          "created_at": "2026-10-31T17:09:03Z"
        },
        {
          "number": 12119,
          "title": "wall-framing-takeoff: twelve validators return an error for non-object input",
          "draft": false,
          "created_at": "2026-10-31T16:08:47Z"
        },
        {
          "number": 12038,
          "title": "process: prompt.md step 0 fallback when security-alerts branch is missing",
          "draft": false,
          "created_at": "2026-10-31T07:11:06Z"
        },
        {
          "number": 12026,
          "title": "prompts: review 2026-10-31",
          "draft": false,
          "created_at": "2026-10-31T06:10:54Z"
        },
        {
          "number": 11988,
          "title": "deploy-concurrency-check: match the Actions checker family's UI",
          "draft": true,
          "created_at": "2026-10-31T02:43:22Z"
        },
        {
          "number": 11986,
          "title": "goals.md: Direction: industrial, energy and construction",
          "draft": false,
          "created_at": "2026-10-31T02:28:38Z"
        },
        {
          "number": 11962,
          "title": "Payments rule: the owner's merchant of record, never a key; delete the routine trigger (needs owner approval)",
          "draft": false,
          "created_at": "2026-10-31T00:57:35Z"
        },
        {
          "number": 11730,
          "title": "polish: hand-written llms.txt for cra-evidence-desk",
          "draft": false,
          "created_at": "2026-10-30T09:11:23Z"
        },
        {
          "number": 11655,
          "title": "clonescan: rename dupehound (crates.io name taken) + gated crates.io publish workflow",
          "draft": true,
          "created_at": "2026-10-30T03:33:50Z"
        },
        {
          "number": 11337,
          "title": "Adopt stranded branch claude/focused-dijkstra-6gtv0g: regen.mjs: refresh front-door mirror after second merge",
          "draft": true,
          "created_at": "2026-10-29T06:50:56Z"
        },
        {
          "number": 11336,
          "title": "Adopt stranded branch claude/zealous-bohr-mbrcrv: gitops/ci/README.md: sync runs-on count after s3-bucket-exposure-check-ci.yml",
          "draft": true,
          "created_at": "2026-10-29T06:50:54Z"
        },
        {
          "number": 11151,
          "title": "ai-bookkeeper: CLI refuses non-numeric flags, fx rate and --deposited instead of saving or printing NaN",
          "draft": false,
          "created_at": "2026-10-28T15:30:15Z"
        },
        {
          "number": 10881,
          "title": "ci: flag third-party script/stylesheet requests; drop Google Fonts from retail portal",
          "draft": false,
          "created_at": "2026-10-27T12:32:51Z"
        },
        {
          "number": 10600,
          "title": "changepoint-detector: meanvar variants checked on the real Nile series",
          "draft": false,
          "created_at": "2026-10-26T08:25:09Z"
        },
        {
          "number": 10052,
          "title": "Adopt stranded branch claude/trusting-faraday-2gc5if: GOING_PUBLIC: email and Pages URL done in the tree; history options",
          "draft": true,
          "created_at": "2026-10-24T06:58:37Z"
        },
        {
          "number": 8764,
          "title": "marriage-divorce-evidence: flexible models and pooled nine-survey model tested held out; report, blog post and NEXT.md",
          "draft": false,
          "created_at": "2026-10-20T09:25:13Z"
        },
        {
          "number": 8720,
          "title": "marriage-divorce-evidence: race detail, family of origin, religion, politics, occupation and wealth tested held out; predictor atlas",
          "draft": false,
          "created_at": "2026-10-20T07:56:12Z"
        },
        {
          "number": 8700,
          "title": "Retire the research archive workflow: oss-research-monorepo is deleted",
          "draft": true,
          "created_at": "2026-10-20T07:10:00Z"
        },
        {
          "number": 8649,
          "title": "csv-to-sepa-pain008: free CSV to SEPA direct debit (pain.008) file converter",
          "draft": false,
          "created_at": "2026-10-20T05:05:58Z"
        }
      ]
    },
    "pr_cycle_p50": 0,
    "first_try_green": 0.909,
    "branches": 642
  }
}
