workspai 0.67.0 → 0.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -18
- package/contracts/cli-runtime-command-inventory.v1.snapshot.json +459 -0
- package/contracts/extension-cli-compatibility.v1.json +11 -0
- package/contracts/published-contract-catalog.v1.json +55 -0
- package/contracts/runtime-command-surface.v1.json +282 -0
- package/contracts/workspace-activity-board.v1.json +6 -0
- package/contracts/workspace-activity-event.v1.json +31 -1
- package/contracts/workspace-activity-monitor-snapshot.v1.json +35 -2
- package/contracts/workspace-intelligence/architecture-change-lease.v1.json +50 -0
- package/contracts/workspace-intelligence/architecture-surprise-report.v1.json +46 -0
- package/contracts/workspace-intelligence/change-operation-result.v1.json +43 -0
- package/contracts/workspace-intelligence/decision-checkpoint.v1.json +18 -0
- package/contracts/workspace-intelligence/decision-event.v1.json +134 -0
- package/contracts/workspace-intelligence/decision-transaction.v1.json +29 -0
- package/contracts/workspace-intelligence/goal-index.v1.json +13 -0
- package/contracts/workspace-intelligence/goal-pack.v1.json +2 -1
- package/contracts/workspace-intelligence/predicted-architecture-change.v1.json +34 -0
- package/contracts/workspace-intelligence/proof-carrying-change-capsule-export.v1.json +14 -0
- package/contracts/workspace-intelligence/proof-carrying-change-capsule-validation.v1.json +16 -0
- package/contracts/workspace-intelligence/proof-carrying-change-capsule.v1.json +62 -0
- package/contracts/workspace-intelligence/proof-carrying-change-list.v1.json +80 -0
- package/contracts/workspace-intelligence/workspace-knowledge-graph-change-overlay.v1.json +9 -1
- package/contracts/workspace-intelligence/workspace-knowledge-search.v1.json +1 -0
- package/dist/analyze-GPYPXXRT.js +1 -0
- package/dist/{artifact-remediation-plan-GFFHC2ZU.js → artifact-remediation-plan-JHHZ4L24.js} +1 -1
- package/dist/autopilot-release-FL47VMF7.js +1 -0
- package/dist/capabilities-command-MYSLJIYS.js +1 -0
- package/dist/chunk-25AWHAB5.js +2 -0
- package/dist/chunk-2LZWBUJD.js +1 -0
- package/dist/{chunk-KENOAC2Q.js → chunk-37ZLNFV5.js} +2 -2
- package/dist/{chunk-CZVT7T2X.js → chunk-3G5FF2JZ.js} +1 -1
- package/dist/chunk-3HFFKW4Q.js +2 -0
- package/dist/{chunk-BHM6RHTA.js → chunk-3WHE7V4M.js} +1 -1
- package/dist/{chunk-NVND4727.js → chunk-46QH3ZVI.js} +1 -1
- package/dist/{chunk-B4IVVTMQ.js → chunk-64XWHDZ3.js} +1 -1
- package/dist/chunk-A3MYO55A.js +3 -0
- package/dist/chunk-ABMB6MJT.js +1 -0
- package/dist/chunk-AD4ZY3RF.js +12 -0
- package/dist/chunk-BM2F5C4J.js +1 -0
- package/dist/chunk-COICGD62.js +1 -0
- package/dist/{chunk-5OA33JH2.js → chunk-D5LLTUTY.js} +1 -1
- package/dist/{chunk-4WVOAX2V.js → chunk-DWL3PPLA.js} +1 -1
- package/dist/{chunk-H77ZNH5O.js → chunk-EBEAJIBI.js} +1 -1
- package/dist/chunk-EBQS5T7Q.js +7 -0
- package/dist/{chunk-VI4ZRAY6.js → chunk-EG6EZ7HW.js} +1 -1
- package/dist/chunk-ERVWW5HX.js +1 -0
- package/dist/chunk-EZPLMAW2.js +1 -0
- package/dist/chunk-FIK343LI.js +1 -0
- package/dist/chunk-GSSJJS5M.js +6 -0
- package/dist/{chunk-SRLWHOLF.js → chunk-GYN6RPNU.js} +1 -1
- package/dist/{chunk-6E2Y3XGT.js → chunk-HCFOVANQ.js} +1 -1
- package/dist/chunk-I3UCODXU.js +1 -0
- package/dist/{chunk-2RPFCBS4.js → chunk-IGJA6GBQ.js} +1 -1
- package/dist/{chunk-FX5J6JCK.js → chunk-IVYPC36J.js} +1 -1
- package/dist/chunk-K33JJVQZ.js +2 -0
- package/dist/{chunk-L5Q2S5GY.js → chunk-KFTJVVJR.js} +1 -1
- package/dist/chunk-LDBULT2T.js +4 -0
- package/dist/{chunk-THIG2YQP.js → chunk-M37ALD4V.js} +1 -1
- package/dist/{chunk-HQLBO23O.js → chunk-MAWHHHU3.js} +5 -5
- package/dist/chunk-MBICKDYP.js +1 -0
- package/dist/{chunk-QMQBX3RV.js → chunk-MGL6DBOR.js} +1 -1
- package/dist/chunk-MHQHRMKU.js +5 -0
- package/dist/{chunk-KQ2TMI26.js → chunk-N2Q4MSSP.js} +64 -64
- package/dist/chunk-N4B2M44I.js +1 -0
- package/dist/chunk-NSH7TTSV.js +1 -0
- package/dist/chunk-O5XQP5E7.js +1 -0
- package/dist/chunk-ODK4LCEL.js +1 -0
- package/dist/chunk-OU3BBWH5.js +49 -0
- package/dist/chunk-OZXCNVGW.js +2 -0
- package/dist/{chunk-TABXSDTR.js → chunk-PKKSRXUS.js} +1 -1
- package/dist/{chunk-SLFOUSRW.js → chunk-QYEQVNBF.js} +1 -1
- package/dist/chunk-RVOW3BHQ.js +2 -0
- package/dist/chunk-TKXRP2B4.js +1 -0
- package/dist/chunk-UNXG3ZFV.js +1 -0
- package/dist/chunk-UW4SESKD.js +2 -0
- package/dist/{chunk-2MTJWPQ4.js → chunk-V52R2W2Q.js} +1 -1
- package/dist/chunk-V6TIT6M3.js +157 -0
- package/dist/chunk-VNKAISFE.js +8 -0
- package/dist/chunk-W37NOQVG.js +1 -0
- package/dist/chunk-W6WRT77T.js +1 -0
- package/dist/chunk-WHR5SL33.js +4 -0
- package/dist/{chunk-HYE5UHPV.js → chunk-WZ5V5U2K.js} +1 -1
- package/dist/chunk-XPGCFVGC.js +4 -0
- package/dist/chunk-YKY4JFCF.js +1 -0
- package/dist/{chunk-VWBMDGPY.js → chunk-YWZBGSFE.js} +3 -3
- package/dist/chunk-YZL7ZY7J.js +2 -0
- package/dist/{create-72ITVZXV.js → create-GWBQ74ZI.js} +1 -1
- package/dist/{demo-kit-5UQH2OXC.js → demo-kit-RKTHTXHJ.js} +1 -1
- package/dist/doctor-OQAXSMEM.js +1 -0
- package/dist/{dotnet-webapi-clean-YEHYIGOT.js → dotnet-webapi-clean-XL4IBUQV.js} +1 -1
- package/dist/goal-lifecycle-YWBVQ2DF.js +1 -0
- package/dist/goal-pack-KUXPZVNO.js +1 -0
- package/dist/{gofiber-standard-C44IIQYH.js → gofiber-standard-OHHMCNMJ.js} +1 -1
- package/dist/{gogin-standard-X7VKACVR.js → gogin-standard-BAZXPOKL.js} +1 -1
- package/dist/index.d.ts +35 -2
- package/dist/index.js +239 -239
- package/dist/{live-command-5VXPR43F.js → live-command-GNAASZ7U.js} +1 -1
- package/dist/pipeline-PGB5TEV3.js +5 -0
- package/dist/{project-agent-entry-5IUBEREI.js → project-agent-entry-H3JAGNLS.js} +1 -1
- package/dist/{project-intelligence-lens-LQCN65P2.js → project-intelligence-lens-7NMKHV5N.js} +1 -1
- package/dist/{project-test-coverage-KD4LLFGV.js → project-test-coverage-3DKZKLWY.js} +1 -1
- package/dist/proof-carrying-change-QFH7WI2E.js +1 -0
- package/dist/{rust-axum-JKZTZDRZ.js → rust-axum-CCJ6UCBW.js} +1 -1
- package/dist/{springboot-standard-PI4FLTAN.js → springboot-standard-M5JQEJML.js} +1 -1
- package/dist/verified-goal-7XHRWYSE.js +1 -0
- package/dist/{workspace-5W7FYGDQ.js → workspace-TJHCETBV.js} +1 -1
- package/dist/{workspace-agent-sync-OZCDQORK.js → workspace-agent-sync-Z35NTXCB.js} +1 -1
- package/dist/{workspace-archive-NOSGRKRZ.js → workspace-archive-OSMU3CK6.js} +1 -1
- package/dist/{workspace-context-L65BR5L6.js → workspace-context-KNJQUJWC.js} +1 -1
- package/dist/{workspace-contract-JYHNEJPV.js → workspace-contract-VIUQT5SZ.js} +1 -1
- package/dist/workspace-explain-HM6GMK26.js +1 -0
- package/dist/workspace-explain-contract-KV7RTEJU.js +1 -0
- package/dist/{workspace-feedback-MWGCT5R2.js → workspace-feedback-YSPEGCON.js} +1 -1
- package/dist/{workspace-foundation-VIB3PXNH.js → workspace-foundation-PLXFPI3J.js} +1 -1
- package/dist/{workspace-graph-stream-45JHE4MG.js → workspace-graph-stream-FNRQ2FTB.js} +1 -1
- package/dist/workspace-graph-token-efficiency-WNAFAN2F.js +1 -0
- package/dist/{workspace-history-JKW3VJO3.js → workspace-history-HDDFG6LH.js} +1 -1
- package/dist/{workspace-intelligence-3C47PK4L.js → workspace-intelligence-QLSD5EEV.js} +1 -1
- package/dist/{workspace-intelligence-benchmark-SRDIHX3X.js → workspace-intelligence-benchmark-S5OXVNLC.js} +1 -1
- package/dist/{workspace-intelligence-evaluation-OJIQS5SN.js → workspace-intelligence-evaluation-QDSOOUHH.js} +1 -1
- package/dist/{workspace-intelligence-runner-OWN5ZI6W.js → workspace-intelligence-runner-4EW4T2OW.js} +1 -1
- package/dist/workspace-intelligence-runtime-registry-ZLPF7BAY.js +1 -0
- package/dist/{workspace-knowledge-graph-AKG5NUU6.js → workspace-knowledge-graph-EEOW5VAJ.js} +1 -1
- package/dist/workspace-knowledge-graph-change-overlay-FIIAFLO6.js +1 -0
- package/dist/{workspace-knowledge-graph-contract-X52KXBXJ.js → workspace-knowledge-graph-contract-FVX5T7SU.js} +1 -1
- package/dist/{workspace-knowledge-graph-query-DXA4CROE.js → workspace-knowledge-graph-query-WHCGPBGS.js} +1 -1
- package/dist/workspace-knowledge-graph-snapshot-X347REDB.js +1 -0
- package/dist/workspace-mcp-serve-NQ42PE2I.js +3 -0
- package/dist/{workspace-model-R4ISKDB2.js → workspace-model-NCOOY5LC.js} +1 -1
- package/dist/{workspace-onboarding-Y5RPEFUD.js → workspace-onboarding-JNC7ZFMR.js} +1 -1
- package/dist/{workspace-readme-PL5V3UDH.js → workspace-readme-OV2ADTLW.js} +2 -2
- package/dist/{workspace-registry-summary-STGUGROG.js → workspace-registry-summary-ONT4VOJX.js} +1 -1
- package/dist/{workspace-repair-engine-FNLL5ZDK.js → workspace-repair-engine-WMJCYWO4.js} +2 -2
- package/dist/workspace-run-3S35MDX6.js +1 -0
- package/dist/{workspace-verify-AXVX3PF3.js → workspace-verify-MLABQUWK.js} +1 -1
- package/dist/{workspace-watch-RLBEJKXE.js → workspace-watch-MJOG5AZ3.js} +1 -1
- package/docs/README.md +2 -0
- package/docs/ci-workflows.md +1 -1
- package/docs/commands-reference.md +26 -1
- package/docs/contracts/ARTIFACT_CATALOG.md +37 -18
- package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +17 -0
- package/docs/contracts/PROOF_CARRYING_CHANGE_CONTRACT_PLAN.md +65 -0
- package/docs/contracts/README.md +1 -1
- package/docs/proof-carrying-change.implementation.v1.json +118 -0
- package/docs/proof-carrying-change.md +202 -0
- package/docs/workspace-knowledge-graph.md +1 -0
- package/docs/workspace-live-activity.md +18 -4
- package/package.json +1 -1
- package/dist/analyze-IC2KRVCG.js +0 -1
- package/dist/autopilot-release-RECEZAZI.js +0 -1
- package/dist/capabilities-command-X4WZIJNR.js +0 -1
- package/dist/chunk-2M62CU3O.js +0 -2
- package/dist/chunk-2MVIRJJR.js +0 -1
- package/dist/chunk-3O7LZPKA.js +0 -4
- package/dist/chunk-3OGPTLI2.js +0 -1
- package/dist/chunk-4RV4JVGR.js +0 -6
- package/dist/chunk-5EVDW7JM.js +0 -1
- package/dist/chunk-5ME4W4LN.js +0 -1
- package/dist/chunk-5TY74LLW.js +0 -2
- package/dist/chunk-6254CWUY.js +0 -49
- package/dist/chunk-ARUFY5W3.js +0 -1
- package/dist/chunk-BHFRP7TV.js +0 -8
- package/dist/chunk-BRYJTW6S.js +0 -2
- package/dist/chunk-BUYLM6QV.js +0 -1
- package/dist/chunk-CPR2CMOY.js +0 -1
- package/dist/chunk-EHCKITR4.js +0 -2
- package/dist/chunk-ENZPM52J.js +0 -1
- package/dist/chunk-FPDH3N3A.js +0 -7
- package/dist/chunk-GIQ4SDRJ.js +0 -1
- package/dist/chunk-IKUFNK46.js +0 -2
- package/dist/chunk-IQQMFRWM.js +0 -3
- package/dist/chunk-JCGSIDMC.js +0 -2
- package/dist/chunk-LPCZHKD5.js +0 -1
- package/dist/chunk-N4QFNOAI.js +0 -1
- package/dist/chunk-OCNPOYMA.js +0 -1
- package/dist/chunk-PSYQ6IJA.js +0 -12
- package/dist/chunk-SVYY55IS.js +0 -157
- package/dist/chunk-SX6A656X.js +0 -1
- package/dist/chunk-TP7VKEUF.js +0 -1
- package/dist/chunk-UTV4DTNM.js +0 -1
- package/dist/chunk-XDPTAV2T.js +0 -2
- package/dist/chunk-Y35VLVF6.js +0 -5
- package/dist/chunk-Y4Z6CEII.js +0 -1
- package/dist/chunk-YYY2WXOH.js +0 -1
- package/dist/chunk-ZEEV5J4I.js +0 -1
- package/dist/chunk-ZGHJIQXL.js +0 -1
- package/dist/chunk-ZI2E7P6O.js +0 -4
- package/dist/doctor-CVYUESRQ.js +0 -1
- package/dist/goal-lifecycle-H55AGFCB.js +0 -1
- package/dist/goal-pack-6OBZOPCD.js +0 -1
- package/dist/pipeline-SKYOXWHW.js +0 -5
- package/dist/verified-goal-HN7G532B.js +0 -1
- package/dist/workspace-explain-SUBK6FLO.js +0 -1
- package/dist/workspace-explain-contract-WMREJWHF.js +0 -1
- package/dist/workspace-graph-token-efficiency-NPECU6Y5.js +0 -1
- package/dist/workspace-intelligence-runtime-registry-UKFB3BI7.js +0 -1
- package/dist/workspace-knowledge-graph-change-overlay-XG6FC4IX.js +0 -1
- package/dist/workspace-knowledge-graph-snapshot-SNI5K2RL.js +0 -1
- package/dist/workspace-mcp-serve-PK226GMV.js +0 -3
- package/dist/workspace-run-GFBFGUFM.js +0 -1
|
@@ -67,24 +67,31 @@ is not the exact current canonical projection.
|
|
|
67
67
|
|
|
68
68
|
## Governance evidence loop
|
|
69
69
|
|
|
70
|
-
| Command | Primary artifact | Schema version
|
|
71
|
-
| ------------------------------------ | ----------------------------------------------------------- |
|
|
72
|
-
| `doctor workspace` | `.workspai/reports/doctor-last-run.json` | `doctor-workspace-evidence-v1`
|
|
73
|
-
| `doctor project` | `.workspai/reports/doctor-project-last-run.json` | `doctor-project-evidence-v1`
|
|
74
|
-
| `project coverage` | `.workspai/reports/project-test-coverage-last-run.json` | `workspai.project-test-coverage.v1`
|
|
75
|
-
| `doctor * --plan` | `.workspai/reports/doctor-remediation-plan-last-run.json` | `doctor-remediation-plan-v2`
|
|
76
|
-
| `doctor * --fix/--apply` | `.workspai/reports/doctor-fix-result-last-run.json` | `rapidkit-doctor-fix-result-v1`
|
|
77
|
-
| `workspace remediation-plan --write` | `.workspai/reports/artifact-remediation-plan-last-run.json` | `artifact-remediation-plan-v1`
|
|
78
|
-
| `workspace repair *` | `.workspai/reports/workspace-repair-last-run.json` | `workspai.workspace-repair-transaction.v1`
|
|
79
|
-
| `workspace repair capabilities` | CLI capability output | `workspai.workspace-repair-capabilities.v1`
|
|
80
|
-
| `goal <intent>` | `.workspai/reports/goal-pack-last-run.json` | `workspai.goal-pack.v1`
|
|
81
|
-
| `goal <intent>` / lifecycle options | `.workspai/goals/index.json` | `workspai.goal-index.v1`
|
|
82
|
-
| `goal --status/--list/... --json` | stdout | `workspai.goal-lifecycle-result.v1`
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
|
|
|
70
|
+
| Command | Primary artifact | Schema version | JSON Schema |
|
|
71
|
+
| ------------------------------------ | ----------------------------------------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
72
|
+
| `doctor workspace` | `.workspai/reports/doctor-last-run.json` | `doctor-workspace-evidence-v1` | `contracts/doctor-workspace-evidence.v1.json` |
|
|
73
|
+
| `doctor project` | `.workspai/reports/doctor-project-last-run.json` | `doctor-project-evidence-v1` | `contracts/doctor-project-evidence.v1.json` |
|
|
74
|
+
| `project coverage` | `.workspai/reports/project-test-coverage-last-run.json` | `workspai.project-test-coverage.v1` | `contracts/project-test-coverage.v1.json` |
|
|
75
|
+
| `doctor * --plan` | `.workspai/reports/doctor-remediation-plan-last-run.json` | `doctor-remediation-plan-v2` | `contracts/doctor-remediation-plan.v2.json` |
|
|
76
|
+
| `doctor * --fix/--apply` | `.workspai/reports/doctor-fix-result-last-run.json` | `rapidkit-doctor-fix-result-v1` | `contracts/workspace-intelligence/doctor-fix-result.v1.json` |
|
|
77
|
+
| `workspace remediation-plan --write` | `.workspai/reports/artifact-remediation-plan-last-run.json` | `artifact-remediation-plan-v1` | `contracts/artifact-remediation-plan.v1.json` |
|
|
78
|
+
| `workspace repair *` | `.workspai/reports/workspace-repair-last-run.json` | `workspai.workspace-repair-transaction.v1` | `contracts/workspace-intelligence/workspace-repair-transaction.v1.json` |
|
|
79
|
+
| `workspace repair capabilities` | CLI capability output | `workspai.workspace-repair-capabilities.v1` | `contracts/workspace-repair-capabilities.v1.json` |
|
|
80
|
+
| `goal <intent>` | `.workspai/reports/goal-pack-last-run.json` | `workspai.goal-pack.v1` | `contracts/workspace-intelligence/goal-pack.v1.json` |
|
|
81
|
+
| `goal <intent>` / lifecycle options | `.workspai/goals/index.json` | `workspai.goal-index.v1` | `contracts/workspace-intelligence/goal-index.v1.json` |
|
|
82
|
+
| `goal --status/--list/... --json` | stdout | `workspai.goal-lifecycle-result.v1` | `contracts/workspace-intelligence/goal-lifecycle-result.v1.json` |
|
|
83
|
+
| `change begin` | `.workspai/changes/<change-id>/lease.json` | `workspai.architecture-change-lease.v1` | `contracts/workspace-intelligence/architecture-change-lease.v1.json` |
|
|
84
|
+
| `change *` | `.workspai/decisions/<change-id>/transaction.json` | `workspai.decision-transaction.v1` | `contracts/workspace-intelligence/decision-transaction.v1.json` |
|
|
85
|
+
| `change *` | `.workspai/decisions/<change-id>/checkpoint.json` | `workspai.decision-checkpoint.v1` | `contracts/workspace-intelligence/decision-checkpoint.v1.json` |
|
|
86
|
+
| `change predict` | `.workspai/changes/<change-id>/predicted-overlay.json` | `workspai.predicted-architecture-change.v1` | `contracts/workspace-intelligence/predicted-architecture-change.v1.json` |
|
|
87
|
+
| `change verify` | `.workspai/changes/<change-id>/actual-overlay.json` | `workspace-knowledge-graph-change-overlay.v1` | `contracts/workspace-intelligence/workspace-knowledge-graph-change-overlay.v1.json` |
|
|
88
|
+
| `change verify` | `.workspai/changes/<change-id>/architecture-surprises.json` | `workspai.architecture-surprise-report.v1` | `contracts/workspace-intelligence/architecture-surprise-report.v1.json` |
|
|
89
|
+
| `change *` | `.workspai/changes/<change-id>/capsule.json` | `workspai.proof-carrying-change-capsule.v1` | `contracts/workspace-intelligence/proof-carrying-change-capsule.v1.json` |
|
|
90
|
+
| `analyze` | `.workspai/reports/analyze-last-run.json` | `rapidkit-analyze-v1` | `contracts/analyze-last-run.v1.json` |
|
|
91
|
+
| `readiness` | `.workspai/reports/release-readiness-last-run.json` | `release-readiness-v1` | `contracts/release-readiness.v1.json` |
|
|
92
|
+
| `pipeline` | `.workspai/reports/pipeline-last-run.json` | `rapidkit-pipeline-v1` | `contracts/pipeline-last-run.v1.json` |
|
|
93
|
+
| `autopilot release` | `.workspai/reports/autopilot-release-last-run.json` | `autopilot-release-v1` | `contracts/autopilot-release.v1.json` |
|
|
94
|
+
| | `.workspai/reports/autopilot-release.json` | (alias, same payload) | `contracts/autopilot-release.v1.json` |
|
|
88
95
|
|
|
89
96
|
Side/cache (not gates): `.workspai/reports/doctor-workspace-cache.json` (`doctor-workspace-cache-v2`).
|
|
90
97
|
|
|
@@ -96,6 +103,18 @@ authorize mutation or claim completion.
|
|
|
96
103
|
The sibling `.workspai/goals/index.json` is the canonical active-goal discovery
|
|
97
104
|
and lifecycle registry; consumers must not infer activity from directory order.
|
|
98
105
|
|
|
106
|
+
Proof-Carrying Change uses the append-only JSONL event stream at
|
|
107
|
+
`.workspai/decisions/<change-id>/events.jsonl` as authority. The transaction and
|
|
108
|
+
checkpoint are replay-derived projections, while the capsule composes intent,
|
|
109
|
+
baseline, typed effects, re-observed architecture, independent verification,
|
|
110
|
+
and remaining uncertainty. The private
|
|
111
|
+
`.workspai/changes/<change-id>/private/baseline-graph.json` materialization is a
|
|
112
|
+
hash-bound local cache used to calculate the actual delta after the canonical
|
|
113
|
+
Graph advances; it is non-authoritative and must not be treated as a portable
|
|
114
|
+
consumer artifact. `change list --json` is the stable discovery surface for
|
|
115
|
+
IDEs and automation, so consumers must not infer the active or latest change
|
|
116
|
+
from directory order.
|
|
117
|
+
|
|
99
118
|
Doctor Studio handoff:
|
|
100
119
|
`doctor-remediation-plan-v2` (`contracts/doctor-remediation-plan.v2.json`) is emitted in JSON
|
|
101
120
|
responses and persisted to `.workspai/reports/doctor-remediation-plan-last-run.json` by
|
|
@@ -34,6 +34,7 @@ These commands are implemented and orchestrated by Workspai CLI:
|
|
|
34
34
|
- `commands`
|
|
35
35
|
- `create`
|
|
36
36
|
- `goal`
|
|
37
|
+
- `change`
|
|
37
38
|
- `agent`
|
|
38
39
|
- `project`
|
|
39
40
|
- `live`
|
|
@@ -53,6 +54,22 @@ These nested Commander commands are implemented and orchestrated by Workspai CLI
|
|
|
53
54
|
- `config remove-api-key`
|
|
54
55
|
- `config set-api-key`
|
|
55
56
|
- `config show`
|
|
57
|
+
- `change begin`
|
|
58
|
+
- `change list`
|
|
59
|
+
- `change predict`
|
|
60
|
+
- `change authorize`
|
|
61
|
+
- `change resume`
|
|
62
|
+
- `change effect`
|
|
63
|
+
- `change effect record`
|
|
64
|
+
- `change verification`
|
|
65
|
+
- `change verification record`
|
|
66
|
+
- `change status`
|
|
67
|
+
- `change explain`
|
|
68
|
+
- `change verify`
|
|
69
|
+
- `change abort`
|
|
70
|
+
- `change capsule`
|
|
71
|
+
- `change capsule validate`
|
|
72
|
+
- `change capsule export`
|
|
56
73
|
- `infra down`
|
|
57
74
|
- `infra plan`
|
|
58
75
|
- `infra status`
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Proof-Carrying Change contracts
|
|
2
|
+
|
|
3
|
+
Status: released v1 CLI and read-only MCP contracts; extension mutation adapter pending
|
|
4
|
+
|
|
5
|
+
## Published contracts
|
|
6
|
+
|
|
7
|
+
| Schema | Owner | Purpose |
|
|
8
|
+
| ------------------------------------------------------ | --------------- | --------------------------------------------------- |
|
|
9
|
+
| `workspai.decision-event.v1` | Decisions | Digest-linked causal event. |
|
|
10
|
+
| `workspai.decision-transaction.v1` | Decisions | Replay-derived transaction projection. |
|
|
11
|
+
| `workspai.decision-checkpoint.v1` | Decisions | Event-head and projection integrity checkpoint. |
|
|
12
|
+
| `workspai.architecture-change-lease.v1` | PCC composition | Goal and architecture generation guard. |
|
|
13
|
+
| `workspai.predicted-architecture-change.v1` | PCC composition | Explicit noncanonical expected delta. |
|
|
14
|
+
| `workspace-knowledge-graph-change-overlay.v1` | Graph | Actual base-to-head architecture delta. |
|
|
15
|
+
| `workspai.architecture-surprise-report.v1` | PCC composition | Predicted-versus-observed comparison. |
|
|
16
|
+
| `workspai.proof-carrying-change-capsule.v1` | PCC composition | Portable closure, assurance, and uncertainty index. |
|
|
17
|
+
| `workspai.change-operation-result.v1` | PCC composition | Stable machine result shared by lifecycle commands. |
|
|
18
|
+
| `workspai.proof-carrying-change-list.v1` | PCC composition | Read-only discovery for IDE, CI, and automation. |
|
|
19
|
+
| `workspai.proof-carrying-change-capsule-validation.v1` | PCC composition | Explicit integrity validation verdict. |
|
|
20
|
+
| `workspai.proof-carrying-change-capsule-export.v1` | PCC composition | Validated portable export receipt. |
|
|
21
|
+
|
|
22
|
+
The schemas live in `contracts/workspace-intelligence/` and are advertised by
|
|
23
|
+
the published contract catalog and runtime command surface.
|
|
24
|
+
|
|
25
|
+
## Reuse map
|
|
26
|
+
|
|
27
|
+
- `workspai.goal-pack.v1`: immutable intent, scope, and success criteria.
|
|
28
|
+
- `workspai.goal-index.v1`: active Goal and bounded PCC transaction links.
|
|
29
|
+
- `workspace-model.v1`: structural baseline and post-effect system identity.
|
|
30
|
+
- `workspace-knowledge-graph.v1`: architecture facts and proofs.
|
|
31
|
+
- `workspace-knowledge-graph-change-overlay.v1`: actual change semantics.
|
|
32
|
+
- `workspace-verify.v1`: canonical workspace verification evidence.
|
|
33
|
+
|
|
34
|
+
## Semantic validation beyond JSON Schema
|
|
35
|
+
|
|
36
|
+
JSON shape is necessary but insufficient. The runtime additionally verifies:
|
|
37
|
+
|
|
38
|
+
1. contiguous event sequence and one transaction ID;
|
|
39
|
+
2. previous-event and event-content digests;
|
|
40
|
+
3. legal state transitions;
|
|
41
|
+
4. explicit effect-class authorization;
|
|
42
|
+
5. unique effect receipt IDs and idempotency keys;
|
|
43
|
+
6. exact effect-head binding for verification receipts;
|
|
44
|
+
7. current Model/Graph target identity;
|
|
45
|
+
8. successful receipt coverage for changed Graph proof artifacts;
|
|
46
|
+
9. latest passing receipt for every immutable Goal criterion;
|
|
47
|
+
10. capsule, lease, decision-head, baseline-cache, and referenced-artifact integrity.
|
|
48
|
+
|
|
49
|
+
## Compatibility rules
|
|
50
|
+
|
|
51
|
+
- v1 fields do not grant authority beyond their named owner.
|
|
52
|
+
- Prediction remains ineligible as proof in every consumer.
|
|
53
|
+
- A capsule is an index, not a duplicate Goal, Graph, ledger, or verifier.
|
|
54
|
+
- Missing, stale, uncertain, failed, and unsupported are distinct outcomes.
|
|
55
|
+
- Unknown event kinds or fields fail closed under v1 schemas.
|
|
56
|
+
- Consumers must use command discovery and the published catalog rather than
|
|
57
|
+
guessing artifact paths.
|
|
58
|
+
- Consumers must use `change list --json` rather than inferring recency or
|
|
59
|
+
lifecycle state from directory order.
|
|
60
|
+
|
|
61
|
+
## Deferred contract
|
|
62
|
+
|
|
63
|
+
`workspai.semantic-change-conflict.v1` remains deferred until proof-backed
|
|
64
|
+
two-change overlap can distinguish `overlap`, `disjoint`, and `unknown` without
|
|
65
|
+
inferring absence from incomplete Graph coverage.
|
package/docs/contracts/README.md
CHANGED
|
@@ -98,7 +98,7 @@ Published under `../../contracts/` (not duplicated in this folder):
|
|
|
98
98
|
- `workspace-model-cache.v1.json`, `workspace-watch-event.v1.json`, `doctor-project-scan.v2.json`, and `doctor-workspace-cache.v2.json` — cache/watch/diagnostic support contracts
|
|
99
99
|
- `workspace-activity-event.v1.json` — local-first run/block/operation/touch stream consumed by `workspai live`; observational only, never Evidence/Decision authority
|
|
100
100
|
- `workspace-activity-monitor-snapshot.v1.json` and `workspace-activity-monitor-fleet.v1.json` — deterministic local and bounded fleet projections
|
|
101
|
-
- `workspace-activity-board.v1.json` — renderer-neutral bounded Live projection for terminal, SVG, IDE and web consumers
|
|
101
|
+
- `workspace-activity-board.v1.json` — renderer-neutral bounded Live projection for terminal, SVG, IDE and web consumers, with optional provenance-backed references to canonical artifacts and revision-bound Graph evidence
|
|
102
102
|
|
|
103
103
|
Workspace intelligence (`../../contracts/workspace-intelligence/`):
|
|
104
104
|
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "workspai.proof-carrying-change-implementation-plan.v1",
|
|
3
|
+
"status": "released",
|
|
4
|
+
"release": "0.69.0",
|
|
5
|
+
"runtimeImplemented": true,
|
|
6
|
+
"packageDecision": {
|
|
7
|
+
"newPackage": false,
|
|
8
|
+
"compositionOwner": "workspai-cli",
|
|
9
|
+
"transactionOwner": "extraction-safe Decisions kernel",
|
|
10
|
+
"graphOwner": "workspace-knowledge-graph",
|
|
11
|
+
"modelOwner": "workspace-model",
|
|
12
|
+
"intentOwner": "goal-pack",
|
|
13
|
+
"verificationOwner": "domain-verifier"
|
|
14
|
+
},
|
|
15
|
+
"publicCommands": [
|
|
16
|
+
"change begin",
|
|
17
|
+
"change list",
|
|
18
|
+
"change predict",
|
|
19
|
+
"change authorize",
|
|
20
|
+
"change resume",
|
|
21
|
+
"change effect record",
|
|
22
|
+
"change verification record",
|
|
23
|
+
"change status",
|
|
24
|
+
"change verify",
|
|
25
|
+
"change explain",
|
|
26
|
+
"change abort",
|
|
27
|
+
"change capsule validate",
|
|
28
|
+
"change capsule export"
|
|
29
|
+
],
|
|
30
|
+
"reusedContracts": [
|
|
31
|
+
"workspai.goal-pack.v1",
|
|
32
|
+
"workspai.goal-index.v1",
|
|
33
|
+
"workspace-knowledge-graph-change-overlay.v1",
|
|
34
|
+
"workspace-impact.v1",
|
|
35
|
+
"workspace-explain.v1",
|
|
36
|
+
"workspace-verify.v1"
|
|
37
|
+
],
|
|
38
|
+
"implementedContracts": [
|
|
39
|
+
"workspai.decision-event.v1",
|
|
40
|
+
"workspai.decision-transaction.v1",
|
|
41
|
+
"workspai.decision-checkpoint.v1",
|
|
42
|
+
"workspai.architecture-change-lease.v1",
|
|
43
|
+
"workspai.predicted-architecture-change.v1",
|
|
44
|
+
"workspai.architecture-surprise-report.v1",
|
|
45
|
+
"workspai.proof-carrying-change-capsule.v1",
|
|
46
|
+
"workspai.change-operation-result.v1",
|
|
47
|
+
"workspai.proof-carrying-change-list.v1",
|
|
48
|
+
"workspai.proof-carrying-change-capsule-validation.v1",
|
|
49
|
+
"workspai.proof-carrying-change-capsule-export.v1"
|
|
50
|
+
],
|
|
51
|
+
"deferredContracts": ["workspai.semantic-change-conflict.v1"],
|
|
52
|
+
"consumerStatus": {
|
|
53
|
+
"cli": "complete",
|
|
54
|
+
"ciJsonGate": "complete",
|
|
55
|
+
"mcpReadTools": "complete",
|
|
56
|
+
"extensionReadProjection": "implemented-awaiting-pcc-cli-release",
|
|
57
|
+
"extensionStudioMutationAdapter": "deferred-until-pcc-cli-release"
|
|
58
|
+
},
|
|
59
|
+
"stages": [
|
|
60
|
+
{
|
|
61
|
+
"id": "PC0",
|
|
62
|
+
"name": "ownership-and-inventory",
|
|
63
|
+
"status": "complete",
|
|
64
|
+
"exit": "Maintainer approves ownership, reuse map, threat boundary and no-new-package decision."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "PC1",
|
|
68
|
+
"name": "contract-lock",
|
|
69
|
+
"status": "complete",
|
|
70
|
+
"exit": "Schemas, types, validators, fixtures, artifacts and compatibility rules are locked."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "PC2",
|
|
74
|
+
"name": "pure-lease-and-comparison-kernel",
|
|
75
|
+
"status": "complete",
|
|
76
|
+
"exit": "Generation guard, prediction comparison and capsule validation pass without CLI globals."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "PC3",
|
|
80
|
+
"name": "explicit-prediction-mvp",
|
|
81
|
+
"status": "complete",
|
|
82
|
+
"exit": "Begin, predict, status, verify, explain and abort pass JSON and process integration tests."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "PC4",
|
|
86
|
+
"name": "decisions-and-effect-integration",
|
|
87
|
+
"status": "complete",
|
|
88
|
+
"exit": "All effects and resume behavior use one Decisions transaction and ledger."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "PC5",
|
|
92
|
+
"name": "semantic-concurrency",
|
|
93
|
+
"status": "deferred",
|
|
94
|
+
"exit": "Proof-backed overlap and honest unknown/disjoint semantics pass multi-change fixtures."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "PC6",
|
|
98
|
+
"name": "consumer-integration",
|
|
99
|
+
"status": "in-progress",
|
|
100
|
+
"exit": "CLI, CI, MCP and extension consume one capsule contract without semantic forks."
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"id": "PC7",
|
|
104
|
+
"name": "enterprise-hardening",
|
|
105
|
+
"status": "in-progress",
|
|
106
|
+
"exit": "Cross-platform, adversarial, crash, concurrency, scale, privacy and release gates pass."
|
|
107
|
+
}
|
|
108
|
+
],
|
|
109
|
+
"prohibitedShortcuts": [
|
|
110
|
+
"new transaction or graph truth owner",
|
|
111
|
+
"automatic stale lease renewal",
|
|
112
|
+
"prediction as corroborating evidence",
|
|
113
|
+
"fidelity score as commit or release authority",
|
|
114
|
+
"history as causal ledger",
|
|
115
|
+
"automatic command execution from capability metadata",
|
|
116
|
+
"semantic disjointness inferred from missing graph coverage"
|
|
117
|
+
]
|
|
118
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Proof-Carrying Change
|
|
2
|
+
|
|
3
|
+
Status: released in Workspai CLI v0.69.0
|
|
4
|
+
|
|
5
|
+
> Every change carries its intent, pinned architecture baseline, predicted
|
|
6
|
+
> impact, authorized effects, actual architecture delta, independent
|
|
7
|
+
> verification, and remaining uncertainty.
|
|
8
|
+
|
|
9
|
+
Proof-Carrying Change (PCC) is a product composition, not a second Graph or
|
|
10
|
+
transaction system. Goal Pack owns intent and acceptance criteria. The
|
|
11
|
+
extraction-safe Decisions kernel owns lifecycle, causal ordering, authorization,
|
|
12
|
+
effect receipts, verification receipts, resume, and the tamper-evident ledger.
|
|
13
|
+
Model and Graph own architecture truth. Workspace Verify and domain verifiers
|
|
14
|
+
own verdicts. The CLI composes references to those owners into one capsule.
|
|
15
|
+
|
|
16
|
+
## Quickstart
|
|
17
|
+
|
|
18
|
+
Start from a current adopted project or workspace:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 1. Create an immutable Goal Pack.
|
|
22
|
+
workspai goal "Improve retry behavior without breaking clients" --json
|
|
23
|
+
|
|
24
|
+
# 2. Pin that Goal and the exact Model/Graph/input generation.
|
|
25
|
+
workspai change begin --json
|
|
26
|
+
|
|
27
|
+
# Discover resumable and sealed changes without scanning directories.
|
|
28
|
+
workspai change list --json
|
|
29
|
+
|
|
30
|
+
# 3. Optionally attach an explicit prediction. It is never proof.
|
|
31
|
+
workspai change predict --change <change-id> --file prediction.json --json
|
|
32
|
+
|
|
33
|
+
# 4. A human grants only the effect classes required by the change.
|
|
34
|
+
workspai change authorize --change <change-id> \
|
|
35
|
+
--effects filesystem,command --granted-by maintainer --json
|
|
36
|
+
|
|
37
|
+
# 5. An agent, extension, or CLI tool records every observed effect.
|
|
38
|
+
workspai change effect record --change <change-id> \
|
|
39
|
+
--file effect-receipt.json --json
|
|
40
|
+
|
|
41
|
+
# 6. Rebuild/re-observe architecture and run independent verification.
|
|
42
|
+
workspai change verify --change <change-id> --strict --json
|
|
43
|
+
|
|
44
|
+
# 7. Validate or export the sealed manifest.
|
|
45
|
+
workspai change capsule validate --change <change-id> --json
|
|
46
|
+
workspai change capsule export --change <change-id> \
|
|
47
|
+
--output .workspai/exports/<change-id>.json --json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
For Goals with additional release, security, or coverage criteria, `change
|
|
51
|
+
verify` first records canonical Workspace Verify and the actual Graph overlay.
|
|
52
|
+
The owning domain/CI adapter can then admit an exact-generation receipt:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
workspai change verification record --change <change-id> \
|
|
56
|
+
--file verification-receipt.json --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
If a transaction is blocked, it remains durable. A human may resume it into an
|
|
60
|
+
explicit state; history is never erased:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
workspai change resume --change <change-id> --to authorized \
|
|
64
|
+
--reason "Add receipts for observed generated files" --json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Ownership and invariants
|
|
68
|
+
|
|
69
|
+
| Concern | Owner | PCC behavior |
|
|
70
|
+
| -------------------------------- | ---------------------------------- | --------------------------------------------------------------------------- |
|
|
71
|
+
| Intent, scope, success criteria | Goal Pack | References the immutable Goal and criterion IDs. |
|
|
72
|
+
| State, ledger, effects, receipts | Decisions kernel | Uses one digest-linked event stream and derived projection. |
|
|
73
|
+
| Architecture baseline and delta | Model / Graph | Pins exact hashes and reuses `workspace-knowledge-graph-change-overlay.v1`. |
|
|
74
|
+
| Verification | Workspace Verify / domain verifier | Admits only receipts bound to the current Model, Graph, and effect head. |
|
|
75
|
+
| Product view | CLI / IDE / CI | Consumes the same capsule without redefining truth. |
|
|
76
|
+
|
|
77
|
+
The runtime enforces these rules:
|
|
78
|
+
|
|
79
|
+
- prediction is `nonCanonical: true` and `proofEligible: false`;
|
|
80
|
+
- authorization names allowed effect classes before receipts are admitted;
|
|
81
|
+
- receipt idempotency keys cannot be reused;
|
|
82
|
+
- verification binds the exact current Model, Graph, and effect-head digest;
|
|
83
|
+
- observed changed artifacts must be covered by successful effect receipts;
|
|
84
|
+
- a changed Graph with no effect receipt blocks verification;
|
|
85
|
+
- every required Goal criterion needs a latest passing receipt before commit;
|
|
86
|
+
- failed or uncertain effects block the transaction;
|
|
87
|
+
- terminal transactions cannot accept later events;
|
|
88
|
+
- optimistic compare-and-append prevents concurrent history forks;
|
|
89
|
+
- capsule validation replays the event chain and checks local reference digests.
|
|
90
|
+
|
|
91
|
+
## Architecture lease
|
|
92
|
+
|
|
93
|
+
`change begin` requires a fresh Goal Pack and a current canonical Graph. It
|
|
94
|
+
creates `workspai.architecture-change-lease.v1`, binding Goal ID, workspace,
|
|
95
|
+
scope, structural Model hash, canonical Graph hash, live Graph input
|
|
96
|
+
fingerprint, and a derived generation ID.
|
|
97
|
+
|
|
98
|
+
Before prediction or authorization, the generation must still match. The lease
|
|
99
|
+
is an optimistic guard, not a filesystem or Git lock.
|
|
100
|
+
|
|
101
|
+
Because the canonical Graph path is renewed in place, begin also writes a
|
|
102
|
+
private, non-authoritative, hash-bound baseline materialization. It exists only
|
|
103
|
+
to derive the later base-to-head overlay. The capsule cites the canonical
|
|
104
|
+
baseline identity, not the cache as architecture truth.
|
|
105
|
+
|
|
106
|
+
## Typed receipts
|
|
107
|
+
|
|
108
|
+
An effect receipt includes an ID, effect class, result, summary, observation
|
|
109
|
+
time, idempotency key, optional command argv, and artifact references. Artifact
|
|
110
|
+
references use labeled digest semantics:
|
|
111
|
+
|
|
112
|
+
- `canonical-json-v1` for JSON evidence;
|
|
113
|
+
- `raw-bytes-v1` for source or command-output files;
|
|
114
|
+
- `workspace-model-structural-v1` for canonical Model identity.
|
|
115
|
+
|
|
116
|
+
Verification receipts add a Goal criterion ID and an exact target. Domain
|
|
117
|
+
receipts are admitted only after `change verify` has re-observed the Graph and
|
|
118
|
+
recorded passing Workspace Verify evidence.
|
|
119
|
+
|
|
120
|
+
## Artifact layout
|
|
121
|
+
|
|
122
|
+
```text
|
|
123
|
+
.workspai/decisions/<change-id>/
|
|
124
|
+
events.jsonl # authoritative causal ledger
|
|
125
|
+
transaction.json # replay-derived projection
|
|
126
|
+
checkpoint.json # generation and head integrity checkpoint
|
|
127
|
+
|
|
128
|
+
.workspai/changes/<change-id>/
|
|
129
|
+
lease.json
|
|
130
|
+
predicted-overlay.json # optional, noncanonical
|
|
131
|
+
actual-overlay.json
|
|
132
|
+
architecture-surprises.json
|
|
133
|
+
capsule.json
|
|
134
|
+
private/baseline-graph.json
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
`capsule.json` is a portable hash-index and assurance summary. It does not copy
|
|
138
|
+
the Goal, event ledger, Model, Graph, or verification reports. Absolute paths,
|
|
139
|
+
secrets, prompts, and unbounded command output are not capsule content.
|
|
140
|
+
Use the schema-validated `change list --json` projection for IDE and automation
|
|
141
|
+
discovery; filesystem directory order is never lifecycle truth.
|
|
142
|
+
|
|
143
|
+
Every CLI operation also emits a Live activity observation correlated by the
|
|
144
|
+
change ID, and every PCC artifact write flows through the shared artifact
|
|
145
|
+
publisher. Live remains execution telemetry rather than verification proof;
|
|
146
|
+
the capsule references Decision, Graph, effect, and verifier evidence instead
|
|
147
|
+
of upgrading an observed activity event into an assurance claim.
|
|
148
|
+
|
|
149
|
+
Read-only MCP consumers receive the same ledger-derived projections through
|
|
150
|
+
`listProofCarryingChanges`, `getProofCarryingChange`, and
|
|
151
|
+
`validateProofCarryingChange`. No PCC mutation tool is exposed over MCP; effect
|
|
152
|
+
authorization and execution remain behind explicit CLI or IDE approval
|
|
153
|
+
boundaries.
|
|
154
|
+
|
|
155
|
+
CI can fail closed on capsule integrity and assurance without parsing terminal
|
|
156
|
+
text:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
workspai change capsule validate --change "$CHANGE_ID" --json
|
|
160
|
+
workspai change status --change "$CHANGE_ID" --json
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
An invalid capsule exits non-zero. Policy automation should additionally
|
|
164
|
+
require `capsule.status == "sealed"` when a sealed change is a merge or release
|
|
165
|
+
condition.
|
|
166
|
+
|
|
167
|
+
## Decision states
|
|
168
|
+
|
|
169
|
+
The Decisions owner derives these states from events:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
draft -> scoped -> evidence-ready -> authorized -> executing -> verifying
|
|
173
|
+
\-> blocked/awaiting-human -> resumed
|
|
174
|
+
verifying -> committed
|
|
175
|
+
any nonterminal state -> aborted/rejected/superseded
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
The product-facing capsule reports `open`, `blocked`, `verified`, `sealed`, or
|
|
179
|
+
`aborted`. A sealed capsule means all immutable Goal criteria have passing
|
|
180
|
+
post-effect receipts. It does not mean unsupported external claims became true.
|
|
181
|
+
|
|
182
|
+
## Prediction versus observation
|
|
183
|
+
|
|
184
|
+
The prediction lists expected add/remove/change operations for entities,
|
|
185
|
+
relations, proofs, or artifacts. `change verify` derives the actual overlay from
|
|
186
|
+
the pinned Graph and fresh canonical head, then emits matched operations,
|
|
187
|
+
unpredicted actual operations, predicted operations not observed, and an honest
|
|
188
|
+
`exact`, `within-expectation`, `surprising`, or `no-prediction` verdict.
|
|
189
|
+
|
|
190
|
+
Surprise analysis is explanatory evidence. It is not self-corroborating proof
|
|
191
|
+
and cannot replace verification.
|
|
192
|
+
|
|
193
|
+
## Deferred work
|
|
194
|
+
|
|
195
|
+
The next layer is IDE timeline/Graph overlay and Repair/Studio transaction
|
|
196
|
+
adapters. Rich hosted PR annotations remain separate from the machine-readable
|
|
197
|
+
CI gate above. Semantic multi-change overlap, immutable historical Graph
|
|
198
|
+
queries, isolated patch simulation, and remote attestation remain separate
|
|
199
|
+
follow-up capabilities. No current command claims those behaviors.
|
|
200
|
+
|
|
201
|
+
See the [contract reference](./contracts/PROOF_CARRYING_CHANGE_CONTRACT_PLAN.md)
|
|
202
|
+
and [implementation manifest](./proof-carrying-change.implementation.v1.json).
|
|
@@ -50,6 +50,19 @@ consumed by IDE, browser, dashboard and capture adapters. It contains bounded
|
|
|
50
50
|
runs, nodes, edges, selection, counters and diagnostics; consumers must not
|
|
51
51
|
infer verification success from activity state.
|
|
52
52
|
|
|
53
|
+
Board runs and stages may also expose bounded `evidenceBindings`. Each binding
|
|
54
|
+
declares a typed reference (`artifact`, `graph-entity`, `graph-relation`,
|
|
55
|
+
`proof`, or `project`), its role, and authoritative/observed provenance. Graph
|
|
56
|
+
identities can carry the exact `graphSourceHash` needed for revision-safe
|
|
57
|
+
overlays. Artifact publications receive authoritative output bindings
|
|
58
|
+
automatically. They are attributed to a stage only when the producer names the
|
|
59
|
+
stage or exactly one non-root stage is active; concurrent/ambiguous execution
|
|
60
|
+
never receives a guessed link.
|
|
61
|
+
|
|
62
|
+
Bindings are navigation and correlation references, not verification claims.
|
|
63
|
+
An IDE must resolve the artifact and validate its contract, integrity and
|
|
64
|
+
freshness before presenting a verified outcome or drawing a Graph edge.
|
|
65
|
+
|
|
53
66
|
`--capture` writes an atomic, deterministic SVG from the same Activity Board
|
|
54
67
|
Model used by the terminal and exits. Captures are redacted by default: local
|
|
55
68
|
scope, project, run and command-argument details are replaced while semantic
|
|
@@ -119,7 +132,7 @@ readers and captured output. `--classic` preserves the compatibility renderer.
|
|
|
119
132
|
The implementation intentionally keeps this pipeline renderer-independent:
|
|
120
133
|
|
|
121
134
|
```text
|
|
122
|
-
workspace-activity-event.v1
|
|
135
|
+
workspace-activity-event.v1 (optional provenance-backed evidence bindings)
|
|
123
136
|
-> deterministic monitor snapshot
|
|
124
137
|
-> workspace-activity-board.v1 (runs, nodes, edges, selection, counters)
|
|
125
138
|
-> terminal + deterministic SVG adapters today / web and IDE adapters later
|
|
@@ -166,9 +179,10 @@ contracts/workspace-activity-board.v1.json
|
|
|
166
179
|
```
|
|
167
180
|
|
|
168
181
|
The stream contains run, block, attempt, origin, declared-edge, operation,
|
|
169
|
-
touch, artifact and warning data. Blueprint edges are
|
|
170
|
-
`handoff` relations; older journals
|
|
171
|
-
|
|
182
|
+
touch, artifact, evidence-binding and warning data. Blueprint edges are
|
|
183
|
+
explicit `sequence`, `parallel`, `gate` or `handoff` relations; older journals
|
|
184
|
+
without declared edges or evidence bindings receive a deterministic compatible
|
|
185
|
+
projection without fabricated links.
|
|
172
186
|
Stable semantic block IDs describe architecture stages rather than source line
|
|
173
187
|
numbers or function names.
|
|
174
188
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workspai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.69.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Open-source workspace intelligence CLI for software systems: create, adopt, govern, verify, and align polyglot workspaces for humans, CI, IDEs, and AI agents.",
|
|
6
6
|
"keywords": [
|
package/dist/analyze-IC2KRVCG.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{b as printAnalyzeReport,a as runAnalyze}from'./chunk-VWBMDGPY.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{b as AUTOPILOT_RELEASE_ALIAS_FILENAME,a as AUTOPILOT_RELEASE_LAST_RUN_FILENAME,c as runAutopilotRelease}from'./chunk-BHFRP7TV.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{b as runDoctorCapabilities}from'./chunk-4RV4JVGR.js';
|
package/dist/chunk-2M62CU3O.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {l}from'./chunk-GIQ4SDRJ.js';import {b}from'./chunk-FPDH3N3A.js';import {a as a$1}from'./chunk-ENZPM52J.js';import {j as j$1}from'./chunk-TP7VKEUF.js';import {b as b$1}from'./chunk-IKUFNK46.js';import {a}from'./chunk-AFIFZTOY.js';import {c}from'./chunk-EWZZUQBR.js';import {h,i,e}from'./chunk-ZGHJIQXL.js';import Ae from'crypto';import H from'fs';import O from'fs/promises';import m from'path';var pe=h.projectAgentEntry.schemaVersion,M=i.projectAgentEntry,Ee="workspai.agent-bootstrap-receipt.v1",We="<!-- WORKSPAI:AGENT-ENTRY:START -->",Fe="<!-- WORKSPAI:AGENT-ENTRY:END -->",q=["generic","codex","claude","gemini","qwen","kimi","grok","copilot","cursor","windsurf","amazon-q"],qe=["CLAUDE.md","GEMINI.md","QWEN.md",".amazonq/rules/workspai-agent-entry.md"];function ve(t){let s=t?.trim().toLowerCase()||"generic";if(s==="orca")return "grok";if(q.includes(s))return s;throw new Error(`Unsupported agent host "${s}". Expected one of: ${q.join(", ")}.`)}function le(t){let s=t.map(i=>i.id).sort(),n=[...q].sort();if(s.length!==n.length||s.some((i,c)=>i!==n[c]))throw new Error("Project agent entry must define each supported host exactly once.")}function V(t){let{integrity:s,...n}=t;return n}function S(t){return c(t)}function Ve(t){le(t.hosts);let s={schemaVersion:pe,generatedAt:t.context.generatedAt,project:{name:t.context.project.name,relativePath:t.context.project.relativePath,...t.context.project.runtime?{runtime:t.context.project.runtime}:{},...t.context.project.framework?{framework:t.context.project.framework}:{}},workspace:{name:t.context.workspace.name,relationship:t.context.workspace.relationship,localBinding:i.projectWorkspaceLink,identityIsFilesystemPath:false,resolverCommand:"workspai project workspace status --json",portableUriScheme:"workspace:",resolvedPathPolicy:"runtime-private-never-persist"},canonical:{projectContext:i.projectContextAgent,projectGrounding:".workspai/PROJECT-GROUNDING.md",projectKnowledgeGraph:i.projectKnowledgeGraphReference,goalIndex:`workspace:${i.goalIndex}`,workspaceIndex:`workspace:${e.agentIndex}`,workspaceContext:`workspace:${e.agentContext}`,workspaceModel:`workspace:${e.model}`,knowledgeGraph:`workspace:${e.knowledgeGraph}`,workspaceSkillsIndex:`workspace:${e.skillsIndex}`,boundedGraphSearch:"command:workspai workspace graph search <task-query> --scope project:<project> --limit 12 --json"},protocol:{mode:"canonical-first",bootstrapCommand:"workspai agent bootstrap --for-agent generic --strict --json",verifyCommand:"workspai project agent-entry verify --for-agent all --strict --json",requiredReadOrder:[M,"command:workspai agent bootstrap --for-agent generic --strict --json","command:workspai project workspace status --json",i.projectContextAgent,`workspace:${i.goalIndex}`,`workspace:${e.skillsIndex}`,"command:workspai workspace graph search <task-query> --scope project:<project> --limit 12 --json","source:targeted-live-files"],sourcePolicy:{liveSourceAuthority:"exact-implementation",workspaceEvidenceAuthority:"identity-topology-readiness-goals",broadScanBeforeBootstrap:false,sourceMutation:"governed-only",verificationClaims:"cli-evidence-only"},degradedMode:{discloseMissingEvidence:true,allowCompleteArchitectureClaims:false,allowReadOnlySourceInspection:true}},hosts:[...t.hosts].sort((i,c)=>i.id.localeCompare(c.id))},n={...s,integrity:{algorithm:"sha256",projectContextHash:t.context.integrity.payloadHash,payloadHash:S(s),portable:true,absolutePathsEmitted:false}};if(!j(n))throw new Error("Project agent entry rejected a non-portable local path.");return a(n,"contracts/workspace-intelligence/project-agent-entry.v1.json","Project agent entry"),n}function j(t){return typeof t=="string"?!(/^[A-Za-z]:[\\/]/.test(t)||/(?:^|[\s("'`])[A-Za-z]:[\\/]/.test(t)||/(?:^|[\s("'`])file:\/\//i.test(t)||/(?:^|[\s("'`])\\\\[^\\\s]+[\\]/.test(t)||/(?:^|[\s("'`])\/(?:Users|home|private|var|opt|srv|mnt|Volumes|tmp)\//.test(t)):Array.isArray(t)?t.every(j):t&&typeof t=="object"?Object.values(t).every(j):true}async function Pe(t){let s=m.join(t,M),n=JSON.parse(await O.readFile(s,"utf8"));if(a(n,"contracts/workspace-intelligence/project-agent-entry.v1.json","Project agent entry"),n.integrity.payloadHash!==S(V(n)))throw new Error("Project agent entry integrity validation failed.");if(le(n.hosts),!j(n)||n.integrity.absolutePathsEmitted)throw new Error("Project agent entry contains a non-portable local path.");return n}async function Ce(t){let s=m.join(t,i.projectContextAgent),n=JSON.parse(await O.readFile(s,"utf8"));a(n,"contracts/workspace-intelligence/project-context-agent.v1.json","Project context agent");let i$1=V(n),c=Ae.createHash("sha256").update(JSON.stringify(i$1)).digest("hex");if(n.integrity.payloadHash!==c)throw new Error("Project context agent integrity validation failed.");if(!j(n)||n.integrity.absolutePathsEmitted)throw new Error("Project context agent contains a non-portable local path.");return n}function Te(t){return t.includes("blocked")?"blocked":t.includes("degraded")?"degraded":"ready"}async function Be(t){let s=b({startPath:m.resolve(t.startPath??process.cwd()),strict:true,requireProjectMembership:true});if(!s?.projectPath)throw new Error("No canonically bound Workspai project was resolved.");let n=s.projectPath,i$1=s.workspacePath,c$1=await Pe(n),o=await Ce(n);if(c$1.integrity.projectContextHash!==o.integrity.payloadHash||c$1.project.name!==o.project.name||c$1.workspace.name!==o.workspace.name)throw new Error("Project agent entry is not bound to the current project context.");let B=t.forAgent?.trim().toLowerCase()||"generic",U=B==="all",g=U?"all":ve(B),J=g,u=U?c$1.hosts:c$1.hosts.filter(e=>e.id===g),Y=c$1.hosts.find(e=>e.id==="generic");if(u.length===0&&Y&&u.push(Y),u.length===0)throw new Error("Project agent entry does not define generic host coverage.");let A=[],l$1=(e,r,C,h)=>A.push({id:e,status:r,message:C,...h?{artifact:h}:{}});l$1("workspace-binding","passed","Canonical workspace membership is resolved."),l$1("entry-integrity","passed","Project entry manifest integrity is valid.",M),l$1("project-context-integrity","passed","Project context integrity and manifest binding are valid.",i.projectContextAgent);let L=[...new Set(u.flatMap(e=>e.entryFiles))].sort(),de=L.filter(e=>!H.existsSync(m.join(n,e))),w=u.some(e=>e.status==="blocked")||de.length>0?"blocked":u.some(e=>e.status==="degraded")?"degraded":"ready";l$1("host-discovery",w==="ready"?"passed":w==="degraded"?"warning":"failed",w==="ready"?`${g} has discoverable Workspai entry coverage.`:w==="degraded"?u.find(e=>e.reason)?.reason??`${g} entry coverage is degraded.`:`${g} entry coverage is missing required files.`,L[0]);let D=[e.agentIndex,e.agentContext,e.skillsIndex,e.model,e.knowledgeGraph],R=D.filter(e=>!H.existsSync(m.join(i$1,e)));l$1("canonical-evidence",R.length===0?"passed":"failed",R.length===0?"Required canonical workspace evidence is present.":`Required canonical evidence is missing: ${R.join(", ")}.`);let E=[],x=null,y=null;for(let e$1 of D)if(!R.includes(e$1))try{let r=JSON.parse(await O.readFile(m.join(i$1,e$1),"utf8"));b$1(e$1,r,e$1),e$1===e.model&&(x=r),e$1===e.knowledgeGraph&&(y=r);}catch{E.push(e$1);}l$1("canonical-contracts",E.length===0?"passed":"failed",E.length===0?"Canonical workspace evidence satisfies its published schemas.":`Canonical evidence failed contract validation: ${E.join(", ")}.`);let I=i.projectKnowledgeGraphReference,z=m.join(n,I),Z="failed",b$2="The project Knowledge Graph reference is missing.";if(H.existsSync(z)&&y)try{let e=JSON.parse(await O.readFile(z,"utf8"));b$1(I,e,I);let r=j$1(y,o.project.name),{integrity:C,...h}=e,f=y.source;e.project.name===o.project.name&&e.canonical.sourceHash===f?.hash&&e.canonical.projectionHash===c(r)&&e.integrity.payloadHash===c(h)?(Z="passed",b$2="The project reference integrity-binds the exact current projection of canonical workspace evidence."):b$2="The project Knowledge Graph reference is stale or does not match the canonical project projection.";}catch{b$2="The project Knowledge Graph reference failed schema or integrity validation.";}l$1("project-knowledge-graph",Z,b$2,I);let ge=x?.workspace,he=y?.workspace,fe=Array.isArray(y?.entities)?y.entities:[],me=Array.isArray(x?.projects)?x.projects:[],Q=E.length===0&&ge?.name===o.workspace.name&&he?.name===o.workspace.name&&me.some(e=>e.name===o.project.name)&&fe.some(e=>e.projectId===o.project.name);l$1("canonical-project-membership",Q?"passed":"failed",Q?"The project and workspace identities agree across the entry, Model, and Graph.":"The project or workspace identity is missing or inconsistent in canonical evidence.");let X=!o.intelligence.freshness.graphMatchesModel||["missing","stale"].includes(o.intelligence.freshness.model)||["missing","stale"].includes(o.intelligence.freshness.graph)?"failed":o.intelligence.freshness.model==="unknown"||o.intelligence.freshness.graph==="unknown"?"warning":"passed",k=false,G;if(t.validateLiveInputs!==false)try{let e=await a$1(i$1);k=e.status==="hit";let r=e.status==="hit"?"Live project inputs match the persisted Model and Knowledge Graph snapshot.":`Live project inputs require an intelligence refresh (${e.reason}).`;G={id:"live-inputs",status:k?"passed":"failed",message:r};}catch{G={id:"live-inputs",status:"failed",message:"Live project inputs could not be validated against canonical graph evidence."};}else G={id:"live-inputs",status:"warning",message:"Live input validation was skipped; persisted compatibility was checked only."};let K=X==="warning"&&o.intelligence.freshness.model==="unknown"&&o.intelligence.freshness.graph==="fresh"&&o.intelligence.freshness.graphMatchesModel&&k?"passed":X;l$1("persisted-freshness",K,K==="passed"?o.intelligence.freshness.model==="unknown"?"Model and Graph bindings are current; live input validation closes structural freshness while verify-before-use facts remain individually governed.":"Persisted Model and Knowledge Graph bindings are current.":K==="warning"?"Persisted evidence is compatible, but at least one freshness state is unknown.":"Persisted Model or Knowledge Graph evidence is missing, stale, or mismatched."),A.push(G);let d={present:false,appliesToProject:false,status:"none"},_=[],ue=m.join(i$1,i.goalIndex);if(H.existsSync(ue)){let e=null;try{e=await l({workspacePath:i$1,validateBindings:false});}catch{_.push("workspai goal --list --json"),l$1("active-goal","failed","The Goal index is present but invalid.");}if(e?.active&&(d={present:true,appliesToProject:e.active.scope.projects.includes(o.project.name),status:"invalid",id:e.active.id,objective:e.active.objective,lifecycle:e.active.lifecycle,goalPack:`workspace:${e.active.goalPack}`,agentHandoff:`workspace:${e.active.agentHandoff}`}),e)try{let r=await l({workspacePath:i$1,validateBindings:true});r.active&&(d={present:true,appliesToProject:r.active.scope.projects.includes(o.project.name),status:"ready",id:r.active.id,objective:r.active.objective,lifecycle:r.active.lifecycle,goalPack:`workspace:${r.active.goalPack}`,agentHandoff:`workspace:${r.active.agentHandoff}`}),l$1("active-goal","passed",r.active?"The active Goal Pack and agent handoff have valid canonical bindings.":"No active Goal Pack is selected.");}catch(r){let C=r instanceof Error?r.message:String(r),h=d.present&&/\bstale\b|--refresh/i.test(C);if(d.present&&(d.status=h?"stale":"invalid"),h&&d.objective){let f=e.active,re=f?.scope.kind==="project"&&f.scope.projects.length===1?`project:${f.scope.projects[0]}`:f?.scope.kind==="project-set"&&f.scope.projects.length>1?`projects:${f.scope.projects.join(",")}`:"workspace";_.push(`workspai goal ${JSON.stringify(d.objective)} --scope ${re} --for-agent generic --refresh --json`);}else _.push("workspai goal --status --json");l$1("active-goal","failed",h?"The selected Goal Pack is present but stale; regenerate it against current canonical evidence before acting.":d.present?"The selected Goal Pack is present but its canonical binding or handoff is invalid.":"The Goal index could not be validated.");}}else l$1("active-goal","passed","No Goal index is present for this workspace.");let ee=A.some(e=>e.status==="failed")?"blocked":A.some(e=>e.status==="warning")?"degraded":"ready",v=Te([w,ee]),P=o.blockers.some(e=>e.severity==="error")?"blocked":o.blockers.length>0?"degraded":"ready",ye=P==="blocked"?"blocked":P==="degraded"?"degraded":"not-verified",we=`command:workspai agent bootstrap --for-agent ${g} --strict --json`,ke=c$1.protocol.requiredReadOrder.map(e=>e==="command:workspai agent bootstrap --for-agent generic --strict --json"?we:e),te={schemaVersion:Ee,generatedAt:(t.now??new Date).toISOString(),status:v,statusScope:"agent-grounding",readiness:{agentGrounding:v,architectureEvidence:ee,projectEnvironment:P,release:ye},requestedAgent:J,resolvedHost:g,project:{name:o.project.name,relativePath:o.project.relativePath,...o.project.runtime?{runtime:o.project.runtime}:{},...o.project.framework?{framework:o.project.framework}:{}},workspace:{name:o.workspace.name,relationship:o.workspace.relationship,resolved:true,identityIsFilesystemPath:false,resolverCommand:"workspai project workspace status --json",portableUriScheme:"workspace:",resolvedPathPolicy:"runtime-private-never-persist"},entry:{artifact:M,schemaVersion:pe,hostStatus:w,entryFiles:L},canonicalEvidence:{projectContext:i.projectContextAgent,projectKnowledgeGraph:i.projectKnowledgeGraphReference,workspaceIndex:`workspace:${e.agentIndex}`,workspaceContext:`workspace:${e.agentContext}`,workspaceModel:`workspace:${e.model}`,knowledgeGraph:`workspace:${e.knowledgeGraph}`,workspaceSkillsIndex:`workspace:${e.skillsIndex}`,boundedGraphSearch:"command:workspai workspace graph search <task-query> --scope project:<project> --limit 12 --json",modelFreshness:k?"fresh":o.intelligence.freshness.model,graphFreshness:k?"fresh":o.intelligence.freshness.graph,graphMatchesModel:o.intelligence.freshness.graphMatchesModel,liveInputsValidated:k,blockerCount:o.blockers.length},activeGoal:d,requiredReadOrder:ke,claims:{architecture:v==="ready"?"allowed-with-citations":"prohibited",sourceInspection:"bounded-and-targeted",sourceMutation:"governed-cli-transaction-only",verification:"cli-evidence-only"},checks:A,nextActions:v==="ready"?[...d.present&&d.appliesToProject&&d.agentHandoff?[`read:${d.agentHandoff}`]:[],...P==="blocked"?["workspai doctor project --json","workspai workspace explain release-blocked --json"]:P==="degraded"?["workspai doctor project --json"]:[],`workspai workspace graph search <task-query> --scope project:${o.project.name} --limit 12 --json`,"inspect only the returned proof paths and target source files"]:[..._,"workspai workspace intelligence run --for-agent generic --strict --json",`workspai agent bootstrap --for-agent ${g} --strict --json`]},oe=S(V(c$1)),je=S({manifestHash:oe,projectContextHash:o.integrity.payloadHash,requestedAgent:J,status:v,generatedAt:te.generatedAt}),ne={...te,receiptId:je},$={...ne,integrity:{algorithm:"sha256",manifestHash:oe,projectContextHash:o.integrity.payloadHash,payloadHash:S(ne),portable:true,absolutePathsEmitted:false}};if(!j($))throw new Error("Agent bootstrap receipt rejected a non-portable local path.");return a($,"contracts/workspace-intelligence/agent-bootstrap-receipt.v1.json","Agent bootstrap receipt"),$}
|
|
2
|
-
export{pe as a,M as b,Ee as c,We as d,Fe as e,q as f,qe as g,ve as h,Ve as i,Be as j};
|