Skip to content

Commit 002fcde

Browse files
committed
Add protocol-native release producer and stable PCS CLI
1 parent 14e3cd3 commit 002fcde

26 files changed

Lines changed: 1078 additions & 60 deletions

.github/workflows/pcs.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,17 @@ jobs:
5555
run: python examples/pcs_qc_release/scripts/ci_validate_pcs_exports.py
5656
- 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
58+
- name: Verify LabTrust release protocol package
59+
run: |
60+
labtrust verify-release-protocol \
61+
--release-dir examples/pcs_qc_release/release \
62+
--pcs-core pcs-core/examples/labtrust-release
63+
- name: Registry check Phase 2 protocol artifacts
5964
run: |
6065
pcs registry check-artifact examples/pcs_qc_release/release/handoff_to_certifyedge.json
6166
pcs registry check-artifact examples/pcs_qc_release/release/handoff_to_pf.json
67+
pcs validate examples/pcs_qc_release/release/labtrust_release_fragment.json
68+
pcs registry check-artifact examples/pcs_qc_release/release/labtrust_release_fragment.json
6269
- name: Gate release fixtures against canonical pcs-core RC
6370
run: |
6471
python -m labtrust_gym.pcs.sync_pcs_core_rc \

docs/contracts/cli_contract.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,14 @@ 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 |
65+
| emit-handoff-to-certifyedge | `--trace`; `--runtime-receipt`; `--property-id`; `--out`; `--release-mode` | 0 | `handoff_to_certifyedge.json` | examples/pcs_qc_release/RUNBOOK.md |
66+
| emit-handoff-to-pf | `--bundle`; `--out`; `--release-mode` | 0 | `handoff_to_pf.json` | examples/pcs_qc_release/RUNBOOK.md |
67+
| emit-handoff | `--kind …` (generic; prefer dedicated commands above) | 0 | `HandoffManifest.v0` JSON | examples/pcs_qc_release/RUNBOOK.md |
6668
| 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 |
69+
| verify-release-protocol | `--release-dir <dir>`; optional `--pcs-core <dir>` | 0 | (stderr OK labels) | examples/pcs_qc_release/RUNBOOK.md |
70+
| verify-release-fixtures | alias for `verify-release-protocol` | 0 | (stderr OK labels) | examples/pcs_qc_release/RUNBOOK.md |
71+
| regenerate-release-protocol | `--out <release-dir>`; `--certifyedge-bin`; optional `--pcs-core` | 0 | Full LabTrust protocol package from demo + CertifyEdge | examples/pcs_qc_release/RUNBOOK.md |
72+
| regenerate-release-chain | alias for `regenerate-release-protocol` | 0 | same as above | examples/pcs_qc_release/RUNBOOK.md |
6973

7074
**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.
7175

examples/pcs_qc_release/RUNBOOK.md

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -262,29 +262,37 @@ bash examples/pcs_qc_release/scripts/generate_release_candidate.sh
262262
Produces `trace.json`, `runtime_receipt.json`, `trace_certificate.json`, pending/certified bundles,
263263
`handoff_to_certifyedge.json`, `handoff_to_pf.json`, `labtrust_release_fragment.json`, and `manifest.json`.
264264

265-
**Phase 2 protocol producer (LabTrust-owned, not mirror-only):**
265+
**Phase 2 protocol producer (stable CLI — one command per artifact):**
266266

267267
```bash
268-
labtrust emit-handoff --kind runtime-to-certificate \
268+
labtrust emit-handoff-to-certifyedge \
269269
--trace examples/pcs_qc_release/release/trace.json \
270-
--receipt examples/pcs_qc_release/release/runtime_receipt.json \
270+
--runtime-receipt examples/pcs_qc_release/release/runtime_receipt.json \
271+
--property-id hospital_lab.qc_release \
271272
--out examples/pcs_qc_release/release/handoff_to_certifyedge.json
272273

273-
labtrust emit-handoff --kind bundle-to-verifier \
274+
labtrust emit-handoff-to-pf \
274275
--bundle examples/pcs_qc_release/release/science_claim_bundle.certified.json \
275276
--out examples/pcs_qc_release/release/handoff_to_pf.json
276277

277278
labtrust emit-release-fragment \
278-
--release-dir examples/pcs_qc_release/release
279+
--release-dir examples/pcs_qc_release/release \
280+
--out examples/pcs_qc_release/release/labtrust_release_fragment.json
279281

280-
labtrust verify-release-fixtures \
282+
labtrust verify-release-protocol \
281283
--release-dir examples/pcs_qc_release/release \
282-
--pcs-core ../pcs-core/examples/labtrust-release
284+
--pcs-core ../pcs-core
283285

284-
labtrust regenerate-release-chain \
285-
--out examples/pcs_qc_release/release \
286+
labtrust regenerate-release-protocol \
287+
--pcs-core ../pcs-core \
286288
--certifyedge-bin certifyedge \
287-
--pcs-core ../pcs-core/examples/labtrust-release
289+
--out examples/pcs_qc_release/release
290+
```
291+
292+
One-shot shell wrapper (same as above, sets `PCS_DETERMINISTIC=1`):
293+
294+
```bash
295+
bash examples/pcs_qc_release/scripts/generate_release_protocol.sh
288296
```
289297

290298
After pcs-core updates, re-align committed `release/` from canonical fixtures:
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-17T22:23:22Z",
5-
"pcs_core_commit": "b133c2ed32293b02c4e28971da7b3a7fffcedc2a",
4+
"generated_at": "2026-05-17T22:32:01Z",
5+
"pcs_core_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
66
"labtrust_gym_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
77
"certifyedge_commit": "cb6848001e2e60a484e04eba5ad6be3fe2e4eccc",
88
"provability_fabric_commit": "0f659b90c80c46a6bbfd51b0d37ea723b032fb9d",
9-
"scientific_memory_commit": "226ad64eb61c085cfa6f6dcc7b4d0d752f615e5e",
9+
"scientific_memory_commit": "c4259a4cb79fe7b195fd156feb346c08fc334d33",
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:6a446318798084af70f0ebf62866b28a8b69716a483f3054c7f71bc3c8098fee"
18+
"scientific_memory_import_report.json": "sha256:0c04ffde0926302aca32de7fc4425d457ee59e00481aa9b73e58dc5107c3cd6b"
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-17T22:23:22Z",
12+
"generated_at": "2026-05-17T22:32:01Z",
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": "b133c2ed32293b02c4e28971da7b3a7fffcedc2a",
16+
"pcs_core_commit": "a361fd2b388f88cdbc9e4e4691ae49dba714ab6c",
1717
"schema_version": "v0",
1818
"trace_hash": "sha256:c3e8a3dc4ad86d533de1dfa4ae7fe2a338c2cff3c945404c96a75216524d58cd"
1919
}

examples/pcs_qc_release/release/handoff/handoff_to_certifyedge.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-17T22:25:34Z",
2+
"created_at": "2026-05-18T07:36:56Z",
33
"expected_outputs": {
44
"trace_certificate.json": {
55
"artifact_type": "TraceCertificate.v0"
@@ -23,7 +23,7 @@
2323
"trace_hash": "sha256:c3e8a3dc4ad86d533de1dfa4ae7fe2a338c2cff3c945404c96a75216524d58cd"
2424
},
2525
"schema_version": "v0",
26-
"signature_or_digest": "sha256:3f680b374888794ca04a42593ab3fd7865f429dc1893ebc364bc8d553a0e8425",
26+
"signature_or_digest": "sha256:9bf325edd0ddcd610e9b2cc5daac1a7a9a87e11f6b6bf99ce6f379207614f382",
2727
"source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
2828
"source_repo": "https://github.com/fraware/LabTrust-Gym",
2929
"status": "Validated",

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-17T22:25:34Z",
2+
"created_at": "2026-05-18T07:36:56Z",
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:88521a3bf646fece794df9891dc01dc94cdf1506ea9fa05edfa4c50adeed4670",
26+
"signature_or_digest": "sha256:e81b01d612ca9c2faec24fe45ee8e26ceb6b2aef6d3e0d4004b1eb4d8f8f1077",
2727
"source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
2828
"source_repo": "https://github.com/fraware/LabTrust-Gym",
2929
"status": "Validated",

examples/pcs_qc_release/release/handoff_to_certifyedge.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-17T22:25:34Z",
2+
"created_at": "2026-05-18T07:36:56Z",
33
"expected_outputs": {
44
"trace_certificate.json": {
55
"artifact_type": "TraceCertificate.v0"
@@ -23,7 +23,7 @@
2323
"trace_hash": "sha256:c3e8a3dc4ad86d533de1dfa4ae7fe2a338c2cff3c945404c96a75216524d58cd"
2424
},
2525
"schema_version": "v0",
26-
"signature_or_digest": "sha256:3f680b374888794ca04a42593ab3fd7865f429dc1893ebc364bc8d553a0e8425",
26+
"signature_or_digest": "sha256:9bf325edd0ddcd610e9b2cc5daac1a7a9a87e11f6b6bf99ce6f379207614f382",
2727
"source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
2828
"source_repo": "https://github.com/fraware/LabTrust-Gym",
2929
"status": "Validated",

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-17T22:25:34Z",
2+
"created_at": "2026-05-18T07:36:56Z",
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:88521a3bf646fece794df9891dc01dc94cdf1506ea9fa05edfa4c50adeed4670",
26+
"signature_or_digest": "sha256:e81b01d612ca9c2faec24fe45ee8e26ceb6b2aef6d3e0d4004b1eb4d8f8f1077",
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: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
"artifacts": {
33
"handoff_to_certifyedge.json": {
44
"artifact_type": "HandoffManifest.v0",
5-
"sha256": "sha256:5d3ebb93b160a6e0af358c67088209f2592c0d954825db82ed580f211868cc99"
5+
"sha256": "sha256:9ab20126abfbd2c0c3a601ce94cd8c027b027d7009bf6560ce4e52a20cd13c6d"
66
},
77
"handoff_to_pf.json": {
88
"artifact_type": "HandoffManifest.v0",
9-
"sha256": "sha256:ffc53bcb458422f49d1885c1e6d4255a04ada28c6bb9cd727526ab746ed66856"
9+
"sha256": "sha256:c1f08d9cf1e3ca9fb866073bc62795b0c9b76338dd4f9235a76bc444b0de9f9a"
1010
},
1111
"runtime_receipt.json": {
1212
"artifact_type": "RuntimeReceipt.v0",
@@ -27,7 +27,7 @@
2727
},
2828
"component": "LabTrust-Gym",
2929
"schema_version": "v0",
30-
"signature_or_digest": "sha256:90d003e94159256fec4d088282f4a71d6abd7fd93f08e3620ad734efc8953762",
30+
"signature_or_digest": "sha256:17769156365234a22969e11ba4ee3dd17bbc42afbfb752455463a40b1dae89fb",
3131
"source_commit": "4c5439ae358733f9a4c4a58e33fdaed1ab0d29de",
3232
"source_repo": "https://github.com/fraware/LabTrust-Gym"
3333
}

0 commit comments

Comments
 (0)