Scaffold gaps
Verdifax is honest about what it cannot yet do. The audit bundle carries
two open scaffold flags today, one per artifact that returns a
placeholder rather than a real cryptographic value, plus two categories
that have graduated (hardware attestation and proof of temporal
execution, both now real on production runs; see "Closed gaps" below).
Each flag rolls up one or more named declarations the system emits about
itself; every declaration is named explicitly in the code, surfaced in
every audit bundle, and tracked in the project roadmap with a documented
closing path. Running verdifax-verify --show-evidence-summary against
any bundle prints the same category names you see below.
We publish this page because we believe an attestation system that hides its limitations is worth less than one that names them publicly. A buyer or auditor reading a Verdifax audit bundle should know exactly what is real evidence, what is scaffold-grade, and what activates each scaffold value.
What a scaffold gap is
A scaffold value is a placeholder that a step of Verdifax emits when the underlying real implementation is not yet wired. Two examples:
- The zero-knowledge step emits a deterministic transitional hash facade in place of a real STARK proof. The hash is byte-stable and replayable; what it isn't is a zero-knowledge proof a third party can check without trusting the orchestrator.
- Before 2026-07-17, the hardware attestation step emitted a policy-scaffold record declaring the platform was not running on attested silicon. That category has since graduated: production runs sealed with the SEV-SNP attestation service now carry a real, run-bound AMD hardware quote (see "Closed gaps" below).
Scaffold values are the difference between "we're building something we don't yet have" and "we're hiding what we don't yet have." Verdifax does the first.
How to recognize scaffold values in your bundle
Every artifact in the audit bundle that involves a scaffold value carries
a scaffold field with three keys:
"scaffold": {
"is_scaffold": true,
"activated_by": "phase 7 (live cloud, TPM2 / SEV-SNP)",
"note": "Real attested hardware lands when..."
}
The independent verdifax-verify CLI flags these in its report (the
[scaffold] tag next to each affected artifact) and supports a --strict
mode that fails verification when any scaffold flag is set. High-trust
environments should always use --strict, a passing strict-mode
verification means every value in the bundle is rooted in real
cryptography.
The two open scaffold categories
The categories below are the artifact paths the verifier reports in its evidence summary. Each category contains one or more named declarations the orchestrator emits about itself; expand a category to see them.
1. ZK transcript, transcript.scaffold
Why it's scaffold today. The prover decision is made (a transparent, post-quantum-safe STARK system) and the circuit interface trait is committed, but the adapter that lifts our internal R1CS into the prover's trace format is not yet implemented.
What activates the real value. A cryptographer writes the AIR adapter, wires the prover, and validates determinism across three Rust toolchains. After this lands, the production build path produces real STARK proof bytes that any party with the verifier library can check, with no trust in Verdifax required. The detailed engineering plan, including the chosen library (winterfell), the committed integration trait, the proof-system parameters, and the five acceptance gates that must pass before the scaffold flag flips, is documented at /concepts/zk-roadmap/.
This category rolls up one named declaration:
REAL_ZK_VERIFIER_NOT_IMPLEMENTED, the zero-knowledge step'sproof_material_hashis the canonical SHA-256 of the run's evaluation transcript, not a real STARK / PLONK / Groth16 proof. The hash is byte-stable and replayable but a third-party verifier can only check it by re-running the orchestrator, not by independently checking the proof bytes.
2. ZK-state-prover binding, zksp_binding.scaffold
What is real today. The Lean 4 development tree is no longer empty.
It carries a kernel-checked proof development (canonical-encoding
determinism and injectivity, hash-layer lifting under an explicit
collision-freedom assumption, policy-gate soundness, budget-halt token
preservation, the manifest-binding theorem, the pipeline-determinism
theorem over the model, and R1CS satisfiability lemmas), built by CI on
every commit with an axiom audit that rejects unproven placeholders and
ad-hoc axioms. Every new audit bundle carries a formal_verification
record binding the run to that development: repository, pinned commit,
toolchain, theorem list, and audited axiom footprint. The record is
tamper-evident (its hash recomputes from its contents) and run-bound
(it embeds the bundle's manifest hash); verdifax-verify checks both
and reports the binding under --show-evidence-summary. The record's
scope statement says plainly that the theorems are about a Lean model
of the pipeline; byte-format fidelity of the model to the production
Go implementation is roadmap work, disclosed as such.
Why the flag is still scaffold. Two things remain transitional.
First, the manifest's formal_verifier_status success token is still
emitted deterministically by the MockZkspAdapter at runtime, not
derived by invoking the Lean development; the Rust adapter's
frozen-theorem-signature check has not been wired to the populated
tree. Second, the ZK proof bytes themselves are the transitional R1CS
hash facade, not a real STARK proof (see category 2). The flag clears
when the adapter's success token is gated on the pinned Lean artifact
and the winterfell prover replaces the facade.
This category rolls up one named declaration:
PENDING_FORMAL_VERIFICATION, theformal_verifier_statusfield in the manifest carries a deterministic placeholder emitted by theMockZkspAdaptertoday, not a verdict computed by invoking the Lean development at runtime. The theorems themselves now exist and are bound into every bundle via theformal_verificationrecord; determinism is established both empirically (same inputs, same hash, checked in CI) and mathematically at the model level (pipeline_determinism,manifest_binding). What remains scaffold is the runtime linkage. The artifact viewer atverdifax.com/app/artifact/?id=Nrenders the Formal Verifier Status row with a SCAFFOLD badge, andverdifax-verify --strictfails on the same flag, until that linkage is real.
Why we publish this page
Honesty is durable. A claim that is fully verifiable beats a claim that depends on a buyer's trust. When a buyer asks "is your hardware attestation real?", the right answer is not "yes" or "trust us." The right answer is "here is the audit bundle, here is the verified quote you can re-check offline, here are the named scaffolds that remain, here is the closing path for each, here is the strict-mode verifier output." Auditors and regulators respect that answer in a way they do not respect marketing claims.
Closure path matters as much as the gap. Each gap above names the engineering phase that closes it, the documents that specify it, and the type of specialist required. That is structurally different from "we're working on it", it is a documented production roadmap that can itself be audited.
The system enforces its own honesty. The is_scaffold: true flag is
emitted by the orchestrator code, not by marketing. The independent
verifier surfaces it. The PDF audit report displays it. The
declarations above are exactly what an auditor sees in the JSON; they
are not aspirational language, they are what the system says about
itself today.
Reading scaffold flags in your bundle
When you receive a Verdifax audit bundle (via the artifacts endpoint or as a JSON download), look at these specific paths:
transcript.scaffold.is_scaffold
hardware_attestation.scaffold.is_scaffold
zksp_binding.scaffold.is_scaffold
pote_proof.scaffold.is_scaffold
Any value of true corresponds to one of the gaps above (with
activated_by and note fields giving you the precise context). Two
of the four are per-run graduated categories, see "Closed gaps" below:
pote_proof reads false on every production run anchored to
Sigstore Rekor, and hardware_attestation reads false on every run
sealed with a verified SEV-SNP quote (check
hardware_attestation.attestation_mode = "sev_snp" and re-verify the
embedded quote yourself). When all four read false, every scaffold
gap has closed for that run and the bundle is fully cryptographically
rooted.
For programmatic enforcement in CI:
verdifax-verify --strict --show-evidence-summary bundle.json
This exits non-zero if any scaffold flag is set, regardless of whether
the rest of the bundle's hashes verify correctly. The
--show-evidence-summary flag prints the maturity report and an
explanatory verdict line, so a CI failure carries the reason inline.
Use this combined form as the gate in high-trust environments.
Closed gaps
hardware_attestation.scaffold, graduated 2026-07-17
Hardware attestation is real on its first platform: AMD SEV-SNP.
Runs sealed with the confidential-compute attestation service carry a
genuine SEV-SNP attestation report with
hardware_attestation.attestation_mode = "sev_snp" and the scaffold
flag cleared. Before sealing, the orchestrator verifies three things
and refuses the upgrade unless all pass:
- Certificate chain to the silicon vendor. The report's VLEK endorsement certificate must chain to AMD's Milan root of trust, which is pinned by SHA-256 fingerprint inside the orchestrator binary. A chain terminating anywhere else is rejected.
- Report signature. The report's ECDSA P-384 signature over its full body is verified against the endorsement key from raw bytes.
- Run binding. The report's guest-controlled 64-byte
report_datafield must equalsha512("verdifax.sevsnp.report_data.v1:" + envelope_hash + ":" + aer_hash)for this specific run, so a quote can never be replayed against a different audit record.
The full report, endorsement certificate, and AMD chain are embedded
in the bundle (quote_b64, vlek_cert_pem, cert_chain_pem), so any
third party can re-run all three checks offline, forever, without
trusting Verdifax. The audit PDF renders a dedicated "Hardware
Attestation (AMD SEV-SNP)" section with the launch measurement, TCB
values, pinned root fingerprint, and binding recipe.
Honest scope, stated in the artifact itself: this is an
attestation-service pattern. It proves genuine AMD SEV-SNP hardware
produced a report bound to this run's identity; it does not prove the
orchestrator workload executed inside that enclave. That stronger
property, along with additional platforms (TPM 2.0, Nitro Enclaves),
is disclosed roadmap work carried in the artifact's remaining
declarations (ORCHESTRATOR_WORKLOAD_NOT_IN_ENCLAVE,
ADDITIONAL_PLATFORMS_ON_ROADMAP).
Per-run honesty, like PoTE below: runs sealed without the
attestation service (for example, when the confidential-compute
instance is offline) still emit the policy-scaffold record with
is_scaffold: true and the original three declarations
(REAL_TEE_QUOTE_NOT_BOUND, PLATFORM_CERTIFICATE_CHAIN_NOT_VERIFIED,
HARDWARE_BOUND_MODE_NOT_ENABLED_CURRENT_HORIZON). The flag reports
what each individual run actually carried; a failed or absent quote can
never masquerade as a verified one.
pote_proof.scaffold, closed 2026-05-28
The PoteProof artifact carried a scaffold flag in early builds because the orchestrator's transparency-log integration was not yet live. As of 2026-05-28 the Sigstore Rekor adapter has been running in production for some time, and the scaffold-flag rendering logic was reviewed against what the orchestrator actually emits. The conclusion: the activation condition ("future ledger integration with Sigstore/Rekor") had silently already been met. Every production run sealed against the real public log carries a Rekor log index, a signed checkpoint, a Rekor-attested integrated time, and a Merkle inclusion proof, i.e., the textbook material a transparency-log proof of temporal execution is made of.
The builder now clears pote_proof.scaffold.is_scaffold to false
automatically when ledger_backend = "rekor" with a non-empty log
entry id, and surfaces the temporal evidence (ledger_log_id,
integrated_time, signed_entry_timestamp, ledger_checkpoint)
directly on the PoteProof for reviewer visibility. Runs sealed in
mock-ledger mode (dev/test deployments) still carry the scaffold flag
with an updated note that's accurate for those runs.
Engineering record: Task #214 in the project tracker.
When this page changes
Each time a scaffold gap closes, i.e., the orchestrator code is updated to
emit is_scaffold: false for an artifact that used to scaffold, a
new entry will be added to Closed gaps above with the date,
release version, and a link to the engineering record that activated it.
Until that happens for any given gap, you should assume the gap is open and the bundle's strict-mode verification will fail.
