Download and verify a release¶
You have cloned nothing. You want to know that a Singular release is what it
says it is before you run it: that the files you downloaded are the files
that were published, that the release names the formal model its evidence
was checked against, and that the singular and open-datum commands built from it actually
run a registry from creation to termination. One command answers all
three, from the downloaded bytes alone, and either passes or refuses by name.
What you run¶
You need Nix with flakes enabled. Nothing else: no checkout, no credentials, no running node.
nix run github:lambdasistemi/singular/v0.8.0#verify-release -- v0.8.0
Name the release you are checking twice: once to choose the verifier that release ships, once as the release to download. The verifier downloads the release's three published assets from its GitHub release page without logging in:
| Asset | What it is |
|---|---|
singular-onchain-X.Y.Z.tar.gz |
the compiled validators, the off-chain source with its own flake, and the run page of the singular registry commands |
singular-docs-X.Y.Z.tar.gz |
this documentation, as published |
SHA256SUMS |
the checksums of the two archives |
The archive is unpacked into a fresh temporary directory, never inside a
checkout. Pass --work DIR to choose that directory and keep what it
leaves behind: the downloaded assets, the extracted archive and the receipts
of every command the journey ran.
What it checks, in order¶
Each check runs only when the ones before it passed, and the first one that fails ends the run with one line naming why.
flowchart TD
D[Download assets] -->|present| S[Verify all checksums]
S -->|match| M[Bind model revision]
M -->|same revision| E[Check required members]
E -->|present| B[Build ordinary binaries]
B -->|built| H[Inspect stripped bytes and flags]
H -->|hooks excluded| J[Run ordinary journey]
J -->|receipts agree| P[PASS]
The model revision is the commit of the application model, the formal
specification the conformance evidence reads its statements at. The release
states it in the archive as MODEL-REVISION; the verifier compares it with
the revision the conformance evidence of the same release is compiled
against. The journey is the one on the archive's run page: a registry is
created, a key inserted, its payload updated and the key terminated, each a
separate singular or open-datum process on one development network the verifier starts
and stops itself, with an inspect after every write.
Before starting the journey, the verifier strips and inspects the actual
compiled singular and open-datum executables and reads their resolved
registry CLI build flags. Both must exclude hidden test inputs and disable
the test flag. It then records every ordinary journey invocation: all five
commands must run without hidden harness inputs, and no hold marker may
appear.
Fault injection, crash recovery, race controls and independent trie-capability observations run in the explicit test build. Their unchanged assertions are separate required CI evidence. They do not claim to have run inside these extracted release binaries.
What a refusal means¶
A refusal is one line, verify-release: REFUSED <name>: <detail>, and the
exit status is 1.
| Refusal | What it means | What to do |
|---|---|---|
download-failed |
one of the three assets could not be downloaded | check the tag exists on the releases page and that you can reach github.com |
sum-mismatch |
an archive differs from SHA256SUMS, SHA256SUMS lists other files, or a file inside the on-chain archive differs from the archive's own checksum list |
do not use these files; download again, and report it if the mismatch persists |
model-revision-missing |
the archive does not state a model revision | the release predates stated model revisions (every release before v0.8.0) or was not assembled by the release pipeline |
model-revision-mismatch |
the archive states a different model commit from the one the conformance evidence names | the release's evidence does not describe the model it claims; do not rely on it |
member-missing |
a file the verification needs is absent from the archive | the archive is incomplete; do not use it |
command-failed |
building singular from the archive, or one of the commands of the journey, failed |
the detail names the step; with --work DIR the receipts of every command are kept there |
harness-code-present |
a compiled executable contains hidden test inputs, its resolved flag does not disable them, or the ordinary journey receives a hidden input or leaves a hold marker | the artifact does not meet the ordinary release boundary; do not use it |
A release that passes prints its tag, both archive checksums, the model revision and the directory it was verified in.
Checking files you already have¶
If you downloaded the three assets yourself, point the verifier at their directory; every check after the download is the same:
nix run github:lambdasistemi/singular/v0.8.0#verify-release -- --assets ./downloads v0.8.0
From v0.8.0 on, every release is verified this way by the release workflow itself, right after it is published.