A verified kernel and a small end-to-end release
E1 establishes the evidence spine. Later local gates add typed operations, Atlas admission, semantic packets, immutable views, queries and deltas. The released baseline snapshot is implemented, validated and served by the public read-only Query Lab. The larger E4 Opportunity candidate remains local. None of this authorizes arbitrary URLs, production write actions or a mutable semantic database on the current shared host.
What E1 proves Implemented
For the controlled source representation and the committed adversarial corpus, the implementation can bind retrieved bytes to a canonical observation, independently verify those bytes in Go and in C, and deterministically extract a source-native statement plus an explicit semantic interpretation and a complete derivation record — while offline.
It also proves rejection behaviour for the bounded classes represented by the public vectors, and it proves that the local demonstration does not need the origin to remain available after observation. Those two properties are what make the evidence claim meaningful: a result that can be recomputed from stored bytes after the source is gone is a result that can be audited.
Everything on this page is copied from reports/gate-1-genesis.md, the committed evidence report. Where this page and the report disagree, the report is authoritative. The same figures are published as project-status.json.
The path it proves
- Controlled originA local fixture server, not a production source. Loopback access is denied unless explicitly enabled.
- Policy-constrained observationHTTP GET under an explicit URL policy with bounded time, size, redirects, and ports.
- Content-addressed evidenceThe response body is stored under its SHA-256 digest and retrieved by that digest.
- Deterministic CBOR envelopeRetrieval metadata is bound to the evidence digest in a canonical encoding with a normative CDDL schema.
- Go verifier and independent C verifierTwo implementations validate the same envelope and body against the same committed vectors.
- Origin stoppedThe fixture server is shut down. Nothing after this point may contact the network.
- Deterministic offline extractionA manually admitted adapter reads the stored bytes. No shell, no network, no model.
- Native statement and semantic viewThe provider's own term and lexical value are retained beside the transformed value.
- Field-level provenanceEvery emitted field carries request URL, final URL, retrieval time, body and observation digests, adapter identity and digest, extraction method, locator, transform chain, and mapping relation.
Reproduce it
The acceptance sequence runs from a clean generated-artefact state and requires no public internet. Requirements are Go 1.23 or later (1.26 recommended), GCC with C2x support, Clang 17 or later for the sanitizer tests, plus Bash, Python 3, and curl.
git clone https://github.com/banga-agents/twirx-public.git
cd TWIRX
make clean && make build && make test && make demo
make test runs the normal Go tests, every configured Go fuzz target, the Clang
ASan/UBSan C corpus, 5,000 libFuzzer executions, the offline end-to-end test, and the
documentation navigation check. make demo observes the local fixture,
verifies it in Go and C, stops the origin, and completes extraction from evidence.
Inspect a single result by hand
bin/tw observe --url http://127.0.0.1:18080/product/sku-001 \
--out var/demo --cas var/cas --allow-loopback
bin/tw verify --observation var/demo/observation.cbor --cas var/cas
bin/tw-verify-c var/demo/observation.cbor var/cas
# This command does not contact the origin.
bin/tw extract --observation var/demo/observation.cbor --cas var/cas \
--adapter adapters/testorigin-product/adapter.json \
--out var/demo/result.json
The --allow-loopback flag weakens the public network policy for local
fixtures only. It must never become an option on a public service.
Evidence record
| Evidence date | 2026-08-11 |
|---|---|
| Status | Local acceptance passed. Hosted CI has not executed. |
| Baseline commit | 6df221bde6f2f7e0535df178104e8b1a93c11bb8 |
| Implementation commit tested | 1d17d5b541176fdb6b742caa48f0f55a14dfa206 |
| Evidence commit | 40210f3cf73004d454733d8b09048c2c5391b4d4 |
| Merge commit | ac4f9948ad21b319b11f9caeee9bd4e472c39780 |
| Report | reports/gate-1-genesis.md |
The report is committed after the implementation it describes, so its own commit identifier is intentionally not the tested implementation identifier.
Toolchain and host
| Component | Version |
|---|---|
| Host | Linux 7.1.3-arch1-1, x86_64 |
| Go | go1.26.5-X:nodwarf5 linux/amd64 |
| GCC | 16.1.1 20260625 |
| Clang | 22.1.8 |
| Python | 3.14.6 |
| Bash | 5.3.15(1)-release |
| Make | GNU Make 4.4.1 |
| ShellCheck | 0.11.0 |
| Git | 2.55.0 |
The repository has no go.sum, and this gate adds no third-party Go
runtime dependency. A repository scan for common private-key, GitHub token, AWS
access-key, and Slack token patterns returned no match outside generated directories and Git metadata.
Conformance totals
| Evidence | Passed | Failed | Notes |
|---|---|---|---|
| Named Go test events | 94 | 0 | 7 tested packages; two command packages have no test files |
| Observation vectors in Go | 16 | 0 | 2 accepted, 12 envelope rejects, 2 evidence rejects |
| Observation vectors in C | 16 | 0 | The same committed inputs and expectations as Go |
| Corrupted CAS checks | 2 | 0 | One Go check and one C check |
| Extraction vectors | 11 | 0 | 5 accepted, 6 rejected |
| Network-policy tests | 8 | 0 | Local fixtures only |
| Offline end-to-end test | 1 | 0 | Extraction succeeds after the origin stops |
| Documentation navigation | 1 | 0 | Configuration parsed and all navigation targets existed |
Static and hygiene checks
Race detector, go vet, gofmt, ShellCheck, Clang static
analysis, secret scan, and the stopped-origin demonstration all passed. The C
verifier was additionally built under both GCC and Clang with
-Wall -Wextra -Werror -Wconversion -Wshadow -Wpedantic.
Fuzzing and sanitizers
Four Go fuzz targets and one C libFuzzer target ran clean. The independent verifier
was compiled with -fsanitize=address,undefined -fno-omit-frame-pointer;
ASan and UBSan emitted 0 findings. The parser-only C harness
ran 5,000 mutations seeded by every shared observation
vector without a crash or sanitizer finding. That harness performs no filesystem or
network operation.
| Target | Executions |
|---|---|
| Observation parser | 138,620 |
| JSON Pointer | 55,183 |
| Manifest decoder | 83,640 |
| Bounded extraction | 72,160 |
How to read these numbers
The execution counts are host- and scheduling-dependent. The gate is the absence of a panic or a failing invariant, not a throughput claim. Short fuzz runs over a small corpus do not prove parser correctness; they only fail to disprove it. This is unresolved risk R5 below.
Coverage
| Package | Coverage |
|---|---|
internal/adapter | 71.3% |
internal/atomicfile | 56.8% |
internal/cas | 63.0% |
internal/cborlite | 61.3% |
internal/jsonbounded | 76.5% |
internal/observation | 56.1% |
internal/safefetch | 76.7% |
Command packages report 0% because they have no direct Go tests; their current path is exercised by the shell end-to-end test and the demonstration. Adding CLI error-path tests is unresolved risk R6.
Benchmark scope
BenchmarkResolveJSONPointer-16 271.7 ns/op 128 B/op 8 allocs/op
Recorded on AMD Ryzen 7 6800U, Linux/amd64, 16 logical workers.
What this figure is not
A narrow extraction primitive measured on one recorded host. It is not an end-to-end throughput figure and it is not evidence that TWIRX is faster than browser execution.
Hosted CI status Not proven
The public `genesis` job exists with runner_id 0 and no steps. A CI-only rerun produced the same account-level startup failure.
GitHub's exact annotation is: The job was not started because your account is locked due to a billing issue. Run: https://github.com/banga-agents/twirx-public/actions/runs/31507308068
Remaining cause: The GitHub account billing lock must be resolved by the account owner. The workflow registered correctly and no workflow correction is warranted.
Consequence
Complete local validation is the executed release evidence; hosted execution remains unavailable and is reported separately. Until a hosted runner executes the suite, no reader should treat E1 as independently reproduced. The evidence is real, it is reproducible from the commands above, and it has been produced on exactly one host by exactly one party. Independent reproduction is the next admission condition, not a formality.
What E1 does not prove
- That provider content, a semantic mapping, or a retrieval timestamp is objectively true.
- Publisher identity or authority.
- Arbitrary websites, HTML, JavaScript, browser execution, model output, writes, payments, registry operation, or multi-tenant service.
- Production DNS-rebinding resistance, egress isolation, or safe public arbitrary-URL deployment.
- Signatures, release provenance, external transparency, or protection against a host compromise that replaces code and evidence.
- The absence of parser defects. Finite tests and short fuzz runs cannot establish it.
Unresolved risks
Seven risks remain open against E1. They are published here in full and unedited because a risk register that only appears in a repository file is a risk register designed not to be read.
- URL and resolved-address checks are application-layer controls. Production deployment still needs separate worker and control networks, DNS and egress enforcement, metadata isolation, and quotas.
- Observation v1 records the request and final URL but not the redirect chain or selected transport headers. A later immutable transport-evidence artifact is needed without mutating v1.
- The adapter runtime has no independent second implementation. Its manifest and result formats remain pre-stable and unsigned.
- Atomic publication is per file, not a transaction spanning every file in an observation bundle. Destination directories and CAS roots are assumed to be trusted configuration, and filesystem durability semantics vary.
- The corpus is intentionally small and the fuzz durations in normal tests are smoke tests. Longer scheduled fuzzing and external review remain necessary.
- Direct command-package coverage is absent even though the shell workflow exercises their current happy path. CLI error-path tests should be added at the next maintenance gate.
- Local filesystem compromise can replace implementation and evidence together. Signed releases and external transparency are out of Gate 1.
R1 is expanded on the security page. R3 and R4 are admission conditions for later gates on the progress page.
E2 — Typed Provenance Lab Implemented
Implemented locally; immutable public Lab live
Local implementation acceptance passed. The typed read-only operation and bindings exist, and the HTTPS public Lab serves one admitted immutable snapshot through a loopback-only runtime. Fresh-origin execution remains constrained by explicit policy, route-bound work orders, and the production egress boundary.
E2 proves that one canonical operation definition can expose a real read-only resource to an agent through CLI, JSON Schema, OpenAPI, and MCP at once — including against a live external API, not only a fixture.
Catalog
| Origin | Kind | Operations |
|---|---|---|
| TWIRX project status | Publisher-authored | project.getStatus, project.getEngineeringGateReport, project.listUnresolvedRisks |
| Controlled fixture origin | Controlled fixture | fixture.getOffer |
| World Bank Indicators API | Live external official API | development.getIndicator |
Bindings generated from contracts/e2/contracts.json:
CLI reference, JSON Schema, OpenAPI 3.1, MCP tool definitions.
ADR 003 — resolving the digest cycle
The original work order asked for a canonical result that binds both its own digest and the digest of a manifest that hashes that result — a cryptographic cycle.
content artifacts → result-core bytes → result digest → final manifest → bundle ID → API publication record
The result-core contains no self-digest. The bundle ID is the SHA-256 of the exact canonical manifest bytes. CLI, API, MCP, and UI wrappers expose both detached identifiers. Shared vectors explicitly reject missing, cyclic, substituted, malformed, symlinked, and trailing-byte manifests.
Conformance
| Evidence | Value | Scope |
|---|---|---|
| Named Go test passes | 154 0 failed | Full E1+E2 suite, one recorded host |
| Go fuzz targets | 7 passed | 3 new E2 targets plus the 4 carried from E1 |
| C libFuzzer executions | 10,000 5,000 + 5,000, two harnesses, 0 crashes | E1 observation harness plus a second E2 harness |
| Shared E2 bundle/artifact cases | 13 accept valid; reject corrupt, missing-manifest, symlinked, trailing-byte | Go and restricted C, same committed vectors |
| Concurrent identical publications | 16 passed under the race detector | One host |
| Catalog entries | 3 including one live external official API | TWIRX itself, a fixture, World Bank Indicators |
Sample results
| Origin | Operation | Fields | Result digest |
|---|---|---|---|
| twirx-project | project.getStatus | 4 | sha256:5b072d53786500d8ba16fb354d66f91f3444a2e19d0d83d6ec73c3b81dc6e495 |
| world-bank-indicators | development.getIndicator | 4 | sha256:7dd49166746e839f8a604b9757e87537dfda077ba3f31a9a42618089dec8d7e5 |
Controlled browser comparison
One controlled 156-byte local fixture only. Explicitly not a generalized or universal claim.
Chromium 150.0.7871.114, fresh profile, background features disabled, every non-loopback host mapped to NOTFOUND, compared against the promoted offline typed adapter for the same fixture.
| Measure | Controlled browser | Promoted typed adapter | Ratio |
|---|---|---|---|
| Wall time | 2.586759 s | 0.062731 s | ~41.2× |
| Peak child resident memory | 240,764 KiB | 22,908 KiB | ~10.5× |
| Agent-input representation | 320 bytes of dumped DOM | 191 bytes of compact typed values | ~1.7× |
| Network requests | 1 allowed loopback plus blocked background attempts | 0 | — |
| Evidence-bearing fields | 0 | 5 | — |
Chromium still attempted built-in requests to three Google hosts even in this fixture-only run; the resolver rule blocked them. The full typed result including proof references is 3,674 bytes — larger than the dumped source, because it intentionally carries native and semantic views, transformations, mappings, and digest bindings. The 191-byte figure is the compact value view an agent would actually consume.
Load
Nominal: 20 requests at concurrency 8, 20 succeeded, 0 rate-limited, average 0.025419s, p95 0.059545s. Overload: a configured burst of 20 admitted exactly 20 successes and rejected 30 requests with HTTP 429. Host: AMD Ryzen 7 6800U, loopback, same host as client, no network origin latency.
Security
Rejects non-public addresses; constrains the initial URL and every redirect to the reviewed catalog hostname; bounds response bytes, redirects, and a strict representation-header allowlist.
Excluded from the trusted request path: Cookies, authorization headers, arbitrary headers, credentialed browser requests, browser execution, model calls, shell execution, plugins, cgo, and Go's unsafe package.
Gitleaks 8.30.1: zero items in 21 reachable commits and the full working tree. TruffleHog 3.96.0: zero verified items, one unverified heuristic hit — the intentional embedded-credential rejection fixture in internal/safefetch/safefetch_test.go.
The proposed Lab Caddy config was piped over SSH to the VPS's installed Caddy binary and validated without activating it. No Lab file, service unit, Caddy site, DNS record, or firewall rule was activated by this validation.
E2 unresolved risks
- The public Lab serves immutable snapshot state only. It cannot refresh origins or exercise the fresh-origin egress path.
- Application URL and DNS controls are not network isolation. A separate least-privilege worker/egress boundary, private-range and metadata blocking, network-layer redirect tests, quotas, monitoring, and incident/revocation procedures are still needed before public fresh-origin execution.
- In-memory rate limits reset on restart and are not distributed. There is no cache, origin-health probe, or circuit breaker; health is honestly reported as not_probed.
- An external provider can change content, schema, policy, or availability at any time. The committed replay fixture is evidence of one representation, not a claim of provider permanence.
- Restricted C validates canonical structure and digest relationships but does not independently execute JSON extraction and semantic transformation. A second adapter implementation remains future work.
- A sufficiently privileged local filesystem attacker can replace implementation and evidence together. Regular-file checks and rehashing narrow substitution but do not defeat host compromise.
- The E2 corpus covers publisher JSON, a controlled fixture, and one official JSON API. JSON-LD, Atom/RSS/XML, structured HTML, and real multi-origin coverage remain E3 work.
- Performance and load evidence comes from one local host and small fixtures, and excludes public TLS, VPS contention, distributed load, and general origin latency.
- Hosted GitHub CI still has no executed runner evidence.
- The fresh public repository excludes legacy private PR history and raw third-party archive bodies; reviewers cannot rebuild the two private-evidence integration cases without reacquisition or separately authorized evidence access.
Full report: reports/gate-e2-live-provenance-lab.md. Machine-readable: e2-lab.json.
E3 — Semantic Snapshot Implemented
E3 now connects the Atlas and admission boundary to a sealed archive acquisition, proof-linked semantic packets, immutable materialized views, typed queries and a real historical origin delta. It is a small local release, not a 500-origin live service.
- Selected Atlas identities
- 500selection only
- Completed policy decisions
- 3human-reviewed
- Public packets
- 153 origins
- Materialized views
- 2immutable snapshot
- Origin deltas
- 1historical archive evidence
- Runtime origin calls
- 0snapshot query path
Immutable release identity
sha256:54739822257ef617b136454285a8fd47802f0960c7cf53a49abd2d5d1f1389c5
The snapshot contains 20 packets in total: 15 from public-origin evidence and 5 controlled fixtures. The separate 25,018-packet capacity run is fixture-dominated and is never presented as a real public corpus.
Real two-period archive delta
Two sealed RFC Editor records preserve distinct source-native title values and emit
one origin delta. No semantic or canon delta is emitted because neither the
mapping nor canon changed. Inspect the complete trace.
Complete validation
Revision 2c85b56322d381409ca11001eacec8a8111d251d passed the offline suite,
race detector, vet, 22 Go fuzz targets, shared Go/C
conformance, ASan/UBSan and 3 independent C fuzz
campaigns of 5,000 runs each.
Residual release limitations
- The public Query Lab is an immutable snapshot edge, not a continuously refreshed origin service.
- The sanitized source repository is public; retained raw archive bodies remain private by policy.
- An encrypted Storage Box restore passes; a second versioned Object Storage release remains to be completed.
- Raw archive evidence contains third-party page material; public redistribution requires an explicit treatment.
- The protected deployed corpus is intentionally small. The larger Opportunity candidate demonstrates depth from one source family, not broad multi-source semantic coverage.
Reports: real archive evidence and FUTO readiness. Machine-readable: futo-release.json.
E4 — Opportunity Utility release candidate Implemented
The founder-approved one-shot Grants.gov observation now compiles into a large, privacy-safe, proof-linked Opportunity Universe. This gate demonstrates real source-derived semantic scale and useful typed retrieval; it remains a local release candidate until target-host resource and deployment admission.
- Records accepted
- 83,087of 83,133
- Packets
- 1,037,679real source-derived
- Candidate mappings
- 747,783not canon
- Opportunity frames
- 83,087proof-linked
- Combined frames
- 83,122two universes
- Runtime origin calls
- 0immutable query path
Authority and retrieval scope
The policy decision was reviewed at 2026-08-12T04:33:44Z and binds
one exact bulk source, one manual execution and the proposal’s approved fields and
limits. The acquisition used 75 bounded range
requests for 77,910,428 bytes. The scheduler remained
disabled. No additional route, file, retention class or execution was authorized.
Privacy boundary
The private projection excluded 247,382 contact
fields and 83,130 descriptions. Because
allowed eligibility prose contained contact-like material,
59,189 fields became proof-linked
withheld states and the public release contains
0 eligibility lexical values.
Raw acquisition bytes and the private projection are not public.
Verification scope
- Every packet, mapping claim, frame, artifact digest, privacy invariant and frame-to-packet reference in the release candidate.
- Complete Go release verification: 26.405 seconds on the recorded host.
- Independent restricted-C verification: 132 deterministic artifacts — 63 packets, 63 mappings and 6 frames.
- No full-C-corpus claim is made; the C evidence is explicitly a deterministic sample while Go verifies the complete release.
Typed query evidence
The recorded NSF query returned 20 proof-linked frames from 83,122 available frames with zero network, browser, live-source or model-authority calls. Across 1,000 warm local executions, p95 query-plus-trace-and-decode time was 3.107 ms. One local host, immutable 273165514-byte combined segment, warm in-process exact typed query plus trace and decode of 20 results; excludes process startup, public-network latency and origin retrieval.
Manifest identity: sha256:cbaaa1cd2b41f698f7b423a516727f5a7907bba56ac6c17136528f40f45d7690.
Machine-readable status: e4-utility-release.json.
Independent sample: sample manifest.