rename the service to diff.sr.ht The instance-facing name changes and nothing else does: the config.ini section, the origin, the apk package, the nginx block and the systemd unit are all diff.sr.ht now, and the brand's red service label reads "diff" because chrome derives it from the section name. What deliberately stays is everything whose rename would cost more than it is worth: the Go module path, the repository name, the comparesrht binary, and the /~owner/repo/compare/base...head routes people have in their history. README says so at the top so the split is not read as an oversight.
login: ecore's cookie decoder, which validates the name ours did not authz/identity.go was the fifth copy of a decode the instance has one of, and it was one of the two that validated nothing: whatever name a sealed payload carried went on to the GraphQL viewer field, the chrome's nav and every log line the request produced. login.ValidName refuses it, and there is no spelling of the API that turns the check off. Gone with it: CookieName, UsernameFromRequest, Middleware, ForContext and the ctxKey, plus identity_test.go, whose round-trip, tilde-stripping and garbage-cookie cases are ecore's tests now. The Middleware becomes login.Optional() — this service refuses nobody, git.sr.ht decides what an anonymous viewer may see — and the default validator is kept rather than core.ValidOwner, which is lowercase-only and would log a real account out of compare alone. The one behaviour change a viewer could notice: a cookie whose name carries a '/', a control byte or a non-ASCII letter now reads as anonymous instead of as that name.
docs: spec for inline code comments on diffs Draft proposal for line-anchored comment threads on the commit and compare pages. Records the key finding that storage is already available through sr-ht-core (Postgres via the database package + connection-string), that the service is stateless by choice rather than by limitation, and that @pierre/diffs already provides the thread UI primitives (DiffLineAnnotation + renderAnnotation + onDiffLineClick). Covers the anchoring model, schema, authz reuse, HTTP API, frontend wiring, config, and a commit-first phasing.