create-principles-disciple 1.121.7 → 1.121.9

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 (461) hide show
  1. package/README.md +13 -1
  2. package/console/dist/server/config/pd-config-store.d.ts +1 -3
  3. package/console/dist/server/config/pd-config-store.js +4 -4
  4. package/console/dist/server/feedback/channels.d.ts +2 -8
  5. package/console/dist/server/feedback/channels.js +0 -11
  6. package/console/dist/server/index.js +34 -5
  7. package/console/dist/server/models/ActivationsConsoleModel.d.ts +28 -1
  8. package/console/dist/server/models/ActivationsConsoleModel.js +72 -30
  9. package/console/dist/server/models/GovernanceExperienceCollector.d.ts +28 -0
  10. package/console/dist/server/models/GovernanceExperienceCollector.js +305 -0
  11. package/console/dist/server/models/GovernanceProjectionCollector.d.ts +60 -2
  12. package/console/dist/server/models/GovernanceProjectionCollector.js +323 -285
  13. package/console/dist/server/models/PrincipleClassifier.d.ts +1 -1
  14. package/console/dist/server/models/PrincipleClassifier.js +7 -4
  15. package/console/dist/server/models/PrinciplesConsoleModel.d.ts +2 -1
  16. package/console/dist/server/models/ReceiptsConsoleModel.d.ts +5 -0
  17. package/console/dist/server/models/ReceiptsConsoleModel.js +140 -13
  18. package/console/dist/server/routes/activations.js +1 -1
  19. package/console/dist/server/routes/failed-tasks.js +28 -11
  20. package/console/dist/server/routes/governance.d.ts +26 -0
  21. package/console/dist/server/routes/governance.js +51 -0
  22. package/console/dist/server/routes/owner-identity.d.ts +31 -0
  23. package/console/dist/server/routes/owner-identity.js +76 -0
  24. package/console/dist/server/routes/update-history.d.ts +5 -0
  25. package/console/dist/server/routes/update-history.js +50 -4
  26. package/console/dist/server/routes/update.js +186 -32
  27. package/console/dist/shared/feedback-channel-ids.d.ts +13 -0
  28. package/console/dist/shared/feedback-channel-ids.js +12 -0
  29. package/console/dist/shared/feedback-contract.d.ts +46 -0
  30. package/console/dist/shared/feedback-contract.js +45 -0
  31. package/console/dist/ui/App.js +1 -1
  32. package/console/dist/ui/api.d.ts +22 -3
  33. package/console/dist/ui/api.js +63 -3
  34. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.d.ts +6 -0
  35. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.js +66 -0
  36. package/console/dist/ui/i18n/en.json +198 -2
  37. package/console/dist/ui/i18n/zh-CN.json +196 -0
  38. package/console/dist/ui/pages/activation/ActivationPage.js +14 -2
  39. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.js +25 -5
  40. package/console/dist/ui/pages/focus/FocusPage.d.ts +28 -1
  41. package/console/dist/ui/pages/focus/FocusPage.js +128 -15
  42. package/console/dist/ui/pages/principles/PrincipleDetailPage.d.ts +30 -0
  43. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +49 -6
  44. package/console/dist/ui/pages/settings/SettingsPage.js +67 -2
  45. package/console/dist/ui/pages/settings/UpdatePage.js +7 -7
  46. package/console/dist/ui/utils/enum-labels.js +0 -1
  47. package/console/dist/ui/utils/validators.d.ts +53 -21
  48. package/console/dist/ui/utils/validators.js +248 -21
  49. package/console/dist/web/assets/app.css +6 -0
  50. package/console/dist/web/assets/app.js +2721 -1664
  51. package/console/package.json +4 -2
  52. package/core/dist/host/host-adapter.d.ts +1 -1
  53. package/core/dist/host/host-adapter.d.ts.map +1 -1
  54. package/core/dist/host/host-adapter.js +1 -0
  55. package/core/dist/host/host-adapter.js.map +1 -1
  56. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +12 -2
  57. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  58. package/core/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js +1 -1
  59. package/core/dist/runtime-v2/__tests__/attack-e2e-pipeline-smoke.test.js.map +1 -1
  60. package/core/dist/runtime-v2/__tests__/governance-experience.test.d.ts +2 -0
  61. package/core/dist/runtime-v2/__tests__/governance-experience.test.d.ts.map +1 -0
  62. package/core/dist/runtime-v2/__tests__/governance-experience.test.js +300 -0
  63. package/core/dist/runtime-v2/__tests__/governance-experience.test.js.map +1 -0
  64. package/core/dist/runtime-v2/__tests__/owner-identity.test.d.ts +2 -0
  65. package/core/dist/runtime-v2/__tests__/owner-identity.test.d.ts.map +1 -0
  66. package/core/dist/runtime-v2/__tests__/owner-identity.test.js +147 -0
  67. package/core/dist/runtime-v2/__tests__/owner-identity.test.js.map +1 -0
  68. package/core/dist/runtime-v2/__tests__/product-telemetry-contract.test.d.ts +18 -0
  69. package/core/dist/runtime-v2/__tests__/product-telemetry-contract.test.d.ts.map +1 -0
  70. package/core/dist/runtime-v2/__tests__/product-telemetry-contract.test.js +303 -0
  71. package/core/dist/runtime-v2/__tests__/product-telemetry-contract.test.js.map +1 -0
  72. package/core/dist/runtime-v2/__tests__/recovery-actions-log.test.js +40 -0
  73. package/core/dist/runtime-v2/__tests__/recovery-actions-log.test.js.map +1 -1
  74. package/core/dist/runtime-v2/__tests__/status-contract.test.d.ts +2 -0
  75. package/core/dist/runtime-v2/__tests__/status-contract.test.d.ts.map +1 -0
  76. package/core/dist/runtime-v2/__tests__/status-contract.test.js +107 -0
  77. package/core/dist/runtime-v2/__tests__/status-contract.test.js.map +1 -0
  78. package/core/dist/runtime-v2/activation/__tests__/promotion-evidence-snapshot.test.d.ts +2 -0
  79. package/core/dist/runtime-v2/activation/__tests__/promotion-evidence-snapshot.test.d.ts.map +1 -0
  80. package/core/dist/runtime-v2/activation/__tests__/promotion-evidence-snapshot.test.js +104 -0
  81. package/core/dist/runtime-v2/activation/__tests__/promotion-evidence-snapshot.test.js.map +1 -0
  82. package/core/dist/runtime-v2/activation/__tests__/promotion-readiness-evaluator.test.js +19 -0
  83. package/core/dist/runtime-v2/activation/__tests__/promotion-readiness-evaluator.test.js.map +1 -1
  84. package/core/dist/runtime-v2/activation/__tests__/rulecode-owner-decision-service.test.js +20 -0
  85. package/core/dist/runtime-v2/activation/__tests__/rulecode-owner-decision-service.test.js.map +1 -1
  86. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-safety-store.test.js +40 -0
  87. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-safety-store.test.js.map +1 -1
  88. package/core/dist/runtime-v2/activation/index.d.ts +2 -0
  89. package/core/dist/runtime-v2/activation/index.d.ts.map +1 -1
  90. package/core/dist/runtime-v2/activation/index.js +1 -0
  91. package/core/dist/runtime-v2/activation/index.js.map +1 -1
  92. package/core/dist/runtime-v2/activation/promotion-evidence-snapshot.d.ts +30 -0
  93. package/core/dist/runtime-v2/activation/promotion-evidence-snapshot.d.ts.map +1 -0
  94. package/core/dist/runtime-v2/activation/promotion-evidence-snapshot.js +87 -0
  95. package/core/dist/runtime-v2/activation/promotion-evidence-snapshot.js.map +1 -0
  96. package/core/dist/runtime-v2/activation/promotion-readiness-evaluator.d.ts.map +1 -1
  97. package/core/dist/runtime-v2/activation/promotion-readiness-evaluator.js +3 -0
  98. package/core/dist/runtime-v2/activation/promotion-readiness-evaluator.js.map +1 -1
  99. package/core/dist/runtime-v2/activation/promotion-readiness-reader.d.ts +1 -1
  100. package/core/dist/runtime-v2/activation/promotion-readiness-reader.d.ts.map +1 -1
  101. package/core/dist/runtime-v2/activation/promotion-readiness-reader.js +2 -2
  102. package/core/dist/runtime-v2/activation/promotion-readiness-reader.js.map +1 -1
  103. package/core/dist/runtime-v2/activation/rulecode-owner-decision-service.d.ts.map +1 -1
  104. package/core/dist/runtime-v2/activation/rulecode-owner-decision-service.js +18 -9
  105. package/core/dist/runtime-v2/activation/rulecode-owner-decision-service.js.map +1 -1
  106. package/core/dist/runtime-v2/adapter/__tests__/chaos-json-repair.test.js +1 -1
  107. package/core/dist/runtime-v2/adapter/__tests__/chaos-json-repair.test.js.map +1 -1
  108. package/core/dist/runtime-v2/adapter/__tests__/json-extractor.test.js +91 -1
  109. package/core/dist/runtime-v2/adapter/__tests__/json-extractor.test.js.map +1 -1
  110. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-runtime-adapter.test.js +59 -12
  111. package/core/dist/runtime-v2/adapter/__tests__/pi-ai-runtime-adapter.test.js.map +1 -1
  112. package/core/dist/runtime-v2/adapter/__tests__/runtime-config-contract.test.js +10 -9
  113. package/core/dist/runtime-v2/adapter/__tests__/runtime-config-contract.test.js.map +1 -1
  114. package/core/dist/runtime-v2/adapter/__tests__/structured-output-repair.test.js +42 -1
  115. package/core/dist/runtime-v2/adapter/__tests__/structured-output-repair.test.js.map +1 -1
  116. package/core/dist/runtime-v2/adapter/json-extractor.d.ts +25 -0
  117. package/core/dist/runtime-v2/adapter/json-extractor.d.ts.map +1 -1
  118. package/core/dist/runtime-v2/adapter/json-extractor.js +126 -0
  119. package/core/dist/runtime-v2/adapter/json-extractor.js.map +1 -1
  120. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts +9 -4
  121. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.d.ts.map +1 -1
  122. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js +9 -4
  123. package/core/dist/runtime-v2/adapter/l2-agent-loop-adapter.js.map +1 -1
  124. package/core/dist/runtime-v2/adapter/output-repair-contract.d.ts +5 -1
  125. package/core/dist/runtime-v2/adapter/output-repair-contract.d.ts.map +1 -1
  126. package/core/dist/runtime-v2/adapter/output-repair-contract.js +4 -1
  127. package/core/dist/runtime-v2/adapter/output-repair-contract.js.map +1 -1
  128. package/core/dist/runtime-v2/adapter/pi-ai-catalog.d.ts +7 -0
  129. package/core/dist/runtime-v2/adapter/pi-ai-catalog.d.ts.map +1 -0
  130. package/core/dist/runtime-v2/adapter/pi-ai-catalog.js +19 -0
  131. package/core/dist/runtime-v2/adapter/pi-ai-catalog.js.map +1 -0
  132. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts +13 -15
  133. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.d.ts.map +1 -1
  134. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js +104 -37
  135. package/core/dist/runtime-v2/adapter/pi-ai-runtime-adapter.js.map +1 -1
  136. package/core/dist/runtime-v2/adapter/structured-output-repair.d.ts +16 -1
  137. package/core/dist/runtime-v2/adapter/structured-output-repair.d.ts.map +1 -1
  138. package/core/dist/runtime-v2/adapter/structured-output-repair.js +38 -6
  139. package/core/dist/runtime-v2/adapter/structured-output-repair.js.map +1 -1
  140. package/core/dist/runtime-v2/adapter/tools/diagnostician-tool.d.ts +1 -1
  141. package/core/dist/runtime-v2/adapter/tools/diagnostician-tool.d.ts.map +1 -1
  142. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js +8 -9
  143. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js.map +1 -1
  144. package/core/dist/runtime-v2/config/__tests__/pd-config-contract.test.js +27 -3
  145. package/core/dist/runtime-v2/config/__tests__/pd-config-contract.test.js.map +1 -1
  146. package/core/dist/runtime-v2/config/__tests__/pd-config-principles.test.d.ts +11 -0
  147. package/core/dist/runtime-v2/config/__tests__/pd-config-principles.test.d.ts.map +1 -0
  148. package/core/dist/runtime-v2/config/__tests__/pd-config-principles.test.js +93 -0
  149. package/core/dist/runtime-v2/config/__tests__/pd-config-principles.test.js.map +1 -0
  150. package/core/dist/runtime-v2/config/__tests__/pd-config-workspace.test.js +41 -0
  151. package/core/dist/runtime-v2/config/__tests__/pd-config-workspace.test.js.map +1 -1
  152. package/core/dist/runtime-v2/config/index.d.ts +2 -2
  153. package/core/dist/runtime-v2/config/index.d.ts.map +1 -1
  154. package/core/dist/runtime-v2/config/index.js +2 -0
  155. package/core/dist/runtime-v2/config/index.js.map +1 -1
  156. package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts.map +1 -1
  157. package/core/dist/runtime-v2/config/pd-config-agent-binding.js +4 -13
  158. package/core/dist/runtime-v2/config/pd-config-agent-binding.js.map +1 -1
  159. package/core/dist/runtime-v2/config/pd-config-effective.d.ts.map +1 -1
  160. package/core/dist/runtime-v2/config/pd-config-effective.js +14 -7
  161. package/core/dist/runtime-v2/config/pd-config-effective.js.map +1 -1
  162. package/core/dist/runtime-v2/config/pd-config-feature-flags.d.ts.map +1 -1
  163. package/core/dist/runtime-v2/config/pd-config-feature-flags.js +5 -12
  164. package/core/dist/runtime-v2/config/pd-config-feature-flags.js.map +1 -1
  165. package/core/dist/runtime-v2/config/pd-config-types.d.ts +8 -0
  166. package/core/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
  167. package/core/dist/runtime-v2/config/pd-config-types.js +2 -0
  168. package/core/dist/runtime-v2/config/pd-config-types.js.map +1 -1
  169. package/core/dist/runtime-v2/config/pd-config-validate.d.ts.map +1 -1
  170. package/core/dist/runtime-v2/config/pd-config-validate.js +48 -3
  171. package/core/dist/runtime-v2/config/pd-config-validate.js.map +1 -1
  172. package/core/dist/runtime-v2/core-principles/__tests__/core-axiom-block.test.js +36 -8
  173. package/core/dist/runtime-v2/core-principles/__tests__/core-axiom-block.test.js.map +1 -1
  174. package/core/dist/runtime-v2/core-principles/__tests__/core-principle-registry.test.js +36 -12
  175. package/core/dist/runtime-v2/core-principles/__tests__/core-principle-registry.test.js.map +1 -1
  176. package/core/dist/runtime-v2/core-principles/core-axiom-block.d.ts +22 -8
  177. package/core/dist/runtime-v2/core-principles/core-axiom-block.d.ts.map +1 -1
  178. package/core/dist/runtime-v2/core-principles/core-axiom-block.js +28 -13
  179. package/core/dist/runtime-v2/core-principles/core-axiom-block.js.map +1 -1
  180. package/core/dist/runtime-v2/core-principles/core-principle-registry.d.ts +29 -4
  181. package/core/dist/runtime-v2/core-principles/core-principle-registry.d.ts.map +1 -1
  182. package/core/dist/runtime-v2/core-principles/core-principle-registry.js +68 -33
  183. package/core/dist/runtime-v2/core-principles/core-principle-registry.js.map +1 -1
  184. package/core/dist/runtime-v2/core-principles/index.d.ts +3 -3
  185. package/core/dist/runtime-v2/core-principles/index.d.ts.map +1 -1
  186. package/core/dist/runtime-v2/core-principles/index.js +1 -1
  187. package/core/dist/runtime-v2/core-principles/index.js.map +1 -1
  188. package/core/dist/runtime-v2/evolution/evolution-types.d.ts +2 -1
  189. package/core/dist/runtime-v2/evolution/evolution-types.d.ts.map +1 -1
  190. package/core/dist/runtime-v2/evolution/evolution-types.js.map +1 -1
  191. package/core/dist/runtime-v2/feature-flags/__tests__/anonymous-product-telemetry-flag.test.d.ts +2 -0
  192. package/core/dist/runtime-v2/feature-flags/__tests__/anonymous-product-telemetry-flag.test.d.ts.map +1 -0
  193. package/core/dist/runtime-v2/feature-flags/__tests__/anonymous-product-telemetry-flag.test.js +48 -0
  194. package/core/dist/runtime-v2/feature-flags/__tests__/anonymous-product-telemetry-flag.test.js.map +1 -0
  195. package/core/dist/runtime-v2/feature-flags/__tests__/codex-conversation-ingestion-flag.test.d.ts +2 -0
  196. package/core/dist/runtime-v2/feature-flags/__tests__/codex-conversation-ingestion-flag.test.d.ts.map +1 -0
  197. package/core/dist/runtime-v2/feature-flags/__tests__/codex-conversation-ingestion-flag.test.js +46 -0
  198. package/core/dist/runtime-v2/feature-flags/__tests__/codex-conversation-ingestion-flag.test.js.map +1 -0
  199. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +86 -31
  200. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  201. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-lifecycle.test.d.ts +2 -0
  202. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-lifecycle.test.d.ts.map +1 -0
  203. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-lifecycle.test.js +83 -0
  204. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-lifecycle.test.js.map +1 -0
  205. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts +19 -1
  206. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  207. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +128 -10
  208. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  209. package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.d.ts +37 -0
  210. package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.d.ts.map +1 -0
  211. package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js +304 -0
  212. package/core/dist/runtime-v2/feature-flags/feature-flag-lifecycle.js.map +1 -0
  213. package/core/dist/runtime-v2/feature-flags/index.d.ts +4 -2
  214. package/core/dist/runtime-v2/feature-flags/index.d.ts.map +1 -1
  215. package/core/dist/runtime-v2/feature-flags/index.js +3 -1
  216. package/core/dist/runtime-v2/feature-flags/index.js.map +1 -1
  217. package/core/dist/runtime-v2/governance-experience-contract.d.ts +468 -0
  218. package/core/dist/runtime-v2/governance-experience-contract.d.ts.map +1 -0
  219. package/core/dist/runtime-v2/governance-experience-contract.js +208 -0
  220. package/core/dist/runtime-v2/governance-experience-contract.js.map +1 -0
  221. package/core/dist/runtime-v2/governance-experience.d.ts +11 -0
  222. package/core/dist/runtime-v2/governance-experience.d.ts.map +1 -0
  223. package/core/dist/runtime-v2/governance-experience.js +276 -0
  224. package/core/dist/runtime-v2/governance-experience.js.map +1 -0
  225. package/core/dist/runtime-v2/index.d.ts +20 -8
  226. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  227. package/core/dist/runtime-v2/index.js +20 -6
  228. package/core/dist/runtime-v2/index.js.map +1 -1
  229. package/core/dist/runtime-v2/internalization/__tests__/artificer-output-retry-flag.test.js +29 -10
  230. package/core/dist/runtime-v2/internalization/__tests__/artificer-output-retry-flag.test.js.map +1 -1
  231. package/core/dist/runtime-v2/owner-identity.d.ts +69 -0
  232. package/core/dist/runtime-v2/owner-identity.d.ts.map +1 -0
  233. package/core/dist/runtime-v2/owner-identity.js +179 -0
  234. package/core/dist/runtime-v2/owner-identity.js.map +1 -0
  235. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  236. package/core/dist/runtime-v2/pain-signal-runtime-factory.js +2 -3
  237. package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  238. package/core/dist/runtime-v2/product-telemetry/daily-identity.d.ts +70 -0
  239. package/core/dist/runtime-v2/product-telemetry/daily-identity.d.ts.map +1 -0
  240. package/core/dist/runtime-v2/product-telemetry/daily-identity.js +89 -0
  241. package/core/dist/runtime-v2/product-telemetry/daily-identity.js.map +1 -0
  242. package/core/dist/runtime-v2/product-telemetry/snapshot-contract.d.ts +110 -0
  243. package/core/dist/runtime-v2/product-telemetry/snapshot-contract.d.ts.map +1 -0
  244. package/core/dist/runtime-v2/product-telemetry/snapshot-contract.js +250 -0
  245. package/core/dist/runtime-v2/product-telemetry/snapshot-contract.js.map +1 -0
  246. package/core/dist/runtime-v2/pruning-read-model.d.ts +2 -1
  247. package/core/dist/runtime-v2/pruning-read-model.d.ts.map +1 -1
  248. package/core/dist/runtime-v2/pruning-read-model.js.map +1 -1
  249. package/core/dist/runtime-v2/receipt-coverage.d.ts +63 -0
  250. package/core/dist/runtime-v2/receipt-coverage.d.ts.map +1 -0
  251. package/core/dist/runtime-v2/receipt-coverage.js +19 -0
  252. package/core/dist/runtime-v2/receipt-coverage.js.map +1 -0
  253. package/core/dist/runtime-v2/recovery-actions-log.d.ts +7 -0
  254. package/core/dist/runtime-v2/recovery-actions-log.d.ts.map +1 -1
  255. package/core/dist/runtime-v2/recovery-actions-log.js +6 -0
  256. package/core/dist/runtime-v2/recovery-actions-log.js.map +1 -1
  257. package/core/dist/runtime-v2/runtime-protocol.js +1 -1
  258. package/core/dist/runtime-v2/runtime-protocol.js.map +1 -1
  259. package/core/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.js +17 -1
  260. package/core/dist/runtime-v2/store/task/__tests__/sqlite-task-store.failed-tasks.test.js.map +1 -1
  261. package/core/dist/runtime-v2/store/task/sqlite-task-store.d.ts.map +1 -1
  262. package/core/dist/runtime-v2/store/task/sqlite-task-store.js +10 -0
  263. package/core/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
  264. package/core/dist/runtime-v2/store/task/task-types.d.ts +2 -0
  265. package/core/dist/runtime-v2/store/task/task-types.d.ts.map +1 -1
  266. package/core/dist/runtime-v2/task-status.d.ts +9 -5
  267. package/core/dist/runtime-v2/task-status.d.ts.map +1 -1
  268. package/core/dist/runtime-v2/task-status.js +15 -7
  269. package/core/dist/runtime-v2/task-status.js.map +1 -1
  270. package/core/dist/runtime-v2/types/event-types.d.ts +4 -0
  271. package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
  272. package/core/dist/runtime-v2/types/event-types.js.map +1 -1
  273. package/core/dist/runtime-v2/types/index.d.ts +1 -1
  274. package/core/dist/runtime-v2/types/index.d.ts.map +1 -1
  275. package/core/dist/runtime-v2/types/index.js +1 -1
  276. package/core/dist/runtime-v2/types/index.js.map +1 -1
  277. package/core/dist/runtime-v2/types/principle-enums.d.ts +3 -2
  278. package/core/dist/runtime-v2/types/principle-enums.d.ts.map +1 -1
  279. package/core/dist/runtime-v2/types/principle-enums.js +11 -5
  280. package/core/dist/runtime-v2/types/principle-enums.js.map +1 -1
  281. package/core/dist/runtime-v2/types/principle-schema.d.ts +1 -1
  282. package/core/dist/runtime-v2/types/principle-tree-store.d.ts +1 -1
  283. package/core/dist/runtime-v2/utils/cli-process-runner.d.ts.map +1 -1
  284. package/core/dist/runtime-v2/utils/cli-process-runner.js +3 -2
  285. package/core/dist/runtime-v2/utils/cli-process-runner.js.map +1 -1
  286. package/core/package.json +4 -5
  287. package/dist/i18n.d.ts.map +1 -1
  288. package/dist/i18n.js +4 -2
  289. package/dist/i18n.js.map +1 -1
  290. package/dist/index.d.ts +2 -0
  291. package/dist/index.d.ts.map +1 -1
  292. package/dist/index.js +47 -11
  293. package/dist/index.js.map +1 -1
  294. package/dist/installer.d.ts +31 -5
  295. package/dist/installer.d.ts.map +1 -1
  296. package/dist/installer.js +472 -161
  297. package/dist/installer.js.map +1 -1
  298. package/dist/installers/codex-host-installer.d.ts.map +1 -1
  299. package/dist/installers/codex-host-installer.js +4 -0
  300. package/dist/installers/codex-host-installer.js.map +1 -1
  301. package/dist/mvp-config.d.ts +10 -0
  302. package/dist/mvp-config.d.ts.map +1 -1
  303. package/dist/mvp-config.js +30 -3
  304. package/dist/mvp-config.js.map +1 -1
  305. package/dist/uninstaller.d.ts +9 -1
  306. package/dist/uninstaller.d.ts.map +1 -1
  307. package/dist/uninstaller.js +103 -23
  308. package/dist/uninstaller.js.map +1 -1
  309. package/dist/update/atomic-file.d.ts +35 -0
  310. package/dist/update/atomic-file.d.ts.map +1 -0
  311. package/dist/update/atomic-file.js +120 -0
  312. package/dist/update/atomic-file.js.map +1 -0
  313. package/dist/update/bootstrap-protocol.d.ts +55 -0
  314. package/dist/update/bootstrap-protocol.d.ts.map +1 -0
  315. package/dist/update/bootstrap-protocol.js +132 -0
  316. package/dist/update/bootstrap-protocol.js.map +1 -0
  317. package/dist/update/channel-metadata.d.ts +28 -0
  318. package/dist/update/channel-metadata.d.ts.map +1 -0
  319. package/dist/update/channel-metadata.js +90 -0
  320. package/dist/update/channel-metadata.js.map +1 -0
  321. package/dist/update/channel-promotion.d.ts +39 -0
  322. package/dist/update/channel-promotion.d.ts.map +1 -0
  323. package/dist/update/channel-promotion.js +55 -0
  324. package/dist/update/channel-promotion.js.map +1 -0
  325. package/dist/update/data-compatibility.d.ts +35 -0
  326. package/dist/update/data-compatibility.d.ts.map +1 -0
  327. package/dist/update/data-compatibility.js +45 -0
  328. package/dist/update/data-compatibility.js.map +1 -0
  329. package/dist/update/install-layout.d.ts +59 -0
  330. package/dist/update/install-layout.d.ts.map +1 -0
  331. package/dist/update/install-layout.js +127 -0
  332. package/dist/update/install-layout.js.map +1 -0
  333. package/dist/update/legacy-migration.d.ts +56 -0
  334. package/dist/update/legacy-migration.d.ts.map +1 -0
  335. package/dist/update/legacy-migration.js +254 -0
  336. package/dist/update/legacy-migration.js.map +1 -0
  337. package/dist/update/product-identity.d.ts +50 -0
  338. package/dist/update/product-identity.d.ts.map +1 -0
  339. package/dist/update/product-identity.js +63 -0
  340. package/dist/update/product-identity.js.map +1 -0
  341. package/dist/update/release-asset-manifest.d.ts +31 -0
  342. package/dist/update/release-asset-manifest.d.ts.map +1 -0
  343. package/dist/update/release-asset-manifest.js +161 -0
  344. package/dist/update/release-asset-manifest.js.map +1 -0
  345. package/dist/update/release-identity.d.ts +33 -0
  346. package/dist/update/release-identity.d.ts.map +1 -0
  347. package/dist/update/release-identity.js +108 -0
  348. package/dist/update/release-identity.js.map +1 -0
  349. package/dist/update/release-manager.d.ts +96 -0
  350. package/dist/update/release-manager.d.ts.map +1 -0
  351. package/dist/update/release-manager.js +253 -0
  352. package/dist/update/release-manager.js.map +1 -0
  353. package/dist/update/release-metadata.d.ts +57 -0
  354. package/dist/update/release-metadata.d.ts.map +1 -0
  355. package/dist/update/release-metadata.js +200 -0
  356. package/dist/update/release-metadata.js.map +1 -0
  357. package/dist/update/release-policy.d.ts +51 -0
  358. package/dist/update/release-policy.d.ts.map +1 -0
  359. package/dist/update/release-policy.js +103 -0
  360. package/dist/update/release-policy.js.map +1 -0
  361. package/dist/update/rollback-policy.d.ts +56 -0
  362. package/dist/update/rollback-policy.d.ts.map +1 -0
  363. package/dist/update/rollback-policy.js +61 -0
  364. package/dist/update/rollback-policy.js.map +1 -0
  365. package/dist/update/transaction-journal.d.ts +121 -0
  366. package/dist/update/transaction-journal.d.ts.map +1 -0
  367. package/dist/update/transaction-journal.js +333 -0
  368. package/dist/update/transaction-journal.js.map +1 -0
  369. package/dist/update/trust-metadata.d.ts +55 -0
  370. package/dist/update/trust-metadata.d.ts.map +1 -0
  371. package/dist/update/trust-metadata.js +170 -0
  372. package/dist/update/trust-metadata.js.map +1 -0
  373. package/dist/update/update-history.d.ts +46 -0
  374. package/dist/update/update-history.d.ts.map +1 -0
  375. package/dist/update/update-history.js +123 -0
  376. package/dist/update/update-history.js.map +1 -0
  377. package/dist/utils/env.d.ts +7 -0
  378. package/dist/utils/env.d.ts.map +1 -1
  379. package/dist/utils/env.js +134 -44
  380. package/dist/utils/env.js.map +1 -1
  381. package/host-runtime/dist/governance-observation-store.d.ts +172 -0
  382. package/host-runtime/dist/governance-observation-store.js +649 -0
  383. package/host-runtime/dist/index.d.ts +6 -0
  384. package/host-runtime/dist/index.js +8 -0
  385. package/host-runtime/dist/product-telemetry/consent-store.d.ts +107 -0
  386. package/host-runtime/dist/product-telemetry/consent-store.js +329 -0
  387. package/host-runtime/dist/product-telemetry/eligibility.d.ts +53 -0
  388. package/host-runtime/dist/product-telemetry/eligibility.js +69 -0
  389. package/host-runtime/dist/product-telemetry/exporter.d.ts +46 -0
  390. package/host-runtime/dist/product-telemetry/exporter.js +71 -0
  391. package/host-runtime/dist/product-telemetry/milestone-readers.d.ts +61 -0
  392. package/host-runtime/dist/product-telemetry/milestone-readers.js +234 -0
  393. package/host-runtime/dist/product-telemetry/service.d.ts +142 -0
  394. package/host-runtime/dist/product-telemetry/service.js +532 -0
  395. package/host-runtime/dist/product-telemetry/workspace-scope.d.ts +38 -0
  396. package/host-runtime/dist/product-telemetry/workspace-scope.js +64 -0
  397. package/host-runtime/package.json +7 -2
  398. package/install-layout/dist/index.d.ts +48 -0
  399. package/install-layout/dist/index.js +81 -0
  400. package/install-layout/dist/index.test.d.ts +1 -0
  401. package/install-layout/dist/index.test.js +34 -0
  402. package/install-layout/package.json +33 -0
  403. package/package.json +16 -6
  404. package/pd-cli/dist/commands/__tests__/telemetry-flag-wiring.test.d.ts +9 -0
  405. package/pd-cli/dist/commands/__tests__/telemetry-flag-wiring.test.d.ts.map +1 -0
  406. package/pd-cli/dist/commands/__tests__/telemetry-flag-wiring.test.js +76 -0
  407. package/pd-cli/dist/commands/__tests__/telemetry-flag-wiring.test.js.map +1 -0
  408. package/pd-cli/dist/commands/__tests__/version.test.d.ts +2 -0
  409. package/pd-cli/dist/commands/__tests__/version.test.d.ts.map +1 -0
  410. package/pd-cli/dist/commands/__tests__/version.test.js +134 -0
  411. package/pd-cli/dist/commands/__tests__/version.test.js.map +1 -0
  412. package/pd-cli/dist/commands/console.d.ts.map +1 -1
  413. package/pd-cli/dist/commands/console.js +29 -10
  414. package/pd-cli/dist/commands/console.js.map +1 -1
  415. package/pd-cli/dist/commands/pain-record.d.ts.map +1 -1
  416. package/pd-cli/dist/commands/pain-record.js +6 -15
  417. package/pd-cli/dist/commands/pain-record.js.map +1 -1
  418. package/pd-cli/dist/commands/runtime-activation.d.ts +29 -0
  419. package/pd-cli/dist/commands/runtime-activation.d.ts.map +1 -1
  420. package/pd-cli/dist/commands/runtime-activation.js +70 -31
  421. package/pd-cli/dist/commands/runtime-activation.js.map +1 -1
  422. package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.d.ts.map +1 -1
  423. package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.js +2 -2
  424. package/pd-cli/dist/commands/runtime-internalization-enqueue-successors.js.map +1 -1
  425. package/pd-cli/dist/commands/telemetry.d.ts +82 -0
  426. package/pd-cli/dist/commands/telemetry.d.ts.map +1 -0
  427. package/pd-cli/dist/commands/telemetry.js +268 -0
  428. package/pd-cli/dist/commands/telemetry.js.map +1 -0
  429. package/pd-cli/dist/commands/version.d.ts +11 -0
  430. package/pd-cli/dist/commands/version.d.ts.map +1 -0
  431. package/pd-cli/dist/commands/version.js +48 -0
  432. package/pd-cli/dist/commands/version.js.map +1 -0
  433. package/pd-cli/dist/index.js +35 -2
  434. package/pd-cli/dist/index.js.map +1 -1
  435. package/pd-cli/dist/services/version-report.d.ts +44 -0
  436. package/pd-cli/dist/services/version-report.d.ts.map +1 -0
  437. package/pd-cli/dist/services/version-report.js +152 -0
  438. package/pd-cli/dist/services/version-report.js.map +1 -0
  439. package/pd-cli/package.json +3 -2
  440. package/plugin/dist/bundle.js +870 -932
  441. package/plugin/dist/core/init.d.ts +2 -1
  442. package/plugin/dist/core/principle-application-ledger.d.ts +10 -0
  443. package/plugin/dist/core/product-telemetry-trigger.d.ts +14 -0
  444. package/plugin/dist/core/thinking-os-parser.d.ts +5 -2
  445. package/plugin/dist/governance-audit.js +386 -0
  446. package/plugin/dist/hooks/gate-block-helper.d.ts +25 -1
  447. package/plugin/dist/hooks/gate.d.ts +22 -0
  448. package/plugin/dist/openclaw.plugin.json +1 -1
  449. package/plugin/dist/rulehost-evidence.js +832 -0
  450. package/plugin/dist/templates/langs/en/principles/THINKING_OS.md +53 -45
  451. package/plugin/dist/templates/langs/en/skills/pd-mentor/SKILL.md +1 -1
  452. package/plugin/dist/templates/langs/zh/principles/THINKING_OS.md +62 -46
  453. package/plugin/dist/templates/langs/zh/skills/pd-mentor/SKILL.md +1 -1
  454. package/plugin/dist/templates/workspace/.principles/THINKING_OS.md +66 -38
  455. package/plugin/openclaw.plugin.json +1 -1
  456. package/plugin/package.json +1 -1
  457. package/plugin/templates/langs/en/principles/THINKING_OS.md +53 -45
  458. package/plugin/templates/langs/en/skills/pd-mentor/SKILL.md +1 -1
  459. package/plugin/templates/langs/zh/principles/THINKING_OS.md +62 -46
  460. package/plugin/templates/langs/zh/skills/pd-mentor/SKILL.md +1 -1
  461. package/plugin/templates/workspace/.principles/THINKING_OS.md +66 -38
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Governance Experience Snapshot collector — PRI-585 (SPEC v1.5.1).
3
+ *
4
+ * Batch source reader for the read-only governance experience layer:
5
+ * Batch Source Reader (4 queries + 1 ledger read + 1 config read, once)
6
+ * → group facts in memory per principle (GovernanceProjectionCollector.buildFacts)
7
+ * → deriveOwnerGovernanceView() per principle (existing projection, zero duplication)
8
+ * → deriveGovernanceExperienceSnapshot() aggregate (principles-core pure function)
9
+ *
10
+ * Forbidden by SPEC and absent here: `for (principle) { collect() }` — the four
11
+ * table reads happen exactly once per snapshot regardless of principle count.
12
+ * The snapshot explains; it never authorizes (ERR-102).
13
+ */
14
+ import * as fs from 'node:fs';
15
+ import * as path from 'node:path';
16
+ import { createHash } from 'node:crypto';
17
+ import { deriveGovernanceExperienceSnapshot, deriveOwnerGovernanceView, } from '@principles/core/runtime-v2';
18
+ import { GovernanceProjectionCollector, isRecord, readOwnString, } from './GovernanceProjectionCollector.js';
19
+ import { loadPdConfig } from '../config/pd-config-store.js';
20
+ const EMPTY_TABLES = { artifactRows: [], taskRows: [], approvalRows: [], activationRows: [] };
21
+ const UNLINKED_SAMPLE_LIMIT = 10;
22
+ /**
23
+ * Stable, path-safe workspace hash for snapshotId (SPEC §13): never exposes the
24
+ * raw path and is never persisted. Windows normalization: backslashes become
25
+ * forward slashes and the drive letter is case-folded, so `D:\a\b`, `d:/a/b/`
26
+ * and `D:/a/b` hash identically. POSIX path case is intentionally preserved.
27
+ */
28
+ export function hashWorkspacePath(workspaceDir) {
29
+ const resolved = path.resolve(workspaceDir).replace(/\\/g, '/').replace(/\/+$/, '');
30
+ const normalized = resolved.replace(/([A-Za-z]):/, (match, _drive) => match.toUpperCase());
31
+ return createHash('sha256').update(normalized).digest('hex').slice(0, 16);
32
+ }
33
+ export class GovernanceExperienceCollector {
34
+ workspaceDir;
35
+ constructor(workspaceDir) {
36
+ this.workspaceDir = workspaceDir;
37
+ }
38
+ collectSnapshot(options) {
39
+ return deriveGovernanceExperienceSnapshot(this.buildInputs(options));
40
+ }
41
+ buildInputs(options) {
42
+ const asOf = options.asOf ?? new Date().toISOString();
43
+ const sourceAvailability = [];
44
+ const dataQualityInputs = [];
45
+ // ── Principle ledger: read once, validate every entry ────────────────────
46
+ const ledger = this.scanLedger();
47
+ sourceAvailability.push({
48
+ sourceId: 'principle_ledger',
49
+ available: ledger.available,
50
+ ...(ledger.reasonCode !== undefined ? { reasonCode: ledger.reasonCode } : {}),
51
+ });
52
+ if (ledger.invalidPrincipleRefs.length > 0) {
53
+ dataQualityInputs.push({
54
+ source: 'principle',
55
+ reasonCode: 'principle_ledger_entry_invalid',
56
+ count: ledger.invalidPrincipleRefs.length,
57
+ sampleRefs: ledger.invalidPrincipleRefs.slice(0, UNLINKED_SAMPLE_LIMIT),
58
+ });
59
+ }
60
+ // ── state.db: existence check + one batched table read ───────────────────
61
+ const dbPath = path.join(this.workspaceDir, '.pd', 'state.db');
62
+ let tables = EMPTY_TABLES;
63
+ let stateDbAvailable = true;
64
+ let stateDbReasonCode;
65
+ if (!fs.existsSync(dbPath)) {
66
+ stateDbAvailable = false;
67
+ stateDbReasonCode = 'state_db_missing';
68
+ }
69
+ else {
70
+ try {
71
+ tables = (options.tableReader ?? GovernanceProjectionCollector.readTables)(this.workspaceDir);
72
+ }
73
+ catch {
74
+ stateDbAvailable = false;
75
+ stateDbReasonCode = 'state_db_read_failed';
76
+ tables = EMPTY_TABLES;
77
+ }
78
+ }
79
+ sourceAvailability.push({
80
+ sourceId: 'state_db',
81
+ available: stateDbAvailable,
82
+ ...(stateDbReasonCode !== undefined ? { reasonCode: stateDbReasonCode } : {}),
83
+ });
84
+ // ── Views: reuse the existing projection per principle, in memory ────────
85
+ const views = [];
86
+ const claimedTaskIds = new Set();
87
+ const principleIds = [...ledger.facts.keys()].sort();
88
+ for (const principleId of principleIds) {
89
+ const principle = ledger.facts.get(principleId);
90
+ if (principle === undefined)
91
+ continue;
92
+ const issues = [...(ledger.issuesByPrinciple.get(principleId) ?? [])];
93
+ try {
94
+ // state.db unavailable mirrors collect()'s degraded facts shape exactly
95
+ const facts = stateDbAvailable
96
+ ? GovernanceProjectionCollector.buildFacts({ principleId, asOf, principle, tables, collectionIssues: issues })
97
+ : GovernanceProjectionCollector.factsForUnavailableSource({ principleId, asOf, principle, collectionIssues: issues });
98
+ for (const task of facts.tasks) {
99
+ if (task.taskId !== undefined)
100
+ claimedTaskIds.add(task.taskId);
101
+ }
102
+ views.push({ view: deriveOwnerGovernanceView(facts), lineageConfidence: facts.lineage.confidence });
103
+ }
104
+ catch {
105
+ // A principle whose facts/view fail validation never blocks the snapshot;
106
+ // it surfaces as a bounded data-quality group (fail loud, keep going).
107
+ dataQualityInputs.push({
108
+ source: 'principle',
109
+ reasonCode: 'projection_derivation_failed',
110
+ count: 1,
111
+ sampleRefs: [{ type: 'principle', id: principleId }],
112
+ });
113
+ }
114
+ }
115
+ // ── Linkage indexes + evidence + unlinked records (same batched rows) ────
116
+ const parsedTasks = [];
117
+ const parseIssues = []; // malformed rows are attributed per-principle by buildFacts; not double-counted here
118
+ if (stateDbAvailable) {
119
+ for (const row of tables.taskRows) {
120
+ const parsed = GovernanceProjectionCollector.parseTaskRow(row, parseIssues);
121
+ if (parsed !== null)
122
+ parsedTasks.push(parsed);
123
+ }
124
+ }
125
+ // SPEC §9: unlinked records never enter activity classification. Evidence
126
+ // counts require an established relationship: a task must have produced an
127
+ // artifact row (task↔artifact), a RuleCode decision's artifact must exist
128
+ // AND belong to a principle present in the ledger (artifact↔principle).
129
+ const artifactIds = new Set();
130
+ const taskIdsWithArtifact = new Set();
131
+ const artifactOwnerKnown = new Map();
132
+ if (stateDbAvailable) {
133
+ for (const row of tables.artifactRows) {
134
+ if (!isRecord(row))
135
+ continue;
136
+ const artifactId = readOwnString(row, 'artifact_id');
137
+ if (artifactId === undefined)
138
+ continue;
139
+ artifactIds.add(artifactId);
140
+ const sourceTaskId = readOwnString(row, 'source_task_id');
141
+ if (sourceTaskId !== undefined)
142
+ taskIdsWithArtifact.add(sourceTaskId);
143
+ const sourcePrincipleId = readOwnString(row, 'source_principle_id');
144
+ artifactOwnerKnown.set(artifactId, sourcePrincipleId !== undefined && ledger.available && ledger.presentPrincipleIds.has(sourcePrincipleId));
145
+ }
146
+ }
147
+ const activeTasks = stateDbAvailable
148
+ ? parsedTasks.filter(task => task.status !== 'succeeded' && taskIdsWithArtifact.has(task.taskId))
149
+ : [];
150
+ // RuleCode owner decisions awaiting action (SPEC §8.3 source): non-deactivated
151
+ // shadow activations with verified linkage; unlinked ones degrade to data
152
+ // quality instead of inflating the decision count.
153
+ const rulecodePendingRefs = [];
154
+ let rulecodePendingCount = 0;
155
+ const unlinkedRulecodeRefs = [];
156
+ let unlinkedRulecodeCount = 0;
157
+ if (stateDbAvailable) {
158
+ for (const row of tables.activationRows) {
159
+ if (!isRecord(row))
160
+ continue;
161
+ const action = readOwnString(row, 'action');
162
+ const deactivatedAt = readOwnString(row, 'deactivated_at');
163
+ if (action !== 'code_tool_hook_shadow_activate' || deactivatedAt !== undefined)
164
+ continue;
165
+ const artifactId = readOwnString(row, 'artifact_id');
166
+ const activationId = readOwnString(row, 'activation_id');
167
+ const ref = activationId === undefined ? undefined : { type: 'activation', id: activationId };
168
+ if (artifactId !== undefined && artifactOwnerKnown.get(artifactId) === true) {
169
+ rulecodePendingCount += 1;
170
+ if (ref !== undefined && rulecodePendingRefs.length < UNLINKED_SAMPLE_LIMIT)
171
+ rulecodePendingRefs.push(ref);
172
+ }
173
+ else {
174
+ unlinkedRulecodeCount += 1;
175
+ if (ref !== undefined && unlinkedRulecodeRefs.length < UNLINKED_SAMPLE_LIMIT)
176
+ unlinkedRulecodeRefs.push(ref);
177
+ }
178
+ }
179
+ }
180
+ if (unlinkedRulecodeCount > 0) {
181
+ dataQualityInputs.push({ source: 'activation', reasonCode: 'unlinked_record', count: unlinkedRulecodeCount, sampleRefs: unlinkedRulecodeRefs });
182
+ }
183
+ if (stateDbAvailable) {
184
+ const unlinkedApprovalRefs = [];
185
+ let unlinkedApprovalCount = 0;
186
+ for (const row of tables.approvalRows) {
187
+ if (!isRecord(row))
188
+ continue;
189
+ const artifactId = readOwnString(row, 'artifact_id');
190
+ const approvalId = readOwnString(row, 'approval_id');
191
+ if (artifactId !== undefined && !artifactIds.has(artifactId)) {
192
+ unlinkedApprovalCount += 1;
193
+ if (approvalId !== undefined && unlinkedApprovalRefs.length < UNLINKED_SAMPLE_LIMIT) {
194
+ unlinkedApprovalRefs.push({ type: 'approval', id: approvalId });
195
+ }
196
+ }
197
+ }
198
+ if (unlinkedApprovalCount > 0) {
199
+ dataQualityInputs.push({ source: 'approval', reasonCode: 'unlinked_record', count: unlinkedApprovalCount, sampleRefs: unlinkedApprovalRefs });
200
+ }
201
+ if (ledger.available) {
202
+ const unlinkedArtifactRefs = [];
203
+ let unlinkedArtifactCount = 0;
204
+ for (const row of tables.artifactRows) {
205
+ if (!isRecord(row))
206
+ continue;
207
+ const sourcePrincipleId = readOwnString(row, 'source_principle_id');
208
+ const artifactId = readOwnString(row, 'artifact_id');
209
+ if (sourcePrincipleId !== undefined && !ledger.presentPrincipleIds.has(sourcePrincipleId)) {
210
+ unlinkedArtifactCount += 1;
211
+ if (artifactId !== undefined && unlinkedArtifactRefs.length < UNLINKED_SAMPLE_LIMIT) {
212
+ unlinkedArtifactRefs.push({ type: 'artifact', id: artifactId });
213
+ }
214
+ }
215
+ }
216
+ if (unlinkedArtifactCount > 0) {
217
+ dataQualityInputs.push({ source: 'artifact', reasonCode: 'unlinked_record', count: unlinkedArtifactCount, sampleRefs: unlinkedArtifactRefs });
218
+ }
219
+ }
220
+ const unlinkedTaskRefs = [];
221
+ let unlinkedTaskCount = 0;
222
+ for (const task of parsedTasks) {
223
+ if (claimedTaskIds.has(task.taskId))
224
+ continue;
225
+ unlinkedTaskCount += 1;
226
+ if (unlinkedTaskRefs.length < UNLINKED_SAMPLE_LIMIT)
227
+ unlinkedTaskRefs.push({ type: 'task', id: task.taskId });
228
+ }
229
+ if (unlinkedTaskCount > 0) {
230
+ dataQualityInputs.push({ source: 'task', reasonCode: 'unlinked_record', count: unlinkedTaskCount, sampleRefs: unlinkedTaskRefs });
231
+ }
232
+ }
233
+ // ── Workspace config environment (PRI-587) via the unified validator ─────
234
+ const configResult = loadPdConfig(this.workspaceDir);
235
+ const environment = configResult.ok ? configResult.effective.config.workspace?.environment : undefined;
236
+ const environmentContext = configResult.ok
237
+ ? environment !== undefined
238
+ ? { environment, source: 'workspace_config' }
239
+ : { environment: 'unknown', source: 'missing' }
240
+ : { environment: 'unknown', source: 'missing', configIssue: 'config_invalid' };
241
+ return {
242
+ schemaVersion: '1',
243
+ asOf,
244
+ workspaceHash: hashWorkspacePath(this.workspaceDir),
245
+ governanceViews: views,
246
+ ownerConfigSnapshot: options.ownerConfig,
247
+ environmentContext,
248
+ sourceAvailability,
249
+ dataQualityInputs,
250
+ ...(stateDbAvailable
251
+ ? {
252
+ frontierEvidence: { sourceId: 'state_db', activeTaskCount: activeTasks.length, sampleRefs: activeTasks.slice(0, UNLINKED_SAMPLE_LIMIT).map(task => ({ type: 'task', id: task.taskId })) },
253
+ rulecodeDecisionEvidence: { pendingCount: rulecodePendingCount, sampleRefs: rulecodePendingRefs },
254
+ }
255
+ : {}),
256
+ };
257
+ }
258
+ /**
259
+ * Reads the principle ledger once and validates every entry. A readable file
260
+ * with a malformed tree counts as an unavailable ledger source (no views can
261
+ * be built); individual invalid entries degrade to data-quality groups.
262
+ */
263
+ scanLedger() {
264
+ const scan = {
265
+ available: true,
266
+ presentPrincipleIds: new Set(),
267
+ facts: new Map(),
268
+ issuesByPrinciple: new Map(),
269
+ invalidPrincipleRefs: [],
270
+ };
271
+ let parsed;
272
+ try {
273
+ parsed = GovernanceProjectionCollector.parsePrincipleLedgerFile(this.workspaceDir);
274
+ }
275
+ catch {
276
+ scan.available = false;
277
+ scan.reasonCode = 'ledger_unreadable';
278
+ return scan;
279
+ }
280
+ if (!isRecord(parsed)) {
281
+ scan.available = false;
282
+ scan.reasonCode = 'ledger_tree_malformed';
283
+ return scan;
284
+ }
285
+ const principlesTree = GovernanceProjectionCollector.principleTreeFromLedger(parsed);
286
+ if (principlesTree === null) {
287
+ scan.available = false;
288
+ scan.reasonCode = 'ledger_tree_malformed';
289
+ return scan;
290
+ }
291
+ for (const principleId of Object.keys(principlesTree).sort()) {
292
+ scan.presentPrincipleIds.add(principleId);
293
+ const issues = [];
294
+ try {
295
+ const fact = GovernanceProjectionCollector.principleFactFromLedger(parsed, principleId, issues);
296
+ scan.facts.set(principleId, fact);
297
+ scan.issuesByPrinciple.set(principleId, issues);
298
+ }
299
+ catch {
300
+ scan.invalidPrincipleRefs.push({ type: 'principle', id: principleId });
301
+ }
302
+ }
303
+ return scan;
304
+ }
305
+ }
@@ -1,16 +1,74 @@
1
- import type { GovernanceFacts } from '@principles/core/runtime-v2';
1
+ import type Database from 'better-sqlite3';
2
+ import type { DataQualityIssue, GovernanceFacts, GovernanceChannel, RevisionIdentity, RunnerVerdictFact, TaskFact } from '@principles/core/runtime-v2';
3
+ export declare const GOVERNANCE_TASK_KINDS: Set<string>;
4
+ export declare const GOVERNANCE_TASK_STATUSES: Set<string>;
5
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
6
+ export declare function readOwnString(record: Record<string, unknown>, key: string): string | undefined;
2
7
  export declare class GovernanceProjectionCollectionError extends Error {
3
8
  readonly reasonCode: 'principle_not_found' | 'governance_projection_error';
4
9
  readonly nextActionCode: string;
5
10
  constructor(reasonCode: 'principle_not_found' | 'governance_projection_error', nextActionCode: string);
6
11
  }
12
+ export interface ValidTaskRow {
13
+ taskId: string;
14
+ taskKind: TaskFact['taskKind'];
15
+ status: TaskFact['status'];
16
+ createdAt: string;
17
+ updatedAt: string;
18
+ leaseExpiresAt?: string;
19
+ attemptCount: number;
20
+ maxAttempts: number;
21
+ lastErrorCategory?: TaskFact['lastErrorCategory'];
22
+ channel: GovernanceChannel;
23
+ dependencyTaskIds: string[];
24
+ revisionIdentity?: RevisionIdentity;
25
+ completionIntent?: TaskFact['completionIntent'];
26
+ runnerDecision?: RunnerVerdictFact['outcome'];
27
+ }
28
+ /**
29
+ * Raw rows for the four tables the projection reads. Populated once per
30
+ * workspace by `readTables` and grouped per principle in memory by
31
+ * `buildFacts` — the batch experience collector (PRI-585) reuses the same
32
+ * rows so a workspace snapshot costs 4 queries total, not 4 per principle.
33
+ */
34
+ export interface GovernanceProjectionTables {
35
+ artifactRows: unknown[];
36
+ taskRows: unknown[];
37
+ approvalRows: unknown[];
38
+ activationRows: unknown[];
39
+ }
7
40
  export declare class GovernanceProjectionCollector {
8
41
  private readonly workspaceDir;
9
42
  constructor(workspaceDir: string);
10
43
  collect(principleId: string, asOf: string): Promise<GovernanceFacts>;
44
+ /** Degraded facts shape used when state.db is unavailable (shared by single + batch collectors). */
45
+ static factsForUnavailableSource(input: {
46
+ principleId: string;
47
+ asOf: string;
48
+ principle: GovernanceFacts['principle'];
49
+ collectionIssues: DataQualityIssue[];
50
+ }): GovernanceFacts;
51
+ /** Reads the four projection tables once. Closes its own connection unless one is injected (caller then owns closing). */
52
+ static readTables(workspaceDir: string, injected?: {
53
+ getDb(): Database.Database;
54
+ }): GovernanceProjectionTables;
55
+ /** Groups pre-fetched raw rows into GovernanceFacts for ONE principle. Pure in-memory. */
56
+ static buildFacts(input: {
57
+ principleId: string;
58
+ asOf: string;
59
+ principle: GovernanceFacts['principle'];
60
+ tables: GovernanceProjectionTables;
61
+ collectionIssues: DataQualityIssue[];
62
+ }): GovernanceFacts;
11
63
  private readPrinciple;
64
+ /** Reads and JSON-parses the principle ledger file (shared by single + batch collectors). */
65
+ static parsePrincipleLedgerFile(workspaceDir: string): unknown;
66
+ /** Extracts the principles record from a parsed ledger; null when the tree is absent/malformed. */
67
+ static principleTreeFromLedger(parsed: unknown): Record<string, unknown> | null;
68
+ /** Validates one principle entry from an already-parsed ledger (shared by single + batch collectors). */
69
+ static principleFactFromLedger(parsed: unknown, principleId: string, issues: DataQualityIssue[]): GovernanceFacts['principle'];
12
70
  private static parseStringArrayJson;
13
- private static parseTaskRow;
71
+ static parseTaskRow(row: unknown, issues: DataQualityIssue[]): ValidTaskRow | null;
14
72
  private static connectedTaskIds;
15
73
  private static finish;
16
74
  }