doltsrht: serve /query and the api-meta.json beside it The schema is mounted where /mcp is and for the same three reasons — before web's same-origin group, before the cookie middleware, in a group of its own — plus one of its own: it answers anonymous callers, so it cannot ride core-go's WithSchema, whose router 401s an un-cookied request. It does need the config and database middleware, which is why the group sits below them. The file beside it is not optional. meta.sr.ht fetches api-meta.json from every service it discovers and iterates each one's scopes to build the personal-token page, so a service that mounts its own /query owes the instance this too — and the scope list is what makes "dolt.sr.ht/repos:RO" offerable there at all. The never-null rule that makes a mistake here a 500 for the WHOLE instance lives in ecore's apimeta; a test asserts the name this service advertises is the one authn.RepoScope enforces. README says what the surface serves and what it deliberately does not, and that `hut graphql dolt` needs the patched hut — upstream segfaults on any service outside its hard-coded list.
web: rename a database from its settings page A database's name lives in two places — the metadata row and the on-disk store directory its path names — so a rename has to move both. The order is creation's: the row first, where a name already taken is refused by the unique index before anything on disk changes, then the store, then the handle the remotesapi memoized under the old path. A store that will not move rolls the row back, so the two halves never disagree about where a database lives; only a failed rollback is escalated to a human, because it is the one outcome no later request can repair. storage.MoveStore is one os.Rename behind the containment guard DeleteStore already used, extracted here as containedPath. It refuses an occupied destination outright: os.Rename over an empty directory would succeed and swallow it. No redirect is left behind — the old address simply stops resolving, as on git.sr.ht — so an existing clone needs its remote replaced, and a companion of a git repository is re-provisioned under its old name by the next push to that repository. The README's quickstart now says both.
doltsrht: serve /mcp on the web listener
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.
rename module to sourcecraft.dev/bigbes/sr-ht-dolt; depend on sourcecraft sr-ht-core
build: source core-go from the instance fork Replace git.sr.ht/~sircmpwn/core-go with git.srht.bigb.es/~bigbes/core-go at c2c2f38 (upstream fdb3662 + newer upstream commits + the phoebe-lab S3 UnsignedPayload patch) - the code production actually runs. Requires GOPRIVATE=git.srht.bigb.es to fetch. Full suite re-verified including the remotesapi integration scenarios.
cmd: doltsrht and doltsrht-migrate binaries, module tidy
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).