cmd/comparesrht: daemon entry point, startup validation, dev stub Wire the compare.sr.ht daemon on core-go's server.New: it runs crypto.InitCrypto, parses -b/-d/-m/-p, and drives the standard SourceHut warm-shutdown loop (SIGINT). We deliberately skip WithDefaultMiddleware (it demands Postgres/Redis and 401s anonymous viewers) and instead install the web package's documented middleware chain — RealIP, Recoverer, Logger, config.Middleware, authz.Middleware — inside a Group on the anonymous router. validateConfig checks every required key up front (network-key, webhook key, repos root, a git.sr.ht API origin candidate, meta and compare origins) with a single clear fatal, so a misconfiguration fails loudly at startup rather than as a deep panic in config.GetAPI on the first request. A build-and-exec smoke test proves the binary starts against a synthesized config, answers /healthz 200, and exits cleanly on SIGINT in under 15s. Makefile: build ./comparesrht from ./cmd/comparesrht, run-dev binds localhost:5090 against a local config.ini, install ships the binary and static assets. contrib/dev-stub is a stdlib-only fake git.sr.ht GraphQL API returning fixed public repos for local development, and the systemd unit now stops with KillSignal=SIGINT to hit the warm-shutdown path.
compare.sr.ht: project foundation — core package, build scaffolding, core-go fork pin Bootstrap the go.bigb.es/sourcehut-compare service: - go.mod (go 1.26.4) pinning core-go to the private fork git.srht.bigb.es/~bigbes/core-go @ c2c2f3848fa9 via a replace directive; go.sum populated by a throwaway smoke build importing core-go config/crypto/client/server + chi + logrus (gates API drift from the verification baseline fdb3662 to upstream 71b2787). - core/: pure domain package — sentinel errors, owner/repo/ref validation (check-ref-format-style, hostile-input hardened), and the compare-spec grammar (ParseCompareSpec, three-dot/two-dot, percent-unescape). Table tests at 97% coverage. - Makefile (all/build/test/css/bundle/run-dev/install), config.example.ini documenting the shared keys read in place, contrib/ nginx block and systemd unit, README skeleton, .gitignore. core-go dep deps and go mod tidy are deferred to later phases per plan.