)]}'
{
  "log": [
    {
      "commit": "d9f1337ec3317a60df50d8ba4eefb448473d62fa",
      "tree": "67b60b05d8e2e3fb01293f68dfc5d08600a28dda",
      "parents": [
        "db8c5abcc18082bcbf47247e8d50889a32e65e06"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 15:08:49 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 15:21:40 2025 -0700"
      },
      "message": "webui: auto-generate types.ts from go structs\n"
    },
    {
      "commit": "db8c5abcc18082bcbf47247e8d50889a32e65e06",
      "tree": "519f68c44d1b5569c57533cec9b886d360e0b54e",
      "parents": [
        "fae1757ffae063830d5f789258bebee62727b1b4"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 21 15:09:16 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 21 15:09:55 2025 -0700"
      },
      "message": "README.md: add missing comma\n\nAt least, I think it is a missing comma.\nCould also have been a missing \"that\".\n\nOf course, the typos are a sign that it was written by a human.\nWeird world.\n"
    },
    {
      "commit": "fae1757ffae063830d5f789258bebee62727b1b4",
      "tree": "8ae6b4a6d1d2d80830b3d7c86e207199d0d48a83",
      "parents": [
        "64d329991f8577311ff5bea692b8fbc711b97b32"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 21 11:48:05 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 21 11:48:05 2025 -0700"
      },
      "message": "dockerimg: unset GOBIN when installing"
    },
    {
      "commit": "64d329991f8577311ff5bea692b8fbc711b97b32",
      "tree": "fea131e6e5bfba5f83b1fd79c03738f2b7d559d4",
      "parents": [
        "2c5bba48c23d379fa9a77d06b77093849af87a9d"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon Apr 21 09:14:36 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon Apr 21 09:14:36 2025 -0700"
      },
      "message": "README.md: some basic info\n"
    },
    {
      "commit": "2c5bba48c23d379fa9a77d06b77093849af87a9d",
      "tree": "66ec4140ecac50d81f8e521204e315183ec83f35",
      "parents": [
        "43664f62866c05a5d7d6b324904f75995d37bba7"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 19:33:17 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 19:45:01 2025 -0700"
      },
      "message": "webui: mv scroll behavior to sketch-timeline\n\nMoves the automatic scrolling behavior from sketch-app-shell into\nsketch-timeline, where it makes more sense.\n\nThis change also makes automatic scrolling conditional on\nan internal \"scrollingState\", which we update whenever you\nmanually scroll to, or away from the bottom of the timeline.\n\nIf you scroll to the bottom of the timeline, then it\u0027s \"sticky\"\nand newly arriving messages will keep scrolling you to the bottom\nas they render.\n\nIf you scroll up to older messages though, then we stop automatically\nscrolling you to the latest messages at the bottom of the timeline.\n\nWhen the timeline is in this latter \"floating\" scrollingState, we\nalso render a floating down-arrow button over the lower right corner\nof the timeline.  Clicking on this will take you down to the latest\nmessage at the end of the timeline.\n"
    },
    {
      "commit": "43664f62866c05a5d7d6b324904f75995d37bba7",
      "tree": "e1642d12c23acebad84c1297818db365836971bc",
      "parents": [
        "b29f8911e4c0d99d6c32866d7174a51b6730e9d8"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 16:13:03 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 16:13:03 2025 -0700"
      },
      "message": "termui: print newline before branch name\n"
    },
    {
      "commit": "b29f8911e4c0d99d6c32866d7174a51b6730e9d8",
      "tree": "34e445527e949fb27970d4264db8a776323be485",
      "parents": [
        "ec3ad1a7798b0dc1d17d363c91680b7828d7fce2"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 15:39:11 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sun Apr 20 15:53:30 2025 -0700"
      },
      "message": "webui: Migrate from @open-wc/testing to Playwright\n"
    },
    {
      "commit": "ec3ad1a7798b0dc1d17d363c91680b7828d7fce2",
      "tree": "1f48c26d0808f951a2c9487796709a5eb09f2f80",
      "parents": [
        "71941bdfa1156b748072e2dfe61c714d3ed02913"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 13:55:16 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 23:51:21 2025 -0700"
      },
      "message": "webui: split sketch-tool-card into per-tool cards\n"
    },
    {
      "commit": "71941bdfa1156b748072e2dfe61c714d3ed02913",
      "tree": "28eeb5cb68bef3e0eb5b6a5ec63d17f4150e4fbb",
      "parents": [
        "9abbf92a1c58300005971d7f89b301620d59e883"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 13:31:48 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 14:01:53 2025 -0700"
      },
      "message": "loop/webui: add prettier\n"
    },
    {
      "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": "86b56862f8d3e192646a17548ef5294582c31f8f",
      "tree": "d0235f3f56695de8e6281ba3f57a663847204f33",
      "parents": [
        "f5bb3d3f1aa33e2a066c4139675f096f73c1f9d4"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 13:04:03 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 18 13:04:03 2025 -0700"
      },
      "message": "loop/webui: swtich to web components impl (#1)\n\n* loop/webui: swtich to web components impl\n\nThis change reorganizes the original vibe-coded\nfrontend code into a structure that\u0027s much\neasier for a human to read and reason about,\nwhile retaining the user-visible functionality\nof its vibe-coded predecessor. Perhaps most\nimportantly, this change makes the code testable.\n\nSome other notable details:\n\nThis does not use any of the popular large web\nframeworks, but instead follows more of an\n\"a la carte\" approach: leverage features\nthat already exist in modern web browsers,\nlike custom elements and shadow DOM.\n\nTemplating and basic component lifecycle\nmanagement are provided by lit.\n\nState management is nothing fancy. It\ndoesn\u0027t use any library or framework, just\na basic \"Events up, properties down\"\napproach.\n\n* fix bad esbuild.go merge\n\n* loop/webui: don\u0027t bundle src/web-components/demo\n\n* loop/webui: don\u0027t \u0027npm ci\u0027 dev deps in the container\n\n* rebase to main, undo README.md changes, add webuil.Build() call to LaunchContainer()"
    },
    {
      "commit": "f5bb3d3f1aa33e2a066c4139675f096f73c1f9d4",
      "tree": "186963b48527831888af9054c5e400c9198297de",
      "parents": [
        "8a617cb963b73d6dd38b44289720b1808278f9b7"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 10:47:59 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Fri Apr 18 10:57:48 2025 -0700"
      },
      "message": "dockerimg: make sure webui build exists before copying it\n"
    },
    {
      "commit": "8a617cb963b73d6dd38b44289720b1808278f9b7",
      "tree": "7d1a040d452c4e7aad460758a9b60d53d71a69f6",
      "parents": [
        "8bff16a56b85ae53977350984c3376b8a2eff989"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:28:43 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:28:44 2025 -0700"
      },
      "message": "dockerimg: reuse a cached gopath for cross compiling\n\nAlso build using sources in the currently checked out sketch.dev go\nmodule if sketch is invoked inside one.\nThis is useful when develping sketch.\n"
    },
    {
      "commit": "8bff16a56b85ae53977350984c3376b8a2eff989",
      "tree": "5b7e94021dda0c9adc7b585ea5b150f823fc9d0a",
      "parents": [
        "be10fa9661f7382453dd1bf9b63eb3615c48e2e7"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:16:49 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:17:59 2025 -0700"
      },
      "message": "webui, dockerimg: store the webui assets in a zip and cp them into the container\n"
    },
    {
      "commit": "be10fa9661f7382453dd1bf9b63eb3615c48e2e7",
      "tree": "d147e67682c51b2b66d562bf4271edb513064609",
      "parents": [
        "b9eaef5da7b64da01637bb4fe60bea43bba75ede"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:16:00 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 18 01:17:59 2025 -0700"
      },
      "message": "dockerimg: mkdir .cache in the base template and rebuild when the template changes\n"
    },
    {
      "commit": "b9eaef5da7b64da01637bb4fe60bea43bba75ede",
      "tree": "3a6cea0c5dc448c3a817bfe262166e8fd242f401",
      "parents": [
        "993a3fcbad8df15e5a735798d260316350ce151f"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 15:23:18 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 15:23:19 2025 -0700"
      },
      "message": "dockerimg: set GOTOOLCHAIN\u003dauto for cross compiling\n\nWithout this, if a user sets GOTOOLCHAIN\u003dlocal in their host env the\nbuild will fail.\n"
    },
    {
      "commit": "993a3fcbad8df15e5a735798d260316350ce151f",
      "tree": "0de32b37978c0cffc9f5a0fdb14173b2838a3f42",
      "parents": [
        "69c67317a8730d2573689b56a98949a5e4e956c9"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 13:51:45 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 13:51:45 2025 -0700"
      },
      "message": "dokerimg: clean up temp dir\n"
    },
    {
      "commit": "69c67317a8730d2573689b56a98949a5e4e956c9",
      "tree": "79c2e12800fc7bb513d038ed6b5926d522aea96b",
      "parents": [
        "2e463fb649fcff14d4025ddb91f630a98e7da526"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 13:42:00 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Thu Apr 17 13:42:00 2025 -0700"
      },
      "message": "dockerimg: fix cross compile command\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"
    }
  ]
}
