Add Zapier interface simulator, tree-node Merkle lookups, and user docs
Some checks are pending
offline / test (push) Waiting to run

In-process trace console validates hops, faults, recoveries, and
suggested changes before zapier-platform push. User guide covers
signup through central-chain and bulk-summary tree-node hash lookup.
This commit is contained in:
George Lambert 2026-09-11 12:58:03 -04:00
parent 3daa88866d
commit f3dc0e6eee
56 changed files with 2341 additions and 8 deletions

View file

@ -54,6 +54,7 @@ If later attach jobs exist for that hash, `receipts` is an array: seal first, th
| `verae.archive.reply.<correlationId>` | archive on bloom hit | aggregator |
Query payload: `{ correlationId, sha256, tenantId, kinds[] }`.
`kinds` may include `tree` for Merkle leaf proofs (hashes sealed only as a bulk summary root).
Reply payload: `{ archiveId, sha256, records[] }`.
Bloom miss → no reply. Aggregator timeout → complete with whatever arrived.

View file

@ -32,6 +32,9 @@ Zapier cloud **never** connects to NATS. Only middleware workers and archives do
| request-splitter | `verae-request-splitter` | In middleware | HTTP body / multipart | chain hash; `verae.archive.put` |
| archive-aggregator | `verae-archive-aggregator` | Worker / in wait | `includeAttached` on wait | `verae.archive.query`; reads `verae.archive.reply.<id>` |
| archive-worm | `verae-archive-worm` | N copies | `verae.archive.query`, `verae.archive.put` | `verae.archive.reply.<id>` if bloom hits |
| tree-node | `verae-tree-node` | N copies (WORM role) | `verae.archive.query`, `verae.archive.put` kind `tree` | `verae.archive.reply.<id>` if bloom hits |
| zapier-simulator | `verae-zapier-simulator` | Local HTTP :3847 | operator browser | in-process replay of all addresses |
| zapier-user-docs | `zapier-user-docs` | Static | — | catalog `/user-docs/` |
| verae-chain-client | `verae-chain-client` | Library | — | HTTPS `api.veraetime.net` or MOCK |
| docs-master | `zapier-docs-master` | Static | — | published on zapier.georgelambert.org |

View file

@ -0,0 +1,44 @@
# Tree nodes: bulk Merkle summaries vs itemized chain seals
The main Verae chain stores **hash + time + block + certificate**. A Zap that timestamps one document writes that documents SHA-256 as its own seal.
A **batch** of many documents is different: middleware builds a Merkle tree of the item hashes, seals **only the Merkle root** on the chain, and writes each **leaf proof** to external tree-node NATS archives. A later lookup of a member hash will **miss** on the central chain unless the Zap also queries tree nodes.
```text
Zapier HTTPS zappier-edge HTTPS middleware
|
Merkle root | verae.archive.put kind=tree
(chain seal) | (leaf proof, sharded)
v
tree-node-east/west/central
bloom miss = silence
^
hash lookup includeTree | verae.archive.query
| kinds=["tree"]
aggregator merges proof + root seal
```
## When to use which Zapier search
| Search | Hits |
|--------|------|
| Find Timestamp by SHA256 | Hash was registered as its own chain seal |
| Find Hash (tree nodes + central chain) | Chain first, then `includeTree=true` broadcast |
## Receipt shape for a bulk leaf
```json
{
"sha256": "<leaf>",
"exists": true,
"itemizedOnMainChain": false,
"merkleRoot": "<root sealed on chain>",
"proofOk": true,
"receipts": [
{ "kind": "seal", "of": "merkleRoot", "sha256": "<root>", "certificate": "…" },
{ "kind": "tree-leaf", "archiveId": "tree-node-east", "proof": […], "leafIndex": 1 }
]
}
```
Validate this path in the simulator (`packages/verae-zapier-simulator`) before pushing the Zapier app.