storage: create databases empty so the first push needs no --force Every automatic creation path wrote an "Initialize data repository" commit through WriteEmptyRepo, and that commit is history. dolt decides fast-forward on the client (actions.CanFastForward over the remotesapi), so the server cannot forgive the collision: pushing a database that has a root commit of its own — a beads tracker, anything grown locally — was rejected as a non-fast-forward and could only land with --force. That is the whole reason the companion-database recipe starts with a forced push. push-to-create already provisioned an empty store for this exact reason. Give the other two paths the same default: /internal/repos, whose caller is git.sr.ht's post-update hook and therefore fires before its user has ever pushed, now always provisions empty, and the web form does unless its new "initialize with an empty commit" checkbox is ticked. The checkbox buys what an empty store cannot offer — a database that can be cloned before anything is pushed to it, since dolt refuses a store with no commits as "contains no Dolt data". Which is also why the overview of a database with no branches now teaches push rather than clone: the clone box there quoted a command that could not work. A store that fails to open is deliberately not treated as empty — an unreadable database must not be advertised as a fresh one.
doltsrht: serve /mcp on the web listener
instconf: take the origin and required-key helpers from ecore Two copies of one function disagreed in this repo: hostFromOrigin returned an error for a malformed origin and web's hostOf answered "localhost", which is a guess that looks like an answer. Both are gone; the caller now names which half it means, and both wanted OriginAuthority — a port is part of a sealed-URL host, a JWT audience and the synthesized commit-author domain alike. The startup checks become one Require, so an operator filling in a fresh config.ini reads every missing key off one boot instead of one per restart. The hook's internal-origin read becomes InternalOrigin, which falls back to the external origin: an instance with only a public address is not misconfigured and used to be refused. And the git-description mirror is wired only when git.sr.ht has an API origin — web.Config already documented a nil Git as no mirroring, but nothing produced one, so an instance without git.sr.ht met config.GetAPI's panic on the first push.
cmd: doltsrht and doltsrht-migrate binaries, module tidy