openplanr 1.25.2 → 2.0.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 (1738) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/CONTRIBUTING.md +33 -0
  3. package/README.md +154 -131
  4. package/dist/cli/commands/artifact.d.ts.map +1 -1
  5. package/dist/cli/commands/artifact.js +214 -30
  6. package/dist/cli/commands/artifact.js.map +1 -1
  7. package/dist/cli/commands/backlog.d.ts +1 -21
  8. package/dist/cli/commands/backlog.d.ts.map +1 -1
  9. package/dist/cli/commands/backlog.js +1 -428
  10. package/dist/cli/commands/backlog.js.map +1 -1
  11. package/dist/cli/commands/company.d.ts +3 -0
  12. package/dist/cli/commands/company.d.ts.map +1 -0
  13. package/dist/cli/commands/company.js +173 -0
  14. package/dist/cli/commands/company.js.map +1 -0
  15. package/dist/cli/commands/config-deterministic.d.ts +3 -0
  16. package/dist/cli/commands/config-deterministic.d.ts.map +1 -0
  17. package/dist/cli/commands/config-deterministic.js +88 -0
  18. package/dist/cli/commands/config-deterministic.js.map +1 -0
  19. package/dist/cli/commands/dashboard.d.ts +3 -0
  20. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  21. package/dist/cli/commands/dashboard.js +36 -0
  22. package/dist/cli/commands/dashboard.js.map +1 -0
  23. package/dist/cli/commands/diagram/index.d.ts +3 -0
  24. package/dist/cli/commands/diagram/index.d.ts.map +1 -0
  25. package/dist/cli/commands/diagram/index.js +73 -0
  26. package/dist/cli/commands/diagram/index.js.map +1 -0
  27. package/dist/cli/commands/diagram/presentation.d.ts +4 -0
  28. package/dist/cli/commands/diagram/presentation.d.ts.map +1 -0
  29. package/dist/cli/commands/diagram/presentation.js +38 -0
  30. package/dist/cli/commands/diagram/presentation.js.map +1 -0
  31. package/dist/cli/commands/doctor.d.ts.map +1 -1
  32. package/dist/cli/commands/doctor.js +1 -11
  33. package/dist/cli/commands/doctor.js.map +1 -1
  34. package/dist/cli/commands/epic.d.ts +1 -9
  35. package/dist/cli/commands/epic.d.ts.map +1 -1
  36. package/dist/cli/commands/epic.js +1 -259
  37. package/dist/cli/commands/epic.js.map +1 -1
  38. package/dist/cli/commands/feature.d.ts +1 -8
  39. package/dist/cli/commands/feature.d.ts.map +1 -1
  40. package/dist/cli/commands/feature.js +1 -220
  41. package/dist/cli/commands/feature.js.map +1 -1
  42. package/dist/cli/commands/groups/delivery.d.ts +3 -0
  43. package/dist/cli/commands/groups/delivery.d.ts.map +1 -0
  44. package/dist/cli/commands/groups/delivery.js +13 -0
  45. package/dist/cli/commands/groups/delivery.js.map +1 -0
  46. package/dist/cli/commands/groups/foundation.d.ts +3 -0
  47. package/dist/cli/commands/groups/foundation.d.ts.map +1 -0
  48. package/dist/cli/commands/groups/foundation.js +11 -0
  49. package/dist/cli/commands/groups/foundation.js.map +1 -0
  50. package/dist/cli/commands/groups/intelligence.d.ts +3 -0
  51. package/dist/cli/commands/groups/intelligence.d.ts.map +1 -0
  52. package/dist/cli/commands/groups/intelligence.js +19 -0
  53. package/dist/cli/commands/groups/intelligence.js.map +1 -0
  54. package/dist/cli/commands/groups/operations.d.ts +3 -0
  55. package/dist/cli/commands/groups/operations.d.ts.map +1 -0
  56. package/dist/cli/commands/groups/operations.js +17 -0
  57. package/dist/cli/commands/groups/operations.js.map +1 -0
  58. package/dist/cli/commands/groups/planning.d.ts +3 -0
  59. package/dist/cli/commands/groups/planning.d.ts.map +1 -0
  60. package/dist/cli/commands/groups/planning.js +25 -0
  61. package/dist/cli/commands/groups/planning.js.map +1 -0
  62. package/dist/cli/commands/index.d.ts +4 -0
  63. package/dist/cli/commands/index.d.ts.map +1 -0
  64. package/dist/cli/commands/index.js +14 -0
  65. package/dist/cli/commands/index.js.map +1 -0
  66. package/dist/cli/commands/init-deterministic.d.ts +3 -0
  67. package/dist/cli/commands/init-deterministic.d.ts.map +1 -0
  68. package/dist/cli/commands/init-deterministic.js +40 -0
  69. package/dist/cli/commands/init-deterministic.js.map +1 -0
  70. package/dist/cli/commands/land.d.ts +15 -0
  71. package/dist/cli/commands/land.d.ts.map +1 -0
  72. package/dist/cli/commands/land.js +176 -0
  73. package/dist/cli/commands/land.js.map +1 -0
  74. package/dist/cli/commands/operate/input.d.ts +54 -0
  75. package/dist/cli/commands/operate/input.d.ts.map +1 -0
  76. package/dist/cli/commands/operate/input.js +98 -0
  77. package/dist/cli/commands/operate/input.js.map +1 -0
  78. package/dist/cli/commands/operate/registrars/assignments.d.ts +5 -0
  79. package/dist/cli/commands/operate/registrars/assignments.d.ts.map +1 -0
  80. package/dist/cli/commands/operate/registrars/assignments.js +167 -0
  81. package/dist/cli/commands/operate/registrars/assignments.js.map +1 -0
  82. package/dist/cli/commands/operate/registrars/catalog.d.ts +4 -0
  83. package/dist/cli/commands/operate/registrars/catalog.d.ts.map +1 -0
  84. package/dist/cli/commands/operate/registrars/catalog.js +12 -0
  85. package/dist/cli/commands/operate/registrars/catalog.js.map +1 -0
  86. package/dist/cli/commands/operate/registrars/contracts.d.ts +41 -0
  87. package/dist/cli/commands/operate/registrars/contracts.d.ts.map +1 -0
  88. package/dist/cli/commands/operate/registrars/contracts.js +2 -0
  89. package/dist/cli/commands/operate/registrars/contracts.js.map +1 -0
  90. package/dist/cli/commands/operate/registrars/dashboard.d.ts +4 -0
  91. package/dist/cli/commands/operate/registrars/dashboard.d.ts.map +1 -0
  92. package/dist/cli/commands/operate/registrars/dashboard.js +26 -0
  93. package/dist/cli/commands/operate/registrars/dashboard.js.map +1 -0
  94. package/dist/cli/commands/operate/registrars/dispatch.d.ts +7 -0
  95. package/dist/cli/commands/operate/registrars/dispatch.d.ts.map +1 -0
  96. package/dist/cli/commands/operate/registrars/dispatch.js +55 -0
  97. package/dist/cli/commands/operate/registrars/dispatch.js.map +1 -0
  98. package/dist/cli/commands/operate/registrars/experience.d.ts +4 -0
  99. package/dist/cli/commands/operate/registrars/experience.d.ts.map +1 -0
  100. package/dist/cli/commands/operate/registrars/experience.js +93 -0
  101. package/dist/cli/commands/operate/registrars/experience.js.map +1 -0
  102. package/dist/cli/commands/operate/registrars/index.d.ts +5 -0
  103. package/dist/cli/commands/operate/registrars/index.d.ts.map +1 -0
  104. package/dist/cli/commands/operate/registrars/index.js +28 -0
  105. package/dist/cli/commands/operate/registrars/index.js.map +1 -0
  106. package/dist/cli/commands/operate/registrars/lifecycle.d.ts +4 -0
  107. package/dist/cli/commands/operate/registrars/lifecycle.d.ts.map +1 -0
  108. package/dist/cli/commands/operate/registrars/lifecycle.js +46 -0
  109. package/dist/cli/commands/operate/registrars/lifecycle.js.map +1 -0
  110. package/dist/cli/commands/operate/registrars/measurement.d.ts +4 -0
  111. package/dist/cli/commands/operate/registrars/measurement.d.ts.map +1 -0
  112. package/dist/cli/commands/operate/registrars/measurement.js +122 -0
  113. package/dist/cli/commands/operate/registrars/measurement.js.map +1 -0
  114. package/dist/cli/commands/operate/registrars/note-validation.d.ts +6 -0
  115. package/dist/cli/commands/operate/registrars/note-validation.d.ts.map +1 -0
  116. package/dist/cli/commands/operate/registrars/note-validation.js +103 -0
  117. package/dist/cli/commands/operate/registrars/note-validation.js.map +1 -0
  118. package/dist/cli/commands/operate/registrars/planning.d.ts +4 -0
  119. package/dist/cli/commands/operate/registrars/planning.d.ts.map +1 -0
  120. package/dist/cli/commands/operate/registrars/planning.js +41 -0
  121. package/dist/cli/commands/operate/registrars/planning.js.map +1 -0
  122. package/dist/cli/commands/operate/registrars/recovery.d.ts +4 -0
  123. package/dist/cli/commands/operate/registrars/recovery.d.ts.map +1 -0
  124. package/dist/cli/commands/operate/registrars/recovery.js +65 -0
  125. package/dist/cli/commands/operate/registrars/recovery.js.map +1 -0
  126. package/dist/cli/commands/operate/registrars/reviews.d.ts +4 -0
  127. package/dist/cli/commands/operate/registrars/reviews.d.ts.map +1 -0
  128. package/dist/cli/commands/operate/registrars/reviews.js +83 -0
  129. package/dist/cli/commands/operate/registrars/reviews.js.map +1 -0
  130. package/dist/cli/commands/operate/registration.d.ts +4 -0
  131. package/dist/cli/commands/operate/registration.d.ts.map +1 -0
  132. package/dist/cli/commands/operate/registration.js +3 -0
  133. package/dist/cli/commands/operate/registration.js.map +1 -0
  134. package/dist/cli/commands/operate/render.d.ts +19 -0
  135. package/dist/cli/commands/operate/render.d.ts.map +1 -0
  136. package/dist/cli/commands/operate/render.js +201 -0
  137. package/dist/cli/commands/operate/render.js.map +1 -0
  138. package/dist/cli/commands/operate.d.ts +58 -13
  139. package/dist/cli/commands/operate.d.ts.map +1 -1
  140. package/dist/cli/commands/operate.js +169 -984
  141. package/dist/cli/commands/operate.js.map +1 -1
  142. package/dist/cli/commands/planning-artifacts.d.ts +10 -0
  143. package/dist/cli/commands/planning-artifacts.d.ts.map +1 -0
  144. package/dist/cli/commands/planning-artifacts.js +350 -0
  145. package/dist/cli/commands/planning-artifacts.js.map +1 -0
  146. package/dist/cli/commands/quick/interaction.d.ts +8 -0
  147. package/dist/cli/commands/quick/interaction.d.ts.map +1 -0
  148. package/dist/cli/commands/quick/interaction.js +8 -0
  149. package/dist/cli/commands/quick/interaction.js.map +1 -0
  150. package/dist/cli/commands/quick/project.d.ts +8 -0
  151. package/dist/cli/commands/quick/project.d.ts.map +1 -0
  152. package/dist/cli/commands/quick/project.js +8 -0
  153. package/dist/cli/commands/quick/project.js.map +1 -0
  154. package/dist/cli/commands/quick.d.ts +1 -29
  155. package/dist/cli/commands/quick.d.ts.map +1 -1
  156. package/dist/cli/commands/quick.js +1 -337
  157. package/dist/cli/commands/quick.js.map +1 -1
  158. package/dist/cli/commands/rules.js +1 -1
  159. package/dist/cli/commands/rules.js.map +1 -1
  160. package/dist/cli/commands/setup.d.ts.map +1 -1
  161. package/dist/cli/commands/setup.js +40 -18
  162. package/dist/cli/commands/setup.js.map +1 -1
  163. package/dist/cli/commands/spec.d.ts +6 -4
  164. package/dist/cli/commands/spec.d.ts.map +1 -1
  165. package/dist/cli/commands/spec.js +166 -174
  166. package/dist/cli/commands/spec.js.map +1 -1
  167. package/dist/cli/commands/sprint.d.ts +1 -8
  168. package/dist/cli/commands/sprint.d.ts.map +1 -1
  169. package/dist/cli/commands/sprint.js +1 -522
  170. package/dist/cli/commands/sprint.js.map +1 -1
  171. package/dist/cli/commands/story/interaction.d.ts +7 -0
  172. package/dist/cli/commands/story/interaction.d.ts.map +1 -0
  173. package/dist/cli/commands/story/interaction.js +7 -0
  174. package/dist/cli/commands/story/interaction.js.map +1 -0
  175. package/dist/cli/commands/story/project.d.ts +10 -0
  176. package/dist/cli/commands/story/project.d.ts.map +1 -0
  177. package/dist/cli/commands/story/project.js +10 -0
  178. package/dist/cli/commands/story/project.js.map +1 -0
  179. package/dist/cli/commands/story.d.ts +1 -8
  180. package/dist/cli/commands/story.d.ts.map +1 -1
  181. package/dist/cli/commands/story.js +1 -358
  182. package/dist/cli/commands/story.js.map +1 -1
  183. package/dist/cli/commands/task.d.ts +1 -9
  184. package/dist/cli/commands/task.d.ts.map +1 -1
  185. package/dist/cli/commands/task.js +1 -351
  186. package/dist/cli/commands/task.js.map +1 -1
  187. package/dist/cli/error-boundary.d.ts +29 -0
  188. package/dist/cli/error-boundary.d.ts.map +1 -0
  189. package/dist/cli/error-boundary.js +103 -0
  190. package/dist/cli/error-boundary.js.map +1 -0
  191. package/dist/cli/helpers/bulk-checkbox-update.d.ts +1 -1
  192. package/dist/cli/helpers/bulk-checkbox-update.js +1 -1
  193. package/dist/cli/index.js +38 -113
  194. package/dist/cli/index.js.map +1 -1
  195. package/dist/dashboard/.vite/manifest.json +68 -0
  196. package/dist/dashboard/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  197. package/dist/dashboard/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  198. package/dist/dashboard/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  199. package/dist/dashboard/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  200. package/dist/dashboard/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  201. package/dist/dashboard/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  202. package/dist/dashboard/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  203. package/dist/dashboard/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  204. package/dist/dashboard/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  205. package/dist/dashboard/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  206. package/dist/dashboard/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  207. package/dist/dashboard/assets/index-Bk8DyO_2.css +1 -0
  208. package/dist/dashboard/assets/index-zeygL5iu.js +557 -0
  209. package/dist/dashboard/assets/index-zeygL5iu.js.map +1 -0
  210. package/dist/dashboard/dashboard-manifest.json +84 -0
  211. package/dist/dashboard/index.html +13 -0
  212. package/dist/generators/base-generator.d.ts +2 -0
  213. package/dist/generators/base-generator.d.ts.map +1 -1
  214. package/dist/generators/base-generator.js +8 -0
  215. package/dist/generators/base-generator.js.map +1 -1
  216. package/dist/generators/claude-generator.d.ts.map +1 -1
  217. package/dist/generators/claude-generator.js +12 -14
  218. package/dist/generators/claude-generator.js.map +1 -1
  219. package/dist/generators/codex-generator.d.ts.map +1 -1
  220. package/dist/generators/codex-generator.js +7 -7
  221. package/dist/generators/codex-generator.js.map +1 -1
  222. package/dist/generators/cursor-generator.d.ts.map +1 -1
  223. package/dist/generators/cursor-generator.js +11 -30
  224. package/dist/generators/cursor-generator.js.map +1 -1
  225. package/dist/models/schema.d.ts +0 -23
  226. package/dist/models/schema.d.ts.map +1 -1
  227. package/dist/models/schema.js +0 -7
  228. package/dist/models/schema.js.map +1 -1
  229. package/dist/models/types.d.ts +3 -14
  230. package/dist/models/types.d.ts.map +1 -1
  231. package/dist/services/artifact-pipeline-service.d.ts +99 -1
  232. package/dist/services/artifact-pipeline-service.d.ts.map +1 -1
  233. package/dist/services/artifact-pipeline-service.js +681 -4
  234. package/dist/services/artifact-pipeline-service.js.map +1 -1
  235. package/dist/services/canonical-json.d.ts +3 -0
  236. package/dist/services/canonical-json.d.ts.map +1 -0
  237. package/dist/services/canonical-json.js +71 -0
  238. package/dist/services/canonical-json.js.map +1 -0
  239. package/dist/services/claude-plugin-service.d.ts +6 -1
  240. package/dist/services/claude-plugin-service.d.ts.map +1 -1
  241. package/dist/services/claude-plugin-service.js +184 -12
  242. package/dist/services/claude-plugin-service.js.map +1 -1
  243. package/dist/services/codex-plugin-service.d.ts +30 -0
  244. package/dist/services/codex-plugin-service.d.ts.map +1 -0
  245. package/dist/services/codex-plugin-service.js +195 -0
  246. package/dist/services/codex-plugin-service.js.map +1 -0
  247. package/dist/services/company-auth-service.d.ts +70 -0
  248. package/dist/services/company-auth-service.d.ts.map +1 -0
  249. package/dist/services/company-auth-service.js +720 -0
  250. package/dist/services/company-auth-service.js.map +1 -0
  251. package/dist/services/company-auth-store.d.ts +22 -0
  252. package/dist/services/company-auth-store.d.ts.map +1 -0
  253. package/dist/services/company-auth-store.js +158 -0
  254. package/dist/services/company-auth-store.js.map +1 -0
  255. package/dist/services/company-common.d.ts +9 -0
  256. package/dist/services/company-common.d.ts.map +1 -0
  257. package/dist/services/company-common.js +35 -0
  258. package/dist/services/company-common.js.map +1 -0
  259. package/dist/services/company-sync-service.d.ts +214 -0
  260. package/dist/services/company-sync-service.d.ts.map +1 -0
  261. package/dist/services/company-sync-service.js +1299 -0
  262. package/dist/services/company-sync-service.js.map +1 -0
  263. package/dist/services/connectors/adapters/business-metrics.d.ts +5 -0
  264. package/dist/services/connectors/adapters/business-metrics.d.ts.map +1 -0
  265. package/dist/services/connectors/adapters/business-metrics.js +41 -0
  266. package/dist/services/connectors/adapters/business-metrics.js.map +1 -0
  267. package/dist/services/connectors/adapters/deployment-health.d.ts +18 -0
  268. package/dist/services/connectors/adapters/deployment-health.d.ts.map +1 -0
  269. package/dist/services/connectors/adapters/deployment-health.js +67 -0
  270. package/dist/services/connectors/adapters/deployment-health.js.map +1 -0
  271. package/dist/services/connectors/adapters/github.d.ts +5 -0
  272. package/dist/services/connectors/adapters/github.d.ts.map +1 -0
  273. package/dist/services/connectors/adapters/github.js +31 -0
  274. package/dist/services/connectors/adapters/github.js.map +1 -0
  275. package/dist/services/connectors/adapters/linear-jira.d.ts +5 -0
  276. package/dist/services/connectors/adapters/linear-jira.d.ts.map +1 -0
  277. package/dist/services/connectors/adapters/linear-jira.js +26 -0
  278. package/dist/services/connectors/adapters/linear-jira.js.map +1 -0
  279. package/dist/services/connectors/adapters/posthog.d.ts +5 -0
  280. package/dist/services/connectors/adapters/posthog.d.ts.map +1 -0
  281. package/dist/services/connectors/adapters/posthog.js +31 -0
  282. package/dist/services/connectors/adapters/posthog.js.map +1 -0
  283. package/dist/services/connectors/adapters/sentry.d.ts +5 -0
  284. package/dist/services/connectors/adapters/sentry.d.ts.map +1 -0
  285. package/dist/services/connectors/adapters/sentry.js +31 -0
  286. package/dist/services/connectors/adapters/sentry.js.map +1 -0
  287. package/dist/services/connectors/checkpoint-custody.d.ts +45 -0
  288. package/dist/services/connectors/checkpoint-custody.d.ts.map +1 -0
  289. package/dist/services/connectors/checkpoint-custody.js +496 -0
  290. package/dist/services/connectors/checkpoint-custody.js.map +1 -0
  291. package/dist/services/connectors/connector-registry.d.ts +144 -0
  292. package/dist/services/connectors/connector-registry.d.ts.map +1 -0
  293. package/dist/services/connectors/connector-registry.js +423 -0
  294. package/dist/services/connectors/connector-registry.js.map +1 -0
  295. package/dist/services/connectors/connector-runtime.d.ts +200 -0
  296. package/dist/services/connectors/connector-runtime.d.ts.map +1 -0
  297. package/dist/services/connectors/connector-runtime.js +1297 -0
  298. package/dist/services/connectors/connector-runtime.js.map +1 -0
  299. package/dist/services/connectors/credential-custody.d.ts +96 -0
  300. package/dist/services/connectors/credential-custody.d.ts.map +1 -0
  301. package/dist/services/connectors/credential-custody.js +390 -0
  302. package/dist/services/connectors/credential-custody.js.map +1 -0
  303. package/dist/services/credential-backends.d.ts +11 -1
  304. package/dist/services/credential-backends.d.ts.map +1 -1
  305. package/dist/services/credential-backends.js +104 -21
  306. package/dist/services/credential-backends.js.map +1 -1
  307. package/dist/services/credential-write-lock.d.ts +8 -0
  308. package/dist/services/credential-write-lock.d.ts.map +1 -0
  309. package/dist/services/credential-write-lock.js +104 -0
  310. package/dist/services/credential-write-lock.js.map +1 -0
  311. package/dist/services/credentials-service.d.ts +8 -2
  312. package/dist/services/credentials-service.d.ts.map +1 -1
  313. package/dist/services/credentials-service.js +66 -21
  314. package/dist/services/credentials-service.js.map +1 -1
  315. package/dist/services/deprecation-notices.d.ts +2 -2
  316. package/dist/services/deprecation-notices.d.ts.map +1 -1
  317. package/dist/services/deprecation-notices.js +2 -2
  318. package/dist/services/deprecation-notices.js.map +1 -1
  319. package/dist/services/design-artifact-service.d.ts +37 -0
  320. package/dist/services/design-artifact-service.d.ts.map +1 -0
  321. package/dist/services/design-artifact-service.js +94 -0
  322. package/dist/services/design-artifact-service.js.map +1 -0
  323. package/dist/services/diagram-artifact-service.d.ts +12 -0
  324. package/dist/services/diagram-artifact-service.d.ts.map +1 -0
  325. package/dist/services/diagram-artifact-service.js +41 -0
  326. package/dist/services/diagram-artifact-service.js.map +1 -0
  327. package/dist/services/diagram-pipeline-service.d.ts +125 -0
  328. package/dist/services/diagram-pipeline-service.d.ts.map +1 -0
  329. package/dist/services/diagram-pipeline-service.js +329 -0
  330. package/dist/services/diagram-pipeline-service.js.map +1 -0
  331. package/dist/services/gherkin-service.d.ts +3 -0
  332. package/dist/services/gherkin-service.d.ts.map +1 -0
  333. package/dist/services/gherkin-service.js +9 -0
  334. package/dist/services/gherkin-service.js.map +1 -0
  335. package/dist/services/graph-service.d.ts.map +1 -1
  336. package/dist/services/graph-service.js +6 -4
  337. package/dist/services/graph-service.js.map +1 -1
  338. package/dist/services/landing/landing-service.d.ts +42 -0
  339. package/dist/services/landing/landing-service.d.ts.map +1 -0
  340. package/dist/services/landing/landing-service.js +197 -0
  341. package/dist/services/landing/landing-service.js.map +1 -0
  342. package/dist/services/landing/operation-registry.d.ts +56 -0
  343. package/dist/services/landing/operation-registry.d.ts.map +1 -0
  344. package/dist/services/landing/operation-registry.js +165 -0
  345. package/dist/services/landing/operation-registry.js.map +1 -0
  346. package/dist/services/landing/receipt-custody.d.ts +48 -0
  347. package/dist/services/landing/receipt-custody.d.ts.map +1 -0
  348. package/dist/services/landing/receipt-custody.js +375 -0
  349. package/dist/services/landing/receipt-custody.js.map +1 -0
  350. package/dist/services/linear/constants.d.ts.map +1 -1
  351. package/dist/services/linear/constants.js +2 -6
  352. package/dist/services/linear/constants.js.map +1 -1
  353. package/dist/services/linear/task-status-aggregation.d.ts +1 -1
  354. package/dist/services/linear/task-status-aggregation.js +1 -1
  355. package/dist/services/linear-pull-service.d.ts.map +1 -1
  356. package/dist/services/linear-pull-service.js +7 -30
  357. package/dist/services/linear-pull-service.js.map +1 -1
  358. package/dist/services/linear-push-service.d.ts.map +1 -1
  359. package/dist/services/linear-push-service.js +4 -5
  360. package/dist/services/linear-push-service.js.map +1 -1
  361. package/dist/services/migration-registry.d.ts +0 -19
  362. package/dist/services/migration-registry.d.ts.map +1 -1
  363. package/dist/services/migration-registry.js +18 -32
  364. package/dist/services/migration-registry.js.map +1 -1
  365. package/dist/services/operate/assignment-lifecycle-service.d.ts +135 -0
  366. package/dist/services/operate/assignment-lifecycle-service.d.ts.map +1 -0
  367. package/dist/services/operate/assignment-lifecycle-service.js +113 -0
  368. package/dist/services/operate/assignment-lifecycle-service.js.map +1 -0
  369. package/dist/services/operate/assignment-packet-service.d.ts +79 -0
  370. package/dist/services/operate/assignment-packet-service.d.ts.map +1 -0
  371. package/dist/services/operate/assignment-packet-service.js +1030 -0
  372. package/dist/services/operate/assignment-packet-service.js.map +1 -0
  373. package/dist/services/operate/client/governance.d.ts +4 -0
  374. package/dist/services/operate/client/governance.d.ts.map +1 -0
  375. package/dist/services/operate/client/governance.js +3 -0
  376. package/dist/services/operate/client/governance.js.map +1 -0
  377. package/dist/services/operate/client/lifecycle.d.ts +18 -0
  378. package/dist/services/operate/client/lifecycle.d.ts.map +1 -0
  379. package/dist/services/operate/client/lifecycle.js +15 -0
  380. package/dist/services/operate/client/lifecycle.js.map +1 -0
  381. package/dist/services/operate/client/runtime.d.ts +13 -0
  382. package/dist/services/operate/client/runtime.d.ts.map +1 -0
  383. package/dist/services/operate/client/runtime.js +11 -0
  384. package/dist/services/operate/client/runtime.js.map +1 -0
  385. package/dist/services/operate/client-error.d.ts +9 -0
  386. package/dist/services/operate/client-error.d.ts.map +1 -0
  387. package/dist/services/operate/client-error.js +14 -0
  388. package/dist/services/operate/client-error.js.map +1 -0
  389. package/dist/services/operate/client.d.ts +415 -0
  390. package/dist/services/operate/client.d.ts.map +1 -0
  391. package/dist/services/operate/client.js +2432 -0
  392. package/dist/services/operate/client.js.map +1 -0
  393. package/dist/services/operate/command-gateway.d.ts +152 -0
  394. package/dist/services/operate/command-gateway.d.ts.map +1 -0
  395. package/dist/services/operate/command-gateway.js +883 -0
  396. package/dist/services/operate/command-gateway.js.map +1 -0
  397. package/dist/services/operate/composition.d.ts +421 -0
  398. package/dist/services/operate/composition.d.ts.map +1 -0
  399. package/dist/services/operate/composition.js +394 -0
  400. package/dist/services/operate/composition.js.map +1 -0
  401. package/dist/services/operate/cycle-lifecycle-service.d.ts +35 -0
  402. package/dist/services/operate/cycle-lifecycle-service.d.ts.map +1 -0
  403. package/dist/services/operate/cycle-lifecycle-service.js +427 -0
  404. package/dist/services/operate/cycle-lifecycle-service.js.map +1 -0
  405. package/dist/services/operate/delivery-evidence.d.ts +34 -0
  406. package/dist/services/operate/delivery-evidence.d.ts.map +1 -0
  407. package/dist/services/operate/delivery-evidence.js +666 -0
  408. package/dist/services/operate/delivery-evidence.js.map +1 -0
  409. package/dist/services/operate/domain-catalog-service.d.ts +24 -0
  410. package/dist/services/operate/domain-catalog-service.d.ts.map +1 -0
  411. package/dist/services/operate/domain-catalog-service.js +99 -0
  412. package/dist/services/operate/domain-catalog-service.js.map +1 -0
  413. package/dist/services/operate/experience-read-service.d.ts +64 -0
  414. package/dist/services/operate/experience-read-service.d.ts.map +1 -0
  415. package/dist/services/operate/experience-read-service.js +109 -0
  416. package/dist/services/operate/experience-read-service.js.map +1 -0
  417. package/dist/services/operate/governed-action-service.d.ts +80 -0
  418. package/dist/services/operate/governed-action-service.d.ts.map +1 -0
  419. package/dist/services/operate/governed-action-service.js +497 -0
  420. package/dist/services/operate/governed-action-service.js.map +1 -0
  421. package/dist/services/operate/identity-contract.d.ts +3 -0
  422. package/dist/services/operate/identity-contract.d.ts.map +1 -0
  423. package/dist/services/operate/identity-contract.js +6 -0
  424. package/dist/services/operate/identity-contract.js.map +1 -0
  425. package/dist/services/operate/measurement-schedule-service.d.ts +81 -0
  426. package/dist/services/operate/measurement-schedule-service.d.ts.map +1 -0
  427. package/dist/services/operate/measurement-schedule-service.js +461 -0
  428. package/dist/services/operate/measurement-schedule-service.js.map +1 -0
  429. package/dist/services/operate/path-custody.d.ts +16 -0
  430. package/dist/services/operate/path-custody.d.ts.map +1 -0
  431. package/dist/services/operate/path-custody.js +120 -0
  432. package/dist/services/operate/path-custody.js.map +1 -0
  433. package/dist/services/operate/pinned-legacy-replay-runner.d.ts +9 -0
  434. package/dist/services/operate/pinned-legacy-replay-runner.d.ts.map +1 -0
  435. package/dist/services/operate/pinned-legacy-replay-runner.js +441 -0
  436. package/dist/services/operate/pinned-legacy-replay-runner.js.map +1 -0
  437. package/dist/services/operate/planning-bridge.d.ts +28 -0
  438. package/dist/services/operate/planning-bridge.d.ts.map +1 -0
  439. package/dist/services/operate/planning-bridge.js +341 -0
  440. package/dist/services/operate/planning-bridge.js.map +1 -0
  441. package/dist/services/operate/planning-handoff-gateway.d.ts +47 -0
  442. package/dist/services/operate/planning-handoff-gateway.d.ts.map +1 -0
  443. package/dist/services/operate/planning-handoff-gateway.js +169 -0
  444. package/dist/services/operate/planning-handoff-gateway.js.map +1 -0
  445. package/dist/services/operate/planning-handoff-service.d.ts +38 -0
  446. package/dist/services/operate/planning-handoff-service.d.ts.map +1 -0
  447. package/dist/services/operate/planning-handoff-service.js +304 -0
  448. package/dist/services/operate/planning-handoff-service.js.map +1 -0
  449. package/dist/services/operate/project-transaction-lock.d.ts +6 -0
  450. package/dist/services/operate/project-transaction-lock.d.ts.map +1 -0
  451. package/dist/services/operate/project-transaction-lock.js +146 -0
  452. package/dist/services/operate/project-transaction-lock.js.map +1 -0
  453. package/dist/services/operate/recovery-service.d.ts +16 -0
  454. package/dist/services/operate/recovery-service.d.ts.map +1 -0
  455. package/dist/services/operate/recovery-service.js +59 -0
  456. package/dist/services/operate/recovery-service.js.map +1 -0
  457. package/dist/services/operate/replay-safe-retry-service.d.ts +21 -0
  458. package/dist/services/operate/replay-safe-retry-service.d.ts.map +1 -0
  459. package/dist/services/operate/replay-safe-retry-service.js +66 -0
  460. package/dist/services/operate/replay-safe-retry-service.js.map +1 -0
  461. package/dist/services/operate/repository-read-service.d.ts +13 -0
  462. package/dist/services/operate/repository-read-service.d.ts.map +1 -0
  463. package/dist/services/operate/repository-read-service.js +153 -0
  464. package/dist/services/operate/repository-read-service.js.map +1 -0
  465. package/dist/services/operate/review-lifecycle-service.d.ts +50 -0
  466. package/dist/services/operate/review-lifecycle-service.d.ts.map +1 -0
  467. package/dist/services/operate/review-lifecycle-service.js +63 -0
  468. package/dist/services/operate/review-lifecycle-service.js.map +1 -0
  469. package/dist/services/operate/review-read-gateway.d.ts +21 -0
  470. package/dist/services/operate/review-read-gateway.d.ts.map +1 -0
  471. package/dist/services/operate/review-read-gateway.js +119 -0
  472. package/dist/services/operate/review-read-gateway.js.map +1 -0
  473. package/dist/services/operate/screened-evidence-service.d.ts +24 -0
  474. package/dist/services/operate/screened-evidence-service.d.ts.map +1 -0
  475. package/dist/services/operate/screened-evidence-service.js +186 -0
  476. package/dist/services/operate/screened-evidence-service.js.map +1 -0
  477. package/dist/services/operate/search-hit-contract.d.ts +11 -0
  478. package/dist/services/operate/search-hit-contract.d.ts.map +1 -0
  479. package/dist/services/operate/search-hit-contract.js +29 -0
  480. package/dist/services/operate/search-hit-contract.js.map +1 -0
  481. package/dist/services/operate/session-capability.d.ts +61 -0
  482. package/dist/services/operate/session-capability.d.ts.map +1 -0
  483. package/dist/services/operate/session-capability.js +124 -0
  484. package/dist/services/operate/session-capability.js.map +1 -0
  485. package/dist/services/operate/spec-operating-origin-service.d.ts +60 -0
  486. package/dist/services/operate/spec-operating-origin-service.d.ts.map +1 -0
  487. package/dist/services/operate/spec-operating-origin-service.js +401 -0
  488. package/dist/services/operate/spec-operating-origin-service.js.map +1 -0
  489. package/dist/services/operate/storage-layout.d.ts +82 -0
  490. package/dist/services/operate/storage-layout.d.ts.map +1 -0
  491. package/dist/services/operate/storage-layout.js +1244 -0
  492. package/dist/services/operate/storage-layout.js.map +1 -0
  493. package/dist/services/operate/storage-migration-service.d.ts +15 -0
  494. package/dist/services/operate/storage-migration-service.d.ts.map +1 -0
  495. package/dist/services/operate/storage-migration-service.js +27 -0
  496. package/dist/services/operate/storage-migration-service.js.map +1 -0
  497. package/dist/services/operate/store.d.ts +132 -0
  498. package/dist/services/operate/store.d.ts.map +1 -0
  499. package/dist/services/operate/store.js +1344 -0
  500. package/dist/services/operate/store.js.map +1 -0
  501. package/dist/services/pipeline-package-service.d.ts +93 -2
  502. package/dist/services/pipeline-package-service.d.ts.map +1 -1
  503. package/dist/services/pipeline-package-service.js +867 -7
  504. package/dist/services/pipeline-package-service.js.map +1 -1
  505. package/dist/services/planning-id-service.d.ts +8 -0
  506. package/dist/services/planning-id-service.d.ts.map +1 -0
  507. package/dist/services/planning-id-service.js +114 -0
  508. package/dist/services/planning-id-service.js.map +1 -0
  509. package/dist/services/provenance-service.d.ts +33 -1
  510. package/dist/services/provenance-service.d.ts.map +1 -1
  511. package/dist/services/provenance-service.js +104 -8
  512. package/dist/services/provenance-service.js.map +1 -1
  513. package/dist/services/runtime-manager/doctor.d.ts +22 -0
  514. package/dist/services/runtime-manager/doctor.d.ts.map +1 -0
  515. package/dist/services/runtime-manager/doctor.js +74 -0
  516. package/dist/services/runtime-manager/doctor.js.map +1 -0
  517. package/dist/services/runtime-manager/global-state.d.ts +47 -0
  518. package/dist/services/runtime-manager/global-state.d.ts.map +1 -0
  519. package/dist/services/runtime-manager/global-state.js +59 -0
  520. package/dist/services/runtime-manager/global-state.js.map +1 -0
  521. package/dist/services/runtime-manager/install-plan.d.ts +37 -0
  522. package/dist/services/runtime-manager/install-plan.d.ts.map +1 -0
  523. package/dist/services/runtime-manager/install-plan.js +91 -0
  524. package/dist/services/runtime-manager/install-plan.js.map +1 -0
  525. package/dist/services/runtime-manager/inventory.d.ts +29 -0
  526. package/dist/services/runtime-manager/inventory.d.ts.map +1 -0
  527. package/dist/services/runtime-manager/inventory.js +46 -0
  528. package/dist/services/runtime-manager/inventory.js.map +1 -0
  529. package/dist/services/runtime-manager-service.d.ts +16 -71
  530. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  531. package/dist/services/runtime-manager-service.js +1288 -505
  532. package/dist/services/runtime-manager-service.js.map +1 -1
  533. package/dist/services/spec-service.d.ts +213 -39
  534. package/dist/services/spec-service.d.ts.map +1 -1
  535. package/dist/services/spec-service.js +938 -171
  536. package/dist/services/spec-service.js.map +1 -1
  537. package/dist/services/template-service.d.ts.map +1 -1
  538. package/dist/services/template-service.js +1 -0
  539. package/dist/services/template-service.js.map +1 -1
  540. package/dist/templates/quick/quick-task.md.hbs +6 -0
  541. package/dist/templates/rules/claude/CLAUDE.md.hbs +3 -111
  542. package/dist/templates/rules/codex/AGENTS.md.hbs +2 -92
  543. package/dist/templates/rules/cursor/create-task-list.mdc.hbs +1 -1
  544. package/dist/templates/rules/cursor/implement-task-list.mdc.hbs +5 -83
  545. package/dist/templates/rules/cursor/openplanr.mdc.hbs +12 -0
  546. package/dist/templates/rules/shared/host-native-guidance.md.hbs +12 -0
  547. package/dist/templates/rules/shared/implementation-guidance.md.hbs +44 -0
  548. package/dist/templates/spec/spec-shaped.md.hbs +66 -22
  549. package/dist/templates/spec/spec.md.hbs +46 -23
  550. package/dist/templates/spec/story.md.hbs +15 -4
  551. package/dist/templates/spec/task.md.hbs +53 -5
  552. package/dist/utils/constants.d.ts +1 -1
  553. package/dist/utils/constants.js +1 -1
  554. package/dist/utils/logger.d.ts +0 -3
  555. package/dist/utils/logger.d.ts.map +1 -1
  556. package/dist/utils/logger.js +0 -6
  557. package/dist/utils/logger.js.map +1 -1
  558. package/docs/ARTIFACT_REVIEW.md +110 -0
  559. package/docs/CLI.md +1216 -0
  560. package/docs/CROSS_RUNTIME_SETUP.md +168 -0
  561. package/docs/TROUBLESHOOTING.md +227 -0
  562. package/lib/dashboard-verifier.d.mts +29 -0
  563. package/lib/dashboard-verifier.mjs +307 -0
  564. package/lib/host-packages/adapter-registry.json +44 -0
  565. package/lib/host-packages/claude/.claude-plugin/marketplace.json +20 -0
  566. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +9 -0
  567. package/lib/host-packages/claude/openplanr/.openplanr-content.json +1179 -0
  568. package/lib/host-packages/claude/openplanr/agents/planr-backend.md +66 -0
  569. package/lib/host-packages/claude/openplanr/agents/planr-database.md +165 -0
  570. package/lib/host-packages/claude/openplanr/agents/planr-designer.md +57 -0
  571. package/lib/host-packages/claude/openplanr/agents/planr-devops.md +57 -0
  572. package/lib/host-packages/claude/openplanr/agents/planr-documentation.md +63 -0
  573. package/lib/host-packages/claude/openplanr/agents/planr-entity-scaffold.md +29 -0
  574. package/lib/host-packages/claude/openplanr/agents/planr-frontend.md +69 -0
  575. package/lib/host-packages/claude/openplanr/agents/planr-qa.md +162 -0
  576. package/lib/host-packages/claude/openplanr/agents/planr-specification.md +124 -0
  577. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/backend.md +93 -0
  578. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/designer.md +90 -0
  579. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/devops.md +55 -0
  580. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/doc-gen.md +67 -0
  581. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/frontend.md +94 -0
  582. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/qa.md +17 -0
  583. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/default/specification.md +111 -0
  584. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/contract-create-modify-preserve.md +17 -0
  585. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/design-craft-rubric.md +51 -0
  586. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/design-principles.md +43 -0
  587. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/design-spec-template.md +88 -0
  588. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/task-context-resolution.md +60 -0
  589. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/verification-and-recovery-backend.md +26 -0
  590. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/shared/verification-and-recovery-frontend.md +27 -0
  591. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/backend.md +96 -0
  592. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/designer.md +83 -0
  593. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/devops.md +55 -0
  594. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/doc-gen.md +67 -0
  595. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/frontend.md +96 -0
  596. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/qa.md +17 -0
  597. package/lib/host-packages/claude/openplanr/references/agents/shared/modes/spec-driven/specification.md +112 -0
  598. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/backend/nestjs.md +130 -0
  599. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/mongodb.md +122 -0
  600. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/database/prisma.md +155 -0
  601. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/devops/docker-compose.md +140 -0
  602. package/lib/host-packages/claude/openplanr/references/pipeline/stacks/frontend/nextjs.md +123 -0
  603. package/lib/host-packages/claude/openplanr/skills/artifact/SKILL.md +54 -0
  604. package/lib/host-packages/claude/openplanr/skills/artifact/openplanr.skill.json +48 -0
  605. package/lib/host-packages/claude/openplanr/skills/artifact/references/company-review.md +18 -0
  606. package/lib/host-packages/claude/openplanr/skills/artifact/references/design-sharing.md +51 -0
  607. package/lib/host-packages/claude/openplanr/skills/browser-qa/SKILL.md +34 -0
  608. package/lib/host-packages/claude/openplanr/skills/browser-qa/openplanr.skill.json +26 -0
  609. package/lib/host-packages/claude/openplanr/skills/ceo-review/SKILL.md +47 -0
  610. package/lib/host-packages/claude/openplanr/skills/ceo-review/openplanr.skill.json +81 -0
  611. package/lib/host-packages/claude/openplanr/skills/ceo-review/references/operate-advisor-contract.md +111 -0
  612. package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/errors.mjs +8 -0
  613. package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/operate-review-contract.mjs +438 -0
  614. package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/operate-review-note.mjs +595 -0
  615. package/lib/host-packages/claude/openplanr/skills/ceo-review/scripts/validate-note.mjs +31 -0
  616. package/lib/host-packages/claude/openplanr/skills/chair-review/SKILL.md +101 -0
  617. package/lib/host-packages/claude/openplanr/skills/chair-review/openplanr.skill.json +70 -0
  618. package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/errors.mjs +8 -0
  619. package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/operate-review-contract.mjs +438 -0
  620. package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/operate-review-note.mjs +595 -0
  621. package/lib/host-packages/claude/openplanr/skills/chair-review/scripts/validate-note.mjs +31 -0
  622. package/lib/host-packages/claude/openplanr/skills/challenger-review/SKILL.md +86 -0
  623. package/lib/host-packages/claude/openplanr/skills/challenger-review/openplanr.skill.json +70 -0
  624. package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/errors.mjs +8 -0
  625. package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/operate-review-contract.mjs +438 -0
  626. package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/operate-review-note.mjs +595 -0
  627. package/lib/host-packages/claude/openplanr/skills/challenger-review/scripts/validate-note.mjs +31 -0
  628. package/lib/host-packages/claude/openplanr/skills/cmo-review/SKILL.md +46 -0
  629. package/lib/host-packages/claude/openplanr/skills/cmo-review/openplanr.skill.json +81 -0
  630. package/lib/host-packages/claude/openplanr/skills/cmo-review/references/operate-advisor-contract.md +111 -0
  631. package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/errors.mjs +8 -0
  632. package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/operate-review-contract.mjs +438 -0
  633. package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/operate-review-note.mjs +595 -0
  634. package/lib/host-packages/claude/openplanr/skills/cmo-review/scripts/validate-note.mjs +31 -0
  635. package/lib/host-packages/claude/openplanr/skills/coo-review/SKILL.md +45 -0
  636. package/lib/host-packages/claude/openplanr/skills/coo-review/openplanr.skill.json +81 -0
  637. package/lib/host-packages/claude/openplanr/skills/coo-review/references/operate-advisor-contract.md +111 -0
  638. package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/errors.mjs +8 -0
  639. package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/operate-review-contract.mjs +438 -0
  640. package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/operate-review-note.mjs +595 -0
  641. package/lib/host-packages/claude/openplanr/skills/coo-review/scripts/validate-note.mjs +31 -0
  642. package/lib/host-packages/claude/openplanr/skills/cpo-review/SKILL.md +48 -0
  643. package/lib/host-packages/claude/openplanr/skills/cpo-review/openplanr.skill.json +81 -0
  644. package/lib/host-packages/claude/openplanr/skills/cpo-review/references/operate-advisor-contract.md +111 -0
  645. package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/errors.mjs +8 -0
  646. package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/operate-review-contract.mjs +438 -0
  647. package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/operate-review-note.mjs +595 -0
  648. package/lib/host-packages/claude/openplanr/skills/cpo-review/scripts/validate-note.mjs +31 -0
  649. package/lib/host-packages/claude/openplanr/skills/cto-review/SKILL.md +47 -0
  650. package/lib/host-packages/claude/openplanr/skills/cto-review/openplanr.skill.json +81 -0
  651. package/lib/host-packages/claude/openplanr/skills/cto-review/references/operate-advisor-contract.md +111 -0
  652. package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/errors.mjs +8 -0
  653. package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/operate-review-contract.mjs +438 -0
  654. package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/operate-review-note.mjs +595 -0
  655. package/lib/host-packages/claude/openplanr/skills/cto-review/scripts/validate-note.mjs +31 -0
  656. package/lib/host-packages/claude/openplanr/skills/dashboard/SKILL.md +20 -0
  657. package/lib/host-packages/claude/openplanr/skills/dashboard/openplanr.skill.json +26 -0
  658. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +73 -0
  659. package/lib/host-packages/claude/openplanr/skills/design/openplanr.skill.json +466 -0
  660. package/lib/host-packages/claude/openplanr/skills/design/references/craft.md +68 -0
  661. package/lib/host-packages/claude/openplanr/skills/design/references/design-spec-template.md +88 -0
  662. package/lib/host-packages/claude/openplanr/skills/design/references/design-system.md +33 -0
  663. package/lib/host-packages/claude/openplanr/skills/design/references/discovery.md +53 -0
  664. package/lib/host-packages/claude/openplanr/skills/design/references/generation.md +105 -0
  665. package/lib/host-packages/claude/openplanr/skills/design/references/handoff.md +47 -0
  666. package/lib/host-packages/claude/openplanr/skills/design/references/review.md +88 -0
  667. package/lib/host-packages/claude/openplanr/skills/design/references/team-review.md +131 -0
  668. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +93 -0
  669. package/lib/host-packages/claude/openplanr/skills/design/schemas/design-document.schema.json +306 -0
  670. package/lib/host-packages/claude/openplanr/skills/design/schemas/design-review-context.schema.json +191 -0
  671. package/lib/host-packages/claude/openplanr/skills/design/schemas/design-review-handoff.schema.json +407 -0
  672. package/lib/host-packages/claude/openplanr/skills/design/scripts/design.mjs +17323 -0
  673. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/notices/entities.txt +13 -0
  674. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/notices/parse5.txt +21 -0
  675. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  676. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  677. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  678. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  679. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  680. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  681. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  682. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +115 -0
  683. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  684. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  685. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  686. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  687. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  688. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  689. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  690. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  691. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  692. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  693. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  694. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  695. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  696. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  697. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  698. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  699. package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  700. package/lib/host-packages/claude/openplanr/skills/design-loop/SKILL.md +58 -0
  701. package/lib/host-packages/claude/openplanr/skills/design-loop/openplanr.skill.json +466 -0
  702. package/lib/host-packages/claude/openplanr/skills/design-loop/references/craft.md +68 -0
  703. package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-spec-template.md +88 -0
  704. package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-system.md +33 -0
  705. package/lib/host-packages/claude/openplanr/skills/design-loop/references/discovery.md +53 -0
  706. package/lib/host-packages/claude/openplanr/skills/design-loop/references/generation.md +105 -0
  707. package/lib/host-packages/claude/openplanr/skills/design-loop/references/handoff.md +47 -0
  708. package/lib/host-packages/claude/openplanr/skills/design-loop/references/review.md +88 -0
  709. package/lib/host-packages/claude/openplanr/skills/design-loop/references/team-review.md +131 -0
  710. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +93 -0
  711. package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-document.schema.json +306 -0
  712. package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-review-context.schema.json +191 -0
  713. package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-review-handoff.schema.json +407 -0
  714. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design.mjs +17323 -0
  715. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/notices/entities.txt +13 -0
  716. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/notices/parse5.txt +21 -0
  717. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  718. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  719. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  720. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  721. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  722. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  723. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  724. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +115 -0
  725. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  726. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  727. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  728. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  729. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  730. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  731. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  732. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  733. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  734. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  735. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  736. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  737. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  738. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  739. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  740. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  741. package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  742. package/lib/host-packages/claude/openplanr/skills/design-review/SKILL.md +54 -0
  743. package/lib/host-packages/claude/openplanr/skills/design-review/openplanr.skill.json +466 -0
  744. package/lib/host-packages/claude/openplanr/skills/design-review/references/craft.md +68 -0
  745. package/lib/host-packages/claude/openplanr/skills/design-review/references/design-spec-template.md +88 -0
  746. package/lib/host-packages/claude/openplanr/skills/design-review/references/design-system.md +33 -0
  747. package/lib/host-packages/claude/openplanr/skills/design-review/references/discovery.md +53 -0
  748. package/lib/host-packages/claude/openplanr/skills/design-review/references/generation.md +105 -0
  749. package/lib/host-packages/claude/openplanr/skills/design-review/references/handoff.md +47 -0
  750. package/lib/host-packages/claude/openplanr/skills/design-review/references/review.md +88 -0
  751. package/lib/host-packages/claude/openplanr/skills/design-review/references/team-review.md +131 -0
  752. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +93 -0
  753. package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-document.schema.json +306 -0
  754. package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-review-context.schema.json +191 -0
  755. package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-review-handoff.schema.json +407 -0
  756. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design.mjs +17323 -0
  757. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/notices/entities.txt +13 -0
  758. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/notices/parse5.txt +21 -0
  759. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  760. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  761. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  762. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  763. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  764. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  765. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  766. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +115 -0
  767. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  768. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  769. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  770. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  771. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  772. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  773. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  774. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  775. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  776. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  777. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  778. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  779. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  780. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  781. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  782. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  783. package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  784. package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +65 -0
  785. package/lib/host-packages/claude/openplanr/skills/diagram/openplanr.skill.json +59 -0
  786. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-document.md +86 -0
  787. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-fidelity.md +19 -0
  788. package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +22 -0
  789. package/lib/host-packages/claude/openplanr/skills/doctor/SKILL.md +40 -0
  790. package/lib/host-packages/claude/openplanr/skills/doctor/openplanr.skill.json +37 -0
  791. package/lib/host-packages/claude/openplanr/skills/doctor/references/upgrade.md +106 -0
  792. package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +31 -0
  793. package/lib/host-packages/claude/openplanr/skills/investigate/openplanr.skill.json +26 -0
  794. package/lib/host-packages/claude/openplanr/skills/land/SKILL.md +33 -0
  795. package/lib/host-packages/claude/openplanr/skills/land/openplanr.skill.json +26 -0
  796. package/lib/host-packages/claude/openplanr/skills/operate/SKILL.md +181 -0
  797. package/lib/host-packages/claude/openplanr/skills/operate/openplanr.skill.json +70 -0
  798. package/lib/host-packages/claude/openplanr/skills/operate/scripts/errors.mjs +8 -0
  799. package/lib/host-packages/claude/openplanr/skills/operate/scripts/operate-review-contract.mjs +438 -0
  800. package/lib/host-packages/claude/openplanr/skills/operate/scripts/operate-review-note.mjs +595 -0
  801. package/lib/host-packages/claude/openplanr/skills/operate/scripts/validate-note.mjs +31 -0
  802. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +106 -0
  803. package/lib/host-packages/claude/openplanr/skills/plan/openplanr.skill.json +389 -0
  804. package/lib/host-packages/claude/openplanr/skills/plan/references/artifact-contract.md +39 -0
  805. package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-document.schema.json +306 -0
  806. package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-review-context.schema.json +191 -0
  807. package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-review-handoff.schema.json +407 -0
  808. package/lib/host-packages/claude/openplanr/skills/plan/scripts/design.mjs +17323 -0
  809. package/lib/host-packages/claude/openplanr/skills/plan/scripts/planning-ids.mjs +120 -0
  810. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/notices/entities.txt +13 -0
  811. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/notices/parse5.txt +21 -0
  812. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  813. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  814. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  815. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  816. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  817. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  818. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  819. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +115 -0
  820. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  821. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  822. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  823. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  824. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  825. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  826. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  827. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  828. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  829. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  830. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  831. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  832. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  833. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  834. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  835. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  836. package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  837. package/lib/host-packages/claude/openplanr/skills/plan-review/SKILL.md +39 -0
  838. package/lib/host-packages/claude/openplanr/skills/plan-review/openplanr.skill.json +26 -0
  839. package/lib/host-packages/claude/openplanr/skills/release/SKILL.md +180 -0
  840. package/lib/host-packages/claude/openplanr/skills/release/assets/changelog-template.md +18 -0
  841. package/lib/host-packages/claude/openplanr/skills/release/assets/profile-template.md +45 -0
  842. package/lib/host-packages/claude/openplanr/skills/release/openplanr.skill.json +92 -0
  843. package/lib/host-packages/claude/openplanr/skills/release/references/cadence.md +92 -0
  844. package/lib/host-packages/claude/openplanr/skills/release/references/release-notes.md +127 -0
  845. package/lib/host-packages/claude/openplanr/skills/release/references/schemes.md +103 -0
  846. package/lib/host-packages/claude/openplanr/skills/release/scripts/collect_changes.sh +85 -0
  847. package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +80 -0
  848. package/lib/host-packages/claude/openplanr/skills/ship/openplanr.skill.json +48 -0
  849. package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +14 -0
  850. package/lib/host-packages/claude/openplanr/skills/ship/scripts/discover-verification.mjs +107 -0
  851. package/lib/host-packages/claude/openplanr/skills/spec/SKILL.md +53 -0
  852. package/lib/host-packages/claude/openplanr/skills/spec/openplanr.skill.json +37 -0
  853. package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +32 -0
  854. package/lib/host-packages/claude/openplanr/skills/status/SKILL.md +21 -0
  855. package/lib/host-packages/claude/openplanr/skills/status/openplanr.skill.json +26 -0
  856. package/lib/host-packages/claude/openplanr/skills/sync/SKILL.md +30 -0
  857. package/lib/host-packages/claude/openplanr/skills/sync/openplanr.skill.json +37 -0
  858. package/lib/host-packages/claude/openplanr/skills/sync/scripts/sync.mjs +230 -0
  859. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +939 -0
  860. package/lib/host-packages/cursor/openplanr/manifest.json +32 -0
  861. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/company-review.md +18 -0
  862. package/lib/host-packages/cursor/openplanr/rules/planr-artifact/references/design-sharing.md +51 -0
  863. package/lib/host-packages/cursor/openplanr/rules/planr-artifact.mdc +53 -0
  864. package/lib/host-packages/cursor/openplanr/rules/planr-browser-qa.mdc +34 -0
  865. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/references/operate-advisor-contract.md +111 -0
  866. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/errors.mjs +8 -0
  867. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/operate-review-contract.mjs +438 -0
  868. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/operate-review-note.mjs +595 -0
  869. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review/scripts/validate-note.mjs +31 -0
  870. package/lib/host-packages/cursor/openplanr/rules/planr-ceo-review.mdc +45 -0
  871. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/errors.mjs +8 -0
  872. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/operate-review-contract.mjs +438 -0
  873. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/operate-review-note.mjs +595 -0
  874. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review/scripts/validate-note.mjs +31 -0
  875. package/lib/host-packages/cursor/openplanr/rules/planr-chair-review.mdc +99 -0
  876. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/errors.mjs +8 -0
  877. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/operate-review-contract.mjs +438 -0
  878. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/operate-review-note.mjs +595 -0
  879. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review/scripts/validate-note.mjs +31 -0
  880. package/lib/host-packages/cursor/openplanr/rules/planr-challenger-review.mdc +84 -0
  881. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/references/operate-advisor-contract.md +111 -0
  882. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/errors.mjs +8 -0
  883. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/operate-review-contract.mjs +438 -0
  884. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/operate-review-note.mjs +595 -0
  885. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review/scripts/validate-note.mjs +31 -0
  886. package/lib/host-packages/cursor/openplanr/rules/planr-cmo-review.mdc +44 -0
  887. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/references/operate-advisor-contract.md +111 -0
  888. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/errors.mjs +8 -0
  889. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/operate-review-contract.mjs +438 -0
  890. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/operate-review-note.mjs +595 -0
  891. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review/scripts/validate-note.mjs +31 -0
  892. package/lib/host-packages/cursor/openplanr/rules/planr-coo-review.mdc +43 -0
  893. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/references/operate-advisor-contract.md +111 -0
  894. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/errors.mjs +8 -0
  895. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/operate-review-contract.mjs +438 -0
  896. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/operate-review-note.mjs +595 -0
  897. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review/scripts/validate-note.mjs +31 -0
  898. package/lib/host-packages/cursor/openplanr/rules/planr-cpo-review.mdc +46 -0
  899. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/references/operate-advisor-contract.md +111 -0
  900. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/errors.mjs +8 -0
  901. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/operate-review-contract.mjs +438 -0
  902. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/operate-review-note.mjs +595 -0
  903. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review/scripts/validate-note.mjs +31 -0
  904. package/lib/host-packages/cursor/openplanr/rules/planr-cto-review.mdc +45 -0
  905. package/lib/host-packages/cursor/openplanr/rules/planr-dashboard.mdc +19 -0
  906. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/craft.md +68 -0
  907. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-spec-template.md +88 -0
  908. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-system.md +33 -0
  909. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/discovery.md +53 -0
  910. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/generation.md +105 -0
  911. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/handoff.md +47 -0
  912. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/review.md +88 -0
  913. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/team-review.md +131 -0
  914. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +93 -0
  915. package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-document.schema.json +306 -0
  916. package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-review-context.schema.json +191 -0
  917. package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-review-handoff.schema.json +407 -0
  918. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design.mjs +17323 -0
  919. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/notices/entities.txt +13 -0
  920. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/notices/parse5.txt +21 -0
  921. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  922. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  923. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  924. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  925. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  926. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  927. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  928. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/package.json +115 -0
  929. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  930. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  931. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  932. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  933. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  934. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  935. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  936. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  937. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  938. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  939. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  940. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  941. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  942. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  943. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  944. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  945. package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  946. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/craft.md +68 -0
  947. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-spec-template.md +88 -0
  948. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-system.md +33 -0
  949. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/discovery.md +53 -0
  950. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/generation.md +105 -0
  951. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/handoff.md +47 -0
  952. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/review.md +88 -0
  953. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/team-review.md +131 -0
  954. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +93 -0
  955. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-document.schema.json +306 -0
  956. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-review-context.schema.json +191 -0
  957. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-review-handoff.schema.json +407 -0
  958. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design.mjs +17323 -0
  959. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/notices/entities.txt +13 -0
  960. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/notices/parse5.txt +21 -0
  961. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  962. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  963. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  964. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  965. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  966. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  967. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  968. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/package.json +115 -0
  969. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  970. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  971. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  972. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  973. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  974. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  975. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  976. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  977. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  978. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  979. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  980. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  981. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  982. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  983. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  984. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  985. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  986. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop.mdc +57 -0
  987. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/craft.md +68 -0
  988. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-spec-template.md +88 -0
  989. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-system.md +33 -0
  990. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/discovery.md +53 -0
  991. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/generation.md +105 -0
  992. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/handoff.md +47 -0
  993. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/review.md +88 -0
  994. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/team-review.md +131 -0
  995. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +93 -0
  996. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-document.schema.json +306 -0
  997. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-review-context.schema.json +191 -0
  998. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-review-handoff.schema.json +407 -0
  999. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design.mjs +17323 -0
  1000. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/notices/entities.txt +13 -0
  1001. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/notices/parse5.txt +21 -0
  1002. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1003. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1004. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1005. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1006. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1007. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1008. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1009. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/package.json +115 -0
  1010. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1011. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1012. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1013. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1014. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1015. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1016. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1017. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1018. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1019. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1020. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1021. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1022. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1023. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1024. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1025. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1026. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1027. package/lib/host-packages/cursor/openplanr/rules/planr-design-review.mdc +53 -0
  1028. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +72 -0
  1029. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-document.md +86 -0
  1030. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-fidelity.md +19 -0
  1031. package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +22 -0
  1032. package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +64 -0
  1033. package/lib/host-packages/cursor/openplanr/rules/planr-doctor/references/upgrade.md +106 -0
  1034. package/lib/host-packages/cursor/openplanr/rules/planr-doctor.mdc +39 -0
  1035. package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +31 -0
  1036. package/lib/host-packages/cursor/openplanr/rules/planr-land.mdc +32 -0
  1037. package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/errors.mjs +8 -0
  1038. package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/operate-review-contract.mjs +438 -0
  1039. package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/operate-review-note.mjs +595 -0
  1040. package/lib/host-packages/cursor/openplanr/rules/planr-operate/scripts/validate-note.mjs +31 -0
  1041. package/lib/host-packages/cursor/openplanr/rules/planr-operate.mdc +180 -0
  1042. package/lib/host-packages/cursor/openplanr/rules/planr-plan/references/artifact-contract.md +39 -0
  1043. package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json +306 -0
  1044. package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-review-context.schema.json +191 -0
  1045. package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-review-handoff.schema.json +407 -0
  1046. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design.mjs +17323 -0
  1047. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/planning-ids.mjs +120 -0
  1048. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/notices/entities.txt +13 -0
  1049. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/notices/parse5.txt +21 -0
  1050. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1051. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1052. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1053. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1054. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1055. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1056. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1057. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/package.json +115 -0
  1058. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1059. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1060. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1061. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1062. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1063. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1064. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1065. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1066. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1067. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1068. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1069. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1070. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1071. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1072. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1073. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1074. package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1075. package/lib/host-packages/cursor/openplanr/rules/planr-plan-review.mdc +38 -0
  1076. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +105 -0
  1077. package/lib/host-packages/cursor/openplanr/rules/planr-release/assets/changelog-template.md +18 -0
  1078. package/lib/host-packages/cursor/openplanr/rules/planr-release/assets/profile-template.md +45 -0
  1079. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/cadence.md +92 -0
  1080. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/release-notes.md +127 -0
  1081. package/lib/host-packages/cursor/openplanr/rules/planr-release/references/schemes.md +103 -0
  1082. package/lib/host-packages/cursor/openplanr/rules/planr-release/scripts/collect_changes.sh +85 -0
  1083. package/lib/host-packages/cursor/openplanr/rules/planr-release.mdc +179 -0
  1084. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +14 -0
  1085. package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/discover-verification.mjs +107 -0
  1086. package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +79 -0
  1087. package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +32 -0
  1088. package/lib/host-packages/cursor/openplanr/rules/planr-spec.mdc +52 -0
  1089. package/lib/host-packages/cursor/openplanr/rules/planr-status.mdc +20 -0
  1090. package/lib/host-packages/cursor/openplanr/rules/planr-sync/scripts/sync.mjs +230 -0
  1091. package/lib/host-packages/cursor/openplanr/rules/planr-sync.mdc +29 -0
  1092. package/lib/host-packages/openai/.claude-plugin/marketplace.json +19 -0
  1093. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +10 -0
  1094. package/lib/host-packages/openai/openplanr/.openplanr-content.json +1139 -0
  1095. package/lib/host-packages/openai/openplanr/skills/artifact/SKILL.md +54 -0
  1096. package/lib/host-packages/openai/openplanr/skills/artifact/agents/openai.yaml +6 -0
  1097. package/lib/host-packages/openai/openplanr/skills/artifact/openplanr.skill.json +48 -0
  1098. package/lib/host-packages/openai/openplanr/skills/artifact/references/company-review.md +18 -0
  1099. package/lib/host-packages/openai/openplanr/skills/artifact/references/design-sharing.md +51 -0
  1100. package/lib/host-packages/openai/openplanr/skills/browser-qa/SKILL.md +34 -0
  1101. package/lib/host-packages/openai/openplanr/skills/browser-qa/agents/openai.yaml +6 -0
  1102. package/lib/host-packages/openai/openplanr/skills/browser-qa/openplanr.skill.json +26 -0
  1103. package/lib/host-packages/openai/openplanr/skills/ceo-review/SKILL.md +47 -0
  1104. package/lib/host-packages/openai/openplanr/skills/ceo-review/agents/openai.yaml +6 -0
  1105. package/lib/host-packages/openai/openplanr/skills/ceo-review/openplanr.skill.json +81 -0
  1106. package/lib/host-packages/openai/openplanr/skills/ceo-review/references/operate-advisor-contract.md +111 -0
  1107. package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/errors.mjs +8 -0
  1108. package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/operate-review-contract.mjs +438 -0
  1109. package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/operate-review-note.mjs +595 -0
  1110. package/lib/host-packages/openai/openplanr/skills/ceo-review/scripts/validate-note.mjs +31 -0
  1111. package/lib/host-packages/openai/openplanr/skills/chair-review/SKILL.md +101 -0
  1112. package/lib/host-packages/openai/openplanr/skills/chair-review/agents/openai.yaml +6 -0
  1113. package/lib/host-packages/openai/openplanr/skills/chair-review/openplanr.skill.json +70 -0
  1114. package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/errors.mjs +8 -0
  1115. package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/operate-review-contract.mjs +438 -0
  1116. package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/operate-review-note.mjs +595 -0
  1117. package/lib/host-packages/openai/openplanr/skills/chair-review/scripts/validate-note.mjs +31 -0
  1118. package/lib/host-packages/openai/openplanr/skills/challenger-review/SKILL.md +86 -0
  1119. package/lib/host-packages/openai/openplanr/skills/challenger-review/agents/openai.yaml +6 -0
  1120. package/lib/host-packages/openai/openplanr/skills/challenger-review/openplanr.skill.json +70 -0
  1121. package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/errors.mjs +8 -0
  1122. package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/operate-review-contract.mjs +438 -0
  1123. package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/operate-review-note.mjs +595 -0
  1124. package/lib/host-packages/openai/openplanr/skills/challenger-review/scripts/validate-note.mjs +31 -0
  1125. package/lib/host-packages/openai/openplanr/skills/cmo-review/SKILL.md +46 -0
  1126. package/lib/host-packages/openai/openplanr/skills/cmo-review/agents/openai.yaml +6 -0
  1127. package/lib/host-packages/openai/openplanr/skills/cmo-review/openplanr.skill.json +81 -0
  1128. package/lib/host-packages/openai/openplanr/skills/cmo-review/references/operate-advisor-contract.md +111 -0
  1129. package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/errors.mjs +8 -0
  1130. package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/operate-review-contract.mjs +438 -0
  1131. package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/operate-review-note.mjs +595 -0
  1132. package/lib/host-packages/openai/openplanr/skills/cmo-review/scripts/validate-note.mjs +31 -0
  1133. package/lib/host-packages/openai/openplanr/skills/coo-review/SKILL.md +45 -0
  1134. package/lib/host-packages/openai/openplanr/skills/coo-review/agents/openai.yaml +6 -0
  1135. package/lib/host-packages/openai/openplanr/skills/coo-review/openplanr.skill.json +81 -0
  1136. package/lib/host-packages/openai/openplanr/skills/coo-review/references/operate-advisor-contract.md +111 -0
  1137. package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/errors.mjs +8 -0
  1138. package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/operate-review-contract.mjs +438 -0
  1139. package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/operate-review-note.mjs +595 -0
  1140. package/lib/host-packages/openai/openplanr/skills/coo-review/scripts/validate-note.mjs +31 -0
  1141. package/lib/host-packages/openai/openplanr/skills/cpo-review/SKILL.md +48 -0
  1142. package/lib/host-packages/openai/openplanr/skills/cpo-review/agents/openai.yaml +6 -0
  1143. package/lib/host-packages/openai/openplanr/skills/cpo-review/openplanr.skill.json +81 -0
  1144. package/lib/host-packages/openai/openplanr/skills/cpo-review/references/operate-advisor-contract.md +111 -0
  1145. package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/errors.mjs +8 -0
  1146. package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/operate-review-contract.mjs +438 -0
  1147. package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/operate-review-note.mjs +595 -0
  1148. package/lib/host-packages/openai/openplanr/skills/cpo-review/scripts/validate-note.mjs +31 -0
  1149. package/lib/host-packages/openai/openplanr/skills/cto-review/SKILL.md +47 -0
  1150. package/lib/host-packages/openai/openplanr/skills/cto-review/agents/openai.yaml +6 -0
  1151. package/lib/host-packages/openai/openplanr/skills/cto-review/openplanr.skill.json +81 -0
  1152. package/lib/host-packages/openai/openplanr/skills/cto-review/references/operate-advisor-contract.md +111 -0
  1153. package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/errors.mjs +8 -0
  1154. package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/operate-review-contract.mjs +438 -0
  1155. package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/operate-review-note.mjs +595 -0
  1156. package/lib/host-packages/openai/openplanr/skills/cto-review/scripts/validate-note.mjs +31 -0
  1157. package/lib/host-packages/openai/openplanr/skills/dashboard/SKILL.md +20 -0
  1158. package/lib/host-packages/openai/openplanr/skills/dashboard/agents/openai.yaml +6 -0
  1159. package/lib/host-packages/openai/openplanr/skills/dashboard/openplanr.skill.json +26 -0
  1160. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +73 -0
  1161. package/lib/host-packages/openai/openplanr/skills/design/agents/openai.yaml +6 -0
  1162. package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +466 -0
  1163. package/lib/host-packages/openai/openplanr/skills/design/references/craft.md +68 -0
  1164. package/lib/host-packages/openai/openplanr/skills/design/references/design-spec-template.md +88 -0
  1165. package/lib/host-packages/openai/openplanr/skills/design/references/design-system.md +33 -0
  1166. package/lib/host-packages/openai/openplanr/skills/design/references/discovery.md +53 -0
  1167. package/lib/host-packages/openai/openplanr/skills/design/references/generation.md +105 -0
  1168. package/lib/host-packages/openai/openplanr/skills/design/references/handoff.md +47 -0
  1169. package/lib/host-packages/openai/openplanr/skills/design/references/review.md +88 -0
  1170. package/lib/host-packages/openai/openplanr/skills/design/references/team-review.md +131 -0
  1171. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +93 -0
  1172. package/lib/host-packages/openai/openplanr/skills/design/schemas/design-document.schema.json +306 -0
  1173. package/lib/host-packages/openai/openplanr/skills/design/schemas/design-review-context.schema.json +191 -0
  1174. package/lib/host-packages/openai/openplanr/skills/design/schemas/design-review-handoff.schema.json +407 -0
  1175. package/lib/host-packages/openai/openplanr/skills/design/scripts/design.mjs +17323 -0
  1176. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/notices/entities.txt +13 -0
  1177. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/notices/parse5.txt +21 -0
  1178. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1179. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1180. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1181. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1182. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1183. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1184. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1185. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +115 -0
  1186. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1187. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1188. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1189. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1190. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1191. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1192. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1193. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1194. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1195. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1196. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1197. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1198. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1199. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1200. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1201. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1202. package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1203. package/lib/host-packages/openai/openplanr/skills/design-loop/SKILL.md +58 -0
  1204. package/lib/host-packages/openai/openplanr/skills/design-loop/agents/openai.yaml +6 -0
  1205. package/lib/host-packages/openai/openplanr/skills/design-loop/openplanr.skill.json +466 -0
  1206. package/lib/host-packages/openai/openplanr/skills/design-loop/references/craft.md +68 -0
  1207. package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-spec-template.md +88 -0
  1208. package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-system.md +33 -0
  1209. package/lib/host-packages/openai/openplanr/skills/design-loop/references/discovery.md +53 -0
  1210. package/lib/host-packages/openai/openplanr/skills/design-loop/references/generation.md +105 -0
  1211. package/lib/host-packages/openai/openplanr/skills/design-loop/references/handoff.md +47 -0
  1212. package/lib/host-packages/openai/openplanr/skills/design-loop/references/review.md +88 -0
  1213. package/lib/host-packages/openai/openplanr/skills/design-loop/references/team-review.md +131 -0
  1214. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +93 -0
  1215. package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-document.schema.json +306 -0
  1216. package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-review-context.schema.json +191 -0
  1217. package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-review-handoff.schema.json +407 -0
  1218. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design.mjs +17323 -0
  1219. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/notices/entities.txt +13 -0
  1220. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/notices/parse5.txt +21 -0
  1221. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1222. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1223. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1224. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1225. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1226. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1227. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1228. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +115 -0
  1229. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1230. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1231. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1232. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1233. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1234. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1235. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1236. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1237. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1238. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1239. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1240. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1241. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1242. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1243. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1244. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1245. package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1246. package/lib/host-packages/openai/openplanr/skills/design-review/SKILL.md +54 -0
  1247. package/lib/host-packages/openai/openplanr/skills/design-review/agents/openai.yaml +6 -0
  1248. package/lib/host-packages/openai/openplanr/skills/design-review/openplanr.skill.json +466 -0
  1249. package/lib/host-packages/openai/openplanr/skills/design-review/references/craft.md +68 -0
  1250. package/lib/host-packages/openai/openplanr/skills/design-review/references/design-spec-template.md +88 -0
  1251. package/lib/host-packages/openai/openplanr/skills/design-review/references/design-system.md +33 -0
  1252. package/lib/host-packages/openai/openplanr/skills/design-review/references/discovery.md +53 -0
  1253. package/lib/host-packages/openai/openplanr/skills/design-review/references/generation.md +105 -0
  1254. package/lib/host-packages/openai/openplanr/skills/design-review/references/handoff.md +47 -0
  1255. package/lib/host-packages/openai/openplanr/skills/design-review/references/review.md +88 -0
  1256. package/lib/host-packages/openai/openplanr/skills/design-review/references/team-review.md +131 -0
  1257. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +93 -0
  1258. package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-document.schema.json +306 -0
  1259. package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-review-context.schema.json +191 -0
  1260. package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-review-handoff.schema.json +407 -0
  1261. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design.mjs +17323 -0
  1262. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/notices/entities.txt +13 -0
  1263. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/notices/parse5.txt +21 -0
  1264. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1265. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1266. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1267. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1268. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1269. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1270. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1271. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +115 -0
  1272. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1273. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1274. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1275. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1276. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1277. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1278. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1279. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1280. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1281. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1282. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1283. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1284. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1285. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1286. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1287. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1288. package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1289. package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +65 -0
  1290. package/lib/host-packages/openai/openplanr/skills/diagram/agents/openai.yaml +6 -0
  1291. package/lib/host-packages/openai/openplanr/skills/diagram/openplanr.skill.json +59 -0
  1292. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-document.md +86 -0
  1293. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-fidelity.md +19 -0
  1294. package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +22 -0
  1295. package/lib/host-packages/openai/openplanr/skills/doctor/SKILL.md +40 -0
  1296. package/lib/host-packages/openai/openplanr/skills/doctor/agents/openai.yaml +6 -0
  1297. package/lib/host-packages/openai/openplanr/skills/doctor/openplanr.skill.json +37 -0
  1298. package/lib/host-packages/openai/openplanr/skills/doctor/references/upgrade.md +106 -0
  1299. package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +31 -0
  1300. package/lib/host-packages/openai/openplanr/skills/investigate/agents/openai.yaml +6 -0
  1301. package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +26 -0
  1302. package/lib/host-packages/openai/openplanr/skills/land/SKILL.md +33 -0
  1303. package/lib/host-packages/openai/openplanr/skills/land/agents/openai.yaml +6 -0
  1304. package/lib/host-packages/openai/openplanr/skills/land/openplanr.skill.json +26 -0
  1305. package/lib/host-packages/openai/openplanr/skills/operate/SKILL.md +181 -0
  1306. package/lib/host-packages/openai/openplanr/skills/operate/agents/openai.yaml +6 -0
  1307. package/lib/host-packages/openai/openplanr/skills/operate/openplanr.skill.json +70 -0
  1308. package/lib/host-packages/openai/openplanr/skills/operate/scripts/errors.mjs +8 -0
  1309. package/lib/host-packages/openai/openplanr/skills/operate/scripts/operate-review-contract.mjs +438 -0
  1310. package/lib/host-packages/openai/openplanr/skills/operate/scripts/operate-review-note.mjs +595 -0
  1311. package/lib/host-packages/openai/openplanr/skills/operate/scripts/validate-note.mjs +31 -0
  1312. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +106 -0
  1313. package/lib/host-packages/openai/openplanr/skills/plan/agents/openai.yaml +6 -0
  1314. package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +389 -0
  1315. package/lib/host-packages/openai/openplanr/skills/plan/references/artifact-contract.md +39 -0
  1316. package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-document.schema.json +306 -0
  1317. package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-review-context.schema.json +191 -0
  1318. package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-review-handoff.schema.json +407 -0
  1319. package/lib/host-packages/openai/openplanr/skills/plan/scripts/design.mjs +17323 -0
  1320. package/lib/host-packages/openai/openplanr/skills/plan/scripts/planning-ids.mjs +120 -0
  1321. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/notices/entities.txt +13 -0
  1322. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/notices/parse5.txt +21 -0
  1323. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/artifact/templates/artifact-review-stage.js +3994 -0
  1324. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.css +378 -0
  1325. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/enhancements.js +805 -0
  1326. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.css +1 -0
  1327. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/share.js +132 -0
  1328. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.css +1103 -0
  1329. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/design/templates/studio/studio.js +1775 -0
  1330. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +115 -0
  1331. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/registry/artifact-theme.json +60 -0
  1332. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.0.0/design-manifest.schema.json +90 -0
  1333. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-envelope.schema.json +142 -0
  1334. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-paste.schema.json +49 -0
  1335. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-review.schema.json +97 -0
  1336. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.1.0/artifact-theme.schema.json +139 -0
  1337. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-bundle.schema.json +584 -0
  1338. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-context.schema.json +191 -0
  1339. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-handoff.schema.json +407 -0
  1340. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.10.0/design-review-metadata-payload.schema.json +106 -0
  1341. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.11.0/design-review-metadata-payload.schema.json +107 -0
  1342. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-document.schema.json +306 -0
  1343. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-bundle.schema.json +346 -0
  1344. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-review-workspace.schema.json +108 -0
  1345. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-create.schema.json +170 -0
  1346. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-event.schema.json +97 -0
  1347. package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/schemas/v1.9.0/design-workspace-revision.schema.json +56 -0
  1348. package/lib/host-packages/openai/openplanr/skills/plan-review/SKILL.md +39 -0
  1349. package/lib/host-packages/openai/openplanr/skills/plan-review/agents/openai.yaml +6 -0
  1350. package/lib/host-packages/openai/openplanr/skills/plan-review/openplanr.skill.json +26 -0
  1351. package/lib/host-packages/openai/openplanr/skills/release/SKILL.md +180 -0
  1352. package/lib/host-packages/openai/openplanr/skills/release/agents/openai.yaml +6 -0
  1353. package/lib/host-packages/openai/openplanr/skills/release/assets/changelog-template.md +18 -0
  1354. package/lib/host-packages/openai/openplanr/skills/release/assets/profile-template.md +45 -0
  1355. package/lib/host-packages/openai/openplanr/skills/release/openplanr.skill.json +92 -0
  1356. package/lib/host-packages/openai/openplanr/skills/release/references/cadence.md +92 -0
  1357. package/lib/host-packages/openai/openplanr/skills/release/references/release-notes.md +127 -0
  1358. package/lib/host-packages/openai/openplanr/skills/release/references/schemes.md +103 -0
  1359. package/lib/host-packages/openai/openplanr/skills/release/scripts/collect_changes.sh +85 -0
  1360. package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +80 -0
  1361. package/lib/host-packages/openai/openplanr/skills/ship/agents/openai.yaml +6 -0
  1362. package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +48 -0
  1363. package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +14 -0
  1364. package/lib/host-packages/openai/openplanr/skills/ship/scripts/discover-verification.mjs +107 -0
  1365. package/lib/host-packages/openai/openplanr/skills/spec/SKILL.md +53 -0
  1366. package/lib/host-packages/openai/openplanr/skills/spec/agents/openai.yaml +6 -0
  1367. package/lib/host-packages/openai/openplanr/skills/spec/openplanr.skill.json +37 -0
  1368. package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +32 -0
  1369. package/lib/host-packages/openai/openplanr/skills/status/SKILL.md +21 -0
  1370. package/lib/host-packages/openai/openplanr/skills/status/agents/openai.yaml +6 -0
  1371. package/lib/host-packages/openai/openplanr/skills/status/openplanr.skill.json +26 -0
  1372. package/lib/host-packages/openai/openplanr/skills/sync/SKILL.md +30 -0
  1373. package/lib/host-packages/openai/openplanr/skills/sync/agents/openai.yaml +6 -0
  1374. package/lib/host-packages/openai/openplanr/skills/sync/openplanr.skill.json +37 -0
  1375. package/lib/host-packages/openai/openplanr/skills/sync/scripts/sync.mjs +230 -0
  1376. package/lib/integrations.d.mts +43 -0
  1377. package/lib/integrations.mjs +230 -0
  1378. package/lib/skill-runtime/errors.mjs +8 -0
  1379. package/lib/skill-runtime/operate-review-contract.mjs +438 -0
  1380. package/lib/skill-runtime/operate-review-note.mjs +595 -0
  1381. package/package.json +56 -18
  1382. package/dist/ai/codebase/context-builder.d.ts +0 -50
  1383. package/dist/ai/codebase/context-builder.d.ts.map +0 -1
  1384. package/dist/ai/codebase/context-builder.js +0 -281
  1385. package/dist/ai/codebase/context-builder.js.map +0 -1
  1386. package/dist/ai/codebase/file-reader.d.ts +0 -22
  1387. package/dist/ai/codebase/file-reader.d.ts.map +0 -1
  1388. package/dist/ai/codebase/file-reader.js +0 -144
  1389. package/dist/ai/codebase/file-reader.js.map +0 -1
  1390. package/dist/ai/codebase/index.d.ts +0 -7
  1391. package/dist/ai/codebase/index.d.ts.map +0 -1
  1392. package/dist/ai/codebase/index.js +0 -7
  1393. package/dist/ai/codebase/index.js.map +0 -1
  1394. package/dist/ai/codebase/pattern-rules.d.ts +0 -28
  1395. package/dist/ai/codebase/pattern-rules.d.ts.map +0 -1
  1396. package/dist/ai/codebase/pattern-rules.js +0 -186
  1397. package/dist/ai/codebase/pattern-rules.js.map +0 -1
  1398. package/dist/ai/codebase/rules-reader.d.ts +0 -14
  1399. package/dist/ai/codebase/rules-reader.d.ts.map +0 -1
  1400. package/dist/ai/codebase/rules-reader.js +0 -25
  1401. package/dist/ai/codebase/rules-reader.js.map +0 -1
  1402. package/dist/ai/codebase/stack-detector.d.ts +0 -18
  1403. package/dist/ai/codebase/stack-detector.d.ts.map +0 -1
  1404. package/dist/ai/codebase/stack-detector.js +0 -173
  1405. package/dist/ai/codebase/stack-detector.js.map +0 -1
  1406. package/dist/ai/codebase/tree-generator.d.ts +0 -8
  1407. package/dist/ai/codebase/tree-generator.d.ts.map +0 -1
  1408. package/dist/ai/codebase/tree-generator.js +0 -84
  1409. package/dist/ai/codebase/tree-generator.js.map +0 -1
  1410. package/dist/ai/errors.d.ts +0 -22
  1411. package/dist/ai/errors.d.ts.map +0 -1
  1412. package/dist/ai/errors.js +0 -72
  1413. package/dist/ai/errors.js.map +0 -1
  1414. package/dist/ai/index.d.ts +0 -11
  1415. package/dist/ai/index.d.ts.map +0 -1
  1416. package/dist/ai/index.js +0 -10
  1417. package/dist/ai/index.js.map +0 -1
  1418. package/dist/ai/prompts/prompt-builder.d.ts +0 -134
  1419. package/dist/ai/prompts/prompt-builder.d.ts.map +0 -1
  1420. package/dist/ai/prompts/prompt-builder.js +0 -295
  1421. package/dist/ai/prompts/prompt-builder.js.map +0 -1
  1422. package/dist/ai/prompts/system-prompts.d.ts +0 -41
  1423. package/dist/ai/prompts/system-prompts.d.ts.map +0 -1
  1424. package/dist/ai/prompts/system-prompts.js +0 -512
  1425. package/dist/ai/prompts/system-prompts.js.map +0 -1
  1426. package/dist/ai/provider-factory.d.ts +0 -10
  1427. package/dist/ai/provider-factory.d.ts.map +0 -1
  1428. package/dist/ai/provider-factory.js +0 -49
  1429. package/dist/ai/provider-factory.js.map +0 -1
  1430. package/dist/ai/providers/anthropic-provider.d.ts +0 -24
  1431. package/dist/ai/providers/anthropic-provider.d.ts.map +0 -1
  1432. package/dist/ai/providers/anthropic-provider.js +0 -97
  1433. package/dist/ai/providers/anthropic-provider.js.map +0 -1
  1434. package/dist/ai/providers/ollama-provider.d.ts +0 -13
  1435. package/dist/ai/providers/ollama-provider.d.ts.map +0 -1
  1436. package/dist/ai/providers/ollama-provider.js +0 -16
  1437. package/dist/ai/providers/ollama-provider.js.map +0 -1
  1438. package/dist/ai/providers/openai-provider.d.ts +0 -19
  1439. package/dist/ai/providers/openai-provider.d.ts.map +0 -1
  1440. package/dist/ai/providers/openai-provider.js +0 -84
  1441. package/dist/ai/providers/openai-provider.js.map +0 -1
  1442. package/dist/ai/schemas/ai-response-schemas.d.ts +0 -340
  1443. package/dist/ai/schemas/ai-response-schemas.d.ts.map +0 -1
  1444. package/dist/ai/schemas/ai-response-schemas.js +0 -278
  1445. package/dist/ai/schemas/ai-response-schemas.js.map +0 -1
  1446. package/dist/ai/types.d.ts +0 -76
  1447. package/dist/ai/types.d.ts.map +0 -1
  1448. package/dist/ai/types.js +0 -49
  1449. package/dist/ai/types.js.map +0 -1
  1450. package/dist/ai/validation/index.d.ts +0 -2
  1451. package/dist/ai/validation/index.d.ts.map +0 -1
  1452. package/dist/ai/validation/index.js +0 -2
  1453. package/dist/ai/validation/index.js.map +0 -1
  1454. package/dist/ai/validation/task-validator.d.ts +0 -37
  1455. package/dist/ai/validation/task-validator.d.ts.map +0 -1
  1456. package/dist/ai/validation/task-validator.js +0 -81
  1457. package/dist/ai/validation/task-validator.js.map +0 -1
  1458. package/dist/cli/commands/config.d.ts +0 -8
  1459. package/dist/cli/commands/config.d.ts.map +0 -1
  1460. package/dist/cli/commands/config.js +0 -224
  1461. package/dist/cli/commands/config.js.map +0 -1
  1462. package/dist/cli/commands/estimate.d.ts +0 -3
  1463. package/dist/cli/commands/estimate.d.ts.map +0 -1
  1464. package/dist/cli/commands/estimate.js +0 -368
  1465. package/dist/cli/commands/estimate.js.map +0 -1
  1466. package/dist/cli/commands/init.d.ts +0 -9
  1467. package/dist/cli/commands/init.d.ts.map +0 -1
  1468. package/dist/cli/commands/init.js +0 -166
  1469. package/dist/cli/commands/init.js.map +0 -1
  1470. package/dist/cli/commands/pipeline.d.ts +0 -3
  1471. package/dist/cli/commands/pipeline.d.ts.map +0 -1
  1472. package/dist/cli/commands/pipeline.js +0 -59
  1473. package/dist/cli/commands/pipeline.js.map +0 -1
  1474. package/dist/cli/commands/plan.d.ts +0 -15
  1475. package/dist/cli/commands/plan.d.ts.map +0 -1
  1476. package/dist/cli/commands/plan.js +0 -444
  1477. package/dist/cli/commands/plan.js.map +0 -1
  1478. package/dist/cli/commands/refine.d.ts +0 -10
  1479. package/dist/cli/commands/refine.d.ts.map +0 -1
  1480. package/dist/cli/commands/refine.js +0 -226
  1481. package/dist/cli/commands/refine.js.map +0 -1
  1482. package/dist/cli/commands/revise.d.ts +0 -24
  1483. package/dist/cli/commands/revise.d.ts.map +0 -1
  1484. package/dist/cli/commands/revise.js +0 -572
  1485. package/dist/cli/commands/revise.js.map +0 -1
  1486. package/dist/cli/helpers/task-creation.d.ts +0 -89
  1487. package/dist/cli/helpers/task-creation.d.ts.map +0 -1
  1488. package/dist/cli/helpers/task-creation.js +0 -139
  1489. package/dist/cli/helpers/task-creation.js.map +0 -1
  1490. package/dist/services/ai-service.d.ts +0 -77
  1491. package/dist/services/ai-service.d.ts.map +0 -1
  1492. package/dist/services/ai-service.js +0 -241
  1493. package/dist/services/ai-service.js.map +0 -1
  1494. package/dist/services/artifact-gathering.d.ts +0 -55
  1495. package/dist/services/artifact-gathering.d.ts.map +0 -1
  1496. package/dist/services/artifact-gathering.js +0 -147
  1497. package/dist/services/artifact-gathering.js.map +0 -1
  1498. package/dist/services/operate/advisors.d.ts +0 -625
  1499. package/dist/services/operate/advisors.d.ts.map +0 -1
  1500. package/dist/services/operate/advisors.js +0 -1545
  1501. package/dist/services/operate/advisors.js.map +0 -1
  1502. package/dist/services/operate/artifact-route-generation.d.ts +0 -111
  1503. package/dist/services/operate/artifact-route-generation.d.ts.map +0 -1
  1504. package/dist/services/operate/artifact-route-generation.js +0 -460
  1505. package/dist/services/operate/artifact-route-generation.js.map +0 -1
  1506. package/dist/services/operate/artifacts.d.ts +0 -66
  1507. package/dist/services/operate/artifacts.d.ts.map +0 -1
  1508. package/dist/services/operate/artifacts.js +0 -336
  1509. package/dist/services/operate/artifacts.js.map +0 -1
  1510. package/dist/services/operate/cadence.d.ts +0 -50
  1511. package/dist/services/operate/cadence.d.ts.map +0 -1
  1512. package/dist/services/operate/cadence.js +0 -56
  1513. package/dist/services/operate/cadence.js.map +0 -1
  1514. package/dist/services/operate/canonical.d.ts +0 -18
  1515. package/dist/services/operate/canonical.d.ts.map +0 -1
  1516. package/dist/services/operate/canonical.js +0 -157
  1517. package/dist/services/operate/canonical.js.map +0 -1
  1518. package/dist/services/operate/citation-resolution.d.ts +0 -161
  1519. package/dist/services/operate/citation-resolution.d.ts.map +0 -1
  1520. package/dist/services/operate/citation-resolution.js +0 -593
  1521. package/dist/services/operate/citation-resolution.js.map +0 -1
  1522. package/dist/services/operate/completion.d.ts +0 -80
  1523. package/dist/services/operate/completion.d.ts.map +0 -1
  1524. package/dist/services/operate/completion.js +0 -279
  1525. package/dist/services/operate/completion.js.map +0 -1
  1526. package/dist/services/operate/config.d.ts +0 -154
  1527. package/dist/services/operate/config.d.ts.map +0 -1
  1528. package/dist/services/operate/config.js +0 -791
  1529. package/dist/services/operate/config.js.map +0 -1
  1530. package/dist/services/operate/consolidation.d.ts +0 -18
  1531. package/dist/services/operate/consolidation.d.ts.map +0 -1
  1532. package/dist/services/operate/consolidation.js +0 -539
  1533. package/dist/services/operate/consolidation.js.map +0 -1
  1534. package/dist/services/operate/context-research.d.ts +0 -84
  1535. package/dist/services/operate/context-research.d.ts.map +0 -1
  1536. package/dist/services/operate/context-research.js +0 -448
  1537. package/dist/services/operate/context-research.js.map +0 -1
  1538. package/dist/services/operate/decision-brief.d.ts +0 -237
  1539. package/dist/services/operate/decision-brief.d.ts.map +0 -1
  1540. package/dist/services/operate/decision-brief.js +0 -368
  1541. package/dist/services/operate/decision-brief.js.map +0 -1
  1542. package/dist/services/operate/doctor.d.ts +0 -85
  1543. package/dist/services/operate/doctor.d.ts.map +0 -1
  1544. package/dist/services/operate/doctor.js +0 -1070
  1545. package/dist/services/operate/doctor.js.map +0 -1
  1546. package/dist/services/operate/drafts.d.ts +0 -48
  1547. package/dist/services/operate/drafts.d.ts.map +0 -1
  1548. package/dist/services/operate/drafts.js +0 -398
  1549. package/dist/services/operate/drafts.js.map +0 -1
  1550. package/dist/services/operate/engine.d.ts +0 -151
  1551. package/dist/services/operate/engine.d.ts.map +0 -1
  1552. package/dist/services/operate/engine.js +0 -1896
  1553. package/dist/services/operate/engine.js.map +0 -1
  1554. package/dist/services/operate/event-store.d.ts +0 -113
  1555. package/dist/services/operate/event-store.d.ts.map +0 -1
  1556. package/dist/services/operate/event-store.js +0 -384
  1557. package/dist/services/operate/event-store.js.map +0 -1
  1558. package/dist/services/operate/evidence-cache.d.ts +0 -41
  1559. package/dist/services/operate/evidence-cache.d.ts.map +0 -1
  1560. package/dist/services/operate/evidence-cache.js +0 -193
  1561. package/dist/services/operate/evidence-cache.js.map +0 -1
  1562. package/dist/services/operate/evidence-import.d.ts +0 -40
  1563. package/dist/services/operate/evidence-import.d.ts.map +0 -1
  1564. package/dist/services/operate/evidence-import.js +0 -340
  1565. package/dist/services/operate/evidence-import.js.map +0 -1
  1566. package/dist/services/operate/evidence.d.ts +0 -21
  1567. package/dist/services/operate/evidence.d.ts.map +0 -1
  1568. package/dist/services/operate/evidence.js +0 -20
  1569. package/dist/services/operate/evidence.js.map +0 -1
  1570. package/dist/services/operate/ids.d.ts +0 -7
  1571. package/dist/services/operate/ids.d.ts.map +0 -1
  1572. package/dist/services/operate/ids.js +0 -23
  1573. package/dist/services/operate/ids.js.map +0 -1
  1574. package/dist/services/operate/index.d.ts +0 -16
  1575. package/dist/services/operate/index.d.ts.map +0 -1
  1576. package/dist/services/operate/index.js +0 -1864
  1577. package/dist/services/operate/index.js.map +0 -1
  1578. package/dist/services/operate/integrity.d.ts +0 -81
  1579. package/dist/services/operate/integrity.d.ts.map +0 -1
  1580. package/dist/services/operate/integrity.js +0 -152
  1581. package/dist/services/operate/integrity.js.map +0 -1
  1582. package/dist/services/operate/interaction/action-service.d.ts +0 -34
  1583. package/dist/services/operate/interaction/action-service.d.ts.map +0 -1
  1584. package/dist/services/operate/interaction/action-service.js +0 -103
  1585. package/dist/services/operate/interaction/action-service.js.map +0 -1
  1586. package/dist/services/operate/interaction/answer-service.d.ts +0 -40
  1587. package/dist/services/operate/interaction/answer-service.d.ts.map +0 -1
  1588. package/dist/services/operate/interaction/answer-service.js +0 -317
  1589. package/dist/services/operate/interaction/answer-service.js.map +0 -1
  1590. package/dist/services/operate/interaction/charter-suggestions.d.ts +0 -29
  1591. package/dist/services/operate/interaction/charter-suggestions.d.ts.map +0 -1
  1592. package/dist/services/operate/interaction/charter-suggestions.js +0 -104
  1593. package/dist/services/operate/interaction/charter-suggestions.js.map +0 -1
  1594. package/dist/services/operate/interaction/confirmation-service.d.ts +0 -30
  1595. package/dist/services/operate/interaction/confirmation-service.d.ts.map +0 -1
  1596. package/dist/services/operate/interaction/confirmation-service.js +0 -78
  1597. package/dist/services/operate/interaction/confirmation-service.js.map +0 -1
  1598. package/dist/services/operate/interaction/initialization-replay.d.ts +0 -9
  1599. package/dist/services/operate/interaction/initialization-replay.d.ts.map +0 -1
  1600. package/dist/services/operate/interaction/initialization-replay.js +0 -64
  1601. package/dist/services/operate/interaction/initialization-replay.js.map +0 -1
  1602. package/dist/services/operate/interaction/question-engine.d.ts +0 -41
  1603. package/dist/services/operate/interaction/question-engine.d.ts.map +0 -1
  1604. package/dist/services/operate/interaction/question-engine.js +0 -434
  1605. package/dist/services/operate/interaction/question-engine.js.map +0 -1
  1606. package/dist/services/operate/interaction/question-registry.d.ts +0 -52
  1607. package/dist/services/operate/interaction/question-registry.d.ts.map +0 -1
  1608. package/dist/services/operate/interaction/question-registry.js +0 -305
  1609. package/dist/services/operate/interaction/question-registry.js.map +0 -1
  1610. package/dist/services/operate/interaction/session-service.d.ts +0 -55
  1611. package/dist/services/operate/interaction/session-service.d.ts.map +0 -1
  1612. package/dist/services/operate/interaction/session-service.js +0 -304
  1613. package/dist/services/operate/interaction/session-service.js.map +0 -1
  1614. package/dist/services/operate/interaction/terminal-renderer.d.ts +0 -19
  1615. package/dist/services/operate/interaction/terminal-renderer.d.ts.map +0 -1
  1616. package/dist/services/operate/interaction/terminal-renderer.js +0 -124
  1617. package/dist/services/operate/interaction/terminal-renderer.js.map +0 -1
  1618. package/dist/services/operate/journal.d.ts +0 -34
  1619. package/dist/services/operate/journal.d.ts.map +0 -1
  1620. package/dist/services/operate/journal.js +0 -235
  1621. package/dist/services/operate/journal.js.map +0 -1
  1622. package/dist/services/operate/legacy-import-service.d.ts +0 -58
  1623. package/dist/services/operate/legacy-import-service.d.ts.map +0 -1
  1624. package/dist/services/operate/legacy-import-service.js +0 -922
  1625. package/dist/services/operate/legacy-import-service.js.map +0 -1
  1626. package/dist/services/operate/lifecycle-driver.d.ts +0 -309
  1627. package/dist/services/operate/lifecycle-driver.d.ts.map +0 -1
  1628. package/dist/services/operate/lifecycle-driver.js +0 -434
  1629. package/dist/services/operate/lifecycle-driver.js.map +0 -1
  1630. package/dist/services/operate/lifecycle.d.ts +0 -96
  1631. package/dist/services/operate/lifecycle.d.ts.map +0 -1
  1632. package/dist/services/operate/lifecycle.js +0 -596
  1633. package/dist/services/operate/lifecycle.js.map +0 -1
  1634. package/dist/services/operate/lock-service.d.ts +0 -37
  1635. package/dist/services/operate/lock-service.d.ts.map +0 -1
  1636. package/dist/services/operate/lock-service.js +0 -215
  1637. package/dist/services/operate/lock-service.js.map +0 -1
  1638. package/dist/services/operate/maintenance.d.ts +0 -139
  1639. package/dist/services/operate/maintenance.d.ts.map +0 -1
  1640. package/dist/services/operate/maintenance.js +0 -2200
  1641. package/dist/services/operate/maintenance.js.map +0 -1
  1642. package/dist/services/operate/migration.d.ts +0 -68
  1643. package/dist/services/operate/migration.d.ts.map +0 -1
  1644. package/dist/services/operate/migration.js +0 -243
  1645. package/dist/services/operate/migration.js.map +0 -1
  1646. package/dist/services/operate/mission-dispatch.d.ts +0 -271
  1647. package/dist/services/operate/mission-dispatch.d.ts.map +0 -1
  1648. package/dist/services/operate/mission-dispatch.js +0 -590
  1649. package/dist/services/operate/mission-dispatch.js.map +0 -1
  1650. package/dist/services/operate/outcomes.d.ts +0 -48
  1651. package/dist/services/operate/outcomes.d.ts.map +0 -1
  1652. package/dist/services/operate/outcomes.js +0 -312
  1653. package/dist/services/operate/outcomes.js.map +0 -1
  1654. package/dist/services/operate/pipeline-handoff.d.ts +0 -138
  1655. package/dist/services/operate/pipeline-handoff.d.ts.map +0 -1
  1656. package/dist/services/operate/pipeline-handoff.js +0 -175
  1657. package/dist/services/operate/pipeline-handoff.js.map +0 -1
  1658. package/dist/services/operate/profile-migration.d.ts +0 -69
  1659. package/dist/services/operate/profile-migration.d.ts.map +0 -1
  1660. package/dist/services/operate/profile-migration.js +0 -462
  1661. package/dist/services/operate/profile-migration.js.map +0 -1
  1662. package/dist/services/operate/projection-persistence.d.ts +0 -126
  1663. package/dist/services/operate/projection-persistence.d.ts.map +0 -1
  1664. package/dist/services/operate/projection-persistence.js +0 -752
  1665. package/dist/services/operate/projection-persistence.js.map +0 -1
  1666. package/dist/services/operate/projection.d.ts +0 -37
  1667. package/dist/services/operate/projection.d.ts.map +0 -1
  1668. package/dist/services/operate/projection.js +0 -209
  1669. package/dist/services/operate/projection.js.map +0 -1
  1670. package/dist/services/operate/protocol.d.ts +0 -86
  1671. package/dist/services/operate/protocol.d.ts.map +0 -1
  1672. package/dist/services/operate/protocol.js +0 -76
  1673. package/dist/services/operate/protocol.js.map +0 -1
  1674. package/dist/services/operate/read-only-providers.d.ts +0 -76
  1675. package/dist/services/operate/read-only-providers.d.ts.map +0 -1
  1676. package/dist/services/operate/read-only-providers.js +0 -421
  1677. package/dist/services/operate/read-only-providers.js.map +0 -1
  1678. package/dist/services/operate/redaction.d.ts +0 -74
  1679. package/dist/services/operate/redaction.d.ts.map +0 -1
  1680. package/dist/services/operate/redaction.js +0 -406
  1681. package/dist/services/operate/redaction.js.map +0 -1
  1682. package/dist/services/operate/reducer.d.ts +0 -10
  1683. package/dist/services/operate/reducer.d.ts.map +0 -1
  1684. package/dist/services/operate/reducer.js +0 -11
  1685. package/dist/services/operate/reducer.js.map +0 -1
  1686. package/dist/services/operate/report-html.d.ts +0 -32
  1687. package/dist/services/operate/report-html.d.ts.map +0 -1
  1688. package/dist/services/operate/report-html.js +0 -289
  1689. package/dist/services/operate/report-html.js.map +0 -1
  1690. package/dist/services/operate/reports.d.ts +0 -72
  1691. package/dist/services/operate/reports.d.ts.map +0 -1
  1692. package/dist/services/operate/reports.js +0 -481
  1693. package/dist/services/operate/reports.js.map +0 -1
  1694. package/dist/services/operate/routes.d.ts +0 -133
  1695. package/dist/services/operate/routes.d.ts.map +0 -1
  1696. package/dist/services/operate/routes.js +0 -1577
  1697. package/dist/services/operate/routes.js.map +0 -1
  1698. package/dist/services/operate/scratch.d.ts +0 -81
  1699. package/dist/services/operate/scratch.d.ts.map +0 -1
  1700. package/dist/services/operate/scratch.js +0 -190
  1701. package/dist/services/operate/scratch.js.map +0 -1
  1702. package/dist/services/operate/shipment-observer.d.ts +0 -14
  1703. package/dist/services/operate/shipment-observer.d.ts.map +0 -1
  1704. package/dist/services/operate/shipment-observer.js +0 -320
  1705. package/dist/services/operate/shipment-observer.js.map +0 -1
  1706. package/dist/services/operate/stalled-item-service.d.ts +0 -18
  1707. package/dist/services/operate/stalled-item-service.d.ts.map +0 -1
  1708. package/dist/services/operate/stalled-item-service.js +0 -121
  1709. package/dist/services/operate/stalled-item-service.js.map +0 -1
  1710. package/dist/services/operate/subprocess-env.d.ts +0 -4
  1711. package/dist/services/operate/subprocess-env.d.ts.map +0 -1
  1712. package/dist/services/operate/subprocess-env.js +0 -45
  1713. package/dist/services/operate/subprocess-env.js.map +0 -1
  1714. package/dist/services/operate/types.d.ts +0 -1064
  1715. package/dist/services/operate/types.d.ts.map +0 -1
  1716. package/dist/services/operate/types.js +0 -27
  1717. package/dist/services/operate/types.js.map +0 -1
  1718. package/dist/services/operate/workspace.d.ts +0 -76
  1719. package/dist/services/operate/workspace.d.ts.map +0 -1
  1720. package/dist/services/operate/workspace.js +0 -350
  1721. package/dist/services/operate/workspace.js.map +0 -1
  1722. package/dist/services/revise-service.d.ts +0 -115
  1723. package/dist/services/revise-service.d.ts.map +0 -1
  1724. package/dist/services/revise-service.js +0 -294
  1725. package/dist/services/revise-service.js.map +0 -1
  1726. package/dist/templates/rules/claude/planr-pipeline.md.hbs +0 -69
  1727. package/dist/templates/rules/codex/_pipeline-section.md.hbs +0 -154
  1728. package/dist/templates/rules/cursor/agents/backend-agent.md +0 -299
  1729. package/dist/templates/rules/cursor/agents/db-agent.md +0 -163
  1730. package/dist/templates/rules/cursor/agents/designer-agent.md +0 -219
  1731. package/dist/templates/rules/cursor/agents/devops-agent.md +0 -197
  1732. package/dist/templates/rules/cursor/agents/doc-gen-agent.md +0 -203
  1733. package/dist/templates/rules/cursor/agents/frontend-agent.md +0 -220
  1734. package/dist/templates/rules/cursor/agents/qa-agent.md +0 -170
  1735. package/dist/templates/rules/cursor/agents/specification-agent.md +0 -282
  1736. package/dist/templates/rules/cursor/planr-pipeline-plan.mdc.hbs +0 -196
  1737. package/dist/templates/rules/cursor/planr-pipeline-ship.mdc.hbs +0 -246
  1738. package/dist/templates/rules/cursor/planr-pipeline.mdc.hbs +0 -134
@@ -1,1896 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { mkdir, readFile } from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { OPENPLANR_VERSION } from '../../utils/package-version.js';
5
- import { loadConfig } from '../config-service.js';
6
- import { advisorFailureGaps, buildAdvisorOperatingContext, configuredAdvisorProviderPolicy, createConfiguredStructuredAdapter, createOfflineAdvisorAdapter, DEFAULT_OPERATING_DISPATCH_CONCURRENCY, dispatchOperatingAdvisors, ensureOperatingProviderConsent, } from './advisors.js';
7
- import { recordOperatingCadenceRun } from './cadence.js';
8
- import { canonicalDigest, canonicalize } from './canonical.js';
9
- import { citationComponentsFromWorkspace, } from './citation-resolution.js';
10
- import { operatingProjectKey, validateOperatingConfiguration } from './config.js';
11
- import { consolidateOperatingResults } from './consolidation.js';
12
- import { chairBoardGapLines, classifyChairRoleContributions, } from './decision-brief.js';
13
- import { OperatingEventStore, toPersistedDataGap, } from './event-store.js';
14
- import { evidenceProjectionSources } from './evidence.js';
15
- import { OperatingEvidenceCache } from './evidence-cache.js';
16
- import { nextCycleId } from './ids.js';
17
- import { buildOperatingIntegritySummary, } from './integrity.js';
18
- import { enforceRecordedProposalCitations } from './interaction/action-service.js';
19
- import { applyJournalTransaction, prepareJournalTransaction, readJournal, rollbackJournalTransaction, } from './journal.js';
20
- import { reconcileOperatingDecisionDeadlines } from './lifecycle.js';
21
- import { AdvisorLifecycleDriver, } from './lifecycle-driver.js';
22
- import { withOperatingLock } from './lock-service.js';
23
- import { reconcileOperatingOutcomeFiles } from './outcomes.js';
24
- import { persistOperatingProjections } from './projection-persistence.js';
25
- import { assertOperatingArtifact, loadOperatingProtocol } from './protocol.js';
26
- import { maximumSensitivity } from './redaction.js';
27
- import { createOperatingRoutePlan, nextOperatingSpecOrdinal } from './routes.js';
28
- import { OPERATE_MISSION_PROTOCOL_VERSION, OPERATE_PROTOCOL_VERSION, OPERATE_SCHEMA_VERSION, OperateError, } from './types.js';
29
- import { assertOperatingProject, readOperatingWorkspaceRoots, refreshOperatingWorkspaceManifest, resolveOperatingPaths, } from './workspace.js';
30
- function normalizeFocus(focus) {
31
- const supported = new Set(['strategy', 'product', 'growth', 'operations', 'technology', 'all']);
32
- const normalized = [...new Set((focus ?? []).map(String))]
33
- .filter((value) => supported.has(value))
34
- .sort();
35
- return normalized.length > 0 ? normalized : ['all'];
36
- }
37
- function loadJson(target) {
38
- return readFile(target, 'utf8').then((raw) => JSON.parse(raw));
39
- }
40
- async function snapshotWorkspace(projectRoot, localRoot) {
41
- return refreshOperatingWorkspaceManifest(projectRoot, { localRoot });
42
- }
43
- async function readPreferences(projectRoot, localRoot) {
44
- const paths = resolveOperatingPaths(projectRoot, { localRoot });
45
- return loadJson(path.join(paths.localRoot, 'preferences.json')).catch(() => ({
46
- runtime: 'auto',
47
- timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
48
- sensitivityCeiling: 'internal',
49
- evidenceTtlMs: 7 * 24 * 60 * 60 * 1_000,
50
- enabledSources: [],
51
- }));
52
- }
53
- function activeCycle(state) {
54
- return (state.cycles.find((cycle) => !['closed', 'cancelled', 'failed'].includes(cycle.state)) ?? null);
55
- }
56
- function maximumOrdinal(records, prefix) {
57
- return records.reduce((maximum, record) => {
58
- const match = String(record.id ?? '').match(new RegExp(`^${prefix}-(\\d+)$`));
59
- return Math.max(maximum, match ? Number(match[1]) : 0);
60
- }, 0);
61
- }
62
- async function remapReadinessGaps(readiness, state) {
63
- let ordinal = maximumOrdinal(state.dataGaps, 'GAP');
64
- const remapped = {
65
- ...readiness,
66
- roles: readiness.roles.map((role) => ({
67
- ...role,
68
- gapId: role.gapId
69
- ? (state.dataGaps.find((gap) => gap.cycleId === readiness.cycleId &&
70
- !['closed', 'superseded'].includes(String(gap.status)) &&
71
- Array.isArray(gap.affectedRoles) &&
72
- gap.affectedRoles.includes(role.roleId))?.id ?? `GAP-${String(++ordinal).padStart(3, '0')}`)
73
- : null,
74
- })),
75
- };
76
- return assertOperatingArtifact('operating-evidence-readiness', remapped);
77
- }
78
- function readinessGaps(readiness, decisionOwner, now) {
79
- return readiness.roles
80
- .filter((role) => role.gapId)
81
- .map((role) => ({
82
- kind: 'operating-data-gap',
83
- schemaVersion: OPERATE_SCHEMA_VERSION,
84
- protocolVersion: OPERATE_PROTOCOL_VERSION,
85
- id: role.gapId,
86
- cycleId: readiness.cycleId,
87
- question: `What evidence is required for ${role.roleId}?`,
88
- reason: role.missingEvidence.join('; ') || 'Minimum evidence was not available.',
89
- unblocks: [],
90
- affectedRoles: [role.roleId],
91
- status: 'open',
92
- owner: decisionOwner,
93
- evidenceRefs: [...role.evidenceRefs],
94
- createdAt: now,
95
- updatedAt: now,
96
- }));
97
- }
98
- // Retained callerless: this fed the collector's `requiredEvidenceRefs` input,
99
- // which the pinned-revision seed no longer takes. The collector and its dedicated
100
- // feeders are retired wholesale in T-009; nothing is deleted here.
101
- // biome-ignore lint/correctness/noUnusedVariables: retained pending collector retirement (T-009)
102
- function requiredOpenEvidenceRefs(state) {
103
- const records = [
104
- ...state.findings.filter((finding) => !['done', 'rejected', 'superseded'].includes(String(finding.status))),
105
- ...state.decisions.filter((decision) => !['closed', 'superseded'].includes(String(decision.status))),
106
- ...state.outcomes.filter((outcome) => ['pending', 'observing', 'inconclusive'].includes(String(outcome.status))),
107
- ];
108
- return [
109
- ...new Set(records.flatMap((record) => Array.isArray(record.evidenceRefs)
110
- ? record.evidenceRefs.filter((reference) => typeof reference === 'string')
111
- : [])),
112
- ].sort();
113
- }
114
- /**
115
- * The Chair's grounded input assembled from the board (FR13). Each recorded role
116
- * contributes its real analysis as synthetic advisor-result evidence, labelled
117
- * with its six-way outcome. Citation-rejected proposals are EXCLUDED from the
118
- * grounded input (never silently dropped — they are named in the gap list), so a
119
- * proposal Chair could not have grounded can never reach its synthesis. Roles
120
- * with no valid analysis (not-evaluated, failed, still-running, all-rejected)
121
- * contribute no proposal item: their absence is surfaced as a gap, never as a
122
- * fabricated conclusion.
123
- */
124
- export function buildChairEvidence(evidence, results, now, context = {}) {
125
- const contributions = classifyChairRoleContributions(results, context);
126
- const outcomeByRole = new Map(contributions.map((entry) => [entry.roleId, entry.outcome]));
127
- const excludedByRole = new Map(contributions.map((entry) => [entry.roleId, new Set(entry.excludedProposalKeys)]));
128
- const evidenceById = new Map(evidence.items.map((item) => [item.id, item]));
129
- const synthetic = results.flatMap((result) => {
130
- const excluded = excludedByRole.get(result.roleId) ?? new Set();
131
- // Grounded proposals only: a citation-rejected proposal is excluded here so it
132
- // never becomes Chair-citable evidence, while `chairBoardGapLines` names it.
133
- const groundedProposals = result.proposals.filter((proposal) => !excluded.has(proposal.proposalKey));
134
- const evidenceRefs = [
135
- ...new Set(groundedProposals.flatMap((proposal) => proposal.evidenceRefs)),
136
- ].sort();
137
- const missingRefs = evidenceRefs.filter((reference) => !evidenceById.has(reference));
138
- if (missingRefs.length > 0) {
139
- throw new OperateError('E_OPERATE_EVIDENCE_REJECTED', `${result.roleId} advisor result cites unavailable evidence: ${missingRefs.join(', ')}.`);
140
- }
141
- const sensitivity = maximumSensitivity([
142
- 'internal',
143
- ...evidenceRefs.map((reference) => evidenceById.get(reference)?.sensitivity ?? 'public'),
144
- ]);
145
- const bodies = [
146
- {
147
- id: `EVD-advisor-results-${result.roleId}-context`,
148
- location: `${result.roleId}/context`,
149
- body: {
150
- roleId: result.roleId,
151
- outcome: outcomeByRole.get(result.roleId) ?? result.outcome,
152
- gaps: [...new Set(result.gaps)].sort(),
153
- conflicts: [...new Set(result.conflicts)].sort(),
154
- ...(excluded.size > 0 ? { citationRejectedProposals: [...excluded].sort() } : {}),
155
- },
156
- },
157
- ...groundedProposals.map((proposal) => ({
158
- id: `EVD-advisor-results-${result.roleId}-${proposal.proposalKey}`,
159
- location: `${result.roleId}/proposals/${proposal.proposalKey}`,
160
- body: {
161
- roleId: result.roleId,
162
- proposal: structuredClone(proposal),
163
- },
164
- })),
165
- ];
166
- return bodies.map(({ id, location, body }) => ({
167
- id,
168
- source: 'advisor-results',
169
- location,
170
- digest: canonicalDigest(body),
171
- collectedAt: now,
172
- observedFrom: now,
173
- observedTo: now,
174
- freshness: 'fresh',
175
- sensitivity,
176
- claimTypes: ['verified-advisor-result'],
177
- summary: canonicalize(body),
178
- }));
179
- });
180
- return {
181
- ...evidence,
182
- items: [...evidence.items, ...synthetic],
183
- fingerprint: canonicalDigest({
184
- source: evidence.fingerprint,
185
- advisors: synthetic
186
- .map(({ id, digest, sensitivity }) => ({ id, digest, sensitivity }))
187
- .sort((left, right) => left.id.localeCompare(right.id)),
188
- }),
189
- };
190
- }
191
- /**
192
- * Assemble the Chair's input from a possibly-partial board (FR13). This is the
193
- * single entry point that ties the grounded evidence to the honest per-role
194
- * ledger and the named-gap list: one missing perspective can never destroy an
195
- * otherwise-useful board, and the Chair is handed a structural record of what did
196
- * NOT evaluate rather than a silent absence it might synthesize around.
197
- */
198
- export function assembleChairBoardInput(evidence, results, now, context = {}) {
199
- const contributions = classifyChairRoleContributions(results, context);
200
- return {
201
- evidence: buildChairEvidence(evidence, results, now, context),
202
- contributions,
203
- gaps: chairBoardGapLines(contributions),
204
- };
205
- }
206
- /**
207
- * FR1/FR2 (isolation rebind): the cycle's pinned-revision evidence seed. Evidence
208
- * is an OUTPUT now, so a fresh cycle no longer collects a body-bearing snapshot
209
- * before anyone has investigated; it seeds an empty evidence-of-record whose
210
- * fingerprint binds the cycle to its control-repository pinned revision. This
211
- * seed is what the adapter isolation binds to (`persistedAdapterEvidence`'s
212
- * fingerprint === the prepared session's `evidenceDigest`), so a tampered or
213
- * revision-mismatched session still fails closed with `E_OPERATE_ADVISOR_ISOLATION`
214
- * — the guarantee is preserved, only its input is the pinned revision rather than
215
- * a collected-evidence digest. Nothing is guessed, budgeted, or packed.
216
- */
217
- async function buildPinnedRevisionEvidenceSeed(input) {
218
- return assertOperatingArtifact('operating-evidence', {
219
- kind: 'operating-evidence',
220
- schemaVersion: OPERATE_SCHEMA_VERSION,
221
- protocolVersion: OPERATE_PROTOCOL_VERSION,
222
- cycleId: input.cycleId,
223
- fingerprint: canonicalDigest({
224
- cycleId: input.cycleId,
225
- pinnedRevision: input.pinnedRevision,
226
- }),
227
- collectedAt: input.collectedAt,
228
- truncated: false,
229
- items: [],
230
- sources: [],
231
- warnings: [],
232
- });
233
- }
234
- /**
235
- * FR2: dispatch is no longer pre-gated on collected evidence — every enabled role
236
- * is dispatched with a mandate and post-gated on what its response actually cites.
237
- * This builds the "all roles runnable" readiness the dispatch consumes, replacing
238
- * the collector-era evidence-readiness evaluation.
239
- */
240
- async function buildDispatchReadiness(input) {
241
- const hasPinnedRevision = !/^0+$/.test(input.pinnedRevision);
242
- return assertOperatingArtifact('operating-evidence-readiness', {
243
- kind: 'operating-evidence-readiness',
244
- schemaVersion: OPERATE_SCHEMA_VERSION,
245
- protocolVersion: OPERATE_PROTOCOL_VERSION,
246
- cycleId: input.cycleId,
247
- inputDigest: canonicalDigest({ cycleId: input.cycleId, roles: [...input.roles].sort() }),
248
- evaluatedAt: input.now.toISOString(),
249
- roles: input.roles.map((roleId, index) => ({
250
- roleId,
251
- readiness: 'ready',
252
- requirements: [
253
- {
254
- source: 'mandate',
255
- claimTypes: ['resolvable-citation-required'],
256
- minimumItems: 1,
257
- observedItems: hasPinnedRevision ? 1 : 0,
258
- maxAgeHours: 8760,
259
- oldestAgeHours: hasPinnedRevision ? 0 : null,
260
- observationWindow: 'current-cycle',
261
- sensitivityCeiling: input.sensitivityCeiling,
262
- satisfied: hasPinnedRevision,
263
- },
264
- ],
265
- missingEvidence: hasPinnedRevision
266
- ? []
267
- : ['mandate:resolvable-citation-required (0/1; no pinned revision)'],
268
- evidenceRefs: [],
269
- modelCallAllowed: hasPinnedRevision,
270
- gapId: hasPinnedRevision ? null : `GAP-${String(index + 1).padStart(3, '0')}`,
271
- })),
272
- });
273
- }
274
- /**
275
- * FR2 (evidence-as-output): assemble the cycle's evidence-of-record for
276
- * consolidation from the resolved-citation snapshots the universal gate minted.
277
- * Every evidenceRef a gated proposal carries was snapshotted to machine-local
278
- * evidence (`putCitationSnapshot`); this reads each back (`getCitationSnapshot`)
279
- * so downstream confidence/sensitivity/freshness scoring resolves against what
280
- * was actually cited and verified rather than a pre-collected guess. A ref whose
281
- * snapshot is unreadable still materializes a minimal item so consolidation never
282
- * rejects a legitimately-minted reference.
283
- */
284
- async function assembleCitationEvidence(input) {
285
- const refs = [
286
- ...new Set(input.roleResults.flatMap((result) => result.proposals.flatMap((proposal) => proposal.evidenceRefs))),
287
- ].sort();
288
- const items = [];
289
- for (const ref of refs) {
290
- const snapshot = await input.cache.getCitationSnapshot(ref);
291
- items.push({
292
- id: ref,
293
- source: 'citation',
294
- location: snapshot?.sourceLocation ?? ref,
295
- digest: canonicalDigest(snapshot?.content ?? ref),
296
- collectedAt: input.now,
297
- observedFrom: null,
298
- observedTo: null,
299
- freshness: 'fresh',
300
- sensitivity: snapshot?.sensitivity ?? 'internal',
301
- claimTypes: ['verified-citation'],
302
- ...(snapshot ? { summary: snapshot.content.slice(0, 512) } : {}),
303
- });
304
- }
305
- return assertOperatingArtifact('operating-evidence', {
306
- kind: 'operating-evidence',
307
- schemaVersion: OPERATE_SCHEMA_VERSION,
308
- protocolVersion: OPERATE_PROTOCOL_VERSION,
309
- cycleId: input.cycleId,
310
- fingerprint: canonicalDigest({
311
- source: input.baseFingerprint,
312
- citations: items.map((item) => ({ id: item.id, digest: item.digest })),
313
- }),
314
- collectedAt: input.now,
315
- truncated: false,
316
- items,
317
- sources: [],
318
- warnings: [],
319
- });
320
- }
321
- const SENSITIVE_ROUTE_LANGUAGE = /\b(?:payment|billing|security|privacy|legal|tenant|isolation|destructive|delete|purge|credential|secret)\b/i;
322
- function containsSensitiveRouteProposal(results) {
323
- return results.some((result) => result.proposals.some((proposal) => SENSITIVE_ROUTE_LANGUAGE.test(`${proposal.type} ${proposal.title} ${proposal.problem} ${proposal.proposal}`)));
324
- }
325
- async function createCycleManifest(input) {
326
- return assertOperatingArtifact('operating-cycle-manifest', {
327
- kind: 'operating-cycle-manifest',
328
- schemaVersion: OPERATE_SCHEMA_VERSION,
329
- protocolVersion: OPERATE_PROTOCOL_VERSION,
330
- id: input.id,
331
- state: input.state,
332
- depth: input.depth,
333
- focus: input.focus,
334
- inputDigest: input.inputDigest,
335
- enabledRoles: [...input.enabledRoles],
336
- enabledProviders: [...input.enabledProviders],
337
- createdAt: input.now,
338
- updatedAt: input.now,
339
- producer: {
340
- product: 'openplanr',
341
- version: OPENPLANR_VERSION,
342
- runtime: input.runtime,
343
- },
344
- });
345
- }
346
- async function appendLocked(store, lock, head, input) {
347
- const event = await store.append({ ...input, expectedHead: head.hash });
348
- const next = { sequence: event.sequence, hash: event.eventHash };
349
- await lock.advanceEventHead(head, next);
350
- return { event, head: next };
351
- }
352
- function remapConsolidation(state, findings, parked, decisions, gaps) {
353
- let findingOrdinal = maximumOrdinal(state.findings, 'FND');
354
- let decisionOrdinal = maximumOrdinal(state.decisions, 'DEC');
355
- let gapOrdinal = maximumOrdinal(state.dataGaps, 'GAP');
356
- const findingIds = new Map();
357
- for (const finding of [...findings, ...parked]) {
358
- findingIds.set(finding.id, `FND-${String(++findingOrdinal).padStart(3, '0')}`);
359
- }
360
- const remapFinding = (finding) => ({
361
- ...finding,
362
- id: findingIds.get(finding.id),
363
- dependsOn: finding.dependsOn.map((dependency) => findingIds.get(dependency) ?? dependency),
364
- });
365
- return {
366
- findings: findings.map(remapFinding),
367
- parked: parked.map(remapFinding),
368
- decisions: decisions.map((decision) => ({
369
- ...decision,
370
- id: `DEC-${String(++decisionOrdinal).padStart(3, '0')}`,
371
- })),
372
- gaps: gaps.map((gap) => ({
373
- ...gap,
374
- id: `GAP-${String(++gapOrdinal).padStart(3, '0')}`,
375
- })),
376
- };
377
- }
378
- function findingIdentity(value) {
379
- const finding = value;
380
- if (typeof finding.fingerprint === 'string' &&
381
- /^sha256:[a-f0-9]{64}$/.test(finding.fingerprint)) {
382
- return finding.fingerprint;
383
- }
384
- return canonicalDigest({
385
- title: String(finding.title ?? '')
386
- .trim()
387
- .toLowerCase(),
388
- lane: String(finding.lane ?? ''),
389
- owner: String(finding.owner ?? ''),
390
- });
391
- }
392
- function suppressRepeatedFindings(state, findings, cycleId) {
393
- const priorByIdentity = new Map(state.findings
394
- .filter((finding) => finding.cycleId !== cycleId)
395
- .map((finding) => [findingIdentity(finding), finding]));
396
- let suppressed = 0;
397
- const retained = [];
398
- for (const finding of findings) {
399
- const prior = priorByIdentity.get(findingIdentity(finding));
400
- if (!prior) {
401
- retained.push(finding);
402
- continue;
403
- }
404
- const priorEvidence = Array.isArray(prior.evidenceRefs)
405
- ? [...prior.evidenceRefs].sort()
406
- : [];
407
- const currentEvidence = [...finding.evidenceRefs].sort();
408
- if (canonicalDigest(priorEvidence) === canonicalDigest(currentEvidence)) {
409
- suppressed += 1;
410
- continue;
411
- }
412
- retained.push({
413
- ...finding,
414
- dependsOn: [...new Set([...finding.dependsOn, String(prior.id)])].sort(),
415
- });
416
- }
417
- return { findings: retained, suppressed };
418
- }
419
- function committedCycleFindings(events, cycleId) {
420
- return events
421
- .filter((event) => event.type === 'finding.proposed' &&
422
- event.cycleId === cycleId &&
423
- event.payload.record &&
424
- typeof event.payload.record === 'object')
425
- .map((event) => structuredClone(event.payload.record));
426
- }
427
- function reconcileCycleFindings(events, cycleId, findings) {
428
- const existing = committedCycleFindings(events, cycleId);
429
- const existingByIdentity = new Map(existing.map((finding) => [findingIdentity(finding), finding]));
430
- return findings.map((finding) => {
431
- const prior = existingByIdentity.get(findingIdentity(finding));
432
- if (!prior)
433
- return finding;
434
- return canonicalDigest([...prior.evidenceRefs].sort()) ===
435
- canonicalDigest([...finding.evidenceRefs].sort())
436
- ? prior
437
- : finding;
438
- });
439
- }
440
- function recordContent(value) {
441
- return structuredClone(value);
442
- }
443
- async function persistedCycleEvidence(store, events, cycleId) {
444
- const event = [...events]
445
- .reverse()
446
- .find((candidate) => candidate.cycleId === cycleId &&
447
- candidate.type === 'evidence.collected' &&
448
- typeof candidate.payload.recordDigest === 'string');
449
- if (!event)
450
- return null;
451
- const record = await store.readRecord(event.payload.recordDigest);
452
- if (record.recordType !== 'evidence-metadata') {
453
- throw new OperateError('E_OPERATE_STATE_INVALID', `Cycle ${cycleId} evidence event references a ${record.recordType} record.`);
454
- }
455
- return assertOperatingArtifact('operating-evidence', record.content);
456
- }
457
- async function persistedCycleRoleResults(store, events, cycleId) {
458
- const byRole = new Map();
459
- for (const event of events) {
460
- if (event.cycleId !== cycleId ||
461
- event.type !== 'advisory.recorded' ||
462
- typeof event.payload.recordDigest !== 'string') {
463
- continue;
464
- }
465
- const record = await store.readRecord(event.payload.recordDigest);
466
- if (record.recordType !== 'advisor-result') {
467
- throw new OperateError('E_OPERATE_STATE_INVALID', `Cycle ${cycleId} advisory event references a ${record.recordType} record.`);
468
- }
469
- const result = await assertOperatingArtifact('operating-role-result', record.content);
470
- (await loadOperatingProtocol()).validateOperatingRoleResultDigest(result);
471
- if (result.cycleId !== cycleId) {
472
- throw new OperateError('E_OPERATE_STATE_INVALID', `Advisor result ${result.roleId} belongs to another cycle.`);
473
- }
474
- byRole.set(result.roleId, result);
475
- }
476
- return [...byRole.values()].sort((left, right) => left.roleId.localeCompare(right.roleId));
477
- }
478
- /**
479
- * Full evidence → advisors → deterministic consolidation lifecycle. All
480
- * mutations are serialized under the process-identity lease; preview and
481
- * dry-run never enter the mutating branch.
482
- */
483
- /**
484
- * The single governed gap opened for a role whose citation-bearing response
485
- * grounded zero evidence (FR2). It names the role and its empty grounding so the
486
- * integrity surface can render the role `not_evaluated` with a real reason rather
487
- * than a silent absence or a "quiet" that pretends the lens evaluated.
488
- */
489
- function roleEmptyGroundingGap(roleId, context, now) {
490
- const createdAt = now.toISOString();
491
- return {
492
- kind: 'operating-data-gap',
493
- schemaVersion: OPERATE_SCHEMA_VERSION,
494
- protocolVersion: OPERATE_MISSION_PROTOCOL_VERSION,
495
- id: `GAP-${canonicalDigest({
496
- roleId,
497
- cycleId: context.cycleId,
498
- reason: 'empty-grounding',
499
- }).slice('sha256:'.length)}`,
500
- cycleId: context.cycleId,
501
- category: 'missing-evidence',
502
- question: `What evidence can ${roleId} cite? Its response resolved zero citations to evidence.`,
503
- reason: `Every citation ${roleId} returned failed to resolve at the pinned revision, so the role ` +
504
- 'grounded no evidence and is recorded not_evaluated instead of dispatching a proposal on an ' +
505
- 'empty base.',
506
- unblocks: [],
507
- affectedRoles: [roleId],
508
- status: 'open',
509
- owner: context.owner && context.owner.length > 0 ? context.owner : 'chair',
510
- evidenceRefs: [],
511
- createdAt,
512
- updatedAt: createdAt,
513
- };
514
- }
515
- /**
516
- * FR2 universal citation gate — the PRIMARY, unconditional mechanism, run on
517
- * every dispatch path and every evidence source (no `bearing.length === 0`
518
- * bypass remains, so it is entered even for a citation-free result).
519
- *
520
- * Every recorded proposal that carries citations is resolved against the cycle's
521
- * pinned revision through `enforceRecordedProposalCitations`. A proposal with ANY
522
- * unresolvable citation is DROPPED — it never reaches `consolidateOperatingResults`
523
- * — and exactly one `unresolvable-citation` gap is opened in its place. A proposal
524
- * whose citations all resolve keeps its minted evidence IDs.
525
- *
526
- * On top of that per-proposal gate, the FR2 role-level rule: a role result whose
527
- * proposals carried citations but whose accepted citations resolve to ZERO
528
- * evidence IDs is `not_evaluated` — every one of its proposals is dropped, its id
529
- * is returned in `notEvaluatedRoleIds`, and one governed `missing-evidence` gap
530
- * naming the role and its empty grounding is opened. This replaces SPEC-003's
531
- * mission-only, repository-only starvation gate with one rule that holds whatever
532
- * the dispatch path or evidence source. A v1.2 pack result (evidenceRefs, no
533
- * citations) carries no citation-bearing proposal, so it is never demoted — the
534
- * pack path stays functional until T-003 removes it.
535
- */
536
- export async function gateRecordedProposalCitations(input) {
537
- const bearing = [];
538
- const citationBearingProposalKeys = new Set();
539
- for (const result of input.roleResults) {
540
- for (const proposal of result.proposals) {
541
- const citations = proposal.citations;
542
- if (Array.isArray(citations) && citations.length > 0) {
543
- bearing.push({ proposalKey: proposal.proposalKey, citations });
544
- citationBearingProposalKeys.add(proposal.proposalKey);
545
- }
546
- }
547
- }
548
- const enforcement = await enforceRecordedProposalCitations(bearing, input.context);
549
- const rejectedKeys = new Set(enforcement.rejected.map((entry) => entry.proposalKey));
550
- const evidenceByKey = new Map(enforcement.accepted.map((entry) => [entry.proposal.proposalKey, entry.evidenceRefs]));
551
- // FR13 (T-017): name the role whose proposal each unresolvable-citation gap
552
- // rejected, so the integrity summary links the citation rejection to that role.
553
- // Without it the gap carries no `affectedRoles`, the Chair board cannot tell a
554
- // fully-rejected role's `citation-rejected` outcome apart from a plain
555
- // not-evaluated absence, and the integrity report's "Affected:" line is blank.
556
- const roleByProposalKey = new Map();
557
- for (const result of input.roleResults) {
558
- for (const proposal of result.proposals) {
559
- roleByProposalKey.set(proposal.proposalKey, result.roleId);
560
- }
561
- }
562
- const rolesByGapId = new Map();
563
- for (const entry of enforcement.rejected) {
564
- const roleId = roleByProposalKey.get(entry.proposalKey);
565
- if (!roleId)
566
- continue;
567
- const roles = rolesByGapId.get(entry.gapId) ?? new Set();
568
- roles.add(roleId);
569
- rolesByGapId.set(entry.gapId, roles);
570
- }
571
- const gaps = enforcement.gaps.map((gap) => {
572
- const roles = rolesByGapId.get(String(gap.id));
573
- if (!roles || roles.size === 0)
574
- return gap;
575
- const record = gap;
576
- const existing = Array.isArray(record.affectedRoles)
577
- ? record.affectedRoles
578
- : [];
579
- return {
580
- ...record,
581
- affectedRoles: [...new Set([...existing, ...roles])].sort(),
582
- };
583
- });
584
- const notEvaluatedRoleIds = [];
585
- const now = input.context.now ?? new Date();
586
- const roleResults = await Promise.all(input.roleResults.map(async (result) => {
587
- const gated = {
588
- ...result,
589
- proposals: result.proposals
590
- .filter((proposal) => !rejectedKeys.has(proposal.proposalKey))
591
- .map((proposal) => {
592
- const minted = evidenceByKey.get(proposal.proposalKey);
593
- return minted && minted.length > 0
594
- ? {
595
- ...proposal,
596
- evidenceRefs: [...new Set([...proposal.evidenceRefs, ...minted])].sort(),
597
- }
598
- : proposal;
599
- }),
600
- };
601
- // FR2 role-level rule: a role whose proposals were citation-bearing but
602
- // grounded ZERO evidence after resolution is not_evaluated. Drop its
603
- // surviving (evidence-free) proposals and open one governed gap.
604
- const wasCitationBearing = result.proposals.some((proposal) => citationBearingProposalKeys.has(proposal.proposalKey));
605
- const mintedAny = gated.proposals.some((proposal) => proposal.evidenceRefs.length > 0);
606
- if (wasCitationBearing && !mintedAny) {
607
- notEvaluatedRoleIds.push(result.roleId);
608
- gaps.push(await assertOperatingArtifact('operating-data-gap', roleEmptyGroundingGap(result.roleId, input.context, now)));
609
- return { ...gated, proposals: [] };
610
- }
611
- return gated;
612
- }));
613
- return { roleResults, gaps, notEvaluatedRoleIds };
614
- }
615
- /**
616
- * FR3/FR13 (SPEC-005 T-015): mint the governed data gap persisted for a lens the
617
- * lifecycle driver terminated `not_evaluated` — a stalled lens that exhausted its
618
- * bounded retry budget. It carries the driver's REAL governed reason and links
619
- * the role so `status`/`report` render a governed gap rather than a silent
620
- * absence. It is shaped as a v1.2.0 `operating-data-gap` (no `category`) so it
621
- * validates as a `data-gap` record, exactly as `readinessGaps` gaps do; the
622
- * Chair board's `not-evaluated` CLASSIFICATION is sourced separately, directly
623
- * from the driver's in-memory governed gaps, so it needs no v1.3 category here.
624
- * The digest-derived id keeps it canonical and idempotent across resume.
625
- */
626
- function driverNotEvaluatedGap(gap, cycleId, owner, now) {
627
- return {
628
- kind: 'operating-data-gap',
629
- schemaVersion: OPERATE_SCHEMA_VERSION,
630
- protocolVersion: OPERATE_PROTOCOL_VERSION,
631
- id: `GAP-${canonicalDigest({
632
- roleId: gap.roleId,
633
- cycleId,
634
- reason: 'lifecycle-not-evaluated',
635
- }).slice('sha256:'.length)}`,
636
- cycleId,
637
- question: `Why did ${gap.roleId} not evaluate this cycle?`,
638
- reason: gap.reason,
639
- unblocks: [],
640
- affectedRoles: [gap.roleId],
641
- status: 'open',
642
- owner: owner && owner.length > 0 ? owner : 'chair',
643
- evidenceRefs: [],
644
- createdAt: now,
645
- updatedAt: now,
646
- };
647
- }
648
- export async function runOperatingCycle(input) {
649
- const projectRoot = await assertOperatingProject(input.projectRoot);
650
- const config = await validateOperatingConfiguration(projectRoot);
651
- const paths = resolveOperatingPaths(projectRoot, { localRoot: input.localRoot });
652
- const initializedWorkspace = await loadJson(paths.workspace);
653
- await assertOperatingArtifact('operating-workspace-manifest', initializedWorkspace);
654
- const preferences = await readPreferences(projectRoot, input.localRoot);
655
- const store = new OperatingEventStore(projectRoot, { localRoot: input.localRoot });
656
- const now = input.now ?? new Date();
657
- const deadlineReconciliation = !input.preview && !input.dryRun
658
- ? await reconcileOperatingDecisionDeadlines({
659
- projectRoot,
660
- localRoot: input.localRoot,
661
- now,
662
- })
663
- : { transitioned: 0 };
664
- const initial = await store.replay();
665
- const initialState = await store.state();
666
- const current = activeCycle(initialState);
667
- const timestamp = now.toISOString();
668
- if (input.cycleId && current?.id !== input.cycleId) {
669
- throw new OperateError('E_OPERATE_CYCLE_INPUT_CONFLICT', current
670
- ? `Operating continuation is bound to ${input.cycleId}, but ${current.id} is active.`
671
- : `Operating continuation is bound to ${input.cycleId}, but no resumable cycle is active.`, {
672
- expectedCycleId: input.cycleId,
673
- activeCycleId: current?.id ?? null,
674
- });
675
- }
676
- if (input.reviewOnly) {
677
- const persisted = initialState.cycles.at(-1);
678
- if (!persisted) {
679
- throw new OperateError('E_OPERATE_STATE_INVALID', 'Review-only mode requires at least one committed operating cycle.');
680
- }
681
- const persistedCycle = await assertOperatingArtifact('operating-cycle-manifest', persisted);
682
- const reconciled = input.dryRun
683
- ? { reconciled: 0, shipObserved: 0, state: initialState }
684
- : await reconcileOperatingOutcomeFiles({
685
- projectRoot,
686
- localRoot: input.localRoot,
687
- });
688
- return {
689
- preview: false,
690
- dryRun: Boolean(input.dryRun),
691
- cycle: persistedCycle,
692
- provider: null,
693
- state: reconciled.state,
694
- modelCalls: 0,
695
- warnings: [
696
- `Review-only mode reconciled ${reconciled.reconciled} outcome observation(s) without evidence or model calls.`,
697
- ...(deadlineReconciliation.transitioned > 0
698
- ? [
699
- `Marked ${deadlineReconciliation.transitioned} elapsed decision deadline(s) default-due without executing an action.`,
700
- ]
701
- : []),
702
- ],
703
- };
704
- }
705
- const resumableStates = new Set([
706
- 'preparing',
707
- 'collecting',
708
- 'advising',
709
- 'consolidating',
710
- 'blocked',
711
- ]);
712
- if (current && !resumableStates.has(current.state)) {
713
- throw new OperateError('E_OPERATE_CYCLE_ACTIVE', `Operating cycle ${current.id} is already ${current.state}; close or cancel it before starting another.`);
714
- }
715
- const depth = input.depth ?? current?.depth ?? 'standard';
716
- const focus = normalizeFocus(input.focus ?? current?.focus);
717
- const currentProducer = current ? current.producer : null;
718
- const requestedRuntime = input.runtime && input.runtime !== 'auto' ? input.runtime : preferences.runtime;
719
- if (current && requestedRuntime !== 'auto' && requestedRuntime !== currentProducer?.runtime) {
720
- throw new OperateError('E_OPERATE_RUNTIME_MISMATCH', `Operating cycle ${current.id} is bound to runtime ${currentProducer?.runtime}, not ${requestedRuntime}.`, {
721
- cycleId: current.id,
722
- expectedRuntime: currentProducer?.runtime,
723
- actualRuntime: requestedRuntime,
724
- recovery: 'Resume with the bound runtime, or cancel this cycle and create a new one with the desired runtime.',
725
- });
726
- }
727
- const resolvedRuntime = currentProducer?.runtime ?? requestedRuntime;
728
- const cycleStart = current
729
- ? initial.events.find((event) => event.type === 'cycle.preparing' &&
730
- event.cycleId === current.id &&
731
- event.entityId === current.id)
732
- : null;
733
- if (current && !cycleStart) {
734
- throw new OperateError('E_OPERATE_STATE_INVALID', `Operating cycle ${current.id} has no canonical preparing event.`);
735
- }
736
- const inputHead = cycleStart
737
- ? {
738
- sequence: cycleStart.sequence - 1,
739
- hash: cycleStart.previousEventHash,
740
- }
741
- : initial.eventHead;
742
- // Preview is intentionally machine-state-free: it does not require local
743
- // component-root mappings and binds only a prospective digest. A committed
744
- // cycle always snapshots the live roots at its actual start.
745
- const workspace = input.preview
746
- ? initializedWorkspace
747
- : await snapshotWorkspace(projectRoot, input.localRoot);
748
- const inputDigest = canonicalDigest({
749
- workspaceDigest: workspace.workspaceDigest,
750
- config: canonicalDigest(config),
751
- eventHead: inputHead,
752
- depth,
753
- focus,
754
- runtime: resolvedRuntime,
755
- });
756
- if (current && current.inputDigest !== inputDigest) {
757
- throw new OperateError('E_OPERATE_CYCLE_INPUT_CONFLICT', `Operating cycle ${current.id} can resume only with its original workspace, configuration, depth, and focus.`, {
758
- cycleId: current.id,
759
- expectedInputDigest: current.inputDigest,
760
- actualInputDigest: inputDigest,
761
- });
762
- }
763
- const cycle = current
764
- ? await assertOperatingArtifact('operating-cycle-manifest', current)
765
- : await createCycleManifest({
766
- id: nextCycleId(initialState),
767
- state: 'preparing',
768
- depth,
769
- focus,
770
- inputDigest,
771
- enabledRoles: config.enabledRoles,
772
- enabledProviders: config.enabledProviders,
773
- runtime: resolvedRuntime,
774
- now: timestamp,
775
- });
776
- if (input.preview) {
777
- return {
778
- preview: true,
779
- dryRun: false,
780
- cycle,
781
- provider: null,
782
- modelCalls: 0,
783
- warnings: [],
784
- };
785
- }
786
- const assertCycleWorkspace = async () => {
787
- const observed = await snapshotWorkspace(projectRoot, input.localRoot);
788
- if (observed.workspaceDigest !== workspace.workspaceDigest) {
789
- throw new OperateError('E_OPERATE_HEAD_DIVERGED', 'Workspace revisions, branches, remotes, or material dirty fingerprints changed during the operating cycle.', {
790
- expectedWorkspaceDigest: workspace.workspaceDigest,
791
- actualWorkspaceDigest: observed.workspaceDigest,
792
- });
793
- }
794
- };
795
- const existingEvidence = current && current.state !== 'blocked'
796
- ? await persistedCycleEvidence(store, initial.events, cycle.id)
797
- : null;
798
- const existingRoleResults = current
799
- ? await persistedCycleRoleResults(store, initial.events, cycle.id)
800
- : [];
801
- const advisorContext = await buildAdvisorOperatingContext({
802
- charterPath: paths.charter,
803
- state: initialState,
804
- cycleId: cycle.id,
805
- });
806
- const citationCache = new OperatingEvidenceCache(resolveOperatingPaths(projectRoot, { localRoot: input.localRoot }).evidence, preferences.sensitivityCeiling);
807
- // Sibling workspace components a cross-repo citation may resolve against, joined
808
- // from the committed manifest and the machine-local root map. A citation naming
809
- // a component absent here classifies external-component-unresolved, never
810
- // fabricated-path. Empty on a single-repository project.
811
- const citationComponents = citationComponentsFromWorkspace(workspace, await readOperatingWorkspaceRoots(projectRoot, { localRoot: input.localRoot }));
812
- // FR2 universal gate, bound to the cycle's pinned revision. Injected into
813
- // dispatch so advisors.ts never imports engine.ts, and reused by the
814
- // consolidation-time gate below so both paths resolve citations identically.
815
- const resolveCitations = (roleResults) => gateRecordedProposalCitations({
816
- roleResults,
817
- context: {
818
- projectRoot,
819
- cycleId: cycle.id,
820
- descriptor: workspace.controlRepository,
821
- cache: citationCache,
822
- owner: config.decisionOwner,
823
- components: citationComponents,
824
- now,
825
- },
826
- });
827
- const evaluate = async (persist) => {
828
- await assertCycleWorkspace();
829
- const evidence = existingEvidence ??
830
- (await buildPinnedRevisionEvidenceSeed({
831
- cycleId: cycle.id,
832
- pinnedRevision: workspace.controlRepository.pinnedRevision,
833
- collectedAt: timestamp,
834
- }));
835
- const evidenceGaps = [];
836
- const nonChair = config.enabledRoles.filter((role) => role !== 'chair');
837
- let readiness = await buildDispatchReadiness({
838
- cycleId: cycle.id,
839
- roles: nonChair,
840
- pinnedRevision: workspace.controlRepository.pinnedRevision,
841
- sensitivityCeiling: preferences.sensitivityCeiling,
842
- now,
843
- });
844
- readiness = await remapReadinessGaps(readiness, initialState);
845
- let adapter = input.adapter ?? null;
846
- let provider = null;
847
- const resolveAdapter = async () => {
848
- if (adapter)
849
- return adapter;
850
- if (input.offline) {
851
- adapter = createOfflineAdvisorAdapter();
852
- return adapter;
853
- }
854
- adapter = await createConfiguredStructuredAdapter(projectRoot, {
855
- quiet: input.quiet,
856
- });
857
- const openPlanrConfig = await loadConfig(projectRoot);
858
- const consent = await ensureOperatingProviderConsent({
859
- projectRoot,
860
- provider: configuredAdvisorProviderPolicy({
861
- config: openPlanrConfig,
862
- adapterId: adapter.id,
863
- runtime: resolvedRuntime,
864
- }),
865
- confirmed: Boolean(input.confirmed),
866
- persist,
867
- now: timestamp,
868
- });
869
- provider = consent.manifest;
870
- return adapter;
871
- };
872
- const existingByRole = new Map(existingRoleResults.map((result) => [result.roleId, result]));
873
- const missingNonChair = readiness.roles.filter((role) => role.roleId !== 'chair' && !existingByRole.has(role.roleId));
874
- // SPEC-005 T-020 (FR13): a non-chair lens with NO committed result that is
875
- // nonetheless named by an open governed cycle gap was terminated
876
- // `not_evaluated` — a runtime `harness abandon`, or the operator escape after a
877
- // stall. It is terminal, not runnable: exclude it so a genuinely stalled lens
878
- // no longer strands the cycle at `phase: advisors` forever, exactly as a
879
- // recorded lens does not block it. On the adapter-lifecycle path the only
880
- // committed cycle gaps that name a lens with no result are these terminal ones
881
- // (the citation gate's gaps always co-occur with a recorded result, handled by
882
- // `existingByRole`; readiness gaps are never persisted on this path), so this
883
- // never suppresses a still-pending lens — a pending lens has no naming gap yet.
884
- const terminatedNonChair = new Set(missingNonChair
885
- .filter((role) => initialState.dataGaps.some((gap) => (gap.cycleId === undefined || gap.cycleId === cycle.id) &&
886
- !['closed', 'superseded'].includes(String(gap.status)) &&
887
- Array.isArray(gap.affectedRoles) &&
888
- gap.affectedRoles.includes(role.roleId)))
889
- .map((role) => role.roleId));
890
- const runnableMissingNonChair = missingNonChair.filter((role) => role.modelCallAllowed && !terminatedNonChair.has(role.roleId));
891
- const skippedMissingNonChair = missingNonChair
892
- .filter((role) => !role.modelCallAllowed || role.readiness === 'not_evaluated')
893
- .map((role) => ({
894
- roleId: role.roleId,
895
- gapId: role.gapId,
896
- reason: role.missingEvidence.join('; '),
897
- }));
898
- if (input.deferAdvisors && runnableMissingNonChair.length > 0) {
899
- return {
900
- preview: false,
901
- dryRun: false,
902
- cycle,
903
- evidence,
904
- readiness,
905
- roleResults: existingRoleResults.filter((result) => result.roleId !== 'chair'),
906
- findings: [],
907
- decisions: [],
908
- gaps: readinessGaps(readiness, config.decisionOwner, timestamp),
909
- routes: [],
910
- provider: null,
911
- modelCalls: 0,
912
- warnings: ['Native advisor execution is required before consolidation.'],
913
- nativeHandoff: {
914
- phase: 'advisors',
915
- cycleId: cycle.id,
916
- evidenceDigest: evidence.fingerprint,
917
- roles: runnableMissingNonChair.map((role) => role.roleId).sort(),
918
- },
919
- };
920
- }
921
- await assertCycleWorkspace();
922
- // FR3 (SPEC-005 T-015): drive the non-chair advisor fan-out through the
923
- // AdvisorLifecycleDriver (T-003) rather than a single blocking dispatch. The
924
- // driver owns the per-role lifecycle around the runtime dispatch — bounded
925
- // retry, per-attempt timeout, and automatic lease heartbeat — and never
926
- // dispatches an agent itself: its `dispatch` callback IS the runtime dispatch
927
- // (a single-role `dispatchOperatingAdvisors`) and `recordRole` commits the
928
- // role's built result. A stalled lens is retried within its budget then
929
- // terminated `not_evaluated` with a governed gap while its siblings keep
930
- // recording and the lease keeps renewing — none of which the pre-driver
931
- // single-call fan-out could survive, because one hung role deadlocked the
932
- // whole `Promise.all`. A healthy board records identically to before.
933
- const lifecycleTuning = input.advisorLifecycle ?? {};
934
- const driveNonChairFanOut = async () => {
935
- if (runnableMissingNonChair.length === 0) {
936
- return {
937
- dispatch: {
938
- results: [],
939
- provenance: [],
940
- modelCalls: 0,
941
- blocked: false,
942
- skipped: skippedMissingNonChair,
943
- failed: [],
944
- gaps: [],
945
- },
946
- };
947
- }
948
- const adapter = await resolveAdapter();
949
- const protocol = await loadOperatingProtocol();
950
- // Registry order so the aggregated per-role results are byte-identical to
951
- // the single-call dispatch's canonically-ordered result set (FR4).
952
- const registryOrder = new Map(protocol.listOperatingRoles().map((role, index) => [
953
- role.id,
954
- index,
955
- ]));
956
- const readinessByRole = new Map(readiness.roles.map((role) => [role.roleId, role]));
957
- const recordedResults = new Map();
958
- const provenanceByRole = new Map();
959
- const aggregatedGaps = [];
960
- // Roles whose single-role dispatch produced a genuine FAILURE (an adapter
961
- // error), as distinct from a STALL (a per-attempt timeout with no dispatch
962
- // error). A genuine failure is preserved as `failed` — the pre-driver
963
- // semantics: an `X failed` warning plus an `advisorFailureGaps` gap — while
964
- // only a true stall becomes a governed not_evaluated gap (FR3).
965
- const failedEntries = [];
966
- let aggregatedModelCalls = 0;
967
- let aggregatedBlocked = false;
968
- const clock = lifecycleTuning.now ?? (() => Date.now());
969
- // The engine-managed cycle lease window (FR2). Defaults to the documented
970
- // 15-minute session lease; the driver's heartbeat renews it independent of
971
- // any role completing, so a slow lens cannot expire recorded work.
972
- const leaseWindowMs = lifecycleTuning.leaseWindowMs ?? 900_000;
973
- let leaseExpiresAtMs = clock() + leaseWindowMs;
974
- const plans = runnableMissingNonChair.map((role) => ({
975
- roleId: role.roleId,
976
- // Every advisory lens is structurally OPTIONAL here: a stalled lens
977
- // terminates not_evaluated with a governed gap and the cycle continues to
978
- // Chair (FR3/FR13); nothing in the board is structurally required.
979
- retryBudget: lifecycleTuning.retryBudget ?? 0,
980
- }));
981
- const driver = new AdvisorLifecycleDriver({
982
- roles: plans,
983
- now: clock,
984
- ...(lifecycleTuning.setTimer ? { setTimer: lifecycleTuning.setTimer } : {}),
985
- ...(lifecycleTuning.clearTimer ? { clearTimer: lifecycleTuning.clearTimer } : {}),
986
- ...(lifecycleTuning.roleTimeoutMs !== undefined
987
- ? { roleTimeoutMs: lifecycleTuning.roleTimeoutMs }
988
- : {}),
989
- ...(lifecycleTuning.heartbeatLeadMs !== undefined
990
- ? { heartbeatLeadMs: lifecycleTuning.heartbeatLeadMs }
991
- : {}),
992
- leaseExpiresAtMs,
993
- concurrency: DEFAULT_OPERATING_DISPATCH_CONCURRENCY,
994
- heartbeat: async () => {
995
- leaseExpiresAtMs = clock() + leaseWindowMs;
996
- return { leaseExpiresAtMs };
997
- },
998
- recordRole: async ({ roleId, output }) => {
999
- recordedResults.set(roleId, output);
1000
- leaseExpiresAtMs = clock() + leaseWindowMs;
1001
- return { recorded: true, leaseExpiresAtMs };
1002
- },
1003
- });
1004
- const dispatchOne = async (roleId) => {
1005
- const roleReadiness = readinessByRole.get(roleId);
1006
- if (!roleReadiness) {
1007
- throw new OperateError('E_OPERATE_STATE_INVALID', `No dispatch readiness for advisor role ${roleId}.`);
1008
- }
1009
- const single = await dispatchOperatingAdvisors({
1010
- cycleId: cycle.id,
1011
- projectRoot,
1012
- pinnedRevision: workspace.controlRepository.pinnedRevision,
1013
- readiness: { ...readiness, roles: [roleReadiness] },
1014
- context: advisorContext,
1015
- adapter,
1016
- depth,
1017
- runtime: resolvedRuntime,
1018
- resolveCitations,
1019
- });
1020
- aggregatedModelCalls += single.modelCalls;
1021
- for (const entry of single.provenance)
1022
- provenanceByRole.set(entry.roleId, entry);
1023
- aggregatedGaps.push(...single.gaps);
1024
- if (single.blocked)
1025
- aggregatedBlocked = true;
1026
- const built = single.results.find((result) => result.roleId === roleId);
1027
- if (built)
1028
- return built;
1029
- // The lens dispatch errored. Record it as a genuine failure (preserved as
1030
- // `failed` below) and surface it to the driver, which terminates the role.
1031
- // A HANG instead never reaches here: the driver's per-attempt timeout
1032
- // rejects `dispatchOne` from outside, so a timeout is classified a stall
1033
- // (not a failure) and becomes a governed not_evaluated gap. The driver
1034
- // dispatches nothing itself — this callback IS the dispatch.
1035
- const failure = single.failed.find((entry) => entry.roleId === roleId);
1036
- failedEntries.push({
1037
- roleId,
1038
- message: failure?.message ?? `Advisor role ${roleId} produced no committed result.`,
1039
- });
1040
- throw new OperateError('E_OPERATE_ADVISOR_FAILED', failure?.message ?? `Advisor role ${roleId} produced no committed result.`);
1041
- };
1042
- const heartbeatIntervalMs = lifecycleTuning.heartbeatIntervalMs ?? 60_000;
1043
- const stopHeartbeat = driver.scheduleHeartbeat(heartbeatIntervalMs);
1044
- try {
1045
- await driver.run({
1046
- parallel: Boolean(adapter.parallelDispatch),
1047
- dispatch: (roleId) => dispatchOne(roleId),
1048
- });
1049
- }
1050
- finally {
1051
- stopHeartbeat();
1052
- }
1053
- const governedGaps = driver.governedGaps();
1054
- const failedRoleIds = new Set(failedEntries.map((entry) => entry.roleId));
1055
- // Only a TRUE stall (a timeout, never a dispatch failure) becomes a governed
1056
- // not_evaluated gap; a role the driver terminated after a genuine dispatch
1057
- // error is preserved as `failed` and drops out of the stall set.
1058
- const stallGaps = governedGaps.filter((gap) => gap.outcome === 'not_evaluated' && !failedRoleIds.has(gap.roleId));
1059
- const results = [...recordedResults.values()].sort((left, right) => (registryOrder.get(left.roleId) ?? Number.MAX_SAFE_INTEGER) -
1060
- (registryOrder.get(right.roleId) ?? Number.MAX_SAFE_INTEGER));
1061
- const provenance = results
1062
- .map((result) => provenanceByRole.get(result.roleId))
1063
- .filter((entry) => entry !== undefined);
1064
- // Genuine dispatch failures preserved with the pre-driver semantics, plus any
1065
- // structurally-required lens the driver terminated `failed` (none on this
1066
- // path, where every lens is optional).
1067
- const failed = [
1068
- ...failedEntries,
1069
- ...governedGaps
1070
- .filter((gap) => gap.outcome === 'failed')
1071
- .map((gap) => ({ roleId: gap.roleId, message: gap.reason })),
1072
- ];
1073
- return {
1074
- dispatch: {
1075
- results,
1076
- provenance,
1077
- modelCalls: aggregatedModelCalls,
1078
- blocked: aggregatedBlocked,
1079
- skipped: skippedMissingNonChair,
1080
- failed,
1081
- gaps: [...aggregatedGaps],
1082
- },
1083
- lifecycle: {
1084
- snapshot: driver.snapshot(),
1085
- // Only the genuine stalls — a failed lens is surfaced through `failed`,
1086
- // not as a not_evaluated governed gap.
1087
- gaps: stallGaps,
1088
- chairReady: driver.chairReady(),
1089
- heartbeats: driver.heartbeatsIssued(),
1090
- recorded: results.map((result) => result.roleId),
1091
- notEvaluated: stallGaps.map((gap) => gap.roleId),
1092
- },
1093
- };
1094
- };
1095
- const fanOut = await driveNonChairFanOut();
1096
- const first = fanOut.dispatch;
1097
- const advisorLifecycleSummary = fanOut.lifecycle;
1098
- let roleResults = [
1099
- ...existingRoleResults.filter((result) => result.roleId !== 'chair'),
1100
- ...first.results,
1101
- ];
1102
- let modelCalls = first.modelCalls;
1103
- let blocked = first.blocked;
1104
- const dispatchProvenance = [...first.provenance];
1105
- const skipped = [...first.skipped];
1106
- const failed = [...first.failed];
1107
- // FR2: the governed gaps opened while resolving each dispatched role's
1108
- // citations (unresolvable-citation, empty-grounding) are recorded alongside
1109
- // the cycle's other gaps.
1110
- const dispatchGaps = [...first.gaps];
1111
- let chairBoard;
1112
- if (config.enabledRoles.includes('chair')) {
1113
- // FR1: the Chair dispatches its own mandate and investigates independently —
1114
- // it no longer receives a synthesized advisor-results evidence body. Its
1115
- // proposals cite resolvable content the same way every other lens does.
1116
- let chairReadiness = await buildDispatchReadiness({
1117
- cycleId: cycle.id,
1118
- roles: ['chair'],
1119
- pinnedRevision: workspace.controlRepository.pinnedRevision,
1120
- sensitivityCeiling: preferences.sensitivityCeiling,
1121
- now,
1122
- });
1123
- chairReadiness = await remapReadinessGaps(chairReadiness, {
1124
- ...initialState,
1125
- dataGaps: [
1126
- ...initialState.dataGaps,
1127
- ...readiness.roles
1128
- .filter((role) => role.gapId)
1129
- .map((role) => ({ id: role.gapId, status: 'open' })),
1130
- ],
1131
- });
1132
- readiness = {
1133
- ...readiness,
1134
- roles: [...readiness.roles, ...chairReadiness.roles],
1135
- };
1136
- await assertOperatingArtifact('operating-evidence-readiness', readiness);
1137
- await assertCycleWorkspace();
1138
- const persistedChair = existingByRole.get('chair');
1139
- const runnableChair = chairReadiness.roles.filter((role) => role.modelCallAllowed && !persistedChair);
1140
- if (input.deferAdvisors && runnableChair.length > 0) {
1141
- return {
1142
- preview: false,
1143
- dryRun: false,
1144
- cycle,
1145
- evidence,
1146
- readiness,
1147
- roleResults,
1148
- findings: [],
1149
- decisions: [],
1150
- gaps: readinessGaps(readiness, config.decisionOwner, timestamp),
1151
- routes: [],
1152
- provider: null,
1153
- modelCalls,
1154
- warnings: ['Native Chair execution is required before consolidation.'],
1155
- nativeHandoff: {
1156
- phase: 'chair',
1157
- cycleId: cycle.id,
1158
- evidenceDigest: evidence.fingerprint,
1159
- roles: ['chair'],
1160
- },
1161
- };
1162
- }
1163
- // FR13 (SPEC-005 T-015): assemble the Chair's grounded input from the
1164
- // partial, honestly-labelled non-chair board with T-004's assembler, then
1165
- // feed its contributions and named-gap lines into the Chair mandate. The
1166
- // integrity summary (built from the cycle's committed + dispatch gaps), the
1167
- // dispatch `failed` list, and the citation gate's rejected proposal keys are
1168
- // threaded in so every not-evaluated / failed / still-running /
1169
- // citation-rejected lens is surfaced to the Chair as a gap it must NOT
1170
- // synthesize around. Absent lenses contribute ZERO proposal items to the
1171
- // grounded evidence by construction — the assembler only synthesizes from
1172
- // roles that recorded a result.
1173
- const nonChairResults = roleResults.filter((result) => result.roleId !== 'chair');
1174
- // Citation rejections / boundary refusals come from the cycle's committed +
1175
- // dispatch gaps (category-bearing v1.3 gaps read in-memory). The stalled
1176
- // lenses' not_evaluated classification is sourced directly from the driver's
1177
- // in-memory governed gaps — its authoritative record of what did NOT
1178
- // evaluate and WHY — rather than from a persisted category, so the Chair
1179
- // sees every absent perspective with its real reason.
1180
- const baseIntegrity = buildOperatingIntegritySummary({
1181
- ...initialState,
1182
- dataGaps: [...initialState.dataGaps, ...dispatchGaps],
1183
- }, cycle.id);
1184
- const stallNotEvaluatedRoles = (advisorLifecycleSummary?.gaps ?? []).map((gap) => ({
1185
- roleId: gap.roleId,
1186
- gapId: `GAP-lifecycle-${gap.roleId}`,
1187
- reason: gap.reason,
1188
- detail: gap.reason,
1189
- }));
1190
- // SPEC-005 T-019 (FR5/FR13): reconstruct the citation-rejection signal for the
1191
- // agent-native adapter-lifecycle path. On that path a fully citation-rejected
1192
- // lens commits a quiet result in a PRIOR `run` (via `operateAdapterLifecycle`'s
1193
- // record step), which persists the citation gate's governed gaps
1194
- // (`maintenance.ts`). On THIS consolidation continuation the role is already
1195
- // recorded, so it is never re-dispatched and its category-bearing v1.3 gaps are
1196
- // never rebuilt in memory — `dispatchGaps` is empty. The persisted gaps carry
1197
- // no `category` (the v1.2 append-log projection T-017 uses drops it, and the
1198
- // reducer projects it away regardless), so `buildOperatingIntegritySummary`
1199
- // cannot re-derive the signal from committed state, and the lens would fall
1200
- // through to a false-clean `recorded-quiet`.
1201
- //
1202
- // Carry T-017's signal across that boundary using the SAME co-occurring
1203
- // structural fact its classifier keys on — never the gap's prose: a lens that
1204
- // recorded a result grounding ZERO proposals AND is named by a governed cycle
1205
- // gap was citation-rejected (the citation gate is the only producer of a
1206
- // role-affecting gap at record time on this path). Layer those as
1207
- // `citationRejections` onto the Chair integrity exactly as the stall
1208
- // not_evaluated roles are layered above, skipping any role `baseIntegrity`
1209
- // already classified (so the inline path — whose in-memory `dispatchGaps` still
1210
- // carry `category` — is untouched and T-017's inline proof stays green).
1211
- const recordedZeroGroundedRoles = new Set(nonChairResults
1212
- .filter((result) => result.proposals.length === 0)
1213
- .map((result) => result.roleId));
1214
- const alreadyClassifiedRoles = new Set([
1215
- ...baseIntegrity.citationRejections.flatMap((entry) => entry.affectedRoles),
1216
- ...baseIntegrity.boundaryRefusals.flatMap((entry) => entry.affectedRoles),
1217
- ...baseIntegrity.notEvaluatedRoles.map((role) => role.roleId),
1218
- ...stallNotEvaluatedRoles.map((role) => role.roleId),
1219
- ]);
1220
- const nativeCitationRejections = [];
1221
- for (const roleId of [...recordedZeroGroundedRoles].sort()) {
1222
- if (alreadyClassifiedRoles.has(roleId))
1223
- continue;
1224
- const namingGap = initialState.dataGaps
1225
- .filter((gap) => (gap.cycleId === undefined || gap.cycleId === cycle.id) &&
1226
- Array.isArray(gap.affectedRoles) &&
1227
- gap.affectedRoles.includes(roleId))
1228
- .sort((left, right) => String(left.id).localeCompare(String(right.id)))[0];
1229
- if (!namingGap)
1230
- continue;
1231
- const reason = String(namingGap.reason ?? '').trim();
1232
- const detail = String(namingGap.question ?? '').trim();
1233
- nativeCitationRejections.push({
1234
- gapId: String(namingGap.id),
1235
- reason: reason || 'A cited location could not be resolved to evidence.',
1236
- detail: detail || 'Every citation this role returned failed to resolve to evidence.',
1237
- affectedRoles: [roleId],
1238
- });
1239
- }
1240
- // SPEC-005 T-020 (FR13): a lens dispatched but that never returned — a true
1241
- // stall, terminated via `harness abandon` (runtime) or the operator escape —
1242
- // commits NO result at all, only a governed terminal gap (`maintenance.ts`
1243
- // `governTerminalNotEvaluated`). It is the inverse of T-019's citation-rejected
1244
- // case (which DID record a zero-grounded result), so it is reconstructed the
1245
- // same structural way, keyed on the same committed-state fact and never gap
1246
- // prose: a non-chair enabled lens with NO committed result that is named by an
1247
- // open governed cycle gap is `not_evaluated`, carrying that gap's reason and
1248
- // id. This keeps it a distinct `not-evaluated` outcome — never citation-rejected
1249
- // (which requires a recorded result), never a fabricated conclusion — so the
1250
- // Chair names it as an explicit gap it must not synthesize around, and it
1251
- // contributes zero grounded proposal items by construction (it recorded none).
1252
- const recordedNonChairRoles = new Set(nonChairResults.map((result) => result.roleId));
1253
- const nativeNotEvaluatedRoles = [];
1254
- for (const roleId of [...nonChair].sort()) {
1255
- if (recordedNonChairRoles.has(roleId))
1256
- continue;
1257
- if (alreadyClassifiedRoles.has(roleId))
1258
- continue;
1259
- const namingGap = initialState.dataGaps
1260
- .filter((gap) => (gap.cycleId === undefined || gap.cycleId === cycle.id) &&
1261
- !['closed', 'superseded'].includes(String(gap.status)) &&
1262
- Array.isArray(gap.affectedRoles) &&
1263
- gap.affectedRoles.includes(roleId))
1264
- .sort((left, right) => String(left.id).localeCompare(String(right.id)))[0];
1265
- if (!namingGap)
1266
- continue;
1267
- const reason = String(namingGap.reason ?? '').trim();
1268
- const detail = String(namingGap.question ?? '').trim();
1269
- nativeNotEvaluatedRoles.push({
1270
- roleId,
1271
- gapId: String(namingGap.id),
1272
- reason: reason || 'The lens was dispatched but never recorded a result.',
1273
- detail: detail ||
1274
- 'The lens was dispatched but never recorded a result; it is recorded not_evaluated.',
1275
- });
1276
- }
1277
- const chairIntegrity = {
1278
- ...baseIntegrity,
1279
- citationRejections: [...baseIntegrity.citationRejections, ...nativeCitationRejections],
1280
- notEvaluatedRoles: [
1281
- ...baseIntegrity.notEvaluatedRoles,
1282
- ...stallNotEvaluatedRoles,
1283
- ...nativeNotEvaluatedRoles,
1284
- ],
1285
- hasConcerns: baseIntegrity.hasConcerns ||
1286
- stallNotEvaluatedRoles.length > 0 ||
1287
- nativeCitationRejections.length > 0 ||
1288
- nativeNotEvaluatedRoles.length > 0,
1289
- };
1290
- // The grounded evidence-of-record the recorded proposals cite: read back
1291
- // from the citation snapshots the dispatch-time gate minted, so
1292
- // `buildChairEvidence` resolves every recorded proposal's evidenceRefs
1293
- // instead of the body-free pinned-revision seed (whose `items` are empty).
1294
- const chairGroundedEvidence = await assembleCitationEvidence({
1295
- cycleId: cycle.id,
1296
- roleResults: nonChairResults,
1297
- cache: citationCache,
1298
- baseFingerprint: evidence.fingerprint,
1299
- now: timestamp,
1300
- });
1301
- chairBoard = assembleChairBoardInput(chairGroundedEvidence, nonChairResults, timestamp, {
1302
- expectedRoles: nonChair,
1303
- integrity: chairIntegrity,
1304
- failedReasons: Object.fromEntries(failed.map((entry) => [entry.roleId, entry.message])),
1305
- // Recorded results are already citation-gated at dispatch time, so no
1306
- // recorded proposal is outstanding-rejected here; a role whose proposals
1307
- // were all rejected committed not_evaluated and is classified via the
1308
- // integrity summary's missing-evidence gaps above.
1309
- rejectedProposalKeys: {},
1310
- });
1311
- // Layer the named-gap lines onto the Chair's context so a real runtime agent
1312
- // sees each absent perspective explicitly. The offline/test adapter ignores
1313
- // context, so the machine-checked proof of the wiring is the exposed
1314
- // `chairBoard`; the Chair still investigates independently and receives no
1315
- // synthesized advisor conclusions — only the honest record of what did NOT
1316
- // evaluate, which it must surface as a gap rather than fabricate around.
1317
- const chairAdvisorContext = {
1318
- ...advisorContext,
1319
- openGaps: [
1320
- ...advisorContext.openGaps,
1321
- ...chairBoard.gaps.map((line, index) => ({
1322
- id: `BOARD-GAP-${String(index + 1).padStart(3, '0')}`,
1323
- status: 'open',
1324
- summary: line,
1325
- owner: null,
1326
- evidenceRefs: [],
1327
- affectedRoles: ['chair'],
1328
- })),
1329
- ],
1330
- };
1331
- const chair = persistedChair
1332
- ? {
1333
- results: [persistedChair],
1334
- provenance: [],
1335
- modelCalls: 0,
1336
- blocked: false,
1337
- skipped: [],
1338
- failed: [],
1339
- gaps: [],
1340
- }
1341
- : await dispatchOperatingAdvisors({
1342
- cycleId: cycle.id,
1343
- projectRoot,
1344
- pinnedRevision: workspace.controlRepository.pinnedRevision,
1345
- readiness: chairReadiness,
1346
- context: chairAdvisorContext,
1347
- adapter: await resolveAdapter(),
1348
- depth,
1349
- runtime: resolvedRuntime,
1350
- resolveCitations,
1351
- });
1352
- roleResults = [...roleResults, ...chair.results];
1353
- modelCalls += chair.modelCalls;
1354
- dispatchProvenance.push(...chair.provenance);
1355
- skipped.push(...chair.skipped);
1356
- failed.push(...chair.failed);
1357
- dispatchGaps.push(...chair.gaps);
1358
- blocked ||= chair.blocked || chairReadiness.roles.some((role) => !role.modelCallAllowed);
1359
- }
1360
- const technologyRiskReady = readiness.roles.some((role) => role.roleId === 'technology-risk' && role.modelCallAllowed);
1361
- const technologyRiskFailed = failed.some((entry) => entry.roleId === 'technology-risk');
1362
- const sensitiveRouteBlocked = containsSensitiveRouteProposal(roleResults) && (!technologyRiskReady || technologyRiskFailed);
1363
- blocked ||= sensitiveRouteBlocked;
1364
- // FR2/FR3 / E-003: the universal citation gate. Every dispatched role already
1365
- // resolved its citations at dispatch time (the committed result is v1.2-valid
1366
- // with minted evidenceRefs, no raw citations), so re-running the gate over the
1367
- // full role set — including any natively-committed existing results — is a
1368
- // no-op that provides defence in depth and a single point where consolidation
1369
- // input is proven citation-clean.
1370
- const citationGate = await resolveCitations(roleResults);
1371
- // FR2 (evidence-as-output): the cycle's evidence-of-record is assembled from
1372
- // the resolved-citation snapshots, so confidence/sensitivity/freshness scoring
1373
- // resolves against what was actually cited and verified — never a pre-collected
1374
- // guess. This replaces the retired collected-evidence consolidation input.
1375
- const consolidationEvidence = await assembleCitationEvidence({
1376
- cycleId: cycle.id,
1377
- roleResults: citationGate.roleResults,
1378
- cache: citationCache,
1379
- baseFingerprint: evidence.fingerprint,
1380
- now: timestamp,
1381
- });
1382
- // Only the gated proposals feed consolidation, so a proposal with an
1383
- // unresolvable citation can never become a finding/route. The rejection is
1384
- // recorded as the opened unresolvable-citation gap threaded into `gaps` below.
1385
- const consolidated = await consolidateOperatingResults({
1386
- cycleId: cycle.id,
1387
- results: citationGate.roleResults,
1388
- evidence: consolidationEvidence,
1389
- config,
1390
- now: timestamp,
1391
- existingGapCount: initialState.dataGaps.length,
1392
- });
1393
- const failureGaps = await advisorFailureGaps({
1394
- cycleId: cycle.id,
1395
- failed,
1396
- readiness,
1397
- owner: config.decisionOwner,
1398
- now: timestamp,
1399
- });
1400
- // FR3 (SPEC-005 T-015): the governed data gaps for lenses the lifecycle driver
1401
- // terminated not_evaluated (a stall past the retry budget). They join the
1402
- // consolidation gap set so `remapConsolidation` mints their canonical `GAP-NNN`
1403
- // ids alongside every other cycle gap, then persist and render like any other
1404
- // governed gap — so `status`/`report` show a stalled lens honestly.
1405
- const lifecycleNotEvaluatedGaps = (advisorLifecycleSummary?.gaps ?? []).map((gap) => driverNotEvaluatedGap(gap, cycle.id, config.decisionOwner, timestamp));
1406
- const surfacedDedup = suppressRepeatedFindings(initialState, consolidated.findings, cycle.id);
1407
- const overflowDedup = suppressRepeatedFindings(initialState, consolidated.criticalOverflow, cycle.id);
1408
- const parkedDedup = suppressRepeatedFindings(initialState, consolidated.parked, cycle.id);
1409
- const suppressedFindings = surfacedDedup.suppressed + overflowDedup.suppressed + parkedDedup.suppressed;
1410
- const criticalOverflowCount = overflowDedup.findings.length;
1411
- blocked ||= criticalOverflowCount > 0;
1412
- const remapped = remapConsolidation({
1413
- ...initialState,
1414
- dataGaps: [
1415
- ...initialState.dataGaps,
1416
- ...readiness.roles
1417
- .filter((role) => role.gapId)
1418
- .map((role) => ({ id: role.gapId, status: 'open' })),
1419
- ],
1420
- }, [...surfacedDedup.findings, ...overflowDedup.findings], parkedDedup.findings, consolidated.decisions, [...evidenceGaps, ...consolidated.gaps, ...failureGaps, ...lifecycleNotEvaluatedGaps]);
1421
- const warnings = [
1422
- ...evidence.warnings,
1423
- ...(evidenceGaps.length > 0
1424
- ? [
1425
- `${evidenceGaps.length} numeric commercial evidence item(s) require query and observation-window identity.`,
1426
- ]
1427
- : []),
1428
- ...skipped.map((entry) => `${entry.roleId} not evaluated: ${entry.reason}`),
1429
- ...failed.map((entry) => `${entry.roleId} failed: ${entry.message}`),
1430
- ...(sensitiveRouteBlocked
1431
- ? [
1432
- 'Sensitive payment/security/privacy/legal/tenant/destructive routing is blocked until technology-risk completes.',
1433
- ]
1434
- : []),
1435
- ...(criticalOverflowCount > 0
1436
- ? [
1437
- `${criticalOverflowCount} verified critical finding(s) exceeded a configured cap; the cycle is blocked instead of parking them.`,
1438
- ]
1439
- : []),
1440
- ...(suppressedFindings > 0
1441
- ? [
1442
- `${suppressedFindings} unchanged cross-cycle finding(s) were suppressed instead of duplicated.`,
1443
- ]
1444
- : []),
1445
- ];
1446
- if (blocked)
1447
- warnings.push('The cycle is blocked by required advisor evidence or failure.');
1448
- const reconciledFindings = reconcileCycleFindings(initial.events, cycle.id, remapped.findings);
1449
- const reconciledParked = reconcileCycleFindings(initial.events, cycle.id, remapped.parked);
1450
- return {
1451
- preview: false,
1452
- dryRun: !persist,
1453
- cycle,
1454
- evidence,
1455
- readiness,
1456
- roleResults,
1457
- findings: [...reconciledFindings, ...reconciledParked],
1458
- decisions: remapped.decisions,
1459
- // Citation gaps bypass remapConsolidation (their IDs are digest-derived and
1460
- // already canonical) and are persisted alongside the cycle's other gaps.
1461
- // `dispatchGaps` are the unresolvable-citation/empty-grounding gaps opened
1462
- // while resolving each role's citations at dispatch time; `citationGate.gaps`
1463
- // covers the no-op consolidation-time re-gate (empty in practice).
1464
- gaps: [
1465
- ...readinessGaps(readiness, config.decisionOwner, timestamp),
1466
- ...remapped.gaps,
1467
- ...dispatchGaps,
1468
- ...citationGate.gaps,
1469
- ],
1470
- routes: [],
1471
- provider,
1472
- modelCalls,
1473
- warnings,
1474
- dispatchProvenance,
1475
- ...(advisorLifecycleSummary ? { advisorLifecycle: advisorLifecycleSummary } : {}),
1476
- ...(chairBoard ? { chairBoard } : {}),
1477
- };
1478
- };
1479
- if (input.dryRun)
1480
- return evaluate(false);
1481
- const cycleResult = await withOperatingLock(projectRoot, {
1482
- projectKey: operatingProjectKey(projectRoot),
1483
- expectedEventHead: initial.eventHead,
1484
- currentEventHead: initial.eventHead,
1485
- localRoot: input.localRoot,
1486
- }, async (lock) => {
1487
- const latest = await store.replay();
1488
- if (latest.eventHead.sequence !== initial.eventHead.sequence ||
1489
- latest.eventHead.hash !== initial.eventHead.hash) {
1490
- throw new OperateError('E_OPERATE_HEAD_DIVERGED', 'Operating state changed while preparing the cycle.');
1491
- }
1492
- let head = initial.eventHead;
1493
- let started = Boolean(current);
1494
- let phase = current?.state ?? null;
1495
- const correlationId = randomUUID();
1496
- try {
1497
- await assertCycleWorkspace();
1498
- if (!current) {
1499
- const prepared = await appendLocked(store, lock, head, {
1500
- type: 'cycle.preparing',
1501
- cycleId: cycle.id,
1502
- entityId: cycle.id,
1503
- correlationId,
1504
- payload: { record: cycle },
1505
- });
1506
- started = true;
1507
- head = prepared.head;
1508
- phase = 'preparing';
1509
- }
1510
- if (phase === 'preparing' || phase === 'blocked') {
1511
- const collecting = await appendLocked(store, lock, head, {
1512
- type: 'cycle.collecting',
1513
- cycleId: cycle.id,
1514
- entityId: cycle.id,
1515
- correlationId,
1516
- payload: {},
1517
- });
1518
- head = collecting.head;
1519
- phase = 'collecting';
1520
- }
1521
- const evaluated = await evaluate(true);
1522
- await assertCycleWorkspace();
1523
- const evidence = evaluated.evidence;
1524
- if (phase === 'collecting') {
1525
- if (!existingEvidence) {
1526
- const evidenceRecord = await store.putRecord('evidence-metadata', recordContent(evidence), { correlationId, createdAt: timestamp });
1527
- const cache = new OperatingEvidenceCache(resolveOperatingPaths(projectRoot, { localRoot: input.localRoot }).evidence, preferences.sensitivityCeiling);
1528
- await cache.put(evidence.fingerprint.slice('sha256:'.length), evidence, preferences.evidenceTtlMs, now);
1529
- const evidenceEvent = await appendLocked(store, lock, head, {
1530
- type: 'evidence.collected',
1531
- cycleId: cycle.id,
1532
- entityId: cycle.id,
1533
- correlationId,
1534
- evidenceRefs: evidence.items.map((item) => item.id),
1535
- payload: {
1536
- recordDigest: evidenceRecord.digest,
1537
- sources: evidenceProjectionSources(evidence),
1538
- },
1539
- });
1540
- head = evidenceEvent.head;
1541
- }
1542
- const advising = await appendLocked(store, lock, head, {
1543
- type: 'cycle.advising',
1544
- cycleId: cycle.id,
1545
- entityId: cycle.id,
1546
- correlationId,
1547
- payload: {},
1548
- });
1549
- head = advising.head;
1550
- phase = 'advising';
1551
- }
1552
- if (phase === 'advising' && evaluated.nativeHandoff) {
1553
- const state = await store.state();
1554
- await store.writeCheckpoint(state);
1555
- await persistOperatingProjections({
1556
- projectRoot,
1557
- localRoot: input.localRoot,
1558
- state,
1559
- revalidateEventHead: async () => (await store.replay()).eventHead,
1560
- });
1561
- // FR5 (SPEC-005 T-002): the status-facing summary this native handoff
1562
- // returns reflects LIVE persisted role results — every lens the harness
1563
- // has already committed to the canonical event log, re-read here from the
1564
- // freshest replay rather than the call-entry snapshot. Combined with the
1565
- // harness recording each role's event the moment it validates (not only
1566
- // at finalize), a `run` re-entered mid fan-out reports exactly the roles
1567
- // that are durably recorded, never a stale "nothing recorded yet" view.
1568
- const livePersistedRoleResults = await persistedCycleRoleResults(store, (await store.replay()).events, cycle.id);
1569
- return {
1570
- ...evaluated,
1571
- roleResults: livePersistedRoleResults.filter((result) => result.roleId !== 'chair'),
1572
- state,
1573
- };
1574
- }
1575
- if (phase === 'advising') {
1576
- const recordedRoles = new Set(existingRoleResults.map((result) => result.roleId));
1577
- for (const result of evaluated.roleResults ?? []) {
1578
- if (recordedRoles.has(result.roleId))
1579
- continue;
1580
- const record = await store.putRecord('advisor-result', recordContent(result), {
1581
- correlationId,
1582
- createdAt: timestamp,
1583
- });
1584
- const appended = await appendLocked(store, lock, head, {
1585
- type: 'advisory.recorded',
1586
- cycleId: cycle.id,
1587
- entityId: `${cycle.id}-${result.roleId}`,
1588
- correlationId,
1589
- evidenceRefs: result.proposals.flatMap((proposal) => proposal.evidenceRefs),
1590
- payload: { recordDigest: record.digest },
1591
- });
1592
- head = appended.head;
1593
- }
1594
- const existingGapIds = new Set(initialState.dataGaps.filter((gap) => gap.cycleId === cycle.id).map((gap) => gap.id));
1595
- // FR2/FR13 (T-017): a citation-rejection / empty-grounding gap is a
1596
- // Protocol v1.3 gap in memory (category + digest id), where the Chair
1597
- // board reads its category to classify the role. The append log and the
1598
- // gap.open/operating-record schemas only admit a v1.2 data gap, so
1599
- // persist each gap in its v1.2 projection (canonical `GAP-NNN` id, no
1600
- // v1.3-only fields) — lossless for replayed state, which drops category
1601
- // regardless. Seed the ordinal past every canonical id already present in
1602
- // committed state and this batch so a minted id never collides.
1603
- let gapOrdinal = maximumOrdinal([...initialState.dataGaps, ...(evaluated.gaps ?? [])], 'GAP');
1604
- for (const rawGap of evaluated.gaps ?? []) {
1605
- const gap = toPersistedDataGap(rawGap, () => `GAP-${String(++gapOrdinal).padStart(3, '0')}`);
1606
- if (existingGapIds.has(rawGap.id) || existingGapIds.has(gap.id))
1607
- continue;
1608
- await assertOperatingArtifact('operating-data-gap', gap);
1609
- await store.putRecord('data-gap', recordContent(gap), {
1610
- correlationId,
1611
- createdAt: timestamp,
1612
- });
1613
- const appended = await appendLocked(store, lock, head, {
1614
- type: 'gap.open',
1615
- cycleId: cycle.id,
1616
- entityId: gap.id,
1617
- correlationId,
1618
- evidenceRefs: gap.evidenceRefs,
1619
- payload: { record: gap },
1620
- });
1621
- head = appended.head;
1622
- }
1623
- }
1624
- if (phase === 'advising' &&
1625
- evaluated.warnings.some((warning) => warning.includes('cycle is blocked'))) {
1626
- const blocked = await appendLocked(store, lock, head, {
1627
- type: 'cycle.blocked',
1628
- cycleId: cycle.id,
1629
- entityId: cycle.id,
1630
- correlationId,
1631
- payload: { patch: { health: 'blocked' }, warnings: evaluated.warnings },
1632
- });
1633
- head = blocked.head;
1634
- const state = await store.state();
1635
- await store.writeCheckpoint(state);
1636
- await persistOperatingProjections({
1637
- projectRoot,
1638
- localRoot: input.localRoot,
1639
- state,
1640
- revalidateEventHead: async () => (await store.replay()).eventHead,
1641
- });
1642
- return { ...evaluated, state };
1643
- }
1644
- if (phase === 'advising') {
1645
- const consolidating = await appendLocked(store, lock, head, {
1646
- type: 'cycle.consolidating',
1647
- cycleId: cycle.id,
1648
- entityId: cycle.id,
1649
- correlationId,
1650
- payload: {},
1651
- });
1652
- head = consolidating.head;
1653
- phase = 'consolidating';
1654
- }
1655
- const existingFindingIds = new Set(initialState.findings
1656
- .filter((finding) => finding.cycleId === cycle.id)
1657
- .map((finding) => finding.id));
1658
- for (const finding of evaluated.findings ?? []) {
1659
- if (existingFindingIds.has(finding.id))
1660
- continue;
1661
- await store.putRecord('finding', recordContent(finding), {
1662
- correlationId,
1663
- createdAt: timestamp,
1664
- });
1665
- const appended = await appendLocked(store, lock, head, {
1666
- type: 'finding.proposed',
1667
- cycleId: cycle.id,
1668
- entityId: finding.id,
1669
- correlationId,
1670
- evidenceRefs: finding.evidenceRefs,
1671
- payload: { record: finding },
1672
- });
1673
- head = appended.head;
1674
- }
1675
- const existingDecisionQuestions = new Set(initialState.decisions
1676
- .filter((decision) => decision.cycleId === cycle.id)
1677
- .map((decision) => String(decision.question ?? '')));
1678
- for (const decision of evaluated.decisions ?? []) {
1679
- if (existingDecisionQuestions.has(decision.question))
1680
- continue;
1681
- await store.putRecord('decision', recordContent(decision), {
1682
- correlationId,
1683
- createdAt: timestamp,
1684
- });
1685
- const appended = await appendLocked(store, lock, head, {
1686
- type: 'decision.open',
1687
- cycleId: cycle.id,
1688
- entityId: decision.id,
1689
- correlationId,
1690
- evidenceRefs: decision.evidenceRefs,
1691
- payload: { record: decision },
1692
- });
1693
- head = appended.head;
1694
- }
1695
- const routeBase = await store.state();
1696
- const providerDigest = evaluated.provider?.policyDigest ?? canonicalDigest({ provider: 'offline' });
1697
- const routes = [];
1698
- let routeOrdinal = maximumOrdinal(routeBase.routes, 'ACT');
1699
- let specOrdinal = await nextOperatingSpecOrdinal(projectRoot);
1700
- const existingRoutedFindingIds = new Set(initial.events
1701
- .filter((event) => event.type === 'route.proposed' &&
1702
- event.payload.record &&
1703
- typeof event.payload.record === 'object')
1704
- .flatMap((event) => {
1705
- const record = event.payload.record;
1706
- return (record.actions ?? [])
1707
- .map((action) => action.findingId)
1708
- .filter((findingId) => Boolean(findingId));
1709
- }));
1710
- for (const finding of (evaluated.findings ?? []).filter((candidate) => !candidate.parked && !existingRoutedFindingIds.has(candidate.id))) {
1711
- const isDev = finding.lane === 'DEV';
1712
- routes.push(await createOperatingRoutePlan({
1713
- projectRoot,
1714
- cycleId: cycle.id,
1715
- finding,
1716
- config,
1717
- workspace,
1718
- eventHead: head,
1719
- evidenceDigest: evidence.fingerprint,
1720
- providerDigest,
1721
- sequence: ++routeOrdinal,
1722
- localRoot: input.localRoot,
1723
- ...(isDev ? { specId: `SPEC-${String(specOrdinal++).padStart(3, '0')}` } : {}),
1724
- now: timestamp,
1725
- }));
1726
- }
1727
- if (routes.length > 0) {
1728
- await assertCycleWorkspace();
1729
- for (const route of routes) {
1730
- const relativePath = `.planr/operate/routes/${route.id}.json`;
1731
- const content = `${canonicalize(route)}\n`;
1732
- const transactionId = `TXN-${cycle.id}-${route.id}-proposal`;
1733
- const transactionRoot = path.join(resolveOperatingPaths(projectRoot, { localRoot: input.localRoot }).transactions, transactionId);
1734
- const manifestPath = path.join(transactionRoot, 'journal.json');
1735
- const existingBytes = await readFile(path.join(projectRoot, relativePath), 'utf8').catch((error) => {
1736
- if (error.code === 'ENOENT')
1737
- return null;
1738
- throw error;
1739
- });
1740
- const journal = existingBytes === null
1741
- ? await prepareJournalTransaction(projectRoot, {
1742
- writes: [
1743
- {
1744
- relativePath,
1745
- operation: 'create',
1746
- content,
1747
- },
1748
- ],
1749
- eventHead: head,
1750
- previewDigest: route.previewDigest,
1751
- transactionId,
1752
- localRoot: input.localRoot,
1753
- })
1754
- : {
1755
- root: transactionRoot,
1756
- manifestPath,
1757
- record: await readJournal(manifestPath),
1758
- };
1759
- if (existingBytes !== null) {
1760
- if (existingBytes !== content ||
1761
- journal.record.state !== 'committed' ||
1762
- journal.record.previewDigest !== route.previewDigest) {
1763
- throw new OperateError('E_OPERATE_TRANSACTION_INVALID', `Orphaned route proposal ${route.id} does not match its committed journal.`);
1764
- }
1765
- }
1766
- else {
1767
- await applyJournalTransaction(projectRoot, journal, {
1768
- currentEventHead: head,
1769
- revalidateEventHead: async () => (await store.replay()).eventHead,
1770
- });
1771
- }
1772
- try {
1773
- await store.putRecord('route', recordContent(route), {
1774
- correlationId,
1775
- createdAt: timestamp,
1776
- });
1777
- const appended = await appendLocked(store, lock, head, {
1778
- type: 'route.proposed',
1779
- cycleId: cycle.id,
1780
- entityId: route.id,
1781
- correlationId,
1782
- evidenceRefs: route.actions.flatMap((action) => action.evidenceRefs),
1783
- payload: { record: route },
1784
- // A v1.3 (create-quick-task) route plan embedded in the event
1785
- // payload stamps the event v1.3, whose schema accepts either
1786
- // route-plan version; every v1.2 route keeps the frozen v1.2 event.
1787
- ...(route.protocolVersion === OPERATE_MISSION_PROTOCOL_VERSION
1788
- ? { protocolVersion: OPERATE_MISSION_PROTOCOL_VERSION }
1789
- : {}),
1790
- });
1791
- head = appended.head;
1792
- }
1793
- catch (error) {
1794
- await rollbackJournalTransaction(projectRoot, journal).catch(() => undefined);
1795
- throw error;
1796
- }
1797
- }
1798
- }
1799
- const quiet = (evaluated.findings?.length ?? 0) === 0 &&
1800
- (evaluated.decisions?.length ?? 0) === 0 &&
1801
- (evaluated.gaps?.length ?? 0) === 0;
1802
- const health = quiet ? 'quiet' : evaluated.warnings.length > 0 ? 'partial' : 'normal';
1803
- const reviewable = await appendLocked(store, lock, head, {
1804
- type: 'cycle.reviewable',
1805
- cycleId: cycle.id,
1806
- entityId: cycle.id,
1807
- correlationId,
1808
- payload: {
1809
- patch: {
1810
- health,
1811
- },
1812
- warnings: evaluated.warnings,
1813
- },
1814
- });
1815
- head = reviewable.head;
1816
- if (quiet) {
1817
- const closed = await appendLocked(store, lock, head, {
1818
- type: 'cycle.closed',
1819
- cycleId: cycle.id,
1820
- entityId: cycle.id,
1821
- correlationId,
1822
- payload: {
1823
- patch: {
1824
- health,
1825
- completedAt: timestamp,
1826
- },
1827
- },
1828
- });
1829
- head = closed.head;
1830
- }
1831
- const state = await store.state();
1832
- await store.writeCheckpoint(state);
1833
- await persistOperatingProjections({
1834
- projectRoot,
1835
- localRoot: input.localRoot,
1836
- state,
1837
- revalidateEventHead: async () => (await store.replay()).eventHead,
1838
- });
1839
- await mkdir(resolveOperatingPaths(projectRoot).cycles, {
1840
- recursive: true,
1841
- mode: 0o700,
1842
- });
1843
- return { ...evaluated, routes, state };
1844
- }
1845
- catch (error) {
1846
- if (started) {
1847
- const currentHead = await store.replay();
1848
- try {
1849
- const blockedByCriticalCap = error instanceof OperateError && error.code === 'E_OPERATE_CRITICAL_CAP';
1850
- const failed = await appendLocked(store, lock, currentHead.eventHead, {
1851
- type: blockedByCriticalCap ? 'cycle.blocked' : 'cycle.failed',
1852
- cycleId: cycle.id,
1853
- entityId: cycle.id,
1854
- correlationId,
1855
- payload: {
1856
- patch: { health: 'blocked' },
1857
- errorCode: error instanceof OperateError ? error.code : 'E_OPERATE_STATE_INVALID',
1858
- ...(blockedByCriticalCap ? { details: error.details } : {}),
1859
- },
1860
- });
1861
- head = failed.head;
1862
- const failedState = await store.state();
1863
- await store.writeCheckpoint(failedState);
1864
- await persistOperatingProjections({
1865
- projectRoot,
1866
- localRoot: input.localRoot,
1867
- state: failedState,
1868
- revalidateEventHead: async () => (await store.replay()).eventHead,
1869
- });
1870
- }
1871
- catch {
1872
- // Preserve the original failure; integrity diagnostics will expose
1873
- // any inability to append the terminal audit event.
1874
- }
1875
- }
1876
- throw error;
1877
- }
1878
- });
1879
- // FR8 / E-008: persist the cadence `lastRunAt` marker once a committed cycle
1880
- // reaches a terminal reviewable/blocked/closed state, so a later `operate
1881
- // status` surfaces the pipeline's `nextDueAt` without re-running a cycle. Uses
1882
- // the injected clock (`timestamp`), never a wall-clock read. Preview, dry-run,
1883
- // and native-handoff returns have not completed a cycle and record nothing.
1884
- if (!cycleResult.preview && !cycleResult.dryRun && !cycleResult.nativeHandoff) {
1885
- const finalCycleState = cycleResult.state?.cycles.find((candidate) => candidate.id === cycle.id)?.state;
1886
- if (finalCycleState && ['reviewable', 'blocked', 'closed'].includes(finalCycleState)) {
1887
- await recordOperatingCadenceRun({
1888
- projectRoot,
1889
- localRoot: input.localRoot,
1890
- runAt: timestamp,
1891
- });
1892
- }
1893
- }
1894
- return cycleResult;
1895
- }
1896
- //# sourceMappingURL=engine.js.map