Skip to content

Commit 19dfbb7

Browse files
frawarecursoragent
andcommitted
Add PCS Phase 2 runtime protocol producer and handoffs
Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 558ee2b commit 19dfbb7

27 files changed

Lines changed: 984 additions & 93 deletions

.github/workflows/pcs.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,12 @@ jobs:
5353
run: python -m pcs_core.hash_vectors --verify
5454
- name: Strict pcs-core validate exported artifacts + committed goldens
5555
run: python examples/pcs_qc_release/scripts/ci_validate_pcs_exports.py
56-
- name: Validate committed release fixtures (pcs-core)
56+
- name: Validate committed release fixtures (pcs-core + registry)
5757
run: python examples/pcs_qc_release/scripts/ci_validate_release_fixtures.py
58+
- name: Registry check Phase 2 handoff manifests
59+
run: |
60+
pcs registry check-artifact examples/pcs_qc_release/release/handoff_to_certifyedge.json
61+
pcs registry check-artifact examples/pcs_qc_release/release/handoff_to_pf.json
5862
- name: Gate release fixtures against canonical pcs-core RC
5963
run: |
6064
python -m labtrust_gym.pcs.sync_pcs_core_rc \

docs/contracts/cli_contract.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ This document defines the contract for all LabTrust-Gym CLI commands: exit codes
6262
| attach-certificate | `--bundle <pending> --certificate trace_certificate.json --out certified.json` | 0 | Certified `ScienceClaimBundle.v0` | docs/pcs_export.md |
6363
| validate-pcs | `--run <dir>` or `--artifact <json>` | 0 | (stderr OK message) | pcs-core validation |
6464
| export-pcs-handoff | `--out handoff/`; optional `PCS_DETERMINISTIC=1` | 0 | `handoff/manifest.json`, `certifyedge/`, `provability_fabric/` | docs/pcs_handoff.md |
65+
| emit-handoff | `--kind runtime-to-certificate \| bundle-to-verifier`; `--trace` or `--bundle`; `--out <path>`; `--release-mode` | 0 | `HandoffManifest.v0` JSON | examples/pcs_qc_release/RUNBOOK.md |
66+
| emit-release-fragment | `--release-dir <dir>`; optional `--out` | 0 | `labtrust_release_fragment.json` (`ComponentReleaseFragment.v0`) | examples/pcs_qc_release/RUNBOOK.md |
67+
| verify-release-fixtures | `--release-dir <dir>`; optional `--pcs-core <dir>` | 0 | (stderr OK labels) | examples/pcs_qc_release/RUNBOOK.md |
68+
| regenerate-release-chain | `--out <release-dir>`; `--certifyedge-bin`; optional `--pcs-core`, `--certifyedge-spec` | 0 | Full `release/` chain from demo + CertifyEdge | examples/pcs_qc_release/RUNBOOK.md |
6569

6670
**PCS CI scripts (not `labtrust` subcommands):** `examples/pcs_qc_release/scripts/run_pcs_ci_local.{sh,ps1}` runs `pytest tests/pcs` plus `ci_validate_pcs_exports.py` (matches `.github/workflows/pcs.yml`). `generate_golden.py` regenerates `expected/` in deterministic mode.
6771

examples/pcs_qc_release/RUNBOOK.md

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,13 +259,47 @@ export PCS_DETERMINISTIC=1
259259
bash examples/pcs_qc_release/scripts/generate_release_candidate.sh
260260
```
261261

262-
Produces `trace.json`, `runtime_receipt.json`, `trace_certificate.json`, pending/certified bundles, and `manifest.json`.
262+
Produces `trace.json`, `runtime_receipt.json`, `trace_certificate.json`, pending/certified bundles,
263+
`handoff_to_certifyedge.json`, `handoff_to_pf.json`, `labtrust_release_fragment.json`, and `manifest.json`.
264+
265+
**Phase 2 protocol producer (LabTrust-owned, not mirror-only):**
266+
267+
```bash
268+
labtrust emit-handoff --kind runtime-to-certificate \
269+
--trace examples/pcs_qc_release/release/trace.json \
270+
--receipt examples/pcs_qc_release/release/runtime_receipt.json \
271+
--out examples/pcs_qc_release/release/handoff_to_certifyedge.json
272+
273+
labtrust emit-handoff --kind bundle-to-verifier \
274+
--bundle examples/pcs_qc_release/release/science_claim_bundle.certified.json \
275+
--out examples/pcs_qc_release/release/handoff_to_pf.json
276+
277+
labtrust emit-release-fragment \
278+
--release-dir examples/pcs_qc_release/release
279+
280+
labtrust verify-release-fixtures \
281+
--release-dir examples/pcs_qc_release/release \
282+
--pcs-core ../pcs-core/examples/labtrust-release
283+
284+
labtrust regenerate-release-chain \
285+
--out examples/pcs_qc_release/release \
286+
--certifyedge-bin certifyedge \
287+
--pcs-core ../pcs-core/examples/labtrust-release
288+
```
289+
290+
After pcs-core updates, re-align committed `release/` from canonical fixtures:
291+
292+
```bash
293+
python -m labtrust_gym.pcs.sync_pcs_core_rc --pcs-core ../pcs-core/examples/labtrust-release
294+
```
263295

264296
Validate:
265297

266298
```bash
267299
pytest tests/pcs/test_release_fixtures.py -q # skips if release/ not populated
268300
pytest tests/pcs/test_pcs_release_contract.py -q
301+
pytest tests/pcs/test_release_protocol_producer.py -q
302+
python examples/pcs_qc_release/scripts/ci_validate_release_fixtures.py
269303
python examples/pcs_qc_release/scripts/ci_validate_pcs_exports.py
270304
```
271305

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"schema_version": "v0",
33
"release_candidate": "pcs-v0.1.0-rc1",
4-
"generated_at": "2026-05-17T21:13:26Z",
5-
"pcs_core_commit": "19c715455ac97bc50d7b091aec577b21dd19d930",
4+
"generated_at": "2026-05-17T22:23:22Z",
5+
"pcs_core_commit": "b133c2ed32293b02c4e28971da7b3a7fffcedc2a",
66
"labtrust_gym_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
77
"certifyedge_commit": "cb6848001e2e60a484e04eba5ad6be3fe2e4eccc",
88
"provability_fabric_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
9-
"scientific_memory_commit": "9a74ba6f4a621e7000868b9283a01257350da9ea",
9+
"scientific_memory_commit": "226ad64eb61c085cfa6f6dcc7b4d0d752f615e5e",
1010
"artifacts": {
1111
"trace.json": "sha256:f99eb0a90cd2b9819816a25ec4e938663d26ae8d40868cd8188665e940f7ad5c",
1212
"runtime_receipt.json": "sha256:8e642b59657d70b408be354323006421b963bb0c9fc9514f6abc7aab305345b6",
@@ -15,6 +15,6 @@
1515
"science_claim_bundle.certified.json": "sha256:9b42d792199eb6f358d26f822699f0ed65bb4366eee306d4958d42121c656833",
1616
"verification_result.json": "sha256:3b4b1215b4be6a945c3b99bb548e33a08527981290e7be1ab1da52b67ad8ba14",
1717
"signed_science_claim_bundle.json": "sha256:d0ab55f964227c1350b29fe359dcaf61d04ad6b7dfcf1db351b717e1c47aab43",
18-
"scientific_memory_import_report.json": "sha256:95aa4cd87d09b896d5a2150fae7b9c5c945eb14d056c70e903d2847808e7cb5a"
18+
"scientific_memory_import_report.json": "sha256:6a446318798084af70f0ebf62866b28a8b69716a483f3054c7f71bc3c8098fee"
1919
}
2020
}

examples/pcs_qc_release/release/handoff/RELEASE_HANDOFF_MANIFEST.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
"certificate_id": "cert-trace-886c95f0-5d63-42d6-aa13-5891c12c5a6a",
1010
"certified_bundle_id": "scb-pcs-qc-release-v0.1",
1111
"certifyedge_commit": "cb6848001e2e60a484e04eba5ad6be3fe2e4eccc",
12-
"generated_at": "2026-05-17T21:13:26Z",
12+
"generated_at": "2026-05-17T22:23:22Z",
1313
"generator": "labtrust_gym.pcs.sync_pcs_core_rc",
1414
"handoff_id": "labtrust-qc-release-v0.1-4c5439ae3587",
1515
"labtrust_gym_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
16-
"pcs_core_commit": "19c715455ac97bc50d7b091aec577b21dd19d930",
16+
"pcs_core_commit": "b133c2ed32293b02c4e28971da7b3a7fffcedc2a",
1717
"schema_version": "v0",
1818
"trace_hash": "sha256:c3e8a3dc4ad86d533de1dfa4ae7fe2a338c2cff3c945404c96a75216524d58cd"
1919
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"created_at": "2026-05-17T22:25:34Z",
3+
"expected_outputs": {
4+
"trace_certificate.json": {
5+
"artifact_type": "TraceCertificate.v0"
6+
}
7+
},
8+
"from_component": "LabTrust-Gym",
9+
"handoff_id": "handoff-labtrust-runtime-to-certifyedge-rc",
10+
"handoff_kind": "runtime_to_certificate",
11+
"input_artifacts": {
12+
"runtime_receipt.json": {
13+
"artifact_type": "RuntimeReceipt.v0",
14+
"sha256": "sha256:8e642b59657d70b408be354323006421b963bb0c9fc9514f6abc7aab305345b6"
15+
},
16+
"trace.json": {
17+
"artifact_type": "LabTrust.Trace.v0",
18+
"sha256": "sha256:f99eb0a90cd2b9819816a25ec4e938663d26ae8d40868cd8188665e940f7ad5c"
19+
}
20+
},
21+
"invariants": {
22+
"property_id": "hospital_lab.qc_release",
23+
"trace_hash": "sha256:c3e8a3dc4ad86d533de1dfa4ae7fe2a338c2cff3c945404c96a75216524d58cd"
24+
},
25+
"schema_version": "v0",
26+
"signature_or_digest": "sha256:3f680b374888794ca04a42593ab3fd7865f429dc1893ebc364bc8d553a0e8425",
27+
"source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
28+
"source_repo": "https://github.com/fraware/LabTrust-Gym",
29+
"status": "Validated",
30+
"to_component": "CertifyEdge"
31+
}

examples/pcs_qc_release/release/handoff/handoff_to_pf.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"created_at": "2026-05-17T21:22:22Z",
2+
"created_at": "2026-05-17T22:25:34Z",
33
"expected_outputs": {
44
"signed_science_claim_bundle.json": {
55
"artifact_type": "SignedScienceClaimBundle.v0"
@@ -23,7 +23,7 @@
2323
"trace_hash": "sha256:c3e8a3dc4ad86d533de1dfa4ae7fe2a338c2cff3c945404c96a75216524d58cd"
2424
},
2525
"schema_version": "v0",
26-
"signature_or_digest": "sha256:21421c76e5307b056f6f8b6f4ad39abdd1bbddeeba6263dd9790f6da3074adf1",
26+
"signature_or_digest": "sha256:88521a3bf646fece794df9891dc01dc94cdf1506ea9fa05edfa4c50adeed4670",
2727
"source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
2828
"source_repo": "https://github.com/fraware/LabTrust-Gym",
2929
"status": "Validated",
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"created_at": "2026-05-17T22:25:34Z",
3+
"expected_outputs": {
4+
"trace_certificate.json": {
5+
"artifact_type": "TraceCertificate.v0"
6+
}
7+
},
8+
"from_component": "LabTrust-Gym",
9+
"handoff_id": "handoff-labtrust-runtime-to-certifyedge-rc",
10+
"handoff_kind": "runtime_to_certificate",
11+
"input_artifacts": {
12+
"runtime_receipt.json": {
13+
"artifact_type": "RuntimeReceipt.v0",
14+
"sha256": "sha256:8e642b59657d70b408be354323006421b963bb0c9fc9514f6abc7aab305345b6"
15+
},
16+
"trace.json": {
17+
"artifact_type": "LabTrust.Trace.v0",
18+
"sha256": "sha256:f99eb0a90cd2b9819816a25ec4e938663d26ae8d40868cd8188665e940f7ad5c"
19+
}
20+
},
21+
"invariants": {
22+
"property_id": "hospital_lab.qc_release",
23+
"trace_hash": "sha256:c3e8a3dc4ad86d533de1dfa4ae7fe2a338c2cff3c945404c96a75216524d58cd"
24+
},
25+
"schema_version": "v0",
26+
"signature_or_digest": "sha256:3f680b374888794ca04a42593ab3fd7865f429dc1893ebc364bc8d553a0e8425",
27+
"source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
28+
"source_repo": "https://github.com/fraware/LabTrust-Gym",
29+
"status": "Validated",
30+
"to_component": "CertifyEdge"
31+
}

examples/pcs_qc_release/release/handoff_to_pf.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"created_at": "2026-05-17T21:17:59Z",
2+
"created_at": "2026-05-17T22:25:34Z",
33
"expected_outputs": {
44
"signed_science_claim_bundle.json": {
55
"artifact_type": "SignedScienceClaimBundle.v0"
@@ -23,7 +23,7 @@
2323
"trace_hash": "sha256:c3e8a3dc4ad86d533de1dfa4ae7fe2a338c2cff3c945404c96a75216524d58cd"
2424
},
2525
"schema_version": "v0",
26-
"signature_or_digest": "sha256:af5e17ba7c1491acefe9aa1625cd16c5778e48c09d0114411363f25511a449db",
26+
"signature_or_digest": "sha256:88521a3bf646fece794df9891dc01dc94cdf1506ea9fa05edfa4c50adeed4670",
2727
"source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
2828
"source_repo": "https://github.com/fraware/LabTrust-Gym",
2929
"status": "Validated",

examples/pcs_qc_release/release/labtrust_release_fragment.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
{
22
"artifacts": {
3+
"handoff_to_certifyedge.json": {
4+
"artifact_type": "HandoffManifest.v0",
5+
"sha256": "sha256:5d3ebb93b160a6e0af358c67088209f2592c0d954825db82ed580f211868cc99"
6+
},
37
"handoff_to_pf.json": {
48
"artifact_type": "HandoffManifest.v0",
5-
"sha256": "sha256:6988711c6d97eb992cc9862a691a25e699cae1dd65b578cce1cb842cced2ffc4"
9+
"sha256": "sha256:ffc53bcb458422f49d1885c1e6d4255a04ada28c6bb9cd727526ab746ed66856"
610
},
711
"runtime_receipt.json": {
812
"artifact_type": "RuntimeReceipt.v0",
@@ -17,12 +21,13 @@
1721
"sha256": "sha256:677e0171743c4c129ad4b1931c62ba3fa0323f10c7d6d8d76290f8a4aabae45e"
1822
},
1923
"trace.json": {
20-
"artifact_type": "Trace",
24+
"artifact_type": "LabTrust.Trace.v0",
2125
"sha256": "sha256:f99eb0a90cd2b9819816a25ec4e938663d26ae8d40868cd8188665e940f7ad5c"
2226
}
2327
},
2428
"component": "LabTrust-Gym",
2529
"schema_version": "v0",
30+
"signature_or_digest": "sha256:90d003e94159256fec4d088282f4a71d6abd7fd93f08e3620ad734efc8953762",
2631
"source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
2732
"source_repo": "https://github.com/fraware/LabTrust-Gym"
2833
}

0 commit comments

Comments
 (0)