@rpamis/comet 0.4.0-beta.6 → 0.4.0-beta.8

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 (699) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +209 -74
  3. package/assets/manifest.json +14 -5
  4. package/assets/skills/comet/SKILL.md +17 -282
  5. package/assets/skills/comet/reference/comet-yaml-fields.md +1 -1
  6. package/assets/skills/comet/reference/context-recovery.md +3 -3
  7. package/assets/skills/comet/reference/intent-frame.md +2 -2
  8. package/assets/skills/comet/reference/scripts.md +2 -2
  9. package/assets/skills/comet/rules/comet-workflow-guard.en.md +32 -0
  10. package/assets/skills/comet/rules/comet-workflow-guard.md +32 -0
  11. package/assets/skills/comet/scripts/comet-entry-runtime.mjs +7855 -0
  12. package/assets/skills/comet/scripts/comet-hook-router.mjs +10336 -0
  13. package/assets/skills/comet/scripts/comet-runtime.mjs +615 -501
  14. package/assets/skills/comet-any/SKILL.md +4 -4
  15. package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
  16. package/assets/skills/comet-any/reference/bundle-authoring.md +1 -1
  17. package/assets/skills/comet-any/reference/subagents/reference-author.md +1 -1
  18. package/assets/skills/comet-any/reference/subagents/script-author.md +1 -1
  19. package/assets/skills/comet-any/reference/subagents/skill-core-author.md +1 -1
  20. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +2 -2
  21. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +3 -3
  22. package/assets/skills/comet-archive/SKILL.md +1 -2
  23. package/assets/skills/comet-build/SKILL.md +1 -1
  24. package/assets/skills/comet-classic/SKILL.md +293 -0
  25. package/assets/skills/comet-design/SKILL.md +1 -1
  26. package/assets/skills/comet-hotfix/SKILL.md +4 -4
  27. package/assets/skills/comet-native/SKILL.md +257 -0
  28. package/assets/skills/comet-native/reference/artifacts.md +204 -0
  29. package/assets/skills/comet-native/reference/commands.md +118 -0
  30. package/assets/skills/comet-native/reference/recovery.md +143 -0
  31. package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
  32. package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +28969 -0
  33. package/assets/skills/comet-open/SKILL.md +4 -4
  34. package/assets/skills/comet-tweak/SKILL.md +7 -7
  35. package/assets/skills-zh/comet/SKILL.md +17 -270
  36. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +1 -1
  37. package/assets/skills-zh/comet/reference/context-recovery.md +3 -3
  38. package/assets/skills-zh/comet/reference/intent-frame.md +2 -2
  39. package/assets/skills-zh/comet/reference/scripts.md +2 -2
  40. package/assets/skills-zh/comet-any/SKILL.md +4 -4
  41. package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
  42. package/assets/skills-zh/comet-any/reference/bundle-authoring.md +1 -1
  43. package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +1 -1
  44. package/assets/skills-zh/comet-any/reference/subagents/script-author.md +1 -1
  45. package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +1 -1
  46. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +2 -2
  47. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +3 -3
  48. package/assets/skills-zh/comet-archive/SKILL.md +1 -2
  49. package/assets/skills-zh/comet-build/SKILL.md +1 -1
  50. package/assets/skills-zh/comet-classic/SKILL.md +281 -0
  51. package/assets/skills-zh/comet-design/SKILL.md +1 -1
  52. package/assets/skills-zh/comet-hotfix/SKILL.md +4 -4
  53. package/assets/skills-zh/comet-native/SKILL.md +257 -0
  54. package/assets/skills-zh/comet-native/reference/artifacts.md +206 -0
  55. package/assets/skills-zh/comet-native/reference/commands.md +118 -0
  56. package/assets/skills-zh/comet-native/reference/recovery.md +143 -0
  57. package/assets/skills-zh/comet-open/SKILL.md +4 -4
  58. package/assets/skills-zh/comet-tweak/SKILL.md +7 -7
  59. package/dist/app/cli/index.js +59 -13
  60. package/dist/app/cli/index.js.map +1 -1
  61. package/dist/app/commands/command-result.d.ts +6 -0
  62. package/dist/app/commands/command-result.d.ts.map +1 -0
  63. package/dist/app/commands/command-result.js +4 -0
  64. package/dist/app/commands/command-result.js.map +1 -0
  65. package/dist/app/commands/doctor.d.ts +1 -0
  66. package/dist/app/commands/doctor.d.ts.map +1 -1
  67. package/dist/app/commands/doctor.js +201 -26
  68. package/dist/app/commands/doctor.js.map +1 -1
  69. package/dist/app/commands/eval.d.ts +3 -1
  70. package/dist/app/commands/eval.d.ts.map +1 -1
  71. package/dist/app/commands/eval.js +17 -7
  72. package/dist/app/commands/eval.js.map +1 -1
  73. package/dist/app/commands/i18n.d.ts +1 -1
  74. package/dist/app/commands/i18n.d.ts.map +1 -1
  75. package/dist/app/commands/i18n.js +6 -2
  76. package/dist/app/commands/i18n.js.map +1 -1
  77. package/dist/app/commands/init.d.ts +10 -2
  78. package/dist/app/commands/init.d.ts.map +1 -1
  79. package/dist/app/commands/init.js +331 -50
  80. package/dist/app/commands/init.js.map +1 -1
  81. package/dist/app/commands/native.d.ts +2 -0
  82. package/dist/app/commands/native.d.ts.map +1 -0
  83. package/dist/app/commands/native.js +10 -0
  84. package/dist/app/commands/native.js.map +1 -0
  85. package/dist/app/commands/project-scope-selection.d.ts.map +1 -1
  86. package/dist/app/commands/project-scope-selection.js +2 -0
  87. package/dist/app/commands/project-scope-selection.js.map +1 -1
  88. package/dist/app/commands/resume-probe.d.ts.map +1 -1
  89. package/dist/app/commands/resume-probe.js +8 -2
  90. package/dist/app/commands/resume-probe.js.map +1 -1
  91. package/dist/app/commands/status.d.ts +0 -32
  92. package/dist/app/commands/status.d.ts.map +1 -1
  93. package/dist/app/commands/status.js +44 -177
  94. package/dist/app/commands/status.js.map +1 -1
  95. package/dist/app/commands/update.d.ts +20 -4
  96. package/dist/app/commands/update.d.ts.map +1 -1
  97. package/dist/app/commands/update.js +698 -90
  98. package/dist/app/commands/update.js.map +1 -1
  99. package/dist/app/commands/workflow.d.ts +6 -0
  100. package/dist/app/commands/workflow.d.ts.map +1 -0
  101. package/dist/app/commands/workflow.js +11 -0
  102. package/dist/app/commands/workflow.js.map +1 -0
  103. package/dist/config/repository-layout.json +21 -1
  104. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
  105. package/dist/domains/bundle/bundle-platform.js +1 -1
  106. package/dist/domains/bundle/bundle-platform.js.map +1 -1
  107. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
  108. package/dist/domains/comet-classic/classic-archive.js +3 -0
  109. package/dist/domains/comet-classic/classic-archive.js.map +1 -1
  110. package/dist/domains/comet-classic/classic-current-change.d.ts +3 -5
  111. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -1
  112. package/dist/domains/comet-classic/classic-current-change.js +31 -57
  113. package/dist/domains/comet-classic/classic-current-change.js.map +1 -1
  114. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
  115. package/dist/domains/comet-classic/classic-guard.js +3 -2
  116. package/dist/domains/comet-classic/classic-guard.js.map +1 -1
  117. package/dist/domains/comet-classic/classic-hook-guard.d.ts +9 -0
  118. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  119. package/dist/domains/comet-classic/classic-hook-guard.js +84 -11
  120. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  121. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -1
  122. package/dist/domains/comet-classic/classic-project-config.js +12 -8
  123. package/dist/domains/comet-classic/classic-project-config.js.map +1 -1
  124. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
  125. package/dist/domains/comet-classic/classic-runtime-run.js +9 -1
  126. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
  127. package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
  128. package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
  129. package/dist/domains/comet-entry/current-selection-repair.js +19 -0
  130. package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
  131. package/dist/domains/comet-entry/current-selection.d.ts +28 -0
  132. package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
  133. package/dist/domains/comet-entry/current-selection.js +116 -0
  134. package/dist/domains/comet-entry/current-selection.js.map +1 -0
  135. package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
  136. package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
  137. package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
  138. package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
  139. package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
  140. package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
  141. package/dist/domains/comet-entry/entry-runtime.js +55 -0
  142. package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
  143. package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
  144. package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
  145. package/dist/domains/comet-entry/hook-adapter.js +202 -0
  146. package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
  147. package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
  148. package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
  149. package/dist/domains/comet-entry/hook-router-entry.js +92 -0
  150. package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
  151. package/dist/domains/comet-entry/hook-router.d.ts +32 -0
  152. package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
  153. package/dist/domains/comet-entry/hook-router.js +133 -0
  154. package/dist/domains/comet-entry/hook-router.js.map +1 -0
  155. package/dist/domains/comet-entry/hook-types.d.ts +20 -0
  156. package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
  157. package/dist/domains/comet-entry/hook-types.js +2 -0
  158. package/dist/domains/comet-entry/hook-types.js.map +1 -0
  159. package/dist/domains/comet-entry/init-workflow.d.ts +16 -0
  160. package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
  161. package/dist/domains/comet-entry/init-workflow.js +103 -0
  162. package/dist/domains/comet-entry/init-workflow.js.map +1 -0
  163. package/dist/domains/comet-entry/project-status.d.ts +3 -0
  164. package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
  165. package/dist/domains/comet-entry/project-status.js +222 -0
  166. package/dist/domains/comet-entry/project-status.js.map +1 -0
  167. package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
  168. package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
  169. package/dist/domains/comet-entry/resolve-entry.js +22 -0
  170. package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
  171. package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
  172. package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
  173. package/dist/domains/comet-entry/resume-probe.js +458 -0
  174. package/dist/domains/comet-entry/resume-probe.js.map +1 -0
  175. package/dist/domains/comet-entry/types.d.ts +59 -0
  176. package/dist/domains/comet-entry/types.d.ts.map +1 -0
  177. package/dist/domains/comet-entry/types.js +2 -0
  178. package/dist/domains/comet-entry/types.js.map +1 -0
  179. package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
  180. package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
  181. package/dist/domains/comet-entry/workflow-resolution.js +16 -0
  182. package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
  183. package/dist/domains/comet-native/index.d.ts +35 -0
  184. package/dist/domains/comet-native/index.d.ts.map +1 -0
  185. package/dist/domains/comet-native/index.js +35 -0
  186. package/dist/domains/comet-native/index.js.map +1 -0
  187. package/dist/domains/comet-native/native-acceptance.d.ts +42 -0
  188. package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
  189. package/dist/domains/comet-native/native-acceptance.js +503 -0
  190. package/dist/domains/comet-native/native-acceptance.js.map +1 -0
  191. package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
  192. package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
  193. package/dist/domains/comet-native/native-archive-content.js +159 -0
  194. package/dist/domains/comet-native/native-archive-content.js.map +1 -0
  195. package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
  196. package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
  197. package/dist/domains/comet-native/native-archive-inspection.js +94 -0
  198. package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
  199. package/dist/domains/comet-native/native-archive-preflight.d.ts +52 -0
  200. package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
  201. package/dist/domains/comet-native/native-archive-preflight.js +214 -0
  202. package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
  203. package/dist/domains/comet-native/native-archive-transaction.d.ts +19 -0
  204. package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
  205. package/dist/domains/comet-native/native-archive-transaction.js +1180 -0
  206. package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
  207. package/dist/domains/comet-native/native-archive.d.ts +36 -0
  208. package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
  209. package/dist/domains/comet-native/native-archive.js +403 -0
  210. package/dist/domains/comet-native/native-archive.js.map +1 -0
  211. package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
  212. package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
  213. package/dist/domains/comet-native/native-artifacts.js +204 -0
  214. package/dist/domains/comet-native/native-artifacts.js.map +1 -0
  215. package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
  216. package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
  217. package/dist/domains/comet-native/native-atomic-file.js +179 -0
  218. package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
  219. package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
  220. package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
  221. package/dist/domains/comet-native/native-bounded-file.js +184 -0
  222. package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
  223. package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
  224. package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
  225. package/dist/domains/comet-native/native-build-evidence.js +257 -0
  226. package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
  227. package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
  228. package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
  229. package/dist/domains/comet-native/native-canonical-hash.js +100 -0
  230. package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
  231. package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
  232. package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
  233. package/dist/domains/comet-native/native-change-recovery.js +15 -0
  234. package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
  235. package/dist/domains/comet-native/native-change.d.ts +61 -0
  236. package/dist/domains/comet-native/native-change.d.ts.map +1 -0
  237. package/dist/domains/comet-native/native-change.js +696 -0
  238. package/dist/domains/comet-native/native-change.js.map +1 -0
  239. package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
  240. package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
  241. package/dist/domains/comet-native/native-check-receipt-model.js +347 -0
  242. package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
  243. package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
  244. package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
  245. package/dist/domains/comet-native/native-check-receipt-storage.js +200 -0
  246. package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
  247. package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
  248. package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
  249. package/dist/domains/comet-native/native-check-receipt.js +449 -0
  250. package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
  251. package/dist/domains/comet-native/native-check.d.ts +18 -0
  252. package/dist/domains/comet-native/native-check.d.ts.map +1 -0
  253. package/dist/domains/comet-native/native-check.js +29 -0
  254. package/dist/domains/comet-native/native-check.js.map +1 -0
  255. package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
  256. package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
  257. package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
  258. package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
  259. package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
  260. package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
  261. package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
  262. package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
  263. package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
  264. package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
  265. package/dist/domains/comet-native/native-cli-entry.js +18 -0
  266. package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
  267. package/dist/domains/comet-native/native-cli.d.ts +7 -0
  268. package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
  269. package/dist/domains/comet-native/native-cli.js +642 -0
  270. package/dist/domains/comet-native/native-cli.js.map +1 -0
  271. package/dist/domains/comet-native/native-config.d.ts +15 -0
  272. package/dist/domains/comet-native/native-config.d.ts.map +1 -0
  273. package/dist/domains/comet-native/native-config.js +281 -0
  274. package/dist/domains/comet-native/native-config.js.map +1 -0
  275. package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
  276. package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
  277. package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
  278. package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
  279. package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
  280. package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
  281. package/dist/domains/comet-native/native-conflict-radar.js +326 -0
  282. package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
  283. package/dist/domains/comet-native/native-continuation.d.ts +9 -0
  284. package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
  285. package/dist/domains/comet-native/native-continuation.js +146 -0
  286. package/dist/domains/comet-native/native-continuation.js.map +1 -0
  287. package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
  288. package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
  289. package/dist/domains/comet-native/native-contract-files.js +66 -0
  290. package/dist/domains/comet-native/native-contract-files.js.map +1 -0
  291. package/dist/domains/comet-native/native-contract.d.ts +41 -0
  292. package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
  293. package/dist/domains/comet-native/native-contract.js +141 -0
  294. package/dist/domains/comet-native/native-contract.js.map +1 -0
  295. package/dist/domains/comet-native/native-diagnostics.d.ts +18 -0
  296. package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
  297. package/dist/domains/comet-native/native-diagnostics.js +522 -0
  298. package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
  299. package/dist/domains/comet-native/native-doctor.d.ts +12 -0
  300. package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
  301. package/dist/domains/comet-native/native-doctor.js +768 -0
  302. package/dist/domains/comet-native/native-doctor.js.map +1 -0
  303. package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
  304. package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
  305. package/dist/domains/comet-native/native-evidence-retention.js +887 -0
  306. package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
  307. package/dist/domains/comet-native/native-evidence-storage.d.ts +41 -0
  308. package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
  309. package/dist/domains/comet-native/native-evidence-storage.js +355 -0
  310. package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
  311. package/dist/domains/comet-native/native-file-identity.d.ts +9 -0
  312. package/dist/domains/comet-native/native-file-identity.d.ts.map +1 -0
  313. package/dist/domains/comet-native/native-file-identity.js +21 -0
  314. package/dist/domains/comet-native/native-file-identity.js.map +1 -0
  315. package/dist/domains/comet-native/native-findings.d.ts +8 -0
  316. package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
  317. package/dist/domains/comet-native/native-findings.js +238 -0
  318. package/dist/domains/comet-native/native-findings.js.map +1 -0
  319. package/dist/domains/comet-native/native-guards.d.ts +7 -0
  320. package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
  321. package/dist/domains/comet-native/native-guards.js +126 -0
  322. package/dist/domains/comet-native/native-guards.js.map +1 -0
  323. package/dist/domains/comet-native/native-hash.d.ts +3 -0
  324. package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
  325. package/dist/domains/comet-native/native-hash.js +12 -0
  326. package/dist/domains/comet-native/native-hash.js.map +1 -0
  327. package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
  328. package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
  329. package/dist/domains/comet-native/native-hook-guard.js +154 -0
  330. package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
  331. package/dist/domains/comet-native/native-lock.d.ts +47 -0
  332. package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
  333. package/dist/domains/comet-native/native-lock.js +398 -0
  334. package/dist/domains/comet-native/native-lock.js.map +1 -0
  335. package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
  336. package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
  337. package/dist/domains/comet-native/native-mutation-lock.js +66 -0
  338. package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
  339. package/dist/domains/comet-native/native-paths.d.ts +10 -0
  340. package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
  341. package/dist/domains/comet-native/native-paths.js +171 -0
  342. package/dist/domains/comet-native/native-paths.js.map +1 -0
  343. package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
  344. package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
  345. package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
  346. package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
  347. package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
  348. package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
  349. package/dist/domains/comet-native/native-protected-file.js +510 -0
  350. package/dist/domains/comet-native/native-protected-file.js.map +1 -0
  351. package/dist/domains/comet-native/native-redaction.d.ts +2 -0
  352. package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
  353. package/dist/domains/comet-native/native-redaction.js +18 -0
  354. package/dist/domains/comet-native/native-redaction.js.map +1 -0
  355. package/dist/domains/comet-native/native-repair-integration.d.ts +42 -0
  356. package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
  357. package/dist/domains/comet-native/native-repair-integration.js +184 -0
  358. package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
  359. package/dist/domains/comet-native/native-repair-runtime.d.ts +73 -0
  360. package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
  361. package/dist/domains/comet-native/native-repair-runtime.js +509 -0
  362. package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
  363. package/dist/domains/comet-native/native-repair-stagnation.d.ts +85 -0
  364. package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
  365. package/dist/domains/comet-native/native-repair-stagnation.js +256 -0
  366. package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
  367. package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
  368. package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
  369. package/dist/domains/comet-native/native-resume-view.js +105 -0
  370. package/dist/domains/comet-native/native-resume-view.js.map +1 -0
  371. package/dist/domains/comet-native/native-revision.d.ts +20 -0
  372. package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
  373. package/dist/domains/comet-native/native-revision.js +32 -0
  374. package/dist/domains/comet-native/native-revision.js.map +1 -0
  375. package/dist/domains/comet-native/native-root-move.d.ts +20 -0
  376. package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
  377. package/dist/domains/comet-native/native-root-move.js +812 -0
  378. package/dist/domains/comet-native/native-root-move.js.map +1 -0
  379. package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
  380. package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
  381. package/dist/domains/comet-native/native-run-consistency.js +136 -0
  382. package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
  383. package/dist/domains/comet-native/native-run-store.d.ts +41 -0
  384. package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
  385. package/dist/domains/comet-native/native-run-store.js +452 -0
  386. package/dist/domains/comet-native/native-run-store.js.map +1 -0
  387. package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
  388. package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
  389. package/dist/domains/comet-native/native-runtime-package.js +72 -0
  390. package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
  391. package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
  392. package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
  393. package/dist/domains/comet-native/native-schema-migration.js +899 -0
  394. package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
  395. package/dist/domains/comet-native/native-selection.d.ts +12 -0
  396. package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
  397. package/dist/domains/comet-native/native-selection.js +52 -0
  398. package/dist/domains/comet-native/native-selection.js.map +1 -0
  399. package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
  400. package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
  401. package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
  402. package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
  403. package/dist/domains/comet-native/native-snapshot.d.ts +74 -0
  404. package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
  405. package/dist/domains/comet-native/native-snapshot.js +2312 -0
  406. package/dist/domains/comet-native/native-snapshot.js.map +1 -0
  407. package/dist/domains/comet-native/native-specs.d.ts +12 -0
  408. package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
  409. package/dist/domains/comet-native/native-specs.js +270 -0
  410. package/dist/domains/comet-native/native-specs.js.map +1 -0
  411. package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
  412. package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
  413. package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
  414. package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
  415. package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
  416. package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
  417. package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
  418. package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
  419. package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
  420. package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
  421. package/dist/domains/comet-native/native-trajectory.js +27 -0
  422. package/dist/domains/comet-native/native-trajectory.js.map +1 -0
  423. package/dist/domains/comet-native/native-transaction.d.ts +45 -0
  424. package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
  425. package/dist/domains/comet-native/native-transaction.js +846 -0
  426. package/dist/domains/comet-native/native-transaction.js.map +1 -0
  427. package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
  428. package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
  429. package/dist/domains/comet-native/native-transition-evidence.js +20 -0
  430. package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
  431. package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
  432. package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
  433. package/dist/domains/comet-native/native-transition-journal.js +819 -0
  434. package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
  435. package/dist/domains/comet-native/native-transitions.d.ts +13 -0
  436. package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
  437. package/dist/domains/comet-native/native-transitions.js +632 -0
  438. package/dist/domains/comet-native/native-transitions.js.map +1 -0
  439. package/dist/domains/comet-native/native-types.d.ts +547 -0
  440. package/dist/domains/comet-native/native-types.d.ts.map +1 -0
  441. package/dist/domains/comet-native/native-types.js +8 -0
  442. package/dist/domains/comet-native/native-types.js.map +1 -0
  443. package/dist/domains/comet-native/native-verification-evidence.d.ts +86 -0
  444. package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
  445. package/dist/domains/comet-native/native-verification-evidence.js +480 -0
  446. package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
  447. package/dist/domains/comet-native/native-verification-runtime.d.ts +58 -0
  448. package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
  449. package/dist/domains/comet-native/native-verification-runtime.js +321 -0
  450. package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
  451. package/dist/domains/comet-native/native-verification-scope.d.ts +117 -0
  452. package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
  453. package/dist/domains/comet-native/native-verification-scope.js +1040 -0
  454. package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
  455. package/dist/domains/comet-native/native-workspace.d.ts +46 -0
  456. package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
  457. package/dist/domains/comet-native/native-workspace.js +276 -0
  458. package/dist/domains/comet-native/native-workspace.js.map +1 -0
  459. package/dist/domains/dashboard/collector.d.ts.map +1 -1
  460. package/dist/domains/dashboard/collector.js +9 -1
  461. package/dist/domains/dashboard/collector.js.map +1 -1
  462. package/dist/domains/dashboard/native-adapter.d.ts +157 -0
  463. package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
  464. package/dist/domains/dashboard/native-adapter.js +302 -0
  465. package/dist/domains/dashboard/native-adapter.js.map +1 -0
  466. package/dist/domains/dashboard/native-collector.d.ts +6 -0
  467. package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
  468. package/dist/domains/dashboard/native-collector.js +285 -0
  469. package/dist/domains/dashboard/native-collector.js.map +1 -0
  470. package/dist/domains/dashboard/types.d.ts +5 -0
  471. package/dist/domains/dashboard/types.d.ts.map +1 -1
  472. package/dist/domains/dashboard/web/assets/{arc-TGVUG2WN.js → arc-CxdiLJ50.js} +1 -1
  473. package/dist/domains/dashboard/web/assets/{architectureDiagram-3BPJPVTR-ASHmiHoP.js → architectureDiagram-3BPJPVTR-D5YCQu4e.js} +1 -1
  474. package/dist/domains/dashboard/web/assets/{blockDiagram-GPEHLZMM-CwASxBKe.js → blockDiagram-GPEHLZMM-8NfdCOQ8.js} +1 -1
  475. package/dist/domains/dashboard/web/assets/{c4Diagram-AAUBKEIU-BU8z_WNk.js → c4Diagram-AAUBKEIU-B3cFnNT7.js} +1 -1
  476. package/dist/domains/dashboard/web/assets/channel-B6AFly29.js +1 -0
  477. package/dist/domains/dashboard/web/assets/{chunk-2J33WTMH-CBGlUx4_.js → chunk-2J33WTMH-CBNfW-Dr.js} +1 -1
  478. package/dist/domains/dashboard/web/assets/{chunk-4BX2VUAB-CS-iGcFz.js → chunk-4BX2VUAB-vWyemRBr.js} +1 -1
  479. package/dist/domains/dashboard/web/assets/{chunk-55IACEB6-BUtCVJat.js → chunk-55IACEB6-H6haOo2C.js} +1 -1
  480. package/dist/domains/dashboard/web/assets/{chunk-727SXJPM-C94tj_pf.js → chunk-727SXJPM-D02UjGND.js} +1 -1
  481. package/dist/domains/dashboard/web/assets/{chunk-AQP2D5EJ-BFOKcpdG.js → chunk-AQP2D5EJ-wKsbOw_T.js} +1 -1
  482. package/dist/domains/dashboard/web/assets/{chunk-FMBD7UC4-Dmx8B-st.js → chunk-FMBD7UC4-eYFEZimP.js} +1 -1
  483. package/dist/domains/dashboard/web/assets/{chunk-ND2GUHAM-DYV00CNn.js → chunk-ND2GUHAM-fMaIDDI2.js} +1 -1
  484. package/dist/domains/dashboard/web/assets/{chunk-QZHKN3VN-DMJJyQnw.js → chunk-QZHKN3VN-C9rhF6Hm.js} +1 -1
  485. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BcnrxOTt.js +1 -0
  486. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BcnrxOTt.js +1 -0
  487. package/dist/domains/dashboard/web/assets/{cose-bilkent-S5V4N54A-P4nE2rea.js → cose-bilkent-S5V4N54A-CbaShPub.js} +1 -1
  488. package/dist/domains/dashboard/web/assets/{cynefin-VYW2F7L2-C-R1HXDv.js → cynefin-VYW2F7L2-DN4emAQv.js} +1 -1
  489. package/dist/domains/dashboard/web/assets/{dagre-BM42HDAG-BH8d-C9z.js → dagre-BM42HDAG-BpSzbk_V.js} +1 -1
  490. package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
  491. package/dist/domains/dashboard/web/assets/{diagram-2AECGRRQ-DpXTgQIH.js → diagram-2AECGRRQ-CfXwGGpQ.js} +1 -1
  492. package/dist/domains/dashboard/web/assets/{diagram-5GNKFQAL-DSiFJzSw.js → diagram-5GNKFQAL-DMp0Zmot.js} +1 -1
  493. package/dist/domains/dashboard/web/assets/{diagram-KO2AKTUF-DULMkben.js → diagram-KO2AKTUF-C7ZvofsM.js} +1 -1
  494. package/dist/domains/dashboard/web/assets/{diagram-LMA3HP47-Pi8m_NO9.js → diagram-LMA3HP47-BjmxFnap.js} +1 -1
  495. package/dist/domains/dashboard/web/assets/{diagram-OG6HWLK6-BSe6bCWm.js → diagram-OG6HWLK6-DFBG1Iqy.js} +1 -1
  496. package/dist/domains/dashboard/web/assets/{erDiagram-TEJ5UH35-zb-FEcbq.js → erDiagram-TEJ5UH35-MpNT7dzt.js} +1 -1
  497. package/dist/domains/dashboard/web/assets/{flowDiagram-I6XJVG4X-Dr-Gk0z2.js → flowDiagram-I6XJVG4X-_1wAR6c1.js} +1 -1
  498. package/dist/domains/dashboard/web/assets/{ganttDiagram-6RSMTGT7-qs6Zb2A6.js → ganttDiagram-6RSMTGT7-DJKjDeWl.js} +1 -1
  499. package/dist/domains/dashboard/web/assets/{gitGraphDiagram-PVQCEYII-BQ314orT.js → gitGraphDiagram-PVQCEYII-BL7yUEn-.js} +1 -1
  500. package/dist/domains/dashboard/web/assets/index-CjE9mHGb.js +24 -0
  501. package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
  502. package/dist/domains/dashboard/web/assets/{infoDiagram-5YYISTIA-O0bQp98A.js → infoDiagram-5YYISTIA-Bt5fqrOd.js} +1 -1
  503. package/dist/domains/dashboard/web/assets/{ishikawaDiagram-YF4QCWOH-BPC7wbKh.js → ishikawaDiagram-YF4QCWOH-COCMcjBM.js} +1 -1
  504. package/dist/domains/dashboard/web/assets/{journeyDiagram-JHISSGLW-ohViOd4b.js → journeyDiagram-JHISSGLW-DGcpcWny.js} +1 -1
  505. package/dist/domains/dashboard/web/assets/{kanban-definition-UN3LZRKU-CHleNdbG.js → kanban-definition-UN3LZRKU-QSBNsWMP.js} +1 -1
  506. package/dist/domains/dashboard/web/assets/{linear-CyqiW--Q.js → linear-9uyeeBZf.js} +1 -1
  507. package/dist/domains/dashboard/web/assets/{mermaid.core-qS9XvtaK.js → mermaid.core-CkNdB471.js} +4 -4
  508. package/dist/domains/dashboard/web/assets/{mindmap-definition-RKZ34NQL-oaGkqO9l.js → mindmap-definition-RKZ34NQL-CiNxI0gP.js} +1 -1
  509. package/dist/domains/dashboard/web/assets/{pieDiagram-4H26LBE5-CPcB-AFh.js → pieDiagram-4H26LBE5-BLJ6QnRO.js} +1 -1
  510. package/dist/domains/dashboard/web/assets/{quadrantDiagram-W4KKPZXB-LFy52Qtj.js → quadrantDiagram-W4KKPZXB-CflW-eFH.js} +1 -1
  511. package/dist/domains/dashboard/web/assets/{requirementDiagram-4Y6WPE33-BdjeaYP_.js → requirementDiagram-4Y6WPE33-B9HLmRWH.js} +1 -1
  512. package/dist/domains/dashboard/web/assets/{sankeyDiagram-5OEKKPKP-DDJ4styL.js → sankeyDiagram-5OEKKPKP-6xnco5k5.js} +1 -1
  513. package/dist/domains/dashboard/web/assets/{sequenceDiagram-3UESZ5HK-BL5bFNoz.js → sequenceDiagram-3UESZ5HK-Dp1rujNZ.js} +1 -1
  514. package/dist/domains/dashboard/web/assets/{stateDiagram-AJRCARHV-BNUfikui.js → stateDiagram-AJRCARHV-C1Xc90ek.js} +1 -1
  515. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-p-qmzXyE.js +1 -0
  516. package/dist/domains/dashboard/web/assets/{timeline-definition-PNZ67QCA--ps2uu6L.js → timeline-definition-PNZ67QCA-g9s-m5Z4.js} +1 -1
  517. package/dist/domains/dashboard/web/assets/{vennDiagram-CIIHVFJN-C2q8q26c.js → vennDiagram-CIIHVFJN-rkEyhyCc.js} +1 -1
  518. package/dist/domains/dashboard/web/assets/{wardleyDiagram-YWT4CUSO-BUH9gXqd.js → wardleyDiagram-YWT4CUSO-CJLrWGXc.js} +1 -1
  519. package/dist/domains/dashboard/web/assets/{xychartDiagram-2RQKCTM6-B-DielEy.js → xychartDiagram-2RQKCTM6-BxJvPNqo.js} +1 -1
  520. package/dist/domains/dashboard/web/index.html +16 -16
  521. package/dist/domains/engine/storage-layout.d.ts +14 -0
  522. package/dist/domains/engine/storage-layout.d.ts.map +1 -0
  523. package/dist/domains/engine/storage-layout.js +32 -0
  524. package/dist/domains/engine/storage-layout.js.map +1 -0
  525. package/dist/domains/engine/storage-run.d.ts +9 -0
  526. package/dist/domains/engine/storage-run.d.ts.map +1 -0
  527. package/dist/domains/engine/storage-run.js +116 -0
  528. package/dist/domains/engine/storage-run.js.map +1 -0
  529. package/dist/domains/factory/package.d.ts.map +1 -1
  530. package/dist/domains/factory/package.js +5 -3
  531. package/dist/domains/factory/package.js.map +1 -1
  532. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  533. package/dist/domains/integrations/openspec.js +8 -6
  534. package/dist/domains/integrations/openspec.js.map +1 -1
  535. package/dist/domains/skill/platform-inspect.d.ts +6 -2
  536. package/dist/domains/skill/platform-inspect.d.ts.map +1 -1
  537. package/dist/domains/skill/platform-inspect.js +52 -8
  538. package/dist/domains/skill/platform-inspect.js.map +1 -1
  539. package/dist/domains/skill/platform-install.d.ts +18 -7
  540. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  541. package/dist/domains/skill/platform-install.js +338 -71
  542. package/dist/domains/skill/platform-install.js.map +1 -1
  543. package/dist/domains/skill/project-instructions.d.ts.map +1 -1
  544. package/dist/domains/skill/project-instructions.js +12 -6
  545. package/dist/domains/skill/project-instructions.js.map +1 -1
  546. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  547. package/dist/domains/skill/uninstall.js +15 -3
  548. package/dist/domains/skill/uninstall.js.map +1 -1
  549. package/dist/domains/workflow-contract/builtins.d.ts +6 -0
  550. package/dist/domains/workflow-contract/builtins.d.ts.map +1 -1
  551. package/dist/domains/workflow-contract/builtins.js +137 -0
  552. package/dist/domains/workflow-contract/builtins.js.map +1 -1
  553. package/dist/domains/workflow-contract/index.d.ts +3 -1
  554. package/dist/domains/workflow-contract/index.d.ts.map +1 -1
  555. package/dist/domains/workflow-contract/index.js +2 -1
  556. package/dist/domains/workflow-contract/index.js.map +1 -1
  557. package/dist/domains/workflow-contract/normalize.d.ts.map +1 -1
  558. package/dist/domains/workflow-contract/normalize.js +28 -10
  559. package/dist/domains/workflow-contract/normalize.js.map +1 -1
  560. package/dist/domains/workflow-contract/project-config.d.ts +7 -0
  561. package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
  562. package/dist/domains/workflow-contract/project-config.js +110 -0
  563. package/dist/domains/workflow-contract/project-config.js.map +1 -0
  564. package/dist/domains/workflow-contract/types.d.ts +4 -2
  565. package/dist/domains/workflow-contract/types.d.ts.map +1 -1
  566. package/dist/domains/workflow-contract/validation.d.ts.map +1 -1
  567. package/dist/domains/workflow-contract/validation.js +14 -5
  568. package/dist/domains/workflow-contract/validation.js.map +1 -1
  569. package/dist/platform/install/detect.d.ts +3 -1
  570. package/dist/platform/install/detect.d.ts.map +1 -1
  571. package/dist/platform/install/detect.js +4 -1
  572. package/dist/platform/install/detect.js.map +1 -1
  573. package/dist/platform/install/project-registry.js +2 -2
  574. package/dist/platform/install/project-registry.js.map +1 -1
  575. package/dist/platform/paths/repository-layout.d.ts +16 -0
  576. package/dist/platform/paths/repository-layout.d.ts.map +1 -1
  577. package/dist/platform/paths/repository-layout.js.map +1 -1
  578. package/eval/local/README.md +50 -0
  579. package/eval/local/scripts/compare_baselines.py +127 -1
  580. package/eval/local/scripts/regression_check.py +3 -4
  581. package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +27 -0
  582. package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
  583. package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
  584. package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
  585. package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
  586. package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
  587. package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +27 -0
  588. package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
  589. package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
  590. package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
  591. package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
  592. package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
  593. package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
  594. package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +28 -0
  595. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
  596. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
  597. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
  598. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
  599. package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
  600. package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
  601. package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
  602. package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
  603. package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
  604. package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +26 -0
  605. package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
  606. package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
  607. package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
  608. package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
  609. package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
  610. package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
  611. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +27 -0
  612. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
  613. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
  614. package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
  615. package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
  616. package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
  617. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +27 -0
  618. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
  619. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
  620. package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
  621. package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
  622. package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
  623. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +27 -0
  624. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
  625. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
  626. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
  627. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
  628. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
  629. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
  630. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +27 -0
  631. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
  632. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
  633. package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
  634. package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
  635. package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
  636. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
  637. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +31 -0
  638. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
  639. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
  640. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
  641. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
  642. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
  643. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
  644. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +469 -0
  645. package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +27 -0
  646. package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
  647. package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
  648. package/eval/local/tasks/comet-native-workflow/instruction.md +14 -0
  649. package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
  650. package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +149 -0
  651. package/eval/local/tasks/index.yaml +61 -0
  652. package/eval/local/tests/conftest.py +407 -22
  653. package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
  654. package/eval/local/tests/scaffold/test_conftest_helpers.py +187 -7
  655. package/eval/local/tests/scaffold/test_logging.py +135 -1
  656. package/eval/local/tests/scaffold/test_manifests.py +2 -0
  657. package/eval/local/tests/scaffold/test_native_aligned_eval.py +346 -0
  658. package/eval/local/tests/scaffold/test_native_wave_evaluations.py +1889 -0
  659. package/eval/local/tests/scaffold/test_profiles.py +33 -0
  660. package/eval/local/tests/scaffold/test_sample_quality.py +57 -0
  661. package/eval/local/tests/scaffold/test_tasks.py +377 -1
  662. package/eval/local/tests/scaffold/test_treatments.py +59 -13
  663. package/eval/local/tests/scaffold/test_utils.py +277 -4
  664. package/eval/local/tests/tasks/__init__.py +1 -0
  665. package/eval/local/tests/tasks/test_tasks.py +104 -78
  666. package/eval/local/tests/tasks/test_validation_scripts.py +37 -0
  667. package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
  668. package/eval/pyproject.toml +4 -4
  669. package/eval/scaffold/python/aligned_comparison.py +1631 -0
  670. package/eval/scaffold/python/generic_llm_judge.py +3 -1
  671. package/eval/scaffold/python/llm_judge.py +0 -3
  672. package/eval/scaffold/python/logging.py +115 -16
  673. package/eval/scaffold/python/manifests.py +2 -0
  674. package/eval/scaffold/python/native_eval.py +138 -0
  675. package/eval/scaffold/python/pass_at_k.py +0 -1
  676. package/eval/scaffold/python/report_outputs.py +226 -44
  677. package/eval/scaffold/python/sample_quality.py +45 -2
  678. package/eval/scaffold/python/tasks.py +11 -0
  679. package/eval/scaffold/python/utils.py +108 -20
  680. package/eval/scaffold/python/validation/__init__.py +15 -5
  681. package/eval/scaffold/python/validation/comet_workflow.py +10 -5
  682. package/eval/scaffold/python/validation/generic_rubric.py +1 -2
  683. package/eval/scaffold/python/validation/native_wave.py +2154 -0
  684. package/eval/scaffold/python/validation/native_workflow.py +252 -0
  685. package/eval/scaffold/python/validation/rubric.py +0 -2
  686. package/eval/scaffold/shell/completion-point.sh +18 -0
  687. package/eval/scaffold/shell/decision-point.sh +35 -0
  688. package/eval/scaffold/shell/docker.sh +150 -9
  689. package/eval/scaffold/shell/run-claude-loop.sh +57 -27
  690. package/package.json +26 -5
  691. package/dist/domains/dashboard/web/assets/channel-kp6Ng2JJ.js +0 -1
  692. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-yBDjgMY_.js +0 -1
  693. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-yBDjgMY_.js +0 -1
  694. package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
  695. package/dist/domains/dashboard/web/assets/index-BLAfkNTu.css +0 -1
  696. package/dist/domains/dashboard/web/assets/index-DtLUOcAW.js +0 -24
  697. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-DGrsmWts.js +0 -1
  698. package/eval/.env.example +0 -52
  699. package/eval/langsmith/.env.example +0 -16
@@ -1,11 +1,29 @@
1
1
  """Unit tests for eval scaffold utilities."""
2
2
 
3
+ import importlib
4
+ import os
5
+ import subprocess
3
6
  from pathlib import Path
4
7
 
8
+ import dotenv
9
+
5
10
  from scaffold.python import utils
6
11
  from scaffold.python.skill_parser import load_skill_content, parse_skill_md
7
12
 
8
13
 
14
+ def test_import_does_not_read_dotenv(monkeypatch):
15
+ calls = []
16
+ monkeypatch.setattr(dotenv, "load_dotenv", lambda *args, **kwargs: calls.append((args, kwargs)))
17
+
18
+ importlib.reload(utils)
19
+
20
+ assert calls == []
21
+ utils.load_eval_environment()
22
+ assert len(calls) == 2
23
+ monkeypatch.undo()
24
+ importlib.reload(utils)
25
+
26
+
9
27
  def test_execution_validator_converts_structured_checks(monkeypatch, tmp_path: Path):
10
28
  def fake_run_eval_in_docker(*_args, **_kwargs):
11
29
  return {
@@ -33,6 +51,25 @@ def test_execution_validator_converts_structured_checks(monkeypatch, tmp_path: P
33
51
  assert failed == ["tests_written: missing assertions"]
34
52
 
35
53
 
54
+ def test_docker_script_failure_preserves_stderr(monkeypatch, tmp_path: Path):
55
+ monkeypatch.setattr(utils, "check_docker_available", lambda: True)
56
+ monkeypatch.setattr(
57
+ utils,
58
+ "run_shell",
59
+ lambda *_args, **_kwargs: subprocess.CompletedProcess(
60
+ args=["docker.sh"],
61
+ returncode=1,
62
+ stdout="",
63
+ stderr="validator import failed",
64
+ ),
65
+ )
66
+
67
+ success, output = utils.run_python_in_docker(tmp_path, "validation/check.py")
68
+
69
+ assert success is False
70
+ assert "validator import failed" in output
71
+
72
+
36
73
  def test_run_shell_decodes_subprocess_output_as_utf8(monkeypatch):
37
74
  captured = {}
38
75
 
@@ -55,6 +92,24 @@ def test_to_bash_path_uses_msys_drive_prefix_for_git_bash(monkeypatch):
55
92
  assert utils._to_bash_path(r"D:\Project\Comet\eval") == "/d/Project/Comet/eval"
56
93
 
57
94
 
95
+ def test_resolve_bash_prefers_git_bash_when_path_bash_is_wsl(monkeypatch):
96
+ monkeypatch.delenv("GIT_BASH", raising=False)
97
+ monkeypatch.setattr(
98
+ utils.shutil,
99
+ "which",
100
+ lambda name: {"bash": r"C:\Windows\System32\bash.exe", "git": r"D:\Git\cmd\git.exe"}.get(
101
+ name
102
+ ),
103
+ )
104
+ monkeypatch.setattr(
105
+ utils.os.path,
106
+ "isfile",
107
+ lambda path: str(path).replace("/", "\\").lower() == r"d:\git\bin\bash.exe",
108
+ )
109
+
110
+ assert utils._resolve_bash(os_name="nt") == r"D:\Git\bin\bash.exe"
111
+
112
+
58
113
  def test_to_bash_path_uses_wsl_mount_prefix_for_windowsapps_bash(monkeypatch):
59
114
  monkeypatch.setattr(utils.os, "name", "nt")
60
115
  monkeypatch.setattr(
@@ -122,10 +177,40 @@ def test_docker_loop_passes_langsmith_plugin_args_to_loop_driver():
122
177
  assert "CC_LANGSMITH_LOG_FILE" in docker_sh
123
178
 
124
179
 
180
+ def test_claude_loop_timeout_force_removes_its_named_container(monkeypatch, tmp_path: Path):
181
+ calls = []
182
+
183
+ def fake_run_shell(script, *args, **kwargs):
184
+ calls.append((script, args, kwargs))
185
+ if args[0] == "run-claude-loop":
186
+ raise subprocess.TimeoutExpired([script, *args], timeout=42)
187
+ return subprocess.CompletedProcess([script, *args], 0, "", "")
188
+
189
+ monkeypatch.setattr(utils, "run_shell", fake_run_shell)
190
+
191
+ result = utils.run_claude_loop_in_docker(tmp_path, ["prompt"], timeout=42)
192
+
193
+ assert result.returncode == 124
194
+ assert calls[0][1][0] == "run-claude-loop"
195
+ assert calls[1][1] == ("cleanup-claude-loop", tmp_path)
196
+
197
+ docker_sh = (utils.SHELL_DIR / "docker.sh").read_text(encoding="utf-8")
198
+ assert '--name "$container_name"' in docker_sh
199
+ assert "cleanup-claude-loop" in docker_sh
200
+
201
+
202
+ def test_docker_subject_run_uses_controller_verified_immutable_image_identity():
203
+ docker_sh = (utils.SHELL_DIR / "docker.sh").read_text(encoding="utf-8")
204
+
205
+ assert "docker_execution_identity" in docker_sh
206
+ assert "claude --version" in docker_sh
207
+ assert "runtime_image_id" in docker_sh
208
+ assert 'image_id=$(resolve_runtime_image "$dir" "$expected_image_id")' in docker_sh
209
+ assert '"$image_id"' in docker_sh
210
+
211
+
125
212
  def test_run_claude_fixture_defaults_langsmith_hook_log_path():
126
- conftest_py = (Path(__file__).resolve().parents[1] / "conftest.py").read_text(
127
- encoding="utf-8"
128
- )
213
+ conftest_py = (Path(__file__).resolve().parents[1] / "conftest.py").read_text(encoding="utf-8")
129
214
 
130
215
  assert 'os.environ["CC_LANGSMITH_LOG_FILE"] = "/workspace/langsmith-hook.log"' in conftest_py
131
216
 
@@ -134,6 +219,194 @@ def test_claude_loop_applies_plugin_args_to_subject_turns_only():
134
219
  loop_sh = (utils.SHELL_DIR / "run-claude-loop.sh").read_text(encoding="utf-8")
135
220
 
136
221
  assert "PLUGIN_ARGS=()" in loop_sh
137
- assert 'claude -p "$PROMPT" "${PLUGIN_ARGS[@]}"' in loop_sh
222
+ assert "shopt -s nocasematch" in loop_sh
223
+ assert "DECISION_REPLY=" in loop_sh
224
+ assert 'USER_REPLY="$DECISION_REPLY"' in loop_sh
225
+ assert 'bash "$SCRIPT_DIR/decision-point.sh" "$RESULT_TEXT"' in loop_sh
226
+ assert 'bash "$SCRIPT_DIR/completion-point.sh" "$RESULT_TEXT"' in loop_sh
227
+ assert loop_sh.index("workflow completion detected") < loop_sh.index(
228
+ 'bash "$SCRIPT_DIR/decision-point.sh" "$RESULT_TEXT"'
229
+ )
230
+ assert 'SUBJECT_PROMPT="${FRESH_PROMPT:-$PROMPT}"' in loop_sh
231
+ assert 'claude -p "$SUBJECT_PROMPT" "${PLUGIN_ARGS[@]}"' in loop_sh
138
232
  assert 'claude -p "$USER_REPLY" "${PLUGIN_ARGS[@]}"' in loop_sh
233
+ assert "fresh resume boundary detected" in loop_sh
139
234
  assert 'claude -p "$sim_prompt" "${PLUGIN_ARGS[@]}"' not in loop_sh
235
+
236
+
237
+ def test_claude_loop_surfaces_subject_resume_failure(tmp_path: Path):
238
+ fake_bin = tmp_path / "bin"
239
+ fake_bin.mkdir()
240
+ fake_claude = fake_bin / "claude"
241
+ fake_claude.write_text(
242
+ """#!/usr/bin/env bash
243
+ for arg in "$@"; do
244
+ if [[ "$arg" == "--resume" ]]; then
245
+ echo "resume failed stdout diagnostic"
246
+ echo "resume failed diagnostic" >&2
247
+ exit 42
248
+ fi
249
+ done
250
+ printf '%s\n' '{"type":"system","session_id":"session-1"}'
251
+ printf '%s\n' '{"type":"result","subtype":"success","session_id":"session-1","result":"Should abbreviations end a sentence?"}'
252
+ """,
253
+ encoding="utf-8",
254
+ newline="\n",
255
+ )
256
+ fake_claude.chmod(0o755)
257
+
258
+ env = os.environ.copy()
259
+ env["PATH"] = f"{utils._to_bash_path(fake_bin)}:{env.get('PATH', '')}"
260
+ result = subprocess.run(
261
+ [
262
+ utils.BASH_EXEC,
263
+ utils._to_bash_path(utils.SHELL_DIR / "run-claude-loop.sh"),
264
+ "Implement the requested change.",
265
+ "--max-turns",
266
+ "2",
267
+ "--decision-pattern",
268
+ "abbreviation",
269
+ "--decision-reply",
270
+ "Use an explicit abbreviation list.",
271
+ ],
272
+ capture_output=True,
273
+ text=True,
274
+ encoding="utf-8",
275
+ errors="replace",
276
+ timeout=10,
277
+ check=False,
278
+ env=env,
279
+ )
280
+
281
+ assert result.returncode != 0
282
+ assert "resume failed stdout diagnostic" in result.stderr
283
+ assert "resume failed diagnostic" in result.stderr
284
+ assert "subject turn 2 failed" in result.stderr
285
+
286
+
287
+ def test_decision_point_detector_rejects_completion_statements():
288
+ statement = "Implementation is complete and the artifacts provide the requested evidence."
289
+ punctuation_summary = "Done. The counter recognizes ., !, and ? terminators."
290
+ question = "Please confirm whether abbreviations should end a sentence."
291
+
292
+ statement_result = utils.run_shell("decision-point.sh", statement, check=False)
293
+ punctuation_result = utils.run_shell("decision-point.sh", punctuation_summary, check=False)
294
+ question_result = utils.run_shell("decision-point.sh", question, check=False)
295
+
296
+ assert statement_result.returncode == 1
297
+ assert punctuation_result.returncode == 1
298
+ assert question_result.returncode == 0
299
+
300
+
301
+ def test_decision_point_detector_rejects_multiline_archived_decision_summary():
302
+ result = utils.run_shell(
303
+ "decision-point.sh",
304
+ """Change archived successfully.
305
+ 1. Should abbreviations end sentences — No.
306
+ 2. Consecutive terminators (`?!`) count as one boundary.
307
+ All verification checks passed.""",
308
+ check=False,
309
+ )
310
+
311
+ assert result.returncode == 1
312
+
313
+
314
+ def test_decision_point_patterns_require_an_unresolved_decision_signal():
315
+ ordinary = utils.run_shell(
316
+ "decision-point.sh",
317
+ "The brief records abbreviation behavior.",
318
+ "abbreviation",
319
+ check=False,
320
+ )
321
+ unresolved = utils.run_shell(
322
+ "decision-point.sh",
323
+ "Abbreviation behavior is unresolved; I need your decision before continuing.",
324
+ "abbreviation",
325
+ check=False,
326
+ )
327
+
328
+ assert ordinary.returncode == 1
329
+ assert unresolved.returncode == 0
330
+
331
+
332
+ def test_decision_point_detector_accepts_question_followed_by_recommendation_and_impact():
333
+ result = utils.run_shell(
334
+ "decision-point.sh",
335
+ """How should abbreviations affect sentence boundaries?
336
+
337
+ Recommendation: Ignore a small explicit list.
338
+ Impact: Counts remain intuitive, but the list needs maintenance.""",
339
+ check=False,
340
+ )
341
+
342
+ assert result.returncode == 0
343
+
344
+
345
+ def test_decision_point_detector_accepts_batch_labels_and_reply_confirmation():
346
+ labelled_question = utils.run_shell(
347
+ "decision-point.sh",
348
+ """**1. Question:** Whether abbreviations such as `e.g.` end a sentence.
349
+ **Recommendation:** No.
350
+ **Impact:** Counts stay intuitive.""",
351
+ check=False,
352
+ )
353
+ reply_confirmation = utils.run_shell(
354
+ "decision-point.sh",
355
+ 'Please reply **"confirmed"** to approve this shared understanding.',
356
+ check=False,
357
+ )
358
+
359
+ assert labelled_question.returncode == 0
360
+ assert reply_confirmation.returncode == 0
361
+
362
+
363
+ def test_completion_point_detector_requires_explicit_non_negated_workflow_completion():
364
+ archived = utils.run_shell(
365
+ "completion-point.sh",
366
+ "Change archived at docs/comet/archive/2026-07-15-add-counting/.",
367
+ check=False,
368
+ )
369
+ archive_complete = utils.run_shell(
370
+ "completion-point.sh", "The archive is complete and verified from disk.", check=False
371
+ )
372
+ completed_through_archive = utils.run_shell(
373
+ "completion-point.sh", "Change add-counting completed through Archive.", check=False
374
+ )
375
+ archived_to = utils.run_shell(
376
+ "completion-point.sh", "- **Archived to**: docs/comet/archive/2026-07-19-add-counting/", check=False
377
+ )
378
+ completed_all_phases = utils.run_shell(
379
+ "completion-point.sh",
380
+ "The change has been completed through all phases and archived.",
381
+ check=False,
382
+ )
383
+ terminal_archived = utils.run_shell(
384
+ "completion-point.sh",
385
+ "The change is already in its terminal archived state.",
386
+ check=False,
387
+ )
388
+ archived_heading = utils.run_shell(
389
+ "completion-point.sh",
390
+ "**Native change `add-sentence-counting` is archived**",
391
+ check=False,
392
+ )
393
+ phase_done = utils.run_shell(
394
+ "completion-point.sh", "Shape is done; Build remains pending.", check=False
395
+ )
396
+ negated = utils.run_shell(
397
+ "completion-point.sh", "The workflow is not complete yet.", check=False
398
+ )
399
+ negated_through_archive = utils.run_shell(
400
+ "completion-point.sh", "The change is not completed through Archive.", check=False
401
+ )
402
+
403
+ assert archived.returncode == 0
404
+ assert archive_complete.returncode == 0
405
+ assert completed_through_archive.returncode == 0
406
+ assert archived_to.returncode == 0
407
+ assert completed_all_phases.returncode == 0
408
+ assert terminal_archived.returncode == 0
409
+ assert archived_heading.returncode == 0
410
+ assert phase_done.returncode == 1
411
+ assert negated.returncode == 1
412
+ assert negated_through_archive.returncode == 1
@@ -0,0 +1 @@
1
+ """Unit tests for Eval task definitions and validators."""
@@ -21,25 +21,25 @@ import pytest
21
21
  import conftest
22
22
  from conftest import get_fixtures
23
23
 
24
- from scaffold import NoiseTask, Treatment
24
+ from scaffold import Treatment
25
25
  from scaffold.python import extract_events, parse_output
26
+ from scaffold.python.aligned_comparison import build_case_manifest, case_manifest_payload
27
+ from scaffold.python.native_eval import (
28
+ adapt_checks_for_native,
29
+ adapt_prompt_for_native,
30
+ filter_control_workflow_checks as _filter_control_workflow_checks,
31
+ is_control_business_only_run as _is_control_business_only_run,
32
+ split_comet_completion_checks as _split_comet_completion_checks,
33
+ )
26
34
  from scaffold.python.profiles import resolve_profile_name, run_profile_rubric
27
35
  from scaffold.python.tasks import list_tasks, load_task
28
36
  from scaffold.python.treatments import TreatmentConfig, build_treatment_skills, load_treatments
29
37
  from scaffold.python.validation import run_validators
30
38
 
31
39
  # Timeouts
32
- CLAUDE_TIMEOUT = 1500 # 25 minutes for Claude to complete task (multi-turn loop)
33
- PYTEST_TIMEOUT = 1800 # 30 minutes total including setup/teardown
40
+ CLAUDE_TIMEOUT = 1500 # Default floor for Claude to complete a multi-turn task
41
+ PYTEST_TIMEOUT = 3000 # 50 minutes total including task-specific runtime and teardown
34
42
  MANIFEST_DYNAMIC_ONLY_TASKS = {"workflow-overlay-contract"}
35
- CONTROL_BUSINESS_ONLY_TREATMENTS = {"CONTROL"}
36
- COMET_WORKFLOW_ONLY_CHECK_PREFIXES = (
37
- "openspec_artifacts",
38
- "comet_state",
39
- "workflow_phases",
40
- "tests_written",
41
- "tests_exist",
42
- )
43
43
 
44
44
 
45
45
  # =============================================================================
@@ -98,9 +98,7 @@ def generate_test_params(task_filter: str | None, treatment_filter: str | None,
98
98
  treatment_list = expand_treatment_patterns(patterns, all_treatments)
99
99
  elif dynamic and manifest_tasks:
100
100
  treatment_list = [
101
- treatment
102
- for treatment in manifest_baseline_treatments
103
- if treatment in all_treatments
101
+ treatment for treatment in manifest_baseline_treatments if treatment in all_treatments
104
102
  ]
105
103
  if dynamic.name not in treatment_list:
106
104
  treatment_list.append(dynamic.name)
@@ -130,52 +128,6 @@ def generate_test_params(task_filter: str | None, treatment_filter: str | None,
130
128
  return params
131
129
 
132
130
 
133
- def _is_control_business_only_run(profile_name: str, treatment_name: str) -> bool:
134
- return profile_name == "comet-workflow" and treatment_name in CONTROL_BUSINESS_ONLY_TREATMENTS
135
-
136
-
137
- def _filter_control_workflow_checks(
138
- profile_name: str,
139
- treatment_name: str,
140
- passed: list[str],
141
- failed: list[str],
142
- ) -> tuple[list[str], list[str]]:
143
- """For CONTROL, evaluate comet tasks by business outcome only.
144
-
145
- CONTROL intentionally has no Skill mounted. OpenSpec/Comet state, phase
146
- evidence, and workflow-test discipline are reported by the rubric as
147
- non-applicable instead of counted as task failures.
148
- """
149
- if not _is_control_business_only_run(profile_name, treatment_name):
150
- return passed, failed
151
-
152
- def keep(check: str) -> bool:
153
- return not any(check.startswith(prefix) for prefix in COMET_WORKFLOW_ONLY_CHECK_PREFIXES)
154
-
155
- return [check for check in passed if keep(check)], [check for check in failed if keep(check)]
156
-
157
-
158
- def _split_comet_completion_checks(
159
- passed: list[str],
160
- failed: list[str],
161
- ) -> dict[str, dict[str, list[str]]]:
162
- """Split validator results into business and workflow completion buckets."""
163
-
164
- def is_workflow_check(check: str) -> bool:
165
- return any(check.startswith(prefix) for prefix in COMET_WORKFLOW_ONLY_CHECK_PREFIXES)
166
-
167
- return {
168
- "business_completion": {
169
- "passed": [check for check in passed if not is_workflow_check(check)],
170
- "failed": [check for check in failed if not is_workflow_check(check)],
171
- },
172
- "workflow_completion": {
173
- "passed": [check for check in passed if is_workflow_check(check)],
174
- "failed": [check for check in failed if is_workflow_check(check)],
175
- },
176
- }
177
-
178
-
179
131
  def test_eval_manifest_baselines_extend_dynamic_treatment_list(tmp_path, monkeypatch):
180
132
  package = tmp_path / "manifest-skill"
181
133
  package.mkdir()
@@ -215,7 +167,9 @@ interaction:
215
167
  "load_treatments",
216
168
  lambda: {
217
169
  "CONTROL": TreatmentConfig(name="CONTROL", description="Control"),
218
- "COMET_FULL_040_BETA": TreatmentConfig(name="COMET_FULL_040_BETA", description="Comet full"),
170
+ "COMET_FULL_040_BETA": TreatmentConfig(
171
+ name="COMET_FULL_040_BETA", description="Comet full"
172
+ ),
219
173
  },
220
174
  )
221
175
 
@@ -242,13 +196,23 @@ def test_control_comet_workflow_filters_workflow_only_checks():
242
196
  passed, failed = _filter_control_workflow_checks(
243
197
  "comet-workflow",
244
198
  "CONTROL",
245
- ["sentence_feature", "tests_written: ok", "workflow_phases: 5/5", "tests_exist"],
199
+ [
200
+ "sentence_feature",
201
+ "tests_written: ok",
202
+ "workflow_phases: 5/5",
203
+ "tests_exist",
204
+ "native_skill_invocation",
205
+ "native_artifacts",
206
+ "native_trajectory",
207
+ ],
246
208
  [
247
209
  "openspec_artifacts: openspec/changes/ directory not found",
248
210
  "comet_state: No .comet.yaml found",
249
211
  "workflow_phases: Only 1/5 phases",
250
212
  "tests_written: No test files written by the agent",
251
213
  "tests_exist: No test files found",
214
+ "native_state: no terminal Native archive exists",
215
+ "native_isolation: Classic or hidden workflow artifacts exist",
252
216
  "sentence_feature: --sentences flag not found",
253
217
  ],
254
218
  )
@@ -259,10 +223,19 @@ def test_control_comet_workflow_filters_workflow_only_checks():
259
223
 
260
224
  def test_split_comet_completion_checks_separates_business_and_workflow():
261
225
  completion = _split_comet_completion_checks(
262
- ["sentence_feature", "tests_exist", "workflow_phases: 5/5"],
226
+ [
227
+ "sentence_feature",
228
+ "tests_exist",
229
+ "workflow_phases: 5/5",
230
+ "native_skill_invocation",
231
+ "native_artifacts",
232
+ "native_trajectory",
233
+ ],
263
234
  [
264
235
  "openspec_artifacts: missing",
265
236
  "comet_state: missing",
237
+ "native_state: incomplete",
238
+ "native_isolation: forbidden artifacts",
266
239
  "business_rule: failed",
267
240
  ],
268
241
  )
@@ -272,8 +245,19 @@ def test_split_comet_completion_checks_separates_business_and_workflow():
272
245
  "failed": ["business_rule: failed"],
273
246
  }
274
247
  assert completion["workflow_completion"] == {
275
- "passed": ["tests_exist", "workflow_phases: 5/5"],
276
- "failed": ["openspec_artifacts: missing", "comet_state: missing"],
248
+ "passed": [
249
+ "tests_exist",
250
+ "workflow_phases: 5/5",
251
+ "native_skill_invocation",
252
+ "native_artifacts",
253
+ "native_trajectory",
254
+ ],
255
+ "failed": [
256
+ "openspec_artifacts: missing",
257
+ "comet_state: missing",
258
+ "native_state: incomplete",
259
+ "native_isolation: forbidden artifacts",
260
+ ],
277
261
  }
278
262
 
279
263
 
@@ -300,13 +284,19 @@ def pytest_generate_tests(metafunc):
300
284
  treatment_filter = metafunc.config.getoption("--treatment")
301
285
  count = int(metafunc.config.getoption("--count") or 1)
302
286
  base_params = generate_test_params(task_filter, treatment_filter, metafunc.config)
303
- # pytest ids stay (task, treatment); the rep number is tracked separately
304
- # by the experiment plugin's get_rep_number per treatment. To force N
305
- # distinct test invocations we append a rep suffix to the param id.
287
+ # The explicit marker is the controller-owned repetition identity used
288
+ # to persist a complete matrix before any model run begins.
306
289
  params = []
307
290
  for rep in range(count):
308
291
  for task_name, treatment_name in base_params:
309
- params.append(pytest.param(task_name, treatment_name, id=f"{task_name}-{treatment_name}-r{rep+1}"))
292
+ params.append(
293
+ pytest.param(
294
+ task_name,
295
+ treatment_name,
296
+ id=f"{task_name}-{treatment_name}-r{rep + 1}",
297
+ marks=pytest.mark.eval_case(repetition=rep + 1),
298
+ )
299
+ )
310
300
  metafunc.parametrize("task_name,treatment_name", params)
311
301
 
312
302
 
@@ -352,7 +342,11 @@ def test_task_treatment(task_name, treatment_name):
352
342
  for var_name, var_template in task.config.setup.template_vars.items():
353
343
  template_vars[var_name] = var_template.format(run_id=run_id)
354
344
 
355
- prompt = task.render_prompt(**template_vars)
345
+ prompt = adapt_prompt_for_native(
346
+ task.render_prompt(**template_vars),
347
+ treatment_name,
348
+ terminal_mode=task.config.evaluation.native_terminal,
349
+ )
356
350
  target_profile = None
357
351
  if treatment_cfg.skills:
358
352
  target_profile = treatment_cfg.skills[0].get("profile")
@@ -361,20 +355,39 @@ def test_task_treatment(task_name, treatment_name):
361
355
  override=fixtures.request_config.getoption("--profile"),
362
356
  target_profile=target_profile,
363
357
  )
358
+ interaction = conftest._resolve_interaction_config(task, profile_name, fixtures.request_config)
364
359
  fixtures.setup_test_context(
365
360
  skills=treatment.skills,
366
361
  claude_md=conftest._build_eval_claude_md(profile_name, treatment.claude_md),
367
362
  environment_dir=task.environment_dir,
368
363
  )
369
- interaction = conftest._resolve_interaction_config(task, profile_name, fixtures.request_config)
370
- skill_package_path = (
371
- conftest._snapshot_dynamic_skill_package(fixtures.test_dir, skill_hints)
372
- or skill_hints.get("path")
364
+ selected_model = conftest._selected_claude_model()
365
+ captured_execution = conftest._capture_execution_identity(
366
+ fixtures.test_dir,
367
+ model=selected_model,
368
+ interaction=interaction,
369
+ )
370
+ case_manifest = case_manifest_payload(
371
+ build_case_manifest(
372
+ task.name,
373
+ task.path.parent,
374
+ execution_identity=captured_execution.report_identity,
375
+ )
376
+ )
377
+ skill_package_path = conftest._snapshot_dynamic_skill_package(
378
+ fixtures.test_dir, skill_hints
379
+ ) or skill_hints.get("path")
380
+
381
+ result = fixtures.run_claude(
382
+ prompt,
383
+ timeout=max(CLAUDE_TIMEOUT, task.config.timeout_sec),
384
+ model=selected_model,
385
+ interaction=interaction,
386
+ image_id=captured_execution.runtime_image_id,
373
387
  )
374
-
375
- result = fixtures.run_claude(prompt, timeout=CLAUDE_TIMEOUT, interaction=interaction)
376
388
 
377
389
  events = extract_events(parse_output(result.stdout))
390
+ loop_interaction = conftest._extract_loop_interaction(result.stderr)
378
391
  outputs = {
379
392
  "run_id": run_id,
380
393
  "treatment_name": treatment_name,
@@ -386,8 +399,10 @@ def test_task_treatment(task_name, treatment_name):
386
399
  or task.config.evaluation.required_skills,
387
400
  "expected_artifacts": skill_hints.get("expected_artifacts")
388
401
  or task.config.evaluation.expected_artifacts,
389
- "require_skill_invocation": task.config.evaluation.require_skill_invocation,
402
+ "require_skill_invocation": skill_hints.get("require_skill_invocation")
403
+ or task.config.evaluation.require_skill_invocation,
390
404
  "rubric_criteria": task.config.evaluation.rubric_criteria,
405
+ "native_terminal": task.config.evaluation.native_terminal,
391
406
  "skill_package_path": skill_package_path,
392
407
  "generated_node_skills": skill_hints.get("generated_node_skills") or [],
393
408
  "route_conformance_task": skill_hints.get("route_conformance_task"),
@@ -402,14 +417,23 @@ def test_task_treatment(task_name, treatment_name):
402
417
  "interaction": {
403
418
  "mode": interaction.mode,
404
419
  "max_turns": interaction.max_turns,
420
+ **loop_interaction,
405
421
  },
422
+ "case_manifest": case_manifest,
406
423
  }
407
424
  events["profile"] = outputs["profile"]
408
425
  events["skill_sources"] = outputs["skill_sources"]
409
426
  events["eval_manifest"] = outputs["eval_manifest"]
410
427
  events["interaction"] = outputs["interaction"]
428
+ events["case_manifest"] = case_manifest
411
429
 
412
430
  passed, failed = run_validators(validators, fixtures.test_dir, outputs)
431
+ passed, failed = adapt_checks_for_native(
432
+ fixtures.test_dir,
433
+ outputs,
434
+ passed,
435
+ failed,
436
+ )
413
437
  completion_slices = _split_comet_completion_checks(passed, failed)
414
438
  passed, failed = _filter_control_workflow_checks(
415
439
  profile_name,
@@ -427,7 +451,9 @@ def test_task_treatment(task_name, treatment_name):
427
451
  rubric_outputs.update(completion_slices)
428
452
  if _is_control_business_only_run(profile_name, treatment_name):
429
453
  rubric_outputs["workflow_completion"] = {"passed": [], "failed": []}
430
- rubric_passed, rubric_failed = run_profile_rubric(profile_name, fixtures.test_dir, rubric_outputs)
454
+ rubric_passed, rubric_failed = run_profile_rubric(
455
+ profile_name, fixtures.test_dir, rubric_outputs
456
+ )
431
457
  passed = passed + rubric_passed
432
458
  failed = failed + rubric_failed
433
459
 
@@ -3,6 +3,8 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import importlib.util
6
+ import os
7
+ import subprocess
6
8
  import sys
7
9
  import types
8
10
  from pathlib import Path
@@ -11,6 +13,41 @@ from pathlib import Path
11
13
  ROOT = Path(__file__).resolve().parents[3]
12
14
 
13
15
 
16
+ def test_native_wave_validator_import_does_not_load_host_docker_helpers(tmp_path: Path):
17
+ from scaffold.python import utils
18
+
19
+ stale_package = tmp_path / "scaffold/python"
20
+ stale_package.mkdir(parents=True)
21
+ (tmp_path / "scaffold/__init__.py").write_text("", encoding="utf-8")
22
+ (stale_package / "__init__.py").write_text(
23
+ "raise RuntimeError('host scaffold package leaked into validator')\n",
24
+ encoding="utf-8",
25
+ )
26
+ utils._copy_scaffold_to_docker(tmp_path)
27
+ env = os.environ.copy()
28
+ env["PYTHONPATH"] = str(tmp_path)
29
+ result = subprocess.run(
30
+ [
31
+ sys.executable,
32
+ "-c",
33
+ (
34
+ "import sys; "
35
+ "import scaffold.python.validation.native_wave; "
36
+ "assert 'scaffold.python.validation.docker' not in sys.modules"
37
+ ),
38
+ ],
39
+ cwd=tmp_path,
40
+ capture_output=True,
41
+ text=True,
42
+ encoding="utf-8",
43
+ errors="replace",
44
+ check=False,
45
+ env=env,
46
+ )
47
+
48
+ assert result.returncode == 0, result.stderr
49
+
50
+
14
51
  def _load_validator(path: Path, workspace: Path):
15
52
  fake_checks = types.ModuleType("comet_checks")
16
53
  fake_checks.WORKSPACE = workspace