)]}'
{
  "log": [
    {
      "commit": "fa424f563e7f75c7ad07ad83def8fe928241f49d",
      "tree": "c2867a2150e9df6e233c97c537acc0f1740ecef0",
      "parents": [
        "784d5bd5d850f90359edc850484c01f15b6ce173"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Jul 11 18:43:55 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Jul 11 16:24:27 2025 -0700"
      },
      "message": "dockerimg: restore go mod download functionality\n\nRestore the go mod download functionality that was lost during the\ntransition to only copying git objects.\n\nThis pre-populates the Go module cache during image build time.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s0941bfb3f9ba2251k\n"
    },
    {
      "commit": "e7ca73df4b61cff1847c4f63feac89c580e998c7",
      "tree": "2e76b9f8b9751578c7daeeaa8d274e0f9d64d0e6",
      "parents": [
        "5ae245bd47becaf2aaa862b5c7e9bcec71e17831"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Jul 08 16:37:09 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Jul 08 19:49:34 2025 -0700"
      },
      "message": "all: cull dead code\n\nMostly from moving builds to use make.\n"
    },
    {
      "commit": "1c18ec94b0d2edcc6d69d1b96f89e3c6e630fc11",
      "tree": "994dbcf813d9c772da320ccccfc2e2f5fe826155",
      "parents": [
        "e1a6e1b25d1cf7f3aec4b98e155be7cf3701a1b0"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Jul 08 10:55:54 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Jul 08 13:06:43 2025 -0700"
      },
      "message": "all: use make to build\n\nThis overhauls the build system.\nWe used to use a just-in-time clever build system\nso that \u0027go run\u0027 and \u0027go install\u0027 Just Worked.\n\nThis was really nice, except that it make it\nall but impossible to ship a single binary.\nIt also required our uses to install npm,\nwhich some folks have an understandably negative reaction to.\n\nThis migrates to a makefile for building.\nThe core typescript building logic is mostly still in Go,\nand untouched (boy did I learn that lesson the hard way).\n\nThe output is a single file that includes the webui, innie, and outie.\n\n(There are still very mild shenanigans in which we write outie\nout to a temp file and then \u0027docker cp\u0027 it into the docker container.\nBut this is pretty manageable.)\n\nThere are some significant follow-ups left after this commit:\n\n- convert the nightly release builds to use the makefile\n- lots of dead code removal\n- maybe add -race support using a dockerfile for the cgo compilation\n- maybe use \u0027docker cp\u0027 stdin reading with tar to avoid the temp outtie file\n- all the rest of the \"better release\" todos (brew install, etc.)"
    },
    {
      "commit": "983b58aceb758e480fc3fede42d21d06ee1de521",
      "tree": "4d219db8d5a580f4df91bac61f90617376a8f6df",
      "parents": [
        "2ca1f10615ed3dede0c5f0bfe9a67c7d9e179794"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 02 19:42:08 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed Jul 02 19:42:08 2025 -0700"
      },
      "message": "Re-work Sketch\u0027s Docker setup.\n\nWe were being fancy and creating Dockerfiles for folks. This sometimes\nworked, but quite often didn\u0027t.\n\nInstead, we you have -base-image and -force-rebuild-container, and the\n\"cache key\" for images is just the base image and the working dir.\n\nThe layer cake is\n\n  (base image)\n  (customization) [optional]\n  (repo) [/app]\n"
    },
    {
      "commit": "2343f8a73cb0a5a846a4f44075d8e039daac7816",
      "tree": "8f523dd283895b1d6dfd98ff7f683ee337df13f4",
      "parents": [
        "f964b50b76225e209dfb940b7c6d2f737939510a"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Jun 17 06:16:19 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue Jun 17 13:17:14 2025 +0000"
      },
      "message": "dockerimg: fix Docker image reuse for Dockerfile.sketch\n\nAdd sketch_context label to Docker images built from Dockerfile.sketch to enable\nproper image reuse detection across runs, eliminating unnecessary rebuilds.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sfa4d61590e7e00f9k\n"
    },
    {
      "commit": "3d040bd66f81a9211e616ef755b261323d4fea95",
      "tree": "7c5cc14efb4e335586292b0e4225549d4a3a3438",
      "parents": [
        "19969a9af6da4b5b5e25d02aa635dabad196e464"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Jun 06 02:35:19 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Fri Jun 06 02:35:19 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "d27921f73b315dc1e01b92cc27370c29c3986f64",
      "tree": "8d245ab695e991337b7c11cdef23d280d10df466",
      "parents": [
        "5c654f6e66db881f17e202ec60cf7c997f7c0bad"
      ],
      "author": {
        "name": "Jon Friesen",
        "email": "jon@jonfriesen.ca",
        "time": "Thu Jun 05 13:15:56 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 19:29:47 2025 -0700"
      },
      "message": "dockerimg: prioritize Dockerfile.sketch over Dockerfile\n\nImplement prioritization system for Dockerfile discovery that prefers\nDockerfile.sketch when available, falling back to standard Dockerfile\nbehavior when not present.\n\nProblem Analysis:\nThe existing code had a TODO comment requesting preference for\n\u0027Dockerfile.sketch\u0027 to allow users to tailor environments specifically\nfor Sketch usage. The current logic only handled single Dockerfile\nscenarios or fell back to generated dockerfiles, missing the\nopportunity to prioritize sketch-specific configurations.\n\nImplementation Changes:\n\n1. Prioritization Function:\n   - Added prioritizeDockerfiles() function with clear priority order\n   - Priority: Dockerfile.sketch \u003e Dockerfile \u003e other Dockerfile.*\n   - Case-insensitive matching for broader compatibility\n   - Returns first candidate when no priority matches\n\n2. Discovery Logic Update:\n   - Modified findOrBuildDockerImage() to use prioritization\n   - Removed single-dockerfile restriction for better flexibility\n   - Uses prioritizeDockerfiles() for any number of candidates\n   - Maintains existing behavior for generated dockerfile fallback\n\n3. User Experience Enhancement:\n   - Clear console output showing which dockerfile is being used\n   - Consistent behavior regardless of dockerfile count\n   - Preserves all existing functionality and error handling\n\nTechnical Details:\n- Maintains backward compatibility with existing Dockerfile usage\n- No changes to function signatures or public interfaces\n- Efficient O(n) prioritization with early returns\n- Proper filepath handling for cross-platform compatibility\n\nBenefits:\n- Users can create Dockerfile.sketch for sketch-specific environments\n- Automatic preference without requiring configuration changes\n- Maintains existing Dockerfile support as fallback\n- Clear, predictable behavior for dockerfile selection\n\nTesting:\n- Added comprehensive unit tests for prioritizeDockerfiles()\n- Integration tests verify findDirDockerfiles() compatibility\n- End-to-end tests confirm findRepoDockerfiles() behavior\n- All existing tests continue to pass without modification\n\nThis enhancement enables users to create sketch-optimized Docker\nenvironments while preserving full backward compatibility with\nexisting Dockerfile workflows.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s1d7f47401929e175k\n"
    },
    {
      "commit": "3e6a4c4abe8714ebb04c0d4834bcc7230f4d4a03",
      "tree": "cf5b7dc0ed2ac2c55a949962d19416bae8553809",
      "parents": [
        "f4f929a48d358acb206a6cbc91dfdee813c45aed"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 23 17:29:57 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 23 11:30:07 2025 -0700"
      },
      "message": "dockerimg: mount Go caches for faster Docker race builds\n\nWhen building sketch binary with race detector in Docker, the system\nwas downloading all modules and rebuilding from scratch every time,\nmaking repeated builds slow and inefficient.\n\nThis adds host Go cache mounting to buildLinuxSketchBinWithDocker by:\n- Getting host GOCACHE and GOMODCACHE directories using \u0027go env\u0027\n- Mounting them as volumes in the Docker container:\n  -v $GOCACHE:/root/.cache/go-build\n  -v $GOMODCACHE:/go/pkg/mod\n\nThe optimization ensures:\n- First race build: Downloads modules (same time as before)\n- Subsequent race builds: Reuses cached modules (much faster)\n- Build artifacts persist between Docker container runs\n\nAdds helper functions getHostGoCacheDir() and getHostGoModCacheDir()\nto retrieve cache paths from the host environment, with proper error\nhandling and path validation.\n\nIncludes unit test to verify cache directory detection works correctly\non all platforms where Go is installed.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sd279e56e1574e4e1k\n"
    },
    {
      "commit": "c31e29689eaf26e7904e074bf8dcb3f02150c1ac",
      "tree": "b935adaff69405877a3eb669550d1ea5d81f066a",
      "parents": [
        "7fb3499f45c55be818fe6d439fe61fa82ee59572"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Tue May 13 10:53:33 2025 +0000"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Tue May 13 10:54:18 2025 +0000"
      },
      "message": "dockerimg: print LLM output in verbose mode\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s6f2e9c028be5b8b5k\n"
    },
    {
      "commit": "3659d8714d31bad050d36043b67efd76a8d53b77",
      "tree": "2803c54c63628e397e63bdbbe4fa2647a4d5f556",
      "parents": [
        "021557a7d33dacd4fedb9a4677fc93c48569d57a"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 17:52:23 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 17:52:27 2025 -0700"
      },
      "message": "all: more gemini key plumbing\n"
    },
    {
      "commit": "4f84ab729ddbf428b0e891940f08f70b4edee05c",
      "tree": "f2e52e4a01c188ada1f5acf8b2a013029b999495",
      "parents": [
        "44f9b4cec11e269a52fbfc099989ab425b8e125f"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 22 16:40:54 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 02 12:57:44 2025 -0700"
      },
      "message": "all: support openai-compatible models\n\nThe support is rather minimal at this point:\nOnly hard-coded models, only -unsafe, only -skabandaddr\u003d\"\".\n\nThe \"shared\" LLM package is strongly Claude-flavored.\n\nWe can fix all of this and more over time, if we are inspired to.\n(Maybe we\u0027ll switch to https://github.com/maruel/genai?)\n\nThe goal for now is to get the rough structure in place.\nI\u0027ve rebased and rebuilt this more times than I care to remember.\n"
    },
    {
      "commit": "4d5e9978fce2feb262663b9d0455c06546723ddc",
      "tree": "dfa4824a78b33a01c5c0d72d4077cfec78010a62",
      "parents": [
        "2772f63c725cdc47f644f68a9e684e798e54b543"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 01 15:56:37 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 01 16:09:09 2025 -0700"
      },
      "message": "all: make tests accept OUTER_SKETCH_ANTHROPIC_API_KEY\n\nInner sketch already has an ANTHROPIC_API_KEY...but it is the\nsketch anthropic key, not the anthropic anthropic key. Blarg!\n\n"
    },
    {
      "commit": "2a5bd6d3e22db146385bea9902e9dd9bc982377d",
      "tree": "0d51ce5180913d1fc9d0acba122aed1894c546b7",
      "parents": [
        "320113391429ba3531aa772e4e32ba41998afbaa"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Wed Apr 30 14:29:46 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Wed Apr 30 15:05:04 2025 -0700"
      },
      "message": "dockerimg: switch to a debian base image\n\nDeveloping on a musl-based alpine image seems to suck.\nA lot of python stuff doesn\u0027t work.\nEven when told it\u0027s alpine, LLMs still want to apt-get install things.\n\nAlong with switching to debian, simplify everything.\nWe *always* use debian bookwork now. If there are python\nthings, the LLM needs to install them on top of the model.\nThis will make fallback mode easier: if a build fails, then we\ndrop ExtraCmds and try again. (Future work.)\n\nWhile here: avoid using docker buildx in tests because\nit seems to vary a lot version-to-version.\n"
    },
    {
      "commit": "1112949adc2bb120a001a925c0c4e9e18def0ee6",
      "tree": "591396d3d0932a475dc1db5d79b2b96b649daaba",
      "parents": [
        "5fdd024fa3d3df5fe5a2c216672d912b6aade60a"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 25 20:41:53 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Fri Apr 25 20:43:00 2025 -0700"
      },
      "message": "dockerimg: use a default image from a public registry\n\nIf the LLM chooses our default alpine Go image, we save some\nwork by instead starting from a sketch docker image pushed\nto ghcr.io.\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"
    }
  ]
}
