workspai 0.49.0 → 0.51.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.
Files changed (257) hide show
  1. package/README.md +123 -434
  2. package/contracts/analyze-last-run.v1.json +2 -2
  3. package/contracts/artifact-remediation-plan.v1.json +3 -9
  4. package/contracts/autopilot-release.v1.json +2 -0
  5. package/contracts/bootstrap-compliance.v1.json +2 -1
  6. package/contracts/cli-log-event.v1.json +1 -1
  7. package/contracts/cli-runtime-command-inventory.v1.snapshot.json +80 -0
  8. package/contracts/compatibility-matrix.v1.json +2 -0
  9. package/contracts/create-planner-capabilities.v1.json +153 -32
  10. package/contracts/doctor-project-evidence.v1.json +191 -11
  11. package/contracts/doctor-project-scan.v2.json +2 -0
  12. package/contracts/doctor-remediation-plan.v1.json +2 -2
  13. package/contracts/doctor-remediation-plan.v2.json +2 -2
  14. package/contracts/doctor-workspace-cache.v2.json +2 -0
  15. package/contracts/doctor-workspace-evidence.v1.json +189 -10
  16. package/contracts/extension-cli-compatibility.v1.json +10 -1
  17. package/contracts/infra-plan.v1.json +2 -0
  18. package/contracts/ingestion-plan.v1.json +85 -0
  19. package/contracts/ingestion-result.v1.json +59 -0
  20. package/contracts/mirror-ops.v1.json +2 -1
  21. package/contracts/pipeline-last-run.v1.json +2 -2
  22. package/contracts/private-product-manifest.v1.json +2 -0
  23. package/contracts/product-factory-plan.v1.json +2 -0
  24. package/contracts/project-archive.v1.json +2 -0
  25. package/contracts/project-entry-capability.v1.json +2 -3
  26. package/contracts/project-test-coverage.v1.json +189 -0
  27. package/contracts/project-workspace-link.v1.json +66 -0
  28. package/contracts/project-workspace-resolution.v1.json +28 -0
  29. package/contracts/published-contract-catalog.v1.json +45 -0
  30. package/contracts/release-readiness.v1.json +2 -2
  31. package/contracts/runtime-command-surface.v1.json +1456 -139
  32. package/contracts/transparency-evidence.v1.json +2 -1
  33. package/contracts/workspace-archive-capabilities.v1.json +11 -5
  34. package/contracts/workspace-archive-manifest.v1.json +236 -0
  35. package/contracts/workspace-archive-operation-result.v1.json +236 -0
  36. package/contracts/workspace-contract.v1.json +1 -1
  37. package/contracts/workspace-intelligence/agent-action-outcome.v1.json +2 -2
  38. package/contracts/workspace-intelligence/agent-customization-pack-report.v1.json +1 -1
  39. package/contracts/workspace-intelligence/agent-hooks.v1.json +2 -0
  40. package/contracts/workspace-intelligence/agent-reports-index.v1.json +1 -1
  41. package/contracts/workspace-intelligence/blocker-resolution.v1.json +3 -9
  42. package/contracts/workspace-intelligence/doctor-fix-result.v1.json +2 -2
  43. package/contracts/workspace-intelligence/doctor-graph-diagnosis.v1.json +208 -0
  44. package/contracts/workspace-intelligence/fact-freshness.v1.json +2 -2
  45. package/contracts/workspace-intelligence/mcp-design.v1.json +2 -0
  46. package/contracts/workspace-intelligence/model-usage-event.v1.json +1 -1
  47. package/contracts/workspace-intelligence/project-context-agent.v1.json +360 -0
  48. package/contracts/workspace-intelligence/studio-blocker-handoff.v1.json +1 -1
  49. package/contracts/workspace-intelligence/workspace-context.v1.json +1 -1
  50. package/contracts/workspace-intelligence/workspace-contract-verify.v1.json +2 -2
  51. package/contracts/workspace-intelligence/workspace-dependency-graph.v1.json +1 -1
  52. package/contracts/workspace-intelligence/workspace-explain.v1.json +1 -1
  53. package/contracts/workspace-intelligence/workspace-graph-stream.v1.json +1 -1
  54. package/contracts/workspace-intelligence/workspace-graph-token-efficiency.v1.json +1 -1
  55. package/contracts/workspace-intelligence/workspace-impact.v1.json +1 -1
  56. package/contracts/workspace-intelligence/workspace-intelligence-evaluation-comparison.v1.json +1 -1
  57. package/contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json +1 -1
  58. package/contracts/workspace-intelligence/workspace-intelligence-history.v1.json +1 -1
  59. package/contracts/workspace-intelligence/workspace-intelligence-run.v1.json +2 -2
  60. package/contracts/workspace-intelligence/workspace-knowledge-graph-change-overlay.v1.json +1 -1
  61. package/contracts/workspace-intelligence/workspace-knowledge-graph.v1.json +48 -5
  62. package/contracts/workspace-intelligence/workspace-knowledge-search.v1.json +1 -1
  63. package/contracts/workspace-intelligence/workspace-model-diff.v1.json +1 -1
  64. package/contracts/workspace-intelligence/workspace-model-snapshot.v1.json +1 -1
  65. package/contracts/workspace-intelligence/workspace-model.v1.json +97 -5
  66. package/contracts/workspace-intelligence/workspace-operational-skill.v1.json +1 -1
  67. package/contracts/workspace-intelligence/workspace-skills-index.v1.json +1 -1
  68. package/contracts/workspace-intelligence/workspace-verify.v1.json +1 -1
  69. package/contracts/workspace-intelligence-architecture.v1.json +33 -7
  70. package/contracts/workspace-intelligence-chain.v1.json +1 -1
  71. package/contracts/workspace-list.v1.json +2 -0
  72. package/contracts/workspace-model-cache.v1.json +2 -0
  73. package/contracts/workspace-registry.v1.json +1 -1
  74. package/contracts/workspace-run-last.v1.json +1 -1
  75. package/contracts/workspace-share-bundle.v1.json +2 -1
  76. package/contracts/workspace-snapshot.v1.json +2 -0
  77. package/contracts/workspace-snapshot.v2.json +2 -0
  78. package/contracts/workspace-sync.v1.json +2 -0
  79. package/contracts/workspace-watch-event.v1.json +2 -0
  80. package/dist/analyze-4H33PAUB.js +1 -0
  81. package/dist/{artifact-remediation-plan-SPOUHMK5.js → artifact-remediation-plan-TQ6KTTXD.js} +1 -1
  82. package/dist/autopilot-release-BHZYM5KX.js +1 -0
  83. package/dist/chunk-2D4UOYOJ.js +1 -0
  84. package/dist/chunk-2OIBHUVH.js +1 -0
  85. package/dist/chunk-3D2PAIRH.js +3 -0
  86. package/dist/chunk-3GRKUP5W.js +33 -0
  87. package/dist/{managed-agent-markers-AXUM75OE.js → chunk-3RBUSW7H.js} +1 -1
  88. package/dist/chunk-4WJC5QCD.js +2 -0
  89. package/dist/chunk-6HLPTJZ3.js +13 -0
  90. package/dist/{chunk-CV5HKU4P.js → chunk-7T4TSV5C.js} +1 -1
  91. package/dist/chunk-AFIFZTOY.js +2 -0
  92. package/dist/{chunk-BMWFQXGW.js → chunk-AHLMIL2T.js} +1 -1
  93. package/dist/chunk-AL237TSJ.js +7 -0
  94. package/dist/chunk-BBGNDMRU.js +2 -0
  95. package/dist/chunk-BG4FWJJ3.js +1 -0
  96. package/dist/{chunk-VU7NZHPM.js → chunk-BHYTI3RH.js} +1 -1
  97. package/dist/chunk-BYTFXQ6G.js +1 -0
  98. package/dist/chunk-CZC5P2MF.js +1 -0
  99. package/dist/chunk-DLM6C7FU.js +8 -0
  100. package/dist/{chunk-CRHYBQI3.js → chunk-DQ3PI7EP.js} +1 -1
  101. package/dist/chunk-E3CT7TYT.js +1 -0
  102. package/dist/chunk-EPVFKJF4.js +1 -0
  103. package/dist/chunk-EWZZUQBR.js +1 -0
  104. package/dist/chunk-FKWB66NQ.js +4 -0
  105. package/dist/{chunk-BGPXQQNY.js → chunk-FZ76CF2W.js} +1 -1
  106. package/dist/chunk-GBAO4GSW.js +2 -0
  107. package/dist/chunk-GQRWRHSR.js +86 -0
  108. package/dist/{chunk-ESLPI3XZ.js → chunk-HE4PUMU4.js} +1 -1
  109. package/dist/chunk-HMGPELXS.js +1 -0
  110. package/dist/chunk-HSZCINFX.js +2 -0
  111. package/dist/{chunk-3VFA7D5T.js → chunk-IND3TUVU.js} +1 -1
  112. package/dist/{chunk-NHN4QXPP.js → chunk-KVSYBHUR.js} +1 -1
  113. package/dist/chunk-L2E2Z4OE.js +5 -0
  114. package/dist/chunk-MAF3LLGK.js +691 -0
  115. package/dist/chunk-MOSXTVPU.js +1 -0
  116. package/dist/chunk-MVLIONQD.js +1 -0
  117. package/dist/chunk-PS5F4DCT.js +1 -0
  118. package/dist/{chunk-K4X3DM7R.js → chunk-Q6TKQVKQ.js} +1 -1
  119. package/dist/chunk-RJIYCDVC.js +1 -0
  120. package/dist/chunk-RVQLMTTI.js +2 -0
  121. package/dist/chunk-SHXJ2GDR.js +75 -0
  122. package/dist/chunk-TDTCMZK7.js +10 -0
  123. package/dist/chunk-TROHVI2V.js +2 -0
  124. package/dist/chunk-U2LR73E2.js +1 -0
  125. package/dist/chunk-U2QL5733.js +36 -0
  126. package/dist/{chunk-TIE2XMGH.js → chunk-VCW5HSPC.js} +12 -12
  127. package/dist/chunk-VRW6KXNK.js +6 -0
  128. package/dist/chunk-VU2BKKMB.js +1 -0
  129. package/dist/chunk-WJVB6SSD.js +16 -0
  130. package/dist/{chunk-32OJDBIG.js → chunk-XBM2P45G.js} +2 -2
  131. package/dist/chunk-Y5YAP4F3.js +2 -0
  132. package/dist/{create-S64IWHAP.js → create-SBFBFXKN.js} +1 -1
  133. package/dist/{demo-kit-DZ7TPG7K.js → demo-kit-KHH63TNA.js} +2 -2
  134. package/dist/{doctor-4NNUDNGZ.js → doctor-OPCMTBJB.js} +1 -1
  135. package/dist/{dotnet-webapi-clean-A6MVDYXX.js → dotnet-webapi-clean-VXEF4SHM.js} +5 -5
  136. package/dist/{gofiber-standard-I5YPQG5V.js → gofiber-standard-AQGSC7ON.js} +3 -3
  137. package/dist/{gogin-standard-VY2L4QT5.js → gogin-standard-7DU3OCBX.js} +3 -3
  138. package/dist/index.d.ts +38 -6
  139. package/dist/index.js +267 -355
  140. package/dist/managed-agent-markers-COE5DJ3W.js +1 -0
  141. package/dist/pipeline-7BUXAFS2.js +5 -0
  142. package/dist/platform-capabilities-PR6YL4KC.js +1 -0
  143. package/dist/project-intelligence-lens-BKKVPCLC.js +1 -0
  144. package/dist/project-test-coverage-BALEHHTT.js +1 -0
  145. package/dist/{pythonRapidkitExec-CVCIK225.js → pythonRapidkitExec-YR7P5LWG.js} +1 -1
  146. package/dist/rust-axum-4HXDICIB.js +140 -0
  147. package/dist/{springboot-standard-55XKCBIZ.js → springboot-standard-EK6GYN5T.js} +7 -7
  148. package/dist/workspace-U6ZQLELX.js +1 -0
  149. package/dist/{workspace-agent-sync-662QHXGF.js → workspace-agent-sync-L4SY7B4Q.js} +1 -1
  150. package/dist/workspace-archive-4JNT4S7N.js +1 -0
  151. package/dist/workspace-context-KOBSLZTI.js +1 -0
  152. package/dist/workspace-contract-SOD3OOVF.js +1 -0
  153. package/dist/workspace-explain-2CTMW2YW.js +1 -0
  154. package/dist/workspace-explain-contract-H7O26QJU.js +1 -0
  155. package/dist/{workspace-feedback-SUVH2LUJ.js → workspace-feedback-ZZ4HPW2T.js} +1 -1
  156. package/dist/{workspace-foundation-WPLD7OEO.js → workspace-foundation-PUIYBQUF.js} +1 -1
  157. package/dist/workspace-graph-stream-BLKIC7VN.js +1 -0
  158. package/dist/workspace-graph-token-efficiency-5FNH4JZ5.js +1 -0
  159. package/dist/{workspace-history-BANOJRQ2.js → workspace-history-SPKNRHIX.js} +1 -1
  160. package/dist/workspace-intelligence-I3ABOH2F.js +1 -0
  161. package/dist/{workspace-intelligence-evaluation-IPH7M3WV.js → workspace-intelligence-evaluation-7CABG5Y6.js} +1 -1
  162. package/dist/workspace-intelligence-runner-Q2XSR3ZL.js +1 -0
  163. package/dist/workspace-intelligence-runtime-registry-ZZ3GRAL2.js +1 -0
  164. package/dist/{workspace-knowledge-graph-ARDC6HHG.js → workspace-knowledge-graph-5MKEI4Z5.js} +1 -1
  165. package/dist/{workspace-knowledge-graph-query-VOSPPH4W.js → workspace-knowledge-graph-query-EKHIE3E2.js} +1 -1
  166. package/dist/{workspace-marker-SMBC3Z2Q.js → workspace-marker-7NHMDIRL.js} +1 -1
  167. package/dist/workspace-mcp-serve-ETNUA72W.js +3 -0
  168. package/dist/workspace-model-HHA37SNH.js +1 -0
  169. package/dist/workspace-model-hash-ZXYPIGCW.js +1 -0
  170. package/dist/workspace-onboarding-ELHZABJE.js +1 -0
  171. package/dist/{workspace-python-engine-state-2MLKJYQG.js → workspace-python-engine-state-J4QKW55K.js} +1 -1
  172. package/dist/workspace-readme-HGGZ4AZB.js +77 -0
  173. package/dist/{workspace-registry-summary-ORDK7A36.js → workspace-registry-summary-D2QM5JF6.js} +1 -1
  174. package/dist/workspace-run-DAAZBCN7.js +1 -0
  175. package/dist/{workspace-verify-EBVL7FWT.js → workspace-verify-4WJTLXRA.js} +1 -1
  176. package/dist/workspace-watch-2PIFTQ6B.js +1 -0
  177. package/docs/GLOSSARY.md +17 -16
  178. package/docs/OPEN_SOURCE_USER_SCENARIOS.md +8 -3
  179. package/docs/README.md +6 -3
  180. package/docs/README_CONTENT_CONTRACT.md +98 -115
  181. package/docs/ci-workflows.md +13 -4
  182. package/docs/commands-reference.md +43 -10
  183. package/docs/contracts/ARTIFACT_CATALOG.md +65 -26
  184. package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +2 -0
  185. package/docs/contracts/RUNTIME_SUPPORT_MATRIX.md +3 -3
  186. package/docs/contracts/rapidkit-cli-contracts.json +2 -2
  187. package/docs/create-planner-capabilities.md +36 -5
  188. package/docs/creating-workspaces-and-projects.md +59 -3
  189. package/docs/doctor-command.md +118 -11
  190. package/docs/from-code-to-shared-understanding.md +4 -1
  191. package/docs/graph-benchmark-methodology.md +2 -2
  192. package/docs/workspace-intelligence-evaluation.md +5 -0
  193. package/docs/workspace-knowledge-graph.md +141 -7
  194. package/docs/workspace-operations.md +149 -10
  195. package/package.json +7 -4
  196. package/scripts/enterprise-package-smoke.mjs +24 -1
  197. package/templates/kits/fastapi-ddd/README.md.j2 +1 -1
  198. package/templates/kits/fastapi-standard/README.md.j2 +1 -1
  199. package/templates/kits/nestjs-standard/Dockerfile.j2 +1 -1
  200. package/templates/kits/nestjs-standard/README.md.j2 +1 -1
  201. package/templates/kits/nestjs-standard/package.json.j2 +11 -2
  202. package/dist/analyze-EEEU3MIF.js +0 -1
  203. package/dist/autopilot-release-R4XRTWEM.js +0 -1
  204. package/dist/chunk-22DT744Z.js +0 -1
  205. package/dist/chunk-37CVKXBD.js +0 -1
  206. package/dist/chunk-3NU32T4A.js +0 -2
  207. package/dist/chunk-3ZK2GU7C.js +0 -1
  208. package/dist/chunk-4HDYADHT.js +0 -13
  209. package/dist/chunk-4KUIFXHM.js +0 -5
  210. package/dist/chunk-52PBRX7F.js +0 -1
  211. package/dist/chunk-54EP5CEV.js +0 -8
  212. package/dist/chunk-5XATWNME.js +0 -1
  213. package/dist/chunk-7YHK5NM3.js +0 -2
  214. package/dist/chunk-AFL3ACCR.js +0 -2
  215. package/dist/chunk-BFLJ2R4D.js +0 -80
  216. package/dist/chunk-E2KJ5QWY.js +0 -4
  217. package/dist/chunk-EKZLUMCS.js +0 -933
  218. package/dist/chunk-EYJ2CQSK.js +0 -1
  219. package/dist/chunk-FTY7GGXJ.js +0 -33
  220. package/dist/chunk-FXQJX34Z.js +0 -1
  221. package/dist/chunk-GSWPGELT.js +0 -2
  222. package/dist/chunk-GZTYAEWX.js +0 -1
  223. package/dist/chunk-HDXNIN4N.js +0 -1
  224. package/dist/chunk-HZDXO65G.js +0 -36
  225. package/dist/chunk-J5ENLXDF.js +0 -1
  226. package/dist/chunk-KB44JP4M.js +0 -2
  227. package/dist/chunk-LHOZXC2M.js +0 -2
  228. package/dist/chunk-MER6ZBN2.js +0 -13
  229. package/dist/chunk-NAJCUQ4X.js +0 -2
  230. package/dist/chunk-OA537ZQ5.js +0 -1
  231. package/dist/chunk-OW42TZFB.js +0 -1
  232. package/dist/chunk-P3D5YQB2.js +0 -1
  233. package/dist/chunk-PHXQR6PX.js +0 -2
  234. package/dist/chunk-PRTR2DQ2.js +0 -1
  235. package/dist/chunk-RHQW3DTP.js +0 -1
  236. package/dist/chunk-T4YR4RAI.js +0 -2
  237. package/dist/chunk-WDKNMTJQ.js +0 -1
  238. package/dist/chunk-Y45WZR5N.js +0 -5
  239. package/dist/chunk-YJZOMRAS.js +0 -1
  240. package/dist/pipeline-LHTPE3DR.js +0 -5
  241. package/dist/platform-capabilities-2B4QMZXE.js +0 -1
  242. package/dist/workspace-PJPRBUMQ.js +0 -1
  243. package/dist/workspace-archive-P76EDIUG.js +0 -10
  244. package/dist/workspace-context-23YYCUCP.js +0 -1
  245. package/dist/workspace-contract-TU2I7GC2.js +0 -1
  246. package/dist/workspace-dependency-graph-BP4EXYQ5.js +0 -1
  247. package/dist/workspace-explain-MWUEN643.js +0 -1
  248. package/dist/workspace-explain-contract-ZPI3JXJU.js +0 -1
  249. package/dist/workspace-graph-stream-KAGGQPJT.js +0 -1
  250. package/dist/workspace-graph-token-efficiency-CFGFCJ5V.js +0 -1
  251. package/dist/workspace-intelligence-MFJE7W67.js +0 -1
  252. package/dist/workspace-intelligence-runner-OTYTHV6B.js +0 -1
  253. package/dist/workspace-mcp-serve-EZR6O76D.js +0 -3
  254. package/dist/workspace-model-7OU2M3LE.js +0 -1
  255. package/dist/workspace-model-hash-MHXK5MEI.js +0 -1
  256. package/dist/workspace-run-QND2SIYA.js +0 -1
  257. package/dist/workspace-watch-7HWGA5TF.js +0 -1
@@ -20,6 +20,28 @@ The canonical `.workspai-workspace` marker must remain trackable. Generated
20
20
  workspace `.gitignore` files exclude legacy/local engine state but do not
21
21
  exclude the canonical marker.
22
22
 
23
+ ## Project entry and grounding
24
+
25
+ These paths are relative to each registered project root, not the workspace
26
+ root:
27
+
28
+ | Artifact | Writer | Schema / format | Portability and reader purpose |
29
+ | --- | --- | --- | --- |
30
+ | `.workspai/workspace-link.local.json` | `adopt`, `import`, project creation, `workspace sync`, `project workspace relink` | `project-workspace-link.v1` | Machine-local absolute binding; always gitignored and never an agent evidence payload |
31
+ | `.workspai/reports/project-context-agent.json` | Project lens reconciliation and `workspace agent-sync --write` | `project-context-agent.v1` | Portable bounded model/graph/proof projection for project-local agents |
32
+ | `.workspai/PROJECT-GROUNDING.md` | Project lens reconciliation | Markdown | Portable human/agent entry guide with path-free workspace references |
33
+ | `AGENTS.md` managed section | Project lens reconciliation in `managed` mode | Managed Markdown block | Preserves user content and routes compatible agents to project/workspace evidence |
34
+
35
+ The project link is validated against the canonical workspace contract and a
36
+ SHA-256 binding over workspace identity, project identity, portable relative
37
+ path, machine paths, and relationship. Project context generation rejects
38
+ absolute paths before writing. `managed`, `local`, and `off` grounding modes
39
+ control portable project surfaces and converge by removing stale managed
40
+ sections and ignore rules during transitions; they never make the
41
+ machine-local link publishable. The context is bounded but not count-only: it
42
+ includes topology, API/deployment/test surfaces, blockers, portable proofs,
43
+ and model/graph freshness for the selected project.
44
+
23
45
  ## Naming conventions
24
46
 
25
47
  | Pattern | Meaning | Examples |
@@ -30,18 +52,19 @@ exclude the canonical marker.
30
52
 
31
53
  ## Governance evidence loop
32
54
 
33
- | Command | Primary artifact | Schema version | JSON Schema |
34
- | ------------------------------------ | ----------------------------------------------------------- | ------------------------------- | ------------------------------------------------------------ |
35
- | `doctor workspace` | `.workspai/reports/doctor-last-run.json` | `doctor-workspace-evidence-v1` | `contracts/doctor-workspace-evidence.v1.json` |
36
- | `doctor project` | `.workspai/reports/doctor-project-last-run.json` | `doctor-project-evidence-v1` | `contracts/doctor-project-evidence.v1.json` |
37
- | `doctor * --plan` | `.workspai/reports/doctor-remediation-plan-last-run.json` | `doctor-remediation-plan-v2` | `contracts/doctor-remediation-plan.v2.json` |
38
- | `doctor * --fix/--apply` | `.workspai/reports/doctor-fix-result-last-run.json` | `rapidkit-doctor-fix-result-v1` | `contracts/workspace-intelligence/doctor-fix-result.v1.json` |
39
- | `workspace remediation-plan --write` | `.workspai/reports/artifact-remediation-plan-last-run.json` | `artifact-remediation-plan-v1` | `contracts/artifact-remediation-plan.v1.json` |
40
- | `analyze` | `.workspai/reports/analyze-last-run.json` | `rapidkit-analyze-v1` | `contracts/analyze-last-run.v1.json` |
41
- | `readiness` | `.workspai/reports/release-readiness-last-run.json` | `release-readiness-v1` | `contracts/release-readiness.v1.json` |
42
- | `pipeline` | `.workspai/reports/pipeline-last-run.json` | `rapidkit-pipeline-v1` | `contracts/pipeline-last-run.v1.json` |
43
- | `autopilot release` | `.workspai/reports/autopilot-release-last-run.json` | `autopilot-release-v1` | `contracts/autopilot-release.v1.json` |
44
- | | `.workspai/reports/autopilot-release.json` | (alias, same payload) | `contracts/autopilot-release.v1.json` |
55
+ | Command | Primary artifact | Schema version | JSON Schema |
56
+ | ------------------------------------ | ----------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------ |
57
+ | `doctor workspace` | `.workspai/reports/doctor-last-run.json` | `doctor-workspace-evidence-v1` | `contracts/doctor-workspace-evidence.v1.json` |
58
+ | `doctor project` | `.workspai/reports/doctor-project-last-run.json` | `doctor-project-evidence-v1` | `contracts/doctor-project-evidence.v1.json` |
59
+ | `project coverage` | `.workspai/reports/project-test-coverage-last-run.json` | `workspai.project-test-coverage.v1` | `contracts/project-test-coverage.v1.json` |
60
+ | `doctor * --plan` | `.workspai/reports/doctor-remediation-plan-last-run.json` | `doctor-remediation-plan-v2` | `contracts/doctor-remediation-plan.v2.json` |
61
+ | `doctor * --fix/--apply` | `.workspai/reports/doctor-fix-result-last-run.json` | `rapidkit-doctor-fix-result-v1` | `contracts/workspace-intelligence/doctor-fix-result.v1.json` |
62
+ | `workspace remediation-plan --write` | `.workspai/reports/artifact-remediation-plan-last-run.json` | `artifact-remediation-plan-v1` | `contracts/artifact-remediation-plan.v1.json` |
63
+ | `analyze` | `.workspai/reports/analyze-last-run.json` | `rapidkit-analyze-v1` | `contracts/analyze-last-run.v1.json` |
64
+ | `readiness` | `.workspai/reports/release-readiness-last-run.json` | `release-readiness-v1` | `contracts/release-readiness.v1.json` |
65
+ | `pipeline` | `.workspai/reports/pipeline-last-run.json` | `rapidkit-pipeline-v1` | `contracts/pipeline-last-run.v1.json` |
66
+ | `autopilot release` | `.workspai/reports/autopilot-release-last-run.json` | `autopilot-release-v1` | `contracts/autopilot-release.v1.json` |
67
+ | | `.workspai/reports/autopilot-release.json` | (alias, same payload) | `contracts/autopilot-release.v1.json` |
45
68
 
46
69
  Side/cache (not gates): `.workspai/reports/doctor-workspace-cache.json` (`doctor-workspace-cache-v2`).
47
70
 
@@ -64,11 +87,13 @@ this plan before inventing per-card repair logic. The plan carries ordered actio
64
87
  operations where deterministic, refresh/verify commands, risk, approval state, and rollback
65
88
  strategy.
66
89
 
67
- When `doctor project` runs inside a workspace, the workspace report remains the canonical
68
- governance artifact and Doctor mirrors `doctor-project-last-run.json`,
69
- `doctor-remediation-plan-last-run.json`, and `doctor-fix-result-last-run.json` into the scoped
70
- project's `.workspai/reports/` directory. This keeps Studio, agents, and project-local operators on
71
- the same evidence without losing the workspace source of truth.
90
+ When `doctor project` runs inside a workspace, the project-local report is written beside the
91
+ project and the workspace receives both a latest alias and a collision-safe project copy under
92
+ `.workspai/reports/projects/<project-slug>--<identity-hash>/`. Coverage evidence follows the same
93
+ three-location rule. The hash is derived from workspace-relative identity, so projects with the
94
+ same folder name cannot overwrite each other. Remediation plans and fix results are also mirrored
95
+ into the scoped project. Studio, CI, and project-local tools can therefore use the same evidence
96
+ without guessing which project produced a latest alias.
72
97
 
73
98
  ## Workspace intelligence
74
99
 
@@ -108,10 +133,14 @@ status/exit coherence, hard-failure skip propagation, and the aggregate verdict.
108
133
  See [Unified Workspace Intelligence Runner](../workspace-intelligence-runner.md)
109
134
  for the normative user and integration semantics.
110
135
 
111
- `workspace-model.json` and `workspace-knowledge-graph.json` are published as one
112
- recoverable artifact transaction. The graph carries a SHA-256 `source` binding
113
- to the canonical model, so consumers must reject a graph whose source hash does
114
- not equal the current structural model hash.
136
+ `workspace-model.json` and `workspace-knowledge-graph.json` are published under
137
+ one workspace lock as a rollback-capable artifact transaction. Individual file
138
+ replacement is atomic, and a partial set failure restores both preimages. The
139
+ model is canonical; the graph is derived and cannot mutate it during the run.
140
+ The graph contract fixes `source.kind` to `workspace-model`,
141
+ `source.artifact` to `.workspai/reports/workspace-model.json`, and `source.hash`
142
+ to the model's stable structural SHA-256. Current-state consumers must reject a
143
+ graph whose binding does not match the current model.
115
144
 
116
145
  `workspace graph jsonld|graphml|gexf --output <path>` creates explicit interchange
117
146
  projections from that bound graph. These files are portable exports, not competing
@@ -150,11 +179,13 @@ sources: package manifests (`package.json` deps, `pyproject.toml` path deps, `go
150
179
  replace → `package-dep`), cross-boundary JS/TS source imports (`code-import`), the
151
180
  workspace contract (`dependsOn` → `service-dependsOn`, matched `publishes`/`consumes`
152
181
  → `event-pub-sub`, env↔port references → `shared-resource`), and an optional manual
153
- override file. Node/edge ordering and `hashDependencyGraph` are stable, so the graph is
154
- embedded as a first-class field of `workspace-model.v1` (`model.graph`) on every
155
- `buildWorkspaceModel` run; `hashModel` normalizes the embedded `graph.generatedAt` so the
156
- structural graph participates in the model hash without causing timestamp drift.
157
- (`model.graph` is additive/optional for pre-graph readers.)
182
+ override file. Node/edge ordering and `hashDependencyGraph` are stable, so the compact
183
+ topology is embedded as the canonical `workspace-model.v1.projectTopology` field on every
184
+ `buildWorkspaceModel` run. `hashWorkspaceModel` normalizes
185
+ `projectTopology.generatedAt`, so the structural topology participates in the model hash
186
+ without causing timestamp drift. During the v1 migration window the CLI also emits the
187
+ deprecated `graph` compatibility alias. Consumers must read `projectTopology`; when both
188
+ fields exist, validation requires them to be structurally identical.
158
189
 
159
190
  **Manual overrides.** `.workspai/workspace-graph.overrides.json` (`{ "edges": [{ "from",
160
191
  "to", "kind", "evidence" }] }`) declares authoritative edges that win over inference for
@@ -245,6 +276,14 @@ reused and the dependency graph re-infers only edges incident to changed project
245
276
  changes or project renames, and rescans code-imports fully when the node set changes. Reported
246
277
  modes: `full` / `incremental` / `unchanged`.
247
278
 
279
+ The model command adds a non-structural `build` object to its JSON output and,
280
+ when `--write` is used, to the persisted model result. `mode`, `outcome`, and
281
+ `engineStatus` tell IDE/CI consumers
282
+ whether the result was rebuilt, partially reused, or fully reused. This
283
+ provenance is deliberately excluded from the canonical workspace-model hash,
284
+ so switching between full, cached, and incremental execution cannot make the
285
+ paired knowledge graph appear stale.
286
+
248
287
  ### Freshness metadata (`rapidkit-freshness-metadata-v1`)
249
288
 
250
289
  Intelligence reports carry a shared freshness envelope so any consumer (CLI
@@ -58,10 +58,12 @@ These nested Commander commands are implemented and orchestrated by Workspai CLI
58
58
  - `product manifest create`
59
59
  - `product plan`
60
60
  - `project commands`
61
+ - `project coverage`
61
62
  - `project archives`
62
63
  - `project archive`
63
64
  - `project restore`
64
65
  - `project delete`
66
+ - `project workspace`
65
67
  - `snapshot create`
66
68
  - `snapshot inspect`
67
69
  - `snapshot list`
@@ -18,9 +18,9 @@ It separates three concerns:
18
18
  | Go | extended | yes | yes | init, dev, start, build, test, lint, format, help | no | readiness |
19
19
  | Java / Spring Boot | extended | yes | yes | init, dev, start, build, test, lint, format, help | no | readiness |
20
20
  | .NET / ASP.NET Core | extended | yes | yes | init, dev, start, build, test, lint, format, help | no | readiness |
21
- | PHP | observed | no | yes | help | no | observed |
21
+ | PHP | extended | yes | yes | init, dev, start, build, test, lint, format, help | no | readiness |
22
22
  | Ruby | observed | no | yes | help | no | observed |
23
- | Rust | observed | no | yes | help | no | observed |
23
+ | Rust | extended | yes | yes | init, dev, start, build, test, lint, format, help | no | readiness |
24
24
  | Elixir | observed | no | yes | help | no | observed |
25
25
  | Clojure | observed | no | yes | help | no | observed |
26
26
  | Scala | observed | no | yes | help | no | observed |
@@ -40,7 +40,7 @@ It separates three concerns:
40
40
  | Tier | Frameworks |
41
41
  | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
42
42
  | first-class | FastAPI, NestJS |
43
- | extended | Go/Fiber, Go/Gin, Spring Boot, ASP.NET Core, Django, Flask, Express, Fastify, Koa, Echo, Laravel, Symfony, Rails, Sinatra, Actix, Axum, Rocket, Phoenix, Next.js, Remix, React, Vue, Svelte, Solid, Nuxt, Angular, Astro, SvelteKit |
43
+ | extended | Go/Fiber, Go/Gin, Spring Boot, ASP.NET Core, Django, Flask, Express, Fastify, Koa, Echo, Laravel, Symfony, Rails, Sinatra, Actix, Axum, Rocket, Phoenix, Next.js, Remix, React, Vue, Svelte, Solid, Nuxt, Angular, Astro, SvelteKit, Tauri, Electron, VS Code Extension |
44
44
  | observed | Python, Node.js, Go, Java, PHP, Ruby, Rust, Elixir, Unknown/generic projects |
45
45
 
46
46
  ## Import Policy
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://getrapidkit.com/schemas/rapidkit-cli-contracts.json",
4
- "title": "RapidKit Core CLI Contracts",
3
+ "$id": "https://workspai.dev/schemas/rapidkit-cli-contracts.json",
4
+ "title": "Workspai CLI Contracts (RapidKit Core Compatibility)",
5
5
  "type": "object",
6
6
  "definitions": {
7
7
  "VersionResponse": {
@@ -21,10 +21,15 @@ Native create is reserved for Workspai-owned kits with deterministic contracts:
21
21
  - Go Fiber and Go Gin
22
22
  - Spring Boot
23
23
  - ASP.NET Core Web API
24
+ - Rust / Axum
24
25
 
25
26
  These kits can be exposed through `workspai create project` because Workspai can
26
27
  create the project and immediately produce the expected `.workspai` metadata,
27
28
  workspace registry entries, doctor evidence, and workspace model data.
29
+ They use a tested dependency baseline instead of floating to new upstream
30
+ majors during creation. Baseline upgrades ship as reviewed Workspai changes so
31
+ the same Workspai version remains reproducible across developer machines and
32
+ CI.
28
33
 
29
34
  ## Official generators
30
35
 
@@ -35,19 +40,45 @@ by Workspai and then registered in Workspace Intelligence:
35
40
  - React Router: `npx create-react-router@latest <name>`
36
41
  - React, Vue, Svelte, Solid, and Vite: `npm create vite@latest <name> ...`
37
42
  - Nuxt: `npx create-nuxt@latest <name> ...`
38
- - Angular: `npx @angular/cli@19 new <name>`
39
- - Astro: `npm create astro@4 <name>`
43
+ - Angular: `npx @angular/cli@latest new <name>`
44
+ - Astro: `npm create astro@latest <name>`
40
45
  - SvelteKit: `npx sv@latest create <name>`
46
+ - Tauri: `npm create tauri-app@latest <name> -- --template vanilla-ts`
47
+ - Electron Forge: `npx create-electron-app@latest <name> --template=vite-typescript`
48
+ - VS Code Extension: `npx --package yo@latest --package generator-code@latest -- yo code <name> ...`
49
+ - Laravel: `composer create-project --no-interaction --prefer-dist --stability=stable laravel/laravel <name>`
50
+
51
+ ### Stable version and runtime policy
52
+
53
+ Available official entries request the ecosystem's current stable release at
54
+ execution time; Workspai does not silently pin an older framework major. npm
55
+ generators use the `latest` distribution tag and Composer is restricted to
56
+ stable packages. npm engine checks run in strict mode, so an upstream generator
57
+ that does not support the operator's Node.js runtime stops before Workspai
58
+ claims the scaffold is usable.
59
+
60
+ Workspai also checks non-Node prerequisites before invoking a generator:
61
+
62
+ - Tauri requires Rust and Cargo in addition to its platform-specific system
63
+ dependencies.
64
+ - Electron Forge requires Git.
65
+ - VS Code Extension generation requires Git unless `--skip-git` is selected.
66
+ - Laravel requires PHP and Composer; Node.js/npm remain recommended for
67
+ frontend asset workflows.
68
+
69
+ The official generator remains the authority for exact framework/runtime
70
+ compatibility because its stable requirements can change independently of a
71
+ Workspai release. The selected policy is persisted as `latest-stable` in
72
+ project metadata and create evidence.
41
73
 
42
74
  Other ecosystems are planned official handoffs but are not automated yet:
43
75
 
44
76
  - WordPress site: `wp core download`, `wp config create`, `wp db create`, `wp core install`
45
77
  - WordPress block/plugin: `npx @wordpress/create-block@latest <slug>`
46
- - Laravel: `composer create-project laravel/laravel <name>`
47
78
  - Symfony: `composer create-project symfony/skeleton <name>`
48
79
  - Rails: `rails new <name>`
49
80
 
50
- These are `official` candidates, not active native kits. Until each planned
81
+ The remaining entries are `official` candidates, not active native kits. Until each planned
51
82
  post-create contract is implemented end to end, Workspai should guide users to
52
83
  create externally and then adopt/import the project.
53
84
 
@@ -72,7 +103,7 @@ Adoption still gives the project Workspace Intelligence:
72
103
  ## Product rule
73
104
 
74
105
  Do not convert an unsupported or ambiguous stack request into a different native
75
- kit. For example, a PHP, WordPress, Laravel, Symfony, or Rails request must not
106
+ kit. For example, a WordPress, Symfony, or Rails request must not
76
107
  be translated into FastAPI, NestJS, Go, Java, .NET, or a frontend kit.
77
108
 
78
109
  If executable create is unavailable, the planner should explain the supported
@@ -204,12 +204,29 @@ or update a registry.
204
204
  Workspace creation does not merge into or overwrite an existing target. If the
205
205
  resolved directory already exists, choose another name or output parent.
206
206
 
207
- To bring an existing repository into Workspai, use `adopt` or `import` instead:
207
+ To bring existing software into Workspai, use the operation that matches who
208
+ owns its location:
208
209
 
209
210
  ```bash
211
+ # Keep a project where it is.
210
212
  npx workspai adopt /path/to/project
213
+
214
+ # Copy or clone a project into the selected workspace.
215
+ npx workspai import /path/to/project --workspace /path/to/my-workspace
216
+
217
+ # Register an existing Workspai workspace without moving it.
218
+ npx workspai workspace connect /path/to/existing-workspace
219
+
220
+ # Restore and register a portable workspace archive.
221
+ npx workspai workspace import team.workspai-archive.zip --output ./team
211
222
  ```
212
223
 
224
+ Running `npx workspai create` interactively exposes the same choices as
225
+ “Create a project”, “Add existing software”, and—when appropriate—“Create
226
+ another workspace”. Inside a workspace, project and onboarding choices appear
227
+ first; creating another workspace remains an explicit escape hatch rather than
228
+ the default.
229
+
213
230
  ## Main workspace files
214
231
 
215
232
  A normal workspace includes:
@@ -249,7 +266,7 @@ npx workspai create
249
266
  If you choose project creation, the same project flow is used.
250
267
 
251
268
  When the terminal is interactive and the current directory is not inside a
252
- workspace, **every supported backend and frontend kit** shows the workspace
269
+ workspace, **every supported backend, frontend, desktop, and extension kit** shows the workspace
253
270
  management question before scaffolding:
254
271
 
255
272
  ```text
@@ -275,7 +292,12 @@ npx workspai create project fastapi.standard api
275
292
  npx workspai create project gofiber.standard gateway
276
293
  npx workspai create project springboot.standard orders
277
294
  npx workspai create project dotnet.webapi.clean billing
295
+ npx workspai create project rust.axum telemetry-api
278
296
  npx workspai create project frontend.nextjs dashboard
297
+ npx workspai create project desktop.tauri desktop-app
298
+ npx workspai create project desktop.electron admin-console
299
+ npx workspai create project extension.vscode editor-tools
300
+ npx workspai create project php.laravel customer-api
279
301
  ```
280
302
 
281
303
  The shorter frontend alias remains available:
@@ -295,6 +317,7 @@ npx workspai create frontend nextjs dashboard
295
317
  | `gogin.standard` | Go | Workspai npm CLI | No |
296
318
  | `springboot.standard` | Java | Workspai npm CLI | No |
297
319
  | `dotnet.webapi.clean` | .NET | Workspai npm CLI | No |
320
+ | `rust.axum` | Rust | Workspai npm CLI | No |
298
321
 
299
322
  NestJS runs on Node.js, but its current scaffold is provided through the
300
323
  RapidKit Core bridge.
@@ -320,6 +343,34 @@ Workspai has official-generator paths for:
320
343
  The ecosystem's official generator creates the application. Workspai then adds
321
344
  project metadata and performs the selected workspace registration.
322
345
 
346
+ ## Desktop, extension, and additional backend generators
347
+
348
+ | Category | Project | Kit | Creation owner |
349
+ | --------- | ----------------- | ------------------ | -------------------------------------- |
350
+ | Backend | Axum | `rust.axum` | Workspai deterministic Cargo baseline |
351
+ | Backend | Laravel | `php.laravel` | Composer / Laravel |
352
+ | Desktop | Tauri | `desktop.tauri` | create-tauri-app |
353
+ | Desktop | Electron Forge | `desktop.electron` | create-electron-app |
354
+ | Extension | VS Code Extension | `extension.vscode` | generator-code |
355
+
356
+ Every generated project receives a canonical `kind` and `category`. The four
357
+ user-facing categories are `backend`, `frontend`, `desktop`, and `extension`;
358
+ they remain visible in the Workspace Model and Knowledge Graph so consumers do
359
+ not have to guess a project’s role from its runtime.
360
+
361
+ Official generators may download packages and therefore need network access.
362
+ Each available integration requests the upstream latest stable channel rather
363
+ than pinning an old framework major. npm engine compatibility is enforced
364
+ strictly against the Node.js runtime running Workspai, and required ecosystem
365
+ tools such as Rust/Cargo, Git, PHP, or Composer are checked before generation.
366
+ The upstream generator remains authoritative for its exact supported runtime
367
+ range; Workspai records the `latest-stable` policy in the generated project
368
+ metadata and evidence.
369
+
370
+ `desktop.electron`, `extension.vscode`, and `php.laravel` do not accept
371
+ `--skip-install`, because their official generators do not expose a reliable,
372
+ documented no-install contract.
373
+
323
374
  # Where the project is created
324
375
 
325
376
  The project path is always:
@@ -441,6 +492,9 @@ npx workspai create project gofiber.standard gateway \
441
492
 
442
493
  Unlike `create workspace --here`, this turns the current directory itself into
443
494
  a workspace. It then creates the project under the requested output parent.
495
+ This registration is foundation-only: it does not probe Python or Poetry,
496
+ create a virtual environment, or install `rapidkit-core`. The selected kit owns
497
+ its runtime prerequisites and installation flow.
444
498
 
445
499
  For example, from `/home/me/platform`:
446
500
 
@@ -449,7 +503,9 @@ Workspace: /home/me/platform
449
503
  Project: /home/me/platform/gateway
450
504
  ```
451
505
 
452
- This uses the full current-folder workspace registration flow.
506
+ This uses the full current-folder Workspace Intelligence registration flow
507
+ (contract, model, graph, agent context, and registry) without coupling the
508
+ workspace to the optional Python engine.
453
509
 
454
510
  ## Choice 3: Create without workspace management
455
511
 
@@ -34,7 +34,8 @@ Checks:
34
34
  - all system checks
35
35
  - workspace marker resolution
36
36
  - project discovery and per-project health
37
- - dependency/env readiness by project type (Python/Node/Go)
37
+ - dependency, environment, test, quality, security, deployment, and coverage readiness per project
38
+ - runtime-native evidence without treating missing scanners as a clean result
38
39
 
39
40
  > Compatibility note: `npx workspai doctor --workspace` still works, but `doctor workspace` is the canonical form.
40
41
 
@@ -53,6 +54,8 @@ Checks:
53
54
  - dependency/env readiness for the selected project
54
55
  - enterprise probes (config contract, migration surface, runtime health surface)
55
56
  - score explainability breakdown for audit trails
57
+ - normalized dependency-audit and test-coverage evidence for CI, IDEs, and agents
58
+ - graph-aware root, impact-candidate, proof-path, and verification-target context
56
59
 
57
60
  > Compatibility note: `npx workspai doctor --project` also works.
58
61
 
@@ -84,6 +87,108 @@ npx workspai doctor project --json
84
87
  npx workspai doctor workspace --profile enterprise-strict --json
85
88
  ```
86
89
 
90
+ ## One verdict, backed by every probe
91
+
92
+ Doctor calculates one verdict from the host and every project probe:
93
+
94
+ - **Passed** means no blocking probe failed.
95
+ - **Needs attention** means the current profile found advisory work.
96
+ - **Blocked** means at least one error-level probe failed.
97
+
98
+ The score and verdict use the same counts. A failed security, coverage, or
99
+ runtime probe cannot be hidden behind a high percentage or a healthy host. New
100
+ evidence includes the host/project score components and per-project probe
101
+ summary; semantic validation rejects contradictory artifacts before they are
102
+ written. Older v1 evidence remains readable so existing workspaces and IDEs do
103
+ not break during migration.
104
+
105
+ ## Graph-aware diagnosis
106
+
107
+ When the project belongs to a workspace with a current model and Knowledge
108
+ Graph, Doctor enriches every warning or failure with evidence-backed structural
109
+ context:
110
+
111
+ - the package, file, service, deployment, or other graph entity nearest to the
112
+ finding;
113
+ - reachable APIs, services, infrastructure, owners, and other affected
114
+ candidates;
115
+ - connected test suites or CI pipelines that can verify the repair;
116
+ - the exact proof path and source artifacts supporting each connection;
117
+ - explicit unknowns when the graph cannot prove an effect or verification path.
118
+
119
+ Runtime-native dependency audits preserve the affected package names,
120
+ versions, advisory identifiers, and available severity/directness metadata.
121
+ Doctor uses those subjects to select the corresponding package or module
122
+ entity in the current project's graph neighborhood. If an audit names a
123
+ dependency that the graph cannot resolve, the diagnosis reports it under
124
+ `unresolvedSubjects`; it does not silently attach the finding to an unrelated
125
+ package.
126
+
127
+ This data is available under `project.graphDiagnosis` in project and workspace
128
+ Doctor JSON evidence. Doctor rejects stale, invalid, or model-unbound graph
129
+ evidence instead of presenting it as current.
130
+
131
+ Graph reachability is deliberately described as a **structural impact
132
+ candidate**, not runtime causality. It narrows investigation and gives Studio a
133
+ proof-carrying starting point; final verification still comes from the
134
+ runtime-owned checks.
135
+
136
+ ## Multi-runtime dependency evidence
137
+
138
+ Doctor selects the audit adapter from the detected runtime and lockfile:
139
+
140
+ | Ecosystem | Runtime-native evidence |
141
+ | ------------------------------------ | ------------------------------------------------------------------ |
142
+ | npm | npm, pnpm, Yarn Classic/Berry, Bun, or Deno audit |
143
+ | Python | `pip-audit` through the project virtual environment when available |
144
+ | Go | `govulncheck` |
145
+ | Rust | `cargo audit` |
146
+ | PHP | `composer audit` |
147
+ | Ruby | `bundler-audit` |
148
+ | .NET | vulnerable transitive package report |
149
+ | Elixir | `mix hex.audit` |
150
+ | Java, Scala, Kotlin, Clojure, C, C++ | project/organization-owned scanner contract |
151
+
152
+ Every result records the exact executable, arguments, ecosystem, severity
153
+ counts, and limitations. A missing tool, timeout, registry failure,
154
+ unparseable response, or unsupported zero-configuration workflow is explicit
155
+ evidence—not a zero-vulnerability result. Compatible automatic fixes never use
156
+ force; unresolved findings move to a targeted upgrade and verification plan.
157
+
158
+ ## Coverage goals that Doctor can verify
159
+
160
+ Generate a normalized baseline from the current project:
161
+
162
+ ```bash
163
+ npx workspai project coverage --run --target 80 --strict --json
164
+ ```
165
+
166
+ Workspai detects the runtime-owned runner, reads machine-readable coverage, and
167
+ normalizes lines, branches, functions, statements, low-coverage files, source
168
+ hash, and the requested target. It understands Istanbul/LCOV, coverage.py,
169
+ Go coverprofiles, JaCoCo/Cobertura/Clover, scoverage, SimpleCov, and LLVM
170
+ coverage. Runtime plans cover Node/Bun/Deno, Python, Go, JVM, .NET, Rust, PHP,
171
+ Ruby, Elixir, Clojure, Scala, Kotlin, C, and C++; if a project-owned runner does
172
+ not emit one of those portable formats, the result is explicitly `unavailable`
173
+ with setup guidance rather than an invented percentage.
174
+
175
+ Doctor consumes the resulting
176
+ `.workspai/reports/project-test-coverage-last-run.json`. If it is missing,
177
+ below target, unavailable, or failed, the probe tells Studio what evidence to
178
+ generate or which low-coverage source paths need source-aware tests. The repair
179
+ contract explicitly forbids lowering the target, excluding difficult files,
180
+ skipping tests, or removing assertions to manufacture a pass.
181
+
182
+ When the project belongs to a workspace, Workspai also writes:
183
+
184
+ ```text
185
+ <workspace>/.workspai/reports/project-test-coverage-last-run.json
186
+ <workspace>/.workspai/reports/projects/<slug>--<hash>/project-test-coverage-last-run.json
187
+ ```
188
+
189
+ The same namespaced layout is used for project Doctor evidence, preventing
190
+ same-name projects from overwriting each other.
191
+
87
192
  ## Enterprise Fix Pipeline
88
193
 
89
194
  Doctor supports policy profiles so the same evidence can be interpreted correctly in local,
@@ -283,15 +388,17 @@ change is safe enough for Doctor to apply with approval and post-fix verificatio
283
388
 
284
389
  Runtime-native probes add a second layer on top of the generic surface checks:
285
390
 
286
- | Runtime family | Native signals sampled by Doctor |
287
- | -------------- | --------------------------------------------------------------------- |
288
- | Node/Bun/Deno | test runners, ESLint/Prettier/Biome markers, audit script/tooling |
289
- | Python | pytest/tox/nox, Ruff/Black/Mypy, pip-audit/Safety/Bandit markers |
290
- | Go | `*_test.go`, golangci-lint/Makefile quality, govulncheck/gosec hints |
291
- | Java | Maven/Gradle tests, Checkstyle/Spotless/PMD, OWASP dependency checks |
292
- | .NET | test projects, `.editorconfig`, NuGet audit and vulnerable checks |
293
- | Rust | test/Cargo markers, rustfmt/clippy, cargo-audit hints |
294
- | PHP/Ruby/etc. | PHPUnit/Pint/PHPStan, RSpec/RuboCop/Bundler-audit and ecosystem hints |
391
+ | Runtime family | Native signals sampled by Doctor |
392
+ | ----------------- | -------------------------------------------------------------------------------- |
393
+ | Node/Bun/Deno | Jest/Vitest/native tests, ESLint/Prettier/Biome, package-manager audit |
394
+ | Python | pytest/tox/nox, Ruff/Black/Mypy, pip-audit/Safety/Bandit |
395
+ | Go | `*_test.go`, golangci-lint, govulncheck/gosec |
396
+ | Java/Kotlin/Scala | Maven/Gradle/sbt tests, Checkstyle/Spotless/Detekt/Scalafmt, declared JVM audit |
397
+ | .NET | test projects, `.editorconfig`, NuGet audit |
398
+ | Rust | Cargo tests, rustfmt/clippy, cargo-audit |
399
+ | PHP/Ruby | PHPUnit/Pest/PHPStan and RSpec/Minitest/RuboCop/Bundler-audit |
400
+ | Elixir/Clojure | ExUnit/Credo/Hex and clojure.test/Kaocha/clj-kondo |
401
+ | C/C++ | CTest/native test markers, clang tooling, declared SBOM or vulnerability scanner |
295
402
 
296
403
  ## CI Example
297
404
 
@@ -460,7 +567,7 @@ Legacy evidence without `schemaVersion` is still accepted. Unknown versions are
460
567
 
461
568
  ```bash
462
569
  npx workspai bootstrap [--profile <profile>]
463
- npx workspai setup <python|node|go|java|dotnet> [--warm-deps]
570
+ npx workspai setup <python|node|go|java|dotnet|rust|php> [--warm-deps]
464
571
  npx workspai workspace list
465
572
  npx workspai cache <status|clear|prune|repair>
466
573
  npx workspai mirror <status|sync|verify|rotate>
@@ -32,7 +32,10 @@ flowchart TB
32
32
  1. **Connect your software.** Create something new, adopt an existing project
33
33
  without moving it, or import a repository.
34
34
  2. **Understand the workspace.** Workspai builds one model of the projects and
35
- how they relate.
35
+ how they relate. That Workspace Model is canonical. Workspai then derives a
36
+ proof-backed Knowledge Graph from the model-owned project inventory so tools
37
+ can query files, APIs, packages, infrastructure, tests, ownership, and
38
+ decisions without creating a second source of truth.
36
39
  3. **Understand change and verify it.** Workspai shows affected areas and checks
37
40
  the evidence needed for a safe decision.
38
41
  4. **Share the result.** Developers, CI, IDEs, AI agents, and MCP clients consume
@@ -27,8 +27,8 @@ The result conforms to
27
27
  It records:
28
28
 
29
29
  - the query and result limit;
30
- - the graph schema, entity/relation/proof counts, source artifact, and source
31
- model SHA-256;
30
+ - the graph schema, entity/relation/proof counts, source artifact, and stable
31
+ structural model SHA-256;
32
32
  - the number and size of readable, deduplicated proof-source artifacts;
33
33
  - the bounded retrieval size and match count;
34
34
  - unreadable artifacts rather than silently excluding them;
@@ -94,6 +94,7 @@ Event bodies conform to
94
94
  ```bash
95
95
  npx workspai workspace eval status --json
96
96
  npx workspai workspace eval report --json
97
+ npx workspai workspace eval report --output ./evidence/my-evaluation.json --json
97
98
  ```
98
99
 
99
100
  Finalization writes:
@@ -102,6 +103,10 @@ Finalization writes:
102
103
  .workspai/reports/workspace-intelligence-evaluation-last-run.json
103
104
  ```
104
105
 
106
+ `--output` keeps that governed last-run artifact and also copies the finalized
107
+ report to the requested workspace-relative or absolute path. JSON output reports
108
+ the path that was actually requested, so automation does not need to infer it.
109
+
105
110
  Both live and final reports conform to
106
111
  [`workspace-intelligence-evaluation.v1.json`](../contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json).
107
112