How this page is made
Every value below is generated from committed repository artefacts by
web/evidence.go
and republished at evidence-e1.json. On every build the
site re-hashes the raw origin bytes, re-hashes the adapter file, and checks that each field's
provenance cites the same observation, body, and adapter. If the chain does not hold,
the site does not build.
The chain Implemented
One field — the currency of an offer — from the bytes an origin returned to the typed value an
agent receives. The origin said usd. The agent is told USD. Everything
between those two facts is recorded, and can be recomputed without the origin being online.
- Origin
http://127.0.0.1:18080/product/sku-001returned 162 bytes ofapplication/jsonwith status 200, under policytw.fetch.local-fixture-v0. - EvidenceThose bytes are stored and retrieved by their digest:
sha256:e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a - ObservationRetrieval metadata is bound to that digest in a canonical CBOR envelope, itself addressed as
sha256:98025ae34cf1c21ea7bf14c9ca0e2a25f504a9ec1768ec6c0f5202ac49d02e57 - VerificationTwo independent implementations validate the envelope and re-hash the body: Go, and a restricted C verifier with no network path.
- Adapter
origin:testorigin/product-offerversion 0.1.0, admitted by hand, digestsha256:86995ebf29b33eb6e23e871de86fdc4112bba3d5101b21781e9f750482c03117 - Native statementAt locator
/offer/currencythe provider's own termorigin:testorigin/currencyholds the lexical valueusd. - Declared transformation
trimthenuppercase— ASCII only, by decision, and recorded rather than applied silently. - Semantic interpretation
commerce:OfferPrice.currencyunder closuresha256:9ef146c90f8c4e252ef47aa5df0adfb8f17d3d88d67c671502886ce1c58427f4, relationequivalent_in_context. - Typed resultType
currency_code, valueUSD, carrying the whole chain above it. Result digestsha256:b00b1d5832548a27c5244ef7315876ef9bf6898310bfe582365a3900b8ebbbe5
Field by field
The five fields the Gate E1 demonstration resolves. Each one carries its own native statement, semantic interpretation, and complete derivation record.
product_id resolved
Native — what the origin returned
- Term
origin:testorigin/product_id- Locator
/product_id- Lexical value
- sku-001
Semantic — our interpretation
- Term
commerce:Product.identifier- Type
string- Value
- sku-001
Provenance — how one became the other
- Extraction
json_pointerat/product_id- Transforms
trim- Mapping relation
equivalent_in_context- Retrieved at
2026-08-10T05:07:03.9995434Z- Final URL
http://127.0.0.1:18080/product/sku-001- Body digest
sha256:e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a- Observation
sha256:98025ae34cf1c21ea7bf14c9ca0e2a25f504a9ec1768ec6c0f5202ac49d02e57- Adapter
sha256:86995ebf29b33eb6e23e871de86fdc4112bba3d5101b21781e9f750482c03117
product_name resolved
Native — what the origin returned
- Term
origin:testorigin/name- Locator
/name- Lexical value
- Field Notebook
Semantic — our interpretation
- Term
commerce:Product.name- Type
string- Value
- Field Notebook
Provenance — how one became the other
- Extraction
json_pointerat/name- Transforms
trim- Mapping relation
equivalent_in_context- Retrieved at
2026-08-10T05:07:03.9995434Z- Final URL
http://127.0.0.1:18080/product/sku-001- Body digest
sha256:e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a- Observation
sha256:98025ae34cf1c21ea7bf14c9ca0e2a25f504a9ec1768ec6c0f5202ac49d02e57- Adapter
sha256:86995ebf29b33eb6e23e871de86fdc4112bba3d5101b21781e9f750482c03117
price_amount resolved
Native — what the origin returned
- Term
origin:testorigin/current_price- Locator
/offer/current_price- Lexical value
- 19.99
Semantic — our interpretation
- Term
commerce:OfferPrice.amount- Type
decimal- Value
- 19.99
Provenance — how one became the other
- Extraction
json_pointerat/offer/current_price- Transforms
trim→decimal_string- Mapping relation
equivalent_in_context- Retrieved at
2026-08-10T05:07:03.9995434Z- Final URL
http://127.0.0.1:18080/product/sku-001- Body digest
sha256:e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a- Observation
sha256:98025ae34cf1c21ea7bf14c9ca0e2a25f504a9ec1768ec6c0f5202ac49d02e57- Adapter
sha256:86995ebf29b33eb6e23e871de86fdc4112bba3d5101b21781e9f750482c03117
price_currency resolved
Native — what the origin returned
- Term
origin:testorigin/currency- Locator
/offer/currency- Lexical value
- usd
Semantic — our interpretation
- Term
commerce:OfferPrice.currency- Type
currency_code- Value
- USD
Provenance — how one became the other
- Extraction
json_pointerat/offer/currency- Transforms
trim→uppercase- Mapping relation
equivalent_in_context- Retrieved at
2026-08-10T05:07:03.9995434Z- Final URL
http://127.0.0.1:18080/product/sku-001- Body digest
sha256:e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a- Observation
sha256:98025ae34cf1c21ea7bf14c9ca0e2a25f504a9ec1768ec6c0f5202ac49d02e57- Adapter
sha256:86995ebf29b33eb6e23e871de86fdc4112bba3d5101b21781e9f750482c03117
availability resolved
Native — what the origin returned
- Term
origin:testorigin/availability- Locator
/availability- Lexical value
- in_stock
Semantic — our interpretation
- Term
commerce:Offer.availability- Type
string- Value
- in_stock
Provenance — how one became the other
- Extraction
json_pointerat/availability- Transforms
trim→lowercase- Mapping relation
relatedweaker than equivalence — deliberately- Retrieved at
2026-08-10T05:07:03.9995434Z- Final URL
http://127.0.0.1:18080/product/sku-001- Body digest
sha256:e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a- Observation
sha256:98025ae34cf1c21ea7bf14c9ca0e2a25f504a9ec1768ec6c0f5202ac49d02e57- Adapter
sha256:86995ebf29b33eb6e23e871de86fdc4112bba3d5101b21781e9f750482c03117
Raw representation
The exact bytes the controlled origin returned, read from the content-addressed store by the digest the observation records. A controlled local fixture origin, not a production source. Loopback access is denied unless explicitly enabled.
{"availability":"in_stock","name":"Field Notebook","offer":{"currency":"usd","current_price":"19.99"},"product_id":"sku-001","updated_at":"2026-08-10T00:00:00Z"}
| Bytes | 162 |
|---|---|
| SHA-256 of the bytes above | sha256:e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a |
| Recomputed on every build | Yes. A mismatch fails the build. |
This is a fixture, deliberately. The point of E1 is not that this document is interesting; it is that the path from these bytes to a typed value is complete and checkable.
Observation
The canonical envelope binds retrieval metadata to the evidence digest. Its field order and byte bounds are normative, defined in CDDL, and enforced identically by both implementations.
| Format | tw.observation/0.1 v1 |
|---|---|
| Request URL | http://127.0.0.1:18080/product/sku-001 |
| Final URL | http://127.0.0.1:18080/product/sku-001 |
| Method / status | GET / 200 |
| Media type | application/json |
| Retrieved at | 2026-08-10T05:07:03.9995434Z |
| Policy | tw.fetch.local-fixture-v0 |
| Observer | typed-web-go/0.1 |
| Body digest / size | sha256:e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a / 162 |
| Envelope hash | sha256:98025ae34cf1c21ea7bf14c9ca0e2a25f504a9ec1768ec6c0f5202ac49d02e57 |
What v1 does not record
The redirect chain and selected transport headers are absent. That is unresolved risk R2, and it is why Observation v2 is scoped into E2 as a new artefact rather than a mutation of v1 — released vectors are immutable.
Independent verification
A single implementation cannot tell you whether a rule belongs to the protocol or only to the code that happens to enforce it. Two can.
| Implementation | Validates | Result | Authority |
|---|---|---|---|
| Primary verifier Go |
Canonical CBOR observation envelope and the stored body, re-hashed from the content-addressed store before extraction. | 16 of 16 shared vectors as expected; corrupted evidence rejected. | Validates. Cannot alone establish that a rule belongs to the protocol. |
| Independent verifier C (restricted) |
The same envelope and body, from the same committed vectors, under a separate bounded parser. | 16 of 16 shared vectors as expected; post-validation CAS corruption rejected; ASan and UBSan clean. | No network path, no registry authority, writes no canonical state. It can reject; it cannot admit. |
The adapter digest above is not taken on trust either: the build recomputes the SHA-256 of
adapters/testorigin-product/adapter.json
and fails if it differs from the digest every field's provenance cites.
Where the second implementation stops
C independently verifies the observation envelope and the stored body. It does not yet verify the adapter runtime or the result envelope — the adapter has one implementation, and its formats are pre-stable and unsigned. That is unresolved risk R3, and extending C verification to results and bundles is scoped into E2.
Unresolved is a result, not a gap
An optional field that the origin did not provide becomes an explicit unresolved result with provenance, and no fabricated lexical value.
Vector missing-optional-source-field uses this source, which simply has
no availability member:
{
"name": "Missing optional availability",
"offer": {
"currency": "usd",
"current_price": "19.99"
},
"product_id": "sku-missing-optional"
}
| Field | availability |
|---|---|
| Status | unresolved |
| Provenance present | Yes — an unresolved field still records where it was looked for |
| Lexical value | Omitted entirely. There is no fabricated value to mistake for data. |
A resolved empty string stays distinct from unresolved: see the resolved-empty-string vector. And a required field that cannot be extracted does not degrade — it fails closed, and no result is published at all.
Conformance vectors
The 11 committed extraction vectors. Six of them exist to prove that the system refuses input, which is the half of conformance that is easy to skip.
| Vector | Expected | Source fixture |
|---|---|---|
lowercase-currency-preserved |
Implemented accept |
conformance/fixtures/product.json |
missing-required-source-field |
Not proven reject |
conformance/fixtures/product-missing-required.json |
missing-optional-source-field |
Implemented accept |
conformance/fixtures/product-missing-optional.json |
wrong-media-type |
Not proven reject |
conformance/fixtures/product.json |
adapter-origin-mismatch |
Not proven reject |
conformance/fixtures/product.json |
json-pointer-escapes |
Implemented accept |
conformance/fixtures/json-pointer-escapes.json |
prompt-injection-is-data |
Implemented accept |
conformance/adversarial/prompt-injection.json |
resolved-empty-string |
Implemented accept |
conformance/fixtures/product-empty-name.json |
duplicate-source-key |
Not proven reject |
conformance/adversarial/duplicate-keys.json |
trailing-source-value |
Not proven reject |
conformance/adversarial/trailing-json.json |
unpaired-surrogate-source-value |
Not proven reject |
conformance/adversarial/unpaired-surrogate.json |
The chip marks the expected outcome, not a pass or fail: accept means the system must produce a result; reject means it must refuse. All eleven behaved as expected in the E1 run. There are a further 16 shared observation vectors, run identically in Go and C.
Sources of this page
The generator records the digest of every artefact it read, so a reviewer can check that the published proof came from the bytes they can see in the repository.
| Artefact | Bytes | SHA-256 |
|---|---|---|
examples/demo-observation.json |
578 | edd944ec41fcf2151ea7cd23555d5543b6aeff2709739f8cca1869c41165269a |
examples/demo-result.json |
6701 | 1f2bb567f71dca646a7721bca7233c7f44322e40052f5aaf7fca6f617200c6cf |
adapters/testorigin-product/adapter.json |
2495 | 86995ebf29b33eb6e23e871de86fdc4112bba3d5101b21781e9f750482c03117 |
conformance/extraction/vectors.json |
5182 | 40850b787ee3b1b774952f9d948c0dc841eca8ca9a7b4a6b5908d03559fc5623 |
conformance/observation/vectors.json |
8353 | 3bd557c16b8713350fe8a7cca4bb005a21cdeb73023ecb4b33de10a23e9de813 |
conformance/fixtures/product-missing-optional.json |
156 | 91e1377381139371b19f557f0fabb999fb2bb91149227b5f05186c76c3460f46 |
var/cas/sha256/e1/94/e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a |
162 | e194e7dfd8bad2e92564e2a01527aad79af467feda26733d9d06ac2132ebd73a |
Regenerate with make demo at the repository root, then
cd web && go run . -evidence. Full evidence record on the
proof page; the report itself is
reports/gate-1-genesis.md.