)]}'
{
  "log": [
    {
      "commit": "c314f0c95a5b10cb10904181a181c4ce0d8d1a4b",
      "tree": "420df7effcd472dd86cb5b3d92bafe2ce35b65db",
      "parents": [
        "4f833b1678175fbc83c908fc347eae87a89a59db"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 16 16:48:46 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 16 16:48:46 2025 -0700"
      },
      "message": "github: set include-slow-tests\u003dfalse in queue-main and queue-dev workflows\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s732f68156ca2ab2ek\n"
    },
    {
      "commit": "4f833b1678175fbc83c908fc347eae87a89a59db",
      "tree": "e5cc3d356a290e38747f750413fd89904c094141",
      "parents": [
        "09b86f40dd7b2fd26b92dc49add2d8555785749c"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 16 16:30:41 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 16 16:31:02 2025 -0700"
      },
      "message": "github: add main-cron workflow and include-slow-tests flag\n\nAdd main-cron workflow that runs every 6 hours with same test suite as\nqueue-main but with slow tests disabled for faster feedback. Also add\ninclude-slow-tests flag to go_test.yml workflow.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sf1670b17c28d88e2k\n"
    },
    {
      "commit": "fb56a5cb097451f5702372da7af8356e35806a73",
      "tree": "56bee60df451d595fce50e71f76fb8f8948027d9",
      "parents": [
        "cbf8c32b26ae73e4d3cf486a93a2bce5866195df"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 16 22:38:38 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 16 15:59:08 2025 -0700"
      },
      "message": "sketch: fix Discord notifications to show all commits in stack\n\nThe COMMITS_TO_NOTIFY command was only returning the top commit instead of\nall commits being pushed to main. This happened because in GitHub Actions\ncontext, the origin/main reference might not be current.\n\nFix by fetching the latest main branch reference and using the local main\nbranch as the base for the git log range calculation instead of origin/main.\n\nThis ensures all commits in the stack are properly included in Discord\nnotifications.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: seddc0c760b07e1adk\n"
    },
    {
      "commit": "cbf8c32b26ae73e4d3cf486a93a2bce5866195df",
      "tree": "8139bbc29ff5723bb2358eb9ee4762b19942ff91",
      "parents": [
        "390f847edb6fe450fc547938c2e806db693d9e61"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 16 15:25:39 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 16 15:25:39 2025 -0700"
      },
      "message": "Revert \"sketch: fix Discord notifications to show all commits in stack\"\n\nThis reverts commit af1e5d99704e3657fdf4b18ec0a68c2d7c22e3c6.\n"
    },
    {
      "commit": "b58bbf30db0ced33cc110dd44d6c14995977737f",
      "tree": "bc136bb11a4bc43f8b8679c06677de6601cb9e34",
      "parents": [
        "f3d739fcb7391c0a4413e79c69322129da9df5cc"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jul 16 18:33:34 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jul 16 12:00:26 2025 -0700"
      },
      "message": "goreleaser: add experimental homebrew tap support\n\nThink it\u0027s right, but not sure whether it\u0027ll actually work.\nTomorrow, if it functions, we\u0027ll declare it no longer experimental.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s5126ee115c362b2ck\n"
    },
    {
      "commit": "327c1966f1949b922463f77384acc5bfa9492fd3",
      "tree": "406bfeefe514762d79a4862baed994619b07f51f",
      "parents": [
        "5a3cd2a0d93e45bb551b1617a9ace281d5788b59"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon Jul 14 16:08:51 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon Jul 14 16:08:51 2025 -0700"
      },
      "message": "sketch: fix Discord notifications to show all commits in stack\n\nVibe-coding an improvement to the Discord notifications.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s9b380343c76d40dck\n"
    },
    {
      "commit": "5a3cd2a0d93e45bb551b1617a9ace281d5788b59",
      "tree": "ebb7dcefee1bbd7b14deed7d596643837f246858",
      "parents": [
        "43a0bfc2227f07db26ff785470fbac35d309499a"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon Jul 14 15:16:06 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon Jul 14 15:16:06 2025 -0700"
      },
      "message": "ci: update GitHub workflows to use Go 1.24.5\n\nUpdate Go version references in GitHub workflow cache configurations to\nmatch the Go version specified in go.mod files across the repository.\n\nI\u0027m unclear whether putting the go version in here is necessary,\nbut not rocking that boat right now.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sf306dbc03d8b2709k\n"
    },
    {
      "commit": "a50a3bf9e4b996498289df50744bdce09a59cc13",
      "tree": "92194e1c19ef8805b1fc725cf74d54a919d99fb9",
      "parents": [
        "9b39aa66590f68f9039a8efc0c4e1917551016e6"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Jul 14 19:40:48 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Jul 14 13:18:34 2025 -0700"
      },
      "message": ".goreleaser: simplify and harden signing\n\nPass envvar via stdin instead of writing to a file.\nRemove base64.\nRestrict secret to release-build environment.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: saf0aa2158a183abek\n"
    },
    {
      "commit": "b80db9c74081f89810ee13789345add0d6210297",
      "tree": "00c40c65f93d3d3f91aa4ef7f2d311abdd59915f",
      "parents": [
        "ea5504c438ff5f61e51375e6229b3bfc003ef138"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Sat Jul 12 01:20:36 2025 +0000"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Sat Jul 12 11:27:18 2025 +1000"
      },
      "message": "sketch: fix nightly releases being marked as pre-releases\n\nRemove the GitHub workflow step that was explicitly marking releases as pre-releases.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sf9e8db3a7bac9e0dk\n"
    },
    {
      "commit": "5e97dfc62b2c26cd6f483b06c1f5b034307c9791",
      "tree": "459cd8afe14721c1aae4676c68aa225877c33e2d",
      "parents": [
        "61fa306b9a6e7677b63b66e3599f5fe5af2015a7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Jul 11 18:14:07 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Jul 11 14:56:19 2025 -0700"
      },
      "message": ".goreleaser.yml: add binary-only releases and ed25519 signatures\n\nThis lays the groundwork for future secure self-updates.\nThe corresponding public key is in selfupdate/ed25519.pem.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s5b7440b1a9e2c5e3k\n"
    },
    {
      "commit": "6ae637a035e22fcc375bd522d24d9c22f281fec5",
      "tree": "adfbe68d9bce24daf42bce1a52055430df221718",
      "parents": [
        "a002a23a60dcc21353681a887a90cd12867e7f44"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jul 09 12:41:56 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jul 09 14:55:56 2025 -0700"
      },
      "message": "all: re-organize build/release\n\n- extract steps into shell files\n- fix GoReleaser builds (I hope)\n- rely more on the toolchain for version information\n- allow non-standard builds, but print a warning\n\nSuggested-by: Marc-Antoine Ruel \u003cmaruel@gmail.com\u003e\n"
    },
    {
      "commit": "7b00c2c73c6e01a56134b6c18ae9ff67a0a81984",
      "tree": "5641b07feafa24ebb86219cd216fea276580782e",
      "parents": [
        "9f5cb2e25bb67ca67e5b8f5133452069b2ea709d"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jul 02 12:24:30 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jul 02 17:42:15 2025 -0700"
      },
      "message": "all: add minimal GoReleaser configuration for nightly builds\n\nThis is step one of many towards automated nightly releases.\n\nThis gets us downloadable binaries, which can be grabbed manually\nfrom GitHub Releases...in theory, since this is untested,\nbecause GitHub Actions.\n\nOnce this is working, future steps include:\n\n- documentation\n- homebrew support (and other package managers?)\n- auto-updates\n- installers\n- blah blah blah\n\n"
    },
    {
      "commit": "4ce9dca335692e6aeff59c57f9a91b6ee19756ed",
      "tree": "31c96d7356304b3739b2225422cb1a4c1b66ee53",
      "parents": [
        "9aa141a4bdde68a1ad57d56ba3cb0023109c6b7b"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jun 27 09:46:42 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jun 27 09:46:42 2025 -0700"
      },
      "message": "Bump down to 8-core github runners\n"
    },
    {
      "commit": "037f3160b72f05979c02787274b570a92da5a764",
      "tree": "32c824d8bfc2611465acd4b6d5fcf6709becbab4",
      "parents": [
        "be0da4410fc3f9b434ec1fb487bda486278bf524"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jun 20 22:26:31 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jun 20 18:11:34 2025 -0700"
      },
      "message": "github workflows: add working-directory input parameter\n\nAdd optional working-directory input parameter to both go_test.yml and\nwebui_test.yml workflows with default value of \u0027.\u0027, allowing workflows\nto be run from different subdirectories when needed.\n\nChanges made:\n- go_test.yml: Added working-directory input, updated go.mod path reference,\n  added working-directory to Go generate and test steps\n- webui_test.yml: Added working-directory input, updated package-lock.json path,\n  updated all webui-related step working directories and artifact path\n\nBoth workflows maintain backward compatibility with default \u0027.\u0027 value while\nenabling flexible directory targeting for workflow reuse.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sbece0e025c355895k\n"
    },
    {
      "commit": "963ae4b514ed20fc84c63c4cc6de028a99964448",
      "tree": "efae6465ae384ab5f26f01fafcac5e3ed7986504",
      "parents": [
        "2e3337d7127d24e2d22fde945de32c9a35fbb3f0"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jun 18 12:08:25 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jun 18 12:08:25 2025 -0700"
      },
      "message": "scripts: disable man-db auto-update in apt optimization script\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s5c0fd4b08cea2be8k\n"
    },
    {
      "commit": "8a290e5a3df2ec7ba8de8ffbf52081e44b2d636f",
      "tree": "024a481c416e5ea04b0ca63427b6c1344d2d8f2c",
      "parents": [
        "851d2bf4f9324b294c58bb5a79398269c2587a0d"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sun Jun 15 20:59:58 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sun Jun 15 21:05:25 2025 -0700"
      },
      "message": "Run workflows on bigger machine.\n"
    },
    {
      "commit": "a35de5f73d31756c8ac972a54bdb370bb26eed5a",
      "tree": "e86111f53c0e701a38510ed8543403f25665a891",
      "parents": [
        "46be0967c78b0e60b18b4b9ff3c642ebc96c7e4d"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat Jun 14 12:00:48 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat Jun 14 12:00:48 2025 -0700"
      },
      "message": "Using GH actions provided Chrome for test speedup (#149)\n\nOMG. This had wild behavior. Sometimes you\u0027d log into tmate, and it\nwould work. Something about running Chrome manually would tickle some\ndbus thing into working. The error would sometimes show up, but most\noften it would be swallowed.\n\nThe punchline? We had a context timeout of 5 or 10 seconds in the tests\nthat would trigger silently, and we\u0027d see nothing. Everything else\n(including maybe the dbus stuff) was a red herring: the test executor\nmachine is swamped, and shit\u0027s slow, and the various timeouts needed\ntweaking. I bet there are a few more timeouts to loosen eventually, but\nit seems to be passing now.\n\nError message:\n\tfailed to start browser (please apt get chromium or equivalent): chrome failed to start:\n"
    },
    {
      "commit": "46be0967c78b0e60b18b4b9ff3c642ebc96c7e4d",
      "tree": "35db5a5725a69f5913102fe768c4103dc4188a56",
      "parents": [
        "c013134814facb7da15b59c79399ec1939eb6ef9"
      ],
      "author": {
        "name": "philip.zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Sat Jun 14 17:51:15 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat Jun 14 11:38:48 2025 -0700"
      },
      "message": "ci: optimize APT package installation by skipping documentation\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sf483afee70439c11k\n"
    },
    {
      "commit": "c013134814facb7da15b59c79399ec1939eb6ef9",
      "tree": "6072025f9c2e5a87af79a61070fab1f0500c32a5",
      "parents": [
        "c886ac5478194e95f93b166572a7a081eb6cadb8"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jun 13 21:07:08 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jun 13 21:07:08 2025 -0700"
      },
      "message": "Fail to speed up CI by not installing Chrome.\n\nI have no idea why the same \"vintage\" machine I logged into via tmate\nhas this working, but this doesn\u0027t, but the --no-sandbox thing is\ncorrect regardless.\n\nVariants of the following is what SHOULD work but doesn\u0027t yet.\n\n\tPATH\u003d/usr/local/share/chromium/chrome-linux:$PATH GOEXPERIMENT\u003dsynctest stdbuf -oL -eL go test -v -count\u003d1 -run TestBrowserInitialization ./claudetool/browse/...\n"
    },
    {
      "commit": "d2ba10c9e2ea1487262eaefbfbd6493200a9200a",
      "tree": "1288e9a79a0be715bf1afe99b7f6abd4ff33fccd",
      "parents": [
        "1417b69f8aaee33e9e96341e7e97ffbb9e7bb051"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu Jun 12 13:51:27 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu Jun 12 13:51:27 2025 -0700"
      },
      "message": "Speed up formatter workflow.\n"
    },
    {
      "commit": "c139982287731dfab910389deeba766d73cf1bd4",
      "tree": "7ee64dbc9d7545fa46a6edda17d55cbe064f8e42",
      "parents": [
        "f825e69e62896f588496b5b33673de58293a6ba2"
      ],
      "author": {
        "name": "Marc-Antoine Ruel",
        "email": "maruel@gmail.com",
        "time": "Sun Jun 08 17:47:50 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Sun Jun 08 12:54:24 2025 -0700"
      },
      "message": "github: prevent discord webhook from running on forks\n\nFix Discord notification workflow triggering on forked repositories where\nsecrets are unavailable and notifications are unnecessary for contributors.\n\nProblem Analysis:\nThe Discord webhook workflow was configured to run on all repositories,\nincluding forks, where the DISCORD_WEBHOOK_FOR_COMMITS secret would be\nunavailable. This caused workflow failures and attempted notifications\nfrom forks that serve no purpose for the main project\u0027s Discord channel.\n\nImplementation Changes:\n- Added if: github.event.repository.fork \u003d\u003d false condition to notify-discord job\n- Prevents execution on forked repositories while maintaining functionality on origin\n- Uses GitHub\u0027s built-in repository metadata for reliable fork detection\n\nBenefits:\n- Eliminates workflow failures on forks due to missing secrets\n- Reduces unnecessary workflow runs on contributor forks\n- Maintains proper Discord notifications only for the main repository\n- Clean workflow execution without configuration changes required\n\nThis ensures Discord notifications only occur for the main repository\nwhile preventing errors and resource waste on community forks.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s5a155846902dd30fk\n"
    },
    {
      "commit": "c3ecabb720cbf3fa7bf1372ec8ed449f0b9a4b91",
      "tree": "dc3cbb30ff7f291acfc1522bd0302bf0c0ba4adb",
      "parents": [
        "e08c7ffc8f1ec0cd3899d2fedad79f408b6dc2f9"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jun 06 22:29:03 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri Jun 06 21:09:32 2025 -0700"
      },
      "message": "github: fix discord webhook payload truncation for long commit messages\n\nFix Discord webhook failures caused by overly long commit body content\nthat exceeds Discord embed size limits, preventing notification delivery.\n\nProblem Analysis:\nDiscord webhooks were failing with HTTP 400 errors when commit messages\ncontained extensive body content. The error response {\"embeds\": [\"0\"]}\nindicated the first embed was invalid, typically due to field length\nviolations. Discord enforces strict limits on embed field sizes:\n- Title: 256 characters maximum\n- Description: 4096 characters maximum\n- Field values: 1024 characters maximum\n\nLarge commits with detailed implementation notes, problem analysis, and\ntechnical documentation were exceeding these limits, causing webhook\ndelivery failures and missed commit notifications.\n\nImplementation Changes:\n\n1. Text Truncation Function:\n   - Added truncate_text() with intelligent content preservation\n   - Attempts truncation at paragraph boundaries (double newlines)\n   - Falls back to sentence boundaries (periods with spaces)\n   - Uses ellipsis (...) to indicate truncated content\n   - Ensures truncation only when more than half content remains\n\n2. Field Length Management:\n   - Title truncated to 256 character Discord limit\n   - Description conservatively limited to 2000 characters for safety\n   - Maintains existing field structure and formatting\n   - Preserves commit author and URL fields unchanged\n\n3. Debug Information:\n   - Added payload size reporting in test mode\n   - Character count logging for title and description fields\n   - Enhanced troubleshooting capabilities for future issues\n\n4. Backward Compatibility:\n   - No changes to function signatures or environment variables\n   - Existing webhook URLs and configuration remain unchanged\n   - Short commit messages pass through unmodified\n   - All existing functionality preserved\n\nTechnical Details:\n- Truncation uses string slicing with boundary detection\n- Conservative 2000 character limit provides buffer below Discord\u0027s 4096 limit\n- Test mode provides detailed payload analysis for debugging\n- JSON payload generation unchanged except for field content\n\nBenefits:\n- Reliable Discord notification delivery for all commit types\n- Intelligent content preservation maintains readability\n- Debug capabilities improve webhook troubleshooting\n- Zero configuration changes required for existing setups\n\nTesting:\n- Verified fix resolves HTTP 400 errors for problematic commit e08c7ffc\n- Confirmed short commit messages remain unaffected\n- Tested intelligent truncation at paragraph and sentence boundaries\n- Validated payload size reduction maintains Discord compatibility\n\nThis fix ensures consistent Discord webhook delivery while preserving\nessential commit information through intelligent content truncation.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s1859815462496f8ak\n"
    },
    {
      "commit": "2a32f01e45169200bfb252031ca880ef09d7c0c2",
      "tree": "012e403e57be0c333ff1107b3f096f619c08c33a",
      "parents": [
        "3d040bd66f81a9211e616ef755b261323d4fea95"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 19:40:07 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 19:42:17 2025 -0700"
      },
      "message": "go.mod: bump to Go 1.24.4\n\nand use this opportunity to bust the cache.\ngood to do every once in a while.\n"
    },
    {
      "commit": "008f9580cb1df44d70f1daa32b2122e10b7d8f79",
      "tree": "74ec1fe7013c16a11e3886424740a9b80411eee8",
      "parents": [
        "9236cce91da9ced563cf87dcde423dfbe18a1f1e"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jun 04 16:26:15 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jun 04 16:26:52 2025 -0700"
      },
      "message": ".github: don\u0027t notify Discord from dev queue (sigh)"
    },
    {
      "commit": "9236cce91da9ced563cf87dcde423dfbe18a1f1e",
      "tree": "e3d689020c47d841d2bdfd9958c60e18c01ea75a",
      "parents": [
        "7e5fe3cc66dd9e76408a0ae27e7c29d119288dcb"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jun 04 15:35:35 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Jun 04 15:52:10 2025 -0700"
      },
      "message": ".github: download gofumpt instead of installing go\n\n"
    },
    {
      "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"
    }
  ]
}
