Verify without Thalor code
1 · The snapshot
Snapshot NS-000061-20261031T004019Z · log seq 61 · as of 2026-10-30. Files: assets.json, checksums.sha256, entry.json, manifest.json, northstar.json, sessions.json.
mkdir -p NS-000061-20261031T004019Z && cd NS-000061-20261031T004019Z
for f in assets.json checksums.sha256 entry.json manifest.json northstar.json sessions.json; do curl -sSO https://watch.thalorworks.com/snapshots/NS-000061-20261031T004019Z/$f; done
sha256sum -c checksums.sha256 # shasum -a 256 -c checksums.sha256 on macOS
Expected: every file OK. Then open entry.json: its entry_hash must be
03d081d2e4ae2894e39175bba555088bb0efa367b980be6e48dee101d6b64f8a
2 · The chain
Ten lines of Python over the Log file, ledger.jsonl, check every link and every hash back to genesis.
curl -sSO https://watch.thalorworks.com/ledger.jsonl
python3 - <<'V'
import json, hashlib
prev = '0' * 64
for line in open('ledger.jsonl'):
e = json.loads(line); h = e.pop('entry_hash')
assert e['prev_hash'] == prev, f"chain break at seq {e['seq']}"
assert hashlib.sha256(json.dumps(e, sort_keys=True, separators=(',', ':')).encode()).hexdigest() == h, f"content altered at seq {e['seq']}"
prev = h
print('chain intact, head', prev)
V
Expected head: 03d081d2e4ae2894e39175bba555088bb0efa367b980be6e48dee101d6b64f8a.
3 · The anchors
The head hash is published in places this server does not control. Compare the head above with each:
- seq 51 · git:github.com/thalorworks/watch-anchors#b02135446dd8abbe61f8dacfc7f9105dd7492100 · 2026-10-21T02:28:37Z · 55f33454f001…
- seq 50 · git:github.com/thalorworks/watch-anchors#6d2c42cd49bf92bb93e54e104ddf4948730117d2 · 2026-10-20T00:43:22Z · 027ced5c2370…
- seq 49 · git:github.com/thalorworks/watch-anchors#66af6d655081764e5b9cda569188f3aab97784f9 · 2026-10-19T01:06:20Z · eadbef829847…
- seq 48 · git:github.com/thalorworks/watch-anchors#88320be1db53fc18cf598f6b8ba07a769cadc2f6 · 2026-10-18T09:33:33Z · 3f07a3d50234…
- seq 47 · git:github.com/thalorworks/watch-anchors#5193480ecf79728099ba4ab8a4039b726b7d14ce · 2026-10-16T04:10:45Z · 1dd652bbccc2…
- seq 46 · git:github.com/thalorworks/watch-anchors#13c8e0ec20501aea7ac03023fa63d3d271c5b443 · 2026-10-15T03:22:45Z · dbc10f516c51…
- seq 45 · git:github.com/thalorworks/watch-anchors#10c3ad523c38ef2352252b0e17903237e16ef357 · 2026-10-14T00:13:41Z · 594a98cd6f6d…
- seq 43 · git:github.com/thalorworks/watch-anchors#77f4cc32e442ab04077a0fea7d9ceb80dfc8f560 · 2026-10-12T00:13:33Z · fc52899915fc…
- seq 42 · git:github.com/thalorworks/watch-anchors#245f6b77d2f60d95dc270ab608f0e5b00b17c362 · 2026-10-11T00:13:04Z · dc9ed202284d…
- seq 41 · git:github.com/thalorworks/watch-anchors#abb30b9a587e54b40ff1125aca7c72e6e23d94a8 · 2026-10-10T00:27:46Z · 4635d8bb395a…
- seq 40 · git:github.com/thalorworks/watch-anchors#3eaeabb550f03d11d4f6145891289a7462443486 · 2026-10-09T00:13:17Z · 25f62170d1cd…
- seq 38 · git:github.com/thalorworks/watch-anchors#620556b6840299b92e66761548f04f1c9b6af52b · 2026-10-07T02:11:25Z · 2217bfee01a9…
- seq 37 · git:github.com/thalorworks/watch-anchors#cc550acb045d0a6d620103fccd2775e2249f5079 · 2026-10-06T00:10:02Z · ef5eae81ea15…
- seq 36 · git:github.com/thalorworks/watch-anchors#7ae083ddf3e7a0eda1b7ce3d47bffae416f52f2c · 2026-10-05T00:12:04Z · cfdbfb914970…
- seq 35 · git:github.com/thalorworks/watch-anchors#85f4da90b5fb9cf0ee755f3188f14cc56e7da675 · 2026-10-04T00:11:27Z · c717d0405aef…
- seq 34 · git:github.com/thalorworks/watch-anchors#52b24a42195cb9e6cebcd0c1220fdd0d42b85132 · 2026-10-03T00:52:58Z · 11202960332b…
- seq 33 · git:github.com/thalorworks/watch-anchors#f614364021d354e6855f9c1ce890d2207b07aa20 · 2026-10-02T00:12:20Z · 1c29e9087a42…
- seq 32 · git:github.com/thalorworks/watch-anchors#1f9bb28e354de0fc2d3464579ffd3c64a6531f9d · 2026-10-01T00:13:09Z · fbc8da22907a…
- seq 31 · git:github.com/thalorworks/watch-anchors#5691e44508ab3c27aa7eeba83b1907d0997e99aa · 2026-09-30T00:27:36Z · 571b7782dc89…
- seq 30 · git:github.com/thalorworks/watch-anchors#9ca964e747d16dae6e9eccb74ebaae5b0f665f0d · 2026-09-29T00:11:18Z · 1e91d0b81683…
- seq 29 · git:github.com/thalorworks/watch-anchors#e9dd050d253133da542058e4da22962980f2c580 · 2026-09-28T00:14:06Z · 1e5bdc850960…
- seq 28 · git:github.com/thalorworks/watch-anchors#298ef176926fa73f07eed977a11705add95c6c4d · 2026-09-27T00:14:23Z · 2b1ae3539d72…
- seq 27 · git:github.com/thalorworks/watch-anchors#f99d57c54e8eb90320debcd5a68cbbdcd0039dc6 · 2026-09-26T00:11:27Z · 354e8999ec42…
- seq 26 · git:github.com/thalorworks/watch-anchors#fe8af9c8da29465b77382ca1d29c978579877b46 · 2026-09-25T00:10:09Z · 4e2d0e58410b…
- seq 25 · git:github.com/thalorworks/watch-anchors#38378a4fa99924e02a38d930c664d7bc561983ee · 2026-09-24T00:12:09Z · 5b868faa5cda…
- seq 24 · git:github.com/thalorworks/watch-anchors#19fc90388511c0eba573cb2c3a6d160a6cb7f253 · 2026-09-23T00:30:03Z · 9ee70e374bf9…
- seq 23 · git:github.com/thalorworks/watch-anchors#68495d19ebf95eb268a426aa98d52042d0f4c2e2 · 2026-09-22T00:12:22Z · 00e94e397bd8…
- seq 22 · git:github.com/thalorworks/watch-anchors#3b56d47b1d02392b4f653c124535aa241dcd6e48 · 2026-09-21T00:44:18Z · 8da11f170a6b…
- seq 21 · git:github.com/thalorworks/watch-anchors#efebc2a3a18ee6270e2817879be918be881e8a1d · 2026-09-20T00:11:19Z · 33be2f4c8869…
- seq 20 · git:github.com/thalorworks/watch-anchors#3faac8c9ae10633a49518fe85a995b6c30308a8e · 2026-09-19T00:13:06Z · 58e6fe1bccbf…
- seq 19 · git:github.com/thalorworks/watch-anchors#d5266d776825de080038d6b9524ab7b20e686a4a · 2026-09-18T00:22:29Z · c40197931a26…
- seq 17 · git:github.com/thalorworks/watch-anchors#1b5d723361663b19e2bb2613ef7d79dd5a48a9db · 2026-09-16T00:12:40Z · 40b64afcb7dc…
- seq 16 · git:github.com/thalorworks/watch-anchors#ccae2e56857fdf1932e60575fe3c26a6ff47a818 · 2026-09-15T00:12:16Z · 76c78ad6a362…
- seq 15 · git:github.com/thalorworks/watch-anchors#3d9cf9f005d57b7059707798f08907f58b1c63dd · 2026-09-14T00:21:07Z · 82ad7bd1cd79…
- seq 14 · git:github.com/thalorworks/watch-anchors#deeec0c5e00b4d77a83dc1b575c580e25007e8fe · 2026-09-13T00:10:43Z · aad30913c674…
- seq 13 · git:github.com/thalorworks/watch-anchors#a705e7dfb6bc84aba5086402be78646bfe42156c · 2026-09-12T00:11:25Z · 57285ed542e6…
- seq 12 · git:github.com/thalorworks/watch-anchors#34682dae871634b2d107207ae2f58806c5d055d4 · 2026-09-11T00:11:13Z · 53c93e2b9718…
- seq 11 · git:github.com/thalorworks/watch-anchors#4f8f6ee25b379a4363232d415acd58bb58fb133c · 2026-09-10T00:12:55Z · e61d7fea28dd…
- seq 10 · git:github.com/thalorworks/watch-anchors#ca07030be02a456b2c1597ca25ce6047ada02577 · 2026-09-09T00:15:07Z · 97d2bdf66952…
- seq 9 · git:github.com/thalorworks/watch-anchors#a0297d4630672278aaf1bf5848e3faa080fcd3aa · 2026-09-08T00:37:13Z · 225e4e1175bb…
- seq 8 · git:github.com/thalorworks/watch-anchors#40597c95f36970babe3ce0ad312c5db14028a810 · 2026-09-07T00:14:40Z · 1e94e1f5bee4…
- seq 7 · git:github.com/thalorworks/watch-anchors#21a8f096e6643d37133e0e47f4e08407965b5fbd · 2026-09-06T01:39:20Z · ea5bf5c4b127…
- seq 6 · git:github.com/thalorworks/watch-anchors#03371fbb93fb82d2d3d6279c9beb351b49137b5a · 2026-09-05T00:10:17Z · e1677bb49763…
- seq 5 · git:github.com/thalorworks/watch-anchors#9fa2da36d4a0cc2b38568b0c14b7b1e48c399ab8 · 2026-09-04T00:11:48Z · 4d0e9d060baa…
- seq 4 · git:github.com/thalorworks/watch-anchors#f8cbb145d64068c04f2072443a781078f04469ff · 2026-09-03T00:26:13Z · f8da9fef1124…
- seq 3 · git:github.com/thalorworks/watch-anchors#121e1d3a78b900c70ba9884c48af4b681fb39d92 · 2026-09-02T21:31:18Z · e37e31e15a09…
- seq 2 · git:github.com/thalorworks/watch-anchors#1f638751d450a5ec15ff0d246129eab8f5c0fea5 · 2026-09-02T10:33:27Z · ffd184715100…
- seq 2 · git:github.com/thalorworks/watch-anchors#8eac18d4a72f9fe9494c5140690104962edad6a0 · 2026-09-02T10:29:10Z · ffd184715100…
Anchor targets: the public thalorworks/watch-anchors git repository (one commit per snapshot; the commit timestamp is the anchor), maury.thalorworks.com/.well-known/thalor-watch-head on a different host and deploy, and the weekly HQ thread report, mailed and archived by people.
4 · The evidence
Each log entry names the SHA-256 digests of the OSea session bundles it consumed (session_digests). A digest is the hash of a bundle's own checksums.sha256, so it commits to every byte of every stream. The bundles themselves are held on the node that produced them and on this server; evidentiary access is by request on the internal tier.
What this does not prove
That a single node's telemetry is unforgeable by a determined insider with physical access to that node. That becomes true only with diverse custodians and cross-attestation between hulls in one harbor (Stage 3). See method.