Skip to content

Refuse a publish that would leave the catalogue address unanswered #67

Description

@iderex

Depends on #64, #58 and #39.

#58 publishes the built output and makes the custom domain file part of what is
published, because a publish that drops it takes the name down until the next
one puts it back, and that failure looks like a DNS problem for as long as it
takes somebody to check. #64 puts a second file in exactly that position: the
catalogue file this repository carries and does not author.

The failure is worse than the domain one. A site published without the catalogue
file looks correct to every reader who opens it and is broken for every server
that polls it, and from the outside those are the same site until somebody
fetches that one path on purpose.

So the same rule covers both. The publish either carries the file at the path
the commitment names, or it fails and leaves what is already served in place.

Three states have to stay distinguishable, because collapsing them is what makes
this silent. The file was obtained and published. The file could not be obtained
and nothing was published. There is nothing published upstream to carry yet,
which is the state today:

curl -sS -o /dev/null -w "%{http_code}\n" https://flowfin.dev/manifest.json
404

Run 2026-08-08. The third state prints what it is and what would end it, and it
never prints as the first one.

The check that the address answers runs from outside after the publish, in the
harness #39 describes, because a job asserting about bytes it uploaded a second
ago is asserting about its own memory. What it fetches is the address an
operator would paste, over the public name, and what it records is the response
code and the date it was taken.

Done when

The publish job refuses to complete when the carried file is missing and leaves
the previously served site untouched; a run in the state where nothing is
published upstream prints that it is carrying nothing and what would end that,
and prints no success for the carrying step; a fetch failure and an empty
upstream are separate messages; and the outside check in the integration harness
fetches the catalogue address over the public name and records the response code
with its date.

Metadata

Metadata

Assignees

Labels

blocked-on-another-issueWaits on work tracked by another open issue on this board.ci

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions