)]}'
{
  "log": [
    {
      "commit": "837699bf55d27975e9e5b881b8794683bb1b10c8",
      "tree": "3aa7377ad7d441e10bfd0cf5e5f73a82de198764",
      "parents": [
        "c5848f3cb9753e94feddc04b8910b4ff113a458c"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 28 18:58:17 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 28 12:01:29 2025 -0700"
      },
      "message": "github: fix Discord notification to handle multiple commits in queue push\n\nPreviously, commit queue pushes only notified about the final commit\ninstead of all commits being pushed to main. We now properly detect and\nnotify about all commits in a queue push in chronological order.\n\nChanges include:\n\n1. Enhanced push step in queue-main.yml and queue-dev.yml:\n   - Capture range of commits being pushed using git log origin/main..COMMIT_TO_PUSH\n   - Use --reverse flag to get commits in chronological order (oldest first)\n   - Store commit list in GITHUB_OUTPUT for notification step\n\n2. Updated Discord notification steps:\n   - Iterate through all commits in the push (not just the final one)\n   - Checkout each commit individually before calling discord_notify.py\n   - Send separate notification for each commit in correct chronological order\n\n3. Proper edge case handling:\n   - Single commit pushes: Works correctly (sends one notification)\n   - Empty pushes: Skips notification when no commits to notify about\n   - Formatted commits: Includes both original and formatting commits\n\nThe fix ensures that when developers push multiple commits to a queue branch\n(e.g., queue-main-username), Discord notifications are sent for each commit\nthat gets pushed to main, not just the latest one. Notifications appear in\nchronological order matching the actual commit sequence.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n\nChange-ID: s6a336eb2f945539fk"
    },
    {
      "commit": "6e4636006501be61b940388381cd75a8ad00e6b5",
      "tree": "39363c1c47111cbaf66eecd6b6e0274edbfa7b5c",
      "parents": [
        "77bac8c26324bad3c4b903a5321a2b0a078881ba"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 28 18:10:59 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 28 11:33:56 2025 -0700"
      },
      "message": "github: add Discord notification to commit queue workflow\n\nThe Discord notification workflow was not triggering when commits were\npushed to main via the commit queue because GitHub Actions doesn\u0027t\ntrigger workflows when pushes are made using GITHUB_TOKEN (security\nfeature).\n\nThis fix adds Discord notification directly to the queue-main.yml\nworkflow after successful push to main, ensuring notifications are sent\nfor both direct pushes and commit queue pushes.\n\nChanges:\n- Add commit SHA capture in push step to track which commit was pushed\n- Add checkout step to ensure correct commit is available for git commands\n- Add Discord notification step using existing .github/scripts/discord_notify.py\n- Configure proper environment variables (DISCORD_WEBHOOK_FOR_COMMITS, GITHUB_SHA)\n\nThe existing discord-notify.yml workflow continues to work for direct\npushes to main, providing dual coverage for all scenarios.\n\nTested Discord notification script in test mode - generates proper embed\nwith commit message, author, and GitHub link.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n\nChange-ID: s94d86820e52726b5k\n"
    },
    {
      "commit": "fa306776f93d607b88d4472f06ea788f69507945",
      "tree": "ab2cb9324ed5dda09b2d6276779bedf922e759cd",
      "parents": [
        "217e987e1c8d16907849e1f8ba7e5dd8ad4af052"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 28 09:37:04 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 28 10:36:09 2025 -0700"
      },
      "message": ".github/scripts: include commit body, cut pointless title, repo"
    },
    {
      "commit": "f178755c781c74ef242762ceb2c707c9a4dd2676",
      "tree": "5a4dae9bd281ae0ff138cfb72a6883633bac2b22",
      "parents": [
        "a9948c03ce510e5f7aa08c266c9a7b11f817b958"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed May 28 02:44:39 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed May 28 02:44:39 2025 +0000"
      },
      "message": "github: fix Discord webhook notification User-Agent rejection\n\nThe Discord webhook was failing with 403 Forbidden (error code 1010)\nwhen sending notifications because Discord was rejecting requests from\nPython\u0027s default urllib User-Agent header.\n\nThe issue was that urllib.request.Request was using Python\u0027s default\nUser-Agent which Discord treats as suspicious or automated traffic.\nWhile simple curl requests worked fine, the Python script consistently\nfailed with \u0027Webhook not found\u0027 errors.\n\nFix:\n- Add explicit User-Agent header \u0027sketch.dev developers\u0027 to HTTP request\n- This allows Discord to properly identify the request as a legitimate webhook client\n\nTesting confirmed the fix:\n- Before: 403 Forbidden with error code 1010\n- After: 204 No Content (successful webhook delivery)\n\nThe Discord embed payload structure was already correct - only the\nUser-Agent header was causing the rejection.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n\nChange-ID: sc716013db28856a0k\n"
    },
    {
      "commit": "a9948c03ce510e5f7aa08c266c9a7b11f817b958",
      "tree": "1990e647ef8261d8d4cafa1f835db1f961d3fc39",
      "parents": [
        "a09d6389c9c1baf859ab4bcd03fe93aa7f52258d"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 27 19:29:47 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 27 19:29:47 2025 -0700"
      },
      "message": "Remove CI\u003d1 requirement for discord_notify.\n"
    },
    {
      "commit": "9e3c867ad3ae20dd6d6261d4242b802c993939e3",
      "tree": "e9057a65d258f624725691a28654282b2dae9748",
      "parents": [
        "3d2eff03a428424a31173b0f30f3d647a570b455"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 27 17:09:14 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 27 18:13:33 2025 -0700"
      },
      "message": "github: add Discord webhook notification for main branch commits\n\nCreates a GitHub Actions workflow that sends Discord notifications when\ncommits are pushed to the main branch. The implementation prioritizes\nclean separation between workflow orchestration and notification logic.\n\nArchitecture:\n- .github/workflows/discord-notify.yml: Minimal workflow with single\n  Python script execution\n- .github/scripts/discord_notify.py: Self-contained script handling all\n  commit extraction, JSON generation, and webhook delivery\n\nFeatures:\n- Triggers only on pushes to main branch\n- Extracts commit information using git subprocess calls\n- Generates Discord embed with commit message, author, SHA, and link\n- Safe JSON serialization handles quotes, newlines, and special characters\n- Robust environment validation (requires CI\u003d1 and GITHUB_SHA)\n- Proper HTTP error handling with status code checking\n\nThe webhook sends rich embeds to Discord with commit details including\nclickable commit links and properly formatted timestamps. All shell\nscripting is avoided in the YAML file - the workflow simply executes\nthe Python script which handles everything else.\n\nWebhook URL points to the provided Discord channel endpoint.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s82b63953ab6ceccbk\n"
    },
    {
      "commit": "6ada85d6c4401ca82e3809fbd3af0178de1b7b11",
      "tree": "e95b40c49571b6777c386a85dcc500fcc4f487f1",
      "parents": [
        "f7bebdd0a51bfe6f4148d7717e833d8d3e4fe5a5"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 14 22:08:09 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 15 12:24:07 2025 -0700"
      },
      "message": "ci: fix checkout reference in formatting workflow\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sb7ac2d84761d3e37k\n"
    },
    {
      "commit": "8b43ffbf41d06aee5ad5c734f1661a3b62cfe1a9",
      "tree": "3a9ce0f6f5330234e89bfb1ed65d4d10aff33ec9",
      "parents": [
        "33d282f80db786cc60ba521a38ed5166f23239ed"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 21:44:18 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 06 10:23:39 2025 -0700"
      },
      "message": "Install chromium for tests\n"
    },
    {
      "commit": "923a3bad481d1881aa895f1262bfa8f07d37374f",
      "tree": "a0b1d607e5c291e198df179c1624e0e652b50a12",
      "parents": [
        "4d4e8075e4df5249537e3ec96fea72a8bcc2399d"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 15:27:13 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 15:27:13 2025 -0700"
      },
      "message": ".github/workflows: run tests with GOEXPERIMENT\u003dsynctest\n\nSo those tests don\u0027t rot again.\n"
    },
    {
      "commit": "48c84c9a4df29b1e51c7fdca81053dd9cd0c2446",
      "tree": "6d6a4700838bca627acb74e1e35bfd1051c2ab8e",
      "parents": [
        "936ba626345d9480698e7fced548224973b8a0a5"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 16:15:27 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 17:19:01 2025 -0700"
      },
      "message": ".github/workflows: remove vibe-coded nonsense\n\nThis conditional is unnecessary.\nThe only way to reach this is if\nwe are fixing up the formatting,\nat which point pushing back the\nchanges are entirely reasonable.\n"
    },
    {
      "commit": "936ba626345d9480698e7fced548224973b8a0a5",
      "tree": "04364304baefa8903aa23a846bfe4149b3010ea8",
      "parents": [
        "88c61bdd046f257e849aebf2fbe3be7c9c6f06ef"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 20:53:21 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 17:19:01 2025 -0700"
      },
      "message": ".github/workflows: thread formatted HEAD commit to test sub-actions\n\nThread the commit SHA from the formatting job to the test jobs in GitHub workflows.\nThis ensures that when auto-formatting runs in the queue-main and queue-dev workflows,\ntests run against the newly formatted code rather than the original code.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "88c61bdd046f257e849aebf2fbe3be7c9c6f06ef",
      "tree": "49e9927a2973ce5d4f1bef2c8ae16b892a633eee",
      "parents": [
        "3e2111b1e18a39a4eba4a0afa0327b6a67acf802"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 13:40:34 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 17:19:01 2025 -0700"
      },
      "message": ".github/workflows: fail if go generate creates a diff\n\nTODO: treat that as a formatting step, and auto-run?"
    },
    {
      "commit": "93bb66a204ba666fbef0e8590b9f210c267fe5f8",
      "tree": "b6da2ac70bfeaaed68c497420a5cc648a5453ad7",
      "parents": [
        "40ffb847b6f04e6e28db42e8dea5985d5636f4e5"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 16:29:05 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 16:34:16 2025 -0700"
      },
      "message": ".github: don\u0027t run workflows on queue-dev-* either\n"
    },
    {
      "commit": "40ffb847b6f04e6e28db42e8dea5985d5636f4e5",
      "tree": "ea1d352b8c6d49146bce8edf2310251a4e5dd889",
      "parents": [
        "4c1015ae484d3561db076b12113ca442ec97d9c5"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 16:28:44 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 16:34:16 2025 -0700"
      },
      "message": ".github: let my autoformatter muck with the quotes"
    },
    {
      "commit": "4c1015ae484d3561db076b12113ca442ec97d9c5",
      "tree": "40b555bdddec809d21350737be7d8a1d1839baf7",
      "parents": [
        "d33ee13991bc7d4c923f12df35032796b8400903"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 16:28:21 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 16:34:16 2025 -0700"
      },
      "message": ".github: delete extraneous whitespace"
    },
    {
      "commit": "efda3961932b3c8d8fb169d9e043bc68c3dd1845",
      "tree": "2e5b037faaca7470ceca85d23219263045667bcd",
      "parents": [
        "db5e9b482194a801524a99af9fee06911147ff26"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 13:09:42 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 13:21:23 2025 -0700"
      },
      "message": ".github/workflows: add a dev queue for GitHub Actions hacking\n"
    },
    {
      "commit": "b74b526b579320c08ad85cc8b4bdd719c9d6d7c8",
      "tree": "e3aebac4b65ecd8cfd4fe7e6298bfb451bf5cf90",
      "parents": [
        "104897387b99f047d011c74050a6da59b7f80982"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 12:53:46 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 12:53:46 2025 -0700"
      },
      "message": ".github/workflows: further parameterize\n\nIf anyone else wants to re-use this code, this\u0027ll make it easier\nto copy/paste."
    },
    {
      "commit": "104897387b99f047d011c74050a6da59b7f80982",
      "tree": "dd6250079a048d7a8e85a2a0d27e11495d307551",
      "parents": [
        "9f4b8089f93f39300b819ccf83cf64a7a867c0dc"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 12:49:10 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 12:49:10 2025 -0700"
      },
      "message": ".github/workflows: delete unnecessary \u0027git config\u0027 calls\n\nNo git commits happening here."
    },
    {
      "commit": "7910eef0b83f5ce15af3c1a9fa6b6f29165d335e",
      "tree": "9294b377622f118053e05650a56e2e8bcc66eb4b",
      "parents": [
        "d20ded51d0564fd3955320e6bfc6c90e5c190680"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Apr 30 17:50:33 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed Apr 30 17:54:50 2025 +0000"
      },
      "message": "ci: amend single commits when auto-formatting queue-main branches\n\nModify the formatting workflow to check the number of commits since\nthe merge-base with origin/main. If there\u0027s exactly one commit\nsince the merge-base, amend that commit instead of adding a new\nformatting commit. For multiple commits, continue to add a new\ncommit as before.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "833a0f83af52be33eed3baf0f67ffa3ddab55cb4",
      "tree": "0f1c78df648d499ed6ac3e975276ecc977ab4e70",
      "parents": [
        "0cbd976940708c94eb8b644b14bfda3f19087997"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Apr 24 18:39:36 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 19:31:00 2025 -0700"
      },
      "message": "claudetool: improve codereview\n\nDo a bunch of un-vibecoding and bug fixing.\nUnfortunately, lots left.\nGet rid of vet; gopls check covers it.\n\nAdd testing infrastructure and a bunch of fixtures.\n"
    },
    {
      "commit": "eda2a8ca73891aa55831391cea6cc8c6d2a79d67",
      "tree": "4d64d78eacc2ef0193910bd7da41f67ac5da90d1",
      "parents": [
        "5b8ab1f1a7bcdd4d1a44e654d2a50074a64bc443"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 21:24:11 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 14:27:06 2025 -0700"
      },
      "message": "Simplify and fix GitHub workflow push to main\n\nInstead of fetching and checking out the formatted commit before pushing,\ndirectly push the formatted commit SHA to main. This simplifies the workflow\nand is more reliable.\n\nAdd missing outputs section to workflow_call definition in formatting.yml\nto properly expose the commit SHA to the calling workflow.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "c3391a932e724dc6f6898c8e1b51002d104822e1",
      "tree": "d325f2df9d7a4d8ea8ddca9a47df9e362222ac8e",
      "parents": [
        "a0801ad5dbd2a0e4d4983447b62f72444e829927"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 21:03:33 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 14:10:35 2025 -0700"
      },
      "message": "Fix autoformatting push to main in GitHub workflow\n\nThe push-to-main job was not correctly fetching the latest commit\n(with formatting fixes) from the queue-main branch before pushing to main.\nThis ensures the latest changes are used.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "6e42f32893e061a36f67aa0abbb8c62b402262c2",
      "tree": "1a23bff4eeb700f9a1fd2152b300fedfe4d4f9ff",
      "parents": [
        "15a4db76df2c71b8398702727e9892e51dc18478"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:18:36 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:23:52 2025 -0700"
      },
      "message": ".github/workflows: let prettier format yml files\n\nI don\u0027t care. But now when I hit save it won\u0027t change any more.\n"
    },
    {
      "commit": "15a4db76df2c71b8398702727e9892e51dc18478",
      "tree": "953a02dcf9cc8c4faabba73b09937355060ef02d",
      "parents": [
        "ae77226709546105985bc38c06382dceabae50ff"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:18:06 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:23:52 2025 -0700"
      },
      "message": ".github/workflows: improve autoformatter commit message"
    },
    {
      "commit": "ae77226709546105985bc38c06382dceabae50ff",
      "tree": "e3b691c973341c5e62aefd1ba72ecbf00da31900",
      "parents": [
        "4de8a91553cccc6f7e48419de75acfddafdb549b"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 20:02:22 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:13:27 2025 -0700"
      },
      "message": "Try again to fix GitHub Actions permission issues\n"
    },
    {
      "commit": "ddc81426ded54ef97b7650f5f9d1ef9c94b80fd3",
      "tree": "cfd82b5dad08203a8f756350cbfed80a09031edc",
      "parents": [
        "e7c9a4429c54a6d6431f825ee81858785e0c5d8e"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 19:47:05 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 12:52:46 2025 -0700"
      },
      "message": "Fix GitHub Actions permissions for pushing to main\n\nUse explicit GitHub token for authentication when pushing to main branch in the\nqueue-main workflow to resolve the 403 permission denied error.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "bd6c1680c6361ee9ed1735ed56edb0bb2b0c56ec",
      "tree": "738d834bcf4b9ef1f538a15c600ac7e47bc8076b",
      "parents": [
        "8b00db1c6b7ee7930c005efa547775ad3709f37a"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 12:04:07 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 12:04:07 2025 -0700"
      },
      "message": "autofix formatting during queue-main pushes\n\n"
    },
    {
      "commit": "8b00db1c6b7ee7930c005efa547775ad3709f37a",
      "tree": "ee34fd0b0c6b123bc09dc80fb78aa79831d5853d",
      "parents": [
        "9b999b08b8af6a69e24d910a3f3da542b4104c26"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 18:41:38 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Fri Apr 25 11:44:05 2025 -0700"
      },
      "message": "Add run-formatters.sh script and update GitHub workflow\n\nThis commit adds a new bin/run-formatters.sh script that can both check and fix code formatting.\nThe script handles Go code formatting with gofumpt and webui formatting with Prettier.\nThe GitHub workflow has been updated to use this script in check mode.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "2032b1c1971ceb85ca14b20273a3783729fba3e3",
      "tree": "0486e9222643ffcbbd34286148f4a7913a169668",
      "parents": [
        "4f50a68ac73677c0022b2b3da8b4667cee01c11b"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:40:42 2025 -0700"
      },
      "message": "Move webui from /loop/webui to /webui\n\nThanks, perl (and git mv):\n\n\tperl -pi -e s,loop/webui,webui,g $(git grep -l loop/webui)\n"
    },
    {
      "commit": "4f50a68ac73677c0022b2b3da8b4667cee01c11b",
      "tree": "5f90dc700f219ea50150dd8a3f7c002c8d7d2e10",
      "parents": [
        "6c1f34f0a737a796942ccbd4e4003bc66ba73453"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:34:55 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:37:03 2025 -0700"
      },
      "message": "Optimize Playwright installation to only use Chromium\n\n- Modified GitHub workflow to only install Chromium browser instead of all browsers\n- Speeds up CI workflow by reducing download and installation time\n- Matches the existing Playwright configuration which already only uses Chromium\n\nCo-Authored-By: sketch\n\u0027npx playwright install --with-deps\u0027 is kinda slow; can you modify things so we only install chromium\n"
    },
    {
      "commit": "6c1f34f0a737a796942ccbd4e4003bc66ba73453",
      "tree": "595ef98331991e8ba179d55b52e75ece83d784a8",
      "parents": [
        "b4c7e1bdd860836d46c64065f268007e721e5fb8"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:33:03 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:36:57 2025 -0700"
      },
      "message": "Enhance GitHub workflow to use gotestsum for better test visualization\n\n- Install gotestsum in the workflow\n- Replace go test with gotestsum using testname format\n- Generate JUnit XML reports\n- Add step to publish test results\n\nRemove external test results action from workflow\n\n- Removed the EnricoMi/publish-unit-test-result-action dependency\n- Removed JUnit XML file generation for test results\n- Keep gotestsum with testname format for better test result visibility\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "4de80d219b96677b9e43e50293ec55bdf273f36d",
      "tree": "c525fffadb68c26981b00ec19abe8e5810afacb3",
      "parents": [
        "9a66cad2e538c0edd4b973332f8e3e6d3a5763ef"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 12:33:31 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 12:33:31 2025 -0700"
      },
      "message": "Add formatting workflow with prettier and gofumpt v0.8.0\n\nThis commit adds a new GitHub workflow for code formatting that:\n- Uses prettier to check JavaScript/TypeScript code formatting\n- Uses gofumpt v0.8.0 to check Go code formatting\n- Updates the queue workflow to run both UI tests and formatting checks\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "e8d6b80c8804353641c0d999d1897e29b068bbdc",
      "tree": "3ee460802c8a7c375a24aa8795acf5a51e427280",
      "parents": [
        "5164eee229bec08f6ba01d6416a4e0c324230c5a"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 19:02:05 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 21 19:02:05 2025 -0700"
      },
      "message": "Add GitHub workflow to run tests for changes under loop/webui/...  (#7)\n\n* Add GitHub workflow for loop/webui tests\n\nThis workflow runs npm test in the loop/webui directory\nwhen there are changes to files in that directory.\n\nCo-Authored-By: sketch\n\n* webui: use terser output on ci"
    },
    {
      "commit": "9abbf92a1c58300005971d7f89b301620d59e883",
      "tree": "b2170fdb5383543e727536c2dc121a9914f6a8a6",
      "parents": [
        "86b56862f8d3e192646a17548ef5294582c31f8f"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 13:17:38 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 18 13:17:38 2025 -0700"
      },
      "message": ".github/workflows: use ubuntu-latest (#2)\n\n"
    },
    {
      "commit": "2e463fb649fcff14d4025ddb91f630a98e7da526",
      "tree": "0e86854d80d2759a913870655f13226c31f9d30c",
      "parents": [],
      "author": {
        "name": "Earl Lee",
        "email": "earl.lee@sketch.dev",
        "time": "Thu Apr 17 11:22:22 2025 -0700"
      },
      "committer": {
        "name": "Earl Lee",
        "email": "earl.lee@sketch.dev",
        "time": "Thu Apr 17 11:35:33 2025 -0700"
      },
      "message": "Initial commit\n"
    }
  ]
}
