{
  "schemaVersion": 1,
  "generatedBy": "scripts/playbook-activity.py",
  "window": {
    "startLocal": "2025-10-01T00:00:00-07:00",
    "endExclusiveLocal": "2026-11-01T00:00:00-07:00",
    "timeZone": "America/Vancouver"
  },
  "scope": {
    "gitAuthors": [
      "hamed taheri",
      "hataheri"
    ],
    "gitRepositoriesScanned": 40,
    "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. multipleWithoutTaskBranchPrs leaves out repair PRs merged into pilot/ task branches. linesPerMonthVsReferenceDeveloper = lines changed per 30 days / the reference developer's monthly lines (sizeReference); commit diffs include unmerged work, so it is an upper reading. A volume comparison against dated external cohorts, not accepted work, human productivity or a forecast.",
    "mergedPrLines": "GitHub additions plus deletions per merged PR, all files including lockfiles and generated output; median, overall and by destination. A release PR from an integration branch re-carries the work it integrates."
  },
  "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
      },
      "mergedPrLines": {
        "measured": 8,
        "median": 1034,
        "medianByDestination": {
          "defaultBranch": null,
          "otherBranch": 1034,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 9,
        "median": 3170,
        "medianByDestination": {
          "defaultBranch": 1049,
          "otherBranch": 4630,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 35,
        "median": 2157,
        "medianByDestination": {
          "defaultBranch": 5951,
          "otherBranch": 906,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 5,
        "median": 12635,
        "medianByDestination": {
          "defaultBranch": 12635,
          "otherBranch": 17940,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 47,
        "median": 9457,
        "medianByDestination": {
          "defaultBranch": 23674,
          "otherBranch": 1271,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 85,
        "median": 4363,
        "medianByDestination": {
          "defaultBranch": 7853,
          "otherBranch": 2182,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 128,
        "median": 506,
        "medianByDestination": {
          "defaultBranch": 1012,
          "otherBranch": 466,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 136,
        "median": 392,
        "medianByDestination": {
          "defaultBranch": 878,
          "otherBranch": 264,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 131,
        "median": 251,
        "medianByDestination": {
          "defaultBranch": 248,
          "otherBranch": 261,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 136,
        "median": 578,
        "medianByDestination": {
          "defaultBranch": 580,
          "otherBranch": 578,
          "taskBranch": null
        }
      },
      "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
      },
      "mergedPrLines": {
        "measured": 154,
        "median": 788,
        "medianByDestination": {
          "defaultBranch": 2506,
          "otherBranch": 586,
          "taskBranch": null
        }
      },
      "nonMergeCommitsPerMergedPr": 14.92,
      "perCalendarDay": {
        "nonMergeCommits": 76.57,
        "codeLines": 10936.0,
        "testLines": 5990.0,
        "newSpecs": 1.633,
        "mergedPrs": 5.13
      }
    },
    {
      "month": "2026-10",
      "partial": false,
      "observedCalendarDays": 31.0,
      "commits": 6597,
      "nonMergeCommits": 4338,
      "mergeCommitShare": 34.2,
      "linesChanged": {
        "code": 622589,
        "tests": 389623,
        "docs": 240532,
        "data": 1294836
      },
      "newDesignDocs": {
        "specs": 84,
        "plans": 44
      },
      "mergedPrs": {
        "total": 2155,
        "defaultBranch": 37,
        "otherBranch": 1071,
        "taskBranch": 1047
      },
      "mergedPrLines": {
        "measured": 2155,
        "median": 139,
        "medianByDestination": {
          "defaultBranch": 5656,
          "otherBranch": 276,
          "taskBranch": 68
        }
      },
      "nonMergeCommitsPerMergedPr": 2.01,
      "perCalendarDay": {
        "nonMergeCommits": 139.94,
        "codeLines": 20083.5,
        "testLines": 12568.5,
        "newSpecs": 2.71,
        "mergedPrs": 69.52
      }
    }
  ],
  "latestComparison": {
    "from": "2026-09",
    "to": "2026-10",
    "toPartial": false,
    "perCalendarDayRatio": {
      "nonMergeCommits": 1.83,
      "codeLines": 1.84,
      "testLines": 2.1,
      "newSpecs": 1.66,
      "mergedPrs": 13.55
    }
  },
  "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",
    "sizeReference": {
      "medianPrLines": 122,
      "linesPerDeveloperMonth": 20972,
      "period": "2026-06",
      "source": "https://www.greptile.com/reports/state-of-ai-coding"
    },
    "months": [
      {
        "month": "2025-10",
        "partial": false,
        "multiple": 0.0,
        "codeLinesPerMergedPr": null,
        "codeAndTestLinesPerMergedPr": null,
        "multipleWithoutTaskBranchPrs": 0.0,
        "medianMergedPrLines": null,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 0.37,
          "code": 0.37
        }
      },
      {
        "month": "2025-11",
        "partial": false,
        "multiple": 0.46,
        "codeLinesPerMergedPr": 5759,
        "codeAndTestLinesPerMergedPr": 5762,
        "multipleWithoutTaskBranchPrs": 0.46,
        "medianMergedPrLines": 1034,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 2.2,
          "code": 2.2
        }
      },
      {
        "month": "2025-12",
        "partial": false,
        "multiple": 0.5,
        "codeLinesPerMergedPr": 11189,
        "codeAndTestLinesPerMergedPr": 11283,
        "multipleWithoutTaskBranchPrs": 0.5,
        "medianMergedPrLines": 3170,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 4.69,
          "code": 4.65
        }
      },
      {
        "month": "2026-01",
        "partial": false,
        "multiple": 1.93,
        "codeLinesPerMergedPr": 13354,
        "codeAndTestLinesPerMergedPr": 14380,
        "multipleWithoutTaskBranchPrs": 1.93,
        "medianMergedPrLines": 2157,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 23.23,
          "code": 21.57
        }
      },
      {
        "month": "2026-02",
        "partial": false,
        "multiple": 0.3,
        "codeLinesPerMergedPr": 38669,
        "codeAndTestLinesPerMergedPr": 58756,
        "multipleWithoutTaskBranchPrs": 0.3,
        "medianMergedPrLines": 12635,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 15.01,
          "code": 9.88
        }
      },
      {
        "month": "2026-03",
        "partial": false,
        "multiple": 2.59,
        "codeLinesPerMergedPr": 15977,
        "codeAndTestLinesPerMergedPr": 16571,
        "multipleWithoutTaskBranchPrs": 2.59,
        "medianMergedPrLines": 9457,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 35.94,
          "code": 34.65
        }
      },
      {
        "month": "2026-04",
        "partial": false,
        "multiple": 4.84,
        "codeLinesPerMergedPr": 3251,
        "codeAndTestLinesPerMergedPr": 3954,
        "multipleWithoutTaskBranchPrs": 4.84,
        "medianMergedPrLines": 4363,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 16.03,
          "code": 13.18
        }
      },
      {
        "month": "2026-05",
        "partial": false,
        "multiple": 7.05,
        "codeLinesPerMergedPr": 1305,
        "codeAndTestLinesPerMergedPr": 1677,
        "multipleWithoutTaskBranchPrs": 7.05,
        "medianMergedPrLines": 506,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 9.91,
          "code": 7.71
        }
      },
      {
        "month": "2026-06",
        "partial": false,
        "multiple": 7.74,
        "codeLinesPerMergedPr": 946,
        "codeAndTestLinesPerMergedPr": 1210,
        "multipleWithoutTaskBranchPrs": 7.74,
        "medianMergedPrLines": 392,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 7.85,
          "code": 6.13
        }
      },
      {
        "month": "2026-07",
        "partial": false,
        "multiple": 7.21,
        "codeLinesPerMergedPr": 1099,
        "codeAndTestLinesPerMergedPr": 1625,
        "multipleWithoutTaskBranchPrs": 7.21,
        "medianMergedPrLines": 251,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 9.83,
          "code": 6.64
        }
      },
      {
        "month": "2026-08",
        "partial": false,
        "multiple": 7.49,
        "codeLinesPerMergedPr": 1189,
        "codeAndTestLinesPerMergedPr": 2021,
        "multipleWithoutTaskBranchPrs": 7.49,
        "medianMergedPrLines": 578,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 12.68,
          "code": 7.46
        }
      },
      {
        "month": "2026-09",
        "partial": false,
        "multiple": 8.76,
        "codeLinesPerMergedPr": 2130,
        "codeAndTestLinesPerMergedPr": 3297,
        "multipleWithoutTaskBranchPrs": 8.76,
        "medianMergedPrLines": 788,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 24.21,
          "code": 15.64
        }
      },
      {
        "month": "2026-10",
        "partial": false,
        "multiple": 118.69,
        "codeLinesPerMergedPr": 289,
        "codeAndTestLinesPerMergedPr": 470,
        "multipleWithoutTaskBranchPrs": 61.02,
        "medianMergedPrLines": 139,
        "linesPerMonthVsReferenceDeveloper": {
          "codeAndTests": 46.71,
          "code": 28.73
        },
        "atBaselinePrSize": 16.02,
        "atBaselinePrSizeByCodeLines": 16.1
      }
    ]
  }
}
