covenant / docs /GATES.md
Lawless1987's picture
Snapshot of covenant main (full git history on GitHub)
3cd4de9 verified
|
Raw History Blame Contribute Delete
3.67 kB

The launch gates

launch_check.py asks twelve questions and changes nothing. Every answer is PASS, BLOCKED, or UNKNOWN, and UNKNOWN is never folded into PASS.

Why three states and not two: this project's characteristic failure is a claim that is true, unmeasurable, and quietly wrong later. A two-state check has to guess on the cases it cannot see, and it always guesses green. So a node that cannot be reached is UNKNOWN. A check that needs Windows is UNKNOWN on Linux. A gate that raises is UNKNOWN, never PASS.

Where a gate has a different correct answer per platform, it asserts that answer instead of stepping aside (M34) β€” a check that stops checking on the platform that runs production has been switched off.

gate asks blocked means
G1 does every shipped file hash to MANIFEST.sha256? either an edit you meant, or a delivery that did not land. Both need to be known before launch
G2 is each companion import beside the file that needs it? a missing companion reads as a test regression and is not one (M37)
G3 flask, werkzeug, cryptography, requests β€” and waitress? without waitress, W1's bounded pool is inert and Flask is served by werkzeug's dev server: one unbounded thread per connection, on the port you expose
G4 one shared canonical genesis? every node mints its own, they can never converge, supply grows by 1000 per node
G5 is the ethics judge reachable? the gate fails closed. The node boots, serves /chain, peers, reports healthy β€” and rejects 100% of transactions. Also blocks on mock + the insecure flag: adversarial transactions are known to pass it
G6 does the judge model fit in RAM? it loads by paging. P12 measured 3,535 MB free against a ~5,200 MB model on this box
G7 port arithmetic β€” --port N takes N, N+1, N+11 nodes closer than 20 apart collide, and the victim prints Address already in use after a healthy-looking banner
G8 are the identity keys owner-only? they are the operator credential and the genesis mint key. On NTFS the mode bit says nothing, so this reads the real ACL β€” see P9_WINDOWS_OWNER_ONLY.md
G9 do disk and the running process agree? the file on disk is not what is executing. This is the one that has been wrong for two days at a time
G10 is the watchdog alive? a monitor that dies silently reports health for ever. Its last line still says everything is fine, and goes on saying it
G11 XRP mainnet gate state reports; never opens. Four locks, described in LAUNCH.md
G12 when did the suites last run, and where? always UNKNOWN by design β€” a result is a claim about the platform it ran on and the source it ran against, and neither is checkable from a filename

Reading the exit code

0   every gate PASS
1   at least one BLOCKED          do not launch
2   no BLOCKED, but some UNKNOWN  this is NOT a pass

AN_LAUNCH.bat stops dead on 1, and on 2 it asks before continuing rather than deciding for you.

G9 and the 48-bit comparison

/health's field is named source_sha256 and contains CORE_SOURCE_SHA12 β€” twelve hex characters, 48 bits (A25). The contract is correct, intentional, and pinned by test_p11 V6b; only the name lies, and it lied convincingly enough that verify_deploy.py's first draft compared it against a full 64-character digest and reported MISMATCH on a perfectly correct deployment.

So G9 compares twelve, and says so. It is a drift check β€” "has anybody restarted this node?" β€” not a tamper check. G1 compares the full 64.