{
  "schemaVersion": 1,
  "generatedBy": "scripts/playbook-activity.py",
  "window": {
    "startLocal": "2025-10-01T00:00:00-07:00",
    "endExclusiveLocal": "2026-10-21T09:30:06-07:00",
    "timeZone": "America/Vancouver"
  },
  "scope": {
    "gitAuthors": [
      "hamed taheri",
      "hataheri"
    ],
    "gitRepositoriesScanned": 39,
    "gitRepositoriesWithCommits": 33,
    "gitFailures": 1,
    "githubAuthor": "hataheri"
  },
  "definitions": {
    "commits": "Distinct hashes by the listed authors, all locally reachable refs, author date in the month; no fetch.",
    "linesChanged": "Added plus deleted lines in non-merge commits, rebased copies dropped. Excludes lockfiles, build output and binaries. Code footprint, not effort or value.",
    "tests": "Paths in test folders or named *.test.* / *.spec.*.",
    "newDesignDocs": "Markdown files created under docs/specs, docs/plans or docs/superpowers/{specs,plans}.",
    "mergedPrs": "GitHub PRs authored by the account, by merge date. taskBranch = merged into a pilot/ task branch (pipeline repair PRs); otherBranch = integration and release branches.",
    "perCalendarDay": "Count divided by observed calendar days, weekends included. A partial month uses elapsed time; not a forecast.",
    "latestComparison": "Ratio of the last month to the one before it, per calendar day. An activity comparison, not a productivity multiplier.",
    "benchmark": "multiple = merged PRs per calendar day x 7 / the DX weekly median. atBaselinePrSize = the size-baseline month's multiple x the ratio of non-merge commits per day (atBaselinePrSizeByCodeLines uses code lines, the upper reading). Lines per merged PR sum commit diffs, so they overstate each PR's final diff. A PR-volume comparison against a dated external cohort, not accepted work, human productivity or a forecast."
  },
  "months": [
    {
      "month": "2025-10",
      "partial": false,
      "observedCalendarDays": 31.0,
      "commits": 15,
      "nonMergeCommits": 10,
      "mergeCommitShare": 33.3,
      "linesChanged": {
        "code": 8083,
        "tests": 0,
        "docs": 3460,
        "data": 101
      },
      "newDesignDocs": {
        "specs": 0,
        "plans": 0
      },
      "mergedPrs": {
        "total": 0,
        "defaultBranch": 0,
        "otherBranch": 0,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": null,
      "perCalendarDay": {
        "nonMergeCommits": 0.32,
        "codeLines": 260.7,
        "testLines": 0.0,
        "newSpecs": 0.0,
        "mergedPrs": 0.0
      }
    },
    {
      "month": "2025-11",
      "partial": false,
      "observedCalendarDays": 30.0,
      "commits": 64,
      "nonMergeCommits": 48,
      "mergeCommitShare": 25.0,
      "linesChanged": {
        "code": 46073,
        "tests": 19,
        "docs": 2422,
        "data": 7938
      },
      "newDesignDocs": {
        "specs": 0,
        "plans": 0
      },
      "mergedPrs": {
        "total": 8,
        "defaultBranch": 0,
        "otherBranch": 8,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 6.0,
      "perCalendarDay": {
        "nonMergeCommits": 1.6,
        "codeLines": 1535.8,
        "testLines": 0.6,
        "newSpecs": 0.0,
        "mergedPrs": 0.27
      }
    },
    {
      "month": "2025-12",
      "partial": false,
      "observedCalendarDays": 31.0,
      "commits": 52,
      "nonMergeCommits": 40,
      "mergeCommitShare": 23.1,
      "linesChanged": {
        "code": 100697,
        "tests": 847,
        "docs": 10893,
        "data": 1165
      },
      "newDesignDocs": {
        "specs": 0,
        "plans": 0
      },
      "mergedPrs": {
        "total": 9,
        "defaultBranch": 3,
        "otherBranch": 6,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 4.44,
      "perCalendarDay": {
        "nonMergeCommits": 1.29,
        "codeLines": 3248.3,
        "testLines": 27.3,
        "newSpecs": 0.0,
        "mergedPrs": 0.29
      }
    },
    {
      "month": "2026-01",
      "partial": false,
      "observedCalendarDays": 31.0,
      "commits": 157,
      "nonMergeCommits": 106,
      "mergeCommitShare": 32.5,
      "linesChanged": {
        "code": 467383,
        "tests": 35934,
        "docs": 90443,
        "data": 12947
      },
      "newDesignDocs": {
        "specs": 0,
        "plans": 0
      },
      "mergedPrs": {
        "total": 35,
        "defaultBranch": 14,
        "otherBranch": 21,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 3.03,
      "perCalendarDay": {
        "nonMergeCommits": 3.42,
        "codeLines": 15076.9,
        "testLines": 1159.2,
        "newSpecs": 0.0,
        "mergedPrs": 1.13
      }
    },
    {
      "month": "2026-02",
      "partial": false,
      "observedCalendarDays": 28.0,
      "commits": 74,
      "nonMergeCommits": 55,
      "mergeCommitShare": 25.7,
      "linesChanged": {
        "code": 193346,
        "tests": 100434,
        "docs": 235666,
        "data": 809836
      },
      "newDesignDocs": {
        "specs": 0,
        "plans": 0
      },
      "mergedPrs": {
        "total": 5,
        "defaultBranch": 3,
        "otherBranch": 2,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 11.0,
      "perCalendarDay": {
        "nonMergeCommits": 1.96,
        "codeLines": 6905.2,
        "testLines": 3586.9,
        "newSpecs": 0.0,
        "mergedPrs": 0.18
      }
    },
    {
      "month": "2026-03",
      "partial": false,
      "observedCalendarDays": 31.0,
      "commits": 458,
      "nonMergeCommits": 385,
      "mergeCommitShare": 15.9,
      "linesChanged": {
        "code": 750942,
        "tests": 27902,
        "docs": 1085357,
        "data": 644678
      },
      "newDesignDocs": {
        "specs": 13,
        "plans": 22
      },
      "mergedPrs": {
        "total": 47,
        "defaultBranch": 19,
        "otherBranch": 28,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 8.19,
      "perCalendarDay": {
        "nonMergeCommits": 12.42,
        "codeLines": 24223.9,
        "testLines": 900.1,
        "newSpecs": 0.419,
        "mergedPrs": 1.52
      }
    },
    {
      "month": "2026-04",
      "partial": false,
      "observedCalendarDays": 30.0,
      "commits": 963,
      "nonMergeCommits": 857,
      "mergeCommitShare": 11.0,
      "linesChanged": {
        "code": 276376,
        "tests": 59747,
        "docs": 333704,
        "data": 3365950
      },
      "newDesignDocs": {
        "specs": 27,
        "plans": 53
      },
      "mergedPrs": {
        "total": 85,
        "defaultBranch": 33,
        "otherBranch": 52,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 10.08,
      "perCalendarDay": {
        "nonMergeCommits": 28.57,
        "codeLines": 9212.5,
        "testLines": 1991.6,
        "newSpecs": 0.9,
        "mergedPrs": 2.83
      }
    },
    {
      "month": "2026-05",
      "partial": false,
      "observedCalendarDays": 31.0,
      "commits": 1200,
      "nonMergeCommits": 1025,
      "mergeCommitShare": 14.6,
      "linesChanged": {
        "code": 167085,
        "tests": 47602,
        "docs": 163161,
        "data": 253986
      },
      "newDesignDocs": {
        "specs": 31,
        "plans": 46
      },
      "mergedPrs": {
        "total": 128,
        "defaultBranch": 28,
        "otherBranch": 100,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 8.01,
      "perCalendarDay": {
        "nonMergeCommits": 33.06,
        "codeLines": 5389.8,
        "testLines": 1535.5,
        "newSpecs": 1.0,
        "mergedPrs": 4.13
      }
    },
    {
      "month": "2026-06",
      "partial": false,
      "observedCalendarDays": 30.0,
      "commits": 1318,
      "nonMergeCommits": 1132,
      "mergeCommitShare": 14.1,
      "linesChanged": {
        "code": 128636,
        "tests": 35986,
        "docs": 190723,
        "data": 39499
      },
      "newDesignDocs": {
        "specs": 58,
        "plans": 69
      },
      "mergedPrs": {
        "total": 136,
        "defaultBranch": 42,
        "otherBranch": 94,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 8.32,
      "perCalendarDay": {
        "nonMergeCommits": 37.73,
        "codeLines": 4287.9,
        "testLines": 1199.5,
        "newSpecs": 1.933,
        "mergedPrs": 4.53
      }
    },
    {
      "month": "2026-07",
      "partial": false,
      "observedCalendarDays": 31.0,
      "commits": 1591,
      "nonMergeCommits": 1451,
      "mergeCommitShare": 8.8,
      "linesChanged": {
        "code": 143964,
        "tests": 68965,
        "docs": 232354,
        "data": 4248688
      },
      "newDesignDocs": {
        "specs": 57,
        "plans": 81
      },
      "mergedPrs": {
        "total": 131,
        "defaultBranch": 111,
        "otherBranch": 20,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 11.08,
      "perCalendarDay": {
        "nonMergeCommits": 46.81,
        "codeLines": 4644.0,
        "testLines": 2224.7,
        "newSpecs": 1.839,
        "mergedPrs": 4.23
      }
    },
    {
      "month": "2026-08",
      "partial": false,
      "observedCalendarDays": 31.0,
      "commits": 1876,
      "nonMergeCommits": 1691,
      "mergeCommitShare": 9.9,
      "linesChanged": {
        "code": 161735,
        "tests": 113054,
        "docs": 177764,
        "data": 271943
      },
      "newDesignDocs": {
        "specs": 33,
        "plans": 105
      },
      "mergedPrs": {
        "total": 136,
        "defaultBranch": 74,
        "otherBranch": 62,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 12.43,
      "perCalendarDay": {
        "nonMergeCommits": 54.55,
        "codeLines": 5217.3,
        "testLines": 3646.9,
        "newSpecs": 1.065,
        "mergedPrs": 4.39
      }
    },
    {
      "month": "2026-09",
      "partial": false,
      "observedCalendarDays": 30.0,
      "commits": 2569,
      "nonMergeCommits": 2297,
      "mergeCommitShare": 10.6,
      "linesChanged": {
        "code": 328080,
        "tests": 179701,
        "docs": 325941,
        "data": 507530
      },
      "newDesignDocs": {
        "specs": 49,
        "plans": 100
      },
      "mergedPrs": {
        "total": 154,
        "defaultBranch": 66,
        "otherBranch": 88,
        "taskBranch": 0
      },
      "nonMergeCommitsPerMergedPr": 14.92,
      "perCalendarDay": {
        "nonMergeCommits": 76.57,
        "codeLines": 10936.0,
        "testLines": 5990.0,
        "newSpecs": 1.633,
        "mergedPrs": 5.13
      }
    },
    {
      "month": "2026-10",
      "partial": true,
      "observedCalendarDays": 20.395903,
      "commits": 3703,
      "nonMergeCommits": 2395,
      "mergeCommitShare": 35.3,
      "linesChanged": {
        "code": 452791,
        "tests": 245894,
        "docs": 133447,
        "data": 1274515
      },
      "newDesignDocs": {
        "specs": 31,
        "plans": 26
      },
      "mergedPrs": {
        "total": 1045,
        "defaultBranch": 20,
        "otherBranch": 517,
        "taskBranch": 508
      },
      "nonMergeCommitsPerMergedPr": 2.29,
      "perCalendarDay": {
        "nonMergeCommits": 117.43,
        "codeLines": 22200.1,
        "testLines": 12056.0,
        "newSpecs": 1.52,
        "mergedPrs": 51.24
      }
    }
  ],
  "latestComparison": {
    "from": "2026-09",
    "to": "2026-10",
    "toPartial": true,
    "perCalendarDayRatio": {
      "nonMergeCommits": 1.53,
      "codeLines": 2.03,
      "testLines": 2.01,
      "newSpecs": 0.93,
      "mergedPrs": 9.99
    }
  },
  "benchmark": {
    "medianMergedPrsPerWeek": 4.1,
    "cohort": "Daily Cursor users, DX Q1 2026 (64,680 developers, 219 companies)",
    "source": "https://newsletter.getdx.com/p/ai-tooling-benchmarks-pr-throughput",
    "sizeBaseline": "2026-09",
    "months": [
      {
        "month": "2025-10",
        "partial": false,
        "multiple": 0.0,
        "codeLinesPerMergedPr": null,
        "codeAndTestLinesPerMergedPr": null
      },
      {
        "month": "2025-11",
        "partial": false,
        "multiple": 0.46,
        "codeLinesPerMergedPr": 5759,
        "codeAndTestLinesPerMergedPr": 5762
      },
      {
        "month": "2025-12",
        "partial": false,
        "multiple": 0.5,
        "codeLinesPerMergedPr": 11189,
        "codeAndTestLinesPerMergedPr": 11283
      },
      {
        "month": "2026-01",
        "partial": false,
        "multiple": 1.93,
        "codeLinesPerMergedPr": 13354,
        "codeAndTestLinesPerMergedPr": 14380
      },
      {
        "month": "2026-02",
        "partial": false,
        "multiple": 0.3,
        "codeLinesPerMergedPr": 38669,
        "codeAndTestLinesPerMergedPr": 58756
      },
      {
        "month": "2026-03",
        "partial": false,
        "multiple": 2.59,
        "codeLinesPerMergedPr": 15977,
        "codeAndTestLinesPerMergedPr": 16571
      },
      {
        "month": "2026-04",
        "partial": false,
        "multiple": 4.84,
        "codeLinesPerMergedPr": 3251,
        "codeAndTestLinesPerMergedPr": 3954
      },
      {
        "month": "2026-05",
        "partial": false,
        "multiple": 7.05,
        "codeLinesPerMergedPr": 1305,
        "codeAndTestLinesPerMergedPr": 1677
      },
      {
        "month": "2026-06",
        "partial": false,
        "multiple": 7.74,
        "codeLinesPerMergedPr": 946,
        "codeAndTestLinesPerMergedPr": 1210
      },
      {
        "month": "2026-07",
        "partial": false,
        "multiple": 7.21,
        "codeLinesPerMergedPr": 1099,
        "codeAndTestLinesPerMergedPr": 1625
      },
      {
        "month": "2026-08",
        "partial": false,
        "multiple": 7.49,
        "codeLinesPerMergedPr": 1189,
        "codeAndTestLinesPerMergedPr": 2021
      },
      {
        "month": "2026-09",
        "partial": false,
        "multiple": 8.76,
        "codeLinesPerMergedPr": 2130,
        "codeAndTestLinesPerMergedPr": 3297
      },
      {
        "month": "2026-10",
        "partial": true,
        "multiple": 87.48,
        "codeLinesPerMergedPr": 433,
        "codeAndTestLinesPerMergedPr": 669,
        "atBaselinePrSize": 13.44,
        "atBaselinePrSizeByCodeLines": 17.79
      }
    ]
  }
}
