)]}'
{
  "log": [
    {
      "commit": "b97f807ce82a0be8ed03bf589add14e2e9bcbaed",
      "tree": "0f4b7f46c18b106e5069de0ad026a46fb364614e",
      "parents": [
        "3d7b19c66da2cf4bf48eac49b1c22f9c255c1d32"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Sep 03 09:01:28 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Sep 03 09:01:28 2026 +0200"
      },
      "message": "chore(frontend): rebuild dist assets\n"
    },
    {
      "commit": "3d7b19c66da2cf4bf48eac49b1c22f9c255c1d32",
      "tree": "834a4efee86f32968db26362c1fa3cc6b854e707",
      "parents": [
        "7d041ed2afb22b01996a7c37ab81a0cbe0b106f8"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Sep 02 18:39:39 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Sep 02 18:39:39 2026 +0200"
      },
      "message": "lint fixes\n"
    },
    {
      "commit": "7d041ed2afb22b01996a7c37ab81a0cbe0b106f8",
      "tree": "ec1b35bbdcb8d8edfbe2ab80c3bceb9273895a1b",
      "parents": [
        "dcaa70883694b5f3814e52a8d1b0dd3ba81eb4ae"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Sep 02 18:37:26 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Sep 02 18:37:29 2026 +0200"
      },
      "message": "rework binding logic\n\nThe binding votes switch previously didn\u0027t really do anything, and had\nthe potential of deadlocking a question if applied wrongly.\n\nThis reworks how the binding vote logic is applied, by changing the flag\nto a binding vote scope, which can be either committers or PMC members.\n"
    },
    {
      "commit": "dcaa70883694b5f3814e52a8d1b0dd3ba81eb4ae",
      "tree": "99cdc833d918fe3cd2ccb0d62f31417e036d3d73",
      "parents": [
        "6868e1e46aeedc3770c7017cf38080355022dd00"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Sep 02 18:06:47 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 18:06:47 2026 +0200"
      },
      "message": "OF: update setup-uv pin"
    },
    {
      "commit": "6868e1e46aeedc3770c7017cf38080355022dd00",
      "tree": "9fc175bb7bc8e491aa360f57f96b075278503f05",
      "parents": [
        "a8ab15b68d8aa3af8ebe03697ed23406a2781d1b"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Sep 02 18:02:43 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Sep 02 18:02:54 2026 +0200"
      },
      "message": "extend question rights to committers\n\ncommitters may file questions, even those with binding demarcation, but\nmay not file private questions.\n"
    },
    {
      "commit": "a8ab15b68d8aa3af8ebe03697ed23406a2781d1b",
      "tree": "626ca8e5347b8c01ba29c0f1d8577d1fd819ab40",
      "parents": [
        "8cb29683bb0525449fd6a7a9dcdffbd451e815ce"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 19:46:22 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 19:46:22 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 8cb2968 [skip ci]\n"
    },
    {
      "commit": "8cb29683bb0525449fd6a7a9dcdffbd451e815ce",
      "tree": "3511a47b2bd27d5e8726e3aa9ea068ef714a905a",
      "parents": [
        "fa6bf1c40b74d2f6d931b34b59f98addcabb2c92"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Sep 01 21:45:41 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Sep 01 21:45:41 2026 +0200"
      },
      "message": "default to only showing your own projects for all users\n"
    },
    {
      "commit": "fa6bf1c40b74d2f6d931b34b59f98addcabb2c92",
      "tree": "29c04cbb4de12c633090a04ac45b8bdc75925cd8",
      "parents": [
        "b59155f9592687ec5ee1276e919f622802dac90d"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 18:17:03 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 18:17:03 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for b59155f [skip ci]\n"
    },
    {
      "commit": "b59155f9592687ec5ee1276e919f622802dac90d",
      "tree": "3fa84e71cd237b40f5847b58d8b118753c1ee278",
      "parents": [
        "144e3196125111fa3a7db357bbe98c01d8a15cc2"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Sep 01 20:15:45 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Sep 01 20:15:45 2026 +0200"
      },
      "message": "Add information about deadlines and their malleability\n\nThis fixes #53\n"
    },
    {
      "commit": "144e3196125111fa3a7db357bbe98c01d8a15cc2",
      "tree": "72cf3e227c1f2b0e35f6e2d0ad1967fab32bc5bd",
      "parents": [
        "cd969376adb6ba6d271bebb89ea2683c63df61e9"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 15:05:43 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 15:05:43 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for cd96937 [skip ci]\n"
    },
    {
      "commit": "cd969376adb6ba6d271bebb89ea2683c63df61e9",
      "tree": "11ed5eabd02ace9bc5e4641136fb54baf9f9706c",
      "parents": [
        "0399ad50cba6c77ad219dbebe2b994ab424cd7a8"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Sep 01 16:42:58 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Sep 01 16:42:58 2026 +0200"
      },
      "message": "sort open questions before closed, flag already answered questions\n"
    },
    {
      "commit": "0399ad50cba6c77ad219dbebe2b994ab424cd7a8",
      "tree": "8c41cd304837b5b332faa37f782056928915f7f7",
      "parents": [
        "f35dd22301e2c1f34ea165e1a78e82a02c7ded85"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 13:11:42 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 13:11:42 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for f35dd22 [skip ci]\n"
    },
    {
      "commit": "f35dd22301e2c1f34ea165e1a78e82a02c7ded85",
      "tree": "f1151d63ad4141fe26541fd4065770d2db9bc90a",
      "parents": [
        "0749d706f9e77970f53056c61024ddc3e519bcc1"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Sep 01 14:52:06 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Sep 01 14:52:06 2026 +0200"
      },
      "message": "Sort and paginate results in the dashboard\n\nthe dashboard\u0027s lists of questions now paginate client-side at five rows\nper page, with page controls above and below the rows.\n\nRecent activity is now sorted reverse-chronologically on each question\u0027s\nlast visible state change.\n\nEach question card gained two age markers, one for the age of the\nquestion (when was it created?) and one for the deadline (when does it\nauto-close?)\n"
    },
    {
      "commit": "0749d706f9e77970f53056c61024ddc3e519bcc1",
      "tree": "a16ba0c4b30066e9e0912171f19b695cce23c980",
      "parents": [
        "38ab9adf6aa439e271924cec661fdc8f709df08a",
        "1fe9d02ef2b8bdf06a380df59cce3420c318b6e9"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Sep 01 13:35:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 13:35:48 2026 +0200"
      },
      "message": "Merge pull request #52 from milamberspace/fix/issue-34-min-two-vote-values\n\nfix: require at least two allowed values for a vote (#34)"
    },
    {
      "commit": "1fe9d02ef2b8bdf06a380df59cce3420c318b6e9",
      "tree": "a16ba0c4b30066e9e0912171f19b695cce23c980",
      "parents": [
        "a210801800e2769b6eeee77b9b1ca4cd956f28ae"
      ],
      "author": {
        "name": "Milamber",
        "email": "milamber@apache.org",
        "time": "Tue Aug 18 16:49:43 2026 +0300"
      },
      "committer": {
        "name": "Milamber",
        "email": "milamber@apache.org",
        "time": "Tue Aug 18 16:49:43 2026 +0300"
      },
      "message": "chore(frontend): rebuild dist for a210801 [skip ci]\n\nGenerated-by: Claude Opus 4.8 (claude-opus-4-8)\n"
    },
    {
      "commit": "a210801800e2769b6eeee77b9b1ca4cd956f28ae",
      "tree": "42d900e0e61afcfd99c3de906a8ceeb02c5de255",
      "parents": [
        "38ab9adf6aa439e271924cec661fdc8f709df08a"
      ],
      "author": {
        "name": "Milamber",
        "email": "milamber@apache.org",
        "time": "Tue Aug 18 16:48:54 2026 +0300"
      },
      "committer": {
        "name": "Milamber",
        "email": "milamber@apache.org",
        "time": "Tue Aug 18 16:48:54 2026 +0300"
      },
      "message": "fix: require at least two allowed values for a vote (#34)\n\nA vote question could be created with a single allowed value (e.g.\njust \"+1\"), leaving voters no way to abstain or oppose — a degenerate\nballot. Enforce a minimum of two distinct choices.\n\n- backend: min_length\u003d2 plus a validator rejecting duplicate-only sets\n  ([\"+1\",\"+1\"]) on VoteOption.allowed_values\n- frontend: ResponseOptionEditor blocks the uncheck that would drop\n  below two values, with an inline explanation\n- test: cover single-value and duplicate rejection, two-value and the\n  four-value default acceptance\n\nGenerated-by: Claude Opus 4.8 (claude-opus-4-8)\n"
    },
    {
      "commit": "38ab9adf6aa439e271924cec661fdc8f709df08a",
      "tree": "1159f366a35b2965bd4bd1780e7a1a577cc078b0",
      "parents": [
        "bc2c504f7dd984fcd03fa2657b39bff5a283ade2"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Aug 04 14:07:09 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Aug 04 14:07:09 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for bc2c504 [skip ci]\n"
    },
    {
      "commit": "bc2c504f7dd984fcd03fa2657b39bff5a283ade2",
      "tree": "065c69d523a9a5b53740123c7ee5510b4c08f70a",
      "parents": [
        "518f6c38e94f336feb94865449312470b6c4ef22"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Aug 04 14:42:10 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Aug 04 14:50:35 2026 +0200"
      },
      "message": "fix(frontend): show pending-resolution state on the question page too\n\nThe dashboard card now distinguishes \"voting closed, pending\nresolution\" from \"Open\", but the question detail page did not: its\nTallyPanel header still read \"Provisional tally / Not yet resolved.\"\nwith an open-question clock once the deadline had passed, so the two\nviews disagreed about the same question.\n\nMove the label, the tooltip and the state test into lib/status.ts and\nuse them from both places, so the wording cannot drift again. The\ndetail page hands its live deadline flag (already maintained for the\nResolve button) down to TallyPanel, so the header flips the moment the\ncountdown runs out, matching the card.\n"
    },
    {
      "commit": "518f6c38e94f336feb94865449312470b6c4ef22",
      "tree": "555128db381a7f097e9a38ef3f15fe52f3a44fee",
      "parents": [
        "102a47551473ec4726d9e81ff20dae41f7f9e68e"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Aug 04 13:57:08 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Aug 04 14:50:35 2026 +0200"
      },
      "message": "fix(frontend): mark past-deadline questions as pending resolution\n\nA question whose deadline has passed but which nobody has resolved yet\nwas still labelled \"Open\" on the dashboard, which overstates what the\nviewer can do with it: voting is over, and all that is left is for the\nrequester to act.\n\nSuch cards now read \"Voting closed, pending resolution\" with an\nhourglass marker and their own border colour, and carry a title tooltip\nnaming the requester the question is waiting on. Resolved and withdrawn\nquestions keep their existing outcome labels.\n"
    },
    {
      "commit": "102a47551473ec4726d9e81ff20dae41f7f9e68e",
      "tree": "5601c2b9974ada1b3d6ff83b03e41160e9bad1f2",
      "parents": [
        "8651126573f57ef4a2dd039003cf155ab8f172c1"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Aug 04 11:31:18 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Aug 04 11:31:18 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 8651126 [skip ci]\n"
    },
    {
      "commit": "8651126573f57ef4a2dd039003cf155ab8f172c1",
      "tree": "8ad2df916cea56e5e70fa77661997aa7e3d4c705",
      "parents": [
        "09f4a86b61342babb6bd43eb6106784a74140149"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Aug 04 13:09:55 2026 +0200"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue Aug 04 13:09:55 2026 +0200"
      },
      "message": "fix(frontend): hide Respond button on questions closed for responses\n\nA question keeps `status \u003d\u003d \"open\"` until it is explicitly resolved, but\nthe backend rejects responses as soon as closes_at passes (409\ndeadline_passed). The dashboard card kept showing the blue \"Respond\"\ncall-to-action in that window, sending the viewer straight into a\nguaranteed error.\n\nTreat a passed deadline the same as a closed question: the card now\nfalls back to \"View tally\". CountdownBadge already dispatches `closed`\nwhen the deadline elapses, so a card that expires while the dashboard is\nopen swaps its button live. ResponseForm and QuestionView already guard\non the deadline the same way.\n"
    },
    {
      "commit": "09f4a86b61342babb6bd43eb6106784a74140149",
      "tree": "f1d9e29393d9a4b5133633b82950219109cda44c",
      "parents": [
        "6bcf20ec9dc5c45121ae965e36909fa99eaa786c"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Mon Aug 03 18:10:42 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Mon Aug 03 18:10:42 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 6bcf20e [skip ci]\n"
    },
    {
      "commit": "6bcf20ec9dc5c45121ae965e36909fa99eaa786c",
      "tree": "ddce886288d67de3f8c9b12bbfc6f83448c81a86",
      "parents": [
        "41cc509ac63ff67dcc7baeb566e1917ef6ee10b2",
        "faf567346d2759dec12fbab60fe94368518c600f"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Mon Aug 03 16:08:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 16:08:17 2026 +0200"
      },
      "message": "Merge pull request #41 from milamberspace/fix/issue-24-responses-sort\n\nfix(frontend): display responses newest-first with sort toggle (#24)"
    },
    {
      "commit": "41cc509ac63ff67dcc7baeb566e1917ef6ee10b2",
      "tree": "75553c5bfc538bd0b683dce9ea74d3c5a8e16a42",
      "parents": [
        "a04b22b1cb681d5d716c93a8200eb158f88f8333",
        "f380c1771f619a17858be9168f4aacb440de8e2b"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Mon Aug 03 16:07:55 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 16:07:55 2026 +0200"
      },
      "message": "Merge pull request #40 from milamberspace/fix/issue-14-project-audience-sync\n\nfix(frontend): canonical Apache project names + sync target audience (#14)"
    },
    {
      "commit": "a04b22b1cb681d5d716c93a8200eb158f88f8333",
      "tree": "5f9475df1842390005f22f4cc286c695cd0fa52b",
      "parents": [
        "779d7edd435a585993ebdb089cf970a2ac85b4ec",
        "da74850ac32142093aabe0022823c5e547d75ac5"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Mon Aug 03 16:05:33 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 16:05:33 2026 +0200"
      },
      "message": "Merge pull request #42 from milamberspace/fix/issue-32-questions-sort\n\nfix(frontend): sort question list by expiration date, closed at end (#32)"
    },
    {
      "commit": "779d7edd435a585993ebdb089cf970a2ac85b4ec",
      "tree": "d6b43ff8a1d6f86f70be9f8747a03ae02638bdc3",
      "parents": [
        "21588b37caffb0f99b712bbd693e33f23b5ddc3a"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 07:45:11 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 07:45:11 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 21588b3 [skip ci]\n"
    },
    {
      "commit": "21588b37caffb0f99b712bbd693e33f23b5ddc3a",
      "tree": "de2540e80818a178420e913385b568c3d94b14da",
      "parents": [
        "52f90deebc00dda72e2d2244878603e72ebdb2ed",
        "c01a1b543a8ef0a1e46e107151361d6e872f4de3"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jul 24 09:44:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:44:41 2026 +0200"
      },
      "message": "Merge pull request #39 from milamberspace/fix/issue-18-disable-expired-form\n\nfix(frontend): lock the response form once voting has closed (#18)"
    },
    {
      "commit": "52f90deebc00dda72e2d2244878603e72ebdb2ed",
      "tree": "f577d19f269a24a0a3d7965e80b36275b37e0a72",
      "parents": [
        "6a1d5c2db9285bf788a80cde5face35a62c3bb12",
        "79e9a75c915a8ea231845f6a8d86695e1b11a03d"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jul 24 09:44:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:44:14 2026 +0200"
      },
      "message": "Merge pull request #36 from milamberspace/fix/issue-33-about-api-doc\n\nfix(frontend): correct About page API integration docs (#33)"
    },
    {
      "commit": "6a1d5c2db9285bf788a80cde5face35a62c3bb12",
      "tree": "c686e21fe5c3455c74d577744fe71db0f74d9478",
      "parents": [
        "279d5c4aaa90956016c6871e5e0f7f9cc370155a",
        "78c3e1bfbd5658c2eb9f2d8a985a5f9432ffd927"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jul 24 09:43:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:43:37 2026 +0200"
      },
      "message": "Merge pull request #45 from apache/dependabot/npm_and_yarn/frontend/immutable-5.1.9\n\nBump immutable from 5.1.5 to 5.1.9 in /frontend"
    },
    {
      "commit": "78c3e1bfbd5658c2eb9f2d8a985a5f9432ffd927",
      "tree": "c686e21fe5c3455c74d577744fe71db0f74d9478",
      "parents": [
        "279d5c4aaa90956016c6871e5e0f7f9cc370155a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 07:38:16 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 07:38:16 2026 +0000"
      },
      "message": "Bump immutable from 5.1.5 to 5.1.9 in /frontend\n\nBumps [immutable](https://github.com/immutable-js/immutable-js) from 5.1.5 to 5.1.9.\n- [Release notes](https://github.com/immutable-js/immutable-js/releases)\n- [Changelog](https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/immutable-js/immutable-js/compare/v5.1.5...v5.1.9)\n\n---\nupdated-dependencies:\n- dependency-name: immutable\n  dependency-version: 5.1.9\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "279d5c4aaa90956016c6871e5e0f7f9cc370155a",
      "tree": "5ec9fb189f8b3dd884a9028c8deb82cec07a1849",
      "parents": [
        "272fa1efedfef0390f888456a8696393f1725783"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu Jul 23 19:04:22 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu Jul 23 19:04:22 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 272fa1e [skip ci]\n"
    },
    {
      "commit": "272fa1efedfef0390f888456a8696393f1725783",
      "tree": "71a945cac69d1299d64b9f34b41c08db63b92457",
      "parents": [
        "c3110090e3aa1a3bb7d99917ddd08ef48504c6db",
        "d74172ae3f9c395f01d49f85e0bc4fb7c2858383"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Jul 23 21:03:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 21:03:48 2026 +0200"
      },
      "message": "Merge pull request #38 from milamberspace/fix/issue-26-drop-seconds\n\nfix(frontend): drop seconds from displayed timestamps (#26)"
    },
    {
      "commit": "c3110090e3aa1a3bb7d99917ddd08ef48504c6db",
      "tree": "1deb39412e8ec35708e4d2f3ad602f83f3e8d960",
      "parents": [
        "5d08c550dbf02596a61f425d14ee2b00698e9524"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu Jul 23 19:02:30 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu Jul 23 19:02:30 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 5d08c55 [skip ci]\n"
    },
    {
      "commit": "5d08c550dbf02596a61f425d14ee2b00698e9524",
      "tree": "68446444730575187d96f2aa581d907d47516f4a",
      "parents": [
        "dd97d75e1d8d2d21c99b3a4194e07601be53202d",
        "d118f4cad90ac036e221569a6d1360e8b60931f0"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Jul 23 21:02:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 21:02:02 2026 +0200"
      },
      "message": "Merge pull request #37 from milamberspace/fix/issue-29-resolve-403\n\nfix(frontend): only enable Resolve once it can succeed (#29)"
    },
    {
      "commit": "dd97d75e1d8d2d21c99b3a4194e07601be53202d",
      "tree": "ec7f76147c10387abfa5ed2b6daf6aca8e8805c2",
      "parents": [
        "059f2dd1ff403b8b697794f6a42aba3de2dcb931"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 17:55:07 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 17:55:07 2026 -0500"
      },
      "message": "add in missed migrator files\n"
    },
    {
      "commit": "059f2dd1ff403b8b697794f6a42aba3de2dcb931",
      "tree": "8e3cbabdfd59cd1dc422d6336bb547d259054a44",
      "parents": [
        "14a42ff57ebe50c95920b0406d4bfc08a39ff3db"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 17:54:41 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 17:54:41 2026 -0500"
      },
      "message": "update specs+readme\n"
    },
    {
      "commit": "14a42ff57ebe50c95920b0406d4bfc08a39ff3db",
      "tree": "55b11091bf4890480875305ef2b2c966c6a6fc42",
      "parents": [
        "2b57228674693bfeca76fab1d527b907c56e53fe"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 17:54:29 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 17:54:29 2026 -0500"
      },
      "message": "refactor db upgrades into a service runner\n"
    },
    {
      "commit": "2b57228674693bfeca76fab1d527b907c56e53fe",
      "tree": "b1fa8a773a37522f8e34d65374bbd9ccd9251a3d",
      "parents": [
        "ec32a2d67103c379fa831a75bfddf8522cc6c48f"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 17:53:45 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 17:53:45 2026 -0500"
      },
      "message": "audit token issuance\n"
    },
    {
      "commit": "ec32a2d67103c379fa831a75bfddf8522cc6c48f",
      "tree": "ffc68c2a0de2550d8688f6f964140ee261fef87f",
      "parents": [
        "ca47cca0781dddbfe5b624f73cd575e7b28f8de4"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 10:25:10 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 26 10:25:10 2026 -0500"
      },
      "message": "add role account support for third parties\n"
    },
    {
      "commit": "da74850ac32142093aabe0022823c5e547d75ac5",
      "tree": "6dcbefc6648b0b6d4e84393b115914f8a8774e08",
      "parents": [
        "ca47cca0781dddbfe5b624f73cd575e7b28f8de4"
      ],
      "author": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 17:40:57 2026 +0300"
      },
      "committer": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 17:40:57 2026 +0300"
      },
      "message": "fix(frontend): sort question list by expiration date, closed at end (#32)\n\nThe \"Recent activity\" tab previously preserved the backend\u0027s updated_at\nDESC insertion order, with no distinction between open and closed\nquestions. This made it hard to spot which open votes still need attention.\n\nNew sort order for the Recent tab:\n- Open questions first, sorted by closes_at ASC (most urgent at the top)\n- Closed / withdrawn questions at the bottom, sorted by closes_at DESC\n  (most recently expired first)\n\nThe \"Awaiting your response\" tab was already sorted by closes_at ASC\nand is unchanged.\n\nCloses #32\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_015qQoQHpb4kR81SSzc8y6Dv\n"
    },
    {
      "commit": "faf567346d2759dec12fbab60fe94368518c600f",
      "tree": "d46db40cb1e2047bf59876ed32279c3646216c2d",
      "parents": [
        "ca47cca0781dddbfe5b624f73cd575e7b28f8de4"
      ],
      "author": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 17:38:49 2026 +0300"
      },
      "committer": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 17:38:49 2026 +0300"
      },
      "message": "fix(frontend): display responses newest-first with sort toggle (#24)\n\nResponses in QuestionView were displayed oldest-first (insertion order from\nthe backend). Users scanning a long vote list had to scroll to the bottom\nto see the most recent activity.\n\nDefault sort is now newest-first; a \"Newest first / Oldest first\" toggle\nbutton appears in the Responses card header when there are at least 2\nresponses. The rollup logic (collapsing superseded votes by the same\nvoter) is order-aware and works correctly in both directions.\n\nCloses #24\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_015qQoQHpb4kR81SSzc8y6Dv\n"
    },
    {
      "commit": "f380c1771f619a17858be9168f4aacb440de8e2b",
      "tree": "e03672e48fb4aac0239cf33848ca37c8dff3a917",
      "parents": [
        "ca47cca0781dddbfe5b624f73cd575e7b28f8de4"
      ],
      "author": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 17:16:43 2026 +0300"
      },
      "committer": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 17:16:43 2026 +0300"
      },
      "message": "fix(frontend): use canonical Apache project names + sync audience (#14)\n\nThe new-question form showed the lowercase project id (\"jmeter\") in the\npicker and in the target-audience default (\"Apache jmeter community\"),\nand changing the project left a stale audience.\n\n- Bundle src/lib/apache-projects.json: an id -\u003e \"Apache Name\" map of every\n  ASF top-level project (373 entries), generated from the authoritative\n  projects.apache.org feed by scripts/gen-apache-projects.mjs. This is the\n  only way to get canonical casing (JMeter, CloudStack, CouchDB) that a\n  lowercase id can\u0027t express.\n- Add src/lib/projects.ts: synchronous lookup (bundled map), with a lazy\n  one-shot live fetch of the same feed for ids missing from the bundle,\n  and a capitalize heuristic as the final offline fallback.\n- ProjectPicker renders the canonical name (value stays the id).\n- Target audience follows the selected project while it holds the\n  auto-generated default, and is left untouched once edited by hand.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_015qQoQHpb4kR81SSzc8y6Dv\n"
    },
    {
      "commit": "c01a1b543a8ef0a1e46e107151361d6e872f4de3",
      "tree": "04c776c098621c044fb63b102dfef33e7fbf2a60",
      "parents": [
        "ca47cca0781dddbfe5b624f73cd575e7b28f8de4"
      ],
      "author": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 16:45:36 2026 +0300"
      },
      "committer": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 16:45:36 2026 +0300"
      },
      "message": "fix(frontend): lock the response form once voting has closed (#18)\n\nA question stays \"open\" until it is resolved, so the response form\nremained interactive past closes_at even though the backend rejects late\nresponses with 409 deadline_passed. Track expiry (computed on mount and\nflipped live by a 1s timer), wrap the inputs in a disabled fieldset, show\na \"voting has closed\" banner, and disable the Submit button so users\ncan\u0027t submit into a guaranteed error.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_015qQoQHpb4kR81SSzc8y6Dv\n"
    },
    {
      "commit": "79e9a75c915a8ea231845f6a8d86695e1b11a03d",
      "tree": "ebc462d7326c5c7f4d08f89d506186aaae5d8875",
      "parents": [
        "ca47cca0781dddbfe5b624f73cd575e7b28f8de4"
      ],
      "author": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 14:48:04 2026 +0300"
      },
      "committer": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 14:59:51 2026 +0300"
      },
      "message": "fix(frontend): correct About page API integration docs (#33)\n\nThe About page described an integration flow that the published API\nrejects. Align it with the OpenAPI spec / backend models:\n\n- request_id and question_id are server-assigned (CreateQuestionRequest\n  uses extra\u003d\"forbid\"); the client reads them from the 201 response\n  instead of generating request_id itself.\n- approval_type values use underscores (unanimous_approval,\n  majority_approval, simple_majority, lazy_consensus), not hyphens.\n- Describe the GET /api/resolution/{id} permalink endpoint accurately\n  (204 open / 200 approved / 424 other terminal outcome) now that it is\n  implemented (§9.8).\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_015qQoQHpb4kR81SSzc8y6Dv\n"
    },
    {
      "commit": "d74172ae3f9c395f01d49f85e0bc4fb7c2858383",
      "tree": "53dee79ff7d190539ee802213f6e4dec52b4be01",
      "parents": [
        "ca47cca0781dddbfe5b624f73cd575e7b28f8de4"
      ],
      "author": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 14:54:35 2026 +0300"
      },
      "committer": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 14:57:14 2026 +0300"
      },
      "message": "fix(frontend): drop seconds from displayed timestamps (#26)\n\nformatLocal() used toLocaleString() with default options, rendering\nHH:MM:SS. Seconds add no value for question/response/resolution\ntimestamps. Render explicit date + HH:MM, still locale-aware.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_015qQoQHpb4kR81SSzc8y6Dv\n"
    },
    {
      "commit": "d118f4cad90ac036e221569a6d1360e8b60931f0",
      "tree": "332026134b095fb0953dcd8f195e13eed142fd6f",
      "parents": [
        "ca47cca0781dddbfe5b624f73cd575e7b28f8de4"
      ],
      "author": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 14:51:35 2026 +0300"
      },
      "committer": {
        "name": "Milamber ASF",
        "email": "milamber@apache.org",
        "time": "Fri Jun 26 14:57:14 2026 +0300"
      },
      "message": "fix(frontend): only enable Resolve once it can succeed (#29)\n\nThe backend reserves early resolution (before closes_at) for root and\nrestricts resolve to the question\u0027s requester, returning 403\ndeadline_in_future / forbidden otherwise. The UI showed an always-active\nResolve button to the requester, so clicking it before the deadline\nproduced a confusing 403.\n\nTrack whether the deadline has elapsed (computed on load and flipped\nlive by CountdownBadge\u0027s `closed` event) and disable the Resolve button\nuntil the question can actually be resolved, with a tooltip explaining\nwhy. Root keeps the early-resolution path.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_015qQoQHpb4kR81SSzc8y6Dv\n"
    },
    {
      "commit": "ca47cca0781dddbfe5b624f73cd575e7b28f8de4",
      "tree": "c4602ea60e17424ef89269a3c06836bfdba6a326",
      "parents": [
        "7a226b3eda21922adbfcf53dccd99c670c72f273"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Jun 25 18:44:14 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Jun 25 18:44:14 2026 -0500"
      },
      "message": "lint fix\n"
    },
    {
      "commit": "7a226b3eda21922adbfcf53dccd99c670c72f273",
      "tree": "6794376848294ceaaffd95b873af6df86d0449a6",
      "parents": [
        "1a37599a9baadc782badfb5e99e242fca2eef10b"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Jun 25 18:34:33 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Jun 25 18:35:27 2026 -0500"
      },
      "message": "add resolution endpoint (§9..8)\n"
    },
    {
      "commit": "1a37599a9baadc782badfb5e99e242fca2eef10b",
      "tree": "0d656711ee5f0ce6f29ee35743ca23280665a905",
      "parents": [
        "795fb7bf2091322e8a5da1a9af54e2ec4787c8cb"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri Jun 19 17:48:10 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri Jun 19 17:48:10 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 795fb7b [skip ci]\n"
    },
    {
      "commit": "795fb7bf2091322e8a5da1a9af54e2ec4787c8cb",
      "tree": "9fc80ac9e16fdb6f6368308befa2a99486fbccdb",
      "parents": [
        "689b5c4362a205b8dc3356d755f8d1ce08f0ea5c"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 19 12:47:36 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 19 12:47:36 2026 -0500"
      },
      "message": "roll up superseded votes, grouped by voter\n\nThis fixes #17 and #31.\n"
    },
    {
      "commit": "689b5c4362a205b8dc3356d755f8d1ce08f0ea5c",
      "tree": "149f2a94a4b9eb85127c66d5fee49e42dc6ad3cc",
      "parents": [
        "4c6c028aa27b814ca3cec2406982475eb9d80492"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 19 10:29:12 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 19 10:29:23 2026 -0500"
      },
      "message": "linting\n"
    },
    {
      "commit": "4c6c028aa27b814ca3cec2406982475eb9d80492",
      "tree": "41abfb2d9e847736a670937b6988c86d4727fb30",
      "parents": [
        "89686b45999e1fa23cfd14949257013dab13f181"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri Jun 19 15:27:41 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri Jun 19 15:27:41 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 89686b4 [skip ci]\n"
    },
    {
      "commit": "89686b45999e1fa23cfd14949257013dab13f181",
      "tree": "909f1b66eafda04918e6e168a79fc8d1096c2058",
      "parents": [
        "76552b2b5405ad5d7ec199ab32a32f2cc94fb24f"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 19 10:26:37 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri Jun 19 10:27:09 2026 -0500"
      },
      "message": "Enforce character limits on text fields\n\nThis addresses #16, #27.\n"
    },
    {
      "commit": "76552b2b5405ad5d7ec199ab32a32f2cc94fb24f",
      "tree": "d03e8a2b0dff4d2203ddcb34f956baebb36f186d",
      "parents": [
        "e159a47656de358ed9d152966856e45bd179893f"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Wed Jun 17 17:45:02 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Wed Jun 17 17:45:02 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for e159a47 [skip ci]\n"
    },
    {
      "commit": "e159a47656de358ed9d152966856e45bd179893f",
      "tree": "5967b5b7cae2bf9b839bcb0cce6d5b618c9eff69",
      "parents": [
        "83e1d4d7f11d43e136379b50359acc14adb12376"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Jun 17 12:00:51 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Jun 17 12:00:51 2026 -0500"
      },
      "message": "fix vite 8 regression\n"
    },
    {
      "commit": "83e1d4d7f11d43e136379b50359acc14adb12376",
      "tree": "a1c52b73e67496aa19575514e046cca91bbfc754",
      "parents": [
        "c7931518b53161522474d5ef8b7f53e0e0c34df1"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Wed Jun 17 15:59:39 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Wed Jun 17 15:59:39 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for c793151 [skip ci]\n"
    },
    {
      "commit": "c7931518b53161522474d5ef8b7f53e0e0c34df1",
      "tree": "087d401e079f22c3b80123ceaba6c429ee2011d2",
      "parents": [
        "b65a76cb06f7ff5255c131435af52b0a6340efe5",
        "2948909ae2af3bd19456e1ecffbf9e88c5caa403"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Jun 04 02:22:55 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 02:22:55 2026 +0200"
      },
      "message": "Merge pull request #8 from apache/dependabot/npm_and_yarn/frontend/vite-8.0.16\n\nBump vite from 5.4.21 to 8.0.16 in /frontend"
    },
    {
      "commit": "2948909ae2af3bd19456e1ecffbf9e88c5caa403",
      "tree": "087d401e079f22c3b80123ceaba6c429ee2011d2",
      "parents": [
        "b65a76cb06f7ff5255c131435af52b0a6340efe5"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jun 04 00:14:05 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 00:14:05 2026 +0000"
      },
      "message": "Bump vite from 5.4.21 to 8.0.16 in /frontend\n\nBumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.21 to 8.0.16.\n- [Release notes](https://github.com/vitejs/vite/releases)\n- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)\n- [Commits](https://github.com/vitejs/vite/commits/v8.0.16/packages/vite)\n\n---\nupdated-dependencies:\n- dependency-name: vite\n  dependency-version: 8.0.16\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "b65a76cb06f7ff5255c131435af52b0a6340efe5",
      "tree": "83e3a867f1ebbef12d6c76a8bbd9b9af2079b461",
      "parents": [
        "4166a1229442c2fc0cd3353c3a46f95f9d12f7d3",
        "20d309efde2ba17dc4164903ebd79998b9ac0fd5"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Jun 04 02:11:50 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 02:11:50 2026 +0200"
      },
      "message": "Merge pull request #4 from apache/dependabot/npm_and_yarn/frontend/multi-2b7333caa7\n\nBump svelte and @sveltejs/vite-plugin-svelte in /frontend"
    },
    {
      "commit": "4166a1229442c2fc0cd3353c3a46f95f9d12f7d3",
      "tree": "c297be7fd06ec37405e674e78ed38e29956747d1",
      "parents": [
        "1684c4aad3e7f83ecc73181ce2351b5d0999305f",
        "e6958059366426f521b32b204e24410febc4c482"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu Jun 04 02:11:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 02:11:12 2026 +0200"
      },
      "message": "Merge pull request #7 from apache/dependabot/uv/backend/aiohttp-3.14.0\n\nBump aiohttp from 3.13.5 to 3.14.0 in /backend"
    },
    {
      "commit": "e6958059366426f521b32b204e24410febc4c482",
      "tree": "c297be7fd06ec37405e674e78ed38e29956747d1",
      "parents": [
        "1684c4aad3e7f83ecc73181ce2351b5d0999305f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jun 04 00:08:46 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 00:08:46 2026 +0000"
      },
      "message": "Bump aiohttp from 3.13.5 to 3.14.0 in /backend\n\n---\nupdated-dependencies:\n- dependency-name: aiohttp\n  dependency-version: 3.14.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "1684c4aad3e7f83ecc73181ce2351b5d0999305f",
      "tree": "3f8efe53381b2ef53e6bad95579ced61558d3bd3",
      "parents": [
        "0f056c0bf5d04fad2041dd4e2cd2761ff0b5a9d4"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Jun 03 09:00:32 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Jun 03 09:00:32 2026 -0500"
      },
      "message": "fix unit testing now that email wording changed\n"
    },
    {
      "commit": "0f056c0bf5d04fad2041dd4e2cd2761ff0b5a9d4",
      "tree": "ba64783474ab21731490dc4be2bf73dcfe5b28ea",
      "parents": [
        "6339fec26f609c4572ac7755c2a32d1514823580"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Jun 03 07:39:07 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Jun 03 07:39:07 2026 -0500"
      },
      "message": "ruff fixes\n\nlinting and unused variables\n"
    },
    {
      "commit": "6339fec26f609c4572ac7755c2a32d1514823580",
      "tree": "50253ea5f0959d8ac6d12f973de3dc62129357f8",
      "parents": [
        "ee9aac00518196bd9f688edc2796b035b9645453"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Jun 03 14:36:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 14:36:12 2026 +0200"
      },
      "message": "typo fix"
    },
    {
      "commit": "ee9aac00518196bd9f688edc2796b035b9645453",
      "tree": "e61d75085da62b7f472e6c0779b5fffeb0784334",
      "parents": [
        "1feebc2519c888dc1ce7cacd2a66422a95c05c01",
        "e0be93d40d1e23eb1be027020b976dcdc8656602"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Jun 03 01:39:46 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 01:39:46 2026 +0200"
      },
      "message": "Merge pull request #5 from apache/cottage14-patch-1\n\nUpdate About.svelte edits to improve readability, with questions"
    },
    {
      "commit": "1feebc2519c888dc1ce7cacd2a66422a95c05c01",
      "tree": "ed63290f8377a6fca11ca49d829bb18023262dba",
      "parents": [
        "ed3b8ed8c55a315670f15dc2a762db212423b7a9"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Jun 02 22:19:11 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue Jun 02 22:19:11 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for ed3b8ed [skip ci]\n"
    },
    {
      "commit": "ed3b8ed8c55a315670f15dc2a762db212423b7a9",
      "tree": "f42a0b7563f200cbd596b186407828b3e900689e",
      "parents": [
        "c9b68c23517396a24dfa263f6abf9e4f1e735620",
        "5778091372f8cbfa829dac15d35ced5f53ff31e0"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed Jun 03 00:18:35 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 00:18:35 2026 +0200"
      },
      "message": "Merge pull request #6 from apache/cottage14-patch-2\n\nUpdate Dashboard.svelte minor text edits"
    },
    {
      "commit": "5778091372f8cbfa829dac15d35ced5f53ff31e0",
      "tree": "f42a0b7563f200cbd596b186407828b3e900689e",
      "parents": [
        "c9b68c23517396a24dfa263f6abf9e4f1e735620"
      ],
      "author": {
        "name": "Andrew Wetmore",
        "email": "andrew@cottage14.com",
        "time": "Tue Jun 02 14:30:34 2026 -0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 14:30:34 2026 -0300"
      },
      "message": "Update Dashboard.svelte minor text edits"
    },
    {
      "commit": "e0be93d40d1e23eb1be027020b976dcdc8656602",
      "tree": "d9c658cbdacd50ade2bb1921a04fafcec703197b",
      "parents": [
        "c9b68c23517396a24dfa263f6abf9e4f1e735620"
      ],
      "author": {
        "name": "Andrew Wetmore",
        "email": "andrew@cottage14.com",
        "time": "Tue Jun 02 14:26:56 2026 -0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 14:26:56 2026 -0300"
      },
      "message": "Update About.svelte edits to improve readability, with questions\n\nline 189 - I am presuming that the \u0027list\u0027 CAP engages with is the project\u0027s \u0027dev\u0027 list (not, for example, its \u0027users\u0027 list)\r\n\r\nline 206: how does one \u0027load\u0027 the question?"
    },
    {
      "commit": "c9b68c23517396a24dfa263f6abf9e4f1e735620",
      "tree": "65ee34de94f6590f21969d628acba22b88fa3180",
      "parents": [
        "c02fa69f66db886fb9e65a31e2df1a7a52377441"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 10:00:35 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 10:01:39 2026 -0500"
      },
      "message": "expand on email messaging\n"
    },
    {
      "commit": "c02fa69f66db886fb9e65a31e2df1a7a52377441",
      "tree": "4b7ca7206510062c314ce74a5bf42f78ca2d8195",
      "parents": [
        "fd1ee43bc458bd9637aec9cc7fae47d4c244c399"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 09:51:51 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 10:01:39 2026 -0500"
      },
      "message": "change notify logic to use AuthenticatedUser, tweak wordings\n"
    },
    {
      "commit": "fd1ee43bc458bd9637aec9cc7fae47d4c244c399",
      "tree": "c7fed8092c0af8c6129591ea82a08fa9c3726ed5",
      "parents": [
        "bf078e881c08495be3c5872940b3818bf2198969"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Sat May 30 14:22:07 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Sat May 30 14:22:07 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for bf078e8 [skip ci]\n"
    },
    {
      "commit": "bf078e881c08495be3c5872940b3818bf2198969",
      "tree": "5a5f28fbc74a006b3896007f22bfa0cc97296911",
      "parents": [
        "be75c64d0d42b65eec11e30c64d9b03cef0156ed"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 09:21:27 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 09:21:27 2026 -0500"
      },
      "message": "add DB upograde script\n"
    },
    {
      "commit": "be75c64d0d42b65eec11e30c64d9b03cef0156ed",
      "tree": "2149a2e0de166da47db68320c3509cf76ac066db",
      "parents": [
        "6ce24f4aaaee0290736e88960b51e566d1c56bdc"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 09:17:55 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 09:17:55 2026 -0500"
      },
      "message": "Add simple majority to the frontend, link to ASF glossary for definitions\n"
    },
    {
      "commit": "6ce24f4aaaee0290736e88960b51e566d1c56bdc",
      "tree": "c8697f7f8e54e611d91fea417bcdab8f2d353704",
      "parents": [
        "427751125e20a5664a458e76caa47cf074413f3a"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 08:49:56 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Sat May 30 08:49:56 2026 -0500"
      },
      "message": "Add \"simple majority\" vote type to backend\n"
    },
    {
      "commit": "427751125e20a5664a458e76caa47cf074413f3a",
      "tree": "9a0582bec675f972bc30efc610bc53e59fd40379",
      "parents": [
        "4734109f52be4840a766cfac36a7736f8cb3ebc0"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri May 29 15:01:33 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri May 29 15:01:33 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 4734109 [skip ci]\n"
    },
    {
      "commit": "4734109f52be4840a766cfac36a7736f8cb3ebc0",
      "tree": "e34a2042ba09e7480fd34857e55e4716e15d1628",
      "parents": [
        "998a4a8a8b74fe87ca269da121568c5dc94de0b5"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri May 29 09:59:59 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Fri May 29 10:00:38 2026 -0500"
      },
      "message": "add opengraph metadata\n"
    },
    {
      "commit": "998a4a8a8b74fe87ca269da121568c5dc94de0b5",
      "tree": "cd2e847d7713ea3f38c57667979fec5880ee1980",
      "parents": [
        "a470507705d4a61500f4cc3e3247a704845e6ab9"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 23:46:50 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 23:46:50 2026 +0200"
      },
      "message": "fix positioning\n\nReorganized notifications section in .asf.yaml"
    },
    {
      "commit": "a470507705d4a61500f4cc3e3247a704845e6ab9",
      "tree": "455dea2e9ddad6960d00023908e39bc4a38bd3d6",
      "parents": [
        "3c3559ded8b5525c99c364df197f83deced77bd5"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 23:45:04 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 23:45:04 2026 +0200"
      },
      "message": "add default ruleset"
    },
    {
      "commit": "3c3559ded8b5525c99c364df197f83deced77bd5",
      "tree": "6916def1599830fcbc518760e629d0d8a1a5b95c",
      "parents": [
        "87a7b1d2470f29afaecf32a844d6cab3fb3cfe49"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu May 28 20:46:00 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu May 28 20:46:00 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 87a7b1d [skip ci]\n"
    },
    {
      "commit": "87a7b1d2470f29afaecf32a844d6cab3fb3cfe49",
      "tree": "b8dbb8ff9f5fb71df7dfe40241b2d0e8467f91fb",
      "parents": [
        "a76a8a403548d9cc1c5c47753aa2b3e04db796d5"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 15:45:04 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 15:45:19 2026 -0500"
      },
      "message": "switch iconography\n"
    },
    {
      "commit": "a76a8a403548d9cc1c5c47753aa2b3e04db796d5",
      "tree": "355e99ffafab57463d3536e0968aaaf353d53756",
      "parents": [
        "597927dd28bbd0a40df25265d8742346bd2263b6"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu May 28 20:23:11 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu May 28 20:23:11 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 597927d [skip ci]\n"
    },
    {
      "commit": "597927dd28bbd0a40df25265d8742346bd2263b6",
      "tree": "5e57025cd026a4140f55ef8c563d37294115d1c0",
      "parents": [
        "8840cb014df54fd34e357b8d59c7157c3e8d3871"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 15:21:39 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 15:22:13 2026 -0500"
      },
      "message": "typo fix\n"
    },
    {
      "commit": "20d309efde2ba17dc4164903ebd79998b9ac0fd5",
      "tree": "92e7f4e77b255d67c9df2dc33ca0555a6b2fd0e4",
      "parents": [
        "8840cb014df54fd34e357b8d59c7157c3e8d3871"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu May 28 17:55:54 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 17:55:54 2026 +0000"
      },
      "message": "Bump svelte and @sveltejs/vite-plugin-svelte in /frontend\n\nBumps [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte) and [@sveltejs/vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte/tree/HEAD/packages/vite-plugin-svelte). These dependencies needed to be updated together.\n\nUpdates `svelte` from 4.2.20 to 5.55.10\n- [Release notes](https://github.com/sveltejs/svelte/releases)\n- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)\n- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.55.10/packages/svelte)\n\nUpdates `@sveltejs/vite-plugin-svelte` from 3.1.2 to 7.1.2\n- [Release notes](https://github.com/sveltejs/vite-plugin-svelte/releases)\n- [Changelog](https://github.com/sveltejs/vite-plugin-svelte/blob/main/packages/vite-plugin-svelte/CHANGELOG.md)\n- [Commits](https://github.com/sveltejs/vite-plugin-svelte/commits/@sveltejs/vite-plugin-svelte@7.1.2/packages/vite-plugin-svelte)\n\n---\nupdated-dependencies:\n- dependency-name: svelte\n  dependency-version: 5.55.10\n  dependency-type: direct:development\n- dependency-name: \"@sveltejs/vite-plugin-svelte\"\n  dependency-version: 7.1.2\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "8840cb014df54fd34e357b8d59c7157c3e8d3871",
      "tree": "e615342f9e92dde5fe82fb83938c33d5472f1158",
      "parents": [
        "9daf5c23ccd9710a5e9c0ab26e32c017da2b5c56"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu May 28 15:19:26 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu May 28 15:19:26 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 9daf5c2 [skip ci]\n"
    },
    {
      "commit": "9daf5c23ccd9710a5e9c0ab26e32c017da2b5c56",
      "tree": "de4beb6694b8349f41b195a558e6eb167b6c19f4",
      "parents": [
        "fe49b9fbe2164ee201b3a64ac6b9ff56d5ba6e61"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 10:16:52 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 10:16:52 2026 -0500"
      },
      "message": "Remark where email notifications are currently going\n"
    },
    {
      "commit": "fe49b9fbe2164ee201b3a64ac6b9ff56d5ba6e61",
      "tree": "f76d1be4a0ada1ce725ec608fd7c5ed0bc9c074b",
      "parents": [
        "3829646fdfcd195d1af0ea46a5ace276c6dd98ab"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:44:42 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:44:42 2026 -0500"
      },
      "message": "remove unused file\n"
    },
    {
      "commit": "3829646fdfcd195d1af0ea46a5ace276c6dd98ab",
      "tree": "08e89f0ffa2b8e12c64b6a02bb195febb320f041",
      "parents": [
        "f4a57f42eebe618fc05f9a3dac8dd639641c019a"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:41:53 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:41:53 2026 -0500"
      },
      "message": "linting\n"
    },
    {
      "commit": "f4a57f42eebe618fc05f9a3dac8dd639641c019a",
      "tree": "1bc3aa0a357d580074a817216366ba6fabdf1489",
      "parents": [
        "ab797edcb2fb3e9bf1ee2a22081fabdcbb60b829"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu May 28 14:39:59 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu May 28 14:39:59 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for ab797ed [skip ci]\n"
    },
    {
      "commit": "ab797edcb2fb3e9bf1ee2a22081fabdcbb60b829",
      "tree": "d2e43b0fe485e86436d4f61334c21c217a7bcc2b",
      "parents": [
        "05c53205ce4eb80df405c9b9a2b686a84bac942f"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:37:54 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:39:13 2026 -0500"
      },
      "message": "tweak logic to require at least three +1s for anything but lazy consensus\n"
    },
    {
      "commit": "05c53205ce4eb80df405c9b9a2b686a84bac942f",
      "tree": "5ef4de3a8d2117a79ab3a0cf66393899f2f85ad3",
      "parents": [
        "cc4f5bfedbbc560d950f5dae9d55242c6b3b1b35"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:37:30 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:39:13 2026 -0500"
      },
      "message": "add missing About template\n"
    },
    {
      "commit": "cc4f5bfedbbc560d950f5dae9d55242c6b3b1b35",
      "tree": "6de9885c1fd62321d9291654c3ff145ce6435c7a",
      "parents": [
        "c4cf371cf653b0389cd1cb7b3face78c972aca4b"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:15:05 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Thu May 28 09:39:13 2026 -0500"
      },
      "message": "Add an about page\n"
    },
    {
      "commit": "c4cf371cf653b0389cd1cb7b3face78c972aca4b",
      "tree": "e751524f9c4cee098d44d036f2b8786c9578cbea",
      "parents": [
        "6ba1e470b950ae91fd332c3e53c7527364ee8302"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Wed May 27 17:38:58 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Wed May 27 17:38:58 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 6ba1e47 [skip ci]\n"
    },
    {
      "commit": "6ba1e470b950ae91fd332c3e53c7527364ee8302",
      "tree": "5276969e50b06f742c8c23b2f052eb4e7c53f233",
      "parents": [
        "6adc2d941f08740dbc3c204349284dde948933bb"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed May 27 12:25:27 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed May 27 12:25:27 2026 -0500"
      },
      "message": "Linting\n"
    },
    {
      "commit": "6adc2d941f08740dbc3c204349284dde948933bb",
      "tree": "ff12034e4a1da4b31b6506835d29b46d51d5f295",
      "parents": [
        "b499aa26d7a141586bd0bfe30dc9b42618ebc559"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed May 27 09:17:06 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Wed May 27 09:17:06 2026 -0500"
      },
      "message": "link to swagger docs in footer\n"
    },
    {
      "commit": "b499aa26d7a141586bd0bfe30dc9b42618ebc559",
      "tree": "96f139c01956b1bad044ff11c129b3859032a8ed",
      "parents": [
        "142f4e2e4ca5fbfa757efe54b0ed83a7c560de19"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue May 26 16:08:02 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue May 26 16:08:02 2026 -0500"
      },
      "message": "add config feature for debug recipient email address\n"
    },
    {
      "commit": "142f4e2e4ca5fbfa757efe54b0ed83a7c560de19",
      "tree": "ecabb81e96fce6555bc6f09d332bf12515c617fd",
      "parents": [
        "1edad61605e03d7f8c7abc3bcc2af1cc5fca35bb"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue May 26 15:50:43 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue May 26 15:50:43 2026 -0500"
      },
      "message": "nix overly verbose commentary.\n"
    },
    {
      "commit": "1edad61605e03d7f8c7abc3bcc2af1cc5fca35bb",
      "tree": "2eec634a5666a7d339b38aa6c8ffb1be306d580e",
      "parents": [
        "e57d5b0d93f16c4bc5e86cb577b0bc1964993b09"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue May 26 20:20:13 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue May 26 20:20:13 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for e57d5b0 [skip ci]\n"
    },
    {
      "commit": "e57d5b0d93f16c4bc5e86cb577b0bc1964993b09",
      "tree": "bd046f0b90816fc95cd3863dd2ae167ca46a30f6",
      "parents": [
        "338b2671ec5fc5a7174381d5cf60f80865a65851"
      ],
      "author": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue May 26 14:56:24 2026 -0500"
      },
      "committer": {
        "name": "Daniel Gruno",
        "email": "humbedooh@apache.org",
        "time": "Tue May 26 14:56:24 2026 -0500"
      },
      "message": "add a welcome message that explains what this service does\n"
    },
    {
      "commit": "338b2671ec5fc5a7174381d5cf60f80865a65851",
      "tree": "a2b7711dc59a8f10c6cdf8b4ed284384a379f56b",
      "parents": [
        "420a4f29c0e71994365e86d38c1f9bc63eca250f"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue May 26 19:16:35 2026 +0000"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue May 26 19:16:35 2026 +0000"
      },
      "message": "chore(frontend): rebuild dist for 420a4f2 [skip ci]\n"
    }
  ],
  "next": "420a4f29c0e71994365e86d38c1f9bc63eca250f"
}
