build: pure-Go (CGO_ENABLED=0) build via a klauspost-backed gozstd shim dolthub/dolt/go pulls in two hard cgo dependencies — go-icu-regex (SQL REGEXP) and gozstd (NBS zstd compression) — which forced a C toolchain + ICU headers on every build. Both are now avoided so the default build is pure Go and statically linkable: - ICU: build with `-tags gms_pure_go`, selecting go-mysql-server's stdlib regexp fallback. Safe because this service never runs the SQL engine (it serves bare NBS stores and browses read-only), so it never evaluates SQL REGEXP. - zstd: `replace github.com/dolthub/gozstd => ./third_party/gozstd-purego`, a pure-Go drop-in over klauspost/compress/zstd (already in the graph). It reproduces the nine gozstd symbols dolt references. dolt is unmodified. dolt uses gozstd only in its NBS archive subsystem; this binary hits only the decompress side at runtime (archive dictionary TRAINING is gc/ archive-writer code we never run — the shim implements it over klauspost but panics on the trainer errors that only that off-path use could trigger). zstd frames and dictionaries are standard-format, so libzstd-authored archives decode correctly; the shim's tests prove this by decoding plain and dictionary-compressed frames produced by the zstd CLI (libzstd). The Makefile now defaults to CGO_ENABLED=0 + -tags gms_pure_go (override with `make CGO_ENABLED=1 GO_TAGS=` for the cgo variant). Verified: CGO_ENABLED=0 build of ./..., all unit tests, the real-dolt-CLI integration + spike suites, and the shim's libzstd-interop tests, all green with no cgo.
foundation: module, core domain, schema, spike-verified dolt interop Phase 0 foundation for dolt.sr.ht (pure-Go Dolt hosting for SourceHut). Dependency pins: - core-go v0.0.0-20260520082310-fdb3662452dc: the production instance's submodule commit (fdb3662); must never be upgraded so token/config/crypto behavior matches the rest of the instance. - dolthub/dolt/go v0.40.5-0.20260626152440-45335d44ad79: pseudo-version at the commit tagged v2.1.10 (45335d44), matching the installed dolt CLI. The /go submodule's latest tag (v0.40.4, 2021) does not interop with a modern CLI; matching the CLI commit guarantees a common NBS format (Format_DOLT) and remotesapi proto. - gopkg.in/go-jose/go-jose.v2 v2.6.3: same JOSE version dolt's creds package signs EdDSA keypair JWTs with, avoiding a duplicate JOSE lib. - grpc v1.79.3, logrus v1.8.3, lib/pq v1.10.9, chi/v5 v5.3.1, brant v0.5.1. Contents: - core/ pure domain: models, ValidateName/ParseRepoPath, the access matrix (Allowed + NotFoundForPrivate), full table-driven tests. - schema.sql + migrations/0001_initial.sql (brant format). - config.example.ini, contrib/dolt.sr.ht.conf (nginx), Makefile, scss/main.scss, static/logo.svg, README, .gitignore. - internal/smoke: throwaway import-and-build check (deleted in Phase 3). Spike (storage/spike_test.go, tag `spike`): bare NBS store via WriteEmptyRepo, served by remotesrv on an ephemeral single port, round-tripped through the real dolt CLI v2.1.10 (clone -> insert -> commit -> push -> re-clone -> verify rows). Green, no version juggling needed beyond selecting the v2.1.10 commit. FS must be rooted at the repos dir (LocalFilesysWithWorkingDir) so sealed chunk-URL prefixes are clean relatives. Build note: dolt pulls go-icu-regex (CGO), which needs ICU4C headers; on this Mac set CGO_CPPFLAGS/CGO_LDFLAGS to icu4c@78 (documented in README).