-
+
{model?.claim?.text != null && (
{model.claim.text}
diff --git a/portal/lib/pcsData.ts b/portal/lib/pcsData.ts
index 2fc4e42..43d947d 100644
--- a/portal/lib/pcsData.ts
+++ b/portal/lib/pcsData.ts
@@ -13,7 +13,9 @@ async function readPcsExport(): Promise {
return JSON.parse(raw) as PcsPortalExport;
}
-async function readClaimFromCorpus(claimId: string): Promise {
+async function readClaimFromCorpus(
+ claimId: string,
+): Promise {
const p = path.join(CORPUS_PCS, claimId, "read_model.json");
const raw = await fs.readFile(p, "utf8").catch(() => null);
if (!raw) return null;
@@ -25,7 +27,9 @@ export async function getAllPcsClaimIds(): Promise {
if (exported?.claim_ids?.length) {
return exported.claim_ids;
}
- const entries = await fs.readdir(CORPUS_PCS, { withFileTypes: true }).catch(() => []);
+ const entries = await fs
+ .readdir(CORPUS_PCS, { withFileTypes: true })
+ .catch(() => []);
return entries.filter((e) => e.isDirectory()).map((e) => e.name);
}
diff --git a/portal/scripts/verify-pcs-phase2-read-model.mjs b/portal/scripts/verify-pcs-phase2-read-model.mjs
index 6c19009..ef86ce9 100644
--- a/portal/scripts/verify-pcs-phase2-read-model.mjs
+++ b/portal/scripts/verify-pcs-phase2-read-model.mjs
@@ -19,7 +19,13 @@ const registryEntry = z.object({
source_commit: z.string().min(40),
hash: z.string().startsWith("sha256:"),
semantic_checks_performed: z.array(z.string()),
- admission_status: z.enum(["passed", "warning", "failed", "deferred", "not_applicable"]),
+ admission_status: z.enum([
+ "passed",
+ "warning",
+ "failed",
+ "deferred",
+ "not_applicable",
+ ]),
registry_admission_result: z.string().min(1),
});
@@ -101,7 +107,9 @@ const phase2Schema = z
release_chain_validation: z.object({
validation_id: z.string().min(1),
status: z.literal("ProofChecked"),
- checks: z.array(z.object({ check_id: z.string(), status: z.string() })).min(1),
+ checks: z
+ .array(z.object({ check_id: z.string(), status: z.string() }))
+ .min(1),
}),
artifact_registry: z.array(registryEntry).min(1),
handoff_manifests: z.array(handoffEntry).optional(),
@@ -128,13 +136,25 @@ const phase2Schema = z
claim_id: z.string().min(1),
certificate_id: z.string().min(1),
signed_bundle_hash: z.string().startsWith("sha256:"),
- claim_state: z.enum(["current", "stale", "superseded", "withdrawn", "revalidated"]),
+ claim_state: z.enum([
+ "current",
+ "stale",
+ "superseded",
+ "withdrawn",
+ "revalidated",
+ ]),
recommended_action: z.string().min(1),
}),
staleness: z.object({
stale: z.boolean(),
stale_reasons: z.array(z.string()),
- claim_state: z.enum(["current", "stale", "superseded", "withdrawn", "revalidated"]),
+ claim_state: z.enum([
+ "current",
+ "stale",
+ "superseded",
+ "withdrawn",
+ "revalidated",
+ ]),
repair_hint: z.string(),
recommended_action: z.string().min(1),
}),
@@ -206,7 +226,8 @@ const phase2Schema = z
if (!certs.includes("ComputationWitness.v0")) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
- message: "certificate_artifact_types must include ComputationWitness.v0",
+ message:
+ "certificate_artifact_types must include ComputationWitness.v0",
path: ["certificate_artifact_types"],
});
}
@@ -214,14 +235,16 @@ const phase2Schema = z
if (!notice.includes("computational provenance")) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
- message: "limitation_notice must include computation reproducibility disclaimer",
+ message:
+ "limitation_notice must include computation reproducibility disclaimer",
path: ["limitation_notice"],
});
}
} else if (!(data.handoff_manifests?.length ?? 0)) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
- message: "handoff_manifests required for release workflows with producer handoffs",
+ message:
+ "handoff_manifests required for release workflows with producer handoffs",
path: ["handoff_manifests"],
});
}
@@ -239,12 +262,15 @@ const phase2Schema = z
if (kernel.overall_status !== "ProofChecked") {
ctx.addIssue({
code: z.ZodIssueCode.custom,
- message: "formal_trust_kernel.overall_status must be ProofChecked for passed releases",
+ message:
+ "formal_trust_kernel.overall_status must be ProofChecked for passed releases",
path: ["formal_trust_kernel", "overall_status"],
});
}
for (const snippet of REQUIRED_FORMAL_NON_CLAIM_SNIPPETS) {
- const found = (kernel.formal_non_claims ?? []).some((line) => line.includes(snippet));
+ const found = (kernel.formal_non_claims ?? []).some((line) =>
+ line.includes(snippet),
+ );
if (!found) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
@@ -266,12 +292,18 @@ const phase2Schema = z
const modelPath = process.argv[2]
? path.resolve(process.argv[2])
- : path.resolve(__dirname, "../../tests/pcs/fixtures/labtrust-release/.phase2-read-model.json");
+ : path.resolve(
+ __dirname,
+ "../../tests/pcs/fixtures/labtrust-release/.phase2-read-model.json",
+ );
const raw = JSON.parse(readFileSync(modelPath, "utf8"));
const parsed = phase2Schema.safeParse(raw);
if (!parsed.success) {
- console.error("PCS Phase 2 read model contract failed:", parsed.error.flatten());
+ console.error(
+ "PCS Phase 2 read model contract failed:",
+ parsed.error.flatten(),
+ );
process.exit(1);
}
console.log(
diff --git a/portal/scripts/verify-pcs-read-model.mjs b/portal/scripts/verify-pcs-read-model.mjs
index 8f86f7a..dd0555b 100644
--- a/portal/scripts/verify-pcs-read-model.mjs
+++ b/portal/scripts/verify-pcs-read-model.mjs
@@ -34,7 +34,9 @@ const readModelSchema = z.object({
verifier: z.string().optional(),
checks: z.array(z.object({ outcome: z.string() })).min(1),
}),
- artifact_hashes: z.array(z.object({ name: z.string(), digest: z.string() })).min(5),
+ artifact_hashes: z
+ .array(z.object({ name: z.string(), digest: z.string() }))
+ .min(5),
canonical_digests: z.object({
claim_artifact: z.string().startsWith("sha256:"),
runtime_receipt: z.string().startsWith("sha256:"),
diff --git a/scripts/prepare_pcs_core_workspace.py b/scripts/prepare_pcs_core_workspace.py
new file mode 100644
index 0000000..acb28da
--- /dev/null
+++ b/scripts/prepare_pcs_core_workspace.py
@@ -0,0 +1,73 @@
+"""Prepare the pinned pcs-core checkout for reproducible editable CI installs.
+
+Temporary packaging-only compatibility shim for upstream pcs-core's
+python/pyproject.toml, whose readme points outside its Hatchling project root.
+This never changes application source, PCS schemas, or scientific fixtures.
+
+Remove this shim once upstream fixes the Python package metadata and the
+pinned source revision has been updated.
+"""
+
+from __future__ import annotations
+
+import hashlib
+import json
+import shutil
+import subprocess
+import sys
+from pathlib import Path
+
+PINNED_PCS_CORE_SHA = "9c971f5f9da8a424924dd8f48d6a3b71a1009e1b"
+OLD_README = 'readme = "../README.md"'
+NEW_README = 'readme = "README.md"'
+
+
+def prepare(repo_root: Path) -> None:
+ """Check the upstream revision and apply only the known README build fix."""
+ upstream = repo_root / "pcs-core"
+ project = upstream / "python"
+ metadata = project / "pyproject.toml"
+ source_readme = upstream / "README.md"
+ distribution_readme = project / "README.md"
+
+ if not metadata.is_file() or not source_readme.is_file():
+ raise FileNotFoundError("Required pcs-core package metadata/README is missing")
+
+ revision = subprocess.check_output(
+ ["git", "-C", str(upstream), "rev-parse", "HEAD"], text=True
+ ).strip()
+ if revision != PINNED_PCS_CORE_SHA:
+ raise RuntimeError(
+ f"Unexpected pcs-core revision {revision}; expected {PINNED_PCS_CORE_SHA}. "
+ "Review the upstream package metadata before updating this shim."
+ )
+
+ original = metadata.read_text(encoding="utf-8")
+ occurrences = original.count(OLD_README)
+ if occurrences == 1:
+ if distribution_readme.exists():
+ raise RuntimeError("Unexpected pcs-core/python/README.md; review packaging state")
+ updated = original.replace(OLD_README, NEW_README)
+ metadata.write_text(updated, encoding="utf-8")
+ shutil.copyfile(source_readme, distribution_readme)
+ operation = "README relocation compatibility patch"
+ elif NEW_README in original and distribution_readme.is_file():
+ operation = "upstream packaging already fixed"
+ else:
+ raise RuntimeError("Unknown pcs-core packaging layout; refusing to patch")
+
+ manifest = {
+ "upstream_revision": revision,
+ "operation": operation,
+ "metadata_sha256": hashlib.sha256(metadata.read_bytes()).hexdigest(),
+ "readme_sha256": hashlib.sha256(distribution_readme.read_bytes()).hexdigest(),
+ }
+ print(json.dumps(manifest, sort_keys=True))
+
+
+if __name__ == "__main__":
+ try:
+ prepare(Path(__file__).resolve().parents[1])
+ except (FileNotFoundError, RuntimeError, subprocess.CalledProcessError) as error:
+ print(f"pcs-core bootstrap failed: {error}", file=sys.stderr)
+ raise SystemExit(1) from error
diff --git a/tests/pcs/fixtures/computation-rejected-release/computation_run_receipt.json b/tests/pcs/fixtures/computation-rejected-release/computation_run_receipt.json
index 24d96ec..f77fdc5 100644
--- a/tests/pcs/fixtures/computation-rejected-release/computation_run_receipt.json
+++ b/tests/pcs/fixtures/computation-rejected-release/computation_run_receipt.json
@@ -1,21 +1,21 @@
-{
- "schema_version": "v0",
- "run_id": "run-demo-analysis-001",
- "workflow_id": "scientific_computation.reproducibility_v0",
- "command": "uv run python -m demo_analysis --input data/measurements.csv",
- "code_repo": "https://github.com/example/scientific-computation-runner",
- "code_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "dataset_receipt_ref": "dataset-demo-measurements-v0.1",
- "environment_receipt_ref": "env-linux-py312-uv",
- "started_at": "2026-05-18T12:05:00Z",
- "completed_at": "2026-05-18T12:06:30Z",
- "exit_code": 0,
- "stdout_hash": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
- "stderr_hash": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
- "result_artifact_refs": [
- "result-demo-summary-v0.1"
- ],
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:b8849e3846ede3cf5a1bf6ae6d375f9385d01255d90edade43bd173b44563624"
-}
+{
+ "schema_version": "v0",
+ "run_id": "run-demo-analysis-001",
+ "workflow_id": "scientific_computation.reproducibility_v0",
+ "command": "uv run python -m demo_analysis --input data/measurements.csv",
+ "code_repo": "https://github.com/example/scientific-computation-runner",
+ "code_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "dataset_receipt_ref": "dataset-demo-measurements-v0.1",
+ "environment_receipt_ref": "env-linux-py312-uv",
+ "started_at": "2026-05-18T12:05:00Z",
+ "completed_at": "2026-05-18T12:06:30Z",
+ "exit_code": 0,
+ "stdout_hash": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
+ "stderr_hash": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
+ "result_artifact_refs": [
+ "result-demo-summary-v0.1"
+ ],
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:b8849e3846ede3cf5a1bf6ae6d375f9385d01255d90edade43bd173b44563624"
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/computation_witness.json b/tests/pcs/fixtures/computation-rejected-release/computation_witness.json
index 83dc383..05d2ee2 100644
--- a/tests/pcs/fixtures/computation-rejected-release/computation_witness.json
+++ b/tests/pcs/fixtures/computation-rejected-release/computation_witness.json
@@ -1,29 +1,29 @@
-{
- "schema_version": "v0",
- "witness_id": "witness-computation-demo-v0.1",
- "workflow_id": "scientific_computation.reproducibility_v0",
- "dataset_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "environment_hash": "sha256:e8151506572c24de819d50107365d3b23545e25e6dd239670759bead0afa37b8",
- "run_receipt_hash": "sha256:b8849e3846ede3cf5a1bf6ae6d375f9385d01255d90edade43bd173b44563624",
- "result_hashes": [
- "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
- ],
- "code_repo": "https://github.com/example/scientific-computation-runner",
- "code_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "checker": "pcs-core-computation-validator",
- "checker_version": "0.1.0",
- "status": "Rejected",
- "violations": [
- {
- "violation_id": "viol-result-hash-mismatch",
- "violation_type": "result_hash_mismatch",
- "explanation": "Re-run with the pinned dataset version and verify result artifact sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.",
- "expected_hash": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
- "actual_hash": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
- "responsible_component": "scientific-computation-runner"
- }
- ],
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
- "signature_or_digest": "sha256:f3ddf13aaa6b89becd3b737ed396add5ebb294e7ffdcb18c344a512f83c0192e"
-}
+{
+ "schema_version": "v0",
+ "witness_id": "witness-computation-demo-v0.1",
+ "workflow_id": "scientific_computation.reproducibility_v0",
+ "dataset_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "environment_hash": "sha256:e8151506572c24de819d50107365d3b23545e25e6dd239670759bead0afa37b8",
+ "run_receipt_hash": "sha256:b8849e3846ede3cf5a1bf6ae6d375f9385d01255d90edade43bd173b44563624",
+ "result_hashes": [
+ "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
+ ],
+ "code_repo": "https://github.com/example/scientific-computation-runner",
+ "code_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "checker": "pcs-core-computation-validator",
+ "checker_version": "0.1.0",
+ "status": "Rejected",
+ "violations": [
+ {
+ "violation_id": "viol-result-hash-mismatch",
+ "violation_type": "result_hash_mismatch",
+ "explanation": "Re-run with the pinned dataset version and verify result artifact sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.",
+ "expected_hash": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
+ "actual_hash": "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+ "responsible_component": "scientific-computation-runner"
+ }
+ ],
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
+ "signature_or_digest": "sha256:f3ddf13aaa6b89becd3b737ed396add5ebb294e7ffdcb18c344a512f83c0192e"
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/dataset_receipt.json b/tests/pcs/fixtures/computation-rejected-release/dataset_receipt.json
index 0a6792f..0cf0f54 100644
--- a/tests/pcs/fixtures/computation-rejected-release/dataset_receipt.json
+++ b/tests/pcs/fixtures/computation-rejected-release/dataset_receipt.json
@@ -1,21 +1,21 @@
-{
- "schema_version": "v0",
- "dataset_id": "dataset-demo-measurements-v0.1",
- "dataset_name": "Demo measurements",
- "dataset_version": "v0.1.0",
- "files": [
- {
- "path": "data/measurements.csv",
- "sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "size_bytes": 128,
- "media_type": "text/csv"
- }
- ],
- "aggregate_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "source_uri": "https://example.org/datasets/demo-measurements/v0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "license": "CC-BY-4.0",
- "created_at": "2026-05-18T12:00:00Z",
- "signature_or_digest": "sha256:baef97b34473403cd928b9e7f3414befeb67cfdbdf094f77e5c758176ef4338d"
-}
+{
+ "schema_version": "v0",
+ "dataset_id": "dataset-demo-measurements-v0.1",
+ "dataset_name": "Demo measurements",
+ "dataset_version": "v0.1.0",
+ "files": [
+ {
+ "path": "data/measurements.csv",
+ "sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "size_bytes": 128,
+ "media_type": "text/csv"
+ }
+ ],
+ "aggregate_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "source_uri": "https://example.org/datasets/demo-measurements/v0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "license": "CC-BY-4.0",
+ "created_at": "2026-05-18T12:00:00Z",
+ "signature_or_digest": "sha256:baef97b34473403cd928b9e7f3414befeb67cfdbdf094f77e5c758176ef4338d"
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/environment_receipt.json b/tests/pcs/fixtures/computation-rejected-release/environment_receipt.json
index 0d4174c..1fde17a 100644
--- a/tests/pcs/fixtures/computation-rejected-release/environment_receipt.json
+++ b/tests/pcs/fixtures/computation-rejected-release/environment_receipt.json
@@ -1,20 +1,20 @@
-{
- "schema_version": "v0",
- "environment_id": "env-linux-py312-uv",
- "environment_kind": "uv",
- "os": "linux",
- "architecture": "x86_64",
- "language_runtimes": [
- "python-3.12"
- ],
- "packages": [
- "numpy==2.1.0",
- "pandas==2.2.0"
- ],
- "container_image": "ghcr.io/example/scientific-runner:py312",
- "container_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
- "hardware_summary": "4 vCPU, 16 GiB RAM",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:e8151506572c24de819d50107365d3b23545e25e6dd239670759bead0afa37b8"
-}
+{
+ "schema_version": "v0",
+ "environment_id": "env-linux-py312-uv",
+ "environment_kind": "uv",
+ "os": "linux",
+ "architecture": "x86_64",
+ "language_runtimes": [
+ "python-3.12"
+ ],
+ "packages": [
+ "numpy==2.1.0",
+ "pandas==2.2.0"
+ ],
+ "container_image": "ghcr.io/example/scientific-runner:py312",
+ "container_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+ "hardware_summary": "4 vCPU, 16 GiB RAM",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:e8151506572c24de819d50107365d3b23545e25e6dd239670759bead0afa37b8"
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/lean_check_result.v0.json b/tests/pcs/fixtures/computation-rejected-release/lean_check_result.v0.json
index 665acda..81abc26 100644
--- a/tests/pcs/fixtures/computation-rejected-release/lean_check_result.v0.json
+++ b/tests/pcs/fixtures/computation-rejected-release/lean_check_result.v0.json
@@ -1,75 +1,75 @@
-{
- "schema_version": "v0",
- "check_result_id": "lean-check-release-pcs-v0.1-scientific-computation-rejected",
- "release_id": "release-pcs-v0.1-scientific-computation-rejected",
- "obligation_set_id": "obl-set-release-pcs-v0.1-scientific-computation-rejected",
- "status": "ProofChecked",
- "lean_version": "leanprover/lean4:v4.24.0",
- "checked_at": "2026-05-22T11:48:44Z",
- "checker": "pcs-core",
- "checker_version": "0.1.0",
- "results": [
- {
- "obligation_id": "obl-certificate-matches-runtime",
- "lean_theorem": "PCS.CertificateMatchesRuntime",
- "status": "ProofChecked",
- "source_artifacts": [
- "trace_certificate.json",
- "runtime_receipt.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:44Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- },
- {
- "obligation_id": "obl-verification-admits-bundle",
- "lean_theorem": "PCS.VerificationAdmitsBundle",
- "status": "ProofChecked",
- "source_artifacts": [
- "verification_result.json",
- "science_claim_bundle.certified.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:44Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- },
- {
- "obligation_id": "obl-signed-bundle-admissible",
- "lean_theorem": "PCS.SignedBundleAdmissible",
- "status": "ProofChecked",
- "source_artifacts": [
- "signed_science_claim_bundle.json",
- "science_claim_bundle.certified.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:44Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- },
- {
- "obligation_id": "obl-rejected-certificate-not-admissible",
- "lean_theorem": "PCS.RejectedCertificateNotAdmissible",
- "status": "ProofChecked",
- "source_artifacts": [
- "trace_certificate.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:44Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- },
- {
- "obligation_id": "obl-stale-certificate-not-admissible",
- "lean_theorem": "PCS.StaleCertificateNotAdmissible",
- "status": "ProofChecked",
- "source_artifacts": [
- "trace_certificate.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:44Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- }
- ],
- "pf_explain": null,
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "9d105755c9d2668022e11bf8f2c0169ddbca4aec",
- "signature_or_digest": "sha256:c1bd9b9d9b19019e1f8404f12044659b3e92f410b1fc7c12385ac8e14b9b448c"
-}
+{
+ "schema_version": "v0",
+ "check_result_id": "lean-check-release-pcs-v0.1-scientific-computation-rejected",
+ "release_id": "release-pcs-v0.1-scientific-computation-rejected",
+ "obligation_set_id": "obl-set-release-pcs-v0.1-scientific-computation-rejected",
+ "status": "ProofChecked",
+ "lean_version": "leanprover/lean4:v4.24.0",
+ "checked_at": "2026-05-22T11:48:44Z",
+ "checker": "pcs-core",
+ "checker_version": "0.1.0",
+ "results": [
+ {
+ "obligation_id": "obl-certificate-matches-runtime",
+ "lean_theorem": "PCS.CertificateMatchesRuntime",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "trace_certificate.json",
+ "runtime_receipt.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:44Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ },
+ {
+ "obligation_id": "obl-verification-admits-bundle",
+ "lean_theorem": "PCS.VerificationAdmitsBundle",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "verification_result.json",
+ "science_claim_bundle.certified.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:44Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ },
+ {
+ "obligation_id": "obl-signed-bundle-admissible",
+ "lean_theorem": "PCS.SignedBundleAdmissible",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "signed_science_claim_bundle.json",
+ "science_claim_bundle.certified.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:44Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ },
+ {
+ "obligation_id": "obl-rejected-certificate-not-admissible",
+ "lean_theorem": "PCS.RejectedCertificateNotAdmissible",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "trace_certificate.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:44Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ },
+ {
+ "obligation_id": "obl-stale-certificate-not-admissible",
+ "lean_theorem": "PCS.StaleCertificateNotAdmissible",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "trace_certificate.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:44Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ }
+ ],
+ "pf_explain": null,
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "9d105755c9d2668022e11bf8f2c0169ddbca4aec",
+ "signature_or_digest": "sha256:c1bd9b9d9b19019e1f8404f12044659b3e92f410b1fc7c12385ac8e14b9b448c"
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/proof_obligation.v0.json b/tests/pcs/fixtures/computation-rejected-release/proof_obligation.v0.json
index 0d1b5b1..e3b883b 100644
--- a/tests/pcs/fixtures/computation-rejected-release/proof_obligation.v0.json
+++ b/tests/pcs/fixtures/computation-rejected-release/proof_obligation.v0.json
@@ -1,66 +1,66 @@
-{
- "schema_version": "v0",
- "obligation_set_id": "obl-set-release-pcs-v0.1-scientific-computation-rejected",
- "release_id": "release-pcs-v0.1-scientific-computation-rejected",
- "release_candidate": "pcs-v0.1-scientific-computation-conformance",
- "generated_at": "2026-05-22T11:48:44Z",
- "trust_boundary": "PCS trust-envelope invariants (Lean/PCS.lean)",
- "obligations": [
- {
- "obligation_id": "obl-certificate-matches-runtime",
- "predicate": "CertificateMatchesRuntime",
- "lean_theorem": "PCS.CertificateMatchesRuntime",
- "trust_boundary_invariant": "The temporal certificate trace hash matches the runtime receipt trace hash and the certificate is CertificateChecked.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "trace_certificate.json",
- "runtime_receipt.json"
- ]
- },
- {
- "obligation_id": "obl-verification-admits-bundle",
- "predicate": "VerificationAdmitsBundle",
- "lean_theorem": "PCS.VerificationAdmitsBundle",
- "trust_boundary_invariant": "Provability Fabric verification is ProofChecked and admits the certified bundle hash.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "verification_result.json",
- "science_claim_bundle.certified.json"
- ]
- },
- {
- "obligation_id": "obl-signed-bundle-admissible",
- "predicate": "SignedBundleAdmissible",
- "lean_theorem": "PCS.SignedBundleAdmissible",
- "trust_boundary_invariant": "The signed bundle input hash matches the PF verified certified bundle hash.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "signed_science_claim_bundle.json",
- "science_claim_bundle.certified.json"
- ]
- },
- {
- "obligation_id": "obl-rejected-certificate-not-admissible",
- "predicate": "RejectedCertificateNotAdmissible",
- "lean_theorem": "PCS.RejectedCertificateNotAdmissible",
- "trust_boundary_invariant": "A Rejected temporal certificate cannot satisfy an admissible release chain.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "trace_certificate.json"
- ]
- },
- {
- "obligation_id": "obl-stale-certificate-not-admissible",
- "predicate": "StaleCertificateNotAdmissible",
- "lean_theorem": "PCS.StaleCertificateNotAdmissible",
- "trust_boundary_invariant": "A Stale temporal certificate cannot satisfy an admissible release chain.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "trace_certificate.json"
- ]
- }
- ],
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "9d105755c9d2668022e11bf8f2c0169ddbca4aec",
- "signature_or_digest": "sha256:a4d0ea7ba0e702992a0b635fa2a660408e2f0330e259b17a3e2df926a0ff72fb"
-}
+{
+ "schema_version": "v0",
+ "obligation_set_id": "obl-set-release-pcs-v0.1-scientific-computation-rejected",
+ "release_id": "release-pcs-v0.1-scientific-computation-rejected",
+ "release_candidate": "pcs-v0.1-scientific-computation-conformance",
+ "generated_at": "2026-05-22T11:48:44Z",
+ "trust_boundary": "PCS trust-envelope invariants (Lean/PCS.lean)",
+ "obligations": [
+ {
+ "obligation_id": "obl-certificate-matches-runtime",
+ "predicate": "CertificateMatchesRuntime",
+ "lean_theorem": "PCS.CertificateMatchesRuntime",
+ "trust_boundary_invariant": "The temporal certificate trace hash matches the runtime receipt trace hash and the certificate is CertificateChecked.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "trace_certificate.json",
+ "runtime_receipt.json"
+ ]
+ },
+ {
+ "obligation_id": "obl-verification-admits-bundle",
+ "predicate": "VerificationAdmitsBundle",
+ "lean_theorem": "PCS.VerificationAdmitsBundle",
+ "trust_boundary_invariant": "Provability Fabric verification is ProofChecked and admits the certified bundle hash.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "verification_result.json",
+ "science_claim_bundle.certified.json"
+ ]
+ },
+ {
+ "obligation_id": "obl-signed-bundle-admissible",
+ "predicate": "SignedBundleAdmissible",
+ "lean_theorem": "PCS.SignedBundleAdmissible",
+ "trust_boundary_invariant": "The signed bundle input hash matches the PF verified certified bundle hash.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "signed_science_claim_bundle.json",
+ "science_claim_bundle.certified.json"
+ ]
+ },
+ {
+ "obligation_id": "obl-rejected-certificate-not-admissible",
+ "predicate": "RejectedCertificateNotAdmissible",
+ "lean_theorem": "PCS.RejectedCertificateNotAdmissible",
+ "trust_boundary_invariant": "A Rejected temporal certificate cannot satisfy an admissible release chain.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "trace_certificate.json"
+ ]
+ },
+ {
+ "obligation_id": "obl-stale-certificate-not-admissible",
+ "predicate": "StaleCertificateNotAdmissible",
+ "lean_theorem": "PCS.StaleCertificateNotAdmissible",
+ "trust_boundary_invariant": "A Stale temporal certificate cannot satisfy an admissible release chain.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "trace_certificate.json"
+ ]
+ }
+ ],
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "9d105755c9d2668022e11bf8f2c0169ddbca4aec",
+ "signature_or_digest": "sha256:a4d0ea7ba0e702992a0b635fa2a660408e2f0330e259b17a3e2df926a0ff72fb"
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/result_artifact.json b/tests/pcs/fixtures/computation-rejected-release/result_artifact.json
index bed2ee9..277a074 100644
--- a/tests/pcs/fixtures/computation-rejected-release/result_artifact.json
+++ b/tests/pcs/fixtures/computation-rejected-release/result_artifact.json
@@ -1,14 +1,14 @@
-{
- "schema_version": "v0",
- "result_id": "result-demo-summary-v0.1",
- "result_kind": "table",
- "path": "outputs/summary.parquet",
- "sha256": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
- "size_bytes": 4096,
- "media_type": "application/vnd.apache.parquet",
- "description": "Aggregated measurement summary table",
- "produced_by_run": "run-demo-analysis-001",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:787c5357feeac6cb2ea840fb59d953c78fbca3e9cf88ac58b84725100dcf00b8"
-}
+{
+ "schema_version": "v0",
+ "result_id": "result-demo-summary-v0.1",
+ "result_kind": "table",
+ "path": "outputs/summary.parquet",
+ "sha256": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
+ "size_bytes": 4096,
+ "media_type": "application/vnd.apache.parquet",
+ "description": "Aggregated measurement summary table",
+ "produced_by_run": "run-demo-analysis-001",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:787c5357feeac6cb2ea840fb59d953c78fbca3e9cf88ac58b84725100dcf00b8"
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/science_claim_bundle.certified.json b/tests/pcs/fixtures/computation-rejected-release/science_claim_bundle.certified.json
index 871fbca..66d6842 100644
--- a/tests/pcs/fixtures/computation-rejected-release/science_claim_bundle.certified.json
+++ b/tests/pcs/fixtures/computation-rejected-release/science_claim_bundle.certified.json
@@ -1,175 +1,175 @@
-{
- "schema_version": "v0",
- "signed_bundle_id": "signed-scb-qc-release-v0.1",
- "science_claim_bundle": {
- "bundle_id": "scb-qc-release-v0.1",
- "schema_version": "v0",
- "claim_artifact": {
- "artifact_id": "claim-computation-rejected-v0.1",
- "artifact_type": "ClaimArtifact.v0",
- "schema_version": "v0",
- "claim_text": "The declared computation run reproduces the pinned dataset under the recorded environment.",
- "claim_kind": "scientific_claim",
- "status": "CertificateChecked",
- "assumption_set_ref": "as-labtrust-qc-v0.1",
- "source_span_refs": [],
- "formal_statement": "",
- "certificate_refs": [
- "witness-computation-demo-v0.1"
- ],
- "runtime_receipt_refs": [
- "receipt-computation-run-001"
- ],
- "created_at": "2026-05-18T12:05:00Z",
- "producer": "scientific-computation-runner",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
- },
- "assumption_set": {
- "assumption_set_id": "as-labtrust-qc-v0.1",
- "schema_version": "v0",
- "created_at": "2026-05-16T12:00:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "assumptions": [
- {
- "assumption_id": "asm-domain-qc-sim",
- "text": "Simulation models a hospital QC release workflow, not a live clinical laboratory.",
- "kind": "domain",
- "status": "HumanReviewed",
- "source_span_refs": [
- "span-qc-release-spec-1"
- ]
- }
- ],
- "human_review_status": "approved",
- "status": "HumanReviewed",
- "signature_or_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
- },
- "runtime_receipts": [
- {
- "receipt_id": "receipt-computation-run-001",
- "schema_version": "v0",
- "run_id": "run-demo-analysis-001",
- "environment": {
- "platform": "linux",
- "python": "3.12",
- "labtrust_version": "0.1.0"
- },
- "started_at": "2026-05-18T12:05:00Z",
- "ended_at": "2026-05-18T12:06:30Z",
- "status": "RuntimeObserved",
- "run_outcome": "passed",
- "final_reason_code": "ok",
- "released": true,
- "events_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
- "policy_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
- "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "producer": "scientific-computation-runner",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "input_hashes": {
- "spec": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
- },
- "output_hashes": {
- "trace.json": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
- },
- "signature_or_digest": "sha256:260299295080e7b1a07b2d0b1ef37fff0a96d2c6d0b701263a36a0f2d0aa5081"
- }
- ],
- "certificates": [
- {
- "certificate_id": "witness-computation-demo-v0.1",
- "schema_version": "v0",
- "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "spec_hash": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
- "property_id": "scientific_computation.reproducibility_v0",
- "checker": "pcs-core-computation-validator",
- "checker_version": "0.1.0",
- "status": "CertificateChecked",
- "counterexample_ref": null,
- "created_at": "2026-05-16T12:10:00Z",
- "producer": "certifyedge",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
- "signature_or_digest": "sha256:f3ddf13aaa6b89becd3b737ed396add5ebb294e7ffdcb18c344a512f83c0192e"
- }
- ],
- "evidence_bundle": {
- "bundle_id": "evidence-qc-release-v0.1",
- "schema_version": "v0",
- "claim_refs": [
- "claim-qc-release-v0.1"
- ],
- "assumption_set_refs": [
- "as-labtrust-qc-v0.1"
- ],
- "runtime_receipt_refs": [
- "receipt-qc-release-run-001"
- ],
- "certificate_refs": [
- "cert-trace-qc-release-v0.1"
- ],
- "artifact_hashes": {
- "claim-qc-release-v0.1": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
- },
- "created_at": "2026-05-16T12:12:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
- },
- "verification_policy": {
- "policy_id": "labtrust-v0.1-qc-release",
- "required_checks": [
- "schema-valid",
- "trace-hash-alignment"
- ]
- },
- "created_at": "2026-05-16T12:15:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- },
- "verification_result": {
- "verification_id": "verify-scb-qc-release-v0.1",
- "schema_version": "v0",
- "bundle_id": "scb-qc-release-v0.1",
- "verifier": "provability-fabric",
- "verifier_version": "0.1.0",
- "status": "ProofChecked",
- "checks": [
- {
- "check_id": "schema-valid",
- "description": "ScienceClaimBundle conforms to schema",
- "status": "passed",
- "details": {}
- },
- {
- "check_id": "trace-hash-alignment",
- "description": "Receipt trace_hash matches certificate",
- "status": "passed",
- "details": {}
- }
- ],
- "created_at": "2026-05-16T12:20:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:4c5439ae358733f9a4c4a58e33fdaed1ab0d29deaaaaaaaaaaaaaaaaaaaaaaaa"
- },
- "signer": "provability-fabric",
- "signed_at": "2026-05-16T12:25:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:6bd6088e18a82f3eef22adaba8db91d0f2942142af35b2a698d5d87b92f1331a",
- "signed_input_bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
-}
+{
+ "schema_version": "v0",
+ "signed_bundle_id": "signed-scb-qc-release-v0.1",
+ "science_claim_bundle": {
+ "bundle_id": "scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "claim_artifact": {
+ "artifact_id": "claim-computation-rejected-v0.1",
+ "artifact_type": "ClaimArtifact.v0",
+ "schema_version": "v0",
+ "claim_text": "The declared computation run reproduces the pinned dataset under the recorded environment.",
+ "claim_kind": "scientific_claim",
+ "status": "CertificateChecked",
+ "assumption_set_ref": "as-labtrust-qc-v0.1",
+ "source_span_refs": [],
+ "formal_statement": "",
+ "certificate_refs": [
+ "witness-computation-demo-v0.1"
+ ],
+ "runtime_receipt_refs": [
+ "receipt-computation-run-001"
+ ],
+ "created_at": "2026-05-18T12:05:00Z",
+ "producer": "scientific-computation-runner",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
+ },
+ "assumption_set": {
+ "assumption_set_id": "as-labtrust-qc-v0.1",
+ "schema_version": "v0",
+ "created_at": "2026-05-16T12:00:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "assumptions": [
+ {
+ "assumption_id": "asm-domain-qc-sim",
+ "text": "Simulation models a hospital QC release workflow, not a live clinical laboratory.",
+ "kind": "domain",
+ "status": "HumanReviewed",
+ "source_span_refs": [
+ "span-qc-release-spec-1"
+ ]
+ }
+ ],
+ "human_review_status": "approved",
+ "status": "HumanReviewed",
+ "signature_or_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
+ },
+ "runtime_receipts": [
+ {
+ "receipt_id": "receipt-computation-run-001",
+ "schema_version": "v0",
+ "run_id": "run-demo-analysis-001",
+ "environment": {
+ "platform": "linux",
+ "python": "3.12",
+ "labtrust_version": "0.1.0"
+ },
+ "started_at": "2026-05-18T12:05:00Z",
+ "ended_at": "2026-05-18T12:06:30Z",
+ "status": "RuntimeObserved",
+ "run_outcome": "passed",
+ "final_reason_code": "ok",
+ "released": true,
+ "events_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
+ "policy_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
+ "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "producer": "scientific-computation-runner",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "input_hashes": {
+ "spec": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
+ },
+ "output_hashes": {
+ "trace.json": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
+ },
+ "signature_or_digest": "sha256:260299295080e7b1a07b2d0b1ef37fff0a96d2c6d0b701263a36a0f2d0aa5081"
+ }
+ ],
+ "certificates": [
+ {
+ "certificate_id": "witness-computation-demo-v0.1",
+ "schema_version": "v0",
+ "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "spec_hash": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
+ "property_id": "scientific_computation.reproducibility_v0",
+ "checker": "pcs-core-computation-validator",
+ "checker_version": "0.1.0",
+ "status": "CertificateChecked",
+ "counterexample_ref": null,
+ "created_at": "2026-05-16T12:10:00Z",
+ "producer": "certifyedge",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
+ "signature_or_digest": "sha256:f3ddf13aaa6b89becd3b737ed396add5ebb294e7ffdcb18c344a512f83c0192e"
+ }
+ ],
+ "evidence_bundle": {
+ "bundle_id": "evidence-qc-release-v0.1",
+ "schema_version": "v0",
+ "claim_refs": [
+ "claim-qc-release-v0.1"
+ ],
+ "assumption_set_refs": [
+ "as-labtrust-qc-v0.1"
+ ],
+ "runtime_receipt_refs": [
+ "receipt-qc-release-run-001"
+ ],
+ "certificate_refs": [
+ "cert-trace-qc-release-v0.1"
+ ],
+ "artifact_hashes": {
+ "claim-qc-release-v0.1": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
+ },
+ "created_at": "2026-05-16T12:12:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
+ },
+ "verification_policy": {
+ "policy_id": "labtrust-v0.1-qc-release",
+ "required_checks": [
+ "schema-valid",
+ "trace-hash-alignment"
+ ]
+ },
+ "created_at": "2026-05-16T12:15:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
+ },
+ "verification_result": {
+ "verification_id": "verify-scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "bundle_id": "scb-qc-release-v0.1",
+ "verifier": "provability-fabric",
+ "verifier_version": "0.1.0",
+ "status": "ProofChecked",
+ "checks": [
+ {
+ "check_id": "schema-valid",
+ "description": "ScienceClaimBundle conforms to schema",
+ "status": "passed",
+ "details": {}
+ },
+ {
+ "check_id": "trace-hash-alignment",
+ "description": "Receipt trace_hash matches certificate",
+ "status": "passed",
+ "details": {}
+ }
+ ],
+ "created_at": "2026-05-16T12:20:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:4c5439ae358733f9a4c4a58e33fdaed1ab0d29deaaaaaaaaaaaaaaaaaaaaaaaa"
+ },
+ "signer": "provability-fabric",
+ "signed_at": "2026-05-16T12:25:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:6bd6088e18a82f3eef22adaba8db91d0f2942142af35b2a698d5d87b92f1331a",
+ "signed_input_bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/signed_science_claim_bundle.json b/tests/pcs/fixtures/computation-rejected-release/signed_science_claim_bundle.json
index 871fbca..66d6842 100644
--- a/tests/pcs/fixtures/computation-rejected-release/signed_science_claim_bundle.json
+++ b/tests/pcs/fixtures/computation-rejected-release/signed_science_claim_bundle.json
@@ -1,175 +1,175 @@
-{
- "schema_version": "v0",
- "signed_bundle_id": "signed-scb-qc-release-v0.1",
- "science_claim_bundle": {
- "bundle_id": "scb-qc-release-v0.1",
- "schema_version": "v0",
- "claim_artifact": {
- "artifact_id": "claim-computation-rejected-v0.1",
- "artifact_type": "ClaimArtifact.v0",
- "schema_version": "v0",
- "claim_text": "The declared computation run reproduces the pinned dataset under the recorded environment.",
- "claim_kind": "scientific_claim",
- "status": "CertificateChecked",
- "assumption_set_ref": "as-labtrust-qc-v0.1",
- "source_span_refs": [],
- "formal_statement": "",
- "certificate_refs": [
- "witness-computation-demo-v0.1"
- ],
- "runtime_receipt_refs": [
- "receipt-computation-run-001"
- ],
- "created_at": "2026-05-18T12:05:00Z",
- "producer": "scientific-computation-runner",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
- },
- "assumption_set": {
- "assumption_set_id": "as-labtrust-qc-v0.1",
- "schema_version": "v0",
- "created_at": "2026-05-16T12:00:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "assumptions": [
- {
- "assumption_id": "asm-domain-qc-sim",
- "text": "Simulation models a hospital QC release workflow, not a live clinical laboratory.",
- "kind": "domain",
- "status": "HumanReviewed",
- "source_span_refs": [
- "span-qc-release-spec-1"
- ]
- }
- ],
- "human_review_status": "approved",
- "status": "HumanReviewed",
- "signature_or_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
- },
- "runtime_receipts": [
- {
- "receipt_id": "receipt-computation-run-001",
- "schema_version": "v0",
- "run_id": "run-demo-analysis-001",
- "environment": {
- "platform": "linux",
- "python": "3.12",
- "labtrust_version": "0.1.0"
- },
- "started_at": "2026-05-18T12:05:00Z",
- "ended_at": "2026-05-18T12:06:30Z",
- "status": "RuntimeObserved",
- "run_outcome": "passed",
- "final_reason_code": "ok",
- "released": true,
- "events_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
- "policy_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
- "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "producer": "scientific-computation-runner",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "input_hashes": {
- "spec": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
- },
- "output_hashes": {
- "trace.json": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
- },
- "signature_or_digest": "sha256:260299295080e7b1a07b2d0b1ef37fff0a96d2c6d0b701263a36a0f2d0aa5081"
- }
- ],
- "certificates": [
- {
- "certificate_id": "witness-computation-demo-v0.1",
- "schema_version": "v0",
- "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "spec_hash": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
- "property_id": "scientific_computation.reproducibility_v0",
- "checker": "pcs-core-computation-validator",
- "checker_version": "0.1.0",
- "status": "CertificateChecked",
- "counterexample_ref": null,
- "created_at": "2026-05-16T12:10:00Z",
- "producer": "certifyedge",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
- "signature_or_digest": "sha256:f3ddf13aaa6b89becd3b737ed396add5ebb294e7ffdcb18c344a512f83c0192e"
- }
- ],
- "evidence_bundle": {
- "bundle_id": "evidence-qc-release-v0.1",
- "schema_version": "v0",
- "claim_refs": [
- "claim-qc-release-v0.1"
- ],
- "assumption_set_refs": [
- "as-labtrust-qc-v0.1"
- ],
- "runtime_receipt_refs": [
- "receipt-qc-release-run-001"
- ],
- "certificate_refs": [
- "cert-trace-qc-release-v0.1"
- ],
- "artifact_hashes": {
- "claim-qc-release-v0.1": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
- },
- "created_at": "2026-05-16T12:12:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
- },
- "verification_policy": {
- "policy_id": "labtrust-v0.1-qc-release",
- "required_checks": [
- "schema-valid",
- "trace-hash-alignment"
- ]
- },
- "created_at": "2026-05-16T12:15:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- },
- "verification_result": {
- "verification_id": "verify-scb-qc-release-v0.1",
- "schema_version": "v0",
- "bundle_id": "scb-qc-release-v0.1",
- "verifier": "provability-fabric",
- "verifier_version": "0.1.0",
- "status": "ProofChecked",
- "checks": [
- {
- "check_id": "schema-valid",
- "description": "ScienceClaimBundle conforms to schema",
- "status": "passed",
- "details": {}
- },
- {
- "check_id": "trace-hash-alignment",
- "description": "Receipt trace_hash matches certificate",
- "status": "passed",
- "details": {}
- }
- ],
- "created_at": "2026-05-16T12:20:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:4c5439ae358733f9a4c4a58e33fdaed1ab0d29deaaaaaaaaaaaaaaaaaaaaaaaa"
- },
- "signer": "provability-fabric",
- "signed_at": "2026-05-16T12:25:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:6bd6088e18a82f3eef22adaba8db91d0f2942142af35b2a698d5d87b92f1331a",
- "signed_input_bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
-}
+{
+ "schema_version": "v0",
+ "signed_bundle_id": "signed-scb-qc-release-v0.1",
+ "science_claim_bundle": {
+ "bundle_id": "scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "claim_artifact": {
+ "artifact_id": "claim-computation-rejected-v0.1",
+ "artifact_type": "ClaimArtifact.v0",
+ "schema_version": "v0",
+ "claim_text": "The declared computation run reproduces the pinned dataset under the recorded environment.",
+ "claim_kind": "scientific_claim",
+ "status": "CertificateChecked",
+ "assumption_set_ref": "as-labtrust-qc-v0.1",
+ "source_span_refs": [],
+ "formal_statement": "",
+ "certificate_refs": [
+ "witness-computation-demo-v0.1"
+ ],
+ "runtime_receipt_refs": [
+ "receipt-computation-run-001"
+ ],
+ "created_at": "2026-05-18T12:05:00Z",
+ "producer": "scientific-computation-runner",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
+ },
+ "assumption_set": {
+ "assumption_set_id": "as-labtrust-qc-v0.1",
+ "schema_version": "v0",
+ "created_at": "2026-05-16T12:00:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "assumptions": [
+ {
+ "assumption_id": "asm-domain-qc-sim",
+ "text": "Simulation models a hospital QC release workflow, not a live clinical laboratory.",
+ "kind": "domain",
+ "status": "HumanReviewed",
+ "source_span_refs": [
+ "span-qc-release-spec-1"
+ ]
+ }
+ ],
+ "human_review_status": "approved",
+ "status": "HumanReviewed",
+ "signature_or_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
+ },
+ "runtime_receipts": [
+ {
+ "receipt_id": "receipt-computation-run-001",
+ "schema_version": "v0",
+ "run_id": "run-demo-analysis-001",
+ "environment": {
+ "platform": "linux",
+ "python": "3.12",
+ "labtrust_version": "0.1.0"
+ },
+ "started_at": "2026-05-18T12:05:00Z",
+ "ended_at": "2026-05-18T12:06:30Z",
+ "status": "RuntimeObserved",
+ "run_outcome": "passed",
+ "final_reason_code": "ok",
+ "released": true,
+ "events_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
+ "policy_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
+ "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "producer": "scientific-computation-runner",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "input_hashes": {
+ "spec": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
+ },
+ "output_hashes": {
+ "trace.json": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
+ },
+ "signature_or_digest": "sha256:260299295080e7b1a07b2d0b1ef37fff0a96d2c6d0b701263a36a0f2d0aa5081"
+ }
+ ],
+ "certificates": [
+ {
+ "certificate_id": "witness-computation-demo-v0.1",
+ "schema_version": "v0",
+ "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "spec_hash": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
+ "property_id": "scientific_computation.reproducibility_v0",
+ "checker": "pcs-core-computation-validator",
+ "checker_version": "0.1.0",
+ "status": "CertificateChecked",
+ "counterexample_ref": null,
+ "created_at": "2026-05-16T12:10:00Z",
+ "producer": "certifyedge",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
+ "signature_or_digest": "sha256:f3ddf13aaa6b89becd3b737ed396add5ebb294e7ffdcb18c344a512f83c0192e"
+ }
+ ],
+ "evidence_bundle": {
+ "bundle_id": "evidence-qc-release-v0.1",
+ "schema_version": "v0",
+ "claim_refs": [
+ "claim-qc-release-v0.1"
+ ],
+ "assumption_set_refs": [
+ "as-labtrust-qc-v0.1"
+ ],
+ "runtime_receipt_refs": [
+ "receipt-qc-release-run-001"
+ ],
+ "certificate_refs": [
+ "cert-trace-qc-release-v0.1"
+ ],
+ "artifact_hashes": {
+ "claim-qc-release-v0.1": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
+ },
+ "created_at": "2026-05-16T12:12:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
+ },
+ "verification_policy": {
+ "policy_id": "labtrust-v0.1-qc-release",
+ "required_checks": [
+ "schema-valid",
+ "trace-hash-alignment"
+ ]
+ },
+ "created_at": "2026-05-16T12:15:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
+ },
+ "verification_result": {
+ "verification_id": "verify-scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "bundle_id": "scb-qc-release-v0.1",
+ "verifier": "provability-fabric",
+ "verifier_version": "0.1.0",
+ "status": "ProofChecked",
+ "checks": [
+ {
+ "check_id": "schema-valid",
+ "description": "ScienceClaimBundle conforms to schema",
+ "status": "passed",
+ "details": {}
+ },
+ {
+ "check_id": "trace-hash-alignment",
+ "description": "Receipt trace_hash matches certificate",
+ "status": "passed",
+ "details": {}
+ }
+ ],
+ "created_at": "2026-05-16T12:20:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:4c5439ae358733f9a4c4a58e33fdaed1ab0d29deaaaaaaaaaaaaaaaaaaaaaaaa"
+ },
+ "signer": "provability-fabric",
+ "signed_at": "2026-05-16T12:25:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:6bd6088e18a82f3eef22adaba8db91d0f2942142af35b2a698d5d87b92f1331a",
+ "signed_input_bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/verification_result.json b/tests/pcs/fixtures/computation-rejected-release/verification_result.json
index e82c8ac..888c27d 100644
--- a/tests/pcs/fixtures/computation-rejected-release/verification_result.json
+++ b/tests/pcs/fixtures/computation-rejected-release/verification_result.json
@@ -1,33 +1,33 @@
-{
- "verification_id": "verify-scb-qc-release-v0.1",
- "schema_version": "v0",
- "bundle_id": "scb-qc-release-v0.1",
- "verifier": "provability-fabric",
- "verifier_version": "0.1.0",
- "status": "ProofChecked",
- "checks": [
- {
- "check_id": "schema-valid",
- "description": "ScienceClaimBundle conforms to ScienceClaimBundle.v0 schema",
- "status": "passed",
- "details": {}
- },
- {
- "check_id": "trace-hash-alignment",
- "description": "Runtime receipt trace_hash matches certificate trace_hash",
- "status": "passed",
- "details": {
- "trace_hash": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
- }
- }
- ],
- "created_at": "2026-05-16T12:20:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:cd11abeaee38bcc8bf8df071290e99abb363e0bf81765cf65498b13d2ec609b4",
- "verified_input": {
- "certificate_id": "cert-tool-use-safety-v0",
- "trace_hash": "sha256:42ce47fca8ec10a9c65c8d9b9384c8be52094c93d46aa9705ce7c2fa2b8c89e4",
- "bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
- }
-}
+{
+ "verification_id": "verify-scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "bundle_id": "scb-qc-release-v0.1",
+ "verifier": "provability-fabric",
+ "verifier_version": "0.1.0",
+ "status": "ProofChecked",
+ "checks": [
+ {
+ "check_id": "schema-valid",
+ "description": "ScienceClaimBundle conforms to ScienceClaimBundle.v0 schema",
+ "status": "passed",
+ "details": {}
+ },
+ {
+ "check_id": "trace-hash-alignment",
+ "description": "Runtime receipt trace_hash matches certificate trace_hash",
+ "status": "passed",
+ "details": {
+ "trace_hash": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
+ }
+ }
+ ],
+ "created_at": "2026-05-16T12:20:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:cd11abeaee38bcc8bf8df071290e99abb363e0bf81765cf65498b13d2ec609b4",
+ "verified_input": {
+ "certificate_id": "cert-tool-use-safety-v0",
+ "trace_hash": "sha256:42ce47fca8ec10a9c65c8d9b9384c8be52094c93d46aa9705ce7c2fa2b8c89e4",
+ "bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
+ }
+}
diff --git a/tests/pcs/fixtures/computation-rejected-release/workflow_profile.v0.json b/tests/pcs/fixtures/computation-rejected-release/workflow_profile.v0.json
index 4a52a29..bdc6f38 100644
--- a/tests/pcs/fixtures/computation-rejected-release/workflow_profile.v0.json
+++ b/tests/pcs/fixtures/computation-rejected-release/workflow_profile.v0.json
@@ -1,59 +1,59 @@
-{
- "schema_version": "v0",
- "workflow_id": "scientific_computation.reproducibility_v0",
- "domain": "scientific_computation",
- "description": "Proof-carrying computational reproducibility for declared inputs, environment, command, and results.",
- "runtime_artifacts": [
- "DatasetReceipt.v0",
- "EnvironmentReceipt.v0",
- "ComputationRunReceipt.v0",
- "ResultArtifact.v0"
- ],
- "certificate_artifacts": [
- "ComputationWitness.v0"
- ],
- "handoff_sequence": [
- "runtime_to_certificate",
- "certificate_to_bundle",
- "bundle_to_verifier",
- "signed_bundle_to_memory"
- ],
- "required_registry_entries": [
- "DatasetReceipt.v0",
- "EnvironmentReceipt.v0",
- "ComputationRunReceipt.v0",
- "ResultArtifact.v0",
- "ComputationWitness.v0",
- "ScienceClaimBundle.v0",
- "VerificationResult.v0",
- "SignedScienceClaimBundle.v0",
- "ReleaseManifest.v0",
- "HandoffManifest.v0",
- "ReleaseChainValidationResult.v0",
- "WorkflowProfile.v0"
- ],
- "required_admission_profile": "scientific_computation_reproducibility",
- "status_policy": {
- "policy_id": "pcs-v0.1-scientific-computation-lifecycle",
- "description": "Computation witnesses require hash alignment before CertificateChecked export.",
- "allowed_terminal_statuses": [
- "Rejected",
- "Stale"
- ],
- "forbidden_transitions": [
- {
- "from_status": "Rejected",
- "to_status": "ProofChecked"
- }
- ]
- },
- "failure_modes": [
- "dataset_hash_mismatch",
- "environment_hash_mismatch",
- "result_hash_mismatch",
- "missing_code_commit",
- "unreproducible_command"
- ],
- "limitations_notice": "This artifact is a proof-carrying computational reproducibility result. It verifies that declared inputs, environment metadata, code provenance, execution command, and result artifact hashes are internally consistent. It does not prove that the scientific model is true, that the dataset is unbiased, or that the result is externally valid.",
- "signature_or_digest": "sha256:57ec645d429826df128e8226f8a5de20b8d13dee043dfec40c254b002c1b0420"
-}
+{
+ "schema_version": "v0",
+ "workflow_id": "scientific_computation.reproducibility_v0",
+ "domain": "scientific_computation",
+ "description": "Proof-carrying computational reproducibility for declared inputs, environment, command, and results.",
+ "runtime_artifacts": [
+ "DatasetReceipt.v0",
+ "EnvironmentReceipt.v0",
+ "ComputationRunReceipt.v0",
+ "ResultArtifact.v0"
+ ],
+ "certificate_artifacts": [
+ "ComputationWitness.v0"
+ ],
+ "handoff_sequence": [
+ "runtime_to_certificate",
+ "certificate_to_bundle",
+ "bundle_to_verifier",
+ "signed_bundle_to_memory"
+ ],
+ "required_registry_entries": [
+ "DatasetReceipt.v0",
+ "EnvironmentReceipt.v0",
+ "ComputationRunReceipt.v0",
+ "ResultArtifact.v0",
+ "ComputationWitness.v0",
+ "ScienceClaimBundle.v0",
+ "VerificationResult.v0",
+ "SignedScienceClaimBundle.v0",
+ "ReleaseManifest.v0",
+ "HandoffManifest.v0",
+ "ReleaseChainValidationResult.v0",
+ "WorkflowProfile.v0"
+ ],
+ "required_admission_profile": "scientific_computation_reproducibility",
+ "status_policy": {
+ "policy_id": "pcs-v0.1-scientific-computation-lifecycle",
+ "description": "Computation witnesses require hash alignment before CertificateChecked export.",
+ "allowed_terminal_statuses": [
+ "Rejected",
+ "Stale"
+ ],
+ "forbidden_transitions": [
+ {
+ "from_status": "Rejected",
+ "to_status": "ProofChecked"
+ }
+ ]
+ },
+ "failure_modes": [
+ "dataset_hash_mismatch",
+ "environment_hash_mismatch",
+ "result_hash_mismatch",
+ "missing_code_commit",
+ "unreproducible_command"
+ ],
+ "limitations_notice": "This artifact is a proof-carrying computational reproducibility result. It verifies that declared inputs, environment metadata, code provenance, execution command, and result artifact hashes are internally consistent. It does not prove that the scientific model is true, that the dataset is unbiased, or that the result is externally valid.",
+ "signature_or_digest": "sha256:57ec645d429826df128e8226f8a5de20b8d13dee043dfec40c254b002c1b0420"
+}
diff --git a/tests/pcs/fixtures/computation-release/computation_run_receipt.json b/tests/pcs/fixtures/computation-release/computation_run_receipt.json
index 24d96ec..f77fdc5 100644
--- a/tests/pcs/fixtures/computation-release/computation_run_receipt.json
+++ b/tests/pcs/fixtures/computation-release/computation_run_receipt.json
@@ -1,21 +1,21 @@
-{
- "schema_version": "v0",
- "run_id": "run-demo-analysis-001",
- "workflow_id": "scientific_computation.reproducibility_v0",
- "command": "uv run python -m demo_analysis --input data/measurements.csv",
- "code_repo": "https://github.com/example/scientific-computation-runner",
- "code_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "dataset_receipt_ref": "dataset-demo-measurements-v0.1",
- "environment_receipt_ref": "env-linux-py312-uv",
- "started_at": "2026-05-18T12:05:00Z",
- "completed_at": "2026-05-18T12:06:30Z",
- "exit_code": 0,
- "stdout_hash": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
- "stderr_hash": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
- "result_artifact_refs": [
- "result-demo-summary-v0.1"
- ],
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:b8849e3846ede3cf5a1bf6ae6d375f9385d01255d90edade43bd173b44563624"
-}
+{
+ "schema_version": "v0",
+ "run_id": "run-demo-analysis-001",
+ "workflow_id": "scientific_computation.reproducibility_v0",
+ "command": "uv run python -m demo_analysis --input data/measurements.csv",
+ "code_repo": "https://github.com/example/scientific-computation-runner",
+ "code_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "dataset_receipt_ref": "dataset-demo-measurements-v0.1",
+ "environment_receipt_ref": "env-linux-py312-uv",
+ "started_at": "2026-05-18T12:05:00Z",
+ "completed_at": "2026-05-18T12:06:30Z",
+ "exit_code": 0,
+ "stdout_hash": "sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
+ "stderr_hash": "sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
+ "result_artifact_refs": [
+ "result-demo-summary-v0.1"
+ ],
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:b8849e3846ede3cf5a1bf6ae6d375f9385d01255d90edade43bd173b44563624"
+}
diff --git a/tests/pcs/fixtures/computation-release/computation_witness.json b/tests/pcs/fixtures/computation-release/computation_witness.json
index 13f8336..386f8ee 100644
--- a/tests/pcs/fixtures/computation-release/computation_witness.json
+++ b/tests/pcs/fixtures/computation-release/computation_witness.json
@@ -1,20 +1,20 @@
-{
- "schema_version": "v0",
- "witness_id": "witness-computation-demo-v0.1",
- "workflow_id": "scientific_computation.reproducibility_v0",
- "dataset_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "environment_hash": "sha256:e8151506572c24de819d50107365d3b23545e25e6dd239670759bead0afa37b8",
- "run_receipt_hash": "sha256:b8849e3846ede3cf5a1bf6ae6d375f9385d01255d90edade43bd173b44563624",
- "result_hashes": [
- "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
- ],
- "code_repo": "https://github.com/example/scientific-computation-runner",
- "code_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "checker": "pcs-core-computation-validator",
- "checker_version": "0.1.0",
- "status": "CertificateChecked",
- "violations": [],
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
- "signature_or_digest": "sha256:8b8fc0ca6fa3d4b7646e8e87a454f79371270220209e2a91ee6db9fcc7850425"
-}
+{
+ "schema_version": "v0",
+ "witness_id": "witness-computation-demo-v0.1",
+ "workflow_id": "scientific_computation.reproducibility_v0",
+ "dataset_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "environment_hash": "sha256:e8151506572c24de819d50107365d3b23545e25e6dd239670759bead0afa37b8",
+ "run_receipt_hash": "sha256:b8849e3846ede3cf5a1bf6ae6d375f9385d01255d90edade43bd173b44563624",
+ "result_hashes": [
+ "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
+ ],
+ "code_repo": "https://github.com/example/scientific-computation-runner",
+ "code_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "checker": "pcs-core-computation-validator",
+ "checker_version": "0.1.0",
+ "status": "CertificateChecked",
+ "violations": [],
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
+ "signature_or_digest": "sha256:8b8fc0ca6fa3d4b7646e8e87a454f79371270220209e2a91ee6db9fcc7850425"
+}
diff --git a/tests/pcs/fixtures/computation-release/dataset_receipt.json b/tests/pcs/fixtures/computation-release/dataset_receipt.json
index 0a6792f..0cf0f54 100644
--- a/tests/pcs/fixtures/computation-release/dataset_receipt.json
+++ b/tests/pcs/fixtures/computation-release/dataset_receipt.json
@@ -1,21 +1,21 @@
-{
- "schema_version": "v0",
- "dataset_id": "dataset-demo-measurements-v0.1",
- "dataset_name": "Demo measurements",
- "dataset_version": "v0.1.0",
- "files": [
- {
- "path": "data/measurements.csv",
- "sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
- "size_bytes": 128,
- "media_type": "text/csv"
- }
- ],
- "aggregate_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "source_uri": "https://example.org/datasets/demo-measurements/v0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "license": "CC-BY-4.0",
- "created_at": "2026-05-18T12:00:00Z",
- "signature_or_digest": "sha256:baef97b34473403cd928b9e7f3414befeb67cfdbdf094f77e5c758176ef4338d"
-}
+{
+ "schema_version": "v0",
+ "dataset_id": "dataset-demo-measurements-v0.1",
+ "dataset_name": "Demo measurements",
+ "dataset_version": "v0.1.0",
+ "files": [
+ {
+ "path": "data/measurements.csv",
+ "sha256": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+ "size_bytes": 128,
+ "media_type": "text/csv"
+ }
+ ],
+ "aggregate_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "source_uri": "https://example.org/datasets/demo-measurements/v0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "license": "CC-BY-4.0",
+ "created_at": "2026-05-18T12:00:00Z",
+ "signature_or_digest": "sha256:baef97b34473403cd928b9e7f3414befeb67cfdbdf094f77e5c758176ef4338d"
+}
diff --git a/tests/pcs/fixtures/computation-release/environment_receipt.json b/tests/pcs/fixtures/computation-release/environment_receipt.json
index 0d4174c..1fde17a 100644
--- a/tests/pcs/fixtures/computation-release/environment_receipt.json
+++ b/tests/pcs/fixtures/computation-release/environment_receipt.json
@@ -1,20 +1,20 @@
-{
- "schema_version": "v0",
- "environment_id": "env-linux-py312-uv",
- "environment_kind": "uv",
- "os": "linux",
- "architecture": "x86_64",
- "language_runtimes": [
- "python-3.12"
- ],
- "packages": [
- "numpy==2.1.0",
- "pandas==2.2.0"
- ],
- "container_image": "ghcr.io/example/scientific-runner:py312",
- "container_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
- "hardware_summary": "4 vCPU, 16 GiB RAM",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:e8151506572c24de819d50107365d3b23545e25e6dd239670759bead0afa37b8"
-}
+{
+ "schema_version": "v0",
+ "environment_id": "env-linux-py312-uv",
+ "environment_kind": "uv",
+ "os": "linux",
+ "architecture": "x86_64",
+ "language_runtimes": [
+ "python-3.12"
+ ],
+ "packages": [
+ "numpy==2.1.0",
+ "pandas==2.2.0"
+ ],
+ "container_image": "ghcr.io/example/scientific-runner:py312",
+ "container_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
+ "hardware_summary": "4 vCPU, 16 GiB RAM",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:e8151506572c24de819d50107365d3b23545e25e6dd239670759bead0afa37b8"
+}
diff --git a/tests/pcs/fixtures/computation-release/lean_check_result.v0.json b/tests/pcs/fixtures/computation-release/lean_check_result.v0.json
index 9bd8a31..60a071c 100644
--- a/tests/pcs/fixtures/computation-release/lean_check_result.v0.json
+++ b/tests/pcs/fixtures/computation-release/lean_check_result.v0.json
@@ -1,75 +1,75 @@
-{
- "schema_version": "v0",
- "check_result_id": "lean-check-release-pcs-v0.1-scientific-computation-reproducibility",
- "release_id": "release-pcs-v0.1-scientific-computation-reproducibility",
- "obligation_set_id": "obl-set-release-pcs-v0.1-scientific-computation-reproducibility",
- "status": "ProofChecked",
- "lean_version": "leanprover/lean4:v4.24.0",
- "checked_at": "2026-05-22T11:48:43Z",
- "checker": "pcs-core",
- "checker_version": "0.1.0",
- "results": [
- {
- "obligation_id": "obl-certificate-matches-runtime",
- "lean_theorem": "PCS.CertificateMatchesRuntime",
- "status": "ProofChecked",
- "source_artifacts": [
- "trace_certificate.json",
- "runtime_receipt.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:43Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- },
- {
- "obligation_id": "obl-verification-admits-bundle",
- "lean_theorem": "PCS.VerificationAdmitsBundle",
- "status": "ProofChecked",
- "source_artifacts": [
- "verification_result.json",
- "science_claim_bundle.certified.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:43Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- },
- {
- "obligation_id": "obl-signed-bundle-admissible",
- "lean_theorem": "PCS.SignedBundleAdmissible",
- "status": "ProofChecked",
- "source_artifacts": [
- "signed_science_claim_bundle.json",
- "science_claim_bundle.certified.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:43Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- },
- {
- "obligation_id": "obl-rejected-certificate-not-admissible",
- "lean_theorem": "PCS.RejectedCertificateNotAdmissible",
- "status": "ProofChecked",
- "source_artifacts": [
- "trace_certificate.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:43Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- },
- {
- "obligation_id": "obl-stale-certificate-not-admissible",
- "lean_theorem": "PCS.StaleCertificateNotAdmissible",
- "status": "ProofChecked",
- "source_artifacts": [
- "trace_certificate.json"
- ],
- "result": "passed",
- "checked_at": "2026-05-22T11:48:43Z",
- "lean_version": "leanprover/lean4:v4.24.0"
- }
- ],
- "pf_explain": null,
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "9d105755c9d2668022e11bf8f2c0169ddbca4aec",
- "signature_or_digest": "sha256:bff19697ffa4ad3ba024e252281fbc8c31c56ae927bec1ed1196fb306a831a6f"
-}
+{
+ "schema_version": "v0",
+ "check_result_id": "lean-check-release-pcs-v0.1-scientific-computation-reproducibility",
+ "release_id": "release-pcs-v0.1-scientific-computation-reproducibility",
+ "obligation_set_id": "obl-set-release-pcs-v0.1-scientific-computation-reproducibility",
+ "status": "ProofChecked",
+ "lean_version": "leanprover/lean4:v4.24.0",
+ "checked_at": "2026-05-22T11:48:43Z",
+ "checker": "pcs-core",
+ "checker_version": "0.1.0",
+ "results": [
+ {
+ "obligation_id": "obl-certificate-matches-runtime",
+ "lean_theorem": "PCS.CertificateMatchesRuntime",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "trace_certificate.json",
+ "runtime_receipt.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:43Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ },
+ {
+ "obligation_id": "obl-verification-admits-bundle",
+ "lean_theorem": "PCS.VerificationAdmitsBundle",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "verification_result.json",
+ "science_claim_bundle.certified.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:43Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ },
+ {
+ "obligation_id": "obl-signed-bundle-admissible",
+ "lean_theorem": "PCS.SignedBundleAdmissible",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "signed_science_claim_bundle.json",
+ "science_claim_bundle.certified.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:43Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ },
+ {
+ "obligation_id": "obl-rejected-certificate-not-admissible",
+ "lean_theorem": "PCS.RejectedCertificateNotAdmissible",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "trace_certificate.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:43Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ },
+ {
+ "obligation_id": "obl-stale-certificate-not-admissible",
+ "lean_theorem": "PCS.StaleCertificateNotAdmissible",
+ "status": "ProofChecked",
+ "source_artifacts": [
+ "trace_certificate.json"
+ ],
+ "result": "passed",
+ "checked_at": "2026-05-22T11:48:43Z",
+ "lean_version": "leanprover/lean4:v4.24.0"
+ }
+ ],
+ "pf_explain": null,
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "9d105755c9d2668022e11bf8f2c0169ddbca4aec",
+ "signature_or_digest": "sha256:bff19697ffa4ad3ba024e252281fbc8c31c56ae927bec1ed1196fb306a831a6f"
+}
diff --git a/tests/pcs/fixtures/computation-release/proof_obligation.v0.json b/tests/pcs/fixtures/computation-release/proof_obligation.v0.json
index 982c0cf..39a30e8 100644
--- a/tests/pcs/fixtures/computation-release/proof_obligation.v0.json
+++ b/tests/pcs/fixtures/computation-release/proof_obligation.v0.json
@@ -1,66 +1,66 @@
-{
- "schema_version": "v0",
- "obligation_set_id": "obl-set-release-pcs-v0.1-scientific-computation-reproducibility",
- "release_id": "release-pcs-v0.1-scientific-computation-reproducibility",
- "release_candidate": "pcs-v0.1-scientific-computation-conformance",
- "generated_at": "2026-05-22T11:48:43Z",
- "trust_boundary": "PCS trust-envelope invariants (Lean/PCS.lean)",
- "obligations": [
- {
- "obligation_id": "obl-certificate-matches-runtime",
- "predicate": "CertificateMatchesRuntime",
- "lean_theorem": "PCS.CertificateMatchesRuntime",
- "trust_boundary_invariant": "The temporal certificate trace hash matches the runtime receipt trace hash and the certificate is CertificateChecked.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "trace_certificate.json",
- "runtime_receipt.json"
- ]
- },
- {
- "obligation_id": "obl-verification-admits-bundle",
- "predicate": "VerificationAdmitsBundle",
- "lean_theorem": "PCS.VerificationAdmitsBundle",
- "trust_boundary_invariant": "Provability Fabric verification is ProofChecked and admits the certified bundle hash.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "verification_result.json",
- "science_claim_bundle.certified.json"
- ]
- },
- {
- "obligation_id": "obl-signed-bundle-admissible",
- "predicate": "SignedBundleAdmissible",
- "lean_theorem": "PCS.SignedBundleAdmissible",
- "trust_boundary_invariant": "The signed bundle input hash matches the PF verified certified bundle hash.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "signed_science_claim_bundle.json",
- "science_claim_bundle.certified.json"
- ]
- },
- {
- "obligation_id": "obl-rejected-certificate-not-admissible",
- "predicate": "RejectedCertificateNotAdmissible",
- "lean_theorem": "PCS.RejectedCertificateNotAdmissible",
- "trust_boundary_invariant": "A Rejected temporal certificate cannot satisfy an admissible release chain.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "trace_certificate.json"
- ]
- },
- {
- "obligation_id": "obl-stale-certificate-not-admissible",
- "predicate": "StaleCertificateNotAdmissible",
- "lean_theorem": "PCS.StaleCertificateNotAdmissible",
- "trust_boundary_invariant": "A Stale temporal certificate cannot satisfy an admissible release chain.",
- "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
- "source_artifacts": [
- "trace_certificate.json"
- ]
- }
- ],
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "9d105755c9d2668022e11bf8f2c0169ddbca4aec",
- "signature_or_digest": "sha256:5ce7532e56a9cfa68b0e7d8e2e39999170613064331a59583959c9d85e0b7b48"
-}
+{
+ "schema_version": "v0",
+ "obligation_set_id": "obl-set-release-pcs-v0.1-scientific-computation-reproducibility",
+ "release_id": "release-pcs-v0.1-scientific-computation-reproducibility",
+ "release_candidate": "pcs-v0.1-scientific-computation-conformance",
+ "generated_at": "2026-05-22T11:48:43Z",
+ "trust_boundary": "PCS trust-envelope invariants (Lean/PCS.lean)",
+ "obligations": [
+ {
+ "obligation_id": "obl-certificate-matches-runtime",
+ "predicate": "CertificateMatchesRuntime",
+ "lean_theorem": "PCS.CertificateMatchesRuntime",
+ "trust_boundary_invariant": "The temporal certificate trace hash matches the runtime receipt trace hash and the certificate is CertificateChecked.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "trace_certificate.json",
+ "runtime_receipt.json"
+ ]
+ },
+ {
+ "obligation_id": "obl-verification-admits-bundle",
+ "predicate": "VerificationAdmitsBundle",
+ "lean_theorem": "PCS.VerificationAdmitsBundle",
+ "trust_boundary_invariant": "Provability Fabric verification is ProofChecked and admits the certified bundle hash.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "verification_result.json",
+ "science_claim_bundle.certified.json"
+ ]
+ },
+ {
+ "obligation_id": "obl-signed-bundle-admissible",
+ "predicate": "SignedBundleAdmissible",
+ "lean_theorem": "PCS.SignedBundleAdmissible",
+ "trust_boundary_invariant": "The signed bundle input hash matches the PF verified certified bundle hash.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "signed_science_claim_bundle.json",
+ "science_claim_bundle.certified.json"
+ ]
+ },
+ {
+ "obligation_id": "obl-rejected-certificate-not-admissible",
+ "predicate": "RejectedCertificateNotAdmissible",
+ "lean_theorem": "PCS.RejectedCertificateNotAdmissible",
+ "trust_boundary_invariant": "A Rejected temporal certificate cannot satisfy an admissible release chain.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "trace_certificate.json"
+ ]
+ },
+ {
+ "obligation_id": "obl-stale-certificate-not-admissible",
+ "predicate": "StaleCertificateNotAdmissible",
+ "lean_theorem": "PCS.StaleCertificateNotAdmissible",
+ "trust_boundary_invariant": "A Stale temporal certificate cannot satisfy an admissible release chain.",
+ "formal_scope": "Formalization covers PCS trust-envelope predicates in the Lean trust kernel (certificate/runtime alignment, PF verification admission, and signed-bundle hash binding). Scientific domain semantics, data quality, and model validity are out of scope.",
+ "source_artifacts": [
+ "trace_certificate.json"
+ ]
+ }
+ ],
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "9d105755c9d2668022e11bf8f2c0169ddbca4aec",
+ "signature_or_digest": "sha256:5ce7532e56a9cfa68b0e7d8e2e39999170613064331a59583959c9d85e0b7b48"
+}
diff --git a/tests/pcs/fixtures/computation-release/result_artifact.json b/tests/pcs/fixtures/computation-release/result_artifact.json
index bed2ee9..277a074 100644
--- a/tests/pcs/fixtures/computation-release/result_artifact.json
+++ b/tests/pcs/fixtures/computation-release/result_artifact.json
@@ -1,14 +1,14 @@
-{
- "schema_version": "v0",
- "result_id": "result-demo-summary-v0.1",
- "result_kind": "table",
- "path": "outputs/summary.parquet",
- "sha256": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
- "size_bytes": 4096,
- "media_type": "application/vnd.apache.parquet",
- "description": "Aggregated measurement summary table",
- "produced_by_run": "run-demo-analysis-001",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:787c5357feeac6cb2ea840fb59d953c78fbca3e9cf88ac58b84725100dcf00b8"
-}
+{
+ "schema_version": "v0",
+ "result_id": "result-demo-summary-v0.1",
+ "result_kind": "table",
+ "path": "outputs/summary.parquet",
+ "sha256": "sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
+ "size_bytes": 4096,
+ "media_type": "application/vnd.apache.parquet",
+ "description": "Aggregated measurement summary table",
+ "produced_by_run": "run-demo-analysis-001",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:787c5357feeac6cb2ea840fb59d953c78fbca3e9cf88ac58b84725100dcf00b8"
+}
diff --git a/tests/pcs/fixtures/computation-release/science_claim_bundle.certified.json b/tests/pcs/fixtures/computation-release/science_claim_bundle.certified.json
index 169025c..7b9686d 100644
--- a/tests/pcs/fixtures/computation-release/science_claim_bundle.certified.json
+++ b/tests/pcs/fixtures/computation-release/science_claim_bundle.certified.json
@@ -1,175 +1,175 @@
-{
- "schema_version": "v0",
- "signed_bundle_id": "signed-scb-qc-release-v0.1",
- "science_claim_bundle": {
- "bundle_id": "scb-qc-release-v0.1",
- "schema_version": "v0",
- "claim_artifact": {
- "artifact_id": "claim-computation-release-v0.1",
- "artifact_type": "ClaimArtifact.v0",
- "schema_version": "v0",
- "claim_text": "The declared computation run reproduces the pinned dataset under the recorded environment.",
- "claim_kind": "scientific_claim",
- "status": "CertificateChecked",
- "assumption_set_ref": "as-labtrust-qc-v0.1",
- "source_span_refs": [],
- "formal_statement": "",
- "certificate_refs": [
- "witness-computation-demo-v0.1"
- ],
- "runtime_receipt_refs": [
- "receipt-computation-run-001"
- ],
- "created_at": "2026-05-18T12:05:00Z",
- "producer": "scientific-computation-runner",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
- },
- "assumption_set": {
- "assumption_set_id": "as-labtrust-qc-v0.1",
- "schema_version": "v0",
- "created_at": "2026-05-16T12:00:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "assumptions": [
- {
- "assumption_id": "asm-domain-qc-sim",
- "text": "Simulation models a hospital QC release workflow, not a live clinical laboratory.",
- "kind": "domain",
- "status": "HumanReviewed",
- "source_span_refs": [
- "span-qc-release-spec-1"
- ]
- }
- ],
- "human_review_status": "approved",
- "status": "HumanReviewed",
- "signature_or_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
- },
- "runtime_receipts": [
- {
- "receipt_id": "receipt-computation-run-001",
- "schema_version": "v0",
- "run_id": "run-demo-analysis-001",
- "environment": {
- "platform": "linux",
- "python": "3.12",
- "labtrust_version": "0.1.0"
- },
- "started_at": "2026-05-18T12:05:00Z",
- "ended_at": "2026-05-18T12:06:30Z",
- "status": "RuntimeObserved",
- "run_outcome": "passed",
- "final_reason_code": "ok",
- "released": true,
- "events_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
- "policy_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
- "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "producer": "scientific-computation-runner",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "input_hashes": {
- "spec": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
- },
- "output_hashes": {
- "trace.json": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
- },
- "signature_or_digest": "sha256:260299295080e7b1a07b2d0b1ef37fff0a96d2c6d0b701263a36a0f2d0aa5081"
- }
- ],
- "certificates": [
- {
- "certificate_id": "witness-computation-demo-v0.1",
- "schema_version": "v0",
- "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "spec_hash": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
- "property_id": "scientific_computation.reproducibility_v0",
- "checker": "pcs-core-computation-validator",
- "checker_version": "0.1.0",
- "status": "CertificateChecked",
- "counterexample_ref": null,
- "created_at": "2026-05-16T12:10:00Z",
- "producer": "certifyedge",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
- "signature_or_digest": "sha256:8b8fc0ca6fa3d4b7646e8e87a454f79371270220209e2a91ee6db9fcc7850425"
- }
- ],
- "evidence_bundle": {
- "bundle_id": "evidence-qc-release-v0.1",
- "schema_version": "v0",
- "claim_refs": [
- "claim-qc-release-v0.1"
- ],
- "assumption_set_refs": [
- "as-labtrust-qc-v0.1"
- ],
- "runtime_receipt_refs": [
- "receipt-qc-release-run-001"
- ],
- "certificate_refs": [
- "cert-trace-qc-release-v0.1"
- ],
- "artifact_hashes": {
- "claim-qc-release-v0.1": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
- },
- "created_at": "2026-05-16T12:12:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
- },
- "verification_policy": {
- "policy_id": "labtrust-v0.1-qc-release",
- "required_checks": [
- "schema-valid",
- "trace-hash-alignment"
- ]
- },
- "created_at": "2026-05-16T12:15:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- },
- "verification_result": {
- "verification_id": "verify-scb-qc-release-v0.1",
- "schema_version": "v0",
- "bundle_id": "scb-qc-release-v0.1",
- "verifier": "provability-fabric",
- "verifier_version": "0.1.0",
- "status": "ProofChecked",
- "checks": [
- {
- "check_id": "schema-valid",
- "description": "ScienceClaimBundle conforms to schema",
- "status": "passed",
- "details": {}
- },
- {
- "check_id": "trace-hash-alignment",
- "description": "Receipt trace_hash matches certificate",
- "status": "passed",
- "details": {}
- }
- ],
- "created_at": "2026-05-16T12:20:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:4c5439ae358733f9a4c4a58e33fdaed1ab0d29deaaaaaaaaaaaaaaaaaaaaaaaa"
- },
- "signer": "provability-fabric",
- "signed_at": "2026-05-16T12:25:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:6bd6088e18a82f3eef22adaba8db91d0f2942142af35b2a698d5d87b92f1331a",
- "signed_input_bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
-}
+{
+ "schema_version": "v0",
+ "signed_bundle_id": "signed-scb-qc-release-v0.1",
+ "science_claim_bundle": {
+ "bundle_id": "scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "claim_artifact": {
+ "artifact_id": "claim-computation-release-v0.1",
+ "artifact_type": "ClaimArtifact.v0",
+ "schema_version": "v0",
+ "claim_text": "The declared computation run reproduces the pinned dataset under the recorded environment.",
+ "claim_kind": "scientific_claim",
+ "status": "CertificateChecked",
+ "assumption_set_ref": "as-labtrust-qc-v0.1",
+ "source_span_refs": [],
+ "formal_statement": "",
+ "certificate_refs": [
+ "witness-computation-demo-v0.1"
+ ],
+ "runtime_receipt_refs": [
+ "receipt-computation-run-001"
+ ],
+ "created_at": "2026-05-18T12:05:00Z",
+ "producer": "scientific-computation-runner",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
+ },
+ "assumption_set": {
+ "assumption_set_id": "as-labtrust-qc-v0.1",
+ "schema_version": "v0",
+ "created_at": "2026-05-16T12:00:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "assumptions": [
+ {
+ "assumption_id": "asm-domain-qc-sim",
+ "text": "Simulation models a hospital QC release workflow, not a live clinical laboratory.",
+ "kind": "domain",
+ "status": "HumanReviewed",
+ "source_span_refs": [
+ "span-qc-release-spec-1"
+ ]
+ }
+ ],
+ "human_review_status": "approved",
+ "status": "HumanReviewed",
+ "signature_or_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
+ },
+ "runtime_receipts": [
+ {
+ "receipt_id": "receipt-computation-run-001",
+ "schema_version": "v0",
+ "run_id": "run-demo-analysis-001",
+ "environment": {
+ "platform": "linux",
+ "python": "3.12",
+ "labtrust_version": "0.1.0"
+ },
+ "started_at": "2026-05-18T12:05:00Z",
+ "ended_at": "2026-05-18T12:06:30Z",
+ "status": "RuntimeObserved",
+ "run_outcome": "passed",
+ "final_reason_code": "ok",
+ "released": true,
+ "events_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
+ "policy_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
+ "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "producer": "scientific-computation-runner",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "input_hashes": {
+ "spec": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
+ },
+ "output_hashes": {
+ "trace.json": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
+ },
+ "signature_or_digest": "sha256:260299295080e7b1a07b2d0b1ef37fff0a96d2c6d0b701263a36a0f2d0aa5081"
+ }
+ ],
+ "certificates": [
+ {
+ "certificate_id": "witness-computation-demo-v0.1",
+ "schema_version": "v0",
+ "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "spec_hash": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
+ "property_id": "scientific_computation.reproducibility_v0",
+ "checker": "pcs-core-computation-validator",
+ "checker_version": "0.1.0",
+ "status": "CertificateChecked",
+ "counterexample_ref": null,
+ "created_at": "2026-05-16T12:10:00Z",
+ "producer": "certifyedge",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
+ "signature_or_digest": "sha256:8b8fc0ca6fa3d4b7646e8e87a454f79371270220209e2a91ee6db9fcc7850425"
+ }
+ ],
+ "evidence_bundle": {
+ "bundle_id": "evidence-qc-release-v0.1",
+ "schema_version": "v0",
+ "claim_refs": [
+ "claim-qc-release-v0.1"
+ ],
+ "assumption_set_refs": [
+ "as-labtrust-qc-v0.1"
+ ],
+ "runtime_receipt_refs": [
+ "receipt-qc-release-run-001"
+ ],
+ "certificate_refs": [
+ "cert-trace-qc-release-v0.1"
+ ],
+ "artifact_hashes": {
+ "claim-qc-release-v0.1": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
+ },
+ "created_at": "2026-05-16T12:12:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
+ },
+ "verification_policy": {
+ "policy_id": "labtrust-v0.1-qc-release",
+ "required_checks": [
+ "schema-valid",
+ "trace-hash-alignment"
+ ]
+ },
+ "created_at": "2026-05-16T12:15:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
+ },
+ "verification_result": {
+ "verification_id": "verify-scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "bundle_id": "scb-qc-release-v0.1",
+ "verifier": "provability-fabric",
+ "verifier_version": "0.1.0",
+ "status": "ProofChecked",
+ "checks": [
+ {
+ "check_id": "schema-valid",
+ "description": "ScienceClaimBundle conforms to schema",
+ "status": "passed",
+ "details": {}
+ },
+ {
+ "check_id": "trace-hash-alignment",
+ "description": "Receipt trace_hash matches certificate",
+ "status": "passed",
+ "details": {}
+ }
+ ],
+ "created_at": "2026-05-16T12:20:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:4c5439ae358733f9a4c4a58e33fdaed1ab0d29deaaaaaaaaaaaaaaaaaaaaaaaa"
+ },
+ "signer": "provability-fabric",
+ "signed_at": "2026-05-16T12:25:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:6bd6088e18a82f3eef22adaba8db91d0f2942142af35b2a698d5d87b92f1331a",
+ "signed_input_bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
+}
diff --git a/tests/pcs/fixtures/computation-release/signed_science_claim_bundle.json b/tests/pcs/fixtures/computation-release/signed_science_claim_bundle.json
index 169025c..7b9686d 100644
--- a/tests/pcs/fixtures/computation-release/signed_science_claim_bundle.json
+++ b/tests/pcs/fixtures/computation-release/signed_science_claim_bundle.json
@@ -1,175 +1,175 @@
-{
- "schema_version": "v0",
- "signed_bundle_id": "signed-scb-qc-release-v0.1",
- "science_claim_bundle": {
- "bundle_id": "scb-qc-release-v0.1",
- "schema_version": "v0",
- "claim_artifact": {
- "artifact_id": "claim-computation-release-v0.1",
- "artifact_type": "ClaimArtifact.v0",
- "schema_version": "v0",
- "claim_text": "The declared computation run reproduces the pinned dataset under the recorded environment.",
- "claim_kind": "scientific_claim",
- "status": "CertificateChecked",
- "assumption_set_ref": "as-labtrust-qc-v0.1",
- "source_span_refs": [],
- "formal_statement": "",
- "certificate_refs": [
- "witness-computation-demo-v0.1"
- ],
- "runtime_receipt_refs": [
- "receipt-computation-run-001"
- ],
- "created_at": "2026-05-18T12:05:00Z",
- "producer": "scientific-computation-runner",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
- },
- "assumption_set": {
- "assumption_set_id": "as-labtrust-qc-v0.1",
- "schema_version": "v0",
- "created_at": "2026-05-16T12:00:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "assumptions": [
- {
- "assumption_id": "asm-domain-qc-sim",
- "text": "Simulation models a hospital QC release workflow, not a live clinical laboratory.",
- "kind": "domain",
- "status": "HumanReviewed",
- "source_span_refs": [
- "span-qc-release-spec-1"
- ]
- }
- ],
- "human_review_status": "approved",
- "status": "HumanReviewed",
- "signature_or_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
- },
- "runtime_receipts": [
- {
- "receipt_id": "receipt-computation-run-001",
- "schema_version": "v0",
- "run_id": "run-demo-analysis-001",
- "environment": {
- "platform": "linux",
- "python": "3.12",
- "labtrust_version": "0.1.0"
- },
- "started_at": "2026-05-18T12:05:00Z",
- "ended_at": "2026-05-18T12:06:30Z",
- "status": "RuntimeObserved",
- "run_outcome": "passed",
- "final_reason_code": "ok",
- "released": true,
- "events_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
- "policy_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
- "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "producer": "scientific-computation-runner",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/example/scientific-computation-runner",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "input_hashes": {
- "spec": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
- },
- "output_hashes": {
- "trace.json": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
- },
- "signature_or_digest": "sha256:260299295080e7b1a07b2d0b1ef37fff0a96d2c6d0b701263a36a0f2d0aa5081"
- }
- ],
- "certificates": [
- {
- "certificate_id": "witness-computation-demo-v0.1",
- "schema_version": "v0",
- "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
- "spec_hash": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
- "property_id": "scientific_computation.reproducibility_v0",
- "checker": "pcs-core-computation-validator",
- "checker_version": "0.1.0",
- "status": "CertificateChecked",
- "counterexample_ref": null,
- "created_at": "2026-05-16T12:10:00Z",
- "producer": "certifyedge",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
- "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
- "signature_or_digest": "sha256:8b8fc0ca6fa3d4b7646e8e87a454f79371270220209e2a91ee6db9fcc7850425"
- }
- ],
- "evidence_bundle": {
- "bundle_id": "evidence-qc-release-v0.1",
- "schema_version": "v0",
- "claim_refs": [
- "claim-qc-release-v0.1"
- ],
- "assumption_set_refs": [
- "as-labtrust-qc-v0.1"
- ],
- "runtime_receipt_refs": [
- "receipt-qc-release-run-001"
- ],
- "certificate_refs": [
- "cert-trace-qc-release-v0.1"
- ],
- "artifact_hashes": {
- "claim-qc-release-v0.1": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
- },
- "created_at": "2026-05-16T12:12:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
- },
- "verification_policy": {
- "policy_id": "labtrust-v0.1-qc-release",
- "required_checks": [
- "schema-valid",
- "trace-hash-alignment"
- ]
- },
- "created_at": "2026-05-16T12:15:00Z",
- "producer": "labtrust-gym",
- "producer_version": "0.1.0",
- "source_repo": "https://github.com/fraware/LabTrust-Gym",
- "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
- "signature_or_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- },
- "verification_result": {
- "verification_id": "verify-scb-qc-release-v0.1",
- "schema_version": "v0",
- "bundle_id": "scb-qc-release-v0.1",
- "verifier": "provability-fabric",
- "verifier_version": "0.1.0",
- "status": "ProofChecked",
- "checks": [
- {
- "check_id": "schema-valid",
- "description": "ScienceClaimBundle conforms to schema",
- "status": "passed",
- "details": {}
- },
- {
- "check_id": "trace-hash-alignment",
- "description": "Receipt trace_hash matches certificate",
- "status": "passed",
- "details": {}
- }
- ],
- "created_at": "2026-05-16T12:20:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:4c5439ae358733f9a4c4a58e33fdaed1ab0d29deaaaaaaaaaaaaaaaaaaaaaaaa"
- },
- "signer": "provability-fabric",
- "signed_at": "2026-05-16T12:25:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:6bd6088e18a82f3eef22adaba8db91d0f2942142af35b2a698d5d87b92f1331a",
- "signed_input_bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
-}
+{
+ "schema_version": "v0",
+ "signed_bundle_id": "signed-scb-qc-release-v0.1",
+ "science_claim_bundle": {
+ "bundle_id": "scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "claim_artifact": {
+ "artifact_id": "claim-computation-release-v0.1",
+ "artifact_type": "ClaimArtifact.v0",
+ "schema_version": "v0",
+ "claim_text": "The declared computation run reproduces the pinned dataset under the recorded environment.",
+ "claim_kind": "scientific_claim",
+ "status": "CertificateChecked",
+ "assumption_set_ref": "as-labtrust-qc-v0.1",
+ "source_span_refs": [],
+ "formal_statement": "",
+ "certificate_refs": [
+ "witness-computation-demo-v0.1"
+ ],
+ "runtime_receipt_refs": [
+ "receipt-computation-run-001"
+ ],
+ "created_at": "2026-05-18T12:05:00Z",
+ "producer": "scientific-computation-runner",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
+ },
+ "assumption_set": {
+ "assumption_set_id": "as-labtrust-qc-v0.1",
+ "schema_version": "v0",
+ "created_at": "2026-05-16T12:00:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "assumptions": [
+ {
+ "assumption_id": "asm-domain-qc-sim",
+ "text": "Simulation models a hospital QC release workflow, not a live clinical laboratory.",
+ "kind": "domain",
+ "status": "HumanReviewed",
+ "source_span_refs": [
+ "span-qc-release-spec-1"
+ ]
+ }
+ ],
+ "human_review_status": "approved",
+ "status": "HumanReviewed",
+ "signature_or_digest": "sha256:1111111111111111111111111111111111111111111111111111111111111111"
+ },
+ "runtime_receipts": [
+ {
+ "receipt_id": "receipt-computation-run-001",
+ "schema_version": "v0",
+ "run_id": "run-demo-analysis-001",
+ "environment": {
+ "platform": "linux",
+ "python": "3.12",
+ "labtrust_version": "0.1.0"
+ },
+ "started_at": "2026-05-18T12:05:00Z",
+ "ended_at": "2026-05-18T12:06:30Z",
+ "status": "RuntimeObserved",
+ "run_outcome": "passed",
+ "final_reason_code": "ok",
+ "released": true,
+ "events_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333",
+ "policy_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444",
+ "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "producer": "scientific-computation-runner",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/example/scientific-computation-runner",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "input_hashes": {
+ "spec": "sha256:6666666666666666666666666666666666666666666666666666666666666666"
+ },
+ "output_hashes": {
+ "trace.json": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
+ },
+ "signature_or_digest": "sha256:260299295080e7b1a07b2d0b1ef37fff0a96d2c6d0b701263a36a0f2d0aa5081"
+ }
+ ],
+ "certificates": [
+ {
+ "certificate_id": "witness-computation-demo-v0.1",
+ "schema_version": "v0",
+ "trace_hash": "sha256:701f0ede04cba3644c15e7364228b5bcd873fd7b690ccf1a90cc5e6af93fe046",
+ "spec_hash": "sha256:6666666666666666666666666666666666666666666666666666666666666666",
+ "property_id": "scientific_computation.reproducibility_v0",
+ "checker": "pcs-core-computation-validator",
+ "checker_version": "0.1.0",
+ "status": "CertificateChecked",
+ "counterexample_ref": null,
+ "created_at": "2026-05-16T12:10:00Z",
+ "producer": "certifyedge",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/SentinelOps-CI/pcs-core",
+ "source_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
+ "signature_or_digest": "sha256:8b8fc0ca6fa3d4b7646e8e87a454f79371270220209e2a91ee6db9fcc7850425"
+ }
+ ],
+ "evidence_bundle": {
+ "bundle_id": "evidence-qc-release-v0.1",
+ "schema_version": "v0",
+ "claim_refs": [
+ "claim-qc-release-v0.1"
+ ],
+ "assumption_set_refs": [
+ "as-labtrust-qc-v0.1"
+ ],
+ "runtime_receipt_refs": [
+ "receipt-qc-release-run-001"
+ ],
+ "certificate_refs": [
+ "cert-trace-qc-release-v0.1"
+ ],
+ "artifact_hashes": {
+ "claim-qc-release-v0.1": "sha256:2222222222222222222222222222222222222222222222222222222222222222"
+ },
+ "created_at": "2026-05-16T12:12:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:9999999999999999999999999999999999999999999999999999999999999999"
+ },
+ "verification_policy": {
+ "policy_id": "labtrust-v0.1-qc-release",
+ "required_checks": [
+ "schema-valid",
+ "trace-hash-alignment"
+ ]
+ },
+ "created_at": "2026-05-16T12:15:00Z",
+ "producer": "labtrust-gym",
+ "producer_version": "0.1.0",
+ "source_repo": "https://github.com/fraware/LabTrust-Gym",
+ "source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
+ "signature_or_digest": "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
+ },
+ "verification_result": {
+ "verification_id": "verify-scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "bundle_id": "scb-qc-release-v0.1",
+ "verifier": "provability-fabric",
+ "verifier_version": "0.1.0",
+ "status": "ProofChecked",
+ "checks": [
+ {
+ "check_id": "schema-valid",
+ "description": "ScienceClaimBundle conforms to schema",
+ "status": "passed",
+ "details": {}
+ },
+ {
+ "check_id": "trace-hash-alignment",
+ "description": "Receipt trace_hash matches certificate",
+ "status": "passed",
+ "details": {}
+ }
+ ],
+ "created_at": "2026-05-16T12:20:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:4c5439ae358733f9a4c4a58e33fdaed1ab0d29deaaaaaaaaaaaaaaaaaaaaaaaa"
+ },
+ "signer": "provability-fabric",
+ "signed_at": "2026-05-16T12:25:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:6bd6088e18a82f3eef22adaba8db91d0f2942142af35b2a698d5d87b92f1331a",
+ "signed_input_bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
+}
diff --git a/tests/pcs/fixtures/computation-release/verification_result.json b/tests/pcs/fixtures/computation-release/verification_result.json
index e82c8ac..888c27d 100644
--- a/tests/pcs/fixtures/computation-release/verification_result.json
+++ b/tests/pcs/fixtures/computation-release/verification_result.json
@@ -1,33 +1,33 @@
-{
- "verification_id": "verify-scb-qc-release-v0.1",
- "schema_version": "v0",
- "bundle_id": "scb-qc-release-v0.1",
- "verifier": "provability-fabric",
- "verifier_version": "0.1.0",
- "status": "ProofChecked",
- "checks": [
- {
- "check_id": "schema-valid",
- "description": "ScienceClaimBundle conforms to ScienceClaimBundle.v0 schema",
- "status": "passed",
- "details": {}
- },
- {
- "check_id": "trace-hash-alignment",
- "description": "Runtime receipt trace_hash matches certificate trace_hash",
- "status": "passed",
- "details": {
- "trace_hash": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
- }
- }
- ],
- "created_at": "2026-05-16T12:20:00Z",
- "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
- "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
- "signature_or_digest": "sha256:cd11abeaee38bcc8bf8df071290e99abb363e0bf81765cf65498b13d2ec609b4",
- "verified_input": {
- "certificate_id": "cert-tool-use-safety-v0",
- "trace_hash": "sha256:42ce47fca8ec10a9c65c8d9b9384c8be52094c93d46aa9705ce7c2fa2b8c89e4",
- "bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
- }
-}
+{
+ "verification_id": "verify-scb-qc-release-v0.1",
+ "schema_version": "v0",
+ "bundle_id": "scb-qc-release-v0.1",
+ "verifier": "provability-fabric",
+ "verifier_version": "0.1.0",
+ "status": "ProofChecked",
+ "checks": [
+ {
+ "check_id": "schema-valid",
+ "description": "ScienceClaimBundle conforms to ScienceClaimBundle.v0 schema",
+ "status": "passed",
+ "details": {}
+ },
+ {
+ "check_id": "trace-hash-alignment",
+ "description": "Runtime receipt trace_hash matches certificate trace_hash",
+ "status": "passed",
+ "details": {
+ "trace_hash": "sha256:5555555555555555555555555555555555555555555555555555555555555555"
+ }
+ }
+ ],
+ "created_at": "2026-05-16T12:20:00Z",
+ "source_repo": "https://github.com/SentinelOps-CI/provability-fabric",
+ "source_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
+ "signature_or_digest": "sha256:cd11abeaee38bcc8bf8df071290e99abb363e0bf81765cf65498b13d2ec609b4",
+ "verified_input": {
+ "certificate_id": "cert-tool-use-safety-v0",
+ "trace_hash": "sha256:42ce47fca8ec10a9c65c8d9b9384c8be52094c93d46aa9705ce7c2fa2b8c89e4",
+ "bundle_hash": "sha256:21adad1e4817811766d484422d68ac13a056849b04e9143dcb583a87b70a9e30"
+ }
+}
diff --git a/tests/pcs/fixtures/computation-release/workflow_profile.v0.json b/tests/pcs/fixtures/computation-release/workflow_profile.v0.json
index 4a52a29..bdc6f38 100644
--- a/tests/pcs/fixtures/computation-release/workflow_profile.v0.json
+++ b/tests/pcs/fixtures/computation-release/workflow_profile.v0.json
@@ -1,59 +1,59 @@
-{
- "schema_version": "v0",
- "workflow_id": "scientific_computation.reproducibility_v0",
- "domain": "scientific_computation",
- "description": "Proof-carrying computational reproducibility for declared inputs, environment, command, and results.",
- "runtime_artifacts": [
- "DatasetReceipt.v0",
- "EnvironmentReceipt.v0",
- "ComputationRunReceipt.v0",
- "ResultArtifact.v0"
- ],
- "certificate_artifacts": [
- "ComputationWitness.v0"
- ],
- "handoff_sequence": [
- "runtime_to_certificate",
- "certificate_to_bundle",
- "bundle_to_verifier",
- "signed_bundle_to_memory"
- ],
- "required_registry_entries": [
- "DatasetReceipt.v0",
- "EnvironmentReceipt.v0",
- "ComputationRunReceipt.v0",
- "ResultArtifact.v0",
- "ComputationWitness.v0",
- "ScienceClaimBundle.v0",
- "VerificationResult.v0",
- "SignedScienceClaimBundle.v0",
- "ReleaseManifest.v0",
- "HandoffManifest.v0",
- "ReleaseChainValidationResult.v0",
- "WorkflowProfile.v0"
- ],
- "required_admission_profile": "scientific_computation_reproducibility",
- "status_policy": {
- "policy_id": "pcs-v0.1-scientific-computation-lifecycle",
- "description": "Computation witnesses require hash alignment before CertificateChecked export.",
- "allowed_terminal_statuses": [
- "Rejected",
- "Stale"
- ],
- "forbidden_transitions": [
- {
- "from_status": "Rejected",
- "to_status": "ProofChecked"
- }
- ]
- },
- "failure_modes": [
- "dataset_hash_mismatch",
- "environment_hash_mismatch",
- "result_hash_mismatch",
- "missing_code_commit",
- "unreproducible_command"
- ],
- "limitations_notice": "This artifact is a proof-carrying computational reproducibility result. It verifies that declared inputs, environment metadata, code provenance, execution command, and result artifact hashes are internally consistent. It does not prove that the scientific model is true, that the dataset is unbiased, or that the result is externally valid.",
- "signature_or_digest": "sha256:57ec645d429826df128e8226f8a5de20b8d13dee043dfec40c254b002c1b0420"
-}
+{
+ "schema_version": "v0",
+ "workflow_id": "scientific_computation.reproducibility_v0",
+ "domain": "scientific_computation",
+ "description": "Proof-carrying computational reproducibility for declared inputs, environment, command, and results.",
+ "runtime_artifacts": [
+ "DatasetReceipt.v0",
+ "EnvironmentReceipt.v0",
+ "ComputationRunReceipt.v0",
+ "ResultArtifact.v0"
+ ],
+ "certificate_artifacts": [
+ "ComputationWitness.v0"
+ ],
+ "handoff_sequence": [
+ "runtime_to_certificate",
+ "certificate_to_bundle",
+ "bundle_to_verifier",
+ "signed_bundle_to_memory"
+ ],
+ "required_registry_entries": [
+ "DatasetReceipt.v0",
+ "EnvironmentReceipt.v0",
+ "ComputationRunReceipt.v0",
+ "ResultArtifact.v0",
+ "ComputationWitness.v0",
+ "ScienceClaimBundle.v0",
+ "VerificationResult.v0",
+ "SignedScienceClaimBundle.v0",
+ "ReleaseManifest.v0",
+ "HandoffManifest.v0",
+ "ReleaseChainValidationResult.v0",
+ "WorkflowProfile.v0"
+ ],
+ "required_admission_profile": "scientific_computation_reproducibility",
+ "status_policy": {
+ "policy_id": "pcs-v0.1-scientific-computation-lifecycle",
+ "description": "Computation witnesses require hash alignment before CertificateChecked export.",
+ "allowed_terminal_statuses": [
+ "Rejected",
+ "Stale"
+ ],
+ "forbidden_transitions": [
+ {
+ "from_status": "Rejected",
+ "to_status": "ProofChecked"
+ }
+ ]
+ },
+ "failure_modes": [
+ "dataset_hash_mismatch",
+ "environment_hash_mismatch",
+ "result_hash_mismatch",
+ "missing_code_commit",
+ "unreproducible_command"
+ ],
+ "limitations_notice": "This artifact is a proof-carrying computational reproducibility result. It verifies that declared inputs, environment metadata, code provenance, execution command, and result artifact hashes are internally consistent. It does not prove that the scientific model is true, that the dataset is unbiased, or that the result is externally valid.",
+ "signature_or_digest": "sha256:57ec645d429826df128e8226f8a5de20b8d13dee043dfec40c254b002c1b0420"
+}