ExecutionManifest
Pydantic model representing the full sealed manifest. The Go API serializes these fields in PascalCase; the SDK exposes them in snake_case via Pydantic field aliases — both naming styles work.
Import
from verdifax import ExecutionManifest
Fields
| Field | Type | Stage | Notes |
|---|---|---|---|
envelope_id | str | 1 (DOG) | |
envelope_hash | str | 1 (DOG) | 64-char hex |
sequence_id | str | 2 (DTL) | |
transport_hash | str | 2 (DTL) | 64-char hex |
epa_hash | str | 3 (DKEC) | 64-char hex |
efa_hash | str | 3 (DKEC) | 64-char hex |
execution_ids | List[str] | 3 (DKEC) | Six entries — DSE, TOK, DSC, NREP, AIVP, DCAE |
aer_hash | str | 4 (AER) | 64-char hex |
transcript_hash | str | 5 (ZKSP L7) | 64-char hex |
hardware_attestation_hash | str | 5 (ZKSP L8) | 64-char hex; TPM2 / SEV-SNP measurement |
leakage_bundle_hash | str | 5 (ZKSP L9) | 64-char hex |
formal_verifier_status | str | 5 (ZKSP L10) | Must equal VERIFIED_SOUND_COMPLETE_ZK |
zksp_binding_hash | str | 6 (Phase 4) | 64-char hex |
migration_token_hash | str | 6 (Phase 4) | 64-char hex |
replay_fingerprint | str | 6 (Phase 4) | 64-char hex |
pote_proof_hash | str | 7 (Ledger) | 64-char hex |
log_entry_id | str | 7 (Ledger) | Rekor-style id |
registry_artifact_count | int | 8 (Registry) | Should be 18 |
final_vfa_hash | str | 9 (DLA) | 64-char hex |
independent_verified | bool | 9 (DLA) | Must be True for a sealed manifest |
manifest_hash | str | (seal) | The headline 64-char hex |
Methods
manifest.kernel_executions() -> dict[str, str]
# → {"DSE": "...", "TOK": "...", "DSC": "...", "NREP": "...", "AIVP": "...", "DCAE": "..."}
manifest.stages() -> list[StageResult]
# → 9-element list, one per pipeline stage
list(manifest) # iter — same as .stages()
Validation
Constructing an ExecutionManifest via ExecutionManifest.model_validate(...) enforces:
execution_idshas exactly 6 entriesregistry_artifact_countis non-negative- All required fields are present
Invalid responses raise Pydantic's ValidationError.
