web: draw the chrome from sr-ht-ecore The nav/service-switcher, the brand, the login block and the environment banner were a copy of code every custom service on this instance carries. The copies drifted, so they now come from one place: sourcecraft.dev/bigbes/sr-ht-ecore/chrome. web/chrome.go is gone. New builds one chrome.Service from the shared config.ini and hands it the discovered stylesheet; view() asks it for a chrome.Page per request, which viewData embeds rather than copies, so a field ecore adds later arrives here without an edit. The layout invokes "srht-env-banner" and "srht-nav" instead of the markup it used to spell out, the landing's repository listing goes through "srht-repo-list", and the FuncMap starts from chrome.Funcs() with the local shortsha deleted. Two ecore policies differ from what this service did and are adopted as the instance's: the brand label is the config section's short name rather than a literal "compare", and the origins are trimmed of a trailing slash. What stays local is what is compare's alone: the bundle href, the diff-status colours, and the container-fluid the two diff views ask for. Tests move to testify; the nav ordering/exclusion test goes with the code it tested, and a test that the layout invokes the chrome at all replaces it.
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.