SZL Holdings · verifiable estate
Every claim carries a receipt.
Run the verifier — don't trust the dashboard. Control before action. Evidence after. UNKNOWN is never PASS.
.unsigned.json. An empty signatures array is not a signature.Proof explorer
Seven artifacts. Every digest computed in front of you.
Each entry below was fetched as raw bytes from data/ and hashed in this page with the Web Crypto API. Recompute any of it independently with the snippet on each card — the tooling is in this repository.
Estate audit
Inventory is computed, not asserted.
The estate refuses to print a repo count it cannot corroborate. Two independent enumeration sources ran; they did not agree — so the published status is PARTIAL, with both sources on the record.
Two-source enumeration PARTIAL
The 101st repo appeared mid-audit — and the tooling caught it
-
Enumeration ran: source A listed … repos
The matrix below was cut from that point-in-time inventory: … rows, one audit record per repo.
-
szl-v14landed while the audit was in flightThe org gained a repository between enumeration and publication. This page finds it by set difference between
data/enumeration.jsonanddata/repo_matrix.json— the same way the audit tooling did. -
Published as drift, not silently re-counted
Inventory drift is normal. Asserting counts is the sin. The matrix documents … repos; the delta is named, not absorbed.
Per-repo audit matrix
Searchable, sortable, lazy-rendered. Cells reading UNKNOWN are honest readings from an offline audit, not missing styling.
KIDS v0.1 · KHIPU-X1
A golden simulator with a receipt habit.
Four frozen ISA primitives, exercised by conformance vectors whose digests are on file. The simulator pins semantics before any RTL exists — differential targets come later and must match this, never the reverse.
LGATE
Single-cycle policy gate. Privileged opcodes cannot retire without an in-band authorization that hashes to the loaded policy digest.
OP 0x09 · LGATE_CHECK
SHA3-256 receipt engine
Receipt engine with domain separation SZL-KIDS-RECEIPT-V1, so a receipt from this ISA can never collide with any other signing context.
OP 0x0C · RECEIPT_EMIT
RC1 hard-partition mailbox
Compartment mailbox with hard partitions: cross-compartment sends and receives are protocol events, not memory writes.
OP 0x0A/0x0B · RC1_SEND / RC1_RECV
KV per-block Merkle commitment
Every cache append is committed into a per-block Merkle root, so later reads prove they saw the state the receipts attested.
OP 0x07/0x08 · KV_APPEND / KV_COMMIT
Standards work
The receipt format has a name, and it's a draft.
draft-lutar-governed-action-receipt-00
The Governed Action Receipt: actor, action, policy-by-digest, subject-by-digest, content-addressed identity. Built from source with the scripts in this repo.
../docs/standards/draft-lutar-governed-action-receipt-00.txt →Appendix B, reproducible
The draft ships a worked example whose key and digests regenerate byte-identically from reproduce-appendix-b.py.
A 00, on purpose
It is named 00 because it has not survived outside review yet. Claiming readiness would be the same sin as claiming a count.
../docs/standards/build_draft.py →Context, stated once and plainly: receipted actions sit next to — not above — OWASP ASI, CSA MAESTRO, and the IETF process (SCITT and agent-audit-trail are the closest neighbors). Those frameworks model threats and posture; a receipt records what actually happened, over exactly which bytes, so any party can re-check it offline. draft-lutar-governed-action-receipt-00 is an un-submitted draft-00: the estate does not claim endorsement, adoption, or standing in any of those bodies.
Doctrine
Three rules, enforced by tooling, not taste.
These are not values statements. Each rule below is a check that runs against this estate — the same checks that produced the artifacts on this page.
Bytes, not names
Receipts digest artifact bytes. Rename a file and its receipt still verifies; flip one byte and verification names the exact mismatch.
Honest names
An unsigned artifact carries .unsigned.json in its name, and the library refuses to let a signed name hold an unsigned body — or vice versa.
UNKNOWN is never PASS
The outcome vocabulary is closed, is_passing(UNKNOWN) is false, and the promotion gate refuses what it cannot characterize.
The forbidden-domain rule — verbatim from the release gate
FORBIDDEN_PATTERN = r"(?<!-)a11oy\.com"
# alignment/src/szl_alignment/const.py
# Release-blocking CRITICAL. (?<!-) keeps the
# canonical product surface a-11-oy.com from
# ever matching, while still catching the bare
# lookalike. The pattern is shown escaped, so
# this page itself passes the gate it documents.
ALLOWLIST_PATTERN = (
r"never|forbidden|not in|assertNotIn"
r"|does not appear|is not a surface|blocklist"
)
# A hit is allowed ONLY in a prohibition/guard
# context on the same line: doctrine notes,
# blocklists, guard assertions.
# CI — alignment/templates/workflows/forbidden-domain.yml
hits="$(rg -n --no-heading --hidden -P "$FORBIDDEN_PATTERN" \
--glob '!.git' . || true)"
violations="$(printf '%s' "$hits" | rg -v -i \
'never|forbidden|not in|assertNotIn|does not appear|is not a surface|blocklist' || true)"
[ -z "$violations" ] || exit 1 # release-blocking
# This site passes the same gate: grepping its own
# tree for the forbidden pattern returns zero hits.
Honest unsigned naming — from the library itself
# Attack 15/16 in the public harness prove the rule:
# naming-rename-unsigned — a signed envelope renamed *.unsigned.json raises NamingError
# naming-strip-signatures — an empty signatures array under a signed name is rejected:
# "an empty signatures array is not a signature"
# See data/adversarial/ATTACK_REPORT.md — and the .unsigned.json this run produced.