Skip to content

Verification Bundle

Stability: contract-backed reference

Authority: The normative bundle contract lives in spec/jacqos/v1/verification-bundle.schema.json. This page summarizes the exported artifact and highlights the fields you will inspect most often.

A verification bundle is the JSON proof artifact produced by jacqos verify. It captures the evidence you use to inspect a verification run: check results, per-fixture world digests, provenance graphs, counterexamples, and redaction audit results.

Bundles are written to generated/verification/<app_id>.json.

The schema authority owns validation, required fields, and allowed shapes. The excerpt below shows the current top-level structure:

{
"version": "jacqos_verify_v1",
"app_id": "string",
"evaluator_digest": "string",
"prompt_bundle_digest": "string | null",
"llm_complete_active": false,
"generated_at": "string?",
"status": "passed | failed | skipped",
"composition_analysis_path": "string?",
"composition_analysis": { "CompositionAnalysisArtifact" }?,
"summary": { "VerifySummary" },
"checks": [ "VerificationCheck[]" ],
"redaction_findings": [ "RedactionFinding[]" ],
"fixtures": [ "FixtureVerificationArtifact[]" ]
}
FieldTypeDescription
versionstringBundle format version. Currently jacqos_verify_v1
app_idstringApplication identifier from jacqos.toml
evaluator_digeststringhash(ontology IR, mapper semantics, helper digests) — the semantic identity
prompt_bundle_digeststring?Hash of prompt files. Present only if the app uses prompts
llm_complete_activeboolWhether the llm.complete capability is declared in jacqos.toml
generated_atstring?Optional timestamp. Checked-in bundles normally omit it after normalization
statusstringOverall bundle result: passed, failed, or skipped
composition_analysis_pathstring?Relative path to the companion composition-analysis report when the composition check passed
composition_analysisobject?Embedded composition-analysis artifact when the composition check passed
summaryobjectAggregate fixture counts, world digests, and rule-shape summary
checksarrayThe verification gate results with machine-readable names and status
redaction_findingsarrayPotential secret exposures found in verification artifacts
fixturesarrayPer-fixture verification evidence including replay, golden, determinism, and provenance details

Verification bundles deliberately omit volatile timestamps and runtime durations so checked-in artifacts stay diff-stable across repeated runs. Use the benchmark report when you need timing data.

The summary object contains aggregate counts across all fixtures:

FieldTypeDescription
passedboolOverall pass/fail
fixture_countnumberTotal fixtures verified
failed_fixture_countnumberFixtures that failed one or more checks
evaluator_digeststringSame as top-level
prompt_bundle_digeststring?Same as top-level
llm_complete_activeboolSame as top-level
observation_countnumberTotal observations replayed across all fixtures
atom_countnumberTotal atoms extracted
fact_countnumberTotal facts derived
intent_countnumberTotal intents derived
contradiction_countnumberTotal contradictions detected
invariant_violation_countnumberTotal invariant violations
shadow_conforming_fixture_countnumberFixture replays that matched the shadow reference evaluator
rule_shape_summaryobjectGuarded/frontier-guarded/acyclic/star-join-friendly/unconstrained rule counts
bundle_pathstringRelative path to the bundle file
fixturesarrayPer-fixture summary (fixture path, pass/fail, counts, digests)

The checks array contains one entry per verification check. Each check has:

FieldTypeDescription
namestringCheck identifier
statusstringpassed, failed, or skipped
detailstringHuman-readable summary of the check result
NameWhat it verifies
fixture_replayAll fixtures replayed without errors
golden_fixturesDerived state matches fixture expectations
invariantsAll invariants held after every fixed point
candidate_authority_lintsAcceptance-gated candidate evidence stayed behind an explicit acceptance relation
provenance_bundleProvenance graph was exported for each fixture
replay_determinismClean-database replay produced identical world digests
generated_scenariosProperty-tested scenarios found no invariant violations
shadow_reference_evaluatorShadow evaluator produced identical derived state
secret_redactionNo secret material found in verification artifacts
compositionMulti-agent namespace composition passed, failed, or was skipped

When a multi-agent app passes the composition gate, the bundle embeds the same portable artifact that jacqos export composition-analysis writes under generated/verification/.

That artifact captures:

  • namespace reduct partitions and namespace inventories
  • cross-namespace dependencies and namespace cycles
  • monotonic versus non-monotonic strata summaries
  • invariant-fixture coverage over the checked-in fixture corpus
  • policy lifecycle coverage when the app declares policy.* relations: missing lifecycle surfaces, policy-to-rule edges, and policy-dependent intent.* relations
  • human-review coverage when the app reads review.* evidence or declares review-like relations: missing review surfaces, review-to-rule edges, and review-dependent intent.* relations
  • evidence-obligation coverage for intent rules: explicit unknown, missing, fresh, stale, required-evidence surfaces, and warnings for default-allow negation

A visual composition health panel and graph-side namespace views ship with the V1.1 Studio rule-graph surface; in V1, the artifact is the canonical inspection surface, and the CLI report and the file you check into generated/verification/ are the same contract.

policy_lifecycle_coverage is a reporting surface, not a hidden policy engine. It lets you inspect whether policy-backed decisions have source document, effective-window, jurisdiction, approver, exception, supersession, and rule-coverage evidence in the ontology. The actual allow/block decision still comes from ordinary facts, invariants, and proposal ratification rules.

human_review_coverage is the same kind of diagnostic surface for human approval. It inventories review evidence predicates, review-like relations, rules that read review evidence, and intents downstream of accepted reviews. It does not make reviews an override; your ontology still has to derive the accepted review, quorum, expiry, delegation, break-glass, and revocation facts.

evidence_obligation_coverage catches the closed-world footgun: an intent rule that says “act if nothing blocks me” without also requiring positive evidence. The report inventories explicit required, unknown, missing, fresh, and stale surfaces, then names negated intent rules that do or do not have positive authorization, review, policy, freshness, or evidence gates.

If the composition check fails or is skipped, the bundle still records the checks entry, but it does not embed the report. Export or recompute the standalone composition-analysis artifact when you need the full failure details, or when you want to inspect a single-agent app’s namespace structure independently of jacqos verify.

Each entry in the fixtures array contains the complete verification evidence for one fixture:

FieldTypeDescription
fixturestringRelative path to the fixture file
statusstringpassed or failed
observation_digeststringHash of the observation sequence
world_digeststringHash of the derived world state

The replay object contains counts from the replay:

FieldTypeDescription
observation_countnumberObservations in this fixture
atom_countnumberAtoms extracted
fact_countnumberFacts derived
intent_countnumberIntents derived
contradiction_countnumberContradictions detected
invariant_violation_countnumberInvariant violations during replay

The golden object compares derived state against expectations:

FieldTypeDescription
statusstringpassed or failed
expectation_pathstring?Path to the expectation file (null if no expectations defined)
diffobjectMissing and unexpected facts, intents, contradictions, and invariant violations

When an expected fact or intent is missing, diff also includes why-not entries:

FieldTypeDescription
why_not_missing_factsarrayCandidate rules for each missing fact, with the body clause that blocked derivation
why_not_missing_intentsarrayCandidate rules for each missing intent, with the missing relation, blocked negation, unsupported helper, or comparison that prevented it

Each why-not rule report names the rule id, source span, status, satisfied clause count, and per-clause evidence. This is the bundle-level surface for “why didn’t this happen?” debugging: unratified proposals, missing reviews, stale-evidence facts, and blocking negations show up as explicit body-clause outcomes rather than as an unexplained absent tuple.

The determinism object verifies replay reproducibility:

FieldTypeDescription
statusstringpassed or failed

A failed determinism check means the evaluator produced different world digests across two identical replays — indicating non-deterministic behavior in the mapper, helper, or evaluator.

The shadow object compares the product evaluator against the shadow reference:

FieldTypeDescription
statusstringpassed or failed
world_digeststringProduct evaluator’s world digest
shadow_world_digeststringShadow evaluator’s world digest
product_revision_digeststringProduct evaluator revision
shadow_revision_digeststringShadow evaluator revision
detailstringDescription of any differences

The generated_scenarios object summarizes property testing:

FieldTypeDescription
statusstringpassed or failed
scenario_countnumberTotal generated observation sequences tested
failuresarrayInvariant violations found by generated scenarios

The invariant_failures array contains detailed reports for each invariant violation:

FieldTypeDescription
invariant_namestringName of the violated invariant
observation_indexnumberWhich observation triggered the violation
counterexampleobjectThe concrete values that violated the constraint

The provenance_graph object contains the full derivation graph for the fixture — every edge from observations to atoms to facts to intents. This is the same data Studio surfaces in the drill inspector and timeline. Visual graph rendering ships in V1.1.

The redaction_findings array lists any secret material detected in verification artifacts. Each finding identifies the location and type of the potential exposure.

An empty array means the redaction audit passed — no obvious secret material was found in exported fixtures, counterexamples, or the bundle itself.

The redaction audit is an export-boundary check, not a legal-retention system. For the broader privacy model behind encrypted BlobRefs, legal hold, tombstoned access, and digest-preserving redacted projections, see the V1 privacy and retention contract in spec/jacqos/v1/privacy-retention.md.

CodeMeaning
0All checks passed
2Verification failures
1Other error

Two bundles with the same evaluator_digest and matching per-fixture world_digest values prove that two evaluator versions are semantically identical. Different world digests pinpoint which fixtures diverge.

Store bundles as CI artifacts or commit them to generated/verification/. They serve as the audit trail: “this evaluator, with these fixtures, produced these facts, and all invariants held.”