@rpamis/comet 0.3.9 → 0.4.0-beta.10

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 (1678) hide show
  1. package/README.md +572 -257
  2. package/assets/manifest.json +46 -13
  3. package/assets/skills/comet/SKILL.md +17 -271
  4. package/assets/skills/comet/reference/auto-transition.md +1 -1
  5. package/assets/skills/comet/reference/classic-layout.md +34 -0
  6. package/assets/skills/comet/reference/comet-yaml-fields.md +22 -9
  7. package/assets/skills/comet/reference/context-recovery.md +23 -3
  8. package/assets/skills/comet/reference/debug-gate.md +17 -1
  9. package/assets/skills/comet/reference/decision-point.md +24 -2
  10. package/assets/skills/comet/reference/file-structure.md +2 -2
  11. package/assets/skills/comet/reference/intent-frame.md +74 -0
  12. package/assets/skills/comet/reference/scripts.md +101 -0
  13. package/assets/skills/comet/reference/subagent-dispatch.md +84 -27
  14. package/assets/skills/comet/rules/comet-phase-guard.en.md +44 -33
  15. package/assets/skills/comet/rules/comet-phase-guard.md +42 -33
  16. package/assets/skills/comet/rules/comet-workflow-guard.en.md +32 -0
  17. package/assets/skills/comet/rules/comet-workflow-guard.md +32 -0
  18. package/assets/skills/comet/runtime/classic/checks.yaml +6 -0
  19. package/assets/skills/comet/runtime/classic/guardrails.yaml +13 -0
  20. package/assets/skills/comet/runtime/classic/skill.yaml +122 -0
  21. package/assets/skills/comet/scripts/comet-archive.mjs +3 -0
  22. package/assets/skills/comet/scripts/comet-entry-runtime.mjs +8074 -0
  23. package/assets/skills/comet/scripts/comet-env.mjs +15 -0
  24. package/assets/skills/comet/scripts/comet-guard.mjs +3 -0
  25. package/assets/skills/comet/scripts/comet-handoff.mjs +3 -0
  26. package/assets/skills/comet/scripts/comet-hook-guard.mjs +3 -0
  27. package/assets/skills/comet/scripts/comet-hook-router.mjs +12786 -0
  28. package/assets/skills/comet/scripts/comet-intent.mjs +3 -0
  29. package/assets/skills/comet/scripts/comet-resume-probe.mjs +3 -0
  30. package/assets/skills/comet/scripts/comet-runtime.mjs +19201 -0
  31. package/assets/skills/comet/scripts/comet-state.mjs +3 -0
  32. package/assets/skills/comet/scripts/comet-yaml-validate.mjs +3 -0
  33. package/assets/skills/comet-any/SKILL.md +118 -0
  34. package/assets/skills/comet-any/reference/authored-zone-example.md +105 -0
  35. package/assets/skills/comet-any/reference/authoring-protocol.json +91 -0
  36. package/assets/skills/comet-any/reference/authoring-subagents.md +102 -0
  37. package/assets/skills/comet-any/reference/bundle-authoring.md +166 -0
  38. package/assets/skills/comet-any/reference/eval-provider.md +83 -0
  39. package/assets/skills/comet-any/reference/subagents/pause-points-author.md +78 -0
  40. package/assets/skills/comet-any/reference/subagents/reference-author.md +77 -0
  41. package/assets/skills/comet-any/reference/subagents/script-author.md +81 -0
  42. package/assets/skills/comet-any/reference/subagents/skill-core-author.md +129 -0
  43. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +126 -0
  44. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +101 -0
  45. package/assets/skills/comet-archive/SKILL.md +81 -28
  46. package/assets/skills/comet-build/SKILL.md +97 -67
  47. package/assets/skills/comet-classic/SKILL.md +295 -0
  48. package/assets/skills/comet-design/SKILL.md +43 -43
  49. package/assets/skills/comet-hotfix/SKILL.md +71 -59
  50. package/assets/skills/comet-native/SKILL.md +133 -0
  51. package/assets/skills/comet-native/reference/artifacts.md +141 -0
  52. package/assets/skills/comet-native/reference/clarification.md +54 -0
  53. package/assets/skills/comet-native/reference/commands.md +170 -0
  54. package/assets/skills/comet-native/reference/recovery.md +96 -0
  55. package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
  56. package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +34468 -0
  57. package/assets/skills/comet-open/SKILL.md +120 -70
  58. package/assets/skills/comet-tweak/SKILL.md +99 -68
  59. package/assets/skills/comet-verify/SKILL.md +74 -86
  60. package/assets/skills-zh/comet/SKILL.md +17 -258
  61. package/assets/skills-zh/comet/reference/auto-transition.md +3 -3
  62. package/assets/skills-zh/comet/reference/classic-layout.md +34 -0
  63. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +18 -9
  64. package/assets/skills-zh/comet/reference/context-recovery.md +22 -2
  65. package/assets/skills-zh/comet/reference/debug-gate.md +17 -1
  66. package/assets/skills-zh/comet/reference/decision-point.md +24 -2
  67. package/assets/skills-zh/comet/reference/file-structure.md +2 -2
  68. package/assets/skills-zh/comet/reference/intent-frame.md +74 -0
  69. package/assets/skills-zh/comet/reference/scripts.md +101 -0
  70. package/assets/skills-zh/comet/reference/subagent-dispatch.md +72 -22
  71. package/assets/skills-zh/comet/runtime/classic/checks.yaml +6 -0
  72. package/assets/skills-zh/comet/runtime/classic/guardrails.yaml +13 -0
  73. package/assets/skills-zh/comet/runtime/classic/skill.yaml +122 -0
  74. package/assets/skills-zh/comet-any/SKILL.md +118 -0
  75. package/assets/skills-zh/comet-any/reference/authored-zone-example.md +105 -0
  76. package/assets/skills-zh/comet-any/reference/authoring-protocol.json +91 -0
  77. package/assets/skills-zh/comet-any/reference/authoring-subagents.md +107 -0
  78. package/assets/skills-zh/comet-any/reference/bundle-authoring.md +166 -0
  79. package/assets/skills-zh/comet-any/reference/eval-provider.md +66 -0
  80. package/assets/skills-zh/comet-any/reference/subagents/pause-points-author.md +81 -0
  81. package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +81 -0
  82. package/assets/skills-zh/comet-any/reference/subagents/script-author.md +84 -0
  83. package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +129 -0
  84. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +126 -0
  85. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +99 -0
  86. package/assets/skills-zh/comet-archive/SKILL.md +81 -28
  87. package/assets/skills-zh/comet-build/SKILL.md +88 -71
  88. package/assets/skills-zh/comet-classic/SKILL.md +283 -0
  89. package/assets/skills-zh/comet-design/SKILL.md +43 -43
  90. package/assets/skills-zh/comet-hotfix/SKILL.md +75 -63
  91. package/assets/skills-zh/comet-native/SKILL.md +133 -0
  92. package/assets/skills-zh/comet-native/reference/artifacts.md +141 -0
  93. package/assets/skills-zh/comet-native/reference/clarification.md +54 -0
  94. package/assets/skills-zh/comet-native/reference/commands.md +170 -0
  95. package/assets/skills-zh/comet-native/reference/recovery.md +96 -0
  96. package/assets/skills-zh/comet-open/SKILL.md +121 -71
  97. package/assets/skills-zh/comet-tweak/SKILL.md +98 -66
  98. package/assets/skills-zh/comet-verify/SKILL.md +70 -80
  99. package/bin/comet.js +1 -1
  100. package/dist/app/cli/comet-banner.d.ts +25 -0
  101. package/dist/app/cli/comet-banner.d.ts.map +1 -0
  102. package/dist/app/cli/comet-banner.js +265 -0
  103. package/dist/app/cli/comet-banner.js.map +1 -0
  104. package/dist/{cli → app/cli}/index.d.ts.map +1 -1
  105. package/dist/app/cli/index.js +527 -0
  106. package/dist/app/cli/index.js.map +1 -0
  107. package/dist/app/commands/bundle.d.ts +51 -0
  108. package/dist/app/commands/bundle.d.ts.map +1 -0
  109. package/dist/app/commands/bundle.js +387 -0
  110. package/dist/app/commands/bundle.js.map +1 -0
  111. package/dist/app/commands/classic.d.ts +5 -0
  112. package/dist/app/commands/classic.d.ts.map +1 -0
  113. package/dist/app/commands/classic.js +32 -0
  114. package/dist/app/commands/classic.js.map +1 -0
  115. package/dist/app/commands/command-result.d.ts +6 -0
  116. package/dist/app/commands/command-result.d.ts.map +1 -0
  117. package/dist/app/commands/command-result.js +4 -0
  118. package/dist/app/commands/command-result.js.map +1 -0
  119. package/dist/app/commands/creator.d.ts +14 -0
  120. package/dist/app/commands/creator.d.ts.map +1 -0
  121. package/dist/app/commands/creator.js +82 -0
  122. package/dist/app/commands/creator.js.map +1 -0
  123. package/dist/app/commands/dashboard.d.ts +16 -0
  124. package/dist/app/commands/dashboard.d.ts.map +1 -0
  125. package/dist/app/commands/dashboard.js +53 -0
  126. package/dist/app/commands/dashboard.js.map +1 -0
  127. package/dist/{commands → app/commands}/doctor.d.ts +5 -1
  128. package/dist/app/commands/doctor.d.ts.map +1 -0
  129. package/dist/app/commands/doctor.js +1115 -0
  130. package/dist/app/commands/doctor.js.map +1 -0
  131. package/dist/app/commands/eval.d.ts +19 -0
  132. package/dist/app/commands/eval.d.ts.map +1 -0
  133. package/dist/app/commands/eval.js +227 -0
  134. package/dist/app/commands/eval.js.map +1 -0
  135. package/dist/app/commands/i18n.d.ts +4 -0
  136. package/dist/app/commands/i18n.d.ts.map +1 -0
  137. package/dist/{commands → app/commands}/i18n.js +40 -8
  138. package/dist/app/commands/i18n.js.map +1 -0
  139. package/dist/app/commands/init.d.ts +38 -0
  140. package/dist/app/commands/init.d.ts.map +1 -0
  141. package/dist/app/commands/init.js +891 -0
  142. package/dist/app/commands/init.js.map +1 -0
  143. package/dist/app/commands/native.d.ts +2 -0
  144. package/dist/app/commands/native.d.ts.map +1 -0
  145. package/dist/app/commands/native.js +10 -0
  146. package/dist/app/commands/native.js.map +1 -0
  147. package/dist/app/commands/platform-select-prompt.d.ts +38 -0
  148. package/dist/app/commands/platform-select-prompt.d.ts.map +1 -0
  149. package/dist/app/commands/platform-select-prompt.js +141 -0
  150. package/dist/app/commands/platform-select-prompt.js.map +1 -0
  151. package/dist/app/commands/project-scope-selection.d.ts +13 -0
  152. package/dist/app/commands/project-scope-selection.d.ts.map +1 -0
  153. package/dist/app/commands/project-scope-selection.js +35 -0
  154. package/dist/app/commands/project-scope-selection.js.map +1 -0
  155. package/dist/app/commands/publish.d.ts +7 -0
  156. package/dist/app/commands/publish.d.ts.map +1 -0
  157. package/dist/app/commands/publish.js +14 -0
  158. package/dist/app/commands/publish.js.map +1 -0
  159. package/dist/app/commands/resume-probe.d.ts +12 -0
  160. package/dist/app/commands/resume-probe.d.ts.map +1 -0
  161. package/dist/app/commands/resume-probe.js +68 -0
  162. package/dist/app/commands/resume-probe.js.map +1 -0
  163. package/dist/app/commands/skill.d.ts +23 -0
  164. package/dist/app/commands/skill.d.ts.map +1 -0
  165. package/dist/app/commands/skill.js +208 -0
  166. package/dist/app/commands/skill.js.map +1 -0
  167. package/dist/app/commands/status.d.ts.map +1 -0
  168. package/dist/app/commands/status.js +125 -0
  169. package/dist/app/commands/status.js.map +1 -0
  170. package/dist/app/commands/uninstall.d.ts +14 -0
  171. package/dist/app/commands/uninstall.d.ts.map +1 -0
  172. package/dist/app/commands/uninstall.js +343 -0
  173. package/dist/app/commands/uninstall.js.map +1 -0
  174. package/dist/app/commands/update.d.ts +54 -0
  175. package/dist/app/commands/update.d.ts.map +1 -0
  176. package/dist/app/commands/update.js +1608 -0
  177. package/dist/app/commands/update.js.map +1 -0
  178. package/dist/app/commands/workflow.d.ts +6 -0
  179. package/dist/app/commands/workflow.d.ts.map +1 -0
  180. package/dist/app/commands/workflow.js +11 -0
  181. package/dist/app/commands/workflow.js.map +1 -0
  182. package/dist/config/repository-layout.json +124 -0
  183. package/dist/domains/bundle/authoring.d.ts +82 -0
  184. package/dist/domains/bundle/authoring.d.ts.map +1 -0
  185. package/dist/domains/bundle/authoring.js +185 -0
  186. package/dist/domains/bundle/authoring.js.map +1 -0
  187. package/dist/domains/bundle/bundle-platform.d.ts +40 -0
  188. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -0
  189. package/dist/domains/bundle/bundle-platform.js +293 -0
  190. package/dist/domains/bundle/bundle-platform.js.map +1 -0
  191. package/dist/domains/bundle/candidates.d.ts +29 -0
  192. package/dist/domains/bundle/candidates.d.ts.map +1 -0
  193. package/dist/domains/bundle/candidates.js +37 -0
  194. package/dist/domains/bundle/candidates.js.map +1 -0
  195. package/dist/domains/bundle/compatibility-benchmark.d.ts +12 -0
  196. package/dist/domains/bundle/compatibility-benchmark.d.ts.map +1 -0
  197. package/dist/domains/bundle/compatibility-benchmark.js +224 -0
  198. package/dist/domains/bundle/compatibility-benchmark.js.map +1 -0
  199. package/dist/domains/bundle/compiler.d.ts +5 -0
  200. package/dist/domains/bundle/compiler.d.ts.map +1 -0
  201. package/dist/domains/bundle/compiler.js +106 -0
  202. package/dist/domains/bundle/compiler.js.map +1 -0
  203. package/dist/domains/bundle/distribute.d.ts +33 -0
  204. package/dist/domains/bundle/distribute.d.ts.map +1 -0
  205. package/dist/domains/bundle/distribute.js +166 -0
  206. package/dist/domains/bundle/distribute.js.map +1 -0
  207. package/dist/domains/bundle/draft.d.ts +19 -0
  208. package/dist/domains/bundle/draft.d.ts.map +1 -0
  209. package/dist/domains/bundle/draft.js +82 -0
  210. package/dist/domains/bundle/draft.js.map +1 -0
  211. package/dist/domains/bundle/eval-manifest-runtime.d.ts +8 -0
  212. package/dist/domains/bundle/eval-manifest-runtime.d.ts.map +1 -0
  213. package/dist/domains/bundle/eval-manifest-runtime.js +118 -0
  214. package/dist/domains/bundle/eval-manifest-runtime.js.map +1 -0
  215. package/dist/domains/bundle/eval-run-result.d.ts +22 -0
  216. package/dist/domains/bundle/eval-run-result.d.ts.map +1 -0
  217. package/dist/domains/bundle/eval-run-result.js +207 -0
  218. package/dist/domains/bundle/eval-run-result.js.map +1 -0
  219. package/dist/domains/bundle/eval.d.ts +36 -0
  220. package/dist/domains/bundle/eval.d.ts.map +1 -0
  221. package/dist/domains/bundle/eval.js +498 -0
  222. package/dist/domains/bundle/eval.js.map +1 -0
  223. package/dist/domains/bundle/factory-compose.d.ts +12 -0
  224. package/dist/domains/bundle/factory-compose.d.ts.map +1 -0
  225. package/dist/domains/bundle/factory-compose.js +309 -0
  226. package/dist/domains/bundle/factory-compose.js.map +1 -0
  227. package/dist/domains/bundle/factory-guide.d.ts +37 -0
  228. package/dist/domains/bundle/factory-guide.d.ts.map +1 -0
  229. package/dist/domains/bundle/factory-guide.js +96 -0
  230. package/dist/domains/bundle/factory-guide.js.map +1 -0
  231. package/dist/domains/bundle/factory-plan.d.ts +48 -0
  232. package/dist/domains/bundle/factory-plan.d.ts.map +1 -0
  233. package/dist/domains/bundle/factory-plan.js +172 -0
  234. package/dist/domains/bundle/factory-plan.js.map +1 -0
  235. package/dist/domains/bundle/factory-proposal.d.ts +31 -0
  236. package/dist/domains/bundle/factory-proposal.d.ts.map +1 -0
  237. package/dist/domains/bundle/factory-proposal.js +225 -0
  238. package/dist/domains/bundle/factory-proposal.js.map +1 -0
  239. package/dist/domains/bundle/factory-resolve.d.ts +11 -0
  240. package/dist/domains/bundle/factory-resolve.d.ts.map +1 -0
  241. package/dist/domains/bundle/factory-resolve.js +121 -0
  242. package/dist/domains/bundle/factory-resolve.js.map +1 -0
  243. package/dist/domains/bundle/factory.d.ts +17 -0
  244. package/dist/domains/bundle/factory.d.ts.map +1 -0
  245. package/dist/domains/bundle/factory.js +504 -0
  246. package/dist/domains/bundle/factory.js.map +1 -0
  247. package/dist/domains/bundle/hash.d.ts +3 -0
  248. package/dist/domains/bundle/hash.d.ts.map +1 -0
  249. package/dist/domains/bundle/hash.js +72 -0
  250. package/dist/domains/bundle/hash.js.map +1 -0
  251. package/dist/domains/bundle/load.d.ts +4 -0
  252. package/dist/domains/bundle/load.d.ts.map +1 -0
  253. package/dist/domains/bundle/load.js +355 -0
  254. package/dist/domains/bundle/load.js.map +1 -0
  255. package/dist/domains/bundle/next-action.d.ts +37 -0
  256. package/dist/domains/bundle/next-action.d.ts.map +1 -0
  257. package/dist/domains/bundle/next-action.js +185 -0
  258. package/dist/domains/bundle/next-action.js.map +1 -0
  259. package/dist/domains/bundle/platform.d.ts +21 -0
  260. package/dist/domains/bundle/platform.d.ts.map +1 -0
  261. package/dist/domains/bundle/platform.js +170 -0
  262. package/dist/domains/bundle/platform.js.map +1 -0
  263. package/dist/domains/bundle/preferences.d.ts +11 -0
  264. package/dist/domains/bundle/preferences.d.ts.map +1 -0
  265. package/dist/domains/bundle/preferences.js +17 -0
  266. package/dist/domains/bundle/preferences.js.map +1 -0
  267. package/dist/domains/bundle/publish.d.ts +14 -0
  268. package/dist/domains/bundle/publish.d.ts.map +1 -0
  269. package/dist/domains/bundle/publish.js +159 -0
  270. package/dist/domains/bundle/publish.js.map +1 -0
  271. package/dist/domains/bundle/readiness-user-summary.d.ts +25 -0
  272. package/dist/domains/bundle/readiness-user-summary.d.ts.map +1 -0
  273. package/dist/domains/bundle/readiness-user-summary.js +186 -0
  274. package/dist/domains/bundle/readiness-user-summary.js.map +1 -0
  275. package/dist/domains/bundle/review-summary.d.ts +36 -0
  276. package/dist/domains/bundle/review-summary.d.ts.map +1 -0
  277. package/dist/domains/bundle/review-summary.js +348 -0
  278. package/dist/domains/bundle/review-summary.js.map +1 -0
  279. package/dist/domains/bundle/state.d.ts +7 -0
  280. package/dist/domains/bundle/state.d.ts.map +1 -0
  281. package/dist/domains/bundle/state.js +247 -0
  282. package/dist/domains/bundle/state.js.map +1 -0
  283. package/dist/domains/bundle/types.d.ts +347 -0
  284. package/dist/domains/bundle/types.d.ts.map +1 -0
  285. package/dist/domains/bundle/types.js.map +1 -0
  286. package/dist/domains/bundle/user-facing.d.ts +48 -0
  287. package/dist/domains/bundle/user-facing.d.ts.map +1 -0
  288. package/dist/domains/bundle/user-facing.js +73 -0
  289. package/dist/domains/bundle/user-facing.js.map +1 -0
  290. package/dist/domains/bundle/validate.d.ts +5 -0
  291. package/dist/domains/bundle/validate.d.ts.map +1 -0
  292. package/dist/domains/bundle/validate.js +292 -0
  293. package/dist/domains/bundle/validate.js.map +1 -0
  294. package/dist/domains/comet-classic/classic-archive-entry.d.ts +2 -0
  295. package/dist/domains/comet-classic/classic-archive-entry.d.ts.map +1 -0
  296. package/dist/domains/comet-classic/classic-archive-entry.js +4 -0
  297. package/dist/domains/comet-classic/classic-archive-entry.js.map +1 -0
  298. package/dist/domains/comet-classic/classic-archive-pointer.d.ts +8 -0
  299. package/dist/domains/comet-classic/classic-archive-pointer.d.ts.map +1 -0
  300. package/dist/domains/comet-classic/classic-archive-pointer.js +66 -0
  301. package/dist/domains/comet-classic/classic-archive-pointer.js.map +1 -0
  302. package/dist/domains/comet-classic/classic-archive.d.ts +4 -0
  303. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -0
  304. package/dist/domains/comet-classic/classic-archive.js +483 -0
  305. package/dist/domains/comet-classic/classic-archive.js.map +1 -0
  306. package/dist/domains/comet-classic/classic-branch-binding.d.ts +51 -0
  307. package/dist/domains/comet-classic/classic-branch-binding.d.ts.map +1 -0
  308. package/dist/domains/comet-classic/classic-branch-binding.js +107 -0
  309. package/dist/domains/comet-classic/classic-branch-binding.js.map +1 -0
  310. package/dist/domains/comet-classic/classic-cli.d.ts +17 -0
  311. package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -0
  312. package/dist/domains/comet-classic/classic-cli.js +103 -0
  313. package/dist/domains/comet-classic/classic-cli.js.map +1 -0
  314. package/dist/domains/comet-classic/classic-command-checks.d.ts +20 -0
  315. package/dist/domains/comet-classic/classic-command-checks.d.ts.map +1 -0
  316. package/dist/domains/comet-classic/classic-command-checks.js +94 -0
  317. package/dist/domains/comet-classic/classic-command-checks.js.map +1 -0
  318. package/dist/domains/comet-classic/classic-command-context.d.ts +12 -0
  319. package/dist/domains/comet-classic/classic-command-context.d.ts.map +1 -0
  320. package/dist/domains/comet-classic/classic-command-context.js +42 -0
  321. package/dist/domains/comet-classic/classic-command-context.js.map +1 -0
  322. package/dist/domains/comet-classic/classic-current-change.d.ts +17 -0
  323. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -0
  324. package/dist/domains/comet-classic/classic-current-change.js +112 -0
  325. package/dist/domains/comet-classic/classic-current-change.js.map +1 -0
  326. package/dist/domains/comet-classic/classic-diagnostics.d.ts +17 -0
  327. package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -0
  328. package/dist/domains/comet-classic/classic-diagnostics.js +110 -0
  329. package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -0
  330. package/dist/domains/comet-classic/classic-evidence.d.ts +11 -0
  331. package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -0
  332. package/dist/domains/comet-classic/classic-evidence.js +178 -0
  333. package/dist/domains/comet-classic/classic-evidence.js.map +1 -0
  334. package/dist/domains/comet-classic/classic-guard-entry.d.ts +2 -0
  335. package/dist/domains/comet-classic/classic-guard-entry.d.ts.map +1 -0
  336. package/dist/domains/comet-classic/classic-guard-entry.js +4 -0
  337. package/dist/domains/comet-classic/classic-guard-entry.js.map +1 -0
  338. package/dist/domains/comet-classic/classic-guard.d.ts +3 -0
  339. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -0
  340. package/dist/domains/comet-classic/classic-guard.js +854 -0
  341. package/dist/domains/comet-classic/classic-guard.js.map +1 -0
  342. package/dist/domains/comet-classic/classic-handoff-entry.d.ts +2 -0
  343. package/dist/domains/comet-classic/classic-handoff-entry.d.ts.map +1 -0
  344. package/dist/domains/comet-classic/classic-handoff-entry.js +4 -0
  345. package/dist/domains/comet-classic/classic-handoff-entry.js.map +1 -0
  346. package/dist/domains/comet-classic/classic-handoff.d.ts +3 -0
  347. package/dist/domains/comet-classic/classic-handoff.d.ts.map +1 -0
  348. package/dist/domains/comet-classic/classic-handoff.js +526 -0
  349. package/dist/domains/comet-classic/classic-handoff.js.map +1 -0
  350. package/dist/domains/comet-classic/classic-hook-guard-entry.d.ts +2 -0
  351. package/dist/domains/comet-classic/classic-hook-guard-entry.d.ts.map +1 -0
  352. package/dist/domains/comet-classic/classic-hook-guard-entry.js +4 -0
  353. package/dist/domains/comet-classic/classic-hook-guard-entry.js.map +1 -0
  354. package/dist/domains/comet-classic/classic-hook-guard.d.ts +12 -0
  355. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -0
  356. package/dist/domains/comet-classic/classic-hook-guard.js +654 -0
  357. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -0
  358. package/dist/domains/comet-classic/classic-intent-command.d.ts +3 -0
  359. package/dist/domains/comet-classic/classic-intent-command.d.ts.map +1 -0
  360. package/dist/domains/comet-classic/classic-intent-command.js +40 -0
  361. package/dist/domains/comet-classic/classic-intent-command.js.map +1 -0
  362. package/dist/domains/comet-classic/classic-intent-entry.d.ts +2 -0
  363. package/dist/domains/comet-classic/classic-intent-entry.d.ts.map +1 -0
  364. package/dist/domains/comet-classic/classic-intent-entry.js +4 -0
  365. package/dist/domains/comet-classic/classic-intent-entry.js.map +1 -0
  366. package/dist/domains/comet-classic/classic-intent.d.ts +79 -0
  367. package/dist/domains/comet-classic/classic-intent.d.ts.map +1 -0
  368. package/dist/domains/comet-classic/classic-intent.js +307 -0
  369. package/dist/domains/comet-classic/classic-intent.js.map +1 -0
  370. package/dist/domains/comet-classic/classic-layout-initialization.d.ts +86 -0
  371. package/dist/domains/comet-classic/classic-layout-initialization.d.ts.map +1 -0
  372. package/dist/domains/comet-classic/classic-layout-initialization.js +813 -0
  373. package/dist/domains/comet-classic/classic-layout-initialization.js.map +1 -0
  374. package/dist/domains/comet-classic/classic-layout.d.ts +47 -0
  375. package/dist/domains/comet-classic/classic-layout.d.ts.map +1 -0
  376. package/dist/domains/comet-classic/classic-layout.js +227 -0
  377. package/dist/domains/comet-classic/classic-layout.js.map +1 -0
  378. package/dist/domains/comet-classic/classic-migrate.d.ts +22 -0
  379. package/dist/domains/comet-classic/classic-migrate.d.ts.map +1 -0
  380. package/dist/domains/comet-classic/classic-migrate.js +180 -0
  381. package/dist/domains/comet-classic/classic-migrate.js.map +1 -0
  382. package/dist/domains/comet-classic/classic-openspec-command.d.ts +4 -0
  383. package/dist/domains/comet-classic/classic-openspec-command.d.ts.map +1 -0
  384. package/dist/domains/comet-classic/classic-openspec-command.js +45 -0
  385. package/dist/domains/comet-classic/classic-openspec-command.js.map +1 -0
  386. package/dist/domains/comet-classic/classic-openspec-root.d.ts +13 -0
  387. package/dist/domains/comet-classic/classic-openspec-root.d.ts.map +1 -0
  388. package/dist/domains/comet-classic/classic-openspec-root.js +47 -0
  389. package/dist/domains/comet-classic/classic-openspec-root.js.map +1 -0
  390. package/dist/domains/comet-classic/classic-paths.d.ts +18 -0
  391. package/dist/domains/comet-classic/classic-paths.d.ts.map +1 -0
  392. package/dist/domains/comet-classic/classic-paths.js +113 -0
  393. package/dist/domains/comet-classic/classic-paths.js.map +1 -0
  394. package/dist/domains/comet-classic/classic-project-config.d.ts +16 -0
  395. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -0
  396. package/dist/domains/comet-classic/classic-project-config.js +36 -0
  397. package/dist/domains/comet-classic/classic-project-config.js.map +1 -0
  398. package/dist/domains/comet-classic/classic-protected-path.d.ts +39 -0
  399. package/dist/domains/comet-classic/classic-protected-path.d.ts.map +1 -0
  400. package/dist/domains/comet-classic/classic-protected-path.js +69 -0
  401. package/dist/domains/comet-classic/classic-protected-path.js.map +1 -0
  402. package/dist/domains/comet-classic/classic-resolver.d.ts +10 -0
  403. package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -0
  404. package/dist/domains/comet-classic/classic-resolver.js +89 -0
  405. package/dist/domains/comet-classic/classic-resolver.js.map +1 -0
  406. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts +3 -0
  407. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts.map +1 -0
  408. package/dist/domains/comet-classic/classic-resume-probe-command.js +59 -0
  409. package/dist/domains/comet-classic/classic-resume-probe-command.js.map +1 -0
  410. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts +2 -0
  411. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts.map +1 -0
  412. package/dist/domains/comet-classic/classic-resume-probe-entry.js +4 -0
  413. package/dist/domains/comet-classic/classic-resume-probe-entry.js.map +1 -0
  414. package/dist/domains/comet-classic/classic-resume-probe.d.ts +29 -0
  415. package/dist/domains/comet-classic/classic-resume-probe.d.ts.map +1 -0
  416. package/dist/domains/comet-classic/classic-resume-probe.js +406 -0
  417. package/dist/domains/comet-classic/classic-resume-probe.js.map +1 -0
  418. package/dist/domains/comet-classic/classic-root-command.d.ts +5 -0
  419. package/dist/domains/comet-classic/classic-root-command.d.ts.map +1 -0
  420. package/dist/domains/comet-classic/classic-root-command.js +84 -0
  421. package/dist/domains/comet-classic/classic-root-command.js.map +1 -0
  422. package/dist/domains/comet-classic/classic-root-move.d.ts +119 -0
  423. package/dist/domains/comet-classic/classic-root-move.d.ts.map +1 -0
  424. package/dist/domains/comet-classic/classic-root-move.js +1737 -0
  425. package/dist/domains/comet-classic/classic-root-move.js.map +1 -0
  426. package/dist/domains/comet-classic/classic-runtime-evals.d.ts +9 -0
  427. package/dist/domains/comet-classic/classic-runtime-evals.d.ts.map +1 -0
  428. package/dist/domains/comet-classic/classic-runtime-evals.js +45 -0
  429. package/dist/domains/comet-classic/classic-runtime-evals.js.map +1 -0
  430. package/dist/domains/comet-classic/classic-runtime-run.d.ts +8 -0
  431. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -0
  432. package/dist/domains/comet-classic/classic-runtime-run.js +378 -0
  433. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -0
  434. package/dist/domains/comet-classic/classic-script-entry.d.ts +3 -0
  435. package/dist/domains/comet-classic/classic-script-entry.d.ts.map +1 -0
  436. package/dist/domains/comet-classic/classic-script-entry.js +31 -0
  437. package/dist/domains/comet-classic/classic-script-entry.js.map +1 -0
  438. package/dist/domains/comet-classic/classic-state-command.d.ts +3 -0
  439. package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -0
  440. package/dist/domains/comet-classic/classic-state-command.js +1239 -0
  441. package/dist/domains/comet-classic/classic-state-command.js.map +1 -0
  442. package/dist/domains/comet-classic/classic-state-entry.d.ts +2 -0
  443. package/dist/domains/comet-classic/classic-state-entry.d.ts.map +1 -0
  444. package/dist/domains/comet-classic/classic-state-entry.js +4 -0
  445. package/dist/domains/comet-classic/classic-state-entry.js.map +1 -0
  446. package/dist/domains/comet-classic/classic-state-events.d.ts +18 -0
  447. package/dist/domains/comet-classic/classic-state-events.d.ts.map +1 -0
  448. package/dist/domains/comet-classic/classic-state-events.js +14 -0
  449. package/dist/domains/comet-classic/classic-state-events.js.map +1 -0
  450. package/dist/domains/comet-classic/classic-state.d.ts +71 -0
  451. package/dist/domains/comet-classic/classic-state.d.ts.map +1 -0
  452. package/dist/domains/comet-classic/classic-state.js +251 -0
  453. package/dist/domains/comet-classic/classic-state.js.map +1 -0
  454. package/dist/domains/comet-classic/classic-store.d.ts +12 -0
  455. package/dist/domains/comet-classic/classic-store.d.ts.map +1 -0
  456. package/dist/domains/comet-classic/classic-store.js +140 -0
  457. package/dist/domains/comet-classic/classic-store.js.map +1 -0
  458. package/dist/domains/comet-classic/classic-transitions.d.ts +24 -0
  459. package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -0
  460. package/dist/domains/comet-classic/classic-transitions.js +158 -0
  461. package/dist/domains/comet-classic/classic-transitions.js.map +1 -0
  462. package/dist/domains/comet-classic/classic-validate-command.d.ts +3 -0
  463. package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -0
  464. package/dist/domains/comet-classic/classic-validate-command.js +174 -0
  465. package/dist/domains/comet-classic/classic-validate-command.js.map +1 -0
  466. package/dist/domains/comet-classic/classic-validate-entry.d.ts +2 -0
  467. package/dist/domains/comet-classic/classic-validate-entry.d.ts.map +1 -0
  468. package/dist/domains/comet-classic/classic-validate-entry.js +4 -0
  469. package/dist/domains/comet-classic/classic-validate-entry.js.map +1 -0
  470. package/dist/domains/comet-classic/index.d.ts +23 -0
  471. package/dist/domains/comet-classic/index.d.ts.map +1 -0
  472. package/dist/domains/comet-classic/index.js +23 -0
  473. package/dist/domains/comet-classic/index.js.map +1 -0
  474. package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
  475. package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
  476. package/dist/domains/comet-entry/current-selection-repair.js +19 -0
  477. package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
  478. package/dist/domains/comet-entry/current-selection.d.ts +28 -0
  479. package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
  480. package/dist/domains/comet-entry/current-selection.js +114 -0
  481. package/dist/domains/comet-entry/current-selection.js.map +1 -0
  482. package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
  483. package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
  484. package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
  485. package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
  486. package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
  487. package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
  488. package/dist/domains/comet-entry/entry-runtime.js +55 -0
  489. package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
  490. package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
  491. package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
  492. package/dist/domains/comet-entry/hook-adapter.js +202 -0
  493. package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
  494. package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
  495. package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
  496. package/dist/domains/comet-entry/hook-router-entry.js +88 -0
  497. package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
  498. package/dist/domains/comet-entry/hook-router.d.ts +32 -0
  499. package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
  500. package/dist/domains/comet-entry/hook-router.js +133 -0
  501. package/dist/domains/comet-entry/hook-router.js.map +1 -0
  502. package/dist/domains/comet-entry/hook-types.d.ts +20 -0
  503. package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
  504. package/dist/domains/comet-entry/hook-types.js +2 -0
  505. package/dist/domains/comet-entry/hook-types.js.map +1 -0
  506. package/dist/domains/comet-entry/init-workflow.d.ts +19 -0
  507. package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
  508. package/dist/domains/comet-entry/init-workflow.js +118 -0
  509. package/dist/domains/comet-entry/init-workflow.js.map +1 -0
  510. package/dist/domains/comet-entry/project-status.d.ts +3 -0
  511. package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
  512. package/dist/domains/comet-entry/project-status.js +291 -0
  513. package/dist/domains/comet-entry/project-status.js.map +1 -0
  514. package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
  515. package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
  516. package/dist/domains/comet-entry/resolve-entry.js +18 -0
  517. package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
  518. package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
  519. package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
  520. package/dist/domains/comet-entry/resume-probe.js +462 -0
  521. package/dist/domains/comet-entry/resume-probe.js.map +1 -0
  522. package/dist/domains/comet-entry/types.d.ts +60 -0
  523. package/dist/domains/comet-entry/types.d.ts.map +1 -0
  524. package/dist/domains/comet-entry/types.js +2 -0
  525. package/dist/domains/comet-entry/types.js.map +1 -0
  526. package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
  527. package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
  528. package/dist/domains/comet-entry/workflow-resolution.js +16 -0
  529. package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
  530. package/dist/domains/comet-native/index.d.ts +35 -0
  531. package/dist/domains/comet-native/index.d.ts.map +1 -0
  532. package/dist/domains/comet-native/index.js +35 -0
  533. package/dist/domains/comet-native/index.js.map +1 -0
  534. package/dist/domains/comet-native/native-acceptance.d.ts +53 -0
  535. package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
  536. package/dist/domains/comet-native/native-acceptance.js +658 -0
  537. package/dist/domains/comet-native/native-acceptance.js.map +1 -0
  538. package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
  539. package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
  540. package/dist/domains/comet-native/native-archive-content.js +159 -0
  541. package/dist/domains/comet-native/native-archive-content.js.map +1 -0
  542. package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
  543. package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
  544. package/dist/domains/comet-native/native-archive-inspection.js +97 -0
  545. package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
  546. package/dist/domains/comet-native/native-archive-preflight.d.ts +54 -0
  547. package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
  548. package/dist/domains/comet-native/native-archive-preflight.js +222 -0
  549. package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
  550. package/dist/domains/comet-native/native-archive-transaction.d.ts +20 -0
  551. package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
  552. package/dist/domains/comet-native/native-archive-transaction.js +1183 -0
  553. package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
  554. package/dist/domains/comet-native/native-archive.d.ts +36 -0
  555. package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
  556. package/dist/domains/comet-native/native-archive.js +422 -0
  557. package/dist/domains/comet-native/native-archive.js.map +1 -0
  558. package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
  559. package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
  560. package/dist/domains/comet-native/native-artifacts.js +204 -0
  561. package/dist/domains/comet-native/native-artifacts.js.map +1 -0
  562. package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
  563. package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
  564. package/dist/domains/comet-native/native-atomic-file.js +179 -0
  565. package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
  566. package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
  567. package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
  568. package/dist/domains/comet-native/native-bounded-file.js +184 -0
  569. package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
  570. package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
  571. package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
  572. package/dist/domains/comet-native/native-build-evidence.js +257 -0
  573. package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
  574. package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
  575. package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
  576. package/dist/domains/comet-native/native-canonical-hash.js +100 -0
  577. package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
  578. package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
  579. package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
  580. package/dist/domains/comet-native/native-change-recovery.js +15 -0
  581. package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
  582. package/dist/domains/comet-native/native-change.d.ts +66 -0
  583. package/dist/domains/comet-native/native-change.d.ts.map +1 -0
  584. package/dist/domains/comet-native/native-change.js +834 -0
  585. package/dist/domains/comet-native/native-change.js.map +1 -0
  586. package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
  587. package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
  588. package/dist/domains/comet-native/native-check-receipt-model.js +352 -0
  589. package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
  590. package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
  591. package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
  592. package/dist/domains/comet-native/native-check-receipt-storage.js +200 -0
  593. package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
  594. package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
  595. package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
  596. package/dist/domains/comet-native/native-check-receipt.js +453 -0
  597. package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
  598. package/dist/domains/comet-native/native-check.d.ts +24 -0
  599. package/dist/domains/comet-native/native-check.d.ts.map +1 -0
  600. package/dist/domains/comet-native/native-check.js +38 -0
  601. package/dist/domains/comet-native/native-check.js.map +1 -0
  602. package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
  603. package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
  604. package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
  605. package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
  606. package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
  607. package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
  608. package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
  609. package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
  610. package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
  611. package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
  612. package/dist/domains/comet-native/native-cli-entry.js +18 -0
  613. package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
  614. package/dist/domains/comet-native/native-cli.d.ts +7 -0
  615. package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
  616. package/dist/domains/comet-native/native-cli.js +1300 -0
  617. package/dist/domains/comet-native/native-cli.js.map +1 -0
  618. package/dist/domains/comet-native/native-config.d.ts +23 -0
  619. package/dist/domains/comet-native/native-config.d.ts.map +1 -0
  620. package/dist/domains/comet-native/native-config.js +60 -0
  621. package/dist/domains/comet-native/native-config.js.map +1 -0
  622. package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
  623. package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
  624. package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
  625. package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
  626. package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
  627. package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
  628. package/dist/domains/comet-native/native-conflict-radar.js +326 -0
  629. package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
  630. package/dist/domains/comet-native/native-continuation.d.ts +12 -0
  631. package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
  632. package/dist/domains/comet-native/native-continuation.js +201 -0
  633. package/dist/domains/comet-native/native-continuation.js.map +1 -0
  634. package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
  635. package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
  636. package/dist/domains/comet-native/native-contract-files.js +66 -0
  637. package/dist/domains/comet-native/native-contract-files.js.map +1 -0
  638. package/dist/domains/comet-native/native-contract.d.ts +41 -0
  639. package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
  640. package/dist/domains/comet-native/native-contract.js +142 -0
  641. package/dist/domains/comet-native/native-contract.js.map +1 -0
  642. package/dist/domains/comet-native/native-controller-trust.d.ts +22 -0
  643. package/dist/domains/comet-native/native-controller-trust.d.ts.map +1 -0
  644. package/dist/domains/comet-native/native-controller-trust.js +153 -0
  645. package/dist/domains/comet-native/native-controller-trust.js.map +1 -0
  646. package/dist/domains/comet-native/native-creation-authorization.d.ts +30 -0
  647. package/dist/domains/comet-native/native-creation-authorization.d.ts.map +1 -0
  648. package/dist/domains/comet-native/native-creation-authorization.js +110 -0
  649. package/dist/domains/comet-native/native-creation-authorization.js.map +1 -0
  650. package/dist/domains/comet-native/native-diagnostics.d.ts +25 -0
  651. package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
  652. package/dist/domains/comet-native/native-diagnostics.js +551 -0
  653. package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
  654. package/dist/domains/comet-native/native-doctor.d.ts +12 -0
  655. package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
  656. package/dist/domains/comet-native/native-doctor.js +771 -0
  657. package/dist/domains/comet-native/native-doctor.js.map +1 -0
  658. package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
  659. package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
  660. package/dist/domains/comet-native/native-evidence-retention.js +916 -0
  661. package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
  662. package/dist/domains/comet-native/native-evidence-storage.d.ts +54 -0
  663. package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
  664. package/dist/domains/comet-native/native-evidence-storage.js +401 -0
  665. package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
  666. package/dist/domains/comet-native/native-file-identity.d.ts +3 -0
  667. package/dist/domains/comet-native/native-file-identity.d.ts.map +1 -0
  668. package/dist/domains/comet-native/native-file-identity.js +2 -0
  669. package/dist/domains/comet-native/native-file-identity.js.map +1 -0
  670. package/dist/domains/comet-native/native-findings.d.ts +8 -0
  671. package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
  672. package/dist/domains/comet-native/native-findings.js +254 -0
  673. package/dist/domains/comet-native/native-findings.js.map +1 -0
  674. package/dist/domains/comet-native/native-guards.d.ts +8 -0
  675. package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
  676. package/dist/domains/comet-native/native-guards.js +140 -0
  677. package/dist/domains/comet-native/native-guards.js.map +1 -0
  678. package/dist/domains/comet-native/native-hash.d.ts +3 -0
  679. package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
  680. package/dist/domains/comet-native/native-hash.js +12 -0
  681. package/dist/domains/comet-native/native-hash.js.map +1 -0
  682. package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
  683. package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
  684. package/dist/domains/comet-native/native-hook-guard.js +154 -0
  685. package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
  686. package/dist/domains/comet-native/native-independent-review.d.ts +28 -0
  687. package/dist/domains/comet-native/native-independent-review.d.ts.map +1 -0
  688. package/dist/domains/comet-native/native-independent-review.js +134 -0
  689. package/dist/domains/comet-native/native-independent-review.js.map +1 -0
  690. package/dist/domains/comet-native/native-lock.d.ts +47 -0
  691. package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
  692. package/dist/domains/comet-native/native-lock.js +390 -0
  693. package/dist/domains/comet-native/native-lock.js.map +1 -0
  694. package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
  695. package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
  696. package/dist/domains/comet-native/native-mutation-lock.js +66 -0
  697. package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
  698. package/dist/domains/comet-native/native-paths.d.ts +10 -0
  699. package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
  700. package/dist/domains/comet-native/native-paths.js +160 -0
  701. package/dist/domains/comet-native/native-paths.js.map +1 -0
  702. package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
  703. package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
  704. package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
  705. package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
  706. package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
  707. package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
  708. package/dist/domains/comet-native/native-protected-file.js +510 -0
  709. package/dist/domains/comet-native/native-protected-file.js.map +1 -0
  710. package/dist/domains/comet-native/native-redaction.d.ts +2 -0
  711. package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
  712. package/dist/domains/comet-native/native-redaction.js +18 -0
  713. package/dist/domains/comet-native/native-redaction.js.map +1 -0
  714. package/dist/domains/comet-native/native-repair-integration.d.ts +46 -0
  715. package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
  716. package/dist/domains/comet-native/native-repair-integration.js +235 -0
  717. package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
  718. package/dist/domains/comet-native/native-repair-runtime.d.ts +78 -0
  719. package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
  720. package/dist/domains/comet-native/native-repair-runtime.js +593 -0
  721. package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
  722. package/dist/domains/comet-native/native-repair-stagnation.d.ts +89 -0
  723. package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
  724. package/dist/domains/comet-native/native-repair-stagnation.js +308 -0
  725. package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
  726. package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
  727. package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
  728. package/dist/domains/comet-native/native-resume-view.js +105 -0
  729. package/dist/domains/comet-native/native-resume-view.js.map +1 -0
  730. package/dist/domains/comet-native/native-review-contract.d.ts +6 -0
  731. package/dist/domains/comet-native/native-review-contract.d.ts.map +1 -0
  732. package/dist/domains/comet-native/native-review-contract.js +6 -0
  733. package/dist/domains/comet-native/native-review-contract.js.map +1 -0
  734. package/dist/domains/comet-native/native-review-identity.d.ts +50 -0
  735. package/dist/domains/comet-native/native-review-identity.d.ts.map +1 -0
  736. package/dist/domains/comet-native/native-review-identity.js +209 -0
  737. package/dist/domains/comet-native/native-review-identity.js.map +1 -0
  738. package/dist/domains/comet-native/native-review-signer.d.ts +24 -0
  739. package/dist/domains/comet-native/native-review-signer.d.ts.map +1 -0
  740. package/dist/domains/comet-native/native-review-signer.js +125 -0
  741. package/dist/domains/comet-native/native-review-signer.js.map +1 -0
  742. package/dist/domains/comet-native/native-review-trust.d.ts +35 -0
  743. package/dist/domains/comet-native/native-review-trust.d.ts.map +1 -0
  744. package/dist/domains/comet-native/native-review-trust.js +176 -0
  745. package/dist/domains/comet-native/native-review-trust.js.map +1 -0
  746. package/dist/domains/comet-native/native-revision.d.ts +20 -0
  747. package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
  748. package/dist/domains/comet-native/native-revision.js +32 -0
  749. package/dist/domains/comet-native/native-revision.js.map +1 -0
  750. package/dist/domains/comet-native/native-root-move.d.ts +20 -0
  751. package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
  752. package/dist/domains/comet-native/native-root-move.js +818 -0
  753. package/dist/domains/comet-native/native-root-move.js.map +1 -0
  754. package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
  755. package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
  756. package/dist/domains/comet-native/native-run-consistency.js +136 -0
  757. package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
  758. package/dist/domains/comet-native/native-run-store.d.ts +41 -0
  759. package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
  760. package/dist/domains/comet-native/native-run-store.js +452 -0
  761. package/dist/domains/comet-native/native-run-store.js.map +1 -0
  762. package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
  763. package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
  764. package/dist/domains/comet-native/native-runtime-package.js +72 -0
  765. package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
  766. package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
  767. package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
  768. package/dist/domains/comet-native/native-schema-migration.js +900 -0
  769. package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
  770. package/dist/domains/comet-native/native-selection.d.ts +12 -0
  771. package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
  772. package/dist/domains/comet-native/native-selection.js +52 -0
  773. package/dist/domains/comet-native/native-selection.js.map +1 -0
  774. package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
  775. package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
  776. package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
  777. package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
  778. package/dist/domains/comet-native/native-snapshot.d.ts +78 -0
  779. package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
  780. package/dist/domains/comet-native/native-snapshot.js +2609 -0
  781. package/dist/domains/comet-native/native-snapshot.js.map +1 -0
  782. package/dist/domains/comet-native/native-specs.d.ts +12 -0
  783. package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
  784. package/dist/domains/comet-native/native-specs.js +270 -0
  785. package/dist/domains/comet-native/native-specs.js.map +1 -0
  786. package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
  787. package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
  788. package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
  789. package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
  790. package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
  791. package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
  792. package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
  793. package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
  794. package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
  795. package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
  796. package/dist/domains/comet-native/native-trajectory.js +27 -0
  797. package/dist/domains/comet-native/native-trajectory.js.map +1 -0
  798. package/dist/domains/comet-native/native-transaction.d.ts +45 -0
  799. package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
  800. package/dist/domains/comet-native/native-transaction.js +846 -0
  801. package/dist/domains/comet-native/native-transaction.js.map +1 -0
  802. package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
  803. package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
  804. package/dist/domains/comet-native/native-transition-evidence.js +27 -0
  805. package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
  806. package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
  807. package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
  808. package/dist/domains/comet-native/native-transition-journal.js +819 -0
  809. package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
  810. package/dist/domains/comet-native/native-transitions.d.ts +15 -0
  811. package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
  812. package/dist/domains/comet-native/native-transitions.js +683 -0
  813. package/dist/domains/comet-native/native-transitions.js.map +1 -0
  814. package/dist/domains/comet-native/native-types.d.ts +556 -0
  815. package/dist/domains/comet-native/native-types.d.ts.map +1 -0
  816. package/dist/domains/comet-native/native-types.js +8 -0
  817. package/dist/domains/comet-native/native-types.js.map +1 -0
  818. package/dist/domains/comet-native/native-verification-evidence.d.ts +136 -0
  819. package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
  820. package/dist/domains/comet-native/native-verification-evidence.js +824 -0
  821. package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
  822. package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts +188 -0
  823. package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts.map +1 -0
  824. package/dist/domains/comet-native/native-verification-receipt-runtime.js +1129 -0
  825. package/dist/domains/comet-native/native-verification-receipt-runtime.js.map +1 -0
  826. package/dist/domains/comet-native/native-verification-receipt.d.ts +165 -0
  827. package/dist/domains/comet-native/native-verification-receipt.d.ts.map +1 -0
  828. package/dist/domains/comet-native/native-verification-receipt.js +636 -0
  829. package/dist/domains/comet-native/native-verification-receipt.js.map +1 -0
  830. package/dist/domains/comet-native/native-verification-runtime.d.ts +61 -0
  831. package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
  832. package/dist/domains/comet-native/native-verification-runtime.js +609 -0
  833. package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
  834. package/dist/domains/comet-native/native-verification-scope.d.ts +118 -0
  835. package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
  836. package/dist/domains/comet-native/native-verification-scope.js +1045 -0
  837. package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
  838. package/dist/domains/comet-native/native-workspace.d.ts +46 -0
  839. package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
  840. package/dist/domains/comet-native/native-workspace.js +276 -0
  841. package/dist/domains/comet-native/native-workspace.js.map +1 -0
  842. package/dist/domains/dashboard/collector.d.ts +12 -0
  843. package/dist/domains/dashboard/collector.d.ts.map +1 -0
  844. package/dist/domains/dashboard/collector.js +582 -0
  845. package/dist/domains/dashboard/collector.js.map +1 -0
  846. package/dist/domains/dashboard/git.d.ts +8 -0
  847. package/dist/domains/dashboard/git.d.ts.map +1 -0
  848. package/dist/domains/dashboard/git.js +69 -0
  849. package/dist/domains/dashboard/git.js.map +1 -0
  850. package/dist/domains/dashboard/native-adapter.d.ts +157 -0
  851. package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
  852. package/dist/domains/dashboard/native-adapter.js +302 -0
  853. package/dist/domains/dashboard/native-adapter.js.map +1 -0
  854. package/dist/domains/dashboard/native-collector.d.ts +6 -0
  855. package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
  856. package/dist/domains/dashboard/native-collector.js +289 -0
  857. package/dist/domains/dashboard/native-collector.js.map +1 -0
  858. package/dist/domains/dashboard/next-action.d.ts +17 -0
  859. package/dist/domains/dashboard/next-action.d.ts.map +1 -0
  860. package/dist/domains/dashboard/next-action.js +83 -0
  861. package/dist/domains/dashboard/next-action.js.map +1 -0
  862. package/dist/domains/dashboard/open-browser.d.ts +9 -0
  863. package/dist/domains/dashboard/open-browser.d.ts.map +1 -0
  864. package/dist/domains/dashboard/open-browser.js +40 -0
  865. package/dist/domains/dashboard/open-browser.js.map +1 -0
  866. package/dist/domains/dashboard/risk.d.ts +24 -0
  867. package/dist/domains/dashboard/risk.d.ts.map +1 -0
  868. package/dist/domains/dashboard/risk.js +97 -0
  869. package/dist/domains/dashboard/risk.js.map +1 -0
  870. package/dist/domains/dashboard/server.d.ts +21 -0
  871. package/dist/domains/dashboard/server.d.ts.map +1 -0
  872. package/dist/domains/dashboard/server.js +149 -0
  873. package/dist/domains/dashboard/server.js.map +1 -0
  874. package/dist/domains/dashboard/task-parser.d.ts +13 -0
  875. package/dist/domains/dashboard/task-parser.d.ts.map +1 -0
  876. package/dist/domains/dashboard/task-parser.js +82 -0
  877. package/dist/domains/dashboard/task-parser.js.map +1 -0
  878. package/dist/domains/dashboard/types.d.ts +132 -0
  879. package/dist/domains/dashboard/types.d.ts.map +1 -0
  880. package/dist/domains/dashboard/types.js +10 -0
  881. package/dist/domains/dashboard/types.js.map +1 -0
  882. package/dist/domains/dashboard/verify-parser.d.ts +18 -0
  883. package/dist/domains/dashboard/verify-parser.d.ts.map +1 -0
  884. package/dist/domains/dashboard/verify-parser.js +100 -0
  885. package/dist/domains/dashboard/verify-parser.js.map +1 -0
  886. package/dist/domains/dashboard/web/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  887. package/dist/domains/dashboard/web/assets/arc-BXWNV2Qv.js +1 -0
  888. package/dist/domains/dashboard/web/assets/architectureDiagram-3BPJPVTR-CjVHPivo.js +36 -0
  889. package/dist/domains/dashboard/web/assets/blockDiagram-GPEHLZMM-P2PGImSM.js +132 -0
  890. package/dist/domains/dashboard/web/assets/c4Diagram-AAUBKEIU-fTj6Xhs1.js +10 -0
  891. package/dist/domains/dashboard/web/assets/channel--JtnhJr8.js +1 -0
  892. package/dist/domains/dashboard/web/assets/chunk-2J33WTMH-BjFDZ5yo.js +1 -0
  893. package/dist/domains/dashboard/web/assets/chunk-4BX2VUAB-BAUkbZdT.js +1 -0
  894. package/dist/domains/dashboard/web/assets/chunk-55IACEB6-DBmuiYme.js +1 -0
  895. package/dist/domains/dashboard/web/assets/chunk-727SXJPM-Do9ufCgY.js +206 -0
  896. package/dist/domains/dashboard/web/assets/chunk-AQP2D5EJ-qRQWlB5d.js +231 -0
  897. package/dist/domains/dashboard/web/assets/chunk-FMBD7UC4-BzDzeJ4_.js +15 -0
  898. package/dist/domains/dashboard/web/assets/chunk-ND2GUHAM-OQcAmIvL.js +1 -0
  899. package/dist/domains/dashboard/web/assets/chunk-QZHKN3VN-BiRfH4d2.js +1 -0
  900. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BRGmx8Iz.js +1 -0
  901. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BRGmx8Iz.js +1 -0
  902. package/dist/domains/dashboard/web/assets/cose-bilkent-S5V4N54A-CZk37fGn.js +1 -0
  903. package/dist/domains/dashboard/web/assets/cynefin-VYW2F7L2-B3F-qRTJ.js +166 -0
  904. package/dist/domains/dashboard/web/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
  905. package/dist/domains/dashboard/web/assets/dagre-BM42HDAG-D5BQ0eqN.js +4 -0
  906. package/dist/domains/dashboard/web/assets/defaultLocale-DX6XiGOO.js +1 -0
  907. package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
  908. package/dist/domains/dashboard/web/assets/diagram-2AECGRRQ-33mXstha.js +43 -0
  909. package/dist/domains/dashboard/web/assets/diagram-5GNKFQAL-BWHCMFvD.js +10 -0
  910. package/dist/domains/dashboard/web/assets/diagram-KO2AKTUF-DrPGimEt.js +3 -0
  911. package/dist/domains/dashboard/web/assets/diagram-LMA3HP47-BBlsg7jG.js +24 -0
  912. package/dist/domains/dashboard/web/assets/diagram-OG6HWLK6-CsaFSpHi.js +24 -0
  913. package/dist/domains/dashboard/web/assets/erDiagram-TEJ5UH35-CoB0mzhk.js +85 -0
  914. package/dist/domains/dashboard/web/assets/flowDiagram-I6XJVG4X-lT53XfSE.js +162 -0
  915. package/dist/domains/dashboard/web/assets/ganttDiagram-6RSMTGT7-D1SQ56fl.js +292 -0
  916. package/dist/domains/dashboard/web/assets/gitGraphDiagram-PVQCEYII-D4oDMS5x.js +106 -0
  917. package/dist/domains/dashboard/web/assets/graph--OzhPTMs.js +1 -0
  918. package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
  919. package/dist/domains/dashboard/web/assets/index-DlSYK56b.js +139 -0
  920. package/dist/domains/dashboard/web/assets/index-Msce_H_q.js +24 -0
  921. package/dist/domains/dashboard/web/assets/index-QO0z6F4w.js +10 -0
  922. package/dist/domains/dashboard/web/assets/infoDiagram-5YYISTIA-BeICn98s.js +2 -0
  923. package/dist/domains/dashboard/web/assets/init-Gi6I4Gst.js +1 -0
  924. package/dist/domains/dashboard/web/assets/ishikawaDiagram-YF4QCWOH-Dkspu33d.js +70 -0
  925. package/dist/domains/dashboard/web/assets/journeyDiagram-JHISSGLW-C-EM1sZl.js +139 -0
  926. package/dist/domains/dashboard/web/assets/kanban-definition-UN3LZRKU-BTbB0IO2.js +89 -0
  927. package/dist/domains/dashboard/web/assets/katex-HP8lGamR.js +257 -0
  928. package/dist/domains/dashboard/web/assets/layout-SsrduOYp.js +1 -0
  929. package/dist/domains/dashboard/web/assets/linear-Cp0UrqDr.js +1 -0
  930. package/dist/domains/dashboard/web/assets/marked.esm-DECB3bxB.js +64 -0
  931. package/dist/domains/dashboard/web/assets/mermaid.core-CucmqsLW.js +301 -0
  932. package/dist/domains/dashboard/web/assets/mindmap-definition-RKZ34NQL-CjEshF1X.js +96 -0
  933. package/dist/domains/dashboard/web/assets/ordinal-Cboi1Yqb.js +1 -0
  934. package/dist/domains/dashboard/web/assets/pieDiagram-4H26LBE5-DrwFnX1b.js +30 -0
  935. package/dist/domains/dashboard/web/assets/purify.es-VaSPOPhr.js +3 -0
  936. package/dist/domains/dashboard/web/assets/quadrantDiagram-W4KKPZXB-CjG6pBR2.js +7 -0
  937. package/dist/domains/dashboard/web/assets/requirementDiagram-4Y6WPE33-BpUQVqCV.js +84 -0
  938. package/dist/domains/dashboard/web/assets/sankeyDiagram-5OEKKPKP-BeGkEvzR.js +40 -0
  939. package/dist/domains/dashboard/web/assets/sequenceDiagram-3UESZ5HK-sSTU3MCO.js +162 -0
  940. package/dist/domains/dashboard/web/assets/stateDiagram-AJRCARHV-CcFBc6qh.js +1 -0
  941. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-D5zZYi4x.js +1 -0
  942. package/dist/domains/dashboard/web/assets/timeline-definition-PNZ67QCA-DCN7NjEs.js +120 -0
  943. package/dist/domains/dashboard/web/assets/vennDiagram-CIIHVFJN-DZAN1_rr.js +34 -0
  944. package/dist/domains/dashboard/web/assets/wardleyDiagram-YWT4CUSO-FfkJfr4C.js +78 -0
  945. package/dist/domains/dashboard/web/assets/xychartDiagram-2RQKCTM6-CD8B-EmR.js +7 -0
  946. package/dist/domains/dashboard/web/favicon.png +0 -0
  947. package/dist/domains/dashboard/web/index.html +16 -0
  948. package/dist/domains/dashboard/yaml.d.ts +13 -0
  949. package/dist/domains/dashboard/yaml.d.ts.map +1 -0
  950. package/dist/domains/dashboard/yaml.js +61 -0
  951. package/dist/domains/dashboard/yaml.js.map +1 -0
  952. package/dist/domains/engine/evals.d.ts +4 -0
  953. package/dist/domains/engine/evals.d.ts.map +1 -0
  954. package/dist/domains/engine/evals.js +25 -0
  955. package/dist/domains/engine/evals.js.map +1 -0
  956. package/dist/domains/engine/guardrails.d.ts +10 -0
  957. package/dist/domains/engine/guardrails.d.ts.map +1 -0
  958. package/dist/domains/engine/guardrails.js +25 -0
  959. package/dist/domains/engine/guardrails.js.map +1 -0
  960. package/dist/domains/engine/loop.d.ts +15 -0
  961. package/dist/domains/engine/loop.d.ts.map +1 -0
  962. package/dist/domains/engine/loop.js +126 -0
  963. package/dist/domains/engine/loop.js.map +1 -0
  964. package/dist/domains/engine/manual-run.d.ts +30 -0
  965. package/dist/domains/engine/manual-run.d.ts.map +1 -0
  966. package/dist/domains/engine/manual-run.js +184 -0
  967. package/dist/domains/engine/manual-run.js.map +1 -0
  968. package/dist/domains/engine/protected-run-file.d.ts +15 -0
  969. package/dist/domains/engine/protected-run-file.d.ts.map +1 -0
  970. package/dist/domains/engine/protected-run-file.js +76 -0
  971. package/dist/domains/engine/protected-run-file.js.map +1 -0
  972. package/dist/domains/engine/resolver.d.ts +20 -0
  973. package/dist/domains/engine/resolver.d.ts.map +1 -0
  974. package/dist/domains/engine/resolver.js +36 -0
  975. package/dist/domains/engine/resolver.js.map +1 -0
  976. package/dist/domains/engine/run-store.d.ts +14 -0
  977. package/dist/domains/engine/run-store.d.ts.map +1 -0
  978. package/dist/domains/engine/run-store.js +81 -0
  979. package/dist/domains/engine/run-store.js.map +1 -0
  980. package/dist/domains/engine/runtime-types.d.ts +11 -0
  981. package/dist/domains/engine/runtime-types.d.ts.map +1 -0
  982. package/dist/domains/engine/runtime-types.js +2 -0
  983. package/dist/domains/engine/runtime-types.js.map +1 -0
  984. package/dist/domains/engine/standalone-run.d.ts +13 -0
  985. package/dist/domains/engine/standalone-run.d.ts.map +1 -0
  986. package/dist/domains/engine/standalone-run.js +27 -0
  987. package/dist/domains/engine/standalone-run.js.map +1 -0
  988. package/dist/domains/engine/state.d.ts +11 -0
  989. package/dist/domains/engine/state.d.ts.map +1 -0
  990. package/dist/domains/engine/state.js +149 -0
  991. package/dist/domains/engine/state.js.map +1 -0
  992. package/dist/domains/engine/storage-layout.d.ts +14 -0
  993. package/dist/domains/engine/storage-layout.d.ts.map +1 -0
  994. package/dist/domains/engine/storage-layout.js +32 -0
  995. package/dist/domains/engine/storage-layout.js.map +1 -0
  996. package/dist/domains/engine/storage-run.d.ts +9 -0
  997. package/dist/domains/engine/storage-run.d.ts.map +1 -0
  998. package/dist/domains/engine/storage-run.js +116 -0
  999. package/dist/domains/engine/storage-run.js.map +1 -0
  1000. package/dist/domains/engine/types.d.ts +51 -0
  1001. package/dist/domains/engine/types.d.ts.map +1 -0
  1002. package/dist/domains/engine/types.js +2 -0
  1003. package/dist/domains/engine/types.js.map +1 -0
  1004. package/dist/domains/eval/index.d.ts +7 -0
  1005. package/dist/domains/eval/index.d.ts.map +1 -0
  1006. package/dist/domains/eval/index.js +11 -0
  1007. package/dist/domains/eval/index.js.map +1 -0
  1008. package/dist/domains/eval/repository-benchmarks.d.ts +6 -0
  1009. package/dist/domains/eval/repository-benchmarks.d.ts.map +1 -0
  1010. package/dist/domains/eval/repository-benchmarks.js +10 -0
  1011. package/dist/domains/eval/repository-benchmarks.js.map +1 -0
  1012. package/dist/domains/factory/artifacts.d.ts +53 -0
  1013. package/dist/domains/factory/artifacts.d.ts.map +1 -0
  1014. package/dist/domains/factory/artifacts.js +8 -0
  1015. package/dist/domains/factory/artifacts.js.map +1 -0
  1016. package/dist/domains/factory/package.d.ts +7 -0
  1017. package/dist/domains/factory/package.d.ts.map +1 -0
  1018. package/dist/domains/factory/package.js +1982 -0
  1019. package/dist/domains/factory/package.js.map +1 -0
  1020. package/dist/domains/factory/types.d.ts +127 -0
  1021. package/dist/domains/factory/types.d.ts.map +1 -0
  1022. package/dist/domains/factory/types.js +2 -0
  1023. package/dist/domains/factory/types.js.map +1 -0
  1024. package/dist/domains/integrations/codegraph.d.ts +17 -0
  1025. package/dist/domains/integrations/codegraph.d.ts.map +1 -0
  1026. package/dist/domains/integrations/codegraph.js +266 -0
  1027. package/dist/domains/integrations/codegraph.js.map +1 -0
  1028. package/dist/domains/integrations/openspec.d.ts +28 -0
  1029. package/dist/domains/integrations/openspec.d.ts.map +1 -0
  1030. package/dist/domains/integrations/openspec.js +557 -0
  1031. package/dist/domains/integrations/openspec.js.map +1 -0
  1032. package/dist/{core → domains/integrations}/superpowers.d.ts +10 -2
  1033. package/dist/domains/integrations/superpowers.d.ts.map +1 -0
  1034. package/dist/{core → domains/integrations}/superpowers.js +59 -13
  1035. package/dist/domains/integrations/superpowers.js.map +1 -0
  1036. package/dist/domains/skill/discovery.d.ts +17 -0
  1037. package/dist/domains/skill/discovery.d.ts.map +1 -0
  1038. package/dist/domains/skill/discovery.js +80 -0
  1039. package/dist/domains/skill/discovery.js.map +1 -0
  1040. package/dist/domains/skill/find.d.ts +41 -0
  1041. package/dist/domains/skill/find.d.ts.map +1 -0
  1042. package/dist/domains/skill/find.js +252 -0
  1043. package/dist/domains/skill/find.js.map +1 -0
  1044. package/dist/domains/skill/install.d.ts +11 -0
  1045. package/dist/domains/skill/install.d.ts.map +1 -0
  1046. package/dist/domains/skill/install.js +82 -0
  1047. package/dist/domains/skill/install.js.map +1 -0
  1048. package/dist/domains/skill/inventory.d.ts +19 -0
  1049. package/dist/domains/skill/inventory.d.ts.map +1 -0
  1050. package/dist/domains/skill/inventory.js +64 -0
  1051. package/dist/domains/skill/inventory.js.map +1 -0
  1052. package/dist/domains/skill/json-object.d.ts +13 -0
  1053. package/dist/domains/skill/json-object.d.ts.map +1 -0
  1054. package/dist/domains/skill/json-object.js +24 -0
  1055. package/dist/domains/skill/json-object.js.map +1 -0
  1056. package/dist/domains/skill/languages.d.ts +20 -0
  1057. package/dist/domains/skill/languages.d.ts.map +1 -0
  1058. package/dist/domains/skill/languages.js +24 -0
  1059. package/dist/domains/skill/languages.js.map +1 -0
  1060. package/dist/domains/skill/load.d.ts +5 -0
  1061. package/dist/domains/skill/load.d.ts.map +1 -0
  1062. package/dist/domains/skill/load.js +313 -0
  1063. package/dist/domains/skill/load.js.map +1 -0
  1064. package/dist/domains/skill/managed-markdown.d.ts +14 -0
  1065. package/dist/domains/skill/managed-markdown.d.ts.map +1 -0
  1066. package/dist/domains/skill/managed-markdown.js +126 -0
  1067. package/dist/domains/skill/managed-markdown.js.map +1 -0
  1068. package/dist/domains/skill/platform-inspect.d.ts +13 -0
  1069. package/dist/domains/skill/platform-inspect.d.ts.map +1 -0
  1070. package/dist/domains/skill/platform-inspect.js +193 -0
  1071. package/dist/domains/skill/platform-inspect.js.map +1 -0
  1072. package/dist/domains/skill/platform-install.d.ts +102 -0
  1073. package/dist/domains/skill/platform-install.d.ts.map +1 -0
  1074. package/dist/domains/skill/platform-install.js +1333 -0
  1075. package/dist/domains/skill/platform-install.js.map +1 -0
  1076. package/dist/domains/skill/preferences.d.ts +42 -0
  1077. package/dist/domains/skill/preferences.d.ts.map +1 -0
  1078. package/dist/domains/skill/preferences.js +118 -0
  1079. package/dist/domains/skill/preferences.js.map +1 -0
  1080. package/dist/domains/skill/project-instructions.d.ts +22 -0
  1081. package/dist/domains/skill/project-instructions.d.ts.map +1 -0
  1082. package/dist/domains/skill/project-instructions.js +69 -0
  1083. package/dist/domains/skill/project-instructions.js.map +1 -0
  1084. package/dist/domains/skill/snapshot.d.ts +8 -0
  1085. package/dist/domains/skill/snapshot.d.ts.map +1 -0
  1086. package/dist/domains/skill/snapshot.js +184 -0
  1087. package/dist/domains/skill/snapshot.js.map +1 -0
  1088. package/dist/domains/skill/types.d.ts +85 -0
  1089. package/dist/domains/skill/types.d.ts.map +1 -0
  1090. package/dist/domains/skill/types.js +2 -0
  1091. package/dist/{core → domains/skill}/types.js.map +1 -1
  1092. package/dist/domains/skill/uninstall.d.ts +19 -0
  1093. package/dist/domains/skill/uninstall.d.ts.map +1 -0
  1094. package/dist/domains/skill/uninstall.js +946 -0
  1095. package/dist/domains/skill/uninstall.js.map +1 -0
  1096. package/dist/domains/skill/validate.d.ts +3 -0
  1097. package/dist/domains/skill/validate.d.ts.map +1 -0
  1098. package/dist/domains/skill/validate.js +81 -0
  1099. package/dist/domains/skill/validate.js.map +1 -0
  1100. package/dist/domains/workflow-contract/builtins.d.ts +14 -0
  1101. package/dist/domains/workflow-contract/builtins.d.ts.map +1 -0
  1102. package/dist/domains/workflow-contract/builtins.js +372 -0
  1103. package/dist/domains/workflow-contract/builtins.js.map +1 -0
  1104. package/dist/domains/workflow-contract/contained-atomic-write.d.ts +21 -0
  1105. package/dist/domains/workflow-contract/contained-atomic-write.d.ts.map +1 -0
  1106. package/dist/domains/workflow-contract/contained-atomic-write.js +235 -0
  1107. package/dist/domains/workflow-contract/contained-atomic-write.js.map +1 -0
  1108. package/dist/domains/workflow-contract/hash.d.ts +3 -0
  1109. package/dist/domains/workflow-contract/hash.d.ts.map +1 -0
  1110. package/dist/domains/workflow-contract/hash.js +16 -0
  1111. package/dist/domains/workflow-contract/hash.js.map +1 -0
  1112. package/dist/domains/workflow-contract/index.d.ts +16 -0
  1113. package/dist/domains/workflow-contract/index.d.ts.map +1 -0
  1114. package/dist/domains/workflow-contract/index.js +11 -0
  1115. package/dist/domains/workflow-contract/index.js.map +1 -0
  1116. package/dist/domains/workflow-contract/normalize.d.ts +3 -0
  1117. package/dist/domains/workflow-contract/normalize.d.ts.map +1 -0
  1118. package/dist/domains/workflow-contract/normalize.js +165 -0
  1119. package/dist/domains/workflow-contract/normalize.js.map +1 -0
  1120. package/dist/domains/workflow-contract/project-config-reader.d.ts +24 -0
  1121. package/dist/domains/workflow-contract/project-config-reader.d.ts.map +1 -0
  1122. package/dist/domains/workflow-contract/project-config-reader.js +54 -0
  1123. package/dist/domains/workflow-contract/project-config-reader.js.map +1 -0
  1124. package/dist/domains/workflow-contract/project-config-transaction.d.ts +20 -0
  1125. package/dist/domains/workflow-contract/project-config-transaction.d.ts.map +1 -0
  1126. package/dist/domains/workflow-contract/project-config-transaction.js +293 -0
  1127. package/dist/domains/workflow-contract/project-config-transaction.js.map +1 -0
  1128. package/dist/domains/workflow-contract/project-config-writer.d.ts +13 -0
  1129. package/dist/domains/workflow-contract/project-config-writer.d.ts.map +1 -0
  1130. package/dist/domains/workflow-contract/project-config-writer.js +142 -0
  1131. package/dist/domains/workflow-contract/project-config-writer.js.map +1 -0
  1132. package/dist/domains/workflow-contract/project-config.d.ts +32 -0
  1133. package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
  1134. package/dist/domains/workflow-contract/project-config.js +1566 -0
  1135. package/dist/domains/workflow-contract/project-config.js.map +1 -0
  1136. package/dist/domains/workflow-contract/protected-project-path.d.ts +34 -0
  1137. package/dist/domains/workflow-contract/protected-project-path.d.ts.map +1 -0
  1138. package/dist/domains/workflow-contract/protected-project-path.js +162 -0
  1139. package/dist/domains/workflow-contract/protected-project-path.js.map +1 -0
  1140. package/dist/domains/workflow-contract/types.d.ts +193 -0
  1141. package/dist/domains/workflow-contract/types.d.ts.map +1 -0
  1142. package/dist/domains/workflow-contract/types.js +2 -0
  1143. package/dist/domains/workflow-contract/types.js.map +1 -0
  1144. package/dist/domains/workflow-contract/validation.d.ts +3 -0
  1145. package/dist/domains/workflow-contract/validation.d.ts.map +1 -0
  1146. package/dist/domains/workflow-contract/validation.js +189 -0
  1147. package/dist/domains/workflow-contract/validation.js.map +1 -0
  1148. package/dist/platform/fs/file-identity.d.ts +9 -0
  1149. package/dist/platform/fs/file-identity.d.ts.map +1 -0
  1150. package/dist/platform/fs/file-identity.js +21 -0
  1151. package/dist/platform/fs/file-identity.js.map +1 -0
  1152. package/dist/{utils → platform/fs}/file-system.d.ts +3 -3
  1153. package/dist/platform/fs/file-system.d.ts.map +1 -0
  1154. package/dist/{utils → platform/fs}/file-system.js +31 -17
  1155. package/dist/platform/fs/file-system.js.map +1 -0
  1156. package/dist/platform/fs/race-safe-read.d.ts +47 -0
  1157. package/dist/platform/fs/race-safe-read.d.ts.map +1 -0
  1158. package/dist/platform/fs/race-safe-read.js +132 -0
  1159. package/dist/platform/fs/race-safe-read.js.map +1 -0
  1160. package/dist/platform/fs/trusted-readonly-file.d.ts +31 -0
  1161. package/dist/platform/fs/trusted-readonly-file.d.ts.map +1 -0
  1162. package/dist/platform/fs/trusted-readonly-file.js +107 -0
  1163. package/dist/platform/fs/trusted-readonly-file.js.map +1 -0
  1164. package/dist/{core → platform/install}/detect.d.ts +5 -2
  1165. package/dist/platform/install/detect.d.ts.map +1 -0
  1166. package/dist/{core → platform/install}/detect.js +18 -5
  1167. package/dist/platform/install/detect.js.map +1 -0
  1168. package/dist/platform/install/platform-targets.d.ts +8 -0
  1169. package/dist/platform/install/platform-targets.d.ts.map +1 -0
  1170. package/dist/platform/install/platform-targets.js +31 -0
  1171. package/dist/platform/install/platform-targets.js.map +1 -0
  1172. package/dist/{core → platform/install}/platforms.d.ts +10 -1
  1173. package/dist/platform/install/platforms.d.ts.map +1 -0
  1174. package/dist/{core → platform/install}/platforms.js +68 -4
  1175. package/dist/platform/install/platforms.js.map +1 -0
  1176. package/dist/platform/install/project-registry.d.ts +38 -0
  1177. package/dist/platform/install/project-registry.d.ts.map +1 -0
  1178. package/dist/platform/install/project-registry.js +213 -0
  1179. package/dist/platform/install/project-registry.js.map +1 -0
  1180. package/dist/platform/install/skill-root-owner.d.ts +15 -0
  1181. package/dist/platform/install/skill-root-owner.d.ts.map +1 -0
  1182. package/dist/platform/install/skill-root-owner.js +68 -0
  1183. package/dist/platform/install/skill-root-owner.js.map +1 -0
  1184. package/dist/platform/install/types.d.ts +3 -0
  1185. package/dist/platform/install/types.d.ts.map +1 -0
  1186. package/dist/platform/install/types.js +2 -0
  1187. package/dist/platform/install/types.js.map +1 -0
  1188. package/dist/platform/paths/git-worktree.d.ts +10 -0
  1189. package/dist/platform/paths/git-worktree.d.ts.map +1 -0
  1190. package/dist/platform/paths/git-worktree.js +43 -0
  1191. package/dist/platform/paths/git-worktree.js.map +1 -0
  1192. package/dist/platform/paths/repository-layout.d.ts +38 -0
  1193. package/dist/platform/paths/repository-layout.d.ts.map +1 -0
  1194. package/dist/platform/paths/repository-layout.js +11 -0
  1195. package/dist/platform/paths/repository-layout.js.map +1 -0
  1196. package/dist/platform/process/command-error.d.ts.map +1 -0
  1197. package/dist/platform/process/command-error.js.map +1 -0
  1198. package/dist/platform/process/shell-quote.d.ts +22 -0
  1199. package/dist/platform/process/shell-quote.d.ts.map +1 -0
  1200. package/dist/platform/process/shell-quote.js +34 -0
  1201. package/dist/platform/process/shell-quote.js.map +1 -0
  1202. package/dist/platform/process/terminate-process-tree.d.ts +3 -0
  1203. package/dist/platform/process/terminate-process-tree.d.ts.map +1 -0
  1204. package/dist/platform/process/terminate-process-tree.js +65 -0
  1205. package/dist/platform/process/terminate-process-tree.js.map +1 -0
  1206. package/dist/platform/version/version.d.ts.map +1 -0
  1207. package/dist/{core → platform/version}/version.js +16 -3
  1208. package/dist/platform/version/version.js.map +1 -0
  1209. package/eval/CLAUDE.md +43 -0
  1210. package/eval/README.md +538 -0
  1211. package/eval/langsmith/README.md +93 -0
  1212. package/eval/langsmith/skills/README.md +5 -0
  1213. package/eval/langsmith/tasks/README.md +5 -0
  1214. package/eval/langsmith/tests/conftest.py +187 -0
  1215. package/eval/langsmith/tests/tasks/test_tasks.py +287 -0
  1216. package/eval/langsmith/treatments/README.md +5 -0
  1217. package/eval/local/README.md +130 -0
  1218. package/eval/local/regression_baseline.json +13 -0
  1219. package/eval/local/report-style-demo-assets/quality_cost.en.svg +41 -0
  1220. package/eval/local/report-style-demo-assets/quality_cost.zh.svg +41 -0
  1221. package/eval/local/report-style-demo-assets/rubric_delta.en.svg +56 -0
  1222. package/eval/local/report-style-demo-assets/rubric_delta.zh.svg +56 -0
  1223. package/eval/local/report-style-demo-assets/task_outcomes.en.svg +46 -0
  1224. package/eval/local/report-style-demo-assets/task_outcomes.zh.svg +46 -0
  1225. package/eval/local/report-style-demo.html +867 -0
  1226. package/eval/local/scripts/compare_baselines.py +1144 -0
  1227. package/eval/local/scripts/generate_report_style_demo_charts.py +322 -0
  1228. package/eval/local/scripts/regression_check.py +170 -0
  1229. package/eval/local/scripts/render_readme_benchmark_figures.py +416 -0
  1230. package/eval/local/scripts/rescore_rubric.py +120 -0
  1231. package/eval/local/skills/benchmarks/039-release/comet-classic-039/SKILL.md +282 -0
  1232. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/auto-transition.md +27 -0
  1233. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/comet-yaml-fields.md +68 -0
  1234. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/context-recovery.md +35 -0
  1235. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/debug-gate.md +17 -0
  1236. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/decision-point.md +20 -0
  1237. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/dirty-worktree.md +59 -0
  1238. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/file-structure.md +28 -0
  1239. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/subagent-dispatch.md +113 -0
  1240. package/eval/local/skills/benchmarks/039-release/comet-classic-039/rules/comet-phase-guard.md +125 -0
  1241. package/eval/local/skills/benchmarks/039-release/comet-classic-039-archive/SKILL.md +100 -0
  1242. package/eval/local/skills/benchmarks/039-release/comet-classic-039-build/SKILL.md +304 -0
  1243. package/eval/local/skills/benchmarks/039-release/comet-classic-039-design/SKILL.md +263 -0
  1244. package/eval/local/skills/benchmarks/039-release/comet-classic-039-hotfix/SKILL.md +204 -0
  1245. package/eval/local/skills/benchmarks/039-release/comet-classic-039-open/SKILL.md +220 -0
  1246. package/eval/local/skills/benchmarks/039-release/comet-classic-039-tweak/SKILL.md +180 -0
  1247. package/eval/local/skills/benchmarks/039-release/comet-classic-039-verify/SKILL.md +234 -0
  1248. package/eval/local/skills/benchmarks/040-beta/comet/SKILL.md +261 -0
  1249. package/eval/local/skills/benchmarks/040-beta/comet/reference/auto-transition.md +27 -0
  1250. package/eval/local/skills/benchmarks/040-beta/comet/reference/comet-yaml-fields.md +73 -0
  1251. package/eval/local/skills/benchmarks/040-beta/comet/reference/context-recovery.md +45 -0
  1252. package/eval/local/skills/benchmarks/040-beta/comet/reference/debug-gate.md +33 -0
  1253. package/eval/local/skills/benchmarks/040-beta/comet/reference/decision-point.md +31 -0
  1254. package/eval/local/skills/benchmarks/040-beta/comet/reference/dirty-worktree.md +59 -0
  1255. package/eval/local/skills/benchmarks/040-beta/comet/reference/file-structure.md +28 -0
  1256. package/eval/local/skills/benchmarks/040-beta/comet/reference/intent-frame.md +74 -0
  1257. package/eval/local/skills/benchmarks/040-beta/comet/reference/scripts.md +69 -0
  1258. package/eval/local/skills/benchmarks/040-beta/comet/reference/subagent-dispatch.md +169 -0
  1259. package/eval/local/skills/benchmarks/040-beta/comet/rules/comet-phase-guard.md +130 -0
  1260. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/checks.yaml +6 -0
  1261. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/guardrails.yaml +13 -0
  1262. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/skill.yaml +122 -0
  1263. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-archive.mjs +9515 -0
  1264. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-env.mjs +15 -0
  1265. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-guard.mjs +10173 -0
  1266. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-handoff.mjs +9491 -0
  1267. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-hook-guard.mjs +9175 -0
  1268. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-intent.mjs +404 -0
  1269. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-state.mjs +9273 -0
  1270. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-yaml-validate.mjs +7627 -0
  1271. package/eval/local/skills/benchmarks/040-beta/comet-archive/SKILL.md +110 -0
  1272. package/eval/local/skills/benchmarks/040-beta/comet-build/SKILL.md +315 -0
  1273. package/eval/local/skills/benchmarks/040-beta/comet-design/SKILL.md +260 -0
  1274. package/eval/local/skills/benchmarks/040-beta/comet-hotfix/SKILL.md +190 -0
  1275. package/eval/local/skills/benchmarks/040-beta/comet-open/SKILL.md +210 -0
  1276. package/eval/local/skills/benchmarks/040-beta/comet-tweak/SKILL.md +183 -0
  1277. package/eval/local/skills/benchmarks/040-beta/comet-verify/SKILL.md +230 -0
  1278. package/eval/local/skills/benchmarks/dependency/claude-md/comet-workflow/CLAUDE.md +12 -0
  1279. package/eval/local/skills/benchmarks/dependency/openspec/openspec-apply-change/SKILL.md +156 -0
  1280. package/eval/local/skills/benchmarks/dependency/openspec/openspec-archive-change/SKILL.md +114 -0
  1281. package/eval/local/skills/benchmarks/dependency/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  1282. package/eval/local/skills/benchmarks/dependency/openspec/openspec-continue-change/SKILL.md +118 -0
  1283. package/eval/local/skills/benchmarks/dependency/openspec/openspec-explore/SKILL.md +288 -0
  1284. package/eval/local/skills/benchmarks/dependency/openspec/openspec-ff-change/SKILL.md +101 -0
  1285. package/eval/local/skills/benchmarks/dependency/openspec/openspec-new-change/SKILL.md +74 -0
  1286. package/eval/local/skills/benchmarks/dependency/openspec/openspec-onboard/SKILL.md +554 -0
  1287. package/eval/local/skills/benchmarks/dependency/openspec/openspec-propose/SKILL.md +110 -0
  1288. package/eval/local/skills/benchmarks/dependency/openspec/openspec-sync-specs/SKILL.md +138 -0
  1289. package/eval/local/skills/benchmarks/dependency/openspec/openspec-verify-change/SKILL.md +168 -0
  1290. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/SKILL.md +159 -0
  1291. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/frame-template.html +213 -0
  1292. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/helper.js +167 -0
  1293. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/server.cjs +723 -0
  1294. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/start-server.sh +209 -0
  1295. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/stop-server.sh +120 -0
  1296. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
  1297. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/visual-companion.md +291 -0
  1298. package/eval/local/skills/benchmarks/dependency/superpowers/dispatching-parallel-agents/SKILL.md +185 -0
  1299. package/eval/local/skills/benchmarks/dependency/superpowers/executing-plans/SKILL.md +70 -0
  1300. package/eval/local/skills/benchmarks/dependency/superpowers/finishing-a-development-branch/SKILL.md +241 -0
  1301. package/eval/local/skills/benchmarks/dependency/superpowers/receiving-code-review/SKILL.md +213 -0
  1302. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/SKILL.md +103 -0
  1303. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/code-reviewer.md +172 -0
  1304. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/SKILL.md +418 -0
  1305. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/implementer-prompt.md +139 -0
  1306. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/review-package +44 -0
  1307. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/sdd-workspace +22 -0
  1308. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/task-brief +40 -0
  1309. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/task-reviewer-prompt.md +188 -0
  1310. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
  1311. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/SKILL.md +296 -0
  1312. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
  1313. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
  1314. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/defense-in-depth.md +122 -0
  1315. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/find-polluter.sh +63 -0
  1316. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
  1317. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-academic.md +14 -0
  1318. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-1.md +58 -0
  1319. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-2.md +68 -0
  1320. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-3.md +69 -0
  1321. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/SKILL.md +371 -0
  1322. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
  1323. package/eval/local/skills/benchmarks/dependency/superpowers/using-git-worktrees/SKILL.md +202 -0
  1324. package/eval/local/skills/benchmarks/dependency/superpowers/verification-before-completion/SKILL.md +139 -0
  1325. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/SKILL.md +174 -0
  1326. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
  1327. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/SKILL.md +689 -0
  1328. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
  1329. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  1330. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/graphviz-conventions.dot +172 -0
  1331. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/persuasion-principles.md +187 -0
  1332. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/render-graphs.js +168 -0
  1333. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
  1334. package/eval/local/tasks/authoring-skill-smoke/environment/Dockerfile +14 -0
  1335. package/eval/local/tasks/authoring-skill-smoke/instruction.md +4 -0
  1336. package/eval/local/tasks/authoring-skill-smoke/task.toml +21 -0
  1337. package/eval/local/tasks/authoring-skill-smoke/validation/test_authoring_skill_smoke.py +54 -0
  1338. package/eval/local/tasks/comet-agent-memory-routing/environment/Dockerfile +26 -0
  1339. package/eval/local/tasks/comet-agent-memory-routing/environment/agent_system.py +40 -0
  1340. package/eval/local/tasks/comet-agent-memory-routing/environment/test_agent_system.py +29 -0
  1341. package/eval/local/tasks/comet-agent-memory-routing/instruction.md +20 -0
  1342. package/eval/local/tasks/comet-agent-memory-routing/task.toml +24 -0
  1343. package/eval/local/tasks/comet-agent-memory-routing/validation/test_agent_memory_routing.py +24 -0
  1344. package/eval/local/tasks/comet-api-cache-ttl/environment/Dockerfile +35 -0
  1345. package/eval/local/tasks/comet-api-cache-ttl/environment/cache.py +39 -0
  1346. package/eval/local/tasks/comet-api-cache-ttl/environment/test_cache.py +81 -0
  1347. package/eval/local/tasks/comet-api-cache-ttl/instruction.md +33 -0
  1348. package/eval/local/tasks/comet-api-cache-ttl/task.toml +24 -0
  1349. package/eval/local/tasks/comet-api-cache-ttl/validation/test_api_cache_ttl.py +58 -0
  1350. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/.include-current-comet-cli +1 -0
  1351. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/Dockerfile +45 -0
  1352. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet-package.json +18 -0
  1353. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet.sh +14 -0
  1354. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/test_wordcount.py +29 -0
  1355. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/wordcount.py +40 -0
  1356. package/eval/local/tasks/comet-classic-layout-lifecycle/instruction.md +18 -0
  1357. package/eval/local/tasks/comet-classic-layout-lifecycle/task.toml +23 -0
  1358. package/eval/local/tasks/comet-classic-layout-lifecycle/validation/test_classic_layout_lifecycle.py +604 -0
  1359. package/eval/local/tasks/comet-cross-file-refactor/environment/Dockerfile +15 -0
  1360. package/eval/local/tasks/comet-cross-file-refactor/environment/cli.py +13 -0
  1361. package/eval/local/tasks/comet-cross-file-refactor/environment/counting.py +13 -0
  1362. package/eval/local/tasks/comet-cross-file-refactor/environment/test_textkit.py +21 -0
  1363. package/eval/local/tasks/comet-cross-file-refactor/instruction.md +16 -0
  1364. package/eval/local/tasks/comet-cross-file-refactor/task.toml +20 -0
  1365. package/eval/local/tasks/comet-cross-file-refactor/validation/test_cross_file_refactor.py +20 -0
  1366. package/eval/local/tasks/comet-dependency-confusion/environment/Dockerfile +25 -0
  1367. package/eval/local/tasks/comet-dependency-confusion/environment/app.py +8 -0
  1368. package/eval/local/tasks/comet-dependency-confusion/environment/settings_loader.py +14 -0
  1369. package/eval/local/tasks/comet-dependency-confusion/environment/test_settings_service.py +19 -0
  1370. package/eval/local/tasks/comet-dependency-confusion/instruction.md +18 -0
  1371. package/eval/local/tasks/comet-dependency-confusion/task.toml +24 -0
  1372. package/eval/local/tasks/comet-dependency-confusion/validation/test_dependency_confusion.py +24 -0
  1373. package/eval/local/tasks/comet-fix-median/environment/Dockerfile +46 -0
  1374. package/eval/local/tasks/comet-fix-median/environment/stats.py +54 -0
  1375. package/eval/local/tasks/comet-fix-median/environment/test_stats.py +68 -0
  1376. package/eval/local/tasks/comet-fix-median/instruction.md +25 -0
  1377. package/eval/local/tasks/comet-fix-median/task.toml +24 -0
  1378. package/eval/local/tasks/comet-fix-median/validation/test_fix_median.py +60 -0
  1379. package/eval/local/tasks/comet-framework-selection/environment/Dockerfile +25 -0
  1380. package/eval/local/tasks/comet-framework-selection/environment/architecture.py +12 -0
  1381. package/eval/local/tasks/comet-framework-selection/environment/test_architecture.py +30 -0
  1382. package/eval/local/tasks/comet-framework-selection/instruction.md +22 -0
  1383. package/eval/local/tasks/comet-framework-selection/task.toml +24 -0
  1384. package/eval/local/tasks/comet-framework-selection/validation/test_framework_selection.py +24 -0
  1385. package/eval/local/tasks/comet-full-workflow/environment/Dockerfile +49 -0
  1386. package/eval/local/tasks/comet-full-workflow/environment/test_wordcount.py +29 -0
  1387. package/eval/local/tasks/comet-full-workflow/environment/wordcount.py +40 -0
  1388. package/eval/local/tasks/comet-full-workflow/instruction.md +18 -0
  1389. package/eval/local/tasks/comet-full-workflow/task.toml +24 -0
  1390. package/eval/local/tasks/comet-full-workflow/validation/test_full_workflow.py +171 -0
  1391. package/eval/local/tasks/comet-graph-execution-review/environment/Dockerfile +25 -0
  1392. package/eval/local/tasks/comet-graph-execution-review/environment/pipeline.py +19 -0
  1393. package/eval/local/tasks/comet-graph-execution-review/environment/test_pipeline.py +53 -0
  1394. package/eval/local/tasks/comet-graph-execution-review/instruction.md +21 -0
  1395. package/eval/local/tasks/comet-graph-execution-review/task.toml +24 -0
  1396. package/eval/local/tasks/comet-graph-execution-review/validation/test_graph_execution_review.py +24 -0
  1397. package/eval/local/tasks/comet-human-approval-flow/environment/Dockerfile +15 -0
  1398. package/eval/local/tasks/comet-human-approval-flow/environment/approvals.py +17 -0
  1399. package/eval/local/tasks/comet-human-approval-flow/environment/test_approvals.py +30 -0
  1400. package/eval/local/tasks/comet-human-approval-flow/instruction.md +15 -0
  1401. package/eval/local/tasks/comet-human-approval-flow/task.toml +20 -0
  1402. package/eval/local/tasks/comet-human-approval-flow/validation/test_human_approval_flow.py +20 -0
  1403. package/eval/local/tasks/comet-layered-streaming-fix/environment/Dockerfile +17 -0
  1404. package/eval/local/tasks/comet-layered-streaming-fix/environment/chat_app.py +19 -0
  1405. package/eval/local/tasks/comet-layered-streaming-fix/environment/test_chat_app.py +15 -0
  1406. package/eval/local/tasks/comet-layered-streaming-fix/instruction.md +14 -0
  1407. package/eval/local/tasks/comet-layered-streaming-fix/task.toml +20 -0
  1408. package/eval/local/tasks/comet-layered-streaming-fix/validation/test_layered_streaming_fix.py +20 -0
  1409. package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +25 -0
  1410. package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
  1411. package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
  1412. package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
  1413. package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
  1414. package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
  1415. package/eval/local/tasks/comet-native-clarification-depth/environment/Dockerfile +25 -0
  1416. package/eval/local/tasks/comet-native-clarification-depth/environment/test_wordcount.py +25 -0
  1417. package/eval/local/tasks/comet-native-clarification-depth/environment/wordcount.py +36 -0
  1418. package/eval/local/tasks/comet-native-clarification-depth/instruction.md +17 -0
  1419. package/eval/local/tasks/comet-native-clarification-depth/task.toml +47 -0
  1420. package/eval/local/tasks/comet-native-clarification-depth/validation/test_native_clarification_depth.py +618 -0
  1421. package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +25 -0
  1422. package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
  1423. package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
  1424. package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
  1425. package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
  1426. package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
  1427. package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
  1428. package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +26 -0
  1429. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
  1430. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
  1431. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
  1432. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
  1433. package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
  1434. package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
  1435. package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
  1436. package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
  1437. package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
  1438. package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +24 -0
  1439. package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
  1440. package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
  1441. package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
  1442. package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
  1443. package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
  1444. package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
  1445. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +25 -0
  1446. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
  1447. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
  1448. package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
  1449. package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
  1450. package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
  1451. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +25 -0
  1452. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
  1453. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
  1454. package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
  1455. package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
  1456. package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
  1457. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +25 -0
  1458. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
  1459. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
  1460. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
  1461. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
  1462. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
  1463. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
  1464. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +25 -0
  1465. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
  1466. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
  1467. package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
  1468. package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
  1469. package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
  1470. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
  1471. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +29 -0
  1472. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
  1473. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
  1474. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
  1475. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
  1476. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
  1477. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
  1478. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +483 -0
  1479. package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-review-fixture +1 -0
  1480. package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-runtime +1 -0
  1481. package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +26 -0
  1482. package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
  1483. package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
  1484. package/eval/local/tasks/comet-native-workflow/instruction.md +36 -0
  1485. package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
  1486. package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +680 -0
  1487. package/eval/local/tasks/comet-noise-distractor/environment/Dockerfile +15 -0
  1488. package/eval/local/tasks/comet-noise-distractor/environment/distractor.md +4 -0
  1489. package/eval/local/tasks/comet-noise-distractor/environment/invoice.py +5 -0
  1490. package/eval/local/tasks/comet-noise-distractor/environment/test_invoice.py +18 -0
  1491. package/eval/local/tasks/comet-noise-distractor/instruction.md +17 -0
  1492. package/eval/local/tasks/comet-noise-distractor/task.toml +20 -0
  1493. package/eval/local/tasks/comet-noise-distractor/validation/test_noise_distractor.py +20 -0
  1494. package/eval/local/tasks/comet-observability-env-template/environment/Dockerfile +15 -0
  1495. package/eval/local/tasks/comet-observability-env-template/environment/env_writer.py +17 -0
  1496. package/eval/local/tasks/comet-observability-env-template/environment/test_env_writer.py +17 -0
  1497. package/eval/local/tasks/comet-observability-env-template/instruction.md +20 -0
  1498. package/eval/local/tasks/comet-observability-env-template/task.toml +20 -0
  1499. package/eval/local/tasks/comet-observability-env-template/validation/test_observability_env_template.py +46 -0
  1500. package/eval/local/tasks/comet-perf-dedupe/environment/Dockerfile +35 -0
  1501. package/eval/local/tasks/comet-perf-dedupe/environment/dedupe.py +22 -0
  1502. package/eval/local/tasks/comet-perf-dedupe/environment/test_dedupe.py +43 -0
  1503. package/eval/local/tasks/comet-perf-dedupe/instruction.md +25 -0
  1504. package/eval/local/tasks/comet-perf-dedupe/task.toml +24 -0
  1505. package/eval/local/tasks/comet-perf-dedupe/validation/test_perf_dedupe.py +40 -0
  1506. package/eval/local/tasks/comet-persistence-threading/environment/Dockerfile +15 -0
  1507. package/eval/local/tasks/comet-persistence-threading/environment/session_store.py +15 -0
  1508. package/eval/local/tasks/comet-persistence-threading/environment/test_session_store.py +21 -0
  1509. package/eval/local/tasks/comet-persistence-threading/instruction.md +14 -0
  1510. package/eval/local/tasks/comet-persistence-threading/task.toml +20 -0
  1511. package/eval/local/tasks/comet-persistence-threading/validation/test_persistence_threading.py +20 -0
  1512. package/eval/local/tasks/comet-refactor-counter/environment/Dockerfile +35 -0
  1513. package/eval/local/tasks/comet-refactor-counter/environment/test_text_processor.py +57 -0
  1514. package/eval/local/tasks/comet-refactor-counter/environment/text_processor.py +49 -0
  1515. package/eval/local/tasks/comet-refactor-counter/instruction.md +31 -0
  1516. package/eval/local/tasks/comet-refactor-counter/task.toml +24 -0
  1517. package/eval/local/tasks/comet-refactor-counter/validation/test_refactor_counter.py +75 -0
  1518. package/eval/local/tasks/comet-robust-config/environment/Dockerfile +35 -0
  1519. package/eval/local/tasks/comet-robust-config/environment/config_loader.py +56 -0
  1520. package/eval/local/tasks/comet-robust-config/environment/test_config_loader.py +72 -0
  1521. package/eval/local/tasks/comet-robust-config/instruction.md +30 -0
  1522. package/eval/local/tasks/comet-robust-config/task.toml +24 -0
  1523. package/eval/local/tasks/comet-robust-config/validation/test_robust_config.py +37 -0
  1524. package/eval/local/tasks/generic-skill-smoke/environment/Dockerfile +14 -0
  1525. package/eval/local/tasks/generic-skill-smoke/instruction.md +7 -0
  1526. package/eval/local/tasks/generic-skill-smoke/task.toml +21 -0
  1527. package/eval/local/tasks/generic-skill-smoke/validation/test_generic_skill_smoke.py +41 -0
  1528. package/eval/local/tasks/index.yaml +229 -0
  1529. package/eval/local/tasks/workflow-overlay-contract/environment/Dockerfile +16 -0
  1530. package/eval/local/tasks/workflow-overlay-contract/instruction.md +5 -0
  1531. package/eval/local/tasks/workflow-overlay-contract/task.toml +21 -0
  1532. package/eval/local/tasks/workflow-overlay-contract/validation/test_workflow_overlay_contract.py +235 -0
  1533. package/eval/local/tasks/workflow-route-conformance/environment/Dockerfile +14 -0
  1534. package/eval/local/tasks/workflow-route-conformance/instruction.md +5 -0
  1535. package/eval/local/tasks/workflow-route-conformance/task.toml +21 -0
  1536. package/eval/local/tasks/workflow-route-conformance/validation/test_workflow_route_conformance.py +84 -0
  1537. package/eval/local/tests/conftest.py +1946 -0
  1538. package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
  1539. package/eval/local/tests/scaffold/test_attribution.py +48 -0
  1540. package/eval/local/tests/scaffold/test_compare_baselines.py +999 -0
  1541. package/eval/local/tests/scaffold/test_conftest_helpers.py +980 -0
  1542. package/eval/local/tests/scaffold/test_evidence.py +15 -0
  1543. package/eval/local/tests/scaffold/test_langsmith_conftest.py +244 -0
  1544. package/eval/local/tests/scaffold/test_logging.py +377 -0
  1545. package/eval/local/tests/scaffold/test_manifests.py +134 -0
  1546. package/eval/local/tests/scaffold/test_native_aligned_eval.py +353 -0
  1547. package/eval/local/tests/scaffold/test_native_wave_evaluations.py +2183 -0
  1548. package/eval/local/tests/scaffold/test_profiles.py +1149 -0
  1549. package/eval/local/tests/scaffold/test_regression_check.py +19 -0
  1550. package/eval/local/tests/scaffold/test_report_style_demo_charts.py +45 -0
  1551. package/eval/local/tests/scaffold/test_sample_quality.py +268 -0
  1552. package/eval/local/tests/scaffold/test_tasks.py +1013 -0
  1553. package/eval/local/tests/scaffold/test_treatments.py +353 -0
  1554. package/eval/local/tests/scaffold/test_utils.py +561 -0
  1555. package/eval/local/tests/tasks/__init__.py +1 -0
  1556. package/eval/local/tests/tasks/test_tasks.py +474 -0
  1557. package/eval/local/tests/tasks/test_validation_scripts.py +787 -0
  1558. package/eval/local/treatments/comet/comet_classic_docs_layout.yaml +121 -0
  1559. package/eval/local/treatments/comet/comet_full_039.yaml +141 -0
  1560. package/eval/local/treatments/comet/comet_full_040_beta.yaml +140 -0
  1561. package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
  1562. package/eval/local/treatments/common/control.yaml +4 -0
  1563. package/eval/pyproject.toml +41 -0
  1564. package/eval/report-html-config.json +6 -0
  1565. package/eval/scaffold/__init__.py +67 -0
  1566. package/eval/scaffold/python/__init__.py +95 -0
  1567. package/eval/scaffold/python/aligned_comparison.py +1632 -0
  1568. package/eval/scaffold/python/attribution.py +43 -0
  1569. package/eval/scaffold/python/evidence.py +38 -0
  1570. package/eval/scaffold/python/external_data_handler.py +18 -0
  1571. package/eval/scaffold/python/generic_llm_judge.py +237 -0
  1572. package/eval/scaffold/python/judge_config.py +168 -0
  1573. package/eval/scaffold/python/llm_judge.py +188 -0
  1574. package/eval/scaffold/python/logging.py +804 -0
  1575. package/eval/scaffold/python/manifests.py +131 -0
  1576. package/eval/scaffold/python/native_eval.py +143 -0
  1577. package/eval/scaffold/python/paper_charts.py +25 -0
  1578. package/eval/scaffold/python/pass_at_k.py +106 -0
  1579. package/eval/scaffold/python/paths.py +56 -0
  1580. package/eval/scaffold/python/profiles.py +127 -0
  1581. package/eval/scaffold/python/report_outputs.py +1573 -0
  1582. package/eval/scaffold/python/sample_quality.py +382 -0
  1583. package/eval/scaffold/python/schema.py +39 -0
  1584. package/eval/scaffold/python/skill_parser.py +469 -0
  1585. package/eval/scaffold/python/tasks.py +343 -0
  1586. package/eval/scaffold/python/treatments.py +271 -0
  1587. package/eval/scaffold/python/utils.py +460 -0
  1588. package/eval/scaffold/python/validation/__init__.py +31 -0
  1589. package/eval/scaffold/python/validation/authoring_rubric.py +328 -0
  1590. package/eval/scaffold/python/validation/comet_workflow.py +227 -0
  1591. package/eval/scaffold/python/validation/core.py +264 -0
  1592. package/eval/scaffold/python/validation/dataset.py +337 -0
  1593. package/eval/scaffold/python/validation/docker.py +106 -0
  1594. package/eval/scaffold/python/validation/evaluator.py +549 -0
  1595. package/eval/scaffold/python/validation/generic_rubric.py +198 -0
  1596. package/eval/scaffold/python/validation/native_wave.py +2154 -0
  1597. package/eval/scaffold/python/validation/native_workflow.py +252 -0
  1598. package/eval/scaffold/python/validation/rubric.py +780 -0
  1599. package/eval/scaffold/python/validation/runner.py +237 -0
  1600. package/eval/scaffold/python/validation/scripts.py +58 -0
  1601. package/eval/scaffold/python/validation/tracing.py +313 -0
  1602. package/eval/scaffold/shell/common.sh +126 -0
  1603. package/eval/scaffold/shell/completion-point.sh +18 -0
  1604. package/eval/scaffold/shell/decision-point.sh +35 -0
  1605. package/eval/scaffold/shell/docker.sh +716 -0
  1606. package/eval/scaffold/shell/native-review-signer-daemon.mjs +144 -0
  1607. package/eval/scaffold/shell/native-review-verifier-daemon.mjs +178 -0
  1608. package/eval/scaffold/shell/run-claude-loop.sh +234 -0
  1609. package/eval/scaffold/shell/setup.sh +259 -0
  1610. package/eval/simulator-instruction.md +9 -0
  1611. package/package.json +98 -18
  1612. package/dist/cli/index.js +0 -84
  1613. package/dist/cli/index.js.map +0 -1
  1614. package/dist/commands/doctor.d.ts.map +0 -1
  1615. package/dist/commands/doctor.js +0 -234
  1616. package/dist/commands/doctor.js.map +0 -1
  1617. package/dist/commands/i18n.d.ts +0 -4
  1618. package/dist/commands/i18n.d.ts.map +0 -1
  1619. package/dist/commands/i18n.js.map +0 -1
  1620. package/dist/commands/init.d.ts +0 -26
  1621. package/dist/commands/init.d.ts.map +0 -1
  1622. package/dist/commands/init.js +0 -352
  1623. package/dist/commands/init.js.map +0 -1
  1624. package/dist/commands/status.d.ts.map +0 -1
  1625. package/dist/commands/status.js +0 -108
  1626. package/dist/commands/status.js.map +0 -1
  1627. package/dist/commands/uninstall.d.ts +0 -9
  1628. package/dist/commands/uninstall.d.ts.map +0 -1
  1629. package/dist/commands/uninstall.js +0 -132
  1630. package/dist/commands/uninstall.js.map +0 -1
  1631. package/dist/commands/update.d.ts +0 -29
  1632. package/dist/commands/update.d.ts.map +0 -1
  1633. package/dist/commands/update.js +0 -293
  1634. package/dist/commands/update.js.map +0 -1
  1635. package/dist/core/codegraph.d.ts +0 -6
  1636. package/dist/core/codegraph.d.ts.map +0 -1
  1637. package/dist/core/codegraph.js +0 -118
  1638. package/dist/core/codegraph.js.map +0 -1
  1639. package/dist/core/command-error.d.ts.map +0 -1
  1640. package/dist/core/command-error.js.map +0 -1
  1641. package/dist/core/detect.d.ts.map +0 -1
  1642. package/dist/core/detect.js.map +0 -1
  1643. package/dist/core/openspec.d.ts +0 -11
  1644. package/dist/core/openspec.d.ts.map +0 -1
  1645. package/dist/core/openspec.js +0 -271
  1646. package/dist/core/openspec.js.map +0 -1
  1647. package/dist/core/platforms.d.ts.map +0 -1
  1648. package/dist/core/platforms.js.map +0 -1
  1649. package/dist/core/skills.d.ts +0 -58
  1650. package/dist/core/skills.d.ts.map +0 -1
  1651. package/dist/core/skills.js +0 -562
  1652. package/dist/core/skills.js.map +0 -1
  1653. package/dist/core/superpowers.d.ts.map +0 -1
  1654. package/dist/core/superpowers.js.map +0 -1
  1655. package/dist/core/types.d.ts +0 -2
  1656. package/dist/core/types.d.ts.map +0 -1
  1657. package/dist/core/uninstall.d.ts +0 -28
  1658. package/dist/core/uninstall.d.ts.map +0 -1
  1659. package/dist/core/uninstall.js +0 -421
  1660. package/dist/core/uninstall.js.map +0 -1
  1661. package/dist/core/version.d.ts.map +0 -1
  1662. package/dist/core/version.js.map +0 -1
  1663. package/dist/utils/file-system.d.ts.map +0 -1
  1664. package/dist/utils/file-system.js.map +0 -1
  1665. /package/dist/{cli → app/cli}/index.d.ts +0 -0
  1666. /package/dist/{commands → app/commands}/status.d.ts +0 -0
  1667. /package/dist/{core → domains/bundle}/types.js +0 -0
  1668. /package/dist/{core → platform/process}/command-error.d.ts +0 -0
  1669. /package/dist/{core → platform/process}/command-error.js +0 -0
  1670. /package/dist/{core → platform/version}/version.d.ts +0 -0
  1671. /package/{assets/skills/comet → eval/local/skills/benchmarks/039-release/comet-classic-039}/scripts/comet-archive.sh +0 -0
  1672. /package/{assets/skills/comet → eval/local/skills/benchmarks/039-release/comet-classic-039}/scripts/comet-env.sh +0 -0
  1673. /package/{assets/skills/comet → eval/local/skills/benchmarks/039-release/comet-classic-039}/scripts/comet-guard.sh +0 -0
  1674. /package/{assets/skills/comet → eval/local/skills/benchmarks/039-release/comet-classic-039}/scripts/comet-handoff.sh +0 -0
  1675. /package/{assets/skills/comet → eval/local/skills/benchmarks/039-release/comet-classic-039}/scripts/comet-hook-guard.sh +0 -0
  1676. /package/{assets/skills/comet → eval/local/skills/benchmarks/039-release/comet-classic-039}/scripts/comet-state.sh +0 -0
  1677. /package/{assets/skills/comet → eval/local/skills/benchmarks/039-release/comet-classic-039}/scripts/comet-yaml-validate.sh +0 -0
  1678. /package/scripts/{postinstall.js → install/postinstall.js} +0 -0
@@ -0,0 +1,1737 @@
1
+ import { createHash, randomUUID } from 'crypto';
2
+ import { promises as fs } from 'fs';
3
+ import path from 'path';
4
+ import { hasComparableFileObject, sameFileObject, } from '../../platform/fs/file-identity.js';
5
+ import { readCheckpoint } from '../engine/run-store.js';
6
+ import { readCometCurrentSelection } from '../comet-entry/current-selection.js';
7
+ import { renderStructuredProjectConfig } from '../workflow-contract/project-config.js';
8
+ import { readWorkflowProjectConfigSnapshot, WORKFLOW_PROJECT_CONFIG_PATH, } from '../workflow-contract/project-config-reader.js';
9
+ import { inspectProtectedProjectPath, readProtectedProjectFile, } from '../workflow-contract/protected-project-path.js';
10
+ import { assertClassicWorkflowEnabled, classicLayoutPaths, discoverClassicProject, readClassicArtifactLayout, writeClassicArtifactLayout, } from './classic-layout.js';
11
+ import { readClassicState, readLegacyState } from './classic-store.js';
12
+ const JOURNAL_RELATIVE_PATH = '.comet/classic-root-move.json';
13
+ const STAGING_PLAN_IDENTITY = '.comet/transactions/classic-root-move/<transaction-id>/openspec';
14
+ const HISTORICAL_POINTERS_PRESERVED = [
15
+ 'handoff hashes',
16
+ 'Run state',
17
+ 'checkpoints',
18
+ 'trajectory',
19
+ 'archived evidence and artifact pointers',
20
+ ];
21
+ const APPLY_PRECONDITIONS = [
22
+ 'approved plan ID still matches layout, source identity and manifest, target identity, and configuration',
23
+ 'no active, archive, or recovery blockers',
24
+ 'target remains absent or the bound empty directory',
25
+ 'source, target, staging, transaction, and config paths remain protected',
26
+ ];
27
+ const MAX_FILES = 50_000;
28
+ const MAX_TOTAL_BYTES = 512 * 1024 * 1024;
29
+ const MAX_JOURNAL_BYTES = 16 * 1024 * 1024;
30
+ const MAX_PENDING_ACTION_BYTES = 1024 * 1024;
31
+ const HASH_PATTERN = /^[a-f0-9]{64}$/u;
32
+ const UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/u;
33
+ const journalClaimBrand = Symbol('ClassicRootMoveJournalClaim');
34
+ function projectRelative(projectRoot, target) {
35
+ return path.relative(projectRoot, target).replaceAll('\\', '/');
36
+ }
37
+ async function assertProtectedMovePath(projectRoot, target, label, expected = 'directory') {
38
+ await inspectProtectedProjectPath(projectRoot, projectRelative(projectRoot, target), {
39
+ label: `Classic root move physical path ${label}`,
40
+ expected,
41
+ });
42
+ }
43
+ function sameDirectoryObject(expected, actual) {
44
+ return sameFileObject(expected, actual);
45
+ }
46
+ async function captureProtectedDirectoryChain(projectRoot, directory, label) {
47
+ const root = path.resolve(projectRoot);
48
+ const target = path.resolve(directory);
49
+ const relative = path.relative(root, target);
50
+ if (path.isAbsolute(relative) || relative === '..' || relative.startsWith(`..${path.sep}`)) {
51
+ throw new Error(`${label} must stay inside the project root`);
52
+ }
53
+ if (target !== root) {
54
+ await assertProtectedMovePath(projectRoot, directory, label, 'directory');
55
+ }
56
+ const paths = [root];
57
+ let cursor = root;
58
+ for (const segment of relative.split(path.sep).filter(Boolean)) {
59
+ cursor = path.join(cursor, segment);
60
+ paths.push(cursor);
61
+ }
62
+ const entries = [];
63
+ for (const current of paths) {
64
+ const stat = await fs.lstat(current, { bigint: true });
65
+ if (!stat.isDirectory() || stat.isSymbolicLink()) {
66
+ throw new Error(`${label} crosses a symbolic link or junction`);
67
+ }
68
+ entries.push({ path: current, identity: fileObjectIdentity(stat), stat });
69
+ }
70
+ return { entries };
71
+ }
72
+ async function validateProtectedDirectoryChain(chain, label) {
73
+ for (const entry of chain.entries) {
74
+ const stat = await fs.lstat(entry.path, { bigint: true });
75
+ if (!stat.isDirectory() ||
76
+ stat.isSymbolicLink() ||
77
+ !sameDirectoryObject(entry.identity, fileObjectIdentity(stat))) {
78
+ throw new Error(`${label} changed after inspection`);
79
+ }
80
+ }
81
+ }
82
+ async function readProtectedDirectory(projectRoot, directory, label, testHooks) {
83
+ const chain = await captureProtectedDirectoryChain(projectRoot, directory, label);
84
+ await testHooks?.afterDirectoryInspect?.(label);
85
+ await validateProtectedDirectoryChain(chain, label);
86
+ const entries = await fs.readdir(directory, { withFileTypes: true });
87
+ await validateProtectedDirectoryChain(chain, label);
88
+ return entries;
89
+ }
90
+ async function protectedDirectoryExists(projectRoot, directory, label) {
91
+ try {
92
+ await captureProtectedDirectoryChain(projectRoot, directory, label);
93
+ return true;
94
+ }
95
+ catch (error) {
96
+ if (error.code === 'ENOENT')
97
+ return false;
98
+ throw error;
99
+ }
100
+ }
101
+ async function protectedFileExists(projectRoot, file, label) {
102
+ try {
103
+ return (await inspectProtectedProjectPath(projectRoot, projectRelative(projectRoot, file), {
104
+ label,
105
+ expected: 'file',
106
+ })).exists;
107
+ }
108
+ catch (error) {
109
+ const code = error.code;
110
+ if (code === 'ENOENT' || code === 'ENOTDIR')
111
+ return false;
112
+ throw error;
113
+ }
114
+ }
115
+ async function ensureRootMoveDirectory(projectRoot, directory, label, testHooks) {
116
+ const root = path.resolve(projectRoot);
117
+ const target = path.resolve(directory);
118
+ const relative = path.relative(root, target);
119
+ if (path.isAbsolute(relative) || relative === '..' || relative.startsWith(`..${path.sep}`)) {
120
+ throw new Error(`${label} must stay inside the project root`);
121
+ }
122
+ let cursor = root;
123
+ for (const segment of relative.split(path.sep).filter(Boolean)) {
124
+ const next = path.join(cursor, segment);
125
+ try {
126
+ const stat = await fs.lstat(next, { bigint: true });
127
+ if (!stat.isDirectory() || stat.isSymbolicLink()) {
128
+ throw new Error(`${label} crosses a symbolic link or junction`);
129
+ }
130
+ }
131
+ catch (error) {
132
+ if (error.code !== 'ENOENT')
133
+ throw error;
134
+ const chain = await captureProtectedDirectoryChain(projectRoot, cursor, label);
135
+ const operation = `create-directory:${projectRelative(projectRoot, next)}`;
136
+ await testHooks?.beforeMutation?.(operation);
137
+ await validateProtectedDirectoryChain(chain, label);
138
+ try {
139
+ await fs.mkdir(next);
140
+ }
141
+ catch (mkdirError) {
142
+ if (mkdirError.code !== 'EEXIST')
143
+ throw mkdirError;
144
+ }
145
+ await validateProtectedDirectoryChain(chain, label);
146
+ const created = await fs.lstat(next, { bigint: true });
147
+ if (!created.isDirectory() || created.isSymbolicLink()) {
148
+ throw new Error(`${label} changed while creating a directory`, { cause: error });
149
+ }
150
+ }
151
+ cursor = next;
152
+ }
153
+ await assertProtectedMovePath(projectRoot, directory, label, 'directory');
154
+ }
155
+ async function captureMutationObject(target, expected, label) {
156
+ const stat = await fs.lstat(target, { bigint: true });
157
+ if (stat.isSymbolicLink() || (expected === 'file' ? !stat.isFile() : !stat.isDirectory())) {
158
+ throw new Error(`${label} must be a real ${expected}`);
159
+ }
160
+ return stat;
161
+ }
162
+ async function validateMutationObject(target, expected, label) {
163
+ const actual = await fs.lstat(target, { bigint: true });
164
+ const sameIdentity = expected.isDirectory()
165
+ ? sameDirectoryObject(fileObjectIdentity(expected), fileObjectIdentity(actual))
166
+ : sameInspectedFile(expected, actual);
167
+ if (actual.isSymbolicLink() ||
168
+ actual.isFile() !== expected.isFile() ||
169
+ actual.isDirectory() !== expected.isDirectory() ||
170
+ !sameIdentity) {
171
+ throw new Error(`${label} changed after inspection`);
172
+ }
173
+ }
174
+ async function writeProtectedFileExclusive(projectRoot, file, bytes, operation, testHooks) {
175
+ const label = `Classic root move ${operation}`;
176
+ const chain = await captureProtectedDirectoryChain(projectRoot, path.dirname(file), label);
177
+ await testHooks?.beforeMutation?.(operation);
178
+ await validateProtectedDirectoryChain(chain, label);
179
+ const handle = await fs.open(file, 'wx');
180
+ try {
181
+ await validateProtectedDirectoryChain(chain, label);
182
+ await handle.writeFile(bytes);
183
+ await handle.sync();
184
+ }
185
+ finally {
186
+ await handle.close();
187
+ }
188
+ await validateProtectedDirectoryChain(chain, label);
189
+ await assertProtectedMovePath(projectRoot, file, label, 'file');
190
+ }
191
+ async function linkProtectedFileExclusive(projectRoot, source, target, operation, testHooks) {
192
+ const label = `Classic root move ${operation}`;
193
+ const sourceParent = await captureProtectedDirectoryChain(projectRoot, path.dirname(source), label);
194
+ const targetParent = await captureProtectedDirectoryChain(projectRoot, path.dirname(target), label);
195
+ const sourceIdentity = await captureMutationObject(source, 'file', label);
196
+ await testHooks?.beforeMutation?.(operation);
197
+ await validateProtectedDirectoryChain(sourceParent, label);
198
+ await validateProtectedDirectoryChain(targetParent, label);
199
+ await validateMutationObject(source, sourceIdentity, label);
200
+ await fs.link(source, target);
201
+ await validateProtectedDirectoryChain(sourceParent, label);
202
+ await validateProtectedDirectoryChain(targetParent, label);
203
+ await validateMutationObject(target, sourceIdentity, label);
204
+ }
205
+ async function renameProtectedPath(projectRoot, source, target, operation, testHooks, options = {}) {
206
+ const label = `Classic root move ${operation}`;
207
+ const sourceParent = await captureProtectedDirectoryChain(projectRoot, path.dirname(source), label);
208
+ const targetParent = await captureProtectedDirectoryChain(projectRoot, path.dirname(target), label);
209
+ const sourceIdentity = await captureMutationObject(source, (await fs.lstat(source)).isDirectory() ? 'directory' : 'file', label);
210
+ if (!options.replaceTarget) {
211
+ const inspection = await inspectProtectedProjectPath(projectRoot, projectRelative(projectRoot, target), { label, expected: 'any' });
212
+ if (inspection.exists)
213
+ throw new Error(`${label} target already exists`);
214
+ }
215
+ else if (options.expectedTargetIdentity) {
216
+ await validateMutationObject(target, options.expectedTargetIdentity, label);
217
+ }
218
+ await testHooks?.beforeMutation?.(operation);
219
+ await validateProtectedDirectoryChain(sourceParent, label);
220
+ await validateProtectedDirectoryChain(targetParent, label);
221
+ await validateMutationObject(source, sourceIdentity, label);
222
+ if (options.expectedTargetIdentity) {
223
+ await validateMutationObject(target, options.expectedTargetIdentity, label);
224
+ }
225
+ await options.validateTarget?.();
226
+ await fs.rename(source, target);
227
+ await validateProtectedDirectoryChain(sourceParent, label);
228
+ await validateProtectedDirectoryChain(targetParent, label);
229
+ await validateMutationObject(target, sourceIdentity, label);
230
+ }
231
+ async function unlinkProtectedFile(projectRoot, file, operation, testHooks, options = {}) {
232
+ const label = `Classic root move ${operation}`;
233
+ let identity;
234
+ try {
235
+ identity = await captureMutationObject(file, 'file', label);
236
+ }
237
+ catch (error) {
238
+ if (error.code === 'ENOENT')
239
+ return false;
240
+ throw error;
241
+ }
242
+ if (options.expectedIdentity) {
243
+ await validateMutationObject(file, options.expectedIdentity, label);
244
+ }
245
+ const parent = await captureProtectedDirectoryChain(projectRoot, path.dirname(file), label);
246
+ await testHooks?.beforeMutation?.(operation);
247
+ await validateProtectedDirectoryChain(parent, label);
248
+ await validateMutationObject(file, identity, label);
249
+ if (options.expectedIdentity) {
250
+ await validateMutationObject(file, options.expectedIdentity, label);
251
+ }
252
+ await options.validateTarget?.();
253
+ await fs.unlink(file);
254
+ await validateProtectedDirectoryChain(parent, label);
255
+ return true;
256
+ }
257
+ async function removeProtectedEmptyDirectory(projectRoot, directory, operation, testHooks, expectedIdentity) {
258
+ const label = `Classic root move ${operation}`;
259
+ let identity;
260
+ try {
261
+ identity = await captureMutationObject(directory, 'directory', label);
262
+ }
263
+ catch (error) {
264
+ if (error.code === 'ENOENT')
265
+ return false;
266
+ throw error;
267
+ }
268
+ if (expectedIdentity &&
269
+ !sameStableIdentity(stableObjectIdentity(identity, `Classic root move ${operation}`), expectedIdentity)) {
270
+ throw new Error(`Classic root move ${operation} changed after migration preflight`);
271
+ }
272
+ const parent = await captureProtectedDirectoryChain(projectRoot, path.dirname(directory), label);
273
+ await testHooks?.beforeMutation?.(operation);
274
+ await validateProtectedDirectoryChain(parent, label);
275
+ await validateMutationObject(directory, identity, label);
276
+ const entries = await fs.readdir(directory);
277
+ await validateProtectedDirectoryChain(parent, label);
278
+ await validateMutationObject(directory, identity, label);
279
+ if (entries.length > 0)
280
+ throw new Error(`${label} directory is not empty`);
281
+ await fs.rmdir(directory);
282
+ await validateProtectedDirectoryChain(parent, label);
283
+ return true;
284
+ }
285
+ async function assertRootMovePreflightBoundaries(projectRoot, transactionId) {
286
+ const legacy = classicLayoutPaths(projectRoot, 'legacy');
287
+ const docs = classicLayoutPaths(projectRoot, 'docs');
288
+ const transactionBase = path.join(projectRoot, '.comet', 'transactions', 'classic-root-move');
289
+ const checks = [
290
+ [path.join(projectRoot, '.comet'), '.comet', 'directory'],
291
+ [path.join(projectRoot, '.comet', 'config.yaml'), '.comet/config.yaml', 'file'],
292
+ [legacy.openSpecRoot, 'openspec', 'directory'],
293
+ [path.dirname(docs.openSpecRoot), 'docs', 'directory'],
294
+ [docs.openSpecRoot, 'docs/openspec', 'directory'],
295
+ [path.join(projectRoot, '.comet', 'transactions'), '.comet/transactions', 'directory'],
296
+ [transactionBase, '.comet/transactions/classic-root-move', 'directory'],
297
+ ];
298
+ if (transactionId) {
299
+ const transactionRoot = path.join(transactionBase, transactionId);
300
+ checks.push([transactionRoot, `transaction ${transactionId}`, 'directory'], [path.join(transactionRoot, 'openspec'), `transaction ${transactionId} staging`, 'directory'], [
301
+ path.join(transactionRoot, 'legacy-source'),
302
+ `transaction ${transactionId} quarantine`,
303
+ 'directory',
304
+ ]);
305
+ }
306
+ for (const [target, label, expected] of checks) {
307
+ await assertProtectedMovePath(projectRoot, target, label, expected);
308
+ }
309
+ }
310
+ async function atomicWriteJournal(projectRoot, expected, updated, testHooks) {
311
+ const file = journalFile(projectRoot);
312
+ await ensureRootMoveDirectory(projectRoot, path.dirname(file), 'Classic root move journal parent', testHooks);
313
+ const temporary = `${file}.${randomUUID()}.tmp`;
314
+ const serialized = JSON.stringify(updated, null, 2) + '\n';
315
+ let quarantine;
316
+ try {
317
+ await writeProtectedFileExclusive(projectRoot, temporary, serialized, 'update-journal-temp', testHooks);
318
+ const temporaryIdentity = await captureMutationObject(temporary, 'file', 'Classic root move updated journal');
319
+ quarantine = await quarantineOwnedJournal(projectRoot, expected, 'update-journal-commit', testHooks);
320
+ try {
321
+ await linkProtectedFileExclusive(projectRoot, temporary, file, 'update-journal-publish', testHooks);
322
+ }
323
+ catch (error) {
324
+ throw new Error('Classic root move journal publish failed; a successor journal was preserved', { cause: error });
325
+ }
326
+ const persisted = await readJournal(projectRoot);
327
+ const persistedClaim = persisted ? journalClaim(persisted) : null;
328
+ if (!persisted ||
329
+ persisted.id !== updated.id ||
330
+ persisted.stage !== updated.stage ||
331
+ persisted.planId !== updated.planId ||
332
+ persisted.schema !== updated.schema ||
333
+ !persistedClaim ||
334
+ persistedClaim.contentHash !== hashBytes(Buffer.from(serialized)) ||
335
+ !sameInspectedFile(temporaryIdentity, persistedClaim.fileIdentity)) {
336
+ throw new Error('Classic root move journal ownership changed while updating');
337
+ }
338
+ await unlinkProtectedFile(projectRoot, quarantine.file, 'cleanup-update-journal-quarantine', testHooks, { expectedIdentity: journalClaim(quarantine.journal).fileIdentity });
339
+ quarantine = undefined;
340
+ return persisted;
341
+ }
342
+ catch (error) {
343
+ if (quarantine) {
344
+ await restoreQuarantinedJournal(projectRoot, quarantine, 'restore-update-journal', testHooks).catch(() => false);
345
+ }
346
+ throw error;
347
+ }
348
+ finally {
349
+ await unlinkProtectedFile(projectRoot, temporary, 'cleanup-update-journal-temp').catch(() => false);
350
+ }
351
+ }
352
+ async function createJsonExclusive(projectRoot, file, value, testHooks) {
353
+ await ensureRootMoveDirectory(projectRoot, path.dirname(file), 'Classic root move journal parent', testHooks);
354
+ const temporary = `${file}.${randomUUID()}.tmp`;
355
+ try {
356
+ await writeProtectedFileExclusive(projectRoot, temporary, JSON.stringify(value, null, 2) + '\n', 'create-journal-temp', testHooks);
357
+ await linkProtectedFileExclusive(projectRoot, temporary, file, 'create-journal-commit', testHooks);
358
+ }
359
+ catch (error) {
360
+ if (error.code === 'EEXIST') {
361
+ throw new Error('Classic root move is incomplete; use comet doctor --repair --strategy continue|rollback', { cause: error });
362
+ }
363
+ throw error;
364
+ }
365
+ finally {
366
+ await unlinkProtectedFile(projectRoot, temporary, 'cleanup-create-journal-temp').catch(() => false);
367
+ }
368
+ }
369
+ function manifestHash(manifest) {
370
+ return createHash('sha256')
371
+ .update(JSON.stringify({
372
+ directories: manifest.directories,
373
+ files: manifest.files,
374
+ totalBytes: manifest.totalBytes,
375
+ }))
376
+ .digest('hex');
377
+ }
378
+ function planIdFor(plan) {
379
+ return createHash('sha256')
380
+ .update(JSON.stringify({
381
+ source: plan.source,
382
+ target: plan.target,
383
+ staging: plan.staging,
384
+ artifactLayout: plan.artifactLayout,
385
+ sourceIdentity: plan.sourceIdentity,
386
+ targetInitialIdentity: plan.targetInitialIdentity,
387
+ targetInitialState: plan.targetInitialState,
388
+ fileCount: plan.fileCount,
389
+ directoryCount: plan.directoryCount,
390
+ totalBytes: plan.totalBytes,
391
+ manifestHash: plan.manifestHash,
392
+ configPath: plan.configPath,
393
+ originalConfigHash: plan.originalConfigHash,
394
+ expectedConfigHash: plan.expectedConfigHash,
395
+ }))
396
+ .digest('hex');
397
+ }
398
+ function v1PlanIdFor(plan) {
399
+ return createHash('sha256')
400
+ .update(JSON.stringify({
401
+ source: plan.source,
402
+ target: plan.target,
403
+ staging: STAGING_PLAN_IDENTITY,
404
+ targetInitialState: plan.targetInitialState,
405
+ fileCount: plan.fileCount,
406
+ directoryCount: plan.directoryCount,
407
+ totalBytes: plan.totalBytes,
408
+ manifestHash: plan.manifestHash,
409
+ configPath: plan.configPath,
410
+ originalConfigHash: plan.originalConfigHash,
411
+ expectedConfigHash: plan.expectedConfigHash,
412
+ }))
413
+ .digest('hex');
414
+ }
415
+ function birthtimeOf(stat) {
416
+ return 'birthtimeNs' in stat && typeof stat.birthtimeNs === 'bigint'
417
+ ? stat.birthtimeNs
418
+ : stat.birthtimeMs;
419
+ }
420
+ function ctimeOf(stat) {
421
+ return 'ctimeNs' in stat && typeof stat.ctimeNs === 'bigint' ? stat.ctimeNs : stat.ctimeMs;
422
+ }
423
+ function mtimeOf(stat) {
424
+ return 'mtimeNs' in stat && typeof stat.mtimeNs === 'bigint' ? stat.mtimeNs : stat.mtimeMs;
425
+ }
426
+ function fileObjectIdentity(stat) {
427
+ return { dev: stat.dev, ino: stat.ino, birthtime: birthtimeOf(stat) };
428
+ }
429
+ function identityScalar(value) {
430
+ return String(value);
431
+ }
432
+ function stableObjectIdentity(stat, label) {
433
+ const objectIdentity = fileObjectIdentity(stat);
434
+ if (!hasComparableFileObject(objectIdentity, objectIdentity)) {
435
+ throw new Error(`${label} filesystem does not expose a stable device and file identity; refusing an auditable root move`);
436
+ }
437
+ return {
438
+ dev: identityScalar(stat.dev),
439
+ ino: identityScalar(stat.ino),
440
+ birthtime: identityScalar(birthtimeOf(stat)),
441
+ ctime: identityScalar(ctimeOf(stat)),
442
+ mtime: identityScalar(mtimeOf(stat)),
443
+ };
444
+ }
445
+ function stableChainIdentity(projectRoot, chain, label) {
446
+ return chain.entries.map((entry) => {
447
+ const identity = stableObjectIdentity(entry.stat, label);
448
+ return {
449
+ path: projectRelative(projectRoot, entry.path) || '.',
450
+ dev: identity.dev,
451
+ ino: identity.ino,
452
+ birthtime: identity.birthtime,
453
+ };
454
+ });
455
+ }
456
+ function sameStableIdentity(left, right) {
457
+ return JSON.stringify(left) === JSON.stringify(right);
458
+ }
459
+ function sameStableChain(left, right) {
460
+ return (left.length === right.length &&
461
+ left.every((entry, index) => sameStableIdentity(entry, right[index])));
462
+ }
463
+ async function captureStableSourceIdentity(projectRoot, directory, label) {
464
+ const chain = await captureProtectedDirectoryChain(projectRoot, directory, label);
465
+ await validateProtectedDirectoryChain(chain, label);
466
+ return stableChainIdentity(projectRoot, chain, label);
467
+ }
468
+ function sameInspectedFile(left, right) {
469
+ const leftObject = fileObjectIdentity(left);
470
+ const rightObject = fileObjectIdentity(right);
471
+ if (hasComparableFileObject(leftObject, rightObject)) {
472
+ return sameFileObject(leftObject, rightObject);
473
+ }
474
+ return (sameFileObject(leftObject, rightObject) &&
475
+ birthtimeOf(left) === birthtimeOf(right) &&
476
+ ctimeOf(left) === ctimeOf(right) &&
477
+ left.size === right.size);
478
+ }
479
+ function hashBytes(bytes) {
480
+ return createHash('sha256').update(bytes).digest('hex');
481
+ }
482
+ async function readRootMoveFile(projectRoot, file, maxBytes, label, inspected) {
483
+ const result = await readProtectedProjectFile(projectRoot, projectRelative(projectRoot, file), maxBytes, { label, bigint: true });
484
+ if (inspected && !sameInspectedFile(inspected, result.stat)) {
485
+ throw new Error(`${label} changed while reading`);
486
+ }
487
+ if (BigInt(result.stat.size) !== BigInt(result.bytes.byteLength)) {
488
+ throw new Error(`${label} changed while reading`);
489
+ }
490
+ return result.bytes;
491
+ }
492
+ async function projectConfigSnapshot(projectRoot) {
493
+ const snapshot = await readWorkflowProjectConfigSnapshot(projectRoot, {
494
+ allowPartialProject: true,
495
+ });
496
+ if (!snapshot.document || !snapshot.identity.exists || !snapshot.identity.sha256) {
497
+ throw new Error('.comet/config.yaml does not exist');
498
+ }
499
+ return snapshot;
500
+ }
501
+ async function projectConfigHash(projectRoot) {
502
+ return (await projectConfigSnapshot(projectRoot)).identity.sha256;
503
+ }
504
+ function expectedPostSwitchConfigHash(parsed) {
505
+ const classic = parsed.value.classic;
506
+ if (!classic || typeof classic !== 'object' || Array.isArray(classic)) {
507
+ throw new Error('classic must be a mapping');
508
+ }
509
+ const expected = renderStructuredProjectConfig({
510
+ ...parsed.value,
511
+ classic: {
512
+ ...classic,
513
+ artifact_layout: 'docs',
514
+ },
515
+ }, parsed.classic?.language === 'zh-CN' || parsed.native?.language === 'zh-CN' ? 'zh-CN' : 'en');
516
+ return createHash('sha256').update(expected).digest('hex');
517
+ }
518
+ async function scanTree(projectRoot, root, testHooks) {
519
+ const directories = [];
520
+ const files = [];
521
+ let totalBytes = 0;
522
+ async function visit(directory, relativeDirectory) {
523
+ await assertProtectedMovePath(projectRoot, directory, relativeDirectory || projectRelative(projectRoot, root), 'directory');
524
+ const entries = await readProtectedDirectory(projectRoot, directory, `tree:${relativeDirectory || projectRelative(projectRoot, root)}`, testHooks);
525
+ for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
526
+ const absolute = path.join(directory, entry.name);
527
+ const relative = relativeDirectory ? `${relativeDirectory}/${entry.name}` : entry.name;
528
+ const stat = await fs.lstat(absolute, { bigint: true });
529
+ if (stat.isSymbolicLink()) {
530
+ throw new Error(`Classic root move does not support symbolic links or junctions: ${relative}`);
531
+ }
532
+ if (stat.isDirectory()) {
533
+ directories.push(relative);
534
+ await visit(absolute, relative);
535
+ continue;
536
+ }
537
+ if (!stat.isFile()) {
538
+ throw new Error(`Classic root move supports only regular files and directories: ${relative}`);
539
+ }
540
+ await testHooks?.afterSourceFileInspect?.(relative);
541
+ if (files.length + 1 > MAX_FILES) {
542
+ throw new Error(`Classic root move exceeds ${MAX_FILES} files`);
543
+ }
544
+ const remainingBytes = MAX_TOTAL_BYTES - totalBytes;
545
+ const bytes = await readRootMoveFile(projectRoot, absolute, Math.max(1, remainingBytes), `Classic root move source file ${relative}`, stat);
546
+ totalBytes += bytes.byteLength;
547
+ if (totalBytes > MAX_TOTAL_BYTES) {
548
+ throw new Error(`Classic root move exceeds ${MAX_TOTAL_BYTES} bytes`);
549
+ }
550
+ files.push({ path: relative, size: bytes.byteLength, hash: hashBytes(bytes) });
551
+ }
552
+ }
553
+ await visit(root, '');
554
+ directories.sort((left, right) => left.localeCompare(right));
555
+ files.sort((left, right) => left.path.localeCompare(right.path));
556
+ const normalized = { directories, files, totalBytes };
557
+ return { ...normalized, hash: manifestHash(normalized) };
558
+ }
559
+ function sameManifest(actual, expected) {
560
+ return actual.hash === expected.hash;
561
+ }
562
+ async function inspectInitialTarget(projectRoot, target, testHooks) {
563
+ try {
564
+ const chain = await captureProtectedDirectoryChain(projectRoot, target, 'docs-target');
565
+ const initialEntry = chain.entries.at(-1);
566
+ if (!initialEntry)
567
+ throw new Error('Classic docs target identity is unavailable');
568
+ const initialIdentity = stableObjectIdentity(initialEntry.stat, 'Classic docs target');
569
+ await testHooks?.afterDirectoryInspect?.('docs-target');
570
+ await validateProtectedDirectoryChain(chain, 'docs-target');
571
+ const entries = await fs.readdir(target, { withFileTypes: true });
572
+ await validateProtectedDirectoryChain(chain, 'docs-target');
573
+ const currentChain = await captureProtectedDirectoryChain(projectRoot, target, 'docs-target');
574
+ const currentEntry = currentChain.entries.at(-1);
575
+ const currentIdentity = currentEntry
576
+ ? stableObjectIdentity(currentEntry.stat, 'Classic docs target')
577
+ : null;
578
+ if (!currentIdentity || !sameStableIdentity(initialIdentity, currentIdentity)) {
579
+ throw new Error('Classic docs target changed after inspection');
580
+ }
581
+ if (entries.length > 0) {
582
+ return {
583
+ state: 'non-empty',
584
+ conflicts: ['Classic docs target is not empty'],
585
+ identity: currentIdentity,
586
+ };
587
+ }
588
+ return { state: 'empty', conflicts: [], identity: currentIdentity };
589
+ }
590
+ catch (error) {
591
+ if (error.code === 'ENOENT') {
592
+ return { state: 'missing', conflicts: [], identity: null };
593
+ }
594
+ throw error;
595
+ }
596
+ }
597
+ async function activeChangeBlockers(projectRoot, source, testHooks) {
598
+ const changesDir = path.join(source, 'changes');
599
+ let entries;
600
+ try {
601
+ entries = await readProtectedDirectory(projectRoot, changesDir, 'active-changes', testHooks);
602
+ }
603
+ catch (error) {
604
+ if (error.code === 'ENOENT')
605
+ return [];
606
+ throw error;
607
+ }
608
+ return entries
609
+ .filter((entry) => entry.name !== 'archive')
610
+ .map((entry) => `active or unmanaged OpenSpec change: ${entry.name}`)
611
+ .sort();
612
+ }
613
+ async function archiveAndRecoveryBlockers(projectRoot, source, testHooks) {
614
+ const archiveRoot = path.join(source, 'changes', 'archive');
615
+ if (!(await protectedDirectoryExists(projectRoot, archiveRoot, 'archive-root')))
616
+ return [];
617
+ const blockers = [];
618
+ for (const entry of await readProtectedDirectory(projectRoot, archiveRoot, 'archive-root', testHooks)) {
619
+ if (!entry.isDirectory())
620
+ continue;
621
+ const changeDir = path.join(archiveRoot, entry.name);
622
+ const pending = path.join(archiveRoot, entry.name, '.comet', 'pending-action.json');
623
+ const changeChain = await captureProtectedDirectoryChain(projectRoot, changeDir, `archived change ${entry.name}`);
624
+ await testHooks?.afterDirectoryInspect?.(`archived-change:${entry.name}`);
625
+ await validateProtectedDirectoryChain(changeChain, `archived change ${entry.name}`);
626
+ await testHooks?.beforeArchivedPendingRead?.(entry.name);
627
+ let pendingSource = null;
628
+ try {
629
+ pendingSource = (await readRootMoveFile(projectRoot, pending, MAX_PENDING_ACTION_BYTES, `Archived pending action ${entry.name}`))
630
+ .toString('utf8')
631
+ .trim();
632
+ }
633
+ catch (error) {
634
+ const code = error.code;
635
+ if (code !== 'ENOENT' && code !== 'ENOTDIR')
636
+ throw error;
637
+ }
638
+ if (pendingSource !== null) {
639
+ if (pendingSource && pendingSource !== 'null' && pendingSource !== '{}') {
640
+ blockers.push(`archived change ${entry.name} has a pending archive action`);
641
+ }
642
+ }
643
+ try {
644
+ await validateProtectedDirectoryChain(changeChain, `archived change ${entry.name}`);
645
+ const [projection, legacy] = await Promise.all([
646
+ readClassicState(changeDir, { migrate: false }),
647
+ readLegacyState(changeDir),
648
+ ]);
649
+ await validateProtectedDirectoryChain(changeChain, `archived change ${entry.name}`);
650
+ if (!legacy.archived) {
651
+ blockers.push(`archived change ${entry.name} has archived: false`);
652
+ }
653
+ if (projection.run) {
654
+ if (projection.run.pending !== null ||
655
+ (await protectedFileExists(projectRoot, path.join(changeDir, projection.run.pendingRef), `Archived recovery pending file ${entry.name}`))) {
656
+ blockers.push(`archived change ${entry.name} has pending Classic recovery`);
657
+ }
658
+ if (projection.run.status !== 'completed') {
659
+ blockers.push(`archived change ${entry.name} has incomplete Run status: ${projection.run.status}`);
660
+ }
661
+ else {
662
+ const checkpoint = await readCheckpoint(changeDir, projection.run.checkpointRef);
663
+ if (!checkpoint || checkpoint.runId !== projection.run.runId) {
664
+ blockers.push(`archived change ${entry.name} has no completed checkpoint`);
665
+ }
666
+ }
667
+ }
668
+ }
669
+ catch (error) {
670
+ blockers.push(`archived change ${entry.name} has invalid recovery state: ${error instanceof Error ? error.message : String(error)}`);
671
+ }
672
+ }
673
+ return blockers.sort();
674
+ }
675
+ async function classicSelectionBlockers(projectRoot) {
676
+ const selection = await readCometCurrentSelection(projectRoot);
677
+ if (selection.status === 'selected' && selection.selection.workflow === 'classic') {
678
+ return [`current Classic selection: ${selection.selection.change}`];
679
+ }
680
+ return [];
681
+ }
682
+ async function validatedLegacyConfig(projectRoot) {
683
+ await assertClassicWorkflowEnabled(projectRoot);
684
+ if ((await readClassicArtifactLayout(projectRoot)) !== 'legacy') {
685
+ throw new Error('Classic root move requires classic.artifact_layout: legacy');
686
+ }
687
+ }
688
+ async function preflight(projectRoot, options = {}) {
689
+ await assertRootMovePreflightBoundaries(projectRoot);
690
+ await validatedLegacyConfig(projectRoot);
691
+ if ((await readClassicArtifactLayout(projectRoot)) !== 'legacy') {
692
+ throw new Error('Classic root move requires the legacy layout');
693
+ }
694
+ const legacy = classicLayoutPaths(projectRoot, 'legacy');
695
+ const docs = classicLayoutPaths(projectRoot, 'docs');
696
+ if (!(await protectedDirectoryExists(projectRoot, legacy.openSpecRoot, 'Classic legacy root'))) {
697
+ throw new Error('Classic legacy root does not exist: openspec/');
698
+ }
699
+ // Validate the complete source tree before reading any nested state file so
700
+ // blocker reporting cannot follow a special object outside the migration root.
701
+ const sourceIdentityBefore = await captureStableSourceIdentity(projectRoot, legacy.openSpecRoot, 'Classic legacy root identity');
702
+ const manifest = await scanTree(projectRoot, legacy.openSpecRoot, options.testHooks);
703
+ const sourceIdentityAfter = await captureStableSourceIdentity(projectRoot, legacy.openSpecRoot, 'Classic legacy root identity');
704
+ if (!sameStableChain(sourceIdentityBefore, sourceIdentityAfter)) {
705
+ throw new Error('Classic legacy root identity changed during migration preflight');
706
+ }
707
+ const targetInspection = await inspectInitialTarget(projectRoot, docs.openSpecRoot, options.testHooks);
708
+ const activeBlockers = await activeChangeBlockers(projectRoot, legacy.openSpecRoot, options.testHooks);
709
+ const archiveBlockers = await archiveAndRecoveryBlockers(projectRoot, legacy.openSpecRoot, options.testHooks);
710
+ const selectionBlockers = await classicSelectionBlockers(projectRoot);
711
+ const configSnapshot = await projectConfigSnapshot(projectRoot);
712
+ await options.testHooks?.afterConfigSnapshot?.();
713
+ const configHash = configSnapshot.identity.sha256;
714
+ const expectedConfigHash = expectedPostSwitchConfigHash(configSnapshot.document);
715
+ const identity = {
716
+ source: projectRelative(projectRoot, legacy.openSpecRoot),
717
+ target: projectRelative(projectRoot, docs.openSpecRoot),
718
+ staging: STAGING_PLAN_IDENTITY,
719
+ artifactLayout: 'legacy',
720
+ sourceIdentity: sourceIdentityAfter,
721
+ targetInitialIdentity: targetInspection.identity,
722
+ targetInitialState: targetInspection.state,
723
+ fileCount: manifest.files.length,
724
+ directoryCount: manifest.directories.length,
725
+ totalBytes: manifest.totalBytes,
726
+ manifestHash: manifest.hash,
727
+ configPath: WORKFLOW_PROJECT_CONFIG_PATH,
728
+ originalConfigHash: configHash,
729
+ expectedConfigHash,
730
+ };
731
+ return {
732
+ manifest,
733
+ plan: {
734
+ projectRoot,
735
+ ...identity,
736
+ configHash,
737
+ planId: planIdFor(identity),
738
+ fileSummary: manifest.files.map((file) => ({ ...file })),
739
+ configChange: { from: 'legacy', to: 'docs' },
740
+ conflicts: targetInspection.conflicts,
741
+ blockers: [...activeBlockers, ...archiveBlockers, ...selectionBlockers],
742
+ pendingRecovery: null,
743
+ historicalPointersPreserved: [...HISTORICAL_POINTERS_PRESERVED],
744
+ applyPreconditions: [...APPLY_PRECONDITIONS],
745
+ allowedRecoveryStrategies: [],
746
+ readyToApply: targetInspection.conflicts.length === 0 &&
747
+ activeBlockers.length === 0 &&
748
+ archiveBlockers.length === 0 &&
749
+ selectionBlockers.length === 0,
750
+ },
751
+ };
752
+ }
753
+ async function copyManifest(projectRoot, sourceRoot, targetRoot, manifest, testHooks) {
754
+ await ensureRootMoveDirectory(projectRoot, targetRoot, 'Classic root move staging root', testHooks);
755
+ for (const directory of manifest.directories) {
756
+ await ensureRootMoveDirectory(projectRoot, path.join(targetRoot, ...directory.split('/')), `Classic root move staging directory ${directory}`, testHooks);
757
+ }
758
+ for (const file of manifest.files) {
759
+ await testHooks?.beforeSourceFileCopy?.(file.path);
760
+ const source = path.join(sourceRoot, ...file.path.split('/'));
761
+ const sourceBytes = await readRootMoveFile(projectRoot, source, Math.max(1, file.size), `Classic root move source file ${file.path}`);
762
+ if (sourceBytes.byteLength !== file.size || hashBytes(sourceBytes) !== file.hash) {
763
+ throw new Error('Classic legacy root changed after migration preflight');
764
+ }
765
+ const target = path.join(targetRoot, ...file.path.split('/'));
766
+ await ensureRootMoveDirectory(projectRoot, path.dirname(target), `Classic root move staging parent ${file.path}`, testHooks);
767
+ const targetInspection = await inspectProtectedProjectPath(projectRoot, projectRelative(projectRoot, target), { label: `Classic root move staging file ${file.path}`, expected: 'file' });
768
+ if (targetInspection.exists) {
769
+ throw new Error('Classic root move staging changed after migration preflight');
770
+ }
771
+ await writeProtectedFileExclusive(projectRoot, target, sourceBytes, `copy-file:${file.path}`, testHooks);
772
+ const copiedBytes = await readRootMoveFile(projectRoot, target, Math.max(1, file.size), `Classic root move staging file ${file.path}`);
773
+ if (copiedBytes.byteLength !== file.size || hashBytes(copiedBytes) !== file.hash) {
774
+ throw new Error('Classic root move staging verification failed');
775
+ }
776
+ }
777
+ }
778
+ function journalFile(projectRoot) {
779
+ return path.join(projectRoot, ...JOURNAL_RELATIVE_PATH.split('/'));
780
+ }
781
+ function invalidJournal(detail) {
782
+ return new Error(`invalid Classic root move journal: ${detail}`);
783
+ }
784
+ function record(value, label) {
785
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
786
+ throw invalidJournal(`${label} must be an object`);
787
+ }
788
+ return value;
789
+ }
790
+ function assertExactKeys(value, expected, label) {
791
+ const actual = Object.keys(value).sort();
792
+ const sortedExpected = [...expected].sort();
793
+ if (JSON.stringify(actual) !== JSON.stringify(sortedExpected)) {
794
+ throw invalidJournal(`${label} fields are invalid`);
795
+ }
796
+ }
797
+ function assertSafeManifestPath(value, label) {
798
+ if (typeof value !== 'string' || value.length === 0 || value.includes('\\')) {
799
+ throw invalidJournal(`${label} is invalid`);
800
+ }
801
+ const segments = value.split('/');
802
+ if (path.posix.isAbsolute(value) ||
803
+ segments.some((segment) => segment === '' || segment === '.' || segment === '..') ||
804
+ path.posix.normalize(value) !== value) {
805
+ throw invalidJournal(`${label} must stay inside the migration tree`);
806
+ }
807
+ return value;
808
+ }
809
+ function parseManifest(value) {
810
+ const manifest = record(value, 'manifest');
811
+ assertExactKeys(manifest, ['directories', 'files', 'totalBytes', 'hash'], 'manifest');
812
+ if (!Array.isArray(manifest.directories) ||
813
+ !Array.isArray(manifest.files) ||
814
+ !Number.isSafeInteger(manifest.totalBytes) ||
815
+ manifest.totalBytes < 0 ||
816
+ manifest.totalBytes > MAX_TOTAL_BYTES ||
817
+ typeof manifest.hash !== 'string' ||
818
+ !HASH_PATTERN.test(manifest.hash)) {
819
+ throw invalidJournal('manifest shape is invalid');
820
+ }
821
+ const directories = manifest.directories.map((entry, index) => assertSafeManifestPath(entry, `manifest path directories[${index}]`));
822
+ const files = manifest.files.map((entry, index) => {
823
+ const file = record(entry, `manifest.files[${index}]`);
824
+ assertExactKeys(file, ['path', 'size', 'hash'], `manifest.files[${index}]`);
825
+ const filePath = assertSafeManifestPath(file.path, `manifest path files[${index}]`);
826
+ if (!Number.isSafeInteger(file.size) ||
827
+ file.size < 0 ||
828
+ typeof file.hash !== 'string' ||
829
+ !HASH_PATTERN.test(file.hash)) {
830
+ throw invalidJournal(`manifest.files[${index}] is invalid`);
831
+ }
832
+ return { path: filePath, size: file.size, hash: file.hash };
833
+ });
834
+ if (files.length > MAX_FILES)
835
+ throw invalidJournal(`manifest exceeds ${MAX_FILES} files`);
836
+ if (directories.some((entry, index) => index > 0 && directories[index - 1] >= entry) ||
837
+ files.some((entry, index) => index > 0 && files[index - 1].path >= entry.path)) {
838
+ throw invalidJournal('manifest paths must be unique and sorted');
839
+ }
840
+ const totalBytes = files.reduce((total, file) => total + file.size, 0);
841
+ if (totalBytes !== manifest.totalBytes) {
842
+ throw invalidJournal('manifest totalBytes does not match its files');
843
+ }
844
+ const normalized = { directories, files, totalBytes };
845
+ const hash = manifestHash(normalized);
846
+ if (hash !== manifest.hash)
847
+ throw invalidJournal('manifest hash is invalid');
848
+ return { ...normalized, hash };
849
+ }
850
+ function parseFileObjectIdentity(value, label) {
851
+ const identity = record(value, label);
852
+ assertExactKeys(identity, ['dev', 'ino', 'birthtime'], label);
853
+ const scalarPattern = /^-?[0-9]+$/u;
854
+ for (const field of ['dev', 'ino', 'birthtime']) {
855
+ if (typeof identity[field] !== 'string' || !scalarPattern.test(identity[field])) {
856
+ throw invalidJournal(`${label}.${field} is invalid`);
857
+ }
858
+ }
859
+ if (identity.dev === '0' || identity.ino === '0') {
860
+ throw invalidJournal(`${label} does not contain a stable filesystem identity`);
861
+ }
862
+ return {
863
+ dev: identity.dev,
864
+ ino: identity.ino,
865
+ birthtime: identity.birthtime,
866
+ };
867
+ }
868
+ function parseObjectIdentity(value, label) {
869
+ const identity = record(value, label);
870
+ assertExactKeys(identity, ['dev', 'ino', 'birthtime', 'ctime', 'mtime'], label);
871
+ const base = parseFileObjectIdentity({
872
+ dev: identity.dev,
873
+ ino: identity.ino,
874
+ birthtime: identity.birthtime,
875
+ }, label);
876
+ const scalarPattern = /^-?[0-9]+$/u;
877
+ if (typeof identity.ctime !== 'string' ||
878
+ !scalarPattern.test(identity.ctime) ||
879
+ typeof identity.mtime !== 'string' ||
880
+ !scalarPattern.test(identity.mtime)) {
881
+ throw invalidJournal(`${label} timestamps are invalid`);
882
+ }
883
+ return {
884
+ ...base,
885
+ ctime: identity.ctime,
886
+ mtime: identity.mtime,
887
+ };
888
+ }
889
+ function parseSourceIdentity(value) {
890
+ if (!Array.isArray(value) || value.length !== 2) {
891
+ throw invalidJournal('sourceIdentity must bind the project root and openspec root');
892
+ }
893
+ const expectedPaths = ['.', 'openspec'];
894
+ return value.map((entry, index) => {
895
+ const identity = record(entry, `sourceIdentity[${index}]`);
896
+ assertExactKeys(identity, ['path', 'dev', 'ino', 'birthtime'], `sourceIdentity[${index}]`);
897
+ if (identity.path !== expectedPaths[index]) {
898
+ throw invalidJournal(`sourceIdentity[${index}].path is invalid`);
899
+ }
900
+ const objectIdentity = {
901
+ dev: identity.dev,
902
+ ino: identity.ino,
903
+ birthtime: identity.birthtime,
904
+ };
905
+ return {
906
+ path: expectedPaths[index],
907
+ ...parseFileObjectIdentity(objectIdentity, `sourceIdentity[${index}]`),
908
+ };
909
+ });
910
+ }
911
+ function parseJournalV1(journal) {
912
+ assertExactKeys(journal, [
913
+ 'schema',
914
+ 'id',
915
+ 'stage',
916
+ 'source',
917
+ 'target',
918
+ 'staging',
919
+ 'configPath',
920
+ 'originalConfigHash',
921
+ 'expectedConfigHash',
922
+ 'planId',
923
+ 'targetInitialState',
924
+ 'manifest',
925
+ ], 'root');
926
+ if (typeof journal.id !== 'string' || !UUID_PATTERN.test(journal.id)) {
927
+ throw invalidJournal('id is invalid');
928
+ }
929
+ if (journal.stage !== 'copying' &&
930
+ journal.stage !== 'ready' &&
931
+ journal.stage !== 'switched' &&
932
+ journal.stage !== 'configured') {
933
+ throw invalidJournal('stage is invalid');
934
+ }
935
+ const expectedStaging = `.comet/transactions/classic-root-move/${journal.id}/openspec`;
936
+ if (journal.source !== 'openspec' ||
937
+ journal.target !== 'docs/openspec' ||
938
+ journal.staging !== expectedStaging) {
939
+ throw invalidJournal('source, target, and staging must use the managed project paths');
940
+ }
941
+ if (journal.configPath !== WORKFLOW_PROJECT_CONFIG_PATH ||
942
+ typeof journal.originalConfigHash !== 'string' ||
943
+ !HASH_PATTERN.test(journal.originalConfigHash) ||
944
+ typeof journal.expectedConfigHash !== 'string' ||
945
+ !HASH_PATTERN.test(journal.expectedConfigHash) ||
946
+ typeof journal.planId !== 'string' ||
947
+ !HASH_PATTERN.test(journal.planId)) {
948
+ throw invalidJournal('config path, config hashes, or planId is invalid');
949
+ }
950
+ if (journal.targetInitialState !== 'missing' && journal.targetInitialState !== 'empty') {
951
+ throw invalidJournal('targetInitialState is invalid');
952
+ }
953
+ const targetInitialState = journal.targetInitialState;
954
+ const manifest = parseManifest(journal.manifest);
955
+ const identity = {
956
+ source: journal.source,
957
+ target: journal.target,
958
+ targetInitialState,
959
+ fileCount: manifest.files.length,
960
+ directoryCount: manifest.directories.length,
961
+ totalBytes: manifest.totalBytes,
962
+ manifestHash: manifest.hash,
963
+ configPath: journal.configPath,
964
+ originalConfigHash: journal.originalConfigHash,
965
+ expectedConfigHash: journal.expectedConfigHash,
966
+ };
967
+ if (v1PlanIdFor(identity) !== journal.planId) {
968
+ throw invalidJournal('planId does not match the bound config and tree');
969
+ }
970
+ return {
971
+ schema: 'comet.classic-root-move.v1',
972
+ id: journal.id,
973
+ stage: journal.stage,
974
+ source: journal.source,
975
+ target: journal.target,
976
+ staging: journal.staging,
977
+ configPath: journal.configPath,
978
+ originalConfigHash: journal.originalConfigHash,
979
+ expectedConfigHash: journal.expectedConfigHash,
980
+ planId: journal.planId,
981
+ targetInitialState,
982
+ manifest,
983
+ };
984
+ }
985
+ function parseJournalV2(journal) {
986
+ assertExactKeys(journal, [
987
+ 'schema',
988
+ 'id',
989
+ 'stage',
990
+ 'source',
991
+ 'target',
992
+ 'staging',
993
+ 'artifactLayout',
994
+ 'sourceIdentity',
995
+ 'targetInitialIdentity',
996
+ 'configPath',
997
+ 'originalConfigHash',
998
+ 'expectedConfigHash',
999
+ 'planId',
1000
+ 'approvedPlanId',
1001
+ 'targetInitialState',
1002
+ 'manifest',
1003
+ ], 'root');
1004
+ if (typeof journal.id !== 'string' || !UUID_PATTERN.test(journal.id)) {
1005
+ throw invalidJournal('id is invalid');
1006
+ }
1007
+ if (journal.stage !== 'locked' &&
1008
+ journal.stage !== 'copying' &&
1009
+ journal.stage !== 'ready' &&
1010
+ journal.stage !== 'switched' &&
1011
+ journal.stage !== 'configured') {
1012
+ throw invalidJournal('stage is invalid');
1013
+ }
1014
+ const expectedStaging = `.comet/transactions/classic-root-move/${journal.id}/openspec`;
1015
+ if (journal.source !== 'openspec' ||
1016
+ journal.target !== 'docs/openspec' ||
1017
+ journal.staging !== expectedStaging) {
1018
+ throw invalidJournal('source, target, and staging must use the managed project paths');
1019
+ }
1020
+ if (journal.artifactLayout !== 'legacy') {
1021
+ throw invalidJournal('artifactLayout must be legacy');
1022
+ }
1023
+ const sourceIdentity = parseSourceIdentity(journal.sourceIdentity);
1024
+ if (journal.configPath !== WORKFLOW_PROJECT_CONFIG_PATH ||
1025
+ typeof journal.originalConfigHash !== 'string' ||
1026
+ !HASH_PATTERN.test(journal.originalConfigHash) ||
1027
+ typeof journal.expectedConfigHash !== 'string' ||
1028
+ !HASH_PATTERN.test(journal.expectedConfigHash) ||
1029
+ typeof journal.planId !== 'string' ||
1030
+ !HASH_PATTERN.test(journal.planId) ||
1031
+ typeof journal.approvedPlanId !== 'string' ||
1032
+ !HASH_PATTERN.test(journal.approvedPlanId)) {
1033
+ throw invalidJournal('config path, config hashes, planId, or approvedPlanId is invalid');
1034
+ }
1035
+ const targetInitialState = journal.targetInitialState;
1036
+ if (targetInitialState !== 'missing' &&
1037
+ targetInitialState !== 'empty' &&
1038
+ !(journal.stage === 'locked' && targetInitialState === 'non-empty')) {
1039
+ throw invalidJournal('targetInitialState is invalid');
1040
+ }
1041
+ const targetInitialIdentity = journal.targetInitialIdentity === null
1042
+ ? null
1043
+ : parseObjectIdentity(journal.targetInitialIdentity, 'targetInitialIdentity');
1044
+ if ((targetInitialState === 'missing' && targetInitialIdentity !== null) ||
1045
+ (targetInitialState !== 'missing' && targetInitialIdentity === null)) {
1046
+ throw invalidJournal('targetInitialIdentity does not match targetInitialState');
1047
+ }
1048
+ const manifest = parseManifest(journal.manifest);
1049
+ const identity = {
1050
+ source: journal.source,
1051
+ target: journal.target,
1052
+ staging: STAGING_PLAN_IDENTITY,
1053
+ artifactLayout: 'legacy',
1054
+ sourceIdentity,
1055
+ targetInitialIdentity,
1056
+ targetInitialState,
1057
+ fileCount: manifest.files.length,
1058
+ directoryCount: manifest.directories.length,
1059
+ totalBytes: manifest.totalBytes,
1060
+ manifestHash: manifest.hash,
1061
+ configPath: journal.configPath,
1062
+ originalConfigHash: journal.originalConfigHash,
1063
+ expectedConfigHash: journal.expectedConfigHash,
1064
+ };
1065
+ if (planIdFor(identity) !== journal.planId) {
1066
+ throw invalidJournal('planId does not match the bound config and tree');
1067
+ }
1068
+ if (journal.stage !== 'locked' && journal.approvedPlanId !== journal.planId) {
1069
+ throw invalidJournal('approvedPlanId does not match the executable plan');
1070
+ }
1071
+ return {
1072
+ schema: 'comet.classic-root-move.v2',
1073
+ id: journal.id,
1074
+ stage: journal.stage,
1075
+ source: journal.source,
1076
+ target: journal.target,
1077
+ staging: journal.staging,
1078
+ artifactLayout: 'legacy',
1079
+ sourceIdentity,
1080
+ targetInitialIdentity,
1081
+ configPath: journal.configPath,
1082
+ originalConfigHash: journal.originalConfigHash,
1083
+ expectedConfigHash: journal.expectedConfigHash,
1084
+ planId: journal.planId,
1085
+ approvedPlanId: journal.approvedPlanId,
1086
+ targetInitialState,
1087
+ manifest,
1088
+ };
1089
+ }
1090
+ function parseJournal(value) {
1091
+ const journal = record(value, 'root');
1092
+ if (journal.schema === 'comet.classic-root-move.v1')
1093
+ return parseJournalV1(journal);
1094
+ if (journal.schema === 'comet.classic-root-move.v2')
1095
+ return parseJournalV2(journal);
1096
+ throw invalidJournal('schema is unsupported');
1097
+ }
1098
+ async function readJournal(projectRoot, testHooks) {
1099
+ return readJournalAtPath(projectRoot, journalFile(projectRoot), JOURNAL_RELATIVE_PATH, testHooks?.afterJournalInspect);
1100
+ }
1101
+ async function readJournalAtPath(projectRoot, file, label, afterInspect) {
1102
+ await assertProtectedMovePath(projectRoot, file, label, 'file');
1103
+ try {
1104
+ const stat = await fs.lstat(file, { bigint: true });
1105
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.size > BigInt(MAX_JOURNAL_BYTES)) {
1106
+ throw invalidJournal('journal must be a bounded regular file');
1107
+ }
1108
+ await afterInspect?.();
1109
+ const bytes = await readRootMoveFile(projectRoot, file, MAX_JOURNAL_BYTES, 'Classic root move journal', stat);
1110
+ const journal = parseJournal(JSON.parse(bytes.toString('utf8')));
1111
+ Object.defineProperty(journal, journalClaimBrand, {
1112
+ value: {
1113
+ fileIdentity: stat,
1114
+ contentHash: hashBytes(bytes),
1115
+ },
1116
+ enumerable: false,
1117
+ });
1118
+ return journal;
1119
+ }
1120
+ catch (error) {
1121
+ if (error.code === 'ENOENT')
1122
+ return null;
1123
+ throw error;
1124
+ }
1125
+ }
1126
+ function journalClaim(journal) {
1127
+ const claim = journal[journalClaimBrand];
1128
+ if (!claim)
1129
+ throw new Error('Classic root move journal has no ownership claim');
1130
+ return claim;
1131
+ }
1132
+ function sameJournalOwnership(expected, actual) {
1133
+ const expectedClaim = journalClaim(expected);
1134
+ const actualClaim = journalClaim(actual);
1135
+ return (sameInspectedFile(expectedClaim.fileIdentity, actualClaim.fileIdentity) &&
1136
+ expectedClaim.contentHash === actualClaim.contentHash &&
1137
+ expected.schema === actual.schema &&
1138
+ expected.id === actual.id &&
1139
+ expected.stage === actual.stage &&
1140
+ expected.planId === actual.planId);
1141
+ }
1142
+ async function validateOwnedJournal(projectRoot, expected) {
1143
+ const current = await readJournalAtPath(projectRoot, journalFile(projectRoot), JOURNAL_RELATIVE_PATH);
1144
+ if (!current || !sameJournalOwnership(expected, current)) {
1145
+ throw new Error('Classic root move journal ownership changed');
1146
+ }
1147
+ }
1148
+ async function restoreQuarantinedJournal(projectRoot, quarantine, operation, testHooks) {
1149
+ const file = journalFile(projectRoot);
1150
+ try {
1151
+ await linkProtectedFileExclusive(projectRoot, quarantine.file, file, `${operation}-publish`, testHooks);
1152
+ }
1153
+ catch (error) {
1154
+ if (error.code === 'EEXIST')
1155
+ return false;
1156
+ throw error;
1157
+ }
1158
+ const restored = await readJournal(projectRoot);
1159
+ if (!restored || !sameJournalOwnership(quarantine.journal, restored)) {
1160
+ throw new Error('Classic root move journal ownership changed while restoring quarantine');
1161
+ }
1162
+ await unlinkProtectedFile(projectRoot, quarantine.file, `${operation}-cleanup-quarantine`, testHooks, { expectedIdentity: journalClaim(quarantine.journal).fileIdentity });
1163
+ return true;
1164
+ }
1165
+ async function quarantineOwnedJournal(projectRoot, expected, operation, testHooks) {
1166
+ const file = journalFile(projectRoot);
1167
+ const quarantineFile = `${file}.${expected.id}.${randomUUID()}.quarantine`;
1168
+ await validateOwnedJournal(projectRoot, expected);
1169
+ const parent = await captureProtectedDirectoryChain(projectRoot, path.dirname(file), `Classic root move ${operation} quarantine`);
1170
+ await testHooks?.beforeMutation?.(`${operation}-quarantine`);
1171
+ await validateProtectedDirectoryChain(parent, `Classic root move ${operation} quarantine`);
1172
+ await validateOwnedJournal(projectRoot, expected);
1173
+ await fs.rename(file, quarantineFile);
1174
+ await validateProtectedDirectoryChain(parent, `Classic root move ${operation} quarantine`);
1175
+ const moved = await readJournalAtPath(projectRoot, quarantineFile, projectRelative(projectRoot, quarantineFile)).catch(async (error) => {
1176
+ await restoreQuarantinedPath(projectRoot, quarantineFile, `${operation}-restore-unverified`, testHooks).catch(() => false);
1177
+ throw new Error('Classic root move journal ownership changed while quarantining', {
1178
+ cause: error,
1179
+ });
1180
+ });
1181
+ if (!moved || !sameJournalOwnership(expected, moved)) {
1182
+ await restoreQuarantinedPath(projectRoot, quarantineFile, `${operation}-restore-successor`, testHooks).catch(() => false);
1183
+ throw new Error('Classic root move journal ownership changed while quarantining');
1184
+ }
1185
+ await testHooks?.afterJournalQuarantine?.(operation);
1186
+ return { file: quarantineFile, journal: moved };
1187
+ }
1188
+ async function restoreQuarantinedPath(projectRoot, quarantineFile, operation, testHooks) {
1189
+ const file = journalFile(projectRoot);
1190
+ let identity;
1191
+ try {
1192
+ identity = await captureMutationObject(quarantineFile, 'file', `Classic root move ${operation}`);
1193
+ }
1194
+ catch (error) {
1195
+ if (error.code === 'ENOENT')
1196
+ return false;
1197
+ throw error;
1198
+ }
1199
+ try {
1200
+ await linkProtectedFileExclusive(projectRoot, quarantineFile, file, `${operation}-publish`, testHooks);
1201
+ }
1202
+ catch (error) {
1203
+ if (error.code === 'EEXIST')
1204
+ return false;
1205
+ throw error;
1206
+ }
1207
+ await unlinkProtectedFile(projectRoot, quarantineFile, `${operation}-cleanup-quarantine`, testHooks, { expectedIdentity: identity });
1208
+ return true;
1209
+ }
1210
+ async function unlinkOwnedJournal(projectRoot, journal, operation, testHooks) {
1211
+ const quarantine = await quarantineOwnedJournal(projectRoot, journal, operation, testHooks);
1212
+ try {
1213
+ const removed = await unlinkProtectedFile(projectRoot, quarantine.file, `${operation}-quarantined`, testHooks, { expectedIdentity: journalClaim(quarantine.journal).fileIdentity });
1214
+ if (!removed) {
1215
+ throw new Error('Classic root move quarantined journal disappeared before removal');
1216
+ }
1217
+ return true;
1218
+ }
1219
+ catch (error) {
1220
+ await restoreQuarantinedJournal(projectRoot, quarantine, `${operation}-restore`, testHooks).catch(() => false);
1221
+ throw error;
1222
+ }
1223
+ }
1224
+ async function updateJournal(projectRoot, journal, stage, testHooks) {
1225
+ if (journal.schema === 'comet.classic-root-move.v1' && stage === 'locked') {
1226
+ throw new Error('Legacy Classic root move journals do not support the locked stage');
1227
+ }
1228
+ const updated = { ...journal, stage };
1229
+ return atomicWriteJournal(projectRoot, journal, updated, testHooks);
1230
+ }
1231
+ function transactionPaths(projectRoot, journal) {
1232
+ const layouts = {
1233
+ legacy: classicLayoutPaths(projectRoot, 'legacy'),
1234
+ docs: classicLayoutPaths(projectRoot, 'docs'),
1235
+ };
1236
+ const transactionRoot = path.join(projectRoot, '.comet', 'transactions', 'classic-root-move', journal.id);
1237
+ return {
1238
+ source: layouts.legacy.openSpecRoot,
1239
+ target: layouts.docs.openSpecRoot,
1240
+ staging: path.join(transactionRoot, 'openspec'),
1241
+ quarantine: path.join(transactionRoot, 'legacy-source'),
1242
+ transactionRoot,
1243
+ };
1244
+ }
1245
+ async function treeStatus(projectRoot, root, manifest) {
1246
+ if (!(await protectedDirectoryExists(projectRoot, root, 'Classic root move tree'))) {
1247
+ return 'missing';
1248
+ }
1249
+ try {
1250
+ return sameManifest(await scanTree(projectRoot, root), manifest) ? 'match' : 'mismatch';
1251
+ }
1252
+ catch {
1253
+ return 'mismatch';
1254
+ }
1255
+ }
1256
+ async function targetTreeStatus(projectRoot, root, manifest) {
1257
+ if (!(await protectedDirectoryExists(projectRoot, root, 'Classic root move target'))) {
1258
+ return 'missing';
1259
+ }
1260
+ try {
1261
+ const actual = await scanTree(projectRoot, root);
1262
+ if (sameManifest(actual, manifest))
1263
+ return 'match';
1264
+ if (actual.directories.length === 0 && actual.files.length === 0)
1265
+ return 'empty';
1266
+ return 'mismatch';
1267
+ }
1268
+ catch {
1269
+ return 'mismatch';
1270
+ }
1271
+ }
1272
+ async function manifestSubsetStatus(projectRoot, root, manifest) {
1273
+ if (!(await protectedDirectoryExists(projectRoot, root, 'Classic root move manifest tree'))) {
1274
+ return { status: 'missing' };
1275
+ }
1276
+ try {
1277
+ const actual = await scanTree(projectRoot, root);
1278
+ if (sameManifest(actual, manifest))
1279
+ return { status: 'complete', actual };
1280
+ const expectedDirectories = new Set(manifest.directories);
1281
+ const expectedFiles = new Map(manifest.files.map((file) => [file.path, file]));
1282
+ if (actual.directories.some((directory) => !expectedDirectories.has(directory))) {
1283
+ return { status: 'mismatch' };
1284
+ }
1285
+ for (const file of actual.files) {
1286
+ const expected = expectedFiles.get(file.path);
1287
+ if (!expected || expected.size !== file.size || expected.hash !== file.hash) {
1288
+ return { status: 'mismatch' };
1289
+ }
1290
+ }
1291
+ return { status: 'partial', actual };
1292
+ }
1293
+ catch {
1294
+ return { status: 'mismatch' };
1295
+ }
1296
+ }
1297
+ async function cleanupManifestBoundTree(projectRoot, root, manifest, testHooks, operationPrefix = 'remove-quarantine') {
1298
+ const inspection = await manifestSubsetStatus(projectRoot, root, manifest);
1299
+ if (inspection.status === 'missing')
1300
+ return;
1301
+ if (inspection.status === 'mismatch' || !inspection.actual) {
1302
+ throw new Error('Classic quarantine contains unknown or changed content; files were preserved');
1303
+ }
1304
+ // The whole remaining tree is validated as a manifest subset before the
1305
+ // first unlink. Each file is then revalidated immediately before removal.
1306
+ for (const file of inspection.actual.files) {
1307
+ const absolute = path.join(root, ...file.path.split('/'));
1308
+ let stat;
1309
+ try {
1310
+ stat = await fs.lstat(absolute, { bigint: true });
1311
+ }
1312
+ catch (error) {
1313
+ if (error.code === 'ENOENT')
1314
+ continue;
1315
+ throw error;
1316
+ }
1317
+ const bytes = stat.isFile() && !stat.isSymbolicLink()
1318
+ ? await readRootMoveFile(projectRoot, absolute, Math.max(1, file.size), `Classic root move quarantine file ${file.path}`, stat)
1319
+ : null;
1320
+ if (!bytes || bytes.byteLength !== file.size || hashBytes(bytes) !== file.hash) {
1321
+ throw new Error('Classic quarantine contains unknown or changed content; files were preserved');
1322
+ }
1323
+ await unlinkProtectedFile(projectRoot, absolute, `${operationPrefix}-file:${file.path}`, testHooks);
1324
+ }
1325
+ const directories = [...inspection.actual.directories].sort((left, right) => {
1326
+ const depth = right.split('/').length - left.split('/').length;
1327
+ return depth === 0 ? right.localeCompare(left) : depth;
1328
+ });
1329
+ for (const directory of directories) {
1330
+ const absolute = path.join(root, ...directory.split('/'));
1331
+ await removeProtectedEmptyDirectory(projectRoot, absolute, `${operationPrefix}-directory:${directory}`, testHooks);
1332
+ }
1333
+ await removeProtectedEmptyDirectory(projectRoot, root, `${operationPrefix}-root`, testHooks);
1334
+ }
1335
+ async function consumeBoundEmptyTarget(projectRoot, target, journal, testHooks) {
1336
+ const state = await targetTreeStatus(projectRoot, target, journal.manifest);
1337
+ if (journal.targetInitialState === 'missing') {
1338
+ if (state !== 'missing') {
1339
+ throw new Error('Classic docs target changed after migration preflight');
1340
+ }
1341
+ return;
1342
+ }
1343
+ if (state === 'empty') {
1344
+ if (journal.schema === 'comet.classic-root-move.v2' && !journal.targetInitialIdentity) {
1345
+ throw new Error('Classic docs target identity is missing from the approved plan');
1346
+ }
1347
+ await removeProtectedEmptyDirectory(projectRoot, target, 'remove-empty-target', testHooks, journal.schema === 'comet.classic-root-move.v2'
1348
+ ? (journal.targetInitialIdentity ?? undefined)
1349
+ : undefined);
1350
+ return;
1351
+ }
1352
+ if (state !== 'missing') {
1353
+ throw new Error('Classic docs target changed after migration preflight');
1354
+ }
1355
+ }
1356
+ async function assertBoundSourceIdentity(projectRoot, source, journal) {
1357
+ if (journal.schema === 'comet.classic-root-move.v1')
1358
+ return;
1359
+ const current = await captureStableSourceIdentity(projectRoot, source, 'Classic legacy root identity');
1360
+ if (!sameStableChain(current, journal.sourceIdentity)) {
1361
+ throw new Error('Classic legacy root identity changed after migration preflight');
1362
+ }
1363
+ }
1364
+ async function assertOriginalConfig(projectRoot, journal) {
1365
+ if ((await projectConfigHash(projectRoot)) !== journal.originalConfigHash) {
1366
+ throw new Error('Classic project config changed after migration preflight');
1367
+ }
1368
+ if ((await readClassicArtifactLayout(projectRoot)) !== 'legacy') {
1369
+ throw new Error('Classic project config changed after migration preflight');
1370
+ }
1371
+ }
1372
+ async function assertExpectedConfig(projectRoot, journal) {
1373
+ if ((await projectConfigHash(projectRoot)) !== journal.expectedConfigHash) {
1374
+ throw new Error('Classic project config does not match the expected post-switch config hash');
1375
+ }
1376
+ if ((await readClassicArtifactLayout(projectRoot)) !== 'docs') {
1377
+ throw new Error('Classic project config does not match the expected post-switch config hash');
1378
+ }
1379
+ }
1380
+ async function assertTreeMatches(projectRoot, root, manifest, message) {
1381
+ if ((await treeStatus(projectRoot, root, manifest)) !== 'match')
1382
+ throw new Error(message);
1383
+ }
1384
+ async function finishJournal(projectRoot, journal, testHooks) {
1385
+ if (journal.stage === 'locked') {
1386
+ throw new Error('Classic root move locked preflight must be approved before execution');
1387
+ }
1388
+ await assertRootMovePreflightBoundaries(projectRoot, journal.id);
1389
+ const { source, target, staging, quarantine, transactionRoot } = transactionPaths(projectRoot, journal);
1390
+ let current = journal;
1391
+ if (current.stage === 'copying') {
1392
+ await assertOriginalConfig(projectRoot, current);
1393
+ await assertBoundSourceIdentity(projectRoot, source, current);
1394
+ await assertTreeMatches(projectRoot, source, current.manifest, 'Classic legacy root changed after migration preflight');
1395
+ await consumeBoundEmptyTarget(projectRoot, target, current, testHooks);
1396
+ const staged = await treeStatus(projectRoot, staging, current.manifest);
1397
+ if (staged === 'mismatch') {
1398
+ throw new Error('Classic root move staging changed after migration preflight');
1399
+ }
1400
+ if (staged === 'missing') {
1401
+ await copyManifest(projectRoot, source, staging, current.manifest, testHooks);
1402
+ }
1403
+ await assertTreeMatches(projectRoot, staging, current.manifest, 'Classic root move staging verification failed');
1404
+ current = await updateJournal(projectRoot, current, 'ready', testHooks);
1405
+ }
1406
+ if (current.stage === 'ready') {
1407
+ await assertOriginalConfig(projectRoot, current);
1408
+ await assertBoundSourceIdentity(projectRoot, source, current);
1409
+ await assertTreeMatches(projectRoot, source, current.manifest, 'Classic legacy root changed after migration preflight');
1410
+ const staged = await treeStatus(projectRoot, staging, current.manifest);
1411
+ const targetState = await targetTreeStatus(projectRoot, target, current.manifest);
1412
+ if (staged === 'missing' && targetState === 'match') {
1413
+ current = await updateJournal(projectRoot, current, 'switched', testHooks);
1414
+ }
1415
+ else {
1416
+ if (staged !== 'match') {
1417
+ throw new Error('Classic root move staging changed after migration preflight');
1418
+ }
1419
+ if (targetState === 'mismatch' || targetState === 'empty') {
1420
+ throw new Error('Classic docs target changed after migration preflight');
1421
+ }
1422
+ if (targetState === 'missing') {
1423
+ await ensureRootMoveDirectory(projectRoot, path.dirname(target), 'Classic docs target parent', testHooks);
1424
+ await renameProtectedPath(projectRoot, staging, target, 'rename-staging-target', testHooks);
1425
+ current = await updateJournal(projectRoot, current, 'switched', testHooks);
1426
+ }
1427
+ }
1428
+ }
1429
+ if (current.stage === 'switched') {
1430
+ await assertBoundSourceIdentity(projectRoot, source, current);
1431
+ await assertTreeMatches(projectRoot, source, current.manifest, 'Classic legacy root changed before config switch');
1432
+ await assertTreeMatches(projectRoot, target, current.manifest, 'Classic docs target verification failed after switch');
1433
+ const layout = await readClassicArtifactLayout(projectRoot);
1434
+ if (layout === 'legacy') {
1435
+ await assertOriginalConfig(projectRoot, current);
1436
+ await writeClassicArtifactLayout(projectRoot, 'docs', {
1437
+ expectedIdentity: {
1438
+ exists: true,
1439
+ sha256: current.originalConfigHash,
1440
+ },
1441
+ });
1442
+ }
1443
+ else if (layout !== 'docs') {
1444
+ throw new Error('Classic project config changed after migration preflight');
1445
+ }
1446
+ await assertExpectedConfig(projectRoot, current);
1447
+ current = await updateJournal(projectRoot, current, 'configured', testHooks);
1448
+ }
1449
+ if (current.stage !== 'configured') {
1450
+ throw new Error(`Unsupported Classic root move stage: ${current.stage}`);
1451
+ }
1452
+ await assertExpectedConfig(projectRoot, current);
1453
+ await assertTreeMatches(projectRoot, target, current.manifest, 'Classic docs target verification failed after config switch');
1454
+ if (await protectedDirectoryExists(projectRoot, source, 'Classic legacy root')) {
1455
+ await assertBoundSourceIdentity(projectRoot, source, current);
1456
+ await assertTreeMatches(projectRoot, source, current.manifest, 'Classic legacy root changed before cleanup; both roots were preserved');
1457
+ if (await protectedDirectoryExists(projectRoot, quarantine, 'Classic root move quarantine')) {
1458
+ throw new Error('Classic root move quarantine conflicts with the legacy root');
1459
+ }
1460
+ await renameProtectedPath(projectRoot, source, quarantine, 'rename-source-quarantine', testHooks);
1461
+ }
1462
+ if (await protectedDirectoryExists(projectRoot, quarantine, 'Classic root move quarantine')) {
1463
+ await cleanupManifestBoundTree(projectRoot, quarantine, current.manifest, testHooks);
1464
+ }
1465
+ await removeProtectedEmptyDirectory(projectRoot, transactionRoot, 'remove-transaction-root', testHooks);
1466
+ await unlinkOwnedJournal(projectRoot, current, 'remove-journal', testHooks);
1467
+ }
1468
+ async function rollbackJournal(projectRoot, journal, testHooks) {
1469
+ await assertRootMovePreflightBoundaries(projectRoot, journal.id);
1470
+ if (journal.stage === 'locked') {
1471
+ await unlinkOwnedJournal(projectRoot, journal, 'rollback-remove-locked-journal', testHooks);
1472
+ return;
1473
+ }
1474
+ const { source, target, staging, quarantine, transactionRoot } = transactionPaths(projectRoot, journal);
1475
+ if (journal.stage === 'configured' ||
1476
+ (await readClassicArtifactLayout(projectRoot)) !== 'legacy') {
1477
+ throw new Error('Classic root move cannot roll back after the config switch');
1478
+ }
1479
+ await assertOriginalConfig(projectRoot, journal);
1480
+ await assertTreeMatches(projectRoot, source, journal.manifest, 'Classic legacy root changed after migration preflight');
1481
+ if ((await manifestSubsetStatus(projectRoot, quarantine, journal.manifest)).status !== 'missing') {
1482
+ throw new Error('Classic root move quarantine exists; rollback is not proven safe');
1483
+ }
1484
+ for (const [directory, label] of [[staging, 'staging']]) {
1485
+ const status = await treeStatus(projectRoot, directory, journal.manifest);
1486
+ if (status === 'mismatch') {
1487
+ throw new Error(`Classic root move ${label} changed after migration preflight`);
1488
+ }
1489
+ if (status === 'match') {
1490
+ await cleanupManifestBoundTree(projectRoot, directory, journal.manifest, testHooks, `rollback-remove-${label}`);
1491
+ }
1492
+ }
1493
+ const targetState = await targetTreeStatus(projectRoot, target, journal.manifest);
1494
+ if (targetState === 'mismatch' ||
1495
+ (targetState === 'empty' && journal.targetInitialState !== 'empty')) {
1496
+ throw new Error('Classic root move docs target changed after migration preflight');
1497
+ }
1498
+ if (targetState === 'match') {
1499
+ await cleanupManifestBoundTree(projectRoot, target, journal.manifest, testHooks, 'rollback-remove-target');
1500
+ }
1501
+ if (journal.targetInitialState === 'empty' && targetState !== 'empty') {
1502
+ await ensureRootMoveDirectory(projectRoot, target, 'Classic docs rollback target', testHooks);
1503
+ }
1504
+ await removeProtectedEmptyDirectory(projectRoot, transactionRoot, 'rollback-remove-transaction-root', testHooks);
1505
+ await unlinkOwnedJournal(projectRoot, journal, 'rollback-remove-journal', testHooks);
1506
+ }
1507
+ async function recoveryPolicy(projectRoot, journal) {
1508
+ await assertRootMovePreflightBoundaries(projectRoot, journal.id);
1509
+ if (journal.stage === 'locked') {
1510
+ return {
1511
+ allowedStrategies: ['rollback'],
1512
+ reason: 'the locked apply preflight was not approved for execution',
1513
+ };
1514
+ }
1515
+ const { source, target, staging, quarantine } = transactionPaths(projectRoot, journal);
1516
+ const layout = await readClassicArtifactLayout(projectRoot);
1517
+ const currentConfigHash = await projectConfigHash(projectRoot);
1518
+ const originalConfigMatches = layout === 'legacy' && currentConfigHash === journal.originalConfigHash;
1519
+ const expectedConfigMatches = layout === 'docs' && currentConfigHash === journal.expectedConfigHash;
1520
+ const [sourceState, targetState, stagingState, quarantineInspection] = await Promise.all([
1521
+ treeStatus(projectRoot, source, journal.manifest),
1522
+ targetTreeStatus(projectRoot, target, journal.manifest),
1523
+ treeStatus(projectRoot, staging, journal.manifest),
1524
+ manifestSubsetStatus(projectRoot, quarantine, journal.manifest),
1525
+ ]);
1526
+ const quarantineState = quarantineInspection.status;
1527
+ if (sourceState === 'mismatch') {
1528
+ return {
1529
+ allowedStrategies: [],
1530
+ reason: 'Classic legacy root changed after migration preflight',
1531
+ };
1532
+ }
1533
+ if (targetState === 'mismatch') {
1534
+ return {
1535
+ allowedStrategies: [],
1536
+ reason: 'Classic docs target changed after migration preflight',
1537
+ };
1538
+ }
1539
+ if (stagingState === 'mismatch') {
1540
+ return { allowedStrategies: [], reason: 'Classic staging changed after migration preflight' };
1541
+ }
1542
+ if (quarantineState === 'mismatch') {
1543
+ return {
1544
+ allowedStrategies: [],
1545
+ reason: 'Classic quarantine contains unknown or changed content',
1546
+ };
1547
+ }
1548
+ if (journal.stage === 'configured' || layout === 'docs') {
1549
+ if (!expectedConfigMatches) {
1550
+ return {
1551
+ allowedStrategies: [],
1552
+ reason: 'project config does not match the expected post-switch config hash',
1553
+ };
1554
+ }
1555
+ const sourceRecoverable = (sourceState === 'match' && quarantineState === 'missing') ||
1556
+ (sourceState === 'missing' &&
1557
+ (quarantineState === 'missing' ||
1558
+ quarantineState === 'complete' ||
1559
+ quarantineState === 'partial'));
1560
+ return targetState === 'match' && sourceRecoverable
1561
+ ? { allowedStrategies: ['continue'] }
1562
+ : { allowedStrategies: [], reason: 'the configured migration trees are incomplete' };
1563
+ }
1564
+ if (!originalConfigMatches) {
1565
+ return {
1566
+ allowedStrategies: [],
1567
+ reason: 'project config changed after migration preflight',
1568
+ };
1569
+ }
1570
+ const sourceMatches = sourceState === 'match';
1571
+ const stagedOrAbsent = stagingState === 'match' || stagingState === 'missing';
1572
+ const targetOrAbsent = targetState === 'match' ||
1573
+ targetState === 'missing' ||
1574
+ (journal.targetInitialState === 'empty' && targetState === 'empty');
1575
+ if (!sourceMatches || !stagedOrAbsent || !targetOrAbsent || quarantineState !== 'missing') {
1576
+ return { allowedStrategies: [], reason: 'the migration trees are not recoverable' };
1577
+ }
1578
+ return { allowedStrategies: ['continue', 'rollback'] };
1579
+ }
1580
+ export async function planClassicRootMove(startPath, options = {}) {
1581
+ const projectRoot = await discoverClassicProject(startPath);
1582
+ const journal = await readJournal(projectRoot, options.testHooks);
1583
+ if (journal) {
1584
+ const pendingRecovery = await inspectClassicRootMove(projectRoot);
1585
+ if (!pendingRecovery)
1586
+ throw new Error('Classic root move journal disappeared during inspection');
1587
+ return {
1588
+ projectRoot,
1589
+ source: journal.source,
1590
+ target: journal.target,
1591
+ staging: journal.staging,
1592
+ artifactLayout: 'legacy',
1593
+ sourceIdentity: journal.schema === 'comet.classic-root-move.v2'
1594
+ ? journal.sourceIdentity.map((identity) => ({ ...identity }))
1595
+ : [],
1596
+ targetInitialIdentity: journal.schema === 'comet.classic-root-move.v2' && journal.targetInitialIdentity
1597
+ ? { ...journal.targetInitialIdentity }
1598
+ : null,
1599
+ fileCount: journal.manifest.files.length,
1600
+ directoryCount: journal.manifest.directories.length,
1601
+ totalBytes: journal.manifest.totalBytes,
1602
+ manifestHash: journal.manifest.hash,
1603
+ configPath: journal.configPath,
1604
+ configHash: journal.originalConfigHash,
1605
+ originalConfigHash: journal.originalConfigHash,
1606
+ expectedConfigHash: journal.expectedConfigHash,
1607
+ planId: journal.planId,
1608
+ fileSummary: journal.manifest.files.map((file) => ({ ...file })),
1609
+ configChange: { from: 'legacy', to: 'docs' },
1610
+ conflicts: pendingRecovery.reason ? [pendingRecovery.reason] : [],
1611
+ blockers: [`pending Classic root move: ${journal.id} at ${journal.stage}`],
1612
+ pendingRecovery,
1613
+ historicalPointersPreserved: [...HISTORICAL_POINTERS_PRESERVED],
1614
+ applyPreconditions: [...APPLY_PRECONDITIONS],
1615
+ allowedRecoveryStrategies: [...pendingRecovery.allowedStrategies],
1616
+ targetInitialState: journal.targetInitialState,
1617
+ readyToApply: false,
1618
+ };
1619
+ }
1620
+ return (await preflight(projectRoot, options)).plan;
1621
+ }
1622
+ export async function applyClassicRootMove(startPath, options = {}) {
1623
+ const approvedPlanId = options.planId;
1624
+ if (!approvedPlanId || !HASH_PATTERN.test(approvedPlanId)) {
1625
+ throw new Error('Classic root move apply requires the exact dry-run plan ID: --apply --plan <id>');
1626
+ }
1627
+ const projectRoot = await discoverClassicProject(startPath);
1628
+ const existing = await readJournal(projectRoot, options.testHooks);
1629
+ if (existing) {
1630
+ throw new Error(`Classic root move ${existing.id} is incomplete; use comet doctor --repair --strategy continue|rollback`);
1631
+ }
1632
+ // This pass only provides a structurally valid journal for the exclusive
1633
+ // lock. The caller-approved plan is checked again after that lock exists.
1634
+ const initial = await preflight(projectRoot);
1635
+ const id = randomUUID();
1636
+ await assertRootMovePreflightBoundaries(projectRoot, id);
1637
+ const lockedJournal = {
1638
+ schema: 'comet.classic-root-move.v2',
1639
+ id,
1640
+ stage: 'locked',
1641
+ source: initial.plan.source,
1642
+ target: initial.plan.target,
1643
+ staging: `.comet/transactions/classic-root-move/${id}/openspec`,
1644
+ artifactLayout: initial.plan.artifactLayout,
1645
+ sourceIdentity: initial.plan.sourceIdentity.map((identity) => ({ ...identity })),
1646
+ targetInitialIdentity: initial.plan.targetInitialIdentity
1647
+ ? { ...initial.plan.targetInitialIdentity }
1648
+ : null,
1649
+ configPath: WORKFLOW_PROJECT_CONFIG_PATH,
1650
+ originalConfigHash: initial.plan.originalConfigHash,
1651
+ expectedConfigHash: initial.plan.expectedConfigHash,
1652
+ planId: initial.plan.planId,
1653
+ approvedPlanId,
1654
+ targetInitialState: initial.plan.targetInitialState,
1655
+ manifest: initial.manifest,
1656
+ };
1657
+ await createJsonExclusive(projectRoot, journalFile(projectRoot), lockedJournal, options.testHooks);
1658
+ const ownedLock = await readJournal(projectRoot);
1659
+ if (!ownedLock || ownedLock.id !== id || ownedLock.stage !== 'locked') {
1660
+ throw new Error('Classic root move lock ownership changed before locked preflight');
1661
+ }
1662
+ let executionStarted = false;
1663
+ try {
1664
+ const lockedPreflight = await preflight(projectRoot, options);
1665
+ const plan = lockedPreflight.plan;
1666
+ if (plan.planId !== approvedPlanId) {
1667
+ throw new Error(`Classic root move plan changed since dry-run: approved ${approvedPlanId}, current ${plan.planId}`);
1668
+ }
1669
+ if (!plan.readyToApply) {
1670
+ throw new Error(`Classic root move apply is blocked: ${[...plan.conflicts, ...plan.blockers].join('; ')}`);
1671
+ }
1672
+ if (plan.targetInitialState === 'non-empty') {
1673
+ throw new Error('Classic root move apply is blocked: Classic docs target is not empty');
1674
+ }
1675
+ const journal = {
1676
+ schema: 'comet.classic-root-move.v2',
1677
+ id,
1678
+ stage: 'copying',
1679
+ source: plan.source,
1680
+ target: plan.target,
1681
+ staging: `.comet/transactions/classic-root-move/${id}/openspec`,
1682
+ artifactLayout: plan.artifactLayout,
1683
+ sourceIdentity: plan.sourceIdentity.map((identity) => ({ ...identity })),
1684
+ targetInitialIdentity: plan.targetInitialIdentity ? { ...plan.targetInitialIdentity } : null,
1685
+ configPath: WORKFLOW_PROJECT_CONFIG_PATH,
1686
+ originalConfigHash: plan.originalConfigHash,
1687
+ expectedConfigHash: plan.expectedConfigHash,
1688
+ planId: plan.planId,
1689
+ approvedPlanId,
1690
+ targetInitialState: plan.targetInitialState,
1691
+ manifest: lockedPreflight.manifest,
1692
+ };
1693
+ const ownedJournal = await atomicWriteJournal(projectRoot, ownedLock, journal, options.testHooks);
1694
+ executionStarted = true;
1695
+ await finishJournal(projectRoot, ownedJournal, options.testHooks);
1696
+ return { ...plan, staging: journal.staging };
1697
+ }
1698
+ catch (error) {
1699
+ if (!executionStarted) {
1700
+ await unlinkOwnedJournal(projectRoot, ownedLock, 'remove-rejected-lock', options.testHooks).catch(() => false);
1701
+ }
1702
+ throw error;
1703
+ }
1704
+ }
1705
+ export async function repairClassicRootMove(projectRoot, strategy, options = {}) {
1706
+ const journal = await readJournal(projectRoot, options.testHooks);
1707
+ if (!journal)
1708
+ return false;
1709
+ if (!strategy) {
1710
+ throw new Error(`Classic root move ${journal.id} recovery strategy is required: continue or rollback`);
1711
+ }
1712
+ const policy = await recoveryPolicy(projectRoot, journal);
1713
+ if (!policy.allowedStrategies.includes(strategy)) {
1714
+ throw new Error(`Classic root move ${journal.id} does not allow ${strategy}: ${policy.reason ?? 'the persisted state is not safe for that strategy'}`);
1715
+ }
1716
+ if (strategy === 'continue')
1717
+ await finishJournal(projectRoot, journal, options.testHooks);
1718
+ else
1719
+ await rollbackJournal(projectRoot, journal, options.testHooks);
1720
+ return true;
1721
+ }
1722
+ export async function inspectClassicRootMove(projectRoot, options = {}) {
1723
+ const journal = await readJournal(projectRoot, options.testHooks);
1724
+ if (!journal)
1725
+ return null;
1726
+ const policy = await recoveryPolicy(projectRoot, journal);
1727
+ return {
1728
+ id: journal.id,
1729
+ stage: journal.stage,
1730
+ source: journal.source,
1731
+ target: journal.target,
1732
+ staging: journal.staging,
1733
+ planId: journal.planId,
1734
+ ...policy,
1735
+ };
1736
+ }
1737
+ //# sourceMappingURL=classic-root-move.js.map