Learn · Audit & evidence
The logbook
A hash-linked chain of everything the platform saw and did.
Checked against the product on · written for people who need the evidence
Every step writes one entry. An entry holds the payload, its position in the chain, the time it was recorded, and a hash computed over the entry before it. Editing an entry breaks every hash after it.
Prove
Records
| # | Time | What happened | Hash |
|---|---|---|---|
| 18402 | 12:04:12 | Approved: turn off access · pump-12 · by dana@ | 9f3c…a71e |
| 18401 | 12:04:11 | Held for a person: turn off access · pump-12 | 4b02…c8d9 |
| 18400 | 12:04:11 | Rule fired: Overheat hold · pump-12 | 7ae1…0f34 |
| 18399 | 12:04:11 | Event taken in: observation · pump-12 | d21f…55ab |
Open Records and set the window you need.1
Read the entries bottom to top.2
One event produces an entry for arrival, one per rule that fired, one for a held call, and one per decision.
Read the chaining line.3
How an entry hash is derived
The derivation is fixed and takes no secret. Anyone holding the entries can recompute every hash.
| Step | Input | Result |
|---|---|---|
| 1 | The payload, rendered as canonical JSON: keys sorted, no spaces, unicode kept. | The payload hash. |
| 2 | The previous entry hash, the payload hash, the index, the recorded time, and the scope, joined by a vertical bar. | The chain input. |
| 3 | SHA-256 over the chain input. | The entry hash. |
hash = sha256(prev_hash | payload_hash | index | recorded_at | scope)The entry hash. payload_hash is sha256 over the canonical JSON of the payload. The first entry in a chain uses the genesis value as its previous hash.
What a logbook entry carries
| Field | What it holds |
|---|---|
| event_id | The entry’s own identifier. |
| idx | The position in the chain, counting from the start. |
| workspace_id | The work area the entry belongs to. |
| prev_hash | The hash of the entry before it. |
| payload_hash | SHA-256 over the canonical JSON of the payload. |
| hash | The entry hash, derived as above. |
| recorded_at | The time the entry was written. |
| payload | What happened, as fields. |
Read it from code
curl 'https://api.dmzagent.com/v1/ledger/WORKSPACE_ID?limit=100' \
-H 'Authorization: Bearer YOUR_API_KEY'The platform recomputes the chain on request and reports the first break, when there is one.
curl 'https://api.dmzagent.com/v1/ledger/WORKSPACE_ID/verify' \
-H 'Authorization: Bearer YOUR_API_KEY'