)]}'
{
  "log": [
    {
      "commit": "4f0b781bfb20047ffa5830192a0c62e691df5d5e",
      "tree": "bd28b9cf73631631ded7f94adb7293011dad3ff0",
      "parents": [
        "3222df7b84225c8293ff7a776b64d7432a09999e"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Nov 12 15:44:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 15:44:31 2026 +0800"
      },
      "message": "chore(deps-dev): bump fast-xml-parser from 5.11.1 to 5.12.0 in /site (#117)\n\nBumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 5.11.1 to 5.12.0.\n- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)\n- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.11.1...v5.12.0)\n\n---\nupdated-dependencies:\n- dependency-name: fast-xml-parser\n  dependency-version: 5.12.0\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "3222df7b84225c8293ff7a776b64d7432a09999e",
      "tree": "b75ecaad88631cae2db6291c13020a8cdb799d17",
      "parents": [
        "dc84b4cba2fa3922a2de65d18af34978d0a34763"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Tue Sep 15 06:48:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 06:48:46 2026 +0800"
      },
      "message": "Rebuild the website with Docusaurus (#110)"
    },
    {
      "commit": "dc84b4cba2fa3922a2de65d18af34978d0a34763",
      "tree": "0724ed74bf157c11fd8386f076dfb53662485ee3",
      "parents": [
        "7585f4c8d610763e2d3a8754b9d54701c60bbe70"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Mon Sep 14 21:35:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 21:35:37 2026 +0800"
      },
      "message": "Configure staging for website previews (#109)"
    },
    {
      "commit": "7585f4c8d610763e2d3a8754b9d54701c60bbe70",
      "tree": "aa7ff877da9637e62296a98f0af19a8330a6f820",
      "parents": [
        "6743f0f4692c42e3d5ed4443082c5329e661bdbc"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Mon Sep 14 21:26:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 21:26:22 2026 +0800"
      },
      "message": "Move project metadata from DOAP to .asf.yaml (#108)"
    },
    {
      "commit": "6743f0f4692c42e3d5ed4443082c5329e661bdbc",
      "tree": "d8ccc7ef0bf464b08df04f43f1ed6cb4d1235142",
      "parents": [
        "1081d378d612ee2943d90a76adfe7f2c62302c28"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Mon Sep 14 21:05:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 21:05:13 2026 +0800"
      },
      "message": "chore: monitoring scripts (#107)\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e"
    },
    {
      "commit": "1081d378d612ee2943d90a76adfe7f2c62302c28",
      "tree": "5d5a3dc3762a9a476fb4b108f7fa8f78efe434d2",
      "parents": [
        "098dda094cfc543ca5cf7f557d7e86e59cb2dc43"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Sep 08 08:03:57 2026 -0500"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Sep 08 08:03:57 2026 -0500"
      },
      "message": "Document LoadData vote loading and migrate monitoring README to Markdown.\n\nRecord v3 vote-results.json as the tally source of truth, warn on\nold-school txt/ini, and refuse v2 raw_board_votes.json. Point whatif\nand the STV tests at the same loaders.\n\nCo-authored-by: Grok \u003cgrok@x.ai\u003e\n"
    },
    {
      "commit": "098dda094cfc543ca5cf7f557d7e86e59cb2dc43",
      "tree": "f8993b1cb5e58880d5b4c837faf88ffe749ff8d7",
      "parents": [
        "7b9761f180166e6599eb95cebd454e8e933eb493"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Sep 08 01:51:53 2026 -0500"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Sep 08 01:52:53 2026 -0500"
      },
      "message": "Unify STV vote loading behind LoadData; thin whatif CLI.\n\nTreat v3 vote-results.json as the tally source of truth. Warn on\nold-school txt/ini, refuse v2 raw_board_votes.json, and keep the\nwhatif.rb positional argv via argparse REMAINDER. Fix run_stv.py\ncalling read_votefile with a removed extra argument.\n\nCo-authored-by: Grok \u003cgrok@x.ai\u003e\n"
    },
    {
      "commit": "7b9761f180166e6599eb95cebd454e8e933eb493",
      "tree": "294e0742eaa596d9a96dd252f5ccce6617e49a2a",
      "parents": [
        "5701d5649195235a42bf418373fc610c15fdbf38"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Sep 03 08:11:45 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Sep 03 08:11:45 2026 +0800"
      },
      "message": "Archive stv-paper\n\nThe paper can be accessed from other reliable sources and we no longer\nneed a Pascal demo program.\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e\n"
    },
    {
      "commit": "5701d5649195235a42bf418373fc610c15fdbf38",
      "tree": "fdd66a6945795b160a56de3bf59ae9d4eff767d5",
      "parents": [
        "46973111175c50cca953df21143fccf79581d13d"
      ],
      "author": {
        "name": "Sebb",
        "email": "sebbASF@users.noreply.github.com",
        "time": "Tue Aug 11 23:58:58 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 06:58:58 2026 +0800"
      },
      "message": "No need to involve shell here (#104)"
    },
    {
      "commit": "46973111175c50cca953df21143fccf79581d13d",
      "tree": "063d0cd09fde190cc4ecca22470a3c7ef82de48b",
      "parents": [
        "d0aa7e9ab92880217a5a36046faf3eb07d273e4c"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Jul 30 18:31:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 18:31:33 2026 +0800"
      },
      "message": "Show ASF IDs on STV ballots (#103)\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e"
    },
    {
      "commit": "d0aa7e9ab92880217a5a36046faf3eb07d273e4c",
      "tree": "baa43ccd880b3d33cf4d97a2a7f78bcbf8817d69",
      "parents": [
        "215bb8bc363864e3311100c7f9d73e20ac1e4647"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Apr 02 11:32:10 2026 -0500"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Apr 02 11:32:10 2026 -0500"
      },
      "message": "Use aider/Grok to construct an architecture overview of v3\n"
    },
    {
      "commit": "215bb8bc363864e3311100c7f9d73e20ac1e4647",
      "tree": "0bf19c78c7af1b9259df8889d9182775f0a05dd2",
      "parents": [
        "564fdf2f35cc9bbf874dd840706bbc3b12903ffe",
        "e39d067cae4ad324475608fbbc793f081759f37c"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@apache.org",
        "time": "Mon Mar 09 05:59:04 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 05:59:04 2026 -0500"
      },
      "message": "Merge pull request #96 from apache/remove-old-files\n\nRemove old files"
    },
    {
      "commit": "e39d067cae4ad324475608fbbc793f081759f37c",
      "tree": "0bf19c78c7af1b9259df8889d9182775f0a05dd2",
      "parents": [
        "564fdf2f35cc9bbf874dd840706bbc3b12903ffe"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Mon Mar 09 11:09:37 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Mon Mar 09 11:09:37 2026 +0800"
      },
      "message": "Remove old files\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e\n"
    },
    {
      "commit": "564fdf2f35cc9bbf874dd840706bbc3b12903ffe",
      "tree": "60f2aceb96b9bd6ffed4f1e5f731399150654c7f",
      "parents": [
        "870f5661cb04213b90109e55c63d41da6bf97ef8"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 09:21:20 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 09:21:20 2026 -0600"
      },
      "message": "factor out loading the vote file, enable v3\n"
    },
    {
      "commit": "870f5661cb04213b90109e55c63d41da6bf97ef8",
      "tree": "403a5636a1c1cc741a3e0a7e2d2aa5410db0decc",
      "parents": [
        "1e584ac373513dda1518eab50c76b41f78ba60b6"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 09:07:13 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 09:07:13 2026 -0600"
      },
      "message": "factor out load_v3, for whatif support\n"
    },
    {
      "commit": "1e584ac373513dda1518eab50c76b41f78ba60b6",
      "tree": "bdbab35c35c78cdf0b7b8da10fad1f62968afcfb",
      "parents": [
        "f65ec112da20e2f3f0ec483390e122753b1c0410"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 06:46:35 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 06:46:35 2026 -0600"
      },
      "message": "tweak to use pathlib rather than argv[0]\n"
    },
    {
      "commit": "f65ec112da20e2f3f0ec483390e122753b1c0410",
      "tree": "99aece6aa53b74eabd8060a8955d5650c29c84e9",
      "parents": [
        "9c7d674c61eb4983280df89689d1230723917c28"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 06:30:30 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 06:30:30 2026 -0600"
      },
      "message": "whitespace only. no functional change.\n"
    },
    {
      "commit": "9c7d674c61eb4983280df89689d1230723917c28",
      "tree": "a533decb49792e6a524dfc45a0a8aa1da23554f7",
      "parents": [
        "b9ec1266085407efbddd910974beb96f535b1804"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 06:16:19 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 06:16:19 2026 -0600"
      },
      "message": "Some simplifications and tweaks for more modern code.\n"
    },
    {
      "commit": "b9ec1266085407efbddd910974beb96f535b1804",
      "tree": "d76492ab4dc829c82420cae626224b41d6567c77",
      "parents": [
        "e81e78f99fc2f48aeb2e802b4fac172f21c623f1"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 06:12:09 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Mar 06 06:12:09 2026 -0600"
      },
      "message": "There is no workable \"new format\" inputs. Strip that broken \"feature\" out.\n"
    },
    {
      "commit": "e81e78f99fc2f48aeb2e802b4fac172f21c623f1",
      "tree": "25b06eaff7ddf9418922e94c96e77043ab710fbd",
      "parents": [
        "1412802dfd3174e9f7209ef2dd4396ab538d3fe3"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 17:07:25 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 17:07:25 2026 -0600"
      },
      "message": "final tweak for new vote-results.json format\n"
    },
    {
      "commit": "1412802dfd3174e9f7209ef2dd4396ab538d3fe3",
      "tree": "a5343db524f73c8abd6e446f46a21232f20b5b30",
      "parents": [
        "6f53030cdadb4494d3cbe1b018fac94f3bb7ff8f"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 05:59:29 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 05:59:29 2026 -0600"
      },
      "message": "whitespace in an email is important. don\u0027t compress/lose it.\n"
    },
    {
      "commit": "6f53030cdadb4494d3cbe1b018fac94f3bb7ff8f",
      "tree": "dd49b4fde811093964b944a42fc01d25cd2b6524",
      "parents": [
        "2c8dd65012846c783e0f42d5e848cef3e0c45a56"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 03:28:03 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 03:28:03 2026 -0600"
      },
      "message": "feat: make list_elections return edict with issue_count and person_count\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "2c8dd65012846c783e0f42d5e848cef3e0c45a56",
      "tree": "b86f108744bd38f9a7a5e85c8ab076077f0b282e",
      "parents": [
        "ce0467f6b5383164cb2270cabec2d45bbd038f2a"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 03:28:01 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein (aider)",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 03:28:01 2026 -0600"
      },
      "message": "fix: correct typo in log message and add optional pbar import\n"
    },
    {
      "commit": "ce0467f6b5383164cb2270cabec2d45bbd038f2a",
      "tree": "377825179d65173e94e8e16cf2651466bb230c47",
      "parents": [
        "2d68602614db5d0153bb8d4e101a46e3afaedfcd"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 01:31:01 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 01:31:01 2026 -0600"
      },
      "message": "remove some print() to clean up output\n"
    },
    {
      "commit": "2d68602614db5d0153bb8d4e101a46e3afaedfcd",
      "tree": "d796a622431a398fba8b251b3a881e641a1adb8d",
      "parents": [
        "9d905cb877c9892b0323d48e6b5229b4bf417218"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 01:26:30 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 01:26:30 2026 -0600"
      },
      "message": "Improve tallying options and storage.\n\n* --output json now includes all issues into one dict, and a list of\n  all those who voted (not on what or how; just \"seen\")\n* --issue_id now allows tallying a single issue for testing/speed\n* improve some logging; switch some stuff from print()\n* Election.tally_issue() returns the list of voters seen, so support\n  the above JSON output feature\n"
    },
    {
      "commit": "9d905cb877c9892b0323d48e6b5229b4bf417218",
      "tree": "24cb1abb15faf7a19ca11cd30eab31e612a1d3a9",
      "parents": [
        "174aca193bad4ae6cf09c8b1b81294f8fbc8fefa"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 00:37:24 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Mar 05 00:37:24 2026 -0600"
      },
      "message": "Improve the trimming of empty votes in an STV Issue.\n"
    },
    {
      "commit": "174aca193bad4ae6cf09c8b1b81294f8fbc8fefa",
      "tree": "5f79de9bbd5a6e019bd76464b6c0b5e1b056736d",
      "parents": [
        "6b17ab25ead6638b001c03c2c9c1debc13a29c72"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Mar 03 22:33:14 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Mar 03 22:33:14 2026 -0600"
      },
      "message": "Read/process v3 result files in the stv_tool.py.\n"
    },
    {
      "commit": "6b17ab25ead6638b001c03c2c9c1debc13a29c72",
      "tree": "89cc1f4214d3ea60cc97b5dbce8c7048bf9476c6",
      "parents": [
        "dcf4fc03e6d7eb10d628ce4070c5e31d3c6170a3"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Mar 03 21:47:19 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Mar 03 21:47:19 2026 -0600"
      },
      "message": "expand result details\n"
    },
    {
      "commit": "dcf4fc03e6d7eb10d628ce4070c5e31d3c6170a3",
      "tree": "137866645ef949bbf5be4a8a6cec694782bc6aaf",
      "parents": [
        "c3969e74cf38ad804520c9bcebe5665bf8def6bc"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Mar 01 02:37:48 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Mar 01 02:37:48 2026 -0600"
      },
      "message": "use correct grammar. Fixes #90\n"
    },
    {
      "commit": "c3969e74cf38ad804520c9bcebe5665bf8def6bc",
      "tree": "4c2f0d464e546b0494f000538cdcb62c9f5fb661",
      "parents": [
        "c72df2af47b5a34333c5e45614acb6648ef14569"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 28 12:03:28 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 28 12:03:28 2026 -0600"
      },
      "message": "feat: add description rewriting for issues in vote-on page\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "c72df2af47b5a34333c5e45614acb6648ef14569",
      "tree": "d9a54dee9fc8a9c9238ed48fce02caff571f0ed3",
      "parents": [
        "eaa66342b22a4b4fd9c6ae71a3c64bfc8a75901f",
        "e15dd60e21561f918032dcdfa770f6725ba592c8"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@apache.org",
        "time": "Fri Feb 27 21:00:23 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 21:00:23 2026 -0700"
      },
      "message": "Merge pull request #87 from apache/tisonkun-patch-1\n\nAdd pull request settings to .asf.yaml"
    },
    {
      "commit": "e15dd60e21561f918032dcdfa770f6725ba592c8",
      "tree": "d9a54dee9fc8a9c9238ed48fce02caff571f0ed3",
      "parents": [
        "eaa66342b22a4b4fd9c6ae71a3c64bfc8a75901f"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Sat Feb 28 11:58:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 28 11:58:57 2026 +0800"
      },
      "message": "Add pull request settings to .asf.yaml\n\n* allow_update_branch enables the button to auto merge/rebase PR; this simplifies the manual workflow with git.\r\n* del_branch_on_merge is for reducing stable branches. Upon PR merged we\u0027ll have the change set in upstream\u0027s commit history already."
    },
    {
      "commit": "eaa66342b22a4b4fd9c6ae71a3c64bfc8a75901f",
      "tree": "9b3d95485162b3930d8073e6ea81ee45a5ae0167",
      "parents": [
        "6c1d8e3b044e2ad01f2e0a3b9f975ea480018f6e",
        "e8d71e54469cfdc22b09f5b6e1b499fd7dc23c5a"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@apache.org",
        "time": "Fri Feb 27 20:54:34 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 20:54:34 2026 -0700"
      },
      "message": "Merge pull request #86 from apache/revert-85-tisonkun-patch-1\n\nRevert \"Enable auto merge and branch management for PRs\""
    },
    {
      "commit": "e8d71e54469cfdc22b09f5b6e1b499fd7dc23c5a",
      "tree": "9b3d95485162b3930d8073e6ea81ee45a5ae0167",
      "parents": [
        "6c1d8e3b044e2ad01f2e0a3b9f975ea480018f6e"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 21:53:44 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 21:53:44 2026 -0600"
      },
      "message": "Revert \"Enable auto merge and branch management for PRs (#85)\"\n\nThis reverts commit 6c1d8e3b044e2ad01f2e0a3b9f975ea480018f6e.\n"
    },
    {
      "commit": "6c1d8e3b044e2ad01f2e0a3b9f975ea480018f6e",
      "tree": "3c8e7076e4f7b63d0e5a9abcf3165bf1ff5e6b0c",
      "parents": [
        "7cc80ab1ddc3d28ef17128e8db23279d6f0dc0bb"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Sat Feb 28 11:50:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 28 11:50:23 2026 +0800"
      },
      "message": "Enable auto merge and branch management for PRs (#85)\n\n"
    },
    {
      "commit": "7cc80ab1ddc3d28ef17128e8db23279d6f0dc0bb",
      "tree": "9b3d95485162b3930d8073e6ea81ee45a5ae0167",
      "parents": [
        "f0b723464679dc2cf556181fb520a60454e7bd17",
        "299fb677383a4a1c468306e93c1404152f681995"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@apache.org",
        "time": "Fri Feb 27 20:37:10 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 20:37:10 2026 -0700"
      },
      "message": "Merge pull request #84 from apache/display\n\nuv run ruff format"
    },
    {
      "commit": "299fb677383a4a1c468306e93c1404152f681995",
      "tree": "9b3d95485162b3930d8073e6ea81ee45a5ae0167",
      "parents": [
        "f0b723464679dc2cf556181fb520a60454e7bd17"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Sat Feb 28 11:34:16 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Sat Feb 28 11:34:55 2026 +0800"
      },
      "message": "uv run ruff format\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e\n"
    },
    {
      "commit": "f0b723464679dc2cf556181fb520a60454e7bd17",
      "tree": "d0e06eb7453481082ea8625e11cb03546319fc9e",
      "parents": [
        "0afdf6bcb8876097afdf43048f6e3a3b8f20bf43",
        "098f5d6bc1f0bd55e22ca0192e4bf04b6ab30e6d"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@apache.org",
        "time": "Fri Feb 27 20:33:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 27 20:33:57 2026 -0700"
      },
      "message": "Merge pull request #83 from apache/display\n\nDisplay vote creator and authz clear"
    },
    {
      "commit": "098f5d6bc1f0bd55e22ca0192e4bf04b6ab30e6d",
      "tree": "d0e06eb7453481082ea8625e11cb03546319fc9e",
      "parents": [
        "0afdf6bcb8876097afdf43048f6e3a3b8f20bf43"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Sat Feb 28 11:31:31 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Sat Feb 28 11:31:31 2026 +0800"
      },
      "message": "Display vote creator and authz clear\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e\n"
    },
    {
      "commit": "0afdf6bcb8876097afdf43048f6e3a3b8f20bf43",
      "tree": "8ba256de1a68f4dac142799cd216f48d3ac2ae74",
      "parents": [
        "b62561d0b896534a8618d52cdda7f310b589175a",
        "0bce64a47704608ac25a740b9efd50be069dd313"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Sat Feb 28 06:40:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 28 06:40:16 2026 +0800"
      },
      "message": "Merge pull request #68 from apache/sortable-placeholder\n\nEmpty hint should be excluded from sortable elements"
    },
    {
      "commit": "b62561d0b896534a8618d52cdda7f310b589175a",
      "tree": "617832dd19c9bb29bffab5ab58a0cdd64ab9b16c",
      "parents": [
        "972fb5577331a72ee3b4a20fee9fe230cd05be36"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:49:44 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:49:44 2026 -0600"
      },
      "message": "switch shebang to \"uv run\"\n"
    },
    {
      "commit": "972fb5577331a72ee3b4a20fee9fe230cd05be36",
      "tree": "2e6b1782c95b36e52c98793d5ef83a4029b11237",
      "parents": [
        "12fe75b739a86572223c00685e6e7f32ca8f1d53"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:17:36 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:17:36 2026 -0600"
      },
      "message": "chore: add display name to email sender\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "12fe75b739a86572223c00685e6e7f32ca8f1d53",
      "tree": "931005a3fe90098fd69fb0badbe608cffeba945a",
      "parents": [
        "1447c5e2aa0e1840188d5736656750c6f5efa923"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:16:35 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:16:35 2026 -0600"
      },
      "message": "fix: update sender email to voter@apache.org\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "1447c5e2aa0e1840188d5736656750c6f5efa923",
      "tree": "1753255b8d5a341259ff36f3092da65fcc632912",
      "parents": [
        "a8641e51731935f347eb2fa633ed5179209f7a54"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:14:22 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:14:22 2026 -0600"
      },
      "message": "feat: implement EZT template rendering for voter emails\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "a8641e51731935f347eb2fa633ed5179209f7a54",
      "tree": "3d451ec5a3f375d46f90b14931e973252ec3f239",
      "parents": [
        "b6a278541b77109c66a76901d640c327cc543e75"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:04:30 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 08:04:30 2026 -0600"
      },
      "message": "feat: add mail-voters.py script for emailing eligible voters\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "b6a278541b77109c66a76901d640c327cc543e75",
      "tree": "8269fdd9a953ab55fd91fbb1be12b86bf26fd4da",
      "parents": [
        "59c991776e2f3389cebc40083d04cb33c8b57364"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 07:40:54 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 07:40:54 2026 -0600"
      },
      "message": "refactor: return voter records as EasyDict objects in get_voters_for_email\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "59c991776e2f3389cebc40083d04cb33c8b57364",
      "tree": "151241fbc8fd3285ebcce82945d1df318ba59adb",
      "parents": [
        "a91c55dc0fac2f680f6f3b063a289151b7ceaf2e"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 07:39:07 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 27 07:39:07 2026 -0600"
      },
      "message": "feat: add get_voters_for_email method and include name in voting persons query\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "a91c55dc0fac2f680f6f3b063a289151b7ceaf2e",
      "tree": "78eb96d3f62944fa1a400879a570d27bfb540499",
      "parents": [
        "ce01b6274788465eecd4a2fa84cad830513fdae0"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Feb 26 12:48:16 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Thu Feb 26 12:52:04 2026 -0600"
      },
      "message": "add endpoint for issue support documents\n"
    },
    {
      "commit": "ce01b6274788465eecd4a2fa84cad830513fdae0",
      "tree": "9ae6d6d9542f91aeb77c5e03566245a01e9d8778",
      "parents": [
        "decff64ccd1cf7749a260738d518a33183cabc36",
        "8de5ff1c5ece532f54d648afd52423d5e63b5134"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Feb 26 16:39:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 16:39:20 2026 +0800"
      },
      "message": "Merge pull request #72 from apache/agents\n\nAdd AGENTS.md"
    },
    {
      "commit": "8de5ff1c5ece532f54d648afd52423d5e63b5134",
      "tree": "9ae6d6d9542f91aeb77c5e03566245a01e9d8778",
      "parents": [
        "cdc58a61c4a444c1811b6cdf4a09902964a253c6"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Feb 26 09:27:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 09:27:02 2026 +0800"
      },
      "message": "Update AGENTS.md\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "cdc58a61c4a444c1811b6cdf4a09902964a253c6",
      "tree": "a3041a8ee10d6e5f5ac324d44c2790fab001174f",
      "parents": [
        "decff64ccd1cf7749a260738d518a33183cabc36"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Feb 26 09:19:09 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Feb 26 09:19:09 2026 +0800"
      },
      "message": "Add AGENTS.md\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e\n"
    },
    {
      "commit": "decff64ccd1cf7749a260738d518a33183cabc36",
      "tree": "21f7f158eb581ac737da2cd2626a71d3295361e9",
      "parents": [
        "6a85428dfa4d66d477ee06dc8d1163e3127f3a8c",
        "5639fdfc03a0ede5ea42235a9eab5b4b95459387"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Thu Feb 26 08:58:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 08:58:23 2026 +0800"
      },
      "message": "Merge pull request #69 from sebbASF/ruff\n\nThist fixes the current linting errors"
    },
    {
      "commit": "5639fdfc03a0ede5ea42235a9eab5b4b95459387",
      "tree": "21f7f158eb581ac737da2cd2626a71d3295361e9",
      "parents": [
        "6a85428dfa4d66d477ee06dc8d1163e3127f3a8c"
      ],
      "author": {
        "name": "Sebb",
        "email": "sebb@apache.org",
        "time": "Wed Feb 25 17:37:52 2026 +0000"
      },
      "committer": {
        "name": "Sebb",
        "email": "sebb@apache.org",
        "time": "Wed Feb 25 17:37:52 2026 +0000"
      },
      "message": "ruff fixes\n"
    },
    {
      "commit": "0bce64a47704608ac25a740b9efd50be069dd313",
      "tree": "d2b21e8c42bfa9d2e6012ee8128efe2c50e23159",
      "parents": [
        "6a85428dfa4d66d477ee06dc8d1163e3127f3a8c"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Wed Feb 25 20:20:50 2026 +0800"
      },
      "committer": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Wed Feb 25 20:20:50 2026 +0800"
      },
      "message": "Empty hint should be excluded from sortable elements\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e\n"
    },
    {
      "commit": "6a85428dfa4d66d477ee06dc8d1163e3127f3a8c",
      "tree": "9e4a65cb3c1304f8836090b7fc406f37b52e0d01",
      "parents": [
        "d09cfa96da3a38fe40c84c58354482748c88de74"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Feb 24 18:36:28 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Tue Feb 24 18:36:28 2026 -0600"
      },
      "message": "Link to ASF Privacy Policy. Remove private policy page.\n"
    },
    {
      "commit": "d09cfa96da3a38fe40c84c58354482748c88de74",
      "tree": "49167340cc8876467558bba8b45055e7a6ebdf5a",
      "parents": [
        "818919a133153c033696b060569abe596ff72fe5"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Mon Feb 23 09:47:02 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Mon Feb 23 09:47:02 2026 -0600"
      },
      "message": "docs: improve comments and documentation in create-election.py and election.yaml.sample\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "818919a133153c033696b060569abe596ff72fe5",
      "tree": "7e6b9b6906ff57649e8f99e9bfc2cad85a051035",
      "parents": [
        "41903940eac27daa74fd2bac6bf3f167351e568b"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Mon Feb 23 09:34:25 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Mon Feb 23 09:34:25 2026 -0600"
      },
      "message": "docs: update sample election YAML to use record list and Unix timestamps\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "41903940eac27daa74fd2bac6bf3f167351e568b",
      "tree": "037ed452ca0cee7f52c6d4b733d41cdeadfa94c0",
      "parents": [
        "356107fa575207a0ea1a5f5c2a1163141f5e6a15"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Mon Feb 23 07:32:49 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Mon Feb 23 07:32:49 2026 -0600"
      },
      "message": "Various fixes for election tallying.\n\n* is_tampered() is now available for both open and closed elections.\n* tallying now understands that a person may have not voted on an issue\n\n.. separate: quiet down some print() calls\n"
    },
    {
      "commit": "356107fa575207a0ea1a5f5c2a1163141f5e6a15",
      "tree": "cdc93c76e0abc93fa347cd93cde8c82949926c5a",
      "parents": [
        "2fe46a1d59d46ebb5ed30cecbd68cbd5ce22fb29"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Feb 22 23:29:47 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Feb 22 23:29:47 2026 -0600"
      },
      "message": "clarify what run-mode is being used.\n"
    },
    {
      "commit": "2fe46a1d59d46ebb5ed30cecbd68cbd5ce22fb29",
      "tree": "14fc4f8e3795e40ebf5bd4fd8869e9b2dd1b81f9",
      "parents": [
        "38fcdfde21a3793be0095b2b149fb46add42c649"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Feb 22 23:26:49 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Feb 22 23:26:49 2026 -0600"
      },
      "message": "rebuild to run standalone, or under hypercorn/etc\n"
    },
    {
      "commit": "38fcdfde21a3793be0095b2b149fb46add42c649",
      "tree": "9396abc226e5f62ccaa3d81e1533c5a6a36ace7a",
      "parents": [
        "2b10e79ce4de5f6e58df1bc4bdd8072b8a10a3a9"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Feb 22 00:09:21 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Feb 22 00:12:21 2026 -0600"
      },
      "message": "Grok made a mistake and is owning up to it. Reverting the erroneous change to c_edit_issue.\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "2b10e79ce4de5f6e58df1bc4bdd8072b8a10a3a9",
      "tree": "ba4941bbfbff348c6ab04a6b95246cebd774c520",
      "parents": [
        "26c7d5406ffb5f02bf93e6696d1ee1503c8a57c7"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Feb 22 00:05:48 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sun Feb 22 00:05:48 2026 -0600"
      },
      "message": "feat: add queries and method to list closed and open election IDs\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "26c7d5406ffb5f02bf93e6696d1ee1503c8a57c7",
      "tree": "78001ad1abfd2ea951f9f50c34bad6b790b924a2",
      "parents": [
        "5c5e70b81898521a4897e2267ac8ff2c6a0c962c"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 23:52:43 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 23:52:43 2026 -0600"
      },
      "message": "feat: implement tally script for election issues\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "5c5e70b81898521a4897e2267ac8ff2c6a0c962c",
      "tree": "0c21e9fb47ce8112726e68285cdd0e666b441cd5",
      "parents": [
        "ff3e75ff6ad0981d399dfb30d9c98b5760824abe"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 23:52:39 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein (aider)",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 23:52:39 2026 -0600"
      },
      "message": "feat: add tally script for elections\n"
    },
    {
      "commit": "ff3e75ff6ad0981d399dfb30d9c98b5760824abe",
      "tree": "d6579508fc323755aee239826fa08d0e2e09be58",
      "parents": [
        "5235933232411c0b5bc05f483c30b2b6d21f0a7c"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 21:27:04 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 21:27:04 2026 -0600"
      },
      "message": "refactor: use showModal utility for STV modal\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "5235933232411c0b5bc05f483c30b2b6d21f0a7c",
      "tree": "2085396039bc56a63c3ab7b263fb651d1e090bc9",
      "parents": [
        "82a66a6d23a5693cf7c70dbd585c9ece47d27558"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 21:15:14 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 21:15:14 2026 -0600"
      },
      "message": "Serve third-party content from our own servers.\n\nSortable is MIT licensed: safe to copy/serve.\n\nUpdate the fetching script. Add the JS. Update vote-on with the new\nlink and correct integrity value.\n"
    },
    {
      "commit": "82a66a6d23a5693cf7c70dbd585c9ece47d27558",
      "tree": "a6919e1c7affa43f12fa45c4e088483836542cdd",
      "parents": [
        "abdfb3ae7b22cf79b3d0a76feeb6e416dd00ffce"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 20:59:36 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 20:59:36 2026 -0600"
      },
      "message": "we are fetching more stuff. rename the fetch script\n"
    },
    {
      "commit": "abdfb3ae7b22cf79b3d0a76feeb6e416dd00ffce",
      "tree": "330cfe409509c7128092a1500870fe384447b16e",
      "parents": [
        "65d13fa86b456525360693dcf60afdfd2ee037e9"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 20:53:12 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 20:53:12 2026 -0600"
      },
      "message": "feat: add SortableJS library download to fetch-bootstrap.sh\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "65d13fa86b456525360693dcf60afdfd2ee037e9",
      "tree": "07bda329c89fe31c8b21d65b8263dca90a2a4383",
      "parents": [
        "12b8a9c30fc2ba9ad24c01e9f6fb61da72fb0817"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 20:43:33 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 20:43:33 2026 -0600"
      },
      "message": "refactor: shuffle candidates in vote_on_page to prevent bias\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "12b8a9c30fc2ba9ad24c01e9f6fb61da72fb0817",
      "tree": "cbdc4721f8af210ed770c8dfa7e47f67e834675e",
      "parents": [
        "21349fa18746896096907bc79c0c3d227750fc40"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 20:23:44 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 20:23:44 2026 -0600"
      },
      "message": "feat: make labelmap an easydict and add sorted candidates to STV issues\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "21349fa18746896096907bc79c0c3d227750fc40",
      "tree": "591ae2929596dc43bd0ae46b1850d568ffe53da3",
      "parents": [
        "f783e5a1bbf72fabb73dc76a8dc73a16803c7eac"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 19:53:13 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 19:53:13 2026 -0600"
      },
      "message": "better way to run main.py, to always use \"uv run\"\n"
    },
    {
      "commit": "f783e5a1bbf72fabb73dc76a8dc73a16803c7eac",
      "tree": "61d9a50be7d3f40811c493fa3dc95853b8ef109b",
      "parents": [
        "aa4618892fdd821e51bd1d20d6ed2f8c2a2d70be"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 02:12:30 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 02:12:30 2026 -0600"
      },
      "message": "feat: add seats attribute to STV issues from KV value\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "aa4618892fdd821e51bd1d20d6ed2f8c2a2d70be",
      "tree": "37cded0c819d09b4a251385ce4c4be017080115b",
      "parents": [
        "160ff92620c6622292449e7638a32d4574f7a944"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 01:56:17 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Sat Feb 21 01:56:17 2026 -0600"
      },
      "message": "feat: add voting eligibility check and issue sorting to vote_on_page\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "160ff92620c6622292449e7638a32d4574f7a944",
      "tree": "f71f21611fc6e2825f009bbbc2f88876c153a146",
      "parents": [
        "f4a0f2f6c813cc3a73bb2714a8e7d7826dd4f24b"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 19:46:06 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 19:46:06 2026 -0600"
      },
      "message": "add comment about serialization of the KV column\n"
    },
    {
      "commit": "f4a0f2f6c813cc3a73bb2714a8e7d7826dd4f24b",
      "tree": "b47dded0c240b3699014aa14f612024ad83c5dde",
      "parents": [
        "c6a3f10768c3a266a59181d99018bacca5465a71"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 19:32:44 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 19:32:44 2026 -0600"
      },
      "message": "Switch from passlib to argon2-cffi.\n\nThe cffi was already imported so that passlib could use it. However,\nwe don\u0027t need the \"stored password formatting\" that passlib provides.\nWe simply want the Argon2 hashing algorithm.\n\nStrip out passlib.\n\nAdd a benchmarking tool to measure/tune our use of Argon2. We can\nperform some tuning in the future to ensure (minimum time) that brute\nforce can\u0027t be used against our vote database.\n"
    },
    {
      "commit": "c6a3f10768c3a266a59181d99018bacca5465a71",
      "tree": "065a09b5837019ffc3ea7a484a09e48a54acff4f",
      "parents": [
        "b3c0db27188815daa3b035f8775d4f56cfdc3eae"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 19:28:51 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 19:28:51 2026 -0600"
      },
      "message": "STV votestrings were switched to comma-separated\n"
    },
    {
      "commit": "b3c0db27188815daa3b035f8775d4f56cfdc3eae",
      "tree": "19823eab3371aebae3913d6e3ee06891c1dc7ac6",
      "parents": [
        "8457a59da6e58fd62ea20335dc6a2e84af0cc8fa"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 18:21:20 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 18:21:20 2026 -0600"
      },
      "message": "Intermediate hash of the EDATA glom.\n"
    },
    {
      "commit": "8457a59da6e58fd62ea20335dc6a2e84af0cc8fa",
      "tree": "ba6b3a5bee84f604701ccd582272e5b193f44c12",
      "parents": [
        "cf01ff003ec008786848147cf188fec06c47fd9b"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 10:49:45 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 10:49:45 2026 -0600"
      },
      "message": "fix: restrict election data gathering to eligible voters using mayvote table\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "cf01ff003ec008786848147cf188fec06c47fd9b",
      "tree": "86fe9d906b86dd638f2731f796af61273b3ccf57",
      "parents": [
        "8311dfb344fb492792c014d4f464675e69c04f0e"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 10:29:12 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 10:29:12 2026 -0600"
      },
      "message": "quick hack to remap PID values from old to current\n"
    },
    {
      "commit": "8311dfb344fb492792c014d4f464675e69c04f0e",
      "tree": "75938ebe56b8d7df80a31437dbbeeab9d0dbc8dc",
      "parents": [
        "b3b67847dec5e291c5cada846f1905a38c9135dd"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 10:09:42 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 10:09:42 2026 -0600"
      },
      "message": "refactor: adjust parse_datetime to handle Unix timestamps as ints or strings\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "b3b67847dec5e291c5cada846f1905a38c9135dd",
      "tree": "86b929be04667fd8e5dc5d262aad513c9a40c2a6",
      "parents": [
        "b2e838cbf99475dae19d02958557bfa5e0fa9629"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 10:05:58 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 10:05:58 2026 -0600"
      },
      "message": "feat: replace eligible_voters with record-based voter list from YAML\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "b2e838cbf99475dae19d02958557bfa5e0fa9629",
      "tree": "e090dece8842334aea9fcd39db790cb89c09a08a",
      "parents": [
        "c101b756b3bc4fa72499dabba5219395f07e2571"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 07:52:05 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 07:52:05 2026 -0600"
      },
      "message": "Massive revamp of the voter page to enable STV.\n\n* Added/moved election metadata to a sticky card at top.\n* added STV modal dialog with SortableJS\n* added a Submit butt at top, in addition to bottom\n* revised the bulk voting\n"
    },
    {
      "commit": "c101b756b3bc4fa72499dabba5219395f07e2571",
      "tree": "9655bdec7762743e6ba843b14b4ea0f4899273ea",
      "parents": [
        "a66f14270697a1ba1aa56439185dc30ddd927c84"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 07:44:17 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 07:44:17 2026 -0600"
      },
      "message": "avoid the type() python builtin name. use vtype\n"
    },
    {
      "commit": "a66f14270697a1ba1aa56439185dc30ddd927c84",
      "tree": "b3199f19f79d4ac4559c475d80c6437d0826f2fe",
      "parents": [
        "37acd3dce2d0bd326296120fc485483354851774"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 07:29:53 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 07:29:53 2026 -0600"
      },
      "message": "Update the page footer: copyright year, version number.\n\nProvided-by: andreww\n"
    },
    {
      "commit": "37acd3dce2d0bd326296120fc485483354851774",
      "tree": "c226ea4363d54cce634692cad822806e9740631f",
      "parents": [
        "1caa49b1ea136209a5b9a74cf6da3a3a2f64ff67"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 07:09:08 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 07:09:08 2026 -0600"
      },
      "message": "Improve readability of the admin box on the home page.\n\nProvided-by: andreww\n"
    },
    {
      "commit": "1caa49b1ea136209a5b9a74cf6da3a3a2f64ff67",
      "tree": "7187ca1718a210df76521b693a2c6b9a07b942e1",
      "parents": [
        "cc6eaa3821c34068c409ede7fb7b3667441c5fa0"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 05:49:34 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 05:49:34 2026 -0600"
      },
      "message": "refactor: update voting to use form-based submission with submitFormWithLoading\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "cc6eaa3821c34068c409ede7fb7b3667441c5fa0",
      "tree": "a11b34af1e5bd0f2fdee9e98671ebeec340227d1",
      "parents": [
        "600b33fd2f052381f8d85a65ab2c5605365335b6"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 05:08:03 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 05:08:03 2026 -0600"
      },
      "message": "feat: allow recasting ballots without warning\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "600b33fd2f052381f8d85a65ab2c5605365335b6",
      "tree": "f4506e57701fd47f5cb4c0aa9ee97a5e202cf742",
      "parents": [
        "3eb6a074ef509ce64879e0afe22931d139976863"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 04:54:44 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 04:54:44 2026 -0600"
      },
      "message": "style: rename do_vote route to do-vote with dash\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "3eb6a074ef509ce64879e0afe22931d139976863",
      "tree": "9e75560bb7de0c7ea79982ab21848a7da4ae0f54",
      "parents": [
        "3ab9679455eedf6f4c9435a8b039c5db68705cf5"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 04:32:43 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 04:32:43 2026 -0600"
      },
      "message": "feat: add voting endpoint for elections\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "3ab9679455eedf6f4c9435a8b039c5db68705cf5",
      "tree": "8b09d04747ab846babfabf695ff30e058ec991b1",
      "parents": [
        "0f12c601cd7563c4059e5c5903b9a8a853db86c8"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 04:15:47 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 04:15:47 2026 -0600"
      },
      "message": "Revamp voter landing page.\n\nBetter organization for open/current elections, upcoming, and past.\n\nBig template change to move to tabs. Supporting template variables in\npages.py\n\nh/t Claude Sonnet\n"
    },
    {
      "commit": "0f12c601cd7563c4059e5c5903b9a8a853db86c8",
      "tree": "b72cd5b7a613a80fc11831eb984fc088b0198331",
      "parents": [
        "9de6a7e665cd208c60ca298b26f3c61b7da53dfa"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:47:24 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:47:24 2026 -0600"
      },
      "message": "feat: include owner_pid in q_upcoming_to_me query results\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "9de6a7e665cd208c60ca298b26f3c61b7da53dfa",
      "tree": "117ab7b705bde06529d2c102713161abf88dfa9b",
      "parents": [
        "623a4126cc2b460d2103a61c8574ee9b4cb01568"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:45:33 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:45:33 2026 -0600"
      },
      "message": "fix issue with checking state\n"
    },
    {
      "commit": "623a4126cc2b460d2103a61c8574ee9b4cb01568",
      "tree": "c178458e7467da8974f5d7b0e88951407891d268",
      "parents": [
        "92843a9b67f8a373debc84554e6c73f986134994"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:26:51 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:26:51 2026 -0600"
      },
      "message": "feat: add authz and closed fields to q_upcoming_to_me query\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "92843a9b67f8a373debc84554e6c73f986134994",
      "tree": "b6457572be47dca4b2f3d648054dc556a1f42850",
      "parents": [
        "c4f7cd8fd41f955e2544f483daa4a16f8c418b8c"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:05:14 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:05:14 2026 -0600"
      },
      "message": "fix: correct undefined name \u0027iid\u0027 in IssueNotFound.__str__\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "c4f7cd8fd41f955e2544f483daa4a16f8c418b8c",
      "tree": "03ebd10254949c56b9979f7b5bdecb284c62bb47",
      "parents": [
        "e805ed5db52eac09b80fe9f144cb6798013cbcc5"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:03:55 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:03:55 2026 -0600"
      },
      "message": "feat: add upcoming_to_pid method and q_upcoming_to_me query\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "e805ed5db52eac09b80fe9f144cb6798013cbcc5",
      "tree": "e0771fd2bb55232d0fd159939027be196591e0ec",
      "parents": [
        "572d2393463a4465d65fc9c470f1584ecb8a79b4"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:00:19 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 02:00:19 2026 -0600"
      },
      "message": "feat: add upcoming elections section to voter page\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "572d2393463a4465d65fc9c470f1584ecb8a79b4",
      "tree": "f52879310b111fb6bb877b516f5e8a02e81c68d4",
      "parents": [
        "62facf9620efd8272a48cb06d5cd445679ab396d"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 01:31:44 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 01:31:44 2026 -0600"
      },
      "message": "feat: add set_open_at and set_close_at methods to Election class\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "62facf9620efd8272a48cb06d5cd445679ab396d",
      "tree": "8395d733f88f19f17e15da3634b10fbb6ea3824f",
      "parents": [
        "7e12b2bf3a4c3177f1e4dac6dafd775a833611b0"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 00:33:23 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 00:33:23 2026 -0600"
      },
      "message": "thanks dependabot\n"
    },
    {
      "commit": "7e12b2bf3a4c3177f1e4dac6dafd775a833611b0",
      "tree": "66d1ff7167c885177fbaf94043e747810a534a33",
      "parents": [
        "2d8ae1cbe7d1dacbc126390c07443f9a5e7eb98c"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 00:26:12 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 00:26:12 2026 -0600"
      },
      "message": "refactor: add helper function and refactor date-setting endpoints to reduce duplication\n\nCo-authored-by: aider (openrouter/x-ai/grok-code-fast-1) \u003caider@aider.chat\u003e\n"
    },
    {
      "commit": "2d8ae1cbe7d1dacbc126390c07443f9a5e7eb98c",
      "tree": "4645bd138bf86e81ec5665cfb54404014ed8b351",
      "parents": [
        "34094c8f4bd17a4f8d298b154451574d00d93b85"
      ],
      "author": {
        "name": "Greg Stein",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 00:26:08 2026 -0600"
      },
      "committer": {
        "name": "Greg Stein (aider)",
        "email": "gstein@gmail.com",
        "time": "Fri Feb 20 00:26:08 2026 -0600"
      },
      "message": "feat: add endpoints for setting election open and close dates\n"
    }
  ],
  "next": "34094c8f4bd17a4f8d298b154451574d00d93b85"
}
