heavy-duty/ceremony exists on two forges and the same ref names a different tree on each — this forge's 0.4.1 carries lib/forge*.sh, GitHub's carries none of it. The fetch URL was hard-coded to github.com, so a consumer's `.ceremony/` mirror was verified against a tree it never pinned, and the fetch returned HTTP 200 while doing it: --check reported drift the consumer could not fix, and --fix would have rewritten a correct mirror into the wrong one. The host now comes from GITHUB_SERVER_URL, which Actions injects on both forges and which lib/forge.sh already selects the whole backend on. Unset, with no --source, is a refusal naming the variable rather than a guess — the same rule the pin itself has always followed. The fetch path had no test coverage at all: every existing row passes --source, which overrides the fetch entirely. It is now driven against a PATH-stubbed curl that records the URL and serves a tarball, so the real tar pipeline still runs and which forge a pin resolves against is asserted. Refs #201
1,015 B
Fixed
-
actions/docs-syncfetches the doctrine mirror from the forge named byGITHUB_SERVER_URLinstead of a hard-codedgithub.com(#201). -
The same pin ref names a different tree on each forge, so a consumer's mirror was verified against a tree it never pinned — and with HTTP 200, so
--checkreported drift that could not be fixed (#201). -
A fetch that cannot name its forge now refuses instead of guessing: no
GITHUB_SERVER_URLand no--sourceexits naming the variable, having reached for no network (#201). -
A failed fetch names the URL it actually tried, and asks whether the ref exists on that forge rather than in the abstract (#201).
Added
-
test/docs-sync.test.shdrives the fetch path, which had no coverage at all: every existing row passes--source, which overrides the fetch entirely (#201). -
A stubbed
curlrecords the requested URL and serves a tarball, so which forge a pin resolves against is a tested decision rather than plumbing (#201).