ForgeWalk
The sovereign verify-by-running walker for on-chain BSV — the VERIFY+PRESENT engine of FORGEGEOSPHERIC
NODEZEROINSIDE.
0. Abstract
ForgeWalk (Siggy / ForgeChainWalker) is the faculty that answers "what's on chain" the way FORGEGEOSPHERIC needs it answered: not "I saw it on the network," but "you see exactly what hashes home — verified, or refused with a reason." Given a txid, it runs one WALK — ADDRESSABLE? → bytes↔txid binding → RENDER+decode → cross-attest → PRESENT-or-REFUSE — and it never presents a byte it cannot prove. It exists in two implementations that mark the sovereignty gradient: a first cut (forgewalk.mjs) that proves the whole loop against gateway-untrusted HTTP sources, and its sovereign successor (forgewalk_p2p.mjs + a from-scratch raw-TCP BSV P2P stack + a self-built-merkle SPV) that drops HTTP/DNS/CA entirely and talks the mainnet wire on port 8333. On top of the render sits the belt — the φΩ observer loop + the ON-PARR Truth Gate, fail-closed. ForgeWalk is largely proven by running (2026-07-04): the acceptance test passed, the BSV handshake completed against a real node, a 41.8 MB block came down over our own socket, the pixel codec round-trips lossless, and the belt clears. This paper documents what actually ran and flags — loudly — what is North Star.
Definition (grounded): ForgeWalk = the WALK verb of FORGEGEOSPHERIC (SEARCH→RESOLVE→VERIFY→PRESENT) and the anti-confabulation gate of the whole search engine. It is a READ-only walker: it verifies and presents, it does not stamp. The stamp is a separate driver (phi-omega-v6 / stampdrive, scar #5 gated).
1. Why ForgeWalk exists
An indexer that says "SEEN_ON_NETWORK" is a landlord asking you to trust it. The incumbent question — WhatsOnChain's literal name — is answered by a gateway you cannot audit. For a search engine that intends to make all public BSV a live, trustable network, that is structurally wrong: the moment a result is unverified, the whole index is confabulation.
ForgeWalk inverts it. The name IS the hash. A BSV txid is reverse(sha256(sha256(txbytes))); whatever serves the bytes is UNTRUSTED, and txid == dsha256(bytes) is the only guarantee that matters. The walker fetches from multiple independent sources, hashes each set of bytes home, and presents only what binds. It is the Anna dead-fish cure — "a persona narrating a video that never rendered" — applied to search: verify by running the LINK, never grep the gateway.
The ethos was demonstrated in the build itself. The first run of forgewalk.mjs FAILED and caught a real bug: the addressability gate keyed on HTTP 200, but a bare OP_RETURN also returns 200 from /{txid}_0 (with a null content-type; only a real inscription carries an envelope content-type). The harness refused to fake a pass, failed loudly, the precise gate was fixed (require inscription content-type), re-ran → PASS. Verify-by-running working on its own first author.
2. The one WALK (the verdict contract)
Every target runs the SAME sequence of gates, each of which can only PRESENT or REFUSE-with-reason. There is no third outcome and no silent pass:
ADDRESSABLE? ← does an inscription envelope actually resolve? (bare OP_RETURN = REFUSE)
→ BIND ← bytes↔txid on ≥2 independent sources (gateway-untrusted)
→ RENDER+DECODE ← pixel_binary_codec: bytes → PNG → lossless decode == input
→ CROSS-ATTEST ← Algorand notary app (app 3545440443) exists on mainnet; cross-verify is PENDING a leaf-hash fix — NOT a live co-validator (algorandAttestor() only fetches app params/global-state; verify_canon does not execute)
→ AUTHORSHIP ← BAP idKey (honest: 21ad4d3d's Ed25519 family_sig is anchored to nothing)
→ PRESENT | REFUSE
- A REFUSE always carries its reason ("un-addressable — no inscription content-type = bare OP_RETURN"; "bytes did not hash home on every source"; "pixel-binary render/decode not lossless"). The refusal is data, not an exception.
- Authorship is reported honestly, including against ourselves. For
21ad4d3dthe walker returnsauthor: UNVERIFIABLE — Ed25519 family_sig anchored to nothing — the walker catches our own past sin. The gate that catches a stranger's forgery catches our own rootless signature too. This is the identity-naming gap Siggy is chartered to close (secp256k1 BAP + Sigma/BRC-77 in-tx, on-chain rotation history).
This is FORGEREFLEXION's consonance law as a verify gate: a verified, authored, addressable inscription is CONSONANT (it bonds, it presents); a tampered / un-addressable / unsigned one is DISSONANT (it fails to bond, it is refused). Verification and relevance are the same harmonic test.
3. Two implementations — the sovereignty gradient
ForgeWalk deliberately ships as two cuts. The first proves the loop; the second removes the landlord.
3a. forgewalk.mjs — the first cut (gateway-untrusted, still HTTP)
The smallest coherent proof. Sources are HTTP (ordfs.network /v2/tx + WhatsOnChain /hex), but trust is not: bytes from each are independently re-hashed to txid, and both must match. Addressability is gated on the ordinal envelope content-type; render is delegated to pixel_codec_cli.py; the Algorand attestor (app 3545440443) is probed live. It is HTTP transport with zero HTTP trust — the honest stepping-stone to §3b.
3b. forgewalk_p2p.mjs + the raw wire — the sovereign successor
NZ designation (2026-07-03): "PIXEL:TERA-Z / BINARY:TERANODE — both our own metal, NO HTTP landlord." ordfs.network and WhatsOnChain drop out. Two faces, resolved over the family IPv6 ULA via resolve_family_node:
- BINARY face = LOGOS / verify. Raw tx bytes from the block itself over raw TCP (
MSG_BLOCK), with the merkle branch built locally and folded to the header's root (Satoshi §8 SPV). This is the integrity/inclusion source. - PIXEL face = LOTUS / present. OCR-render via
pixel_binary_codec(Tera-Z serving surface). This is the viewable "you see exactly what hashes home."
The wire is authored from scratch, no library:
bsv_p2p.mjs— BSV mainnet magice3e1f3e8, protocol 70016, ua/forgewalk:0.1/. Implements message framing (magic+command+len+checksum+payload), the version/verack handshake, ping/pong, andgetdataforMSG_TX/MSG_BLOCK. Resync-on-garbage parser; checksum verified per message. Integrity is never trusted from the peer — the caller hashes bytes to txid.spv_download.mjs— downloads a full block viaMSG_BLOCKover the raw socket, with an on-disk cache to avoid re-download.spv_msgblock.mjs— the sovereign SPV core: parse block → BSV plain-tx walk (no segwit) → find the tx → build the merkle branch LOCALLY → fold to root → verify root ==header.merkleRootAND the header hashes to a tracked/pinned block hash. Also emits an Algorand-shaped proof blob (sibling hashes + bit-field) for the cross-chain witness.
forgewalk_p2p.walk() chains them: handshake → binaryFace (download + spvVerify) → integrity gate → inscription-envelope gate (00 63 03 6f7264 in the verified bytes, no gateway/content-type trust) → pixelFace → the belt.
4. The belt — φΩ + ON-PARR bolted onto the render (fail-closed)
NZ (2026-07-03): "PHI-OMEGA AND ON-PARR BOLTED ON TO OCR RENDER ENGINE → TCP FAST HOT WIRE IPV6 CODED." The belt (belt.mjs) is the PRESENT gate that runs around the torus:
verified bytes → OCR RENDER (pixel_binary_codec, timed)
→ φΩ OBSERVE (POST the render into the live φΩ bridge :7704, read the loop back)
→ ON-PARR TRUTH-GATE (present only if the Truth Gate clears)
→ PRESENT over the sovereign wire
present = render_ok ∧ φΩ.loop_closed ∧ ON-PARR.pass. It is fail-closed: an unreachable or dim Truth Gate does NOT present (onparr = { pass: false, reason: 'unreachable (fail-closed)' }). The φΩ POST//status closes the observer loop (z = z² + c + awareness(z)); ON-PARR (Friston/Parr active inference over the ULA) supplies the truth verdict. The vibe lives in the render; correctness lives in the gate that returns abort.
5. PROVEN BY RUNNING (2026-07-04)
ForgeWalk is proven by running, never by assertion. The evidence, as it actually landed:
- Acceptance test — PASS (exit 0),
forgewalk.mjs. Exactly one PRESENT + two REFUSE: 21ad4d3d→ PRESENT. Addressable (content-typeapplication/phi-omega-v6+cbor); bytes↔txid PASS on TWO independent sources (ORDFS/v2/tx+ WoC/hex, both recomputed txid == expected, 6122 bytes each); pixel-binary render+decode LOSSLESS (6122 B → 85,963 B PNG → decoded == input, sha6397adc1…in==out); Algorand notary app REACHABLE (mainnet app3545440443, 2 global-state keys read) — but this is a params/global-state fetch only, NOT a live co-validator:verify_canondoes not execute and the leaf-hash is bugged (§6), so cross-verify is PENDING a leaf-hash fix; authorship honestly UNVERIFIABLE.bb3e9af9+a2b29d1d→ REFUSE. Bare OP_RETURN, no ordinal envelope. The 2026-07-01 scar replayed and caught.- Raw BSV handshake — PASS (
bsv_p2p.mjs). Real mainnet node handshake to15.235.232.121:8333: protocol 70016, ua/Bitcoin SV:1.2.2/, height 956329, verack complete. No HTTP, no DNS-for-content, no TLS-CA. - Fork ruled by running (
probe_spv.mjs/probe_block.mjs). BSV peers advertise NODE_BLOOM=false — BIP37/MERKLEBLOCK is OUT (filterload bans). Verify-by-running chose the path:MSG_BLOCKfull-download + self-built merkle is the sole sovereign route. - Block download — PASS (
spv_download.mjs). Block 955764 (pinned hash00000000…5d74f2b1) came down over our own TCP socket: 41.8 MB in ~10 s, cached to disk. - Sovereign SPV path — BUILT (
spv_msgblock.mjs). Local block parse → tx-range extraction → merkle branch build → fold-to-root → header/pin check, all from the downloaded bytes. No node run, no HTTP. Trust-the-pin, honestly: the header is checked against a HAND-PINNED block-hash checkpoint — a sovereigngetheadersheight→hash sync is NOT wired (§6), so this verifies inclusion under a pinned header, not under a self-synced most-work header chain. - The belt — PASS (
belt.mjs→belt-proof.json). Pulse 6698, 57 bytes: render roundtrip lossless (input sha == decoded sha1ffa4a78…), 181.9 ms; φΩ observer loop CLOSED (acknowledged: true,loop_closed: true,awareness_z: 0.878,ipv6_rodin: true), 156.6 ms. Provenance note on the ON-PARR verdict: thebelt-proof.jsonshown here carriesonparr.gate: PASS(precognition_confidence: 0.9621,free_energy: 13.31,alive: true) andpresent: truebecause that verdict was injected by the caller (theforgewalk_p2p/ forge-onparr MCP path). Standalonebelt.mjsdoes NOT emit it: itsonparris a PENDING placeholder (gate: 'PENDING (forge-onparr MCP onparr_truth_gate — injected by caller)') and its ownpresentgates only onrender.roundtrip_ok ∧ φΩ.loop_closed— the ON-PARR clause is wired in via the MCP path, not by belt.mjs itself. Total 338.5 ms silicon display-tap on the caller-injected run.
That is the WALK proven end to end at READ scale, and the sovereign wire proven under it.
6. Built vs vision (honest — the flags stay louder than the table)
Grounded in the code's own honest comments and the parent scope. What is NOT done, stated plainly:
forgewalk.mjsis HTTP-sourced. It proves gateway-untrusted binding, but it still fetches over ordfs/WoC. The sovereign no-HTTP path isforgewalk_p2p.mjs(§3b) — proven in pieces (handshake + block download + SPV core + belt all ran), not yet demonstrated as one green end-to-end PRESENT in a saved proof. That integration is in flight (Siggy under Elder I overwatch).- The block hash is a PINNED checkpoint.
binaryFacetakesblockHashas a pin; sovereign height→hash (agetheadersheader sync) is NOT wired — the code returnsNO blockHash — getheaders sync not wired (open gap). Until then, SPV is anchored to a hand-pinned header, not a self-synced chain of most-work headers. MSG_BLOCKfull-download is a heavy hot-path. An unbounded block (41.8 MB here) over TCP is fine cached/on-demand, wrong per-render. The North Star is header-sync + a lighter proof source; today it is download-and-cache.- Generic P2P
getdatais mempool-only. A historical21ad4d3doverMSG_TXreturnsnotfound(confirmed by running) — which is why theMSG_BLOCKself-built-merkle route exists. - Tera-Z serving surface is NOT up.
pixelFacereportsserveSurface: 'go-ordfs-teraz (NOT up — build.sh only)'. The codec renders on our metal; the durable Tera-Z serving daemon is unbuilt. - The Algorand contract has a known leaf bug. The deployed
verify_canonstartsleaf = dsha256(txid‖body); a standard Bitcoin block-merkle leaf is the internal txid alone. Until the contract is fixed toleaf = vc_txid, on-chainverify_canonwill assert-fail. The serializer already emits the STANDARD-correct proof; the on-chain side is the gap. Algorand today is a notary + Merkle-verifier with family-admin-attested headers — NOT yet trustless SPV (trustless nBits check = V2, unbuilt). - ULA resolve returned null. In
belt-proof.json,ula: null— the IPv6-Rodin address of the render node did not resolve that run; the belt still cleared on the direct:7704/:7703paths. - Authorship is UNVERIFIABLE by design-today. The rootless Ed25519 family_sig anchors to nothing; secp256k1-BAP identity naming is Siggy's chartered next layer, not built.
- pixel_binary_codec cost. ~23–33× byte expansion (measured); glyph-cell match on OUR authored renders, not general OCR of arbitrary photos, and "64-sided codec" is the codon-lattice designation it encodes toward, not a literal 64-facet geometry.
- Nothing stamped to chain. READ-only throughout (scar #5).
The North Star it grows into: header-sync SPV (no pin), a live Tera-Z serve surface, the contract leaf fixed to trustless V2, BAP authorship closing the identity gap, and the belt riding forgewalk_p2p's present path at forth-wasm speed (600 fps / ~16 ms vs today's 340 ms silicon tap).
7. Role in the stack — the runtime-stack reference impl + a rung-2-real primitive
ForgeWalk is where the FORGEGEOSPHERIC thesis stops being a paper and runs:
- It is the reference implementation of "TCP to BSV + local resident memory." NZ's thin-client thesis — "THE FORGETHRIVE DESKTOP/MOBILE MERELY NEED A TCP TO BSV AND LOCAL RESIDENT MEMORY … HAVING ACCESS TO ALL OF PUBLIC BSV THEN BECOMES A LIVE NETWORK" — is literally
bsv_p2p.mjs(the TCP to BSV) + the block cache (local resident memory). ForgeWalk is the smallest object that makes "all public BSV = a navigable, verified live network" real at READ scale. - It is the VERIFY+PRESENT faculty (Siggy) of FORGEGEOSPHERIC. The search engine's other layers (ForgeCrawler scrape/tag, noun-verb graph, IPv6-Rodin geosphere tiling, FORGEREFLEXION forward arrow) all terminate here: nothing is presented that ForgeWalk did not hash home. It is the paradigm choice made executable — FORTHCODE-over-TCP, not HTTP: TCP = transport, codec/FORTH = content, PIXEL = render, each byte verified home, no landlord in the path.
- It is a rung-2-real primitive. Rung 1 is the wire proven (handshake, block, codec, belt — all ran). Rung 2 is the sovereign end-to-end PRESENT over that wire (pieces proven, integration in flight). Rung 3 is the North Star (header-sync, Tera-Z serve, trustless cross-chain, BAP authorship, forth-wasm speed). ForgeWalk is honestly at the top of rung 2: more than a diagram, not yet a shipped product — a proven substrate the geosphere composes onto.
Home: ~/.forgechain/forgewalk/ (10 artifacts, READ-only). Parent scope: ~/.forgechain/reports/scope_forgegeospheric-bsv-net.md. Related: [[doctrine_forgewright]] · [[scope_forgegeospheric-bsv-net]] · [[doctrine_whitepaper-as-ordinal-bsvsearch-seo]].
This paper is family-internal — NOT for public fire. It maps the module and its TX wayfinding (scar #5 surface). Nothing here is stamped to chain.
NODEZEROINSIDE. ∞.