@rpamis/comet 0.4.0-beta.1 → 0.4.0-beta.11

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 (1297) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +279 -113
  3. package/assets/manifest.json +17 -5
  4. package/assets/skills/comet/SKILL.md +17 -256
  5. package/assets/skills/comet/reference/auto-transition.md +1 -1
  6. package/assets/skills/comet/reference/classic-layout.md +34 -0
  7. package/assets/skills/comet/reference/comet-yaml-fields.md +14 -8
  8. package/assets/skills/comet/reference/context-recovery.md +14 -4
  9. package/assets/skills/comet/reference/decision-point.md +11 -0
  10. package/assets/skills/comet/reference/file-structure.md +2 -2
  11. package/assets/skills/comet/reference/intent-frame.md +3 -3
  12. package/assets/skills/comet/reference/scripts.md +47 -15
  13. package/assets/skills/comet/reference/subagent-dispatch.md +8 -7
  14. package/assets/skills/comet/rules/comet-phase-guard.en.md +34 -31
  15. package/assets/skills/comet/rules/comet-phase-guard.md +34 -32
  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/scripts/comet-entry-runtime.mjs +8074 -0
  19. package/assets/skills/comet/scripts/comet-hook-router.mjs +12086 -0
  20. package/assets/skills/comet/scripts/comet-resume-probe.mjs +3 -0
  21. package/assets/skills/comet/scripts/comet-runtime.mjs +10449 -4105
  22. package/assets/skills/comet-any/SKILL.md +5 -5
  23. package/assets/skills/comet-any/reference/authored-zone-example.md +10 -5
  24. package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
  25. package/assets/skills/comet-any/reference/bundle-authoring.md +2 -2
  26. package/assets/skills/comet-any/reference/subagents/pause-points-author.md +14 -11
  27. package/assets/skills/comet-any/reference/subagents/reference-author.md +1 -1
  28. package/assets/skills/comet-any/reference/subagents/script-author.md +1 -1
  29. package/assets/skills/comet-any/reference/subagents/skill-core-author.md +1 -1
  30. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +4 -2
  31. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +8 -7
  32. package/assets/skills/comet-archive/SKILL.md +69 -26
  33. package/assets/skills/comet-build/SKILL.md +77 -58
  34. package/assets/skills/comet-classic/SKILL.md +295 -0
  35. package/assets/skills/comet-design/SKILL.md +40 -36
  36. package/assets/skills/comet-hotfix/SKILL.md +57 -35
  37. package/assets/skills/comet-native/SKILL.md +132 -0
  38. package/assets/skills/comet-native/reference/artifacts.md +141 -0
  39. package/assets/skills/comet-native/reference/clarification.md +54 -0
  40. package/assets/skills/comet-native/reference/commands.md +168 -0
  41. package/assets/skills/comet-native/reference/recovery.md +96 -0
  42. package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
  43. package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +34165 -0
  44. package/assets/skills/comet-open/SKILL.md +119 -59
  45. package/assets/skills/comet-tweak/SKILL.md +52 -27
  46. package/assets/skills/comet-verify/SKILL.md +65 -73
  47. package/assets/skills-zh/comet/SKILL.md +17 -244
  48. package/assets/skills-zh/comet/reference/auto-transition.md +1 -1
  49. package/assets/skills-zh/comet/reference/classic-layout.md +34 -0
  50. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +13 -8
  51. package/assets/skills-zh/comet/reference/context-recovery.md +14 -4
  52. package/assets/skills-zh/comet/reference/decision-point.md +11 -0
  53. package/assets/skills-zh/comet/reference/file-structure.md +2 -2
  54. package/assets/skills-zh/comet/reference/intent-frame.md +3 -3
  55. package/assets/skills-zh/comet/reference/scripts.md +47 -15
  56. package/assets/skills-zh/comet/reference/subagent-dispatch.md +8 -7
  57. package/assets/skills-zh/comet-any/SKILL.md +5 -5
  58. package/assets/skills-zh/comet-any/reference/authored-zone-example.md +10 -5
  59. package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
  60. package/assets/skills-zh/comet-any/reference/bundle-authoring.md +2 -2
  61. package/assets/skills-zh/comet-any/reference/subagents/pause-points-author.md +14 -12
  62. package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +1 -1
  63. package/assets/skills-zh/comet-any/reference/subagents/script-author.md +1 -1
  64. package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +1 -1
  65. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +4 -2
  66. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +8 -7
  67. package/assets/skills-zh/comet-archive/SKILL.md +69 -26
  68. package/assets/skills-zh/comet-build/SKILL.md +77 -58
  69. package/assets/skills-zh/comet-classic/SKILL.md +283 -0
  70. package/assets/skills-zh/comet-design/SKILL.md +40 -36
  71. package/assets/skills-zh/comet-hotfix/SKILL.md +56 -34
  72. package/assets/skills-zh/comet-native/SKILL.md +132 -0
  73. package/assets/skills-zh/comet-native/reference/artifacts.md +141 -0
  74. package/assets/skills-zh/comet-native/reference/clarification.md +54 -0
  75. package/assets/skills-zh/comet-native/reference/commands.md +168 -0
  76. package/assets/skills-zh/comet-native/reference/recovery.md +96 -0
  77. package/assets/skills-zh/comet-open/SKILL.md +118 -58
  78. package/assets/skills-zh/comet-tweak/SKILL.md +51 -26
  79. package/assets/skills-zh/comet-verify/SKILL.md +65 -73
  80. package/dist/app/cli/comet-banner.d.ts +25 -0
  81. package/dist/app/cli/comet-banner.d.ts.map +1 -0
  82. package/dist/app/cli/comet-banner.js +265 -0
  83. package/dist/app/cli/comet-banner.js.map +1 -0
  84. package/dist/app/cli/index.js +113 -16
  85. package/dist/app/cli/index.js.map +1 -1
  86. package/dist/app/commands/classic.d.ts +5 -0
  87. package/dist/app/commands/classic.d.ts.map +1 -0
  88. package/dist/app/commands/classic.js +32 -0
  89. package/dist/app/commands/classic.js.map +1 -0
  90. package/dist/app/commands/command-result.d.ts +6 -0
  91. package/dist/app/commands/command-result.d.ts.map +1 -0
  92. package/dist/app/commands/command-result.js +4 -0
  93. package/dist/app/commands/command-result.js.map +1 -0
  94. package/dist/app/commands/doctor.d.ts +4 -0
  95. package/dist/app/commands/doctor.d.ts.map +1 -1
  96. package/dist/app/commands/doctor.js +926 -95
  97. package/dist/app/commands/doctor.js.map +1 -1
  98. package/dist/app/commands/eval.d.ts +3 -1
  99. package/dist/app/commands/eval.d.ts.map +1 -1
  100. package/dist/app/commands/eval.js +80 -22
  101. package/dist/app/commands/eval.js.map +1 -1
  102. package/dist/app/commands/i18n.d.ts +1 -1
  103. package/dist/app/commands/i18n.d.ts.map +1 -1
  104. package/dist/app/commands/i18n.js +18 -6
  105. package/dist/app/commands/i18n.js.map +1 -1
  106. package/dist/app/commands/init.d.ts +13 -3
  107. package/dist/app/commands/init.d.ts.map +1 -1
  108. package/dist/app/commands/init.js +561 -72
  109. package/dist/app/commands/init.js.map +1 -1
  110. package/dist/app/commands/native.d.ts +2 -0
  111. package/dist/app/commands/native.d.ts.map +1 -0
  112. package/dist/app/commands/native.js +10 -0
  113. package/dist/app/commands/native.js.map +1 -0
  114. package/dist/app/commands/project-scope-selection.d.ts +13 -0
  115. package/dist/app/commands/project-scope-selection.d.ts.map +1 -0
  116. package/dist/app/commands/project-scope-selection.js +35 -0
  117. package/dist/app/commands/project-scope-selection.js.map +1 -0
  118. package/dist/app/commands/resume-probe.d.ts +12 -0
  119. package/dist/app/commands/resume-probe.d.ts.map +1 -0
  120. package/dist/app/commands/resume-probe.js +68 -0
  121. package/dist/app/commands/resume-probe.js.map +1 -0
  122. package/dist/app/commands/status.d.ts.map +1 -1
  123. package/dist/app/commands/status.js +70 -104
  124. package/dist/app/commands/status.js.map +1 -1
  125. package/dist/app/commands/uninstall.d.ts +5 -0
  126. package/dist/app/commands/uninstall.d.ts.map +1 -1
  127. package/dist/app/commands/uninstall.js +264 -53
  128. package/dist/app/commands/uninstall.js.map +1 -1
  129. package/dist/app/commands/update.d.ts +29 -5
  130. package/dist/app/commands/update.d.ts.map +1 -1
  131. package/dist/app/commands/update.js +1431 -127
  132. package/dist/app/commands/update.js.map +1 -1
  133. package/dist/app/commands/workflow.d.ts +6 -0
  134. package/dist/app/commands/workflow.d.ts.map +1 -0
  135. package/dist/app/commands/workflow.js +11 -0
  136. package/dist/app/commands/workflow.js.map +1 -0
  137. package/dist/config/repository-layout.json +29 -3
  138. package/dist/domains/bundle/bundle-platform.d.ts +1 -0
  139. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
  140. package/dist/domains/bundle/bundle-platform.js +10 -4
  141. package/dist/domains/bundle/bundle-platform.js.map +1 -1
  142. package/dist/domains/bundle/eval-manifest-runtime.d.ts +8 -0
  143. package/dist/domains/bundle/eval-manifest-runtime.d.ts.map +1 -0
  144. package/dist/domains/bundle/eval-manifest-runtime.js +118 -0
  145. package/dist/domains/bundle/eval-manifest-runtime.js.map +1 -0
  146. package/dist/domains/bundle/eval-run-result.d.ts +22 -0
  147. package/dist/domains/bundle/eval-run-result.d.ts.map +1 -0
  148. package/dist/domains/bundle/eval-run-result.js +207 -0
  149. package/dist/domains/bundle/eval-run-result.js.map +1 -0
  150. package/dist/domains/bundle/eval.d.ts.map +1 -1
  151. package/dist/domains/bundle/eval.js +21 -24
  152. package/dist/domains/bundle/eval.js.map +1 -1
  153. package/dist/domains/bundle/factory.d.ts.map +1 -1
  154. package/dist/domains/bundle/factory.js +2 -9
  155. package/dist/domains/bundle/factory.js.map +1 -1
  156. package/dist/domains/bundle/review-summary.js +1 -1
  157. package/dist/domains/bundle/review-summary.js.map +1 -1
  158. package/dist/domains/bundle/state.d.ts.map +1 -1
  159. package/dist/domains/bundle/state.js +117 -2
  160. package/dist/domains/bundle/state.js.map +1 -1
  161. package/dist/domains/bundle/types.d.ts +1 -1
  162. package/dist/domains/bundle/types.d.ts.map +1 -1
  163. package/dist/domains/comet-classic/classic-archive-pointer.d.ts +8 -0
  164. package/dist/domains/comet-classic/classic-archive-pointer.d.ts.map +1 -0
  165. package/dist/domains/comet-classic/classic-archive-pointer.js +66 -0
  166. package/dist/domains/comet-classic/classic-archive-pointer.js.map +1 -0
  167. package/dist/domains/comet-classic/classic-archive.d.ts +1 -0
  168. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
  169. package/dist/domains/comet-classic/classic-archive.js +205 -114
  170. package/dist/domains/comet-classic/classic-archive.js.map +1 -1
  171. package/dist/domains/comet-classic/classic-branch-binding.d.ts +51 -0
  172. package/dist/domains/comet-classic/classic-branch-binding.d.ts.map +1 -0
  173. package/dist/domains/comet-classic/classic-branch-binding.js +107 -0
  174. package/dist/domains/comet-classic/classic-branch-binding.js.map +1 -0
  175. package/dist/domains/comet-classic/classic-cli.d.ts +3 -1
  176. package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -1
  177. package/dist/domains/comet-classic/classic-cli.js +12 -3
  178. package/dist/domains/comet-classic/classic-cli.js.map +1 -1
  179. package/dist/domains/comet-classic/classic-command-checks.d.ts +20 -0
  180. package/dist/domains/comet-classic/classic-command-checks.d.ts.map +1 -0
  181. package/dist/domains/comet-classic/classic-command-checks.js +94 -0
  182. package/dist/domains/comet-classic/classic-command-checks.js.map +1 -0
  183. package/dist/domains/comet-classic/classic-command-context.d.ts +12 -0
  184. package/dist/domains/comet-classic/classic-command-context.d.ts.map +1 -0
  185. package/dist/domains/comet-classic/classic-command-context.js +42 -0
  186. package/dist/domains/comet-classic/classic-command-context.js.map +1 -0
  187. package/dist/domains/comet-classic/classic-current-change.d.ts +17 -0
  188. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -0
  189. package/dist/domains/comet-classic/classic-current-change.js +112 -0
  190. package/dist/domains/comet-classic/classic-current-change.js.map +1 -0
  191. package/dist/domains/comet-classic/classic-diagnostics.d.ts +2 -1
  192. package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -1
  193. package/dist/domains/comet-classic/classic-diagnostics.js +54 -1
  194. package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -1
  195. package/dist/domains/comet-classic/classic-evidence.d.ts +1 -0
  196. package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -1
  197. package/dist/domains/comet-classic/classic-evidence.js +101 -37
  198. package/dist/domains/comet-classic/classic-evidence.js.map +1 -1
  199. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
  200. package/dist/domains/comet-classic/classic-guard.js +229 -208
  201. package/dist/domains/comet-classic/classic-guard.js.map +1 -1
  202. package/dist/domains/comet-classic/classic-handoff.d.ts.map +1 -1
  203. package/dist/domains/comet-classic/classic-handoff.js +155 -107
  204. package/dist/domains/comet-classic/classic-handoff.js.map +1 -1
  205. package/dist/domains/comet-classic/classic-hook-guard.d.ts +9 -0
  206. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  207. package/dist/domains/comet-classic/classic-hook-guard.js +406 -54
  208. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  209. package/dist/domains/comet-classic/classic-layout-initialization.d.ts +86 -0
  210. package/dist/domains/comet-classic/classic-layout-initialization.d.ts.map +1 -0
  211. package/dist/domains/comet-classic/classic-layout-initialization.js +813 -0
  212. package/dist/domains/comet-classic/classic-layout-initialization.js.map +1 -0
  213. package/dist/domains/comet-classic/classic-layout.d.ts +47 -0
  214. package/dist/domains/comet-classic/classic-layout.d.ts.map +1 -0
  215. package/dist/domains/comet-classic/classic-layout.js +227 -0
  216. package/dist/domains/comet-classic/classic-layout.js.map +1 -0
  217. package/dist/domains/comet-classic/classic-migrate.d.ts +4 -0
  218. package/dist/domains/comet-classic/classic-migrate.d.ts.map +1 -1
  219. package/dist/domains/comet-classic/classic-migrate.js +8 -12
  220. package/dist/domains/comet-classic/classic-migrate.js.map +1 -1
  221. package/dist/domains/comet-classic/classic-openspec-command.d.ts +4 -0
  222. package/dist/domains/comet-classic/classic-openspec-command.d.ts.map +1 -0
  223. package/dist/domains/comet-classic/classic-openspec-command.js +45 -0
  224. package/dist/domains/comet-classic/classic-openspec-command.js.map +1 -0
  225. package/dist/domains/comet-classic/classic-openspec-root.d.ts +13 -0
  226. package/dist/domains/comet-classic/classic-openspec-root.d.ts.map +1 -0
  227. package/dist/domains/comet-classic/classic-openspec-root.js +47 -0
  228. package/dist/domains/comet-classic/classic-openspec-root.js.map +1 -0
  229. package/dist/domains/comet-classic/classic-paths.d.ts +11 -1
  230. package/dist/domains/comet-classic/classic-paths.d.ts.map +1 -1
  231. package/dist/domains/comet-classic/classic-paths.js +87 -35
  232. package/dist/domains/comet-classic/classic-paths.js.map +1 -1
  233. package/dist/domains/comet-classic/classic-project-config.d.ts +16 -0
  234. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -0
  235. package/dist/domains/comet-classic/classic-project-config.js +36 -0
  236. package/dist/domains/comet-classic/classic-project-config.js.map +1 -0
  237. package/dist/domains/comet-classic/classic-protected-path.d.ts +39 -0
  238. package/dist/domains/comet-classic/classic-protected-path.d.ts.map +1 -0
  239. package/dist/domains/comet-classic/classic-protected-path.js +69 -0
  240. package/dist/domains/comet-classic/classic-protected-path.js.map +1 -0
  241. package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -1
  242. package/dist/domains/comet-classic/classic-resolver.js +4 -4
  243. package/dist/domains/comet-classic/classic-resolver.js.map +1 -1
  244. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts +3 -0
  245. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts.map +1 -0
  246. package/dist/domains/comet-classic/classic-resume-probe-command.js +59 -0
  247. package/dist/domains/comet-classic/classic-resume-probe-command.js.map +1 -0
  248. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts +2 -0
  249. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts.map +1 -0
  250. package/dist/domains/comet-classic/classic-resume-probe-entry.js +4 -0
  251. package/dist/domains/comet-classic/classic-resume-probe-entry.js.map +1 -0
  252. package/dist/domains/comet-classic/classic-resume-probe.d.ts +29 -0
  253. package/dist/domains/comet-classic/classic-resume-probe.d.ts.map +1 -0
  254. package/dist/domains/comet-classic/classic-resume-probe.js +406 -0
  255. package/dist/domains/comet-classic/classic-resume-probe.js.map +1 -0
  256. package/dist/domains/comet-classic/classic-root-command.d.ts +5 -0
  257. package/dist/domains/comet-classic/classic-root-command.d.ts.map +1 -0
  258. package/dist/domains/comet-classic/classic-root-command.js +84 -0
  259. package/dist/domains/comet-classic/classic-root-command.js.map +1 -0
  260. package/dist/domains/comet-classic/classic-root-move.d.ts +119 -0
  261. package/dist/domains/comet-classic/classic-root-move.d.ts.map +1 -0
  262. package/dist/domains/comet-classic/classic-root-move.js +1737 -0
  263. package/dist/domains/comet-classic/classic-root-move.js.map +1 -0
  264. package/dist/domains/comet-classic/classic-runtime-run.d.ts +2 -1
  265. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
  266. package/dist/domains/comet-classic/classic-runtime-run.js +278 -5
  267. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
  268. package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -1
  269. package/dist/domains/comet-classic/classic-state-command.js +342 -87
  270. package/dist/domains/comet-classic/classic-state-command.js.map +1 -1
  271. package/dist/domains/comet-classic/classic-state-events.d.ts +1 -1
  272. package/dist/domains/comet-classic/classic-state-events.d.ts.map +1 -1
  273. package/dist/domains/comet-classic/classic-state-events.js +3 -4
  274. package/dist/domains/comet-classic/classic-state-events.js.map +1 -1
  275. package/dist/domains/comet-classic/classic-state.d.ts +6 -4
  276. package/dist/domains/comet-classic/classic-state.d.ts.map +1 -1
  277. package/dist/domains/comet-classic/classic-state.js +20 -7
  278. package/dist/domains/comet-classic/classic-state.js.map +1 -1
  279. package/dist/domains/comet-classic/classic-store.d.ts +6 -1
  280. package/dist/domains/comet-classic/classic-store.d.ts.map +1 -1
  281. package/dist/domains/comet-classic/classic-store.js +36 -23
  282. package/dist/domains/comet-classic/classic-store.js.map +1 -1
  283. package/dist/domains/comet-classic/classic-transitions.d.ts +1 -1
  284. package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -1
  285. package/dist/domains/comet-classic/classic-transitions.js +37 -3
  286. package/dist/domains/comet-classic/classic-transitions.js.map +1 -1
  287. package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -1
  288. package/dist/domains/comet-classic/classic-validate-command.js +40 -20
  289. package/dist/domains/comet-classic/classic-validate-command.js.map +1 -1
  290. package/dist/domains/comet-classic/index.d.ts +3 -0
  291. package/dist/domains/comet-classic/index.d.ts.map +1 -1
  292. package/dist/domains/comet-classic/index.js +3 -0
  293. package/dist/domains/comet-classic/index.js.map +1 -1
  294. package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
  295. package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
  296. package/dist/domains/comet-entry/current-selection-repair.js +19 -0
  297. package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
  298. package/dist/domains/comet-entry/current-selection.d.ts +28 -0
  299. package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
  300. package/dist/domains/comet-entry/current-selection.js +114 -0
  301. package/dist/domains/comet-entry/current-selection.js.map +1 -0
  302. package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
  303. package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
  304. package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
  305. package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
  306. package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
  307. package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
  308. package/dist/domains/comet-entry/entry-runtime.js +55 -0
  309. package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
  310. package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
  311. package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
  312. package/dist/domains/comet-entry/hook-adapter.js +202 -0
  313. package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
  314. package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
  315. package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
  316. package/dist/domains/comet-entry/hook-router-entry.js +88 -0
  317. package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
  318. package/dist/domains/comet-entry/hook-router.d.ts +32 -0
  319. package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
  320. package/dist/domains/comet-entry/hook-router.js +133 -0
  321. package/dist/domains/comet-entry/hook-router.js.map +1 -0
  322. package/dist/domains/comet-entry/hook-types.d.ts +20 -0
  323. package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
  324. package/dist/domains/comet-entry/hook-types.js +2 -0
  325. package/dist/domains/comet-entry/hook-types.js.map +1 -0
  326. package/dist/domains/comet-entry/init-workflow.d.ts +19 -0
  327. package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
  328. package/dist/domains/comet-entry/init-workflow.js +132 -0
  329. package/dist/domains/comet-entry/init-workflow.js.map +1 -0
  330. package/dist/domains/comet-entry/project-status.d.ts +3 -0
  331. package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
  332. package/dist/domains/comet-entry/project-status.js +291 -0
  333. package/dist/domains/comet-entry/project-status.js.map +1 -0
  334. package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
  335. package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
  336. package/dist/domains/comet-entry/resolve-entry.js +18 -0
  337. package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
  338. package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
  339. package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
  340. package/dist/domains/comet-entry/resume-probe.js +462 -0
  341. package/dist/domains/comet-entry/resume-probe.js.map +1 -0
  342. package/dist/domains/comet-entry/types.d.ts +60 -0
  343. package/dist/domains/comet-entry/types.d.ts.map +1 -0
  344. package/dist/domains/comet-entry/types.js +2 -0
  345. package/dist/domains/comet-entry/types.js.map +1 -0
  346. package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
  347. package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
  348. package/dist/domains/comet-entry/workflow-resolution.js +16 -0
  349. package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
  350. package/dist/domains/comet-native/index.d.ts +35 -0
  351. package/dist/domains/comet-native/index.d.ts.map +1 -0
  352. package/dist/domains/comet-native/index.js +35 -0
  353. package/dist/domains/comet-native/index.js.map +1 -0
  354. package/dist/domains/comet-native/native-acceptance.d.ts +53 -0
  355. package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
  356. package/dist/domains/comet-native/native-acceptance.js +658 -0
  357. package/dist/domains/comet-native/native-acceptance.js.map +1 -0
  358. package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
  359. package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
  360. package/dist/domains/comet-native/native-archive-content.js +159 -0
  361. package/dist/domains/comet-native/native-archive-content.js.map +1 -0
  362. package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
  363. package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
  364. package/dist/domains/comet-native/native-archive-inspection.js +97 -0
  365. package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
  366. package/dist/domains/comet-native/native-archive-preflight.d.ts +54 -0
  367. package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
  368. package/dist/domains/comet-native/native-archive-preflight.js +222 -0
  369. package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
  370. package/dist/domains/comet-native/native-archive-transaction.d.ts +20 -0
  371. package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
  372. package/dist/domains/comet-native/native-archive-transaction.js +1183 -0
  373. package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
  374. package/dist/domains/comet-native/native-archive.d.ts +36 -0
  375. package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
  376. package/dist/domains/comet-native/native-archive.js +422 -0
  377. package/dist/domains/comet-native/native-archive.js.map +1 -0
  378. package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
  379. package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
  380. package/dist/domains/comet-native/native-artifacts.js +204 -0
  381. package/dist/domains/comet-native/native-artifacts.js.map +1 -0
  382. package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
  383. package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
  384. package/dist/domains/comet-native/native-atomic-file.js +179 -0
  385. package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
  386. package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
  387. package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
  388. package/dist/domains/comet-native/native-bounded-file.js +184 -0
  389. package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
  390. package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
  391. package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
  392. package/dist/domains/comet-native/native-build-evidence.js +257 -0
  393. package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
  394. package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
  395. package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
  396. package/dist/domains/comet-native/native-canonical-hash.js +100 -0
  397. package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
  398. package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
  399. package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
  400. package/dist/domains/comet-native/native-change-recovery.js +15 -0
  401. package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
  402. package/dist/domains/comet-native/native-change.d.ts +64 -0
  403. package/dist/domains/comet-native/native-change.d.ts.map +1 -0
  404. package/dist/domains/comet-native/native-change.js +738 -0
  405. package/dist/domains/comet-native/native-change.js.map +1 -0
  406. package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
  407. package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
  408. package/dist/domains/comet-native/native-check-receipt-model.js +352 -0
  409. package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
  410. package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
  411. package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
  412. package/dist/domains/comet-native/native-check-receipt-storage.js +200 -0
  413. package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
  414. package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
  415. package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
  416. package/dist/domains/comet-native/native-check-receipt.js +453 -0
  417. package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
  418. package/dist/domains/comet-native/native-check.d.ts +24 -0
  419. package/dist/domains/comet-native/native-check.d.ts.map +1 -0
  420. package/dist/domains/comet-native/native-check.js +38 -0
  421. package/dist/domains/comet-native/native-check.js.map +1 -0
  422. package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
  423. package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
  424. package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
  425. package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
  426. package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
  427. package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
  428. package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
  429. package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
  430. package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
  431. package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
  432. package/dist/domains/comet-native/native-cli-entry.js +18 -0
  433. package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
  434. package/dist/domains/comet-native/native-cli.d.ts +7 -0
  435. package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
  436. package/dist/domains/comet-native/native-cli.js +1256 -0
  437. package/dist/domains/comet-native/native-cli.js.map +1 -0
  438. package/dist/domains/comet-native/native-config.d.ts +23 -0
  439. package/dist/domains/comet-native/native-config.d.ts.map +1 -0
  440. package/dist/domains/comet-native/native-config.js +60 -0
  441. package/dist/domains/comet-native/native-config.js.map +1 -0
  442. package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
  443. package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
  444. package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
  445. package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
  446. package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
  447. package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
  448. package/dist/domains/comet-native/native-conflict-radar.js +326 -0
  449. package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
  450. package/dist/domains/comet-native/native-continuation.d.ts +12 -0
  451. package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
  452. package/dist/domains/comet-native/native-continuation.js +201 -0
  453. package/dist/domains/comet-native/native-continuation.js.map +1 -0
  454. package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
  455. package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
  456. package/dist/domains/comet-native/native-contract-files.js +66 -0
  457. package/dist/domains/comet-native/native-contract-files.js.map +1 -0
  458. package/dist/domains/comet-native/native-contract.d.ts +41 -0
  459. package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
  460. package/dist/domains/comet-native/native-contract.js +142 -0
  461. package/dist/domains/comet-native/native-contract.js.map +1 -0
  462. package/dist/domains/comet-native/native-controller-trust.d.ts +21 -0
  463. package/dist/domains/comet-native/native-controller-trust.d.ts.map +1 -0
  464. package/dist/domains/comet-native/native-controller-trust.js +140 -0
  465. package/dist/domains/comet-native/native-controller-trust.js.map +1 -0
  466. package/dist/domains/comet-native/native-diagnostics.d.ts +25 -0
  467. package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
  468. package/dist/domains/comet-native/native-diagnostics.js +551 -0
  469. package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
  470. package/dist/domains/comet-native/native-doctor.d.ts +12 -0
  471. package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
  472. package/dist/domains/comet-native/native-doctor.js +771 -0
  473. package/dist/domains/comet-native/native-doctor.js.map +1 -0
  474. package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
  475. package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
  476. package/dist/domains/comet-native/native-evidence-retention.js +916 -0
  477. package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
  478. package/dist/domains/comet-native/native-evidence-storage.d.ts +54 -0
  479. package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
  480. package/dist/domains/comet-native/native-evidence-storage.js +401 -0
  481. package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
  482. package/dist/domains/comet-native/native-file-identity.d.ts +3 -0
  483. package/dist/domains/comet-native/native-file-identity.d.ts.map +1 -0
  484. package/dist/domains/comet-native/native-file-identity.js +2 -0
  485. package/dist/domains/comet-native/native-file-identity.js.map +1 -0
  486. package/dist/domains/comet-native/native-findings.d.ts +8 -0
  487. package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
  488. package/dist/domains/comet-native/native-findings.js +254 -0
  489. package/dist/domains/comet-native/native-findings.js.map +1 -0
  490. package/dist/domains/comet-native/native-guards.d.ts +8 -0
  491. package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
  492. package/dist/domains/comet-native/native-guards.js +140 -0
  493. package/dist/domains/comet-native/native-guards.js.map +1 -0
  494. package/dist/domains/comet-native/native-hash.d.ts +3 -0
  495. package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
  496. package/dist/domains/comet-native/native-hash.js +12 -0
  497. package/dist/domains/comet-native/native-hash.js.map +1 -0
  498. package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
  499. package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
  500. package/dist/domains/comet-native/native-hook-guard.js +154 -0
  501. package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
  502. package/dist/domains/comet-native/native-independent-review.d.ts +28 -0
  503. package/dist/domains/comet-native/native-independent-review.d.ts.map +1 -0
  504. package/dist/domains/comet-native/native-independent-review.js +134 -0
  505. package/dist/domains/comet-native/native-independent-review.js.map +1 -0
  506. package/dist/domains/comet-native/native-lock.d.ts +47 -0
  507. package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
  508. package/dist/domains/comet-native/native-lock.js +390 -0
  509. package/dist/domains/comet-native/native-lock.js.map +1 -0
  510. package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
  511. package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
  512. package/dist/domains/comet-native/native-mutation-lock.js +66 -0
  513. package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
  514. package/dist/domains/comet-native/native-paths.d.ts +10 -0
  515. package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
  516. package/dist/domains/comet-native/native-paths.js +160 -0
  517. package/dist/domains/comet-native/native-paths.js.map +1 -0
  518. package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
  519. package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
  520. package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
  521. package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
  522. package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
  523. package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
  524. package/dist/domains/comet-native/native-protected-file.js +510 -0
  525. package/dist/domains/comet-native/native-protected-file.js.map +1 -0
  526. package/dist/domains/comet-native/native-redaction.d.ts +2 -0
  527. package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
  528. package/dist/domains/comet-native/native-redaction.js +18 -0
  529. package/dist/domains/comet-native/native-redaction.js.map +1 -0
  530. package/dist/domains/comet-native/native-repair-integration.d.ts +46 -0
  531. package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
  532. package/dist/domains/comet-native/native-repair-integration.js +235 -0
  533. package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
  534. package/dist/domains/comet-native/native-repair-runtime.d.ts +78 -0
  535. package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
  536. package/dist/domains/comet-native/native-repair-runtime.js +593 -0
  537. package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
  538. package/dist/domains/comet-native/native-repair-stagnation.d.ts +89 -0
  539. package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
  540. package/dist/domains/comet-native/native-repair-stagnation.js +308 -0
  541. package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
  542. package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
  543. package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
  544. package/dist/domains/comet-native/native-resume-view.js +105 -0
  545. package/dist/domains/comet-native/native-resume-view.js.map +1 -0
  546. package/dist/domains/comet-native/native-review-contract.d.ts +6 -0
  547. package/dist/domains/comet-native/native-review-contract.d.ts.map +1 -0
  548. package/dist/domains/comet-native/native-review-contract.js +6 -0
  549. package/dist/domains/comet-native/native-review-contract.js.map +1 -0
  550. package/dist/domains/comet-native/native-review-identity.d.ts +50 -0
  551. package/dist/domains/comet-native/native-review-identity.d.ts.map +1 -0
  552. package/dist/domains/comet-native/native-review-identity.js +209 -0
  553. package/dist/domains/comet-native/native-review-identity.js.map +1 -0
  554. package/dist/domains/comet-native/native-review-signer.d.ts +24 -0
  555. package/dist/domains/comet-native/native-review-signer.d.ts.map +1 -0
  556. package/dist/domains/comet-native/native-review-signer.js +125 -0
  557. package/dist/domains/comet-native/native-review-signer.js.map +1 -0
  558. package/dist/domains/comet-native/native-review-trust.d.ts +35 -0
  559. package/dist/domains/comet-native/native-review-trust.d.ts.map +1 -0
  560. package/dist/domains/comet-native/native-review-trust.js +176 -0
  561. package/dist/domains/comet-native/native-review-trust.js.map +1 -0
  562. package/dist/domains/comet-native/native-revision.d.ts +20 -0
  563. package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
  564. package/dist/domains/comet-native/native-revision.js +32 -0
  565. package/dist/domains/comet-native/native-revision.js.map +1 -0
  566. package/dist/domains/comet-native/native-root-move.d.ts +20 -0
  567. package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
  568. package/dist/domains/comet-native/native-root-move.js +818 -0
  569. package/dist/domains/comet-native/native-root-move.js.map +1 -0
  570. package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
  571. package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
  572. package/dist/domains/comet-native/native-run-consistency.js +136 -0
  573. package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
  574. package/dist/domains/comet-native/native-run-store.d.ts +41 -0
  575. package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
  576. package/dist/domains/comet-native/native-run-store.js +452 -0
  577. package/dist/domains/comet-native/native-run-store.js.map +1 -0
  578. package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
  579. package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
  580. package/dist/domains/comet-native/native-runtime-package.js +72 -0
  581. package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
  582. package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
  583. package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
  584. package/dist/domains/comet-native/native-schema-migration.js +900 -0
  585. package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
  586. package/dist/domains/comet-native/native-selection.d.ts +12 -0
  587. package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
  588. package/dist/domains/comet-native/native-selection.js +52 -0
  589. package/dist/domains/comet-native/native-selection.js.map +1 -0
  590. package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
  591. package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
  592. package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
  593. package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
  594. package/dist/domains/comet-native/native-snapshot.d.ts +78 -0
  595. package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
  596. package/dist/domains/comet-native/native-snapshot.js +2572 -0
  597. package/dist/domains/comet-native/native-snapshot.js.map +1 -0
  598. package/dist/domains/comet-native/native-specs.d.ts +12 -0
  599. package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
  600. package/dist/domains/comet-native/native-specs.js +270 -0
  601. package/dist/domains/comet-native/native-specs.js.map +1 -0
  602. package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
  603. package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
  604. package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
  605. package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
  606. package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
  607. package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
  608. package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
  609. package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
  610. package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
  611. package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
  612. package/dist/domains/comet-native/native-trajectory.js +27 -0
  613. package/dist/domains/comet-native/native-trajectory.js.map +1 -0
  614. package/dist/domains/comet-native/native-transaction.d.ts +45 -0
  615. package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
  616. package/dist/domains/comet-native/native-transaction.js +846 -0
  617. package/dist/domains/comet-native/native-transaction.js.map +1 -0
  618. package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
  619. package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
  620. package/dist/domains/comet-native/native-transition-evidence.js +27 -0
  621. package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
  622. package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
  623. package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
  624. package/dist/domains/comet-native/native-transition-journal.js +819 -0
  625. package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
  626. package/dist/domains/comet-native/native-transitions.d.ts +15 -0
  627. package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
  628. package/dist/domains/comet-native/native-transitions.js +683 -0
  629. package/dist/domains/comet-native/native-transitions.js.map +1 -0
  630. package/dist/domains/comet-native/native-types.d.ts +547 -0
  631. package/dist/domains/comet-native/native-types.d.ts.map +1 -0
  632. package/dist/domains/comet-native/native-types.js +8 -0
  633. package/dist/domains/comet-native/native-types.js.map +1 -0
  634. package/dist/domains/comet-native/native-verification-evidence.d.ts +136 -0
  635. package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
  636. package/dist/domains/comet-native/native-verification-evidence.js +824 -0
  637. package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
  638. package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts +188 -0
  639. package/dist/domains/comet-native/native-verification-receipt-runtime.d.ts.map +1 -0
  640. package/dist/domains/comet-native/native-verification-receipt-runtime.js +1129 -0
  641. package/dist/domains/comet-native/native-verification-receipt-runtime.js.map +1 -0
  642. package/dist/domains/comet-native/native-verification-receipt.d.ts +165 -0
  643. package/dist/domains/comet-native/native-verification-receipt.d.ts.map +1 -0
  644. package/dist/domains/comet-native/native-verification-receipt.js +636 -0
  645. package/dist/domains/comet-native/native-verification-receipt.js.map +1 -0
  646. package/dist/domains/comet-native/native-verification-runtime.d.ts +61 -0
  647. package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
  648. package/dist/domains/comet-native/native-verification-runtime.js +609 -0
  649. package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
  650. package/dist/domains/comet-native/native-verification-scope.d.ts +118 -0
  651. package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
  652. package/dist/domains/comet-native/native-verification-scope.js +1045 -0
  653. package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
  654. package/dist/domains/comet-native/native-workspace.d.ts +46 -0
  655. package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
  656. package/dist/domains/comet-native/native-workspace.js +276 -0
  657. package/dist/domains/comet-native/native-workspace.js.map +1 -0
  658. package/dist/domains/dashboard/collector.d.ts.map +1 -1
  659. package/dist/domains/dashboard/collector.js +182 -75
  660. package/dist/domains/dashboard/collector.js.map +1 -1
  661. package/dist/domains/dashboard/native-adapter.d.ts +157 -0
  662. package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
  663. package/dist/domains/dashboard/native-adapter.js +302 -0
  664. package/dist/domains/dashboard/native-adapter.js.map +1 -0
  665. package/dist/domains/dashboard/native-collector.d.ts +6 -0
  666. package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
  667. package/dist/domains/dashboard/native-collector.js +289 -0
  668. package/dist/domains/dashboard/native-collector.js.map +1 -0
  669. package/dist/domains/dashboard/types.d.ts +10 -0
  670. package/dist/domains/dashboard/types.d.ts.map +1 -1
  671. package/dist/domains/dashboard/verify-parser.d.ts.map +1 -1
  672. package/dist/domains/dashboard/verify-parser.js +37 -31
  673. package/dist/domains/dashboard/verify-parser.js.map +1 -1
  674. package/dist/domains/dashboard/web/assets/_commonjsHelpers-CqkleIqs.js +1 -0
  675. package/dist/domains/dashboard/web/assets/arc-BXWNV2Qv.js +1 -0
  676. package/dist/domains/dashboard/web/assets/architectureDiagram-3BPJPVTR-CjVHPivo.js +36 -0
  677. package/dist/domains/dashboard/web/assets/blockDiagram-GPEHLZMM-P2PGImSM.js +132 -0
  678. package/dist/domains/dashboard/web/assets/c4Diagram-AAUBKEIU-fTj6Xhs1.js +10 -0
  679. package/dist/domains/dashboard/web/assets/channel--JtnhJr8.js +1 -0
  680. package/dist/domains/dashboard/web/assets/chunk-2J33WTMH-BjFDZ5yo.js +1 -0
  681. package/dist/domains/dashboard/web/assets/chunk-4BX2VUAB-BAUkbZdT.js +1 -0
  682. package/dist/domains/dashboard/web/assets/chunk-55IACEB6-DBmuiYme.js +1 -0
  683. package/dist/domains/dashboard/web/assets/chunk-727SXJPM-Do9ufCgY.js +206 -0
  684. package/dist/domains/dashboard/web/assets/chunk-AQP2D5EJ-qRQWlB5d.js +231 -0
  685. package/dist/domains/dashboard/web/assets/chunk-FMBD7UC4-BzDzeJ4_.js +15 -0
  686. package/dist/domains/dashboard/web/assets/chunk-ND2GUHAM-OQcAmIvL.js +1 -0
  687. package/dist/domains/dashboard/web/assets/chunk-QZHKN3VN-BiRfH4d2.js +1 -0
  688. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BRGmx8Iz.js +1 -0
  689. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BRGmx8Iz.js +1 -0
  690. package/dist/domains/dashboard/web/assets/cose-bilkent-S5V4N54A-CZk37fGn.js +1 -0
  691. package/dist/domains/dashboard/web/assets/cynefin-VYW2F7L2-B3F-qRTJ.js +166 -0
  692. package/dist/domains/dashboard/web/assets/cytoscape.esm-D3_iZ_3b.js +321 -0
  693. package/dist/domains/dashboard/web/assets/dagre-BM42HDAG-D5BQ0eqN.js +4 -0
  694. package/dist/domains/dashboard/web/assets/defaultLocale-DX6XiGOO.js +1 -0
  695. package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
  696. package/dist/domains/dashboard/web/assets/diagram-2AECGRRQ-33mXstha.js +43 -0
  697. package/dist/domains/dashboard/web/assets/diagram-5GNKFQAL-BWHCMFvD.js +10 -0
  698. package/dist/domains/dashboard/web/assets/diagram-KO2AKTUF-DrPGimEt.js +3 -0
  699. package/dist/domains/dashboard/web/assets/diagram-LMA3HP47-BBlsg7jG.js +24 -0
  700. package/dist/domains/dashboard/web/assets/diagram-OG6HWLK6-CsaFSpHi.js +24 -0
  701. package/dist/domains/dashboard/web/assets/erDiagram-TEJ5UH35-CoB0mzhk.js +85 -0
  702. package/dist/domains/dashboard/web/assets/flowDiagram-I6XJVG4X-lT53XfSE.js +162 -0
  703. package/dist/domains/dashboard/web/assets/ganttDiagram-6RSMTGT7-D1SQ56fl.js +292 -0
  704. package/dist/domains/dashboard/web/assets/gitGraphDiagram-PVQCEYII-D4oDMS5x.js +106 -0
  705. package/dist/domains/dashboard/web/assets/graph--OzhPTMs.js +1 -0
  706. package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
  707. package/dist/domains/dashboard/web/assets/index-DlSYK56b.js +139 -0
  708. package/dist/domains/dashboard/web/assets/index-Msce_H_q.js +24 -0
  709. package/dist/domains/dashboard/web/assets/index-QO0z6F4w.js +10 -0
  710. package/dist/domains/dashboard/web/assets/infoDiagram-5YYISTIA-BeICn98s.js +2 -0
  711. package/dist/domains/dashboard/web/assets/init-Gi6I4Gst.js +1 -0
  712. package/dist/domains/dashboard/web/assets/ishikawaDiagram-YF4QCWOH-Dkspu33d.js +70 -0
  713. package/dist/domains/dashboard/web/assets/journeyDiagram-JHISSGLW-C-EM1sZl.js +139 -0
  714. package/dist/domains/dashboard/web/assets/kanban-definition-UN3LZRKU-BTbB0IO2.js +89 -0
  715. package/dist/domains/dashboard/web/assets/katex-HP8lGamR.js +257 -0
  716. package/dist/domains/dashboard/web/assets/layout-SsrduOYp.js +1 -0
  717. package/dist/domains/dashboard/web/assets/linear-Cp0UrqDr.js +1 -0
  718. package/dist/domains/dashboard/web/assets/marked.esm-DECB3bxB.js +64 -0
  719. package/dist/domains/dashboard/web/assets/mermaid.core-CucmqsLW.js +301 -0
  720. package/dist/domains/dashboard/web/assets/mindmap-definition-RKZ34NQL-CjEshF1X.js +96 -0
  721. package/dist/domains/dashboard/web/assets/ordinal-Cboi1Yqb.js +1 -0
  722. package/dist/domains/dashboard/web/assets/pieDiagram-4H26LBE5-DrwFnX1b.js +30 -0
  723. package/dist/domains/dashboard/web/assets/purify.es-VaSPOPhr.js +3 -0
  724. package/dist/domains/dashboard/web/assets/quadrantDiagram-W4KKPZXB-CjG6pBR2.js +7 -0
  725. package/dist/domains/dashboard/web/assets/requirementDiagram-4Y6WPE33-BpUQVqCV.js +84 -0
  726. package/dist/domains/dashboard/web/assets/sankeyDiagram-5OEKKPKP-BeGkEvzR.js +40 -0
  727. package/dist/domains/dashboard/web/assets/sequenceDiagram-3UESZ5HK-sSTU3MCO.js +162 -0
  728. package/dist/domains/dashboard/web/assets/stateDiagram-AJRCARHV-CcFBc6qh.js +1 -0
  729. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-D5zZYi4x.js +1 -0
  730. package/dist/domains/dashboard/web/assets/timeline-definition-PNZ67QCA-DCN7NjEs.js +120 -0
  731. package/dist/domains/dashboard/web/assets/vennDiagram-CIIHVFJN-DZAN1_rr.js +34 -0
  732. package/dist/domains/dashboard/web/assets/wardleyDiagram-YWT4CUSO-FfkJfr4C.js +78 -0
  733. package/dist/domains/dashboard/web/assets/xychartDiagram-2RQKCTM6-CD8B-EmR.js +7 -0
  734. package/dist/domains/dashboard/web/index.html +16 -16
  735. package/dist/domains/engine/protected-run-file.d.ts +15 -0
  736. package/dist/domains/engine/protected-run-file.d.ts.map +1 -0
  737. package/dist/domains/engine/protected-run-file.js +76 -0
  738. package/dist/domains/engine/protected-run-file.js.map +1 -0
  739. package/dist/domains/engine/run-store.d.ts +12 -11
  740. package/dist/domains/engine/run-store.d.ts.map +1 -1
  741. package/dist/domains/engine/run-store.js +46 -65
  742. package/dist/domains/engine/run-store.js.map +1 -1
  743. package/dist/domains/engine/state.d.ts +4 -3
  744. package/dist/domains/engine/state.d.ts.map +1 -1
  745. package/dist/domains/engine/state.js +10 -21
  746. package/dist/domains/engine/state.js.map +1 -1
  747. package/dist/domains/engine/storage-layout.d.ts +14 -0
  748. package/dist/domains/engine/storage-layout.d.ts.map +1 -0
  749. package/dist/domains/engine/storage-layout.js +32 -0
  750. package/dist/domains/engine/storage-layout.js.map +1 -0
  751. package/dist/domains/engine/storage-run.d.ts +9 -0
  752. package/dist/domains/engine/storage-run.d.ts.map +1 -0
  753. package/dist/domains/engine/storage-run.js +116 -0
  754. package/dist/domains/engine/storage-run.js.map +1 -0
  755. package/dist/domains/engine/types.d.ts +1 -1
  756. package/dist/domains/engine/types.d.ts.map +1 -1
  757. package/dist/domains/factory/package.d.ts.map +1 -1
  758. package/dist/domains/factory/package.js +562 -91
  759. package/dist/domains/factory/package.js.map +1 -1
  760. package/dist/domains/integrations/codegraph.d.ts +13 -2
  761. package/dist/domains/integrations/codegraph.d.ts.map +1 -1
  762. package/dist/domains/integrations/codegraph.js +160 -12
  763. package/dist/domains/integrations/codegraph.js.map +1 -1
  764. package/dist/domains/integrations/openspec.d.ts +12 -2
  765. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  766. package/dist/domains/integrations/openspec.js +256 -47
  767. package/dist/domains/integrations/openspec.js.map +1 -1
  768. package/dist/domains/skill/find.js +8 -7
  769. package/dist/domains/skill/find.js.map +1 -1
  770. package/dist/domains/skill/json-object.d.ts +13 -0
  771. package/dist/domains/skill/json-object.d.ts.map +1 -0
  772. package/dist/domains/skill/json-object.js +24 -0
  773. package/dist/domains/skill/json-object.js.map +1 -0
  774. package/dist/domains/skill/languages.d.ts +2 -1
  775. package/dist/domains/skill/languages.d.ts.map +1 -1
  776. package/dist/domains/skill/languages.js +4 -1
  777. package/dist/domains/skill/languages.js.map +1 -1
  778. package/dist/domains/skill/managed-markdown.d.ts +14 -0
  779. package/dist/domains/skill/managed-markdown.d.ts.map +1 -0
  780. package/dist/domains/skill/managed-markdown.js +126 -0
  781. package/dist/domains/skill/managed-markdown.js.map +1 -0
  782. package/dist/domains/skill/platform-inspect.d.ts +13 -0
  783. package/dist/domains/skill/platform-inspect.d.ts.map +1 -0
  784. package/dist/domains/skill/platform-inspect.js +193 -0
  785. package/dist/domains/skill/platform-inspect.js.map +1 -0
  786. package/dist/domains/skill/platform-install.d.ts +38 -23
  787. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  788. package/dist/domains/skill/platform-install.js +829 -230
  789. package/dist/domains/skill/platform-install.js.map +1 -1
  790. package/dist/domains/skill/project-instructions.d.ts +22 -0
  791. package/dist/domains/skill/project-instructions.d.ts.map +1 -0
  792. package/dist/domains/skill/project-instructions.js +69 -0
  793. package/dist/domains/skill/project-instructions.js.map +1 -0
  794. package/dist/domains/skill/uninstall.d.ts +9 -2
  795. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  796. package/dist/domains/skill/uninstall.js +734 -158
  797. package/dist/domains/skill/uninstall.js.map +1 -1
  798. package/dist/domains/workflow-contract/builtins.d.ts +6 -0
  799. package/dist/domains/workflow-contract/builtins.d.ts.map +1 -1
  800. package/dist/domains/workflow-contract/builtins.js +149 -6
  801. package/dist/domains/workflow-contract/builtins.js.map +1 -1
  802. package/dist/domains/workflow-contract/contained-atomic-write.d.ts +21 -0
  803. package/dist/domains/workflow-contract/contained-atomic-write.d.ts.map +1 -0
  804. package/dist/domains/workflow-contract/contained-atomic-write.js +235 -0
  805. package/dist/domains/workflow-contract/contained-atomic-write.js.map +1 -0
  806. package/dist/domains/workflow-contract/index.d.ts +11 -1
  807. package/dist/domains/workflow-contract/index.d.ts.map +1 -1
  808. package/dist/domains/workflow-contract/index.js +7 -1
  809. package/dist/domains/workflow-contract/index.js.map +1 -1
  810. package/dist/domains/workflow-contract/normalize.d.ts.map +1 -1
  811. package/dist/domains/workflow-contract/normalize.js +30 -11
  812. package/dist/domains/workflow-contract/normalize.js.map +1 -1
  813. package/dist/domains/workflow-contract/project-config-reader.d.ts +24 -0
  814. package/dist/domains/workflow-contract/project-config-reader.d.ts.map +1 -0
  815. package/dist/domains/workflow-contract/project-config-reader.js +54 -0
  816. package/dist/domains/workflow-contract/project-config-reader.js.map +1 -0
  817. package/dist/domains/workflow-contract/project-config-transaction.d.ts +20 -0
  818. package/dist/domains/workflow-contract/project-config-transaction.d.ts.map +1 -0
  819. package/dist/domains/workflow-contract/project-config-transaction.js +293 -0
  820. package/dist/domains/workflow-contract/project-config-transaction.js.map +1 -0
  821. package/dist/domains/workflow-contract/project-config-writer.d.ts +13 -0
  822. package/dist/domains/workflow-contract/project-config-writer.d.ts.map +1 -0
  823. package/dist/domains/workflow-contract/project-config-writer.js +142 -0
  824. package/dist/domains/workflow-contract/project-config-writer.js.map +1 -0
  825. package/dist/domains/workflow-contract/project-config.d.ts +32 -0
  826. package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
  827. package/dist/domains/workflow-contract/project-config.js +1566 -0
  828. package/dist/domains/workflow-contract/project-config.js.map +1 -0
  829. package/dist/domains/workflow-contract/protected-project-path.d.ts +34 -0
  830. package/dist/domains/workflow-contract/protected-project-path.d.ts.map +1 -0
  831. package/dist/domains/workflow-contract/protected-project-path.js +162 -0
  832. package/dist/domains/workflow-contract/protected-project-path.js.map +1 -0
  833. package/dist/domains/workflow-contract/types.d.ts +67 -2
  834. package/dist/domains/workflow-contract/types.d.ts.map +1 -1
  835. package/dist/domains/workflow-contract/validation.d.ts.map +1 -1
  836. package/dist/domains/workflow-contract/validation.js +14 -5
  837. package/dist/domains/workflow-contract/validation.js.map +1 -1
  838. package/dist/platform/fs/file-identity.d.ts +9 -0
  839. package/dist/platform/fs/file-identity.d.ts.map +1 -0
  840. package/dist/platform/fs/file-identity.js +21 -0
  841. package/dist/platform/fs/file-identity.js.map +1 -0
  842. package/dist/platform/fs/file-system.d.ts +3 -3
  843. package/dist/platform/fs/file-system.d.ts.map +1 -1
  844. package/dist/platform/fs/file-system.js +31 -17
  845. package/dist/platform/fs/file-system.js.map +1 -1
  846. package/dist/platform/fs/race-safe-read.d.ts +47 -0
  847. package/dist/platform/fs/race-safe-read.d.ts.map +1 -0
  848. package/dist/platform/fs/race-safe-read.js +132 -0
  849. package/dist/platform/fs/race-safe-read.js.map +1 -0
  850. package/dist/platform/fs/trusted-readonly-file.d.ts +31 -0
  851. package/dist/platform/fs/trusted-readonly-file.d.ts.map +1 -0
  852. package/dist/platform/fs/trusted-readonly-file.js +107 -0
  853. package/dist/platform/fs/trusted-readonly-file.js.map +1 -0
  854. package/dist/platform/install/detect.d.ts +5 -2
  855. package/dist/platform/install/detect.d.ts.map +1 -1
  856. package/dist/platform/install/detect.js +14 -2
  857. package/dist/platform/install/detect.js.map +1 -1
  858. package/dist/platform/install/platform-targets.d.ts +8 -0
  859. package/dist/platform/install/platform-targets.d.ts.map +1 -0
  860. package/dist/platform/install/platform-targets.js +31 -0
  861. package/dist/platform/install/platform-targets.js.map +1 -0
  862. package/dist/platform/install/platforms.d.ts +10 -1
  863. package/dist/platform/install/platforms.d.ts.map +1 -1
  864. package/dist/platform/install/platforms.js +27 -4
  865. package/dist/platform/install/platforms.js.map +1 -1
  866. package/dist/platform/install/project-registry.d.ts +38 -0
  867. package/dist/platform/install/project-registry.d.ts.map +1 -0
  868. package/dist/platform/install/project-registry.js +213 -0
  869. package/dist/platform/install/project-registry.js.map +1 -0
  870. package/dist/platform/install/skill-root-owner.d.ts +15 -0
  871. package/dist/platform/install/skill-root-owner.d.ts.map +1 -0
  872. package/dist/platform/install/skill-root-owner.js +68 -0
  873. package/dist/platform/install/skill-root-owner.js.map +1 -0
  874. package/dist/platform/paths/git-worktree.d.ts +10 -0
  875. package/dist/platform/paths/git-worktree.d.ts.map +1 -0
  876. package/dist/platform/paths/git-worktree.js +43 -0
  877. package/dist/platform/paths/git-worktree.js.map +1 -0
  878. package/dist/platform/paths/repository-layout.d.ts +16 -0
  879. package/dist/platform/paths/repository-layout.d.ts.map +1 -1
  880. package/dist/platform/paths/repository-layout.js.map +1 -1
  881. package/dist/platform/process/terminate-process-tree.d.ts +3 -0
  882. package/dist/platform/process/terminate-process-tree.d.ts.map +1 -0
  883. package/dist/platform/process/terminate-process-tree.js +65 -0
  884. package/dist/platform/process/terminate-process-tree.js.map +1 -0
  885. package/eval/CLAUDE.md +43 -0
  886. package/eval/README.md +538 -0
  887. package/eval/langsmith/README.md +93 -0
  888. package/eval/langsmith/skills/README.md +5 -0
  889. package/eval/langsmith/tasks/README.md +5 -0
  890. package/eval/langsmith/tests/conftest.py +187 -0
  891. package/eval/langsmith/tests/tasks/test_tasks.py +287 -0
  892. package/eval/langsmith/treatments/README.md +5 -0
  893. package/eval/local/README.md +130 -0
  894. package/eval/local/regression_baseline.json +13 -0
  895. package/eval/local/report-style-demo-assets/quality_cost.en.svg +41 -0
  896. package/eval/local/report-style-demo-assets/quality_cost.zh.svg +41 -0
  897. package/eval/local/report-style-demo-assets/rubric_delta.en.svg +56 -0
  898. package/eval/local/report-style-demo-assets/rubric_delta.zh.svg +56 -0
  899. package/eval/local/report-style-demo-assets/task_outcomes.en.svg +46 -0
  900. package/eval/local/report-style-demo-assets/task_outcomes.zh.svg +46 -0
  901. package/eval/local/report-style-demo.html +867 -0
  902. package/eval/local/scripts/compare_baselines.py +1144 -0
  903. package/eval/local/scripts/generate_report_style_demo_charts.py +322 -0
  904. package/eval/local/scripts/regression_check.py +170 -0
  905. package/eval/local/scripts/render_readme_benchmark_figures.py +416 -0
  906. package/eval/local/scripts/rescore_rubric.py +120 -0
  907. package/eval/local/skills/benchmarks/039-release/comet-classic-039/SKILL.md +282 -0
  908. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/auto-transition.md +27 -0
  909. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/comet-yaml-fields.md +68 -0
  910. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/context-recovery.md +35 -0
  911. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/debug-gate.md +17 -0
  912. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/decision-point.md +20 -0
  913. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/dirty-worktree.md +59 -0
  914. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/file-structure.md +28 -0
  915. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/subagent-dispatch.md +113 -0
  916. package/eval/local/skills/benchmarks/039-release/comet-classic-039/rules/comet-phase-guard.md +125 -0
  917. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-archive.sh +311 -0
  918. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-env.sh +110 -0
  919. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-guard.sh +778 -0
  920. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-handoff.sh +390 -0
  921. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-hook-guard.sh +336 -0
  922. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-state.sh +1338 -0
  923. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-yaml-validate.sh +225 -0
  924. package/eval/local/skills/benchmarks/039-release/comet-classic-039-archive/SKILL.md +100 -0
  925. package/eval/local/skills/benchmarks/039-release/comet-classic-039-build/SKILL.md +304 -0
  926. package/eval/local/skills/benchmarks/039-release/comet-classic-039-design/SKILL.md +263 -0
  927. package/eval/local/skills/benchmarks/039-release/comet-classic-039-hotfix/SKILL.md +204 -0
  928. package/eval/local/skills/benchmarks/039-release/comet-classic-039-open/SKILL.md +220 -0
  929. package/eval/local/skills/benchmarks/039-release/comet-classic-039-tweak/SKILL.md +180 -0
  930. package/eval/local/skills/benchmarks/039-release/comet-classic-039-verify/SKILL.md +234 -0
  931. package/eval/local/skills/benchmarks/040-beta/comet/SKILL.md +261 -0
  932. package/eval/local/skills/benchmarks/040-beta/comet/reference/auto-transition.md +27 -0
  933. package/eval/local/skills/benchmarks/040-beta/comet/reference/comet-yaml-fields.md +73 -0
  934. package/eval/local/skills/benchmarks/040-beta/comet/reference/context-recovery.md +45 -0
  935. package/eval/local/skills/benchmarks/040-beta/comet/reference/debug-gate.md +33 -0
  936. package/eval/local/skills/benchmarks/040-beta/comet/reference/decision-point.md +31 -0
  937. package/eval/local/skills/benchmarks/040-beta/comet/reference/dirty-worktree.md +59 -0
  938. package/eval/local/skills/benchmarks/040-beta/comet/reference/file-structure.md +28 -0
  939. package/eval/local/skills/benchmarks/040-beta/comet/reference/intent-frame.md +74 -0
  940. package/eval/local/skills/benchmarks/040-beta/comet/reference/scripts.md +69 -0
  941. package/eval/local/skills/benchmarks/040-beta/comet/reference/subagent-dispatch.md +169 -0
  942. package/eval/local/skills/benchmarks/040-beta/comet/rules/comet-phase-guard.md +130 -0
  943. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/checks.yaml +6 -0
  944. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/guardrails.yaml +13 -0
  945. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/skill.yaml +122 -0
  946. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-archive.mjs +9515 -0
  947. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-env.mjs +15 -0
  948. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-guard.mjs +10173 -0
  949. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-handoff.mjs +9491 -0
  950. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-hook-guard.mjs +9175 -0
  951. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-intent.mjs +404 -0
  952. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-state.mjs +9273 -0
  953. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-yaml-validate.mjs +7627 -0
  954. package/eval/local/skills/benchmarks/040-beta/comet-archive/SKILL.md +110 -0
  955. package/eval/local/skills/benchmarks/040-beta/comet-build/SKILL.md +315 -0
  956. package/eval/local/skills/benchmarks/040-beta/comet-design/SKILL.md +260 -0
  957. package/eval/local/skills/benchmarks/040-beta/comet-hotfix/SKILL.md +190 -0
  958. package/eval/local/skills/benchmarks/040-beta/comet-open/SKILL.md +210 -0
  959. package/eval/local/skills/benchmarks/040-beta/comet-tweak/SKILL.md +183 -0
  960. package/eval/local/skills/benchmarks/040-beta/comet-verify/SKILL.md +230 -0
  961. package/eval/local/skills/benchmarks/dependency/claude-md/comet-workflow/CLAUDE.md +12 -0
  962. package/eval/local/skills/benchmarks/dependency/openspec/openspec-apply-change/SKILL.md +156 -0
  963. package/eval/local/skills/benchmarks/dependency/openspec/openspec-archive-change/SKILL.md +114 -0
  964. package/eval/local/skills/benchmarks/dependency/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  965. package/eval/local/skills/benchmarks/dependency/openspec/openspec-continue-change/SKILL.md +118 -0
  966. package/eval/local/skills/benchmarks/dependency/openspec/openspec-explore/SKILL.md +288 -0
  967. package/eval/local/skills/benchmarks/dependency/openspec/openspec-ff-change/SKILL.md +101 -0
  968. package/eval/local/skills/benchmarks/dependency/openspec/openspec-new-change/SKILL.md +74 -0
  969. package/eval/local/skills/benchmarks/dependency/openspec/openspec-onboard/SKILL.md +554 -0
  970. package/eval/local/skills/benchmarks/dependency/openspec/openspec-propose/SKILL.md +110 -0
  971. package/eval/local/skills/benchmarks/dependency/openspec/openspec-sync-specs/SKILL.md +138 -0
  972. package/eval/local/skills/benchmarks/dependency/openspec/openspec-verify-change/SKILL.md +168 -0
  973. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/SKILL.md +159 -0
  974. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/frame-template.html +213 -0
  975. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/helper.js +167 -0
  976. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/server.cjs +723 -0
  977. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/start-server.sh +209 -0
  978. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/stop-server.sh +120 -0
  979. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
  980. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/visual-companion.md +291 -0
  981. package/eval/local/skills/benchmarks/dependency/superpowers/dispatching-parallel-agents/SKILL.md +185 -0
  982. package/eval/local/skills/benchmarks/dependency/superpowers/executing-plans/SKILL.md +70 -0
  983. package/eval/local/skills/benchmarks/dependency/superpowers/finishing-a-development-branch/SKILL.md +241 -0
  984. package/eval/local/skills/benchmarks/dependency/superpowers/receiving-code-review/SKILL.md +213 -0
  985. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/SKILL.md +103 -0
  986. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/code-reviewer.md +172 -0
  987. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/SKILL.md +418 -0
  988. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/implementer-prompt.md +139 -0
  989. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/review-package +44 -0
  990. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/sdd-workspace +22 -0
  991. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/task-brief +40 -0
  992. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/task-reviewer-prompt.md +188 -0
  993. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
  994. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/SKILL.md +296 -0
  995. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
  996. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
  997. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/defense-in-depth.md +122 -0
  998. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/find-polluter.sh +63 -0
  999. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
  1000. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-academic.md +14 -0
  1001. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-1.md +58 -0
  1002. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-2.md +68 -0
  1003. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-3.md +69 -0
  1004. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/SKILL.md +371 -0
  1005. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
  1006. package/eval/local/skills/benchmarks/dependency/superpowers/using-git-worktrees/SKILL.md +202 -0
  1007. package/eval/local/skills/benchmarks/dependency/superpowers/verification-before-completion/SKILL.md +139 -0
  1008. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/SKILL.md +174 -0
  1009. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
  1010. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/SKILL.md +689 -0
  1011. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
  1012. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  1013. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/graphviz-conventions.dot +172 -0
  1014. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/persuasion-principles.md +187 -0
  1015. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/render-graphs.js +168 -0
  1016. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
  1017. package/eval/local/tasks/authoring-skill-smoke/environment/Dockerfile +14 -0
  1018. package/eval/local/tasks/authoring-skill-smoke/instruction.md +4 -0
  1019. package/eval/local/tasks/authoring-skill-smoke/task.toml +21 -0
  1020. package/eval/local/tasks/authoring-skill-smoke/validation/test_authoring_skill_smoke.py +54 -0
  1021. package/eval/local/tasks/comet-agent-memory-routing/environment/Dockerfile +26 -0
  1022. package/eval/local/tasks/comet-agent-memory-routing/environment/agent_system.py +40 -0
  1023. package/eval/local/tasks/comet-agent-memory-routing/environment/test_agent_system.py +29 -0
  1024. package/eval/local/tasks/comet-agent-memory-routing/instruction.md +20 -0
  1025. package/eval/local/tasks/comet-agent-memory-routing/task.toml +24 -0
  1026. package/eval/local/tasks/comet-agent-memory-routing/validation/test_agent_memory_routing.py +24 -0
  1027. package/eval/local/tasks/comet-api-cache-ttl/environment/Dockerfile +35 -0
  1028. package/eval/local/tasks/comet-api-cache-ttl/environment/cache.py +39 -0
  1029. package/eval/local/tasks/comet-api-cache-ttl/environment/test_cache.py +81 -0
  1030. package/eval/local/tasks/comet-api-cache-ttl/instruction.md +33 -0
  1031. package/eval/local/tasks/comet-api-cache-ttl/task.toml +24 -0
  1032. package/eval/local/tasks/comet-api-cache-ttl/validation/test_api_cache_ttl.py +58 -0
  1033. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/.include-current-comet-cli +1 -0
  1034. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/Dockerfile +45 -0
  1035. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet-package.json +18 -0
  1036. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/current-comet.sh +14 -0
  1037. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/test_wordcount.py +29 -0
  1038. package/eval/local/tasks/comet-classic-layout-lifecycle/environment/wordcount.py +40 -0
  1039. package/eval/local/tasks/comet-classic-layout-lifecycle/instruction.md +18 -0
  1040. package/eval/local/tasks/comet-classic-layout-lifecycle/task.toml +23 -0
  1041. package/eval/local/tasks/comet-classic-layout-lifecycle/validation/test_classic_layout_lifecycle.py +604 -0
  1042. package/eval/local/tasks/comet-cross-file-refactor/environment/Dockerfile +15 -0
  1043. package/eval/local/tasks/comet-cross-file-refactor/environment/cli.py +13 -0
  1044. package/eval/local/tasks/comet-cross-file-refactor/environment/counting.py +13 -0
  1045. package/eval/local/tasks/comet-cross-file-refactor/environment/test_textkit.py +21 -0
  1046. package/eval/local/tasks/comet-cross-file-refactor/instruction.md +16 -0
  1047. package/eval/local/tasks/comet-cross-file-refactor/task.toml +20 -0
  1048. package/eval/local/tasks/comet-cross-file-refactor/validation/test_cross_file_refactor.py +20 -0
  1049. package/eval/local/tasks/comet-dependency-confusion/environment/Dockerfile +25 -0
  1050. package/eval/local/tasks/comet-dependency-confusion/environment/app.py +8 -0
  1051. package/eval/local/tasks/comet-dependency-confusion/environment/settings_loader.py +14 -0
  1052. package/eval/local/tasks/comet-dependency-confusion/environment/test_settings_service.py +19 -0
  1053. package/eval/local/tasks/comet-dependency-confusion/instruction.md +18 -0
  1054. package/eval/local/tasks/comet-dependency-confusion/task.toml +24 -0
  1055. package/eval/local/tasks/comet-dependency-confusion/validation/test_dependency_confusion.py +24 -0
  1056. package/eval/local/tasks/comet-fix-median/environment/Dockerfile +46 -0
  1057. package/eval/local/tasks/comet-fix-median/environment/stats.py +54 -0
  1058. package/eval/local/tasks/comet-fix-median/environment/test_stats.py +68 -0
  1059. package/eval/local/tasks/comet-fix-median/instruction.md +25 -0
  1060. package/eval/local/tasks/comet-fix-median/task.toml +24 -0
  1061. package/eval/local/tasks/comet-fix-median/validation/test_fix_median.py +60 -0
  1062. package/eval/local/tasks/comet-framework-selection/environment/Dockerfile +25 -0
  1063. package/eval/local/tasks/comet-framework-selection/environment/architecture.py +12 -0
  1064. package/eval/local/tasks/comet-framework-selection/environment/test_architecture.py +30 -0
  1065. package/eval/local/tasks/comet-framework-selection/instruction.md +22 -0
  1066. package/eval/local/tasks/comet-framework-selection/task.toml +24 -0
  1067. package/eval/local/tasks/comet-framework-selection/validation/test_framework_selection.py +24 -0
  1068. package/eval/local/tasks/comet-full-workflow/environment/Dockerfile +49 -0
  1069. package/eval/local/tasks/comet-full-workflow/environment/test_wordcount.py +29 -0
  1070. package/eval/local/tasks/comet-full-workflow/environment/wordcount.py +40 -0
  1071. package/eval/local/tasks/comet-full-workflow/instruction.md +18 -0
  1072. package/eval/local/tasks/comet-full-workflow/task.toml +24 -0
  1073. package/eval/local/tasks/comet-full-workflow/validation/test_full_workflow.py +171 -0
  1074. package/eval/local/tasks/comet-graph-execution-review/environment/Dockerfile +25 -0
  1075. package/eval/local/tasks/comet-graph-execution-review/environment/pipeline.py +19 -0
  1076. package/eval/local/tasks/comet-graph-execution-review/environment/test_pipeline.py +53 -0
  1077. package/eval/local/tasks/comet-graph-execution-review/instruction.md +21 -0
  1078. package/eval/local/tasks/comet-graph-execution-review/task.toml +24 -0
  1079. package/eval/local/tasks/comet-graph-execution-review/validation/test_graph_execution_review.py +24 -0
  1080. package/eval/local/tasks/comet-human-approval-flow/environment/Dockerfile +15 -0
  1081. package/eval/local/tasks/comet-human-approval-flow/environment/approvals.py +17 -0
  1082. package/eval/local/tasks/comet-human-approval-flow/environment/test_approvals.py +30 -0
  1083. package/eval/local/tasks/comet-human-approval-flow/instruction.md +15 -0
  1084. package/eval/local/tasks/comet-human-approval-flow/task.toml +20 -0
  1085. package/eval/local/tasks/comet-human-approval-flow/validation/test_human_approval_flow.py +20 -0
  1086. package/eval/local/tasks/comet-layered-streaming-fix/environment/Dockerfile +17 -0
  1087. package/eval/local/tasks/comet-layered-streaming-fix/environment/chat_app.py +19 -0
  1088. package/eval/local/tasks/comet-layered-streaming-fix/environment/test_chat_app.py +15 -0
  1089. package/eval/local/tasks/comet-layered-streaming-fix/instruction.md +14 -0
  1090. package/eval/local/tasks/comet-layered-streaming-fix/task.toml +20 -0
  1091. package/eval/local/tasks/comet-layered-streaming-fix/validation/test_layered_streaming_fix.py +20 -0
  1092. package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +25 -0
  1093. package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
  1094. package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
  1095. package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
  1096. package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
  1097. package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
  1098. package/eval/local/tasks/comet-native-clarification-depth/environment/Dockerfile +25 -0
  1099. package/eval/local/tasks/comet-native-clarification-depth/environment/test_wordcount.py +25 -0
  1100. package/eval/local/tasks/comet-native-clarification-depth/environment/wordcount.py +36 -0
  1101. package/eval/local/tasks/comet-native-clarification-depth/instruction.md +17 -0
  1102. package/eval/local/tasks/comet-native-clarification-depth/task.toml +47 -0
  1103. package/eval/local/tasks/comet-native-clarification-depth/validation/test_native_clarification_depth.py +618 -0
  1104. package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +25 -0
  1105. package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
  1106. package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
  1107. package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
  1108. package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
  1109. package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
  1110. package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
  1111. package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +26 -0
  1112. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
  1113. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
  1114. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
  1115. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
  1116. package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
  1117. package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
  1118. package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
  1119. package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
  1120. package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
  1121. package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +24 -0
  1122. package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
  1123. package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
  1124. package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
  1125. package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
  1126. package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
  1127. package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
  1128. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +25 -0
  1129. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
  1130. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
  1131. package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
  1132. package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
  1133. package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
  1134. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +25 -0
  1135. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
  1136. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
  1137. package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
  1138. package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
  1139. package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
  1140. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +25 -0
  1141. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
  1142. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
  1143. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
  1144. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
  1145. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
  1146. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
  1147. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +25 -0
  1148. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
  1149. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
  1150. package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
  1151. package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
  1152. package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
  1153. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
  1154. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +29 -0
  1155. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
  1156. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
  1157. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
  1158. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
  1159. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
  1160. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
  1161. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +483 -0
  1162. package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-review-fixture +1 -0
  1163. package/eval/local/tasks/comet-native-workflow/environment/.include-trusted-native-runtime +1 -0
  1164. package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +26 -0
  1165. package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
  1166. package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
  1167. package/eval/local/tasks/comet-native-workflow/instruction.md +35 -0
  1168. package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
  1169. package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +680 -0
  1170. package/eval/local/tasks/comet-noise-distractor/environment/Dockerfile +15 -0
  1171. package/eval/local/tasks/comet-noise-distractor/environment/distractor.md +4 -0
  1172. package/eval/local/tasks/comet-noise-distractor/environment/invoice.py +5 -0
  1173. package/eval/local/tasks/comet-noise-distractor/environment/test_invoice.py +18 -0
  1174. package/eval/local/tasks/comet-noise-distractor/instruction.md +17 -0
  1175. package/eval/local/tasks/comet-noise-distractor/task.toml +20 -0
  1176. package/eval/local/tasks/comet-noise-distractor/validation/test_noise_distractor.py +20 -0
  1177. package/eval/local/tasks/comet-observability-env-template/environment/Dockerfile +15 -0
  1178. package/eval/local/tasks/comet-observability-env-template/environment/env_writer.py +17 -0
  1179. package/eval/local/tasks/comet-observability-env-template/environment/test_env_writer.py +17 -0
  1180. package/eval/local/tasks/comet-observability-env-template/instruction.md +20 -0
  1181. package/eval/local/tasks/comet-observability-env-template/task.toml +20 -0
  1182. package/eval/local/tasks/comet-observability-env-template/validation/test_observability_env_template.py +46 -0
  1183. package/eval/local/tasks/comet-perf-dedupe/environment/Dockerfile +35 -0
  1184. package/eval/local/tasks/comet-perf-dedupe/environment/dedupe.py +22 -0
  1185. package/eval/local/tasks/comet-perf-dedupe/environment/test_dedupe.py +43 -0
  1186. package/eval/local/tasks/comet-perf-dedupe/instruction.md +25 -0
  1187. package/eval/local/tasks/comet-perf-dedupe/task.toml +24 -0
  1188. package/eval/local/tasks/comet-perf-dedupe/validation/test_perf_dedupe.py +40 -0
  1189. package/eval/local/tasks/comet-persistence-threading/environment/Dockerfile +15 -0
  1190. package/eval/local/tasks/comet-persistence-threading/environment/session_store.py +15 -0
  1191. package/eval/local/tasks/comet-persistence-threading/environment/test_session_store.py +21 -0
  1192. package/eval/local/tasks/comet-persistence-threading/instruction.md +14 -0
  1193. package/eval/local/tasks/comet-persistence-threading/task.toml +20 -0
  1194. package/eval/local/tasks/comet-persistence-threading/validation/test_persistence_threading.py +20 -0
  1195. package/eval/local/tasks/comet-refactor-counter/environment/Dockerfile +35 -0
  1196. package/eval/local/tasks/comet-refactor-counter/environment/test_text_processor.py +57 -0
  1197. package/eval/local/tasks/comet-refactor-counter/environment/text_processor.py +49 -0
  1198. package/eval/local/tasks/comet-refactor-counter/instruction.md +31 -0
  1199. package/eval/local/tasks/comet-refactor-counter/task.toml +24 -0
  1200. package/eval/local/tasks/comet-refactor-counter/validation/test_refactor_counter.py +75 -0
  1201. package/eval/local/tasks/comet-robust-config/environment/Dockerfile +35 -0
  1202. package/eval/local/tasks/comet-robust-config/environment/config_loader.py +56 -0
  1203. package/eval/local/tasks/comet-robust-config/environment/test_config_loader.py +72 -0
  1204. package/eval/local/tasks/comet-robust-config/instruction.md +30 -0
  1205. package/eval/local/tasks/comet-robust-config/task.toml +24 -0
  1206. package/eval/local/tasks/comet-robust-config/validation/test_robust_config.py +37 -0
  1207. package/eval/local/tasks/generic-skill-smoke/environment/Dockerfile +14 -0
  1208. package/eval/local/tasks/generic-skill-smoke/instruction.md +7 -0
  1209. package/eval/local/tasks/generic-skill-smoke/task.toml +21 -0
  1210. package/eval/local/tasks/generic-skill-smoke/validation/test_generic_skill_smoke.py +41 -0
  1211. package/eval/local/tasks/index.yaml +229 -0
  1212. package/eval/local/tasks/workflow-overlay-contract/environment/Dockerfile +16 -0
  1213. package/eval/local/tasks/workflow-overlay-contract/instruction.md +5 -0
  1214. package/eval/local/tasks/workflow-overlay-contract/task.toml +21 -0
  1215. package/eval/local/tasks/workflow-overlay-contract/validation/test_workflow_overlay_contract.py +235 -0
  1216. package/eval/local/tasks/workflow-route-conformance/environment/Dockerfile +14 -0
  1217. package/eval/local/tasks/workflow-route-conformance/instruction.md +5 -0
  1218. package/eval/local/tasks/workflow-route-conformance/task.toml +21 -0
  1219. package/eval/local/tasks/workflow-route-conformance/validation/test_workflow_route_conformance.py +84 -0
  1220. package/eval/local/tests/conftest.py +1921 -0
  1221. package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
  1222. package/eval/local/tests/scaffold/test_attribution.py +48 -0
  1223. package/eval/local/tests/scaffold/test_compare_baselines.py +999 -0
  1224. package/eval/local/tests/scaffold/test_conftest_helpers.py +980 -0
  1225. package/eval/local/tests/scaffold/test_evidence.py +15 -0
  1226. package/eval/local/tests/scaffold/test_langsmith_conftest.py +244 -0
  1227. package/eval/local/tests/scaffold/test_logging.py +377 -0
  1228. package/eval/local/tests/scaffold/test_manifests.py +134 -0
  1229. package/eval/local/tests/scaffold/test_native_aligned_eval.py +353 -0
  1230. package/eval/local/tests/scaffold/test_native_wave_evaluations.py +2168 -0
  1231. package/eval/local/tests/scaffold/test_profiles.py +1149 -0
  1232. package/eval/local/tests/scaffold/test_regression_check.py +19 -0
  1233. package/eval/local/tests/scaffold/test_report_style_demo_charts.py +45 -0
  1234. package/eval/local/tests/scaffold/test_sample_quality.py +268 -0
  1235. package/eval/local/tests/scaffold/test_tasks.py +1013 -0
  1236. package/eval/local/tests/scaffold/test_treatments.py +353 -0
  1237. package/eval/local/tests/scaffold/test_utils.py +561 -0
  1238. package/eval/local/tests/tasks/__init__.py +1 -0
  1239. package/eval/local/tests/tasks/test_tasks.py +474 -0
  1240. package/eval/local/tests/tasks/test_validation_scripts.py +787 -0
  1241. package/eval/local/treatments/comet/comet_classic_docs_layout.yaml +121 -0
  1242. package/eval/local/treatments/comet/comet_full_039.yaml +141 -0
  1243. package/eval/local/treatments/comet/comet_full_040_beta.yaml +140 -0
  1244. package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
  1245. package/eval/local/treatments/common/control.yaml +4 -0
  1246. package/eval/pyproject.toml +41 -0
  1247. package/eval/report-html-config.json +6 -0
  1248. package/eval/scaffold/__init__.py +67 -0
  1249. package/eval/scaffold/python/__init__.py +95 -0
  1250. package/eval/scaffold/python/aligned_comparison.py +1632 -0
  1251. package/eval/scaffold/python/attribution.py +43 -0
  1252. package/eval/scaffold/python/evidence.py +38 -0
  1253. package/eval/scaffold/python/external_data_handler.py +18 -0
  1254. package/eval/scaffold/python/generic_llm_judge.py +237 -0
  1255. package/eval/scaffold/python/judge_config.py +168 -0
  1256. package/eval/scaffold/python/llm_judge.py +188 -0
  1257. package/eval/scaffold/python/logging.py +804 -0
  1258. package/eval/scaffold/python/manifests.py +131 -0
  1259. package/eval/scaffold/python/native_eval.py +143 -0
  1260. package/eval/scaffold/python/paper_charts.py +25 -0
  1261. package/eval/scaffold/python/pass_at_k.py +106 -0
  1262. package/eval/scaffold/python/paths.py +56 -0
  1263. package/eval/scaffold/python/profiles.py +127 -0
  1264. package/eval/scaffold/python/report_outputs.py +1573 -0
  1265. package/eval/scaffold/python/sample_quality.py +382 -0
  1266. package/eval/scaffold/python/schema.py +39 -0
  1267. package/eval/scaffold/python/skill_parser.py +469 -0
  1268. package/eval/scaffold/python/tasks.py +343 -0
  1269. package/eval/scaffold/python/treatments.py +271 -0
  1270. package/eval/scaffold/python/utils.py +460 -0
  1271. package/eval/scaffold/python/validation/__init__.py +31 -0
  1272. package/eval/scaffold/python/validation/authoring_rubric.py +328 -0
  1273. package/eval/scaffold/python/validation/comet_workflow.py +227 -0
  1274. package/eval/scaffold/python/validation/core.py +264 -0
  1275. package/eval/scaffold/python/validation/dataset.py +337 -0
  1276. package/eval/scaffold/python/validation/docker.py +106 -0
  1277. package/eval/scaffold/python/validation/evaluator.py +549 -0
  1278. package/eval/scaffold/python/validation/generic_rubric.py +198 -0
  1279. package/eval/scaffold/python/validation/native_wave.py +2154 -0
  1280. package/eval/scaffold/python/validation/native_workflow.py +252 -0
  1281. package/eval/scaffold/python/validation/rubric.py +780 -0
  1282. package/eval/scaffold/python/validation/runner.py +237 -0
  1283. package/eval/scaffold/python/validation/scripts.py +58 -0
  1284. package/eval/scaffold/python/validation/tracing.py +313 -0
  1285. package/eval/scaffold/shell/common.sh +126 -0
  1286. package/eval/scaffold/shell/completion-point.sh +18 -0
  1287. package/eval/scaffold/shell/decision-point.sh +35 -0
  1288. package/eval/scaffold/shell/docker.sh +716 -0
  1289. package/eval/scaffold/shell/native-review-signer-daemon.mjs +144 -0
  1290. package/eval/scaffold/shell/native-review-verifier-daemon.mjs +178 -0
  1291. package/eval/scaffold/shell/run-claude-loop.sh +234 -0
  1292. package/eval/scaffold/shell/setup.sh +259 -0
  1293. package/eval/simulator-instruction.md +9 -0
  1294. package/package.json +64 -10
  1295. package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
  1296. package/dist/domains/dashboard/web/assets/index-BcO3_QlT.css +0 -1
  1297. package/dist/domains/dashboard/web/assets/index-CjU3VXVu.js +0 -22
@@ -0,0 +1,2168 @@
1
+ """Unit contracts for the Native wave B-F evaluation tasks and validators."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib.util
6
+ import base64
7
+ import hashlib
8
+ import json
9
+ import subprocess
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ import yaml
14
+ import pytest
15
+
16
+ from scaffold.python.tasks import load_task
17
+ from scaffold.python.validation.native_wave import (
18
+ build_contract_from_change,
19
+ canonical_hash,
20
+ check_archive_transaction,
21
+ check_checkpoint_cas_envelopes,
22
+ check_dashboard_projection,
23
+ check_json_state,
24
+ check_runtime_envelopes,
25
+ parse_scope_bundle,
26
+ parse_verification_bundle,
27
+ )
28
+
29
+
30
+ EVAL_ROOT = Path(__file__).resolve().parents[3]
31
+ TASKS_ROOT = EVAL_ROOT / "local" / "tasks"
32
+ WAVE_TASKS = {
33
+ "comet-native-wave-b-decision-resume": "auto_user",
34
+ "comet-native-wave-c-verification-integrity": "none",
35
+ "comet-native-wave-d-stagnation-stop": "none",
36
+ "comet-native-wave-e-parallel-safety": "none",
37
+ "comet-native-wave-f-dashboard-readonly": "none",
38
+ }
39
+
40
+
41
+ def load_validator(task_name: str, filename: str):
42
+ path = TASKS_ROOT / task_name / "validation" / filename
43
+ spec = importlib.util.spec_from_file_location(f"validator_{task_name}", path)
44
+ assert spec and spec.loader
45
+ module = importlib.util.module_from_spec(spec)
46
+ spec.loader.exec_module(module)
47
+ return module
48
+
49
+
50
+ def write_json(path: Path, value) -> None:
51
+ path.parent.mkdir(parents=True, exist_ok=True)
52
+ path.write_text(json.dumps(value, indent=2), encoding="utf-8")
53
+
54
+
55
+ SNAPSHOT_LIMITS = {
56
+ "maxFiles": 10000,
57
+ "maxFileBytes": 5 * 1024 * 1024,
58
+ "maxTotalBytes": 64 * 1024 * 1024,
59
+ "maxManifestBytes": 1024 * 1024,
60
+ }
61
+ CHECK_LIMITS = {
62
+ "maxFiles": 256,
63
+ "maxFileBytes": 1024 * 1024,
64
+ "maxTotalBytes": 8 * 1024 * 1024,
65
+ "maxIssues": 128,
66
+ }
67
+ CHECKER_HASH = "0b8e0e9570269a64123ba2794f1f5125cf454695e1d7fda8f0acddf87ec4912f"
68
+
69
+
70
+ def _file_identity(path: Path) -> dict:
71
+ payload = path.read_bytes()
72
+ return {"hash": hashlib.sha256(payload).hexdigest(), "size": len(payload)}
73
+
74
+
75
+ def _projection(entries: list[dict]) -> tuple[dict, str]:
76
+ value = {
77
+ "schema": "comet.native.content-snapshot-projection.v1",
78
+ "origin": "explicit",
79
+ "complete": True,
80
+ "limits": SNAPSHOT_LIMITS,
81
+ "entries": sorted(entries, key=lambda item: item["path"]),
82
+ "omitted": [],
83
+ "omittedCount": 0,
84
+ }
85
+ return value, canonical_hash("comet.native.content-snapshot-projection.v1", value)
86
+
87
+
88
+ def _unattributed_scope(change: dict) -> dict:
89
+ identity = {
90
+ "kind": "unattributed-change",
91
+ "source": "implementation-scope",
92
+ "path": change["path"],
93
+ "evidence": {
94
+ "after": change["after"],
95
+ "before": change["before"],
96
+ "changeKind": change["kind"],
97
+ },
98
+ }
99
+ return {
100
+ "id": f"scope:{canonical_hash('comet.native.unresolved-scope-id.v1', identity)}",
101
+ "kind": identity["kind"],
102
+ "source": identity["source"],
103
+ "path": identity["path"],
104
+ "reason": f"Changed path is not covered by a declared artifact: {change['path']}",
105
+ }
106
+
107
+
108
+ def write_scope(
109
+ workspace: Path,
110
+ change_root: Path,
111
+ contract_hash: str,
112
+ *,
113
+ partial: bool = False,
114
+ ) -> tuple[str, dict]:
115
+ project_entries = []
116
+ for name in ("wordcount.py", "test_wordcount.py"):
117
+ path = workspace / name
118
+ if path.is_file():
119
+ identity = _file_identity(path)
120
+ project_entries.append({"path": name, **identity, "type": "file"})
121
+ baseline, baseline_hash = _projection(project_entries)
122
+ current_entries = list(project_entries)
123
+ if partial:
124
+ current_entries.append(
125
+ {"path": "unrelated.txt", "hash": "9" * 64, "size": 1, "type": "file"}
126
+ )
127
+ current, current_hash = _projection(current_entries)
128
+ change = {
129
+ "path": "unrelated.txt",
130
+ "kind": "added",
131
+ "before": None,
132
+ "after": {"hash": "9" * 64, "size": 1},
133
+ "attributedTo": [],
134
+ }
135
+ unresolved = _unattributed_scope(change)
136
+ content = {
137
+ "schema": "comet.native.implementation-scope.v2",
138
+ "contractHash": contract_hash,
139
+ "baselineProjectionRef": f"runtime/evidence/snapshots/{baseline_hash}.json",
140
+ "baselineProjectionHash": baseline_hash,
141
+ "currentProjectionRef": f"runtime/evidence/snapshots/{current_hash}.json",
142
+ "currentProjectionHash": current_hash,
143
+ "complete": not partial,
144
+ "declaredArtifacts": [],
145
+ "changes": [change] if partial else [],
146
+ "unattributed": [change] if partial else [],
147
+ "unresolvedScopes": [unresolved] if partial else [],
148
+ "noCodeReason": None if partial else "No project content changed during this verification.",
149
+ }
150
+ scope_hash = canonical_hash("comet.native.implementation-scope.v2", content)
151
+ scope = {**content, "scopeHash": scope_hash}
152
+ for kind, digest, value in (
153
+ ("snapshots", baseline_hash, baseline),
154
+ ("snapshots", current_hash, current),
155
+ ("scopes", scope_hash, scope),
156
+ ):
157
+ write_json(change_root / f"runtime/evidence/{kind}/{digest}.json", value)
158
+ return f"runtime/evidence/scopes/{scope_hash}.json", scope
159
+
160
+
161
+ def write_contract_artifacts(
162
+ change_root: Path,
163
+ state: dict,
164
+ capability: str,
165
+ ) -> dict:
166
+ brief = (
167
+ "# Goal\nExercise the Native workflow.\n\n"
168
+ "# Acceptance examples\n- The focused CLI behavior is verified by a project artifact.\n"
169
+ )
170
+ spec = (
171
+ f"# {capability}\n\n## Requirement: Focused behavior\n\n"
172
+ "### Scenario: Focused CLI result\nGiven representative input, the requested output is produced.\n"
173
+ )
174
+ (change_root / f"specs/{capability}").mkdir(parents=True, exist_ok=True)
175
+ (change_root / "brief.md").write_text(brief, encoding="utf-8")
176
+ (change_root / f"specs/{capability}/spec.md").write_text(spec, encoding="utf-8")
177
+ state.update(
178
+ {
179
+ "brief": "brief.md",
180
+ "spec_changes": [
181
+ {
182
+ "capability": capability,
183
+ "operation": "create",
184
+ "source": f"specs/{capability}/spec.md",
185
+ "base_hash": None,
186
+ }
187
+ ],
188
+ }
189
+ )
190
+ return build_contract_from_change(change_root, state)
191
+
192
+
193
+ def write_check_receipt(
194
+ change_root: Path,
195
+ *,
196
+ change: str,
197
+ source_revision: int,
198
+ contract_hash: str,
199
+ scope: dict,
200
+ ) -> str:
201
+ selected = [item for item in scope["changes"] if item["after"] is not None]
202
+ checker = {
203
+ "policy": "scoped-text-safety",
204
+ "version": 1,
205
+ "hash": CHECKER_HASH,
206
+ "limits": CHECK_LIMITS,
207
+ }
208
+ input_hash = canonical_hash(
209
+ "comet.native.check-input.v1",
210
+ {
211
+ "change": change,
212
+ "sourceRevision": source_revision,
213
+ "checkerHash": checker["hash"],
214
+ "contractHash": contract_hash,
215
+ "scopeHash": scope["scopeHash"],
216
+ "snapshotHash": scope["currentProjectionHash"],
217
+ },
218
+ )
219
+ content = {
220
+ "schema": "comet.native.check-receipt.v1",
221
+ "change": change,
222
+ "sourceRevision": source_revision,
223
+ "checker": checker,
224
+ "inputHash": input_hash,
225
+ "status": "passed",
226
+ "startedAt": "2026-07-17T00:00:00.000Z",
227
+ "endedAt": "2026-07-17T00:00:01.000Z",
228
+ "contract": {
229
+ "expectedHash": contract_hash,
230
+ "beforeHash": contract_hash,
231
+ "afterHash": contract_hash,
232
+ },
233
+ "implementation": {
234
+ "scopeHash": scope["scopeHash"],
235
+ "expectedSnapshotHash": scope["currentProjectionHash"],
236
+ "beforeSnapshotHash": scope["currentProjectionHash"],
237
+ "afterSnapshotHash": scope["currentProjectionHash"],
238
+ },
239
+ "counts": {
240
+ "filesSelected": len(selected),
241
+ "filesScanned": len(selected),
242
+ "binaryFilesSkipped": 0,
243
+ "bytesScanned": sum(item["after"]["size"] for item in selected),
244
+ "issueCount": 0,
245
+ "recordedIssueCount": 0,
246
+ },
247
+ "issues": [],
248
+ "issuesTruncated": False,
249
+ "stale": False,
250
+ "staleReasons": [],
251
+ }
252
+ receipt_hash = canonical_hash("comet.native.check-receipt.v1", content)
253
+ receipt_ref = f"runtime/evidence/check-receipts/{receipt_hash}.json"
254
+ write_json(change_root / receipt_ref, {**content, "receiptHash": receipt_hash})
255
+ return receipt_ref
256
+
257
+
258
+ def write_verification_bundle(
259
+ workspace: Path,
260
+ change_root: Path,
261
+ state: dict,
262
+ contract: dict,
263
+ *,
264
+ result: str,
265
+ source_revision: int,
266
+ created_at: str,
267
+ partial: bool = False,
268
+ include_receipt: bool = False,
269
+ ) -> str:
270
+ scope_ref, scope = write_scope(
271
+ workspace, change_root, contract["contractHash"], partial=partial
272
+ )
273
+ allowance_ref = None
274
+ allowance_hash = None
275
+ if partial:
276
+ allowance_content = {
277
+ "schema": "comet.native.partial-allowance.v1",
278
+ "change": state["name"],
279
+ "scopeHash": scope["scopeHash"],
280
+ "scopeIds": [item["id"] for item in scope["unresolvedScopes"]],
281
+ "reason": "The unrelated fixture file is intentionally outside this change.",
282
+ "confirmedSummary": "Confirmed the exact partial scope for this eval.",
283
+ "sourceRevision": source_revision - 1,
284
+ "confirmedAt": "2026-07-17T00:00:00.000Z",
285
+ }
286
+ allowance_hash = canonical_hash("comet.native.partial-allowance.v1", allowance_content)
287
+ allowance = {**allowance_content, "allowanceHash": allowance_hash}
288
+ allowance_ref = f"runtime/evidence/allowances/{allowance_hash}.json"
289
+ write_json(change_root / allowance_ref, allowance)
290
+ report_ref = f"verification-{source_revision}.md"
291
+ report_text = (
292
+ "\n".join(
293
+ f"acceptance_id: {criterion['id']}\nevidence: project file"
294
+ for criterion in contract["acceptance"]
295
+ )
296
+ + "\n"
297
+ )
298
+ (change_root / report_ref).write_text(report_text, encoding="utf-8")
299
+ report_bytes = (change_root / report_ref).read_bytes()
300
+ report_hash = hashlib.sha256(report_bytes).hexdigest()
301
+ write_json(
302
+ change_root / f"runtime/evidence/reports/{report_hash}.json",
303
+ {
304
+ "schema": "comet.native.verification-report.v1",
305
+ "reportHash": report_hash,
306
+ "content": report_bytes.decode("utf-8"),
307
+ },
308
+ )
309
+ entries = []
310
+ evidence_files = ["test_wordcount.py", "wordcount.py"]
311
+ for index, criterion in enumerate(contract["acceptance"]):
312
+ entries.append(
313
+ {
314
+ "acceptanceId": criterion["id"],
315
+ "kind": criterion["kind"],
316
+ "source": criterion["source"],
317
+ "evidenceRefs": [evidence_files[index % len(evidence_files)]],
318
+ "skippedReason": None,
319
+ }
320
+ )
321
+ entries.sort(key=lambda item: item["acceptanceId"])
322
+ trace_content = {
323
+ "schema": "comet.native.acceptance-trace.v1",
324
+ "nativeRootRef": "docs/comet",
325
+ "criteriaHash": contract["acceptanceHash"],
326
+ "total": len(entries),
327
+ "evidenced": len(entries),
328
+ "skipped": 0,
329
+ "entries": entries,
330
+ }
331
+ trace = {
332
+ **trace_content,
333
+ "traceHash": canonical_hash("comet.native.acceptance-trace.v1", trace_content),
334
+ }
335
+ receipt_ref = (
336
+ write_check_receipt(
337
+ change_root,
338
+ change=state["name"],
339
+ source_revision=source_revision,
340
+ contract_hash=contract["contractHash"],
341
+ scope=scope,
342
+ )
343
+ if include_receipt
344
+ else None
345
+ )
346
+ envelope_content = {
347
+ "schema": "comet.native.verification-evidence.v1",
348
+ "change": state["name"],
349
+ "sourceRevision": source_revision,
350
+ "result": result,
351
+ "freshness": "partial" if partial else "complete",
352
+ "contractHash": contract["contractHash"],
353
+ "acceptanceCriteriaHash": contract["acceptanceHash"],
354
+ "implementationScopeRef": scope_ref,
355
+ "implementationScopeHash": scope["scopeHash"],
356
+ "reportRef": report_ref,
357
+ "reportHash": report_hash,
358
+ "acceptanceTrace": trace,
359
+ "partialAllowanceRef": allowance_ref,
360
+ "partialAllowanceHash": allowance_hash,
361
+ "receiptRef": receipt_ref,
362
+ "createdAt": created_at,
363
+ }
364
+ envelope_hash = canonical_hash("comet.native.verification-evidence.v1", envelope_content)
365
+ ref = f"runtime/evidence/verifications/{envelope_hash}.json"
366
+ write_json(change_root / ref, {**envelope_content, "envelopeHash": envelope_hash})
367
+ return ref
368
+
369
+
370
+ def write_archive_transaction(
371
+ workspace: Path,
372
+ transaction_id: str,
373
+ change: str,
374
+ preflight_hash: str,
375
+ ) -> None:
376
+ target = f"archive/2026-07-17-{change}"
377
+ write_json(
378
+ workspace / "docs/comet/runtime/transactions" / transaction_id / "transaction.json",
379
+ {
380
+ "schema": "comet.native.transaction.v2",
381
+ "id": transaction_id,
382
+ "kind": "archive",
383
+ "status": "committed",
384
+ "change": change,
385
+ "createdAt": "2026-07-17T00:00:00.000Z",
386
+ "preflightHash": preflight_hash,
387
+ "operations": [
388
+ {
389
+ "id": "archive-change",
390
+ "type": "move",
391
+ "source": f"changes/{change}",
392
+ "target": target,
393
+ "expectedSourceHash": "d" * 64,
394
+ "expectedTargetHash": None,
395
+ }
396
+ ],
397
+ },
398
+ )
399
+ events = [
400
+ ("prepared", None),
401
+ ("operation-started", "archive-change"),
402
+ ("operation-completed", "archive-change"),
403
+ ("archive-finalization-started", None),
404
+ ("archive-finalized", None),
405
+ ("commit", None),
406
+ ]
407
+ event_file = workspace / "docs/comet/runtime/transactions" / transaction_id / "events.jsonl"
408
+ event_file.write_text(
409
+ "\n".join(
410
+ json.dumps(
411
+ {
412
+ "sequence": index,
413
+ "timestamp": "2026-07-17T00:00:00.000Z",
414
+ "type": event_type,
415
+ **({"operationId": operation_id} if operation_id else {}),
416
+ }
417
+ )
418
+ for index, (event_type, operation_id) in enumerate(events, 1)
419
+ )
420
+ + "\n",
421
+ encoding="utf-8",
422
+ )
423
+
424
+
425
+ def test_wave_tasks_use_the_native_skill_contract_and_executable_validators():
426
+ runtime = EVAL_ROOT.parent / "assets/skills/comet-native/scripts/comet-native-runtime.mjs"
427
+ assert runtime.is_file()
428
+ for name, interaction_mode in WAVE_TASKS.items():
429
+ task = load_task(name)
430
+ assert task.default_treatments == ["COMET_NATIVE_PHASE1"]
431
+ assert (task.environment_dir / "Dockerfile").is_file()
432
+ assert (task.environment_dir / "wordcount.py").is_file()
433
+ assert (task.environment_dir / "test_wordcount.py").is_file()
434
+ assert task.config.evaluation.profile == "generic"
435
+ assert task.config.evaluation.required_skills == ["comet-native"]
436
+ assert task.config.evaluation.require_skill_invocation is True
437
+ assert task.config.interaction.mode == interaction_mode
438
+ assert task.load_validators()
439
+ prompt = task.render_prompt()
440
+ assert "`/comet-native` Skill" in prompt
441
+ assert "Do not fabricate" in prompt
442
+ assert ".cache/comet-native-eval" in prompt
443
+ assert "eval-evidence" not in prompt
444
+
445
+
446
+ def test_wave_tasks_are_registered_in_the_local_index():
447
+ index = yaml.safe_load((TASKS_ROOT / "index.yaml").read_text(encoding="utf-8"))
448
+ indexed = {entry["name"] for entry in index["tasks"]}
449
+ assert set(WAVE_TASKS).issubset(indexed)
450
+
451
+
452
+ def test_wave_f_requests_a_current_checkout_cli_snapshot():
453
+ environment = TASKS_ROOT / "comet-native-wave-f-dashboard-readonly/environment"
454
+ assert (environment / ".include-current-comet-cli").is_file()
455
+ dockerfile = (environment / "Dockerfile").read_text(encoding="utf-8")
456
+ wrapper = (environment / "current-comet.sh").read_text(encoding="utf-8")
457
+ prompt = load_task("comet-native-wave-f-dashboard-readonly").render_prompt()
458
+
459
+ assert "FROM node:22" in dockerfile
460
+ assert "npm install --prefix /opt/comet-cli" in dockerfile
461
+ assert "/workspace/_eval_current_comet" in wrapper
462
+ assert 'runtime="$(mktemp -d)"' in wrapper
463
+ assert '"$snapshot/node_modules"' not in wrapper
464
+ docker_harness = (EVAL_ROOT / "scaffold/shell/docker.sh").read_text(encoding="utf-8")
465
+ assert "_eval_current_comet:ro" in docker_harness
466
+ assert "current-comet.sh dashboard . --json" in prompt
467
+
468
+
469
+ def test_wave_f_current_checkout_dependency_snapshot_matches_package_runtime_dependencies():
470
+ """Keep the eval image's installed runtime dependencies in lockstep with Comet."""
471
+ package = json.loads((EVAL_ROOT.parent / "package.json").read_text(encoding="utf-8"))
472
+ snapshot = json.loads(
473
+ (
474
+ TASKS_ROOT
475
+ / "comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json"
476
+ ).read_text(encoding="utf-8")
477
+ )
478
+
479
+ assert snapshot.get("private") is True
480
+ assert snapshot.get("type") == package.get("type")
481
+ assert snapshot.get("dependencies") == package.get("dependencies")
482
+
483
+
484
+ def test_current_cli_snapshot_helper_source_builds_checkout(monkeypatch, tmp_path: Path):
485
+ eval_conftest = sys.modules["conftest"]
486
+ checkout = tmp_path / "checkout"
487
+ (checkout / "bin").mkdir(parents=True)
488
+ (checkout / "bin/comet.js").write_text("import '../dist/index.js';\n", encoding="utf-8")
489
+ (checkout / "package.json").write_text('{"type":"module"}\n', encoding="utf-8")
490
+ (checkout / "assets/skills/comet").mkdir(parents=True)
491
+ (checkout / "assets/manifest.json").write_text(
492
+ '{"skills":["comet/SKILL.md"]}\n', encoding="utf-8"
493
+ )
494
+ (checkout / "assets/skills/comet/SKILL.md").write_text("# Comet\n", encoding="utf-8")
495
+ environment = tmp_path / "environment"
496
+ environment.mkdir()
497
+ (environment / ".include-current-comet-cli").write_text("include\n", encoding="utf-8")
498
+ workspace = tmp_path / "workspace"
499
+ workspace.mkdir()
500
+ monkeypatch.setattr(eval_conftest, "REPOSITORY_ROOT", checkout)
501
+
502
+ def fake_source_build(_checkout: Path, output: Path) -> str:
503
+ (output / "app/cli").mkdir(parents=True)
504
+ (output / "domains/dashboard").mkdir(parents=True)
505
+ (output / "app/cli/index.js").write_text("export {};\n", encoding="utf-8")
506
+ (output / "domains/dashboard/native-adapter.js").write_text(
507
+ "export const schema = 'native';\n", encoding="utf-8"
508
+ )
509
+ return "5.9.3"
510
+
511
+ monkeypatch.setattr(eval_conftest, "_build_current_comet_dist", fake_source_build)
512
+
513
+ eval_conftest._copy_current_comet_cli_snapshot(environment, workspace)
514
+
515
+ snapshot = workspace / "_eval_current_comet"
516
+ assert (snapshot / "bin/comet.js").is_file()
517
+ assert (snapshot / "dist/app/cli/index.js").is_file()
518
+ assert (snapshot / "dist/domains/dashboard/native-adapter.js").is_file()
519
+ assert (snapshot / "assets/manifest.json").is_file()
520
+ assert (snapshot / "assets/skills/comet/SKILL.md").is_file()
521
+ assert (snapshot / "package.json").is_file()
522
+ identity = json.loads((snapshot / "build-identity.json").read_text(encoding="utf-8"))
523
+ assert identity["schema"] == "comet.eval.current-comet-build.v1"
524
+ assert identity["sourceFileCount"] >= 4
525
+ assert identity["snapshotFileCount"] >= 6
526
+ assert identity["assetsFileCount"] == 2
527
+ assert identity["assetsHash"]
528
+ assert identity["manifestHash"]
529
+
530
+
531
+ def test_controller_snapshots_native_runtime_for_readonly_oracle(tmp_path: Path):
532
+ eval_conftest = sys.modules["conftest"]
533
+ environment = tmp_path / "environment"
534
+ environment.mkdir()
535
+ (environment / ".include-trusted-native-runtime").write_text("include\n", encoding="utf-8")
536
+ skill_source = tmp_path / "skill/comet-native"
537
+ runtime = skill_source / "scripts/comet-native-runtime.mjs"
538
+ runtime.parent.mkdir(parents=True)
539
+ runtime.write_text("export const trusted = true;\n", encoding="utf-8")
540
+ workspace = tmp_path / "workspace"
541
+ workspace.mkdir()
542
+
543
+ eval_conftest._copy_trusted_native_runtime_snapshot(
544
+ environment,
545
+ workspace,
546
+ {"comet-native": {"source_dir": skill_source}},
547
+ )
548
+
549
+ oracle = workspace / "_eval_trusted_oracles/comet-native-runtime.mjs"
550
+ identity = json.loads(
551
+ (workspace / "_eval_trusted_oracles/native-runtime-identity.json").read_text(
552
+ encoding="utf-8"
553
+ )
554
+ )
555
+ assert oracle.read_bytes() == runtime.read_bytes()
556
+ assert identity == {
557
+ "schema": "comet.eval.trusted-native-runtime.v1",
558
+ "runtimeFile": oracle.name,
559
+ "runtimeHash": hashlib.sha256(oracle.read_bytes()).hexdigest(),
560
+ }
561
+ docker_harness = (EVAL_ROOT / "scaffold/shell/docker.sh").read_text(encoding="utf-8")
562
+ assert "_eval_trusted_oracles:ro" in docker_harness
563
+
564
+
565
+ def test_controller_provisions_immutable_native_review_fixture(tmp_path: Path):
566
+ eval_conftest = sys.modules["conftest"]
567
+ environment = tmp_path / "environment"
568
+ environment.mkdir()
569
+ (environment / ".include-trusted-native-runtime").write_text(
570
+ "include\n", encoding="utf-8"
571
+ )
572
+ (environment / ".include-trusted-native-review-fixture").write_text(
573
+ "sentence-counting\n", encoding="utf-8"
574
+ )
575
+ skill_source = tmp_path / "skill/comet-native"
576
+ runtime = skill_source / "scripts/comet-native-runtime.mjs"
577
+ runtime.parent.mkdir(parents=True)
578
+ runtime.write_text(
579
+ "console.log(JSON.stringify({"
580
+ "args:process.argv.slice(2),"
581
+ "reviewer:Boolean(process.env.COMET_NATIVE_EXTERNAL_REVIEWER_KEY)"
582
+ "}));\n",
583
+ encoding="utf-8",
584
+ )
585
+ workspace = tmp_path / "workspace"
586
+ workspace.mkdir()
587
+
588
+ eval_conftest._copy_trusted_native_runtime_snapshot(
589
+ environment,
590
+ workspace,
591
+ {"comet-native": {"source_dir": skill_source}},
592
+ )
593
+ eval_conftest._copy_trusted_native_review_fixture(environment, workspace)
594
+
595
+ oracle = workspace / "_eval_trusted_oracles"
596
+ public_fixture = json.loads(
597
+ (oracle / "native-review-fixture.json").read_text(encoding="utf-8")
598
+ )
599
+ policy = json.loads((oracle / "native-review-trust.json").read_text(encoding="utf-8"))
600
+ store = json.loads(
601
+ (oracle / "controller-home/native-controller-trust.json").read_text(
602
+ encoding="utf-8"
603
+ )
604
+ )
605
+ assert public_fixture["schema"] == "comet.eval.native-review-fixture.v1"
606
+ assert public_fixture["change"] == "sentence-counting"
607
+ assert public_fixture["signerMode"] == "external-verifier-sidecar"
608
+ assert policy["schema"] == "comet.native.review-trust-policy.v2"
609
+ project_root_hash = canonical_hash(
610
+ "comet.native.controller-project-root.v1", "/workspace"
611
+ )
612
+ assert store["projects"] == [
613
+ {
614
+ "projectRootHash": project_root_hash,
615
+ "controllerIdentity": store["projects"][0]["controllerIdentity"],
616
+ }
617
+ ]
618
+ assert (workspace / ".comet/native-review-trust.json").read_bytes() == (
619
+ oracle / "native-review-trust.json"
620
+ ).read_bytes()
621
+ validator = load_validator("comet-native-workflow", "test_native_workflow.py")
622
+ validator._validate_signature(
623
+ policy["controllerSignature"],
624
+ store["projects"][0]["controllerIdentity"],
625
+ policy["policyHash"],
626
+ "Controller policy",
627
+ )
628
+ secrets_root = workspace.with_name(f".{workspace.name}-native-review-secrets")
629
+ secret_documents = [
630
+ json.loads((secrets_root / f"{role}-key.json").read_text(encoding="utf-8"))
631
+ for role in ("implementation", "reviewer", "waiver")
632
+ ]
633
+ oracle_text = "\n".join(
634
+ file.read_text(encoding="utf-8")
635
+ for file in oracle.rglob("*")
636
+ if file.is_file()
637
+ )
638
+ assert all(document["privateKey"] not in oracle_text for document in secret_documents)
639
+ assert "COMET_NATIVE_REVIEW_VERIFIER_URL" in (
640
+ oracle / "native-review-signer.mjs"
641
+ ).read_text(encoding="utf-8")
642
+ assert "privateKey" not in (
643
+ oracle / "native-review-signer.mjs"
644
+ ).read_text(encoding="utf-8")
645
+
646
+ docker_harness = (EVAL_ROOT / "scaffold/shell/docker.sh").read_text(encoding="utf-8")
647
+ assert "native-review-signer-daemon.mjs" in docker_harness
648
+ assert "native-review-verifier-daemon.mjs" in docker_harness
649
+ verifier_daemon = (
650
+ EVAL_ROOT / "scaffold/shell/native-review-verifier-daemon.mjs"
651
+ ).read_text(encoding="utf-8")
652
+ assert "manual evidence requires an external human reviewer" in verifier_daemon
653
+ signer_start = docker_harness.split('node //opt/scaffold-shell/native-review-signer-daemon.mjs')[0]
654
+ assert 'workspace_host://workspace' not in signer_start.split('docker run -d --rm --name "$signer_name"')[-1]
655
+ assert 'workspace_host://workspace' in docker_harness
656
+ assert 'NATIVE_REVIEW_CONTROLLER_VOLUME://opt/comet-controller:ro' in docker_harness
657
+ assert 'HOME=//opt/comet-controller' in docker_harness
658
+
659
+
660
+ def test_native_workflow_validator_recomputes_typed_receipt_hash(tmp_path: Path):
661
+ validator = load_validator("comet-native-workflow", "test_native_workflow.py")
662
+ archived = tmp_path / "archive"
663
+ content = {
664
+ "schema": "comet.native.verification-receipt.v2",
665
+ "kind": "manual-evidence",
666
+ "role": "acceptance-evidence",
667
+ "status": "passed",
668
+ "bindings": {
669
+ "change": "sentence-counting",
670
+ "sourceRevision": 3,
671
+ "contractHash": "1" * 64,
672
+ "scopeHash": "2" * 64,
673
+ "snapshotHash": "3" * 64,
674
+ "artifactHash": "4" * 64,
675
+ },
676
+ "acceptanceIds": ["acceptance-" + "a" * 64],
677
+ "actor": "eval-manual",
678
+ "issuedAt": "2026-07-28T00:00:00.000Z",
679
+ "evidence": {
680
+ "steps": ["Run the sentence check."],
681
+ "observations": ["The check passed."],
682
+ "responsible": "eval-manual",
683
+ },
684
+ }
685
+ digest = validator._canonical_hash(
686
+ "comet.native.verification-receipt.v2", content
687
+ )
688
+ reference = f"runtime/evidence/receipts/{digest}.json"
689
+ receipt_file = archived / reference
690
+ write_json(receipt_file, {**content, "receiptHash": digest})
691
+
692
+ assert validator._read_typed_receipt(archived, reference)["receiptHash"] == digest
693
+
694
+ forged = json.loads(receipt_file.read_text(encoding="utf-8"))
695
+ forged["evidence"]["observations"] = ["A forged result."]
696
+ write_json(receipt_file, forged)
697
+ with pytest.raises(ValueError, match="schema/hash"):
698
+ validator._read_typed_receipt(archived, reference)
699
+
700
+
701
+ def test_native_workflow_validator_performs_real_ed25519_verification():
702
+ validator = load_validator("comet-native-workflow", "test_native_workflow.py")
703
+ payload_hash = "a" * 64
704
+ script = r"""
705
+ const {generateKeyPairSync,createHash,sign}=require('node:crypto');
706
+ const pair=generateKeyPairSync('ed25519');
707
+ const publicKey=pair.publicKey.export({format:'der',type:'spki'});
708
+ const message=Buffer.concat([
709
+ Buffer.from('comet.native.review-payload.v1\0'),
710
+ Buffer.from(process.argv[1],'hex')
711
+ ]);
712
+ process.stdout.write(JSON.stringify({
713
+ identity:{
714
+ schema:'comet.native.review-identity.v1',
715
+ algorithm:'ed25519',
716
+ keyId:createHash('sha256').update(publicKey).digest('hex'),
717
+ publicKey:publicKey.toString('base64')
718
+ },
719
+ signature:sign(null,message,pair.privateKey).toString('base64')
720
+ }));
721
+ """
722
+ generated = json.loads(
723
+ subprocess.run(
724
+ ["node", "-e", script, payload_hash],
725
+ capture_output=True,
726
+ text=True,
727
+ timeout=10,
728
+ check=True,
729
+ ).stdout
730
+ )
731
+ proof = {
732
+ "schema": "comet.native.review-signature.v1",
733
+ "algorithm": "ed25519",
734
+ "keyId": generated["identity"]["keyId"],
735
+ "payloadHash": payload_hash,
736
+ "signature": generated["signature"],
737
+ }
738
+
739
+ validator._validate_signature(
740
+ proof, generated["identity"], payload_hash, "Reviewer"
741
+ )
742
+
743
+ forged_bytes = bytearray(base64.b64decode(proof["signature"]))
744
+ forged_bytes[0] ^= 1
745
+ forged = {**proof, "signature": base64.b64encode(forged_bytes).decode("ascii")}
746
+ with pytest.raises(ValueError, match="Ed25519"):
747
+ validator._validate_signature(
748
+ forged, generated["identity"], payload_hash, "Reviewer"
749
+ )
750
+
751
+
752
+ def test_native_workflow_oracle_rejects_forged_runtime_identity(tmp_path: Path):
753
+ validator = load_validator("comet-native-workflow", "test_native_workflow.py")
754
+ validator.WORKSPACE = tmp_path
755
+ oracle = tmp_path / "_eval_trusted_oracles/comet-native-runtime.mjs"
756
+ oracle.parent.mkdir(parents=True)
757
+ oracle.write_text("console.log('{}');\n", encoding="utf-8")
758
+ write_json(
759
+ oracle.parent / "native-runtime-identity.json",
760
+ {
761
+ "schema": "comet.eval.trusted-native-runtime.v1",
762
+ "runtimeFile": oracle.name,
763
+ "runtimeHash": hashlib.sha256(oracle.read_bytes()).hexdigest(),
764
+ },
765
+ )
766
+ assert validator._trusted_native_runtime() == oracle
767
+
768
+ oracle.write_text("console.log('{\"forged\":true}');\n", encoding="utf-8")
769
+ with pytest.raises(ValueError, match="does not match"):
770
+ validator._trusted_native_runtime()
771
+
772
+
773
+ def test_native_workflow_oracle_rejects_an_incomplete_reconstructed_archive(
774
+ tmp_path: Path,
775
+ ):
776
+ validator = load_validator("comet-native-workflow", "test_native_workflow.py")
777
+ validator.WORKSPACE = tmp_path
778
+ acceptance_id = "acceptance-" + "a" * 64
779
+ archived = tmp_path / "docs/comet/archive/2026-07-28-sentence-counting"
780
+ archived.mkdir(parents=True)
781
+ (archived / "comet-state.yaml").write_text(
782
+ "name: sentence-counting\nphase: archive\narchived: true\nverification_result: pass\n",
783
+ encoding="utf-8",
784
+ )
785
+ oracle = tmp_path / "_eval_trusted_oracles/comet-native-runtime.mjs"
786
+ oracle.parent.mkdir(parents=True)
787
+ oracle.write_bytes(
788
+ (
789
+ EVAL_ROOT.parent
790
+ / "assets/skills/comet-native/scripts/comet-native-runtime.mjs"
791
+ ).read_bytes()
792
+ )
793
+ write_json(
794
+ oracle.parent / "native-runtime-identity.json",
795
+ {
796
+ "schema": "comet.eval.trusted-native-runtime.v1",
797
+ "runtimeFile": oracle.name,
798
+ "runtimeHash": hashlib.sha256(oracle.read_bytes()).hexdigest(),
799
+ },
800
+ )
801
+
802
+ with pytest.raises(ValueError, match="reconstructed pre-archive state"):
803
+ validator._run_trusted_archive_oracle(
804
+ archived,
805
+ {
806
+ "name": "sentence-counting",
807
+ "phase": "archive",
808
+ "archived": True,
809
+ "verification_result": "pass",
810
+ },
811
+ [acceptance_id],
812
+ )
813
+
814
+ assert archived.is_dir()
815
+ assert not (tmp_path / "docs/comet/changes/sentence-counting").exists()
816
+ with pytest.raises(ValueError, match="rejected"):
817
+ validator._run_trusted_archive_oracle(
818
+ archived,
819
+ {
820
+ "name": "sentence-counting",
821
+ "phase": "archive",
822
+ "archived": False,
823
+ "verification_result": "pass",
824
+ },
825
+ [acceptance_id],
826
+ )
827
+
828
+
829
+ def test_controller_source_build_contains_current_native_dashboard_adapter(tmp_path: Path):
830
+ eval_conftest = sys.modules["conftest"]
831
+ output = tmp_path / "dist"
832
+
833
+ version = eval_conftest._build_current_comet_dist(EVAL_ROOT.parent, output)
834
+
835
+ assert version
836
+ assert (output / "app/cli/index.js").is_file()
837
+ assert (output / "domains/dashboard/native-adapter.js").is_file()
838
+
839
+
840
+ def test_wave_b_prompt_hides_the_normalization_decision_and_requires_disk_resume():
841
+ task = load_task("comet-native-wave-b-decision-resume")
842
+ prompt = task.render_prompt()
843
+
844
+ assert "case-insensitive" not in prompt.lower()
845
+ assert "strip surrounding punctuation" not in prompt.lower()
846
+ assert "distinct normalized word values" in prompt.lower()
847
+ assert "words that occur exactly once" in prompt.lower()
848
+ assert task.config.interaction.decision_reply == (
849
+ "Treat words case-insensitively, strip surrounding punctuation, and preserve internal apostrophes."
850
+ )
851
+ continuation = task.config.interaction.continue_prompt.lower()
852
+ assert "context-cleared continuation" in continuation
853
+ assert "invoke `/comet-native`" in continuation
854
+ assert "first bash command" in continuation
855
+ assert "before any read, edit, test, or transition" in continuation
856
+ assert "status add-unique-counting --json" in continuation
857
+ assert "archive-preview.json" in continuation
858
+ assert "archive-commit.json" in continuation
859
+ assert "--dry-run --json" in continuation
860
+ assert "--expect-preflight" in continuation
861
+ assert "redirect stdout directly" in continuation
862
+ assert "exactly once" in continuation
863
+ assert "never overwrite" in continuation
864
+ assert "do not reconstruct" in continuation
865
+ assert task.config.interaction.fresh_resume_marker == "COMET_NATIVE_COLD_RESUME_READY"
866
+ assert "deliberately omits" not in prompt.lower()
867
+ assert "redirect stdout directly" in prompt.lower()
868
+ assert "verify all three files exist" in prompt.lower()
869
+ assert "do not rely on terminal output" in prompt.lower()
870
+ assert "before invoking either archive command" in prompt.lower()
871
+ assert "must itself redirect stdout" in prompt.lower()
872
+
873
+
874
+ def test_shared_wave_helpers_recognize_state_cas_and_readonly_projection(tmp_path: Path):
875
+ status_file = tmp_path / "status.json"
876
+ write_json(
877
+ status_file,
878
+ {"command": "status", "exitCode": 0, "data": {"freshness": "stale"}},
879
+ )
880
+ assert check_json_state(status_file, "stale")["status"] == "passed"
881
+ assert check_json_state(status_file, "partial")["status"] == "failed"
882
+ assert check_runtime_envelopes([status_file])["status"] == "passed"
883
+
884
+ attempt_a = tmp_path / "checkpoint-attempt-a.json"
885
+ write_json(
886
+ attempt_a,
887
+ {
888
+ "command": "checkpoint",
889
+ "exitCode": 0,
890
+ "data": {
891
+ "change": {"name": "normalize-case", "revision": 8},
892
+ "expectedRevision": 7,
893
+ "previousRevision": 7,
894
+ "revision": 8,
895
+ "outcome": "recorded",
896
+ },
897
+ },
898
+ )
899
+ attempt_b = tmp_path / "checkpoint-attempt-b.json"
900
+ write_json(
901
+ attempt_b,
902
+ {
903
+ "command": "checkpoint",
904
+ "exitCode": 73,
905
+ "data": {
906
+ "change": "normalize-case",
907
+ "expectedRevision": 7,
908
+ "actualRevision": 8,
909
+ "outcome": "revision-conflict",
910
+ },
911
+ },
912
+ )
913
+ assert check_checkpoint_cas_envelopes([attempt_a, attempt_b])["status"] == "passed"
914
+ write_json(
915
+ attempt_b,
916
+ {
917
+ "command": "checkpoint",
918
+ "exitCode": 73,
919
+ "data": {
920
+ "change": "normalize-case",
921
+ "expectedRevision": 7,
922
+ "actualRevision": 9,
923
+ "outcome": "revision-conflict",
924
+ },
925
+ },
926
+ )
927
+ assert check_checkpoint_cas_envelopes([attempt_a, attempt_b])["status"] == "failed"
928
+
929
+ cli_file = tmp_path / "cli.json"
930
+ dashboard_file = tmp_path / "dashboard.json"
931
+ projection = {
932
+ "name": "add-unique-counting",
933
+ "phase": "build",
934
+ "nextAction": "continue",
935
+ "verificationResult": "pending",
936
+ }
937
+ write_json(cli_file, {"data": projection})
938
+ write_json(dashboard_file, {"snapshot": {"changes": [projection]}})
939
+ assert check_dashboard_projection(cli_file, dashboard_file)["status"] == "passed"
940
+
941
+ dashboard_projection = {
942
+ **projection,
943
+ "selected": True,
944
+ "findings": {
945
+ "total": 1,
946
+ "errors": 0,
947
+ "warnings": 1,
948
+ "info": 0,
949
+ "requiresUserDecision": False,
950
+ "codes": ["workspace-root-changed"],
951
+ "truncated": False,
952
+ },
953
+ "continuation": {
954
+ "disposition": "continue",
955
+ "action": "work-phase",
956
+ "command": 'comet native next add-unique-counting --summary "<summary>"',
957
+ "requiresUserDecision": False,
958
+ "requiredInputs": ["summary"],
959
+ "requiredInputsTruncated": False,
960
+ },
961
+ }
962
+ cli_projection = {**dashboard_projection}
963
+ cli_projection["findingSummary"] = cli_projection.pop("findings")
964
+ write_json(cli_file, {"data": cli_projection})
965
+ write_json(dashboard_file, {"snapshot": {"changes": [dashboard_projection]}})
966
+ assert check_dashboard_projection(cli_file, dashboard_file)["status"] == "passed"
967
+
968
+ dashboard_projection["selected"] = False
969
+ write_json(dashboard_file, {"snapshot": {"changes": [dashboard_projection]}})
970
+ assert check_dashboard_projection(cli_file, dashboard_file)["status"] == "failed"
971
+ dashboard_projection["selected"] = True
972
+ dashboard_projection["findings"] = {
973
+ **cli_projection["findingSummary"],
974
+ "warnings": 0,
975
+ }
976
+ write_json(dashboard_file, {"snapshot": {"changes": [dashboard_projection]}})
977
+ assert check_dashboard_projection(cli_file, dashboard_file)["status"] == "failed"
978
+ dashboard_projection["findings"] = cli_projection["findingSummary"]
979
+ write_json(
980
+ dashboard_file,
981
+ {"snapshot": {"changes": [dashboard_projection, {**projection, "name": "extra"}]}},
982
+ )
983
+ assert check_dashboard_projection(cli_file, dashboard_file)["status"] == "failed"
984
+
985
+
986
+ def test_wave_b_validator_accepts_one_confirmed_archive_and_resume_snapshot(tmp_path: Path):
987
+ validator = load_validator(
988
+ "comet-native-wave-b-decision-resume", "test_native_wave_b_decision_resume.py"
989
+ )
990
+ validator.WORKSPACE = tmp_path
991
+ archived = tmp_path / "docs/comet/archive/2026-07-17-add-unique-counting"
992
+ (archived / "runtime").mkdir(parents=True)
993
+ (archived / "specs/unique-word-counting").mkdir(parents=True)
994
+ (tmp_path / "docs/comet/changes").mkdir(parents=True)
995
+ canonical = tmp_path / "docs/comet/specs/unique-word-counting/spec.md"
996
+ canonical.parent.mkdir(parents=True)
997
+ state = {
998
+ "name": "add-unique-counting",
999
+ "phase": "archive",
1000
+ "approval": "confirmed",
1001
+ "archived": True,
1002
+ "verification_result": "pass",
1003
+ }
1004
+ (archived / "comet-state.yaml").write_text(yaml.safe_dump(state), encoding="utf-8")
1005
+ decision = (
1006
+ "Case-fold tokens with str.lower(), strip punctuation from the start and end of each "
1007
+ "token. Internal punctuation is preserved; apostrophes are not removed."
1008
+ )
1009
+ (archived / "brief.md").write_text(f"# Decisions\n{decision}\n", encoding="utf-8")
1010
+ (archived / "specs/unique-word-counting/spec.md").write_text(decision, encoding="utf-8")
1011
+ canonical.write_text(decision, encoding="utf-8")
1012
+ write_json(
1013
+ tmp_path / ".cache/comet-native-eval/resume-status.json",
1014
+ {
1015
+ "command": "status",
1016
+ "exitCode": 0,
1017
+ "data": {"name": "add-unique-counting", "phase": "build"},
1018
+ },
1019
+ )
1020
+ preflight_hash = "a" * 64
1021
+ transaction_id = "aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb"
1022
+ write_json(
1023
+ tmp_path / ".cache/comet-native-eval/archive-preview.json",
1024
+ {
1025
+ "command": "archive --dry-run",
1026
+ "exitCode": 0,
1027
+ "data": {
1028
+ "ready": True,
1029
+ "evidenceFreshness": "complete",
1030
+ "findingCodes": [],
1031
+ "preflightHash": preflight_hash,
1032
+ },
1033
+ },
1034
+ )
1035
+ write_json(
1036
+ tmp_path / ".cache/comet-native-eval/archive-commit.json",
1037
+ {
1038
+ "command": "archive",
1039
+ "exitCode": 0,
1040
+ "data": {
1041
+ "preflightHash": preflight_hash,
1042
+ "transactionId": transaction_id,
1043
+ },
1044
+ },
1045
+ )
1046
+ write_archive_transaction(
1047
+ tmp_path,
1048
+ transaction_id,
1049
+ "add-unique-counting",
1050
+ preflight_hash,
1051
+ )
1052
+ write_json(
1053
+ tmp_path / "_test_context.json",
1054
+ {
1055
+ "interaction": {
1056
+ "mode": "auto_user",
1057
+ "decision_points": 1,
1058
+ "deterministic_replies": 1,
1059
+ "fresh_resume_boundaries": 1,
1060
+ "actual_turns": 2,
1061
+ "max_turns": 4,
1062
+ }
1063
+ },
1064
+ )
1065
+
1066
+ assert validator.check_decision_and_resume()["status"] == "passed"
1067
+
1068
+
1069
+ def test_wave_c_validator_requires_bound_partial_stale_and_complete_archive(tmp_path: Path):
1070
+ validator = load_validator(
1071
+ "comet-native-wave-c-verification-integrity",
1072
+ "test_native_wave_c_verification_integrity.py",
1073
+ )
1074
+ validator.WORKSPACE = tmp_path
1075
+ for name in ("wordcount.py", "test_wordcount.py"):
1076
+ source = TASKS_ROOT / "comet-native-wave-c-verification-integrity/environment" / name
1077
+ (tmp_path / name).write_bytes(source.read_bytes())
1078
+ evidence = tmp_path / ".cache/comet-native-eval"
1079
+ archive = tmp_path / "docs/comet/archive/2026-07-17-add-longest-word"
1080
+ archive.mkdir(parents=True)
1081
+ state = {
1082
+ "name": "add-longest-word",
1083
+ "phase": "archive",
1084
+ "archived": True,
1085
+ "verification_result": "pass",
1086
+ }
1087
+ contract = write_contract_artifacts(archive, state, "longest-word")
1088
+ partial_ref = write_verification_bundle(
1089
+ tmp_path,
1090
+ archive,
1091
+ state,
1092
+ contract,
1093
+ result="pass",
1094
+ source_revision=5,
1095
+ created_at="2026-07-17T00:00:05.000Z",
1096
+ partial=True,
1097
+ )
1098
+ partial_envelope = json.loads((archive / partial_ref).read_text(encoding="utf-8"))
1099
+ partial_hash = partial_envelope["implementationScopeHash"]
1100
+ final_ref = write_verification_bundle(
1101
+ tmp_path,
1102
+ archive,
1103
+ state,
1104
+ contract,
1105
+ result="pass",
1106
+ source_revision=9,
1107
+ created_at="2026-07-17T00:00:09.000Z",
1108
+ include_receipt=True,
1109
+ )
1110
+ state["verification_evidence"] = final_ref
1111
+ (archive / "comet-state.yaml").write_text(yaml.safe_dump(state), encoding="utf-8")
1112
+ stale_hash = "b" * 64
1113
+ final_hash = "c" * 64
1114
+ transaction_id = "cccccccc-1111-2222-3333-dddddddddddd"
1115
+ write_json(
1116
+ evidence / "partial-scope.json",
1117
+ {
1118
+ "command": "next",
1119
+ "exitCode": 65,
1120
+ "data": {
1121
+ "next": "manual",
1122
+ "preparedScope": {
1123
+ "complete": False,
1124
+ "unresolvedScopeCount": 1,
1125
+ "scopeHash": partial_hash,
1126
+ },
1127
+ "findings": [{"code": "verification-scope-partial"}],
1128
+ },
1129
+ },
1130
+ )
1131
+ write_json(
1132
+ evidence / "partial-archive-preview.json",
1133
+ {
1134
+ "command": "archive --dry-run",
1135
+ "exitCode": 0,
1136
+ "data": {
1137
+ "ready": True,
1138
+ "evidenceFreshness": "partial",
1139
+ "findingCodes": [],
1140
+ "preflightHash": partial_hash,
1141
+ },
1142
+ },
1143
+ )
1144
+ write_json(
1145
+ evidence / "stale-status.json",
1146
+ {
1147
+ "command": "status",
1148
+ "exitCode": 0,
1149
+ "data": {
1150
+ "phase": "archive",
1151
+ "archiveReady": False,
1152
+ "findingSummary": {"codes": ["verification-evidence-stale"]},
1153
+ },
1154
+ },
1155
+ )
1156
+ stale_preview = {
1157
+ "ready": False,
1158
+ "evidenceFreshness": "stale",
1159
+ "findingCodes": ["verification-evidence-stale"],
1160
+ "preflightHash": stale_hash,
1161
+ }
1162
+ write_json(
1163
+ evidence / "stale-archive-preview.json",
1164
+ {"command": "archive --dry-run", "exitCode": 0, "data": stale_preview},
1165
+ )
1166
+ write_json(
1167
+ evidence / "stale-archive-commit.json",
1168
+ {
1169
+ "command": "archive",
1170
+ "exitCode": 73,
1171
+ "data": stale_preview,
1172
+ "error": {"code": "conflict", "message": "Archive preflight changed"},
1173
+ },
1174
+ )
1175
+ final_preview = {
1176
+ "ready": True,
1177
+ "evidenceFreshness": "complete",
1178
+ "findingCodes": [],
1179
+ "preflightHash": final_hash,
1180
+ }
1181
+ write_json(
1182
+ evidence / "final-archive-preview.json",
1183
+ {"command": "archive --dry-run", "exitCode": 0, "data": final_preview},
1184
+ )
1185
+ write_json(
1186
+ evidence / "archive-commit.json",
1187
+ {
1188
+ "command": "archive",
1189
+ "exitCode": 0,
1190
+ "data": {
1191
+ "preflightHash": final_hash,
1192
+ "transactionId": transaction_id,
1193
+ },
1194
+ },
1195
+ )
1196
+ write_archive_transaction(tmp_path, transaction_id, "add-longest-word", final_hash)
1197
+ (archive / "runtime/trajectory.jsonl").write_text(
1198
+ "\n".join(
1199
+ json.dumps(
1200
+ {
1201
+ "sequence": index,
1202
+ "timestamp": "2026-07-17T00:00:00.000Z",
1203
+ "runId": "verification-run",
1204
+ "type": "state_transitioned",
1205
+ "data": {
1206
+ "previousPhase": previous,
1207
+ "nextPhase": next_phase,
1208
+ },
1209
+ }
1210
+ )
1211
+ for index, (previous, next_phase) in enumerate(
1212
+ [
1213
+ ("shape", "build"),
1214
+ ("build", "verify"),
1215
+ ("verify", "archive"),
1216
+ ("archive", "build"),
1217
+ ("build", "verify"),
1218
+ ("verify", "archive"),
1219
+ ("archive", None),
1220
+ ],
1221
+ 1,
1222
+ )
1223
+ )
1224
+ + "\n",
1225
+ encoding="utf-8",
1226
+ )
1227
+ (tmp_path / "docs/comet/changes").mkdir(parents=True)
1228
+
1229
+ result = validator.check_verification_integrity()
1230
+ assert result["status"] == "passed", result
1231
+
1232
+ partial_scope_path = evidence / "partial-scope.json"
1233
+ partial_scope = json.loads(partial_scope_path.read_text(encoding="utf-8"))
1234
+ partial_scope["data"]["preparedScope"]["unresolvedScopeCount"] = 2
1235
+ write_json(partial_scope_path, partial_scope)
1236
+ result = validator.check_verification_integrity()
1237
+ assert result["status"] == "failed", result
1238
+ assert "count" in result["reason"].lower()
1239
+
1240
+
1241
+ def test_verification_parser_rejects_forged_acceptance_ids_and_hash_corruption(tmp_path: Path):
1242
+ for name in ("wordcount.py", "test_wordcount.py"):
1243
+ source = TASKS_ROOT / "comet-native-wave-c-verification-integrity/environment" / name
1244
+ (tmp_path / name).write_bytes(source.read_bytes())
1245
+ root = tmp_path / "docs/comet/changes/strict-evidence"
1246
+ root.mkdir(parents=True)
1247
+ state = {"name": "strict-evidence", "phase": "archive", "verification_result": "pass"}
1248
+ contract = write_contract_artifacts(root, state, "strict-evidence")
1249
+ ref = write_verification_bundle(
1250
+ tmp_path,
1251
+ root,
1252
+ state,
1253
+ contract,
1254
+ result="pass",
1255
+ source_revision=3,
1256
+ created_at="2026-07-17T00:00:03.000Z",
1257
+ )
1258
+ parse_verification_bundle(
1259
+ project_root=tmp_path,
1260
+ change_root=root,
1261
+ evidence_ref=ref,
1262
+ state=state,
1263
+ verify_current_files=True,
1264
+ )
1265
+
1266
+ envelope = json.loads((root / ref).read_text(encoding="utf-8"))
1267
+ envelope["acceptanceTrace"]["entries"][0]["acceptanceId"] = f"acceptance-{'0' * 64}"
1268
+ trace_content = {
1269
+ key: value for key, value in envelope["acceptanceTrace"].items() if key != "traceHash"
1270
+ }
1271
+ envelope["acceptanceTrace"]["traceHash"] = canonical_hash(
1272
+ "comet.native.acceptance-trace.v1", trace_content
1273
+ )
1274
+ content = {key: value for key, value in envelope.items() if key != "envelopeHash"}
1275
+ forged_hash = canonical_hash("comet.native.verification-evidence.v1", content)
1276
+ envelope["envelopeHash"] = forged_hash
1277
+ forged_ref = f"runtime/evidence/verifications/{forged_hash}.json"
1278
+ write_json(root / forged_ref, envelope)
1279
+ with pytest.raises(ValueError, match="contract|forged"):
1280
+ parse_verification_bundle(
1281
+ project_root=tmp_path,
1282
+ change_root=root,
1283
+ evidence_ref=forged_ref,
1284
+ state=state,
1285
+ )
1286
+
1287
+ original = json.loads((root / ref).read_text(encoding="utf-8"))
1288
+ (root / original["reportRef"]).write_text("tampered report\n", encoding="utf-8")
1289
+ with pytest.raises(ValueError, match="report content hash"):
1290
+ parse_verification_bundle(
1291
+ project_root=tmp_path,
1292
+ change_root=root,
1293
+ evidence_ref=ref,
1294
+ state=state,
1295
+ verify_current_files=True,
1296
+ )
1297
+
1298
+
1299
+ def test_scope_parser_rejects_runtime_impossible_self_consistent_unresolved_scope(
1300
+ tmp_path: Path,
1301
+ ):
1302
+ for name in ("wordcount.py", "test_wordcount.py"):
1303
+ source = TASKS_ROOT / "comet-native-wave-c-verification-integrity/environment" / name
1304
+ (tmp_path / name).write_bytes(source.read_bytes())
1305
+ root = tmp_path / "docs/comet/changes/forged-scope"
1306
+ root.mkdir(parents=True)
1307
+ scope_ref, _ = write_scope(tmp_path, root, "1" * 64, partial=True)
1308
+ parse_scope_bundle(root, scope_ref)
1309
+
1310
+ scope = json.loads((root / scope_ref).read_text(encoding="utf-8"))
1311
+ forged_identity = {
1312
+ "kind": "snapshot-omission",
1313
+ "source": "baseline",
1314
+ "path": "unrelated.txt",
1315
+ "evidence": {"reason": "unreadable", "size": 1, "type": "file"},
1316
+ }
1317
+ scope["unresolvedScopes"] = [
1318
+ {
1319
+ "id": (
1320
+ "scope:" + canonical_hash("comet.native.unresolved-scope-id.v1", forged_identity)
1321
+ ),
1322
+ "kind": forged_identity["kind"],
1323
+ "source": forged_identity["source"],
1324
+ "path": forged_identity["path"],
1325
+ "reason": "baseline snapshot omitted unrelated.txt: unreadable",
1326
+ }
1327
+ ]
1328
+ content = {key: value for key, value in scope.items() if key != "scopeHash"}
1329
+ scope_hash = canonical_hash("comet.native.implementation-scope.v2", content)
1330
+ scope["scopeHash"] = scope_hash
1331
+ forged_ref = f"runtime/evidence/scopes/{scope_hash}.json"
1332
+ write_json(root / forged_ref, scope)
1333
+
1334
+ with pytest.raises(ValueError, match="unresolved|scope"):
1335
+ parse_scope_bundle(root, forged_ref)
1336
+
1337
+
1338
+ def test_scope_parser_derives_omission_scopes_from_snapshot_facts(tmp_path: Path):
1339
+ for name in ("wordcount.py", "test_wordcount.py"):
1340
+ source = TASKS_ROOT / "comet-native-wave-c-verification-integrity/environment" / name
1341
+ (tmp_path / name).write_bytes(source.read_bytes())
1342
+ root = tmp_path / "docs/comet/changes/omitted-scope"
1343
+ root.mkdir(parents=True)
1344
+ scope_ref, _ = write_scope(tmp_path, root, "2" * 64, partial=True)
1345
+
1346
+ scope = json.loads((root / scope_ref).read_text(encoding="utf-8"))
1347
+ baseline_ref = scope["baselineProjectionRef"]
1348
+ baseline = json.loads((root / baseline_ref).read_text(encoding="utf-8"))
1349
+ baseline.update(
1350
+ {
1351
+ "complete": False,
1352
+ "omitted": [
1353
+ {
1354
+ "path": "too-large.bin",
1355
+ "size": 10,
1356
+ "type": "file",
1357
+ "reason": "file-size",
1358
+ }
1359
+ ],
1360
+ "omittedCount": 1,
1361
+ }
1362
+ )
1363
+ baseline_hash = canonical_hash("comet.native.content-snapshot-projection.v1", baseline)
1364
+ baseline_ref = f"runtime/evidence/snapshots/{baseline_hash}.json"
1365
+ write_json(root / baseline_ref, baseline)
1366
+ scope["baselineProjectionHash"] = baseline_hash
1367
+ scope["baselineProjectionRef"] = baseline_ref
1368
+ omission_identity = {
1369
+ "kind": "snapshot-omission",
1370
+ "source": "baseline",
1371
+ "path": "too-large.bin",
1372
+ "evidence": {"reason": "file-size", "size": 10, "type": "file"},
1373
+ }
1374
+ incomplete_identity = {
1375
+ "kind": "snapshot-incomplete",
1376
+ "source": "baseline",
1377
+ "path": None,
1378
+ "evidence": {"omittedCount": 1},
1379
+ }
1380
+ derived = [
1381
+ {
1382
+ "id": (
1383
+ "scope:" + canonical_hash("comet.native.unresolved-scope-id.v1", omission_identity)
1384
+ ),
1385
+ "kind": "snapshot-omission",
1386
+ "source": "baseline",
1387
+ "path": "too-large.bin",
1388
+ "reason": "baseline snapshot omitted too-large.bin: file-size",
1389
+ },
1390
+ {
1391
+ "id": (
1392
+ "scope:"
1393
+ + canonical_hash("comet.native.unresolved-scope-id.v1", incomplete_identity)
1394
+ ),
1395
+ "kind": "snapshot-incomplete",
1396
+ "source": "baseline",
1397
+ "path": None,
1398
+ "reason": "baseline snapshot is incomplete",
1399
+ },
1400
+ ]
1401
+ original_unresolved = scope["unresolvedScopes"]
1402
+ scope["unresolvedScopes"] = sorted(
1403
+ [*original_unresolved, *derived],
1404
+ key=lambda item: (
1405
+ item["kind"],
1406
+ item["source"],
1407
+ (0, "") if item["path"] is None else (1, item["path"]),
1408
+ item["id"],
1409
+ ),
1410
+ )
1411
+ content = {key: value for key, value in scope.items() if key != "scopeHash"}
1412
+ scope_hash = canonical_hash("comet.native.implementation-scope.v2", content)
1413
+ scope["scopeHash"] = scope_hash
1414
+ valid_ref = f"runtime/evidence/scopes/{scope_hash}.json"
1415
+ write_json(root / valid_ref, scope)
1416
+ parse_scope_bundle(root, valid_ref)
1417
+
1418
+ scope["unresolvedScopes"] = original_unresolved
1419
+ content = {key: value for key, value in scope.items() if key != "scopeHash"}
1420
+ scope_hash = canonical_hash("comet.native.implementation-scope.v2", content)
1421
+ scope["scopeHash"] = scope_hash
1422
+ forged_ref = f"runtime/evidence/scopes/{scope_hash}.json"
1423
+ write_json(root / forged_ref, scope)
1424
+
1425
+ with pytest.raises(ValueError, match="omission|unresolved|scope"):
1426
+ parse_scope_bundle(root, forged_ref)
1427
+
1428
+
1429
+ @pytest.mark.parametrize(
1430
+ "forgery",
1431
+ [
1432
+ "change",
1433
+ "revision",
1434
+ "checker",
1435
+ "contract",
1436
+ "implementation",
1437
+ "coverage",
1438
+ "issue-counts",
1439
+ "issue-order",
1440
+ ],
1441
+ )
1442
+ def test_verification_parser_rejects_self_consistent_forged_check_receipts(
1443
+ tmp_path: Path,
1444
+ forgery: str,
1445
+ ):
1446
+ for name in ("wordcount.py", "test_wordcount.py"):
1447
+ source = TASKS_ROOT / "comet-native-wave-c-verification-integrity/environment" / name
1448
+ (tmp_path / name).write_bytes(source.read_bytes())
1449
+ root = tmp_path / "docs/comet/changes/receipt-bound"
1450
+ root.mkdir(parents=True)
1451
+ state = {"name": "receipt-bound", "phase": "archive", "verification_result": "pass"}
1452
+ contract = write_contract_artifacts(root, state, "receipt-bound")
1453
+ ref = write_verification_bundle(
1454
+ tmp_path,
1455
+ root,
1456
+ state,
1457
+ contract,
1458
+ result="pass",
1459
+ source_revision=3,
1460
+ created_at="2026-07-17T00:00:03.000Z",
1461
+ include_receipt=True,
1462
+ )
1463
+ parse_verification_bundle(
1464
+ project_root=tmp_path,
1465
+ change_root=root,
1466
+ evidence_ref=ref,
1467
+ state=state,
1468
+ verify_current_files=True,
1469
+ )
1470
+
1471
+ envelope = json.loads((root / ref).read_text(encoding="utf-8"))
1472
+ receipt = json.loads((root / envelope["receiptRef"]).read_text(encoding="utf-8"))
1473
+ if forgery == "change":
1474
+ receipt["change"] = "other-change"
1475
+ elif forgery == "revision":
1476
+ receipt["sourceRevision"] += 1
1477
+ elif forgery == "checker":
1478
+ receipt["checker"] = {
1479
+ "policy": "forged-policy",
1480
+ "version": 2,
1481
+ "hash": "f" * 64,
1482
+ "limits": CHECK_LIMITS,
1483
+ }
1484
+ elif forgery == "contract":
1485
+ receipt["contract"] = {
1486
+ "expectedHash": "a" * 64,
1487
+ "beforeHash": "a" * 64,
1488
+ "afterHash": "a" * 64,
1489
+ }
1490
+ elif forgery == "implementation":
1491
+ receipt["implementation"] = {
1492
+ "scopeHash": "b" * 64,
1493
+ "expectedSnapshotHash": "c" * 64,
1494
+ "beforeSnapshotHash": "c" * 64,
1495
+ "afterSnapshotHash": "c" * 64,
1496
+ }
1497
+ elif forgery == "coverage":
1498
+ receipt["counts"].update({"filesSelected": 1, "filesScanned": 1})
1499
+ elif forgery == "issue-counts":
1500
+ receipt["status"] = "failed"
1501
+ receipt["counts"].update({"issueCount": 1, "recordedIssueCount": 1})
1502
+ receipt["issuesTruncated"] = True
1503
+ elif forgery == "issue-order":
1504
+ receipt["status"] = "failed"
1505
+ receipt["counts"].update({"issueCount": 2, "recordedIssueCount": 2})
1506
+ receipt["issues"] = [
1507
+ {"path": "z.py", "line": 2, "kind": "trailing-whitespace"},
1508
+ {"path": "a.py", "line": 1, "kind": "conflict-marker"},
1509
+ ]
1510
+
1511
+ receipt["inputHash"] = canonical_hash(
1512
+ "comet.native.check-input.v1",
1513
+ {
1514
+ "change": receipt["change"],
1515
+ "sourceRevision": receipt["sourceRevision"],
1516
+ "checkerHash": receipt["checker"]["hash"],
1517
+ "contractHash": receipt["contract"]["expectedHash"],
1518
+ "scopeHash": receipt["implementation"]["scopeHash"],
1519
+ "snapshotHash": receipt["implementation"]["expectedSnapshotHash"],
1520
+ },
1521
+ )
1522
+ receipt_content = {key: value for key, value in receipt.items() if key != "receiptHash"}
1523
+ receipt_hash = canonical_hash("comet.native.check-receipt.v1", receipt_content)
1524
+ receipt["receiptHash"] = receipt_hash
1525
+ receipt_ref = f"runtime/evidence/check-receipts/{receipt_hash}.json"
1526
+ write_json(root / receipt_ref, receipt)
1527
+ envelope["receiptRef"] = receipt_ref
1528
+ envelope_content = {key: value for key, value in envelope.items() if key != "envelopeHash"}
1529
+ envelope_hash = canonical_hash("comet.native.verification-evidence.v1", envelope_content)
1530
+ envelope["envelopeHash"] = envelope_hash
1531
+ forged_ref = f"runtime/evidence/verifications/{envelope_hash}.json"
1532
+ write_json(root / forged_ref, envelope)
1533
+
1534
+ with pytest.raises(ValueError, match="receipt|checker|coverage|issue"):
1535
+ parse_verification_bundle(
1536
+ project_root=tmp_path,
1537
+ change_root=root,
1538
+ evidence_ref=forged_ref,
1539
+ state=state,
1540
+ verify_current_files=True,
1541
+ )
1542
+
1543
+
1544
+ def test_verification_parser_rejects_receipt_content_hash_corruption(tmp_path: Path):
1545
+ for name in ("wordcount.py", "test_wordcount.py"):
1546
+ source = TASKS_ROOT / "comet-native-wave-c-verification-integrity/environment" / name
1547
+ (tmp_path / name).write_bytes(source.read_bytes())
1548
+ root = tmp_path / "docs/comet/changes/receipt-hash"
1549
+ root.mkdir(parents=True)
1550
+ state = {"name": "receipt-hash", "phase": "archive", "verification_result": "pass"}
1551
+ contract = write_contract_artifacts(root, state, "receipt-hash")
1552
+ ref = write_verification_bundle(
1553
+ tmp_path,
1554
+ root,
1555
+ state,
1556
+ contract,
1557
+ result="pass",
1558
+ source_revision=4,
1559
+ created_at="2026-07-17T00:00:04.000Z",
1560
+ include_receipt=True,
1561
+ )
1562
+ envelope = json.loads((root / ref).read_text(encoding="utf-8"))
1563
+ receipt_path = root / envelope["receiptRef"]
1564
+ receipt = json.loads(receipt_path.read_text(encoding="utf-8"))
1565
+ receipt["endedAt"] = "2026-07-17T00:00:02.000Z"
1566
+ write_json(receipt_path, receipt)
1567
+
1568
+ with pytest.raises(ValueError, match="receipt|content hash"):
1569
+ parse_verification_bundle(
1570
+ project_root=tmp_path,
1571
+ change_root=root,
1572
+ evidence_ref=ref,
1573
+ state=state,
1574
+ verify_current_files=True,
1575
+ )
1576
+
1577
+
1578
+ def test_archive_transaction_rejects_reordered_durable_events(tmp_path: Path):
1579
+ archive = tmp_path / "docs/comet/archive/2026-07-17-transaction-check"
1580
+ archive.mkdir(parents=True)
1581
+ transaction_id = "dddddddd-1111-2222-3333-eeeeeeeeeeee"
1582
+ preflight = "f" * 64
1583
+ write_archive_transaction(tmp_path, transaction_id, "transaction-check", preflight)
1584
+ commit = {"transactionId": transaction_id, "preflightHash": preflight}
1585
+ assert (
1586
+ check_archive_transaction(tmp_path, commit, "transaction-check", preflight)["status"]
1587
+ == "passed"
1588
+ )
1589
+ events = tmp_path / f"docs/comet/runtime/transactions/{transaction_id}/events.jsonl"
1590
+ lines = events.read_text(encoding="utf-8").splitlines()
1591
+ lines[1], lines[2] = lines[2], lines[1]
1592
+ events.write_text("\n".join(lines) + "\n", encoding="utf-8")
1593
+ assert (
1594
+ check_archive_transaction(tmp_path, commit, "transaction-check", preflight)["status"]
1595
+ == "failed"
1596
+ )
1597
+
1598
+
1599
+ def test_verification_parser_rejects_symlinked_evidence_documents(tmp_path: Path):
1600
+ for name in ("wordcount.py", "test_wordcount.py"):
1601
+ source = TASKS_ROOT / "comet-native-wave-c-verification-integrity/environment" / name
1602
+ (tmp_path / name).write_bytes(source.read_bytes())
1603
+ root = tmp_path / "docs/comet/changes/symlink-evidence"
1604
+ root.mkdir(parents=True)
1605
+ state = {"name": "symlink-evidence", "phase": "archive", "verification_result": "pass"}
1606
+ contract = write_contract_artifacts(root, state, "symlink-evidence")
1607
+ ref = write_verification_bundle(
1608
+ tmp_path,
1609
+ root,
1610
+ state,
1611
+ contract,
1612
+ result="pass",
1613
+ source_revision=3,
1614
+ created_at="2026-07-17T00:00:03.000Z",
1615
+ )
1616
+ envelope = json.loads((root / ref).read_text(encoding="utf-8"))
1617
+ report = root / envelope["reportRef"]
1618
+ outside = tmp_path / "outside-report.md"
1619
+ outside.write_bytes(report.read_bytes())
1620
+ report.unlink()
1621
+ try:
1622
+ report.symlink_to(outside)
1623
+ except OSError as error:
1624
+ pytest.skip(f"Symbolic links are unavailable: {error}")
1625
+
1626
+ with pytest.raises(ValueError, match="regular file|symbolic link"):
1627
+ parse_verification_bundle(
1628
+ project_root=tmp_path,
1629
+ change_root=root,
1630
+ evidence_ref=ref,
1631
+ state=state,
1632
+ verify_current_files=True,
1633
+ )
1634
+
1635
+
1636
+ def test_wave_d_validator_requires_third_stop_one_override_and_twelfth_hard_stop(tmp_path: Path):
1637
+ validator = load_validator(
1638
+ "comet-native-wave-d-stagnation-stop", "test_native_wave_d_stagnation_stop.py"
1639
+ )
1640
+ validator.WORKSPACE = tmp_path
1641
+ root = tmp_path / "docs/comet/changes/stalled-average"
1642
+ (root / "runtime/evidence/verifications").mkdir(parents=True)
1643
+ (root / "specs/average-word-length").mkdir(parents=True)
1644
+ (tmp_path / "docs/comet/archive").mkdir(parents=True)
1645
+ for name in ("wordcount.py", "test_wordcount.py"):
1646
+ source = TASKS_ROOT / "comet-native-wave-d-stagnation-stop/environment" / name
1647
+ (tmp_path / name).write_bytes(source.read_bytes().replace(b"\r\n", b"\n"))
1648
+ state = {
1649
+ "name": "stalled-average",
1650
+ "phase": "build",
1651
+ "verification_result": "fail",
1652
+ }
1653
+ contract = write_contract_artifacts(root, state, "average-word-length")
1654
+ envelope_refs = [
1655
+ write_verification_bundle(
1656
+ tmp_path,
1657
+ root,
1658
+ state,
1659
+ contract,
1660
+ result="fail",
1661
+ source_revision=index + 1,
1662
+ created_at=f"2026-07-17T00:00:{index:02}.000Z",
1663
+ )
1664
+ for index in range(1, 13)
1665
+ ]
1666
+ state["verification_evidence"] = envelope_refs[-1]
1667
+ (root / "comet-state.yaml").write_text(yaml.safe_dump(state), encoding="utf-8")
1668
+ first_signature = "a" * 64
1669
+ later_signatures = ["b" * 64, "c" * 64]
1670
+ repair_events = [
1671
+ {
1672
+ "signatureHash": first_signature,
1673
+ "disposition": disposition,
1674
+ "overrideSummaryHash": None,
1675
+ }
1676
+ for disposition in ("continue", "warn", "manual-stop")
1677
+ ]
1678
+ repair_events.append(
1679
+ {
1680
+ "signatureHash": first_signature,
1681
+ "disposition": "continue",
1682
+ "overrideSummaryHash": "d" * 64,
1683
+ }
1684
+ )
1685
+ for attempt in range(4, 13):
1686
+ signature = later_signatures[(attempt - 4) % 2]
1687
+ repair_events.append(
1688
+ {
1689
+ "signatureHash": signature,
1690
+ "disposition": "hard-stop" if attempt == 12 else "continue",
1691
+ "overrideSummaryHash": None,
1692
+ }
1693
+ )
1694
+ (root / "runtime/trajectory.jsonl").write_text(
1695
+ "\n".join(
1696
+ json.dumps(
1697
+ {
1698
+ "sequence": index,
1699
+ "timestamp": "2026-07-17T00:00:00.000Z",
1700
+ "runId": "repair-run",
1701
+ "type": "state_transitioned",
1702
+ "data": {
1703
+ "previousPhase": (
1704
+ "build" if projection["overrideSummaryHash"] is not None else "verify"
1705
+ ),
1706
+ "nextPhase": (
1707
+ "verify" if projection["overrideSummaryHash"] is not None else "build"
1708
+ ),
1709
+ "repairStagnation": projection,
1710
+ },
1711
+ }
1712
+ )
1713
+ for index, projection in enumerate(repair_events, 1)
1714
+ )
1715
+ + "\n",
1716
+ encoding="utf-8",
1717
+ )
1718
+ manual_repair = {
1719
+ "disposition": "manual-stop",
1720
+ "reasonCode": "repeated-failure-stop",
1721
+ "signatureHash": first_signature,
1722
+ "consecutiveFailures": 3,
1723
+ "totalRepairFailures": 3,
1724
+ "remainingIterations": 9,
1725
+ "overrideAccepted": False,
1726
+ }
1727
+ write_json(
1728
+ tmp_path / ".cache/comet-native-eval/manual-stop.json",
1729
+ {
1730
+ "command": "next",
1731
+ "exitCode": 75,
1732
+ "data": {
1733
+ "repair": manual_repair,
1734
+ "findings": [{"code": "repair-stagnation-stop"}],
1735
+ },
1736
+ "error": {"code": "blocked", "message": "Repeated failure requires manual review"},
1737
+ },
1738
+ )
1739
+ write_json(
1740
+ tmp_path / ".cache/comet-native-eval/override.json",
1741
+ {
1742
+ "command": "next",
1743
+ "exitCode": 0,
1744
+ "data": {
1745
+ "previousPhase": "build",
1746
+ "change": {"phase": "verify", "verification_result": "pending"},
1747
+ },
1748
+ },
1749
+ )
1750
+ hard_repair = {
1751
+ "disposition": "hard-stop",
1752
+ "reasonCode": "repair-iteration-limit",
1753
+ "signatureHash": later_signatures[0],
1754
+ "consecutiveFailures": 1,
1755
+ "totalRepairFailures": 12,
1756
+ "remainingIterations": 0,
1757
+ "overrideAccepted": False,
1758
+ }
1759
+ write_json(
1760
+ tmp_path / ".cache/comet-native-eval/hard-stop.json",
1761
+ {
1762
+ "command": "next",
1763
+ "exitCode": 75,
1764
+ "data": {
1765
+ "repair": hard_repair,
1766
+ "findings": [{"code": "repair-iteration-limit"}],
1767
+ },
1768
+ "error": {"code": "blocked", "message": "Repair iteration limit reached"},
1769
+ },
1770
+ )
1771
+ write_json(
1772
+ tmp_path / ".cache/comet-native-eval/hard-stop-status.json",
1773
+ {
1774
+ "command": "status",
1775
+ "exitCode": 0,
1776
+ "data": {
1777
+ "name": "stalled-average",
1778
+ "phase": "build",
1779
+ "verificationResult": "fail",
1780
+ "nextCommand": None,
1781
+ "repair": {
1782
+ "disposition": "hard-stop",
1783
+ "signatureHash": later_signatures[0],
1784
+ "overrideRecorded": False,
1785
+ },
1786
+ "findingSummary": {"codes": ["repair-iteration-limit"]},
1787
+ },
1788
+ },
1789
+ )
1790
+
1791
+ result = validator.check_stagnation_stop()
1792
+ assert result["status"] == "passed", result
1793
+
1794
+
1795
+ def test_wave_e_validator_requires_early_conflict_workspace_and_single_cas_winner(tmp_path: Path):
1796
+ validator = load_validator(
1797
+ "comet-native-wave-e-parallel-safety", "test_native_wave_e_parallel_safety.py"
1798
+ )
1799
+ validator.WORKSPACE = tmp_path
1800
+ for name in ("normalize-case", "preserve-acronyms"):
1801
+ (tmp_path / "docs/comet/changes" / name).mkdir(parents=True)
1802
+ (tmp_path / "docs/comet/archive").mkdir(parents=True)
1803
+ write_json(
1804
+ tmp_path / ".cache/comet-native-eval/conflict-status.json",
1805
+ {
1806
+ "command": "status",
1807
+ "exitCode": 0,
1808
+ "data": {
1809
+ "name": "normalize-case",
1810
+ "phase": "shape",
1811
+ "revision": 1,
1812
+ "findingSummary": {
1813
+ "codes": ["native-change-conflict", "workspace-unattributed-changes"]
1814
+ },
1815
+ },
1816
+ },
1817
+ )
1818
+ write_json(
1819
+ tmp_path / ".cache/comet-native-eval/checkpoint-attempt-a.json",
1820
+ {
1821
+ "command": "checkpoint",
1822
+ "exitCode": 0,
1823
+ "data": {
1824
+ "change": {"name": "normalize-case", "revision": 2},
1825
+ "expectedRevision": 1,
1826
+ "previousRevision": 1,
1827
+ "revision": 2,
1828
+ "outcome": "recorded",
1829
+ },
1830
+ },
1831
+ )
1832
+ write_json(
1833
+ tmp_path / ".cache/comet-native-eval/checkpoint-attempt-b.json",
1834
+ {
1835
+ "command": "checkpoint",
1836
+ "exitCode": 73,
1837
+ "data": {
1838
+ "change": "normalize-case",
1839
+ "expectedRevision": 1,
1840
+ "actualRevision": 2,
1841
+ "outcome": "revision-conflict",
1842
+ },
1843
+ },
1844
+ )
1845
+
1846
+ assert validator.check_parallel_safety()["status"] == "passed"
1847
+ assert validator.check_live_concurrent_cas()["status"] == "failed"
1848
+
1849
+
1850
+ def test_wave_e_barrier_launches_two_independent_cas_processes(tmp_path: Path):
1851
+ validator = load_validator(
1852
+ "comet-native-wave-e-parallel-safety", "test_native_wave_e_parallel_safety.py"
1853
+ )
1854
+ validator.WORKSPACE = tmp_path
1855
+ barrier_root = tmp_path / ".cache/comet-native-eval"
1856
+ barrier_root.mkdir(parents=True)
1857
+ lock = tmp_path / "cas.lock"
1858
+ script = r"""
1859
+ import json, os, pathlib, sys
1860
+ lock = pathlib.Path(sys.argv[1])
1861
+ try:
1862
+ descriptor = os.open(lock, os.O_CREAT | os.O_EXCL | os.O_WRONLY)
1863
+ os.write(descriptor, b"2")
1864
+ os.close(descriptor)
1865
+ code = 0
1866
+ data = {"change": {"name": "normalize-case", "revision": 2}, "expectedRevision": 1, "previousRevision": 1, "revision": 2, "outcome": "recorded", "pid": os.getpid()}
1867
+ except FileExistsError:
1868
+ code = 73
1869
+ data = {"change": "normalize-case", "expectedRevision": 1, "actualRevision": 2, "outcome": "revision-conflict", "pid": os.getpid()}
1870
+ payload = {"command": "checkpoint", "exitCode": code, "data": data}
1871
+ if code:
1872
+ payload["error"] = {"code": "conflict", "message": "revision conflict"}
1873
+ print(json.dumps(payload))
1874
+ raise SystemExit(code)
1875
+ """
1876
+ commands = [[sys.executable, "-c", script, str(lock), label] for label in ("A", "B")]
1877
+ results = validator.run_barrier_commands(commands, barrier_root)
1878
+ assert all(result.stdout for result in results), [
1879
+ (result.returncode, result.stderr) for result in results
1880
+ ]
1881
+ payloads = [json.loads(result.stdout) for result in results]
1882
+
1883
+ assert sorted(result.returncode for result in results) == [0, 73]
1884
+ assert len({payload["data"]["pid"] for payload in payloads}) == 2
1885
+ paths = []
1886
+ for index, payload in enumerate(payloads):
1887
+ path = tmp_path / f"attempt-{index}.json"
1888
+ write_json(path, payload)
1889
+ paths.append(path)
1890
+ assert check_checkpoint_cas_envelopes(paths)["status"] == "passed"
1891
+
1892
+
1893
+ def test_wave_e_live_cas_never_executes_agent_mutable_runtime(tmp_path: Path):
1894
+ validator = load_validator(
1895
+ "comet-native-wave-e-parallel-safety", "test_native_wave_e_parallel_safety.py"
1896
+ )
1897
+ validator.WORKSPACE = tmp_path
1898
+ state_file = tmp_path / "docs/comet/changes/normalize-case/comet-state.yaml"
1899
+ state_file.parent.mkdir(parents=True)
1900
+ state_file.write_text("name: normalize-case\nrevision: 1\n", encoding="utf-8")
1901
+ (tmp_path / ".cache/comet-native-eval").mkdir(parents=True)
1902
+
1903
+ trusted_marker = tmp_path / "trusted-runtime-ran"
1904
+ trusted_root = tmp_path / "_eval_trusted_oracles"
1905
+ trusted_root.mkdir()
1906
+ trusted_runtime = trusted_root / "comet-native-runtime.mjs"
1907
+ trusted_runtime.write_text(
1908
+ "import fs from 'node:fs';\n"
1909
+ f"fs.writeFileSync({json.dumps(str(trusted_marker))}, 'trusted');\n"
1910
+ "console.log(JSON.stringify({command:'checkpoint',exitCode:2,data:{}}));\n"
1911
+ "process.exit(2);\n",
1912
+ encoding="utf-8",
1913
+ )
1914
+ write_json(
1915
+ trusted_root / "native-runtime-identity.json",
1916
+ {
1917
+ "schema": "comet.eval.trusted-native-runtime.v1",
1918
+ "runtimeFile": trusted_runtime.name,
1919
+ "runtimeHash": hashlib.sha256(trusted_runtime.read_bytes()).hexdigest(),
1920
+ },
1921
+ )
1922
+
1923
+ mutable_marker = tmp_path / "agent-runtime-ran"
1924
+ mutable_runtime = tmp_path / ".claude/skills/comet-native/scripts/comet-native-runtime.mjs"
1925
+ mutable_runtime.parent.mkdir(parents=True)
1926
+ mutable_runtime.write_text(
1927
+ "import fs from 'node:fs';\n"
1928
+ f"fs.writeFileSync({json.dumps(str(mutable_marker))}, 'agent');\n"
1929
+ "console.log(JSON.stringify({command:'checkpoint',exitCode:2,data:{}}));\n"
1930
+ "process.exit(2);\n",
1931
+ encoding="utf-8",
1932
+ )
1933
+
1934
+ result = validator.check_live_concurrent_cas()
1935
+
1936
+ assert result["status"] == "failed"
1937
+ assert trusted_marker.is_file()
1938
+ assert not mutable_marker.exists()
1939
+
1940
+
1941
+ def test_wave_f_validator_requires_matching_projection_and_unchanged_tree(tmp_path: Path):
1942
+ validator = load_validator(
1943
+ "comet-native-wave-f-dashboard-readonly", "test_native_wave_f_dashboard_readonly.py"
1944
+ )
1945
+ validator.WORKSPACE = tmp_path
1946
+ projection = {
1947
+ "workflow": "native",
1948
+ "name": "dashboard-visible-change",
1949
+ "phase": "shape",
1950
+ "revision": 1,
1951
+ "selected": True,
1952
+ "nextCommand": 'comet native next dashboard-visible-change --summary "<summary>"',
1953
+ "verificationResult": "pending",
1954
+ "verificationFreshness": "missing",
1955
+ "archiveReady": False,
1956
+ "continuation": {
1957
+ "disposition": "continue",
1958
+ "action": "work-phase",
1959
+ "command": 'comet native next dashboard-visible-change --summary "<summary>"',
1960
+ "requiresUserDecision": False,
1961
+ "requiredInputs": [],
1962
+ "requiredInputsTruncated": False,
1963
+ },
1964
+ "findings": {
1965
+ "total": 0,
1966
+ "errors": 0,
1967
+ "warnings": 0,
1968
+ "info": 0,
1969
+ "requiresUserDecision": False,
1970
+ "codes": [],
1971
+ "truncated": False,
1972
+ },
1973
+ "archive": {
1974
+ "ready": False,
1975
+ "evidenceFreshness": "missing",
1976
+ "operationCount": 1,
1977
+ "findingCodes": ["archive-phase-required", "verification-evidence-missing"],
1978
+ "findingCodesTruncated": False,
1979
+ "preflightHash": "a" * 64,
1980
+ },
1981
+ "conflicts": {
1982
+ "visibleDefiniteConflict": 0,
1983
+ "visiblePossibleOverlap": 0,
1984
+ "peers": [],
1985
+ "peersTruncated": False,
1986
+ },
1987
+ }
1988
+ cli_projection = {
1989
+ "name": projection["name"],
1990
+ "phase": projection["phase"],
1991
+ "revision": projection["revision"],
1992
+ "selected": projection["selected"],
1993
+ "nextCommand": projection["nextCommand"],
1994
+ "verificationResult": projection["verificationResult"],
1995
+ "archiveReady": projection["archiveReady"],
1996
+ "continuation": projection["continuation"],
1997
+ "findingSummary": projection["findings"],
1998
+ }
1999
+ write_json(
2000
+ tmp_path / ".cache/comet-native-eval/cli-before.json",
2001
+ {"command": "status", "exitCode": 0, "data": cli_projection},
2002
+ )
2003
+ write_json(
2004
+ tmp_path / ".cache/comet-native-eval/cli-after.json",
2005
+ {"command": "status", "exitCode": 0, "data": cli_projection},
2006
+ )
2007
+ write_json(
2008
+ tmp_path / ".cache/comet-native-eval/dashboard.json",
2009
+ {
2010
+ "native": {
2011
+ "schema": "comet.dashboard.native.v1",
2012
+ "generatedAt": "2026-07-17T00:00:00.000Z",
2013
+ "totalChangeCount": 1,
2014
+ "visibleChangeCount": 1,
2015
+ "omittedChangeCount": 0,
2016
+ "changesTruncated": False,
2017
+ "changes": [projection],
2018
+ "conflicts": {
2019
+ "available": True,
2020
+ "definiteConflict": 0,
2021
+ "possibleOverlap": 0,
2022
+ "disjoint": 0,
2023
+ "relationshipCount": 0,
2024
+ "visibleRelationshipCount": 0,
2025
+ "omittedRelationshipCount": 0,
2026
+ "relationshipsTruncated": False,
2027
+ },
2028
+ }
2029
+ },
2030
+ )
2031
+ native_change = tmp_path / "docs/comet/changes/dashboard-visible-change"
2032
+ native_change.mkdir(parents=True)
2033
+ (native_change / "comet-state.yaml").write_text(
2034
+ "name: dashboard-visible-change\n", encoding="utf-8"
2035
+ )
2036
+ manifest = {"files": validator._current_native_manifest()}
2037
+ write_json(tmp_path / ".cache/comet-native-eval/native-tree-before.json", manifest)
2038
+ write_json(tmp_path / ".cache/comet-native-eval/native-tree-after.json", manifest)
2039
+
2040
+ readonly = validator.check_dashboard_readonly()
2041
+ assert readonly["status"] == "passed", readonly
2042
+ assert validator.check_public_native_projection()["status"] == "passed"
2043
+
2044
+
2045
+ def test_wave_f_rejects_tampered_controller_source_build(monkeypatch, tmp_path: Path):
2046
+ eval_conftest = sys.modules["conftest"]
2047
+ checkout = tmp_path / "checkout"
2048
+ (checkout / "bin").mkdir(parents=True)
2049
+ (checkout / "bin/comet.js").write_text("import '../dist/app/cli/index.js';\n", encoding="utf-8")
2050
+ (checkout / "package.json").write_text('{"type":"module"}\n', encoding="utf-8")
2051
+ (checkout / "assets").mkdir()
2052
+ (checkout / "assets/manifest.json").write_text('{"skills": []}\n', encoding="utf-8")
2053
+ environment = tmp_path / "environment"
2054
+ environment.mkdir()
2055
+ (environment / ".include-current-comet-cli").write_text("include\n", encoding="utf-8")
2056
+ workspace = tmp_path / "workspace"
2057
+ workspace.mkdir()
2058
+
2059
+ def fake_source_build(_checkout: Path, output: Path) -> str:
2060
+ (output / "app/cli").mkdir(parents=True)
2061
+ (output / "domains/dashboard").mkdir(parents=True)
2062
+ (output / "app/cli/index.js").write_text("export {};\n", encoding="utf-8")
2063
+ (output / "domains/dashboard/native-adapter.js").write_text(
2064
+ "export const schema = 'native';\n", encoding="utf-8"
2065
+ )
2066
+ return "5.9.3"
2067
+
2068
+ monkeypatch.setattr(eval_conftest, "REPOSITORY_ROOT", checkout)
2069
+ monkeypatch.setattr(eval_conftest, "_build_current_comet_dist", fake_source_build)
2070
+ eval_conftest._copy_current_comet_cli_snapshot(environment, workspace)
2071
+ validator = load_validator(
2072
+ "comet-native-wave-f-dashboard-readonly", "test_native_wave_f_dashboard_readonly.py"
2073
+ )
2074
+ validator.WORKSPACE = workspace
2075
+
2076
+ identity_check = validator.check_current_cli_build_identity()
2077
+ assert identity_check["status"] == "passed", identity_check
2078
+ adapter = workspace / "_eval_current_comet/dist/domains/dashboard/native-adapter.js"
2079
+ adapter.write_text("export const schema = 'forged';\n", encoding="utf-8")
2080
+ assert validator.check_current_cli_build_identity()["status"] == "failed"
2081
+
2082
+
2083
+ def test_wave_f_live_check_rejects_a_single_dashboard_write(monkeypatch, tmp_path: Path):
2084
+ validator = load_validator(
2085
+ "comet-native-wave-f-dashboard-readonly", "test_native_wave_f_dashboard_readonly.py"
2086
+ )
2087
+ validator.WORKSPACE = tmp_path
2088
+ (tmp_path / "_eval_current_comet/bin").mkdir(parents=True)
2089
+ (tmp_path / "_eval_current_comet/bin/comet.js").write_text("// fixture\n", encoding="utf-8")
2090
+ (tmp_path / "current-comet.sh").write_text("#!/usr/bin/env bash\n", encoding="utf-8")
2091
+ native = tmp_path / "docs/comet/changes/dashboard-visible-change"
2092
+ native.mkdir(parents=True)
2093
+ (native / "comet-state.yaml").write_text(
2094
+ "name: dashboard-visible-change\n", encoding="utf-8"
2095
+ )
2096
+ (tmp_path / ".cache/comet-native-eval").mkdir(parents=True)
2097
+ calls = 0
2098
+
2099
+ def write_once(_wrapper: Path, project_root: Path):
2100
+ nonlocal calls
2101
+ calls += 1
2102
+ if calls == 1:
2103
+ target = project_root / "docs/comet/runtime/one-time-write.json"
2104
+ target.parent.mkdir(parents=True, exist_ok=True)
2105
+ target.write_text("{}\n", encoding="utf-8")
2106
+ return {"native": {"changes": []}}
2107
+
2108
+ monkeypatch.setattr(validator, "_run_live_dashboard", write_once)
2109
+ result = validator.check_live_dashboard_and_tree()
2110
+
2111
+ assert result["status"] == "failed"
2112
+ assert "modified the live Native tree" in result["reason"]
2113
+
2114
+
2115
+ def test_wave_f_live_check_never_executes_agent_mutable_wrapper(monkeypatch, tmp_path: Path):
2116
+ validator = load_validator(
2117
+ "comet-native-wave-f-dashboard-readonly", "test_native_wave_f_dashboard_readonly.py"
2118
+ )
2119
+ validator.WORKSPACE = tmp_path
2120
+ projection = {"name": "dashboard-visible-change", "phase": "shape"}
2121
+ dashboard = {"native": {"changes": [projection]}}
2122
+
2123
+ snapshot = tmp_path / "_eval_current_comet"
2124
+ (snapshot / "bin").mkdir(parents=True)
2125
+ (snapshot / "package.json").write_text('{"type":"module"}\n', encoding="utf-8")
2126
+ (snapshot / "bin/comet.js").write_text(
2127
+ f"console.log(JSON.stringify({json.dumps(dashboard)}));\n",
2128
+ encoding="utf-8",
2129
+ )
2130
+
2131
+ mutable_marker = tmp_path / "agent-wrapper-ran"
2132
+ mutable_wrapper = tmp_path / "current-comet.sh"
2133
+ mutable_wrapper.write_text("#!/usr/bin/env bash\nexit 99\n", encoding="utf-8")
2134
+
2135
+ native_change = tmp_path / "docs/comet/changes/dashboard-visible-change"
2136
+ native_change.mkdir(parents=True)
2137
+ (native_change / "comet-state.yaml").write_text(
2138
+ "name: dashboard-visible-change\nphase: shape\n", encoding="utf-8"
2139
+ )
2140
+ (tmp_path / ".comet").mkdir()
2141
+ (tmp_path / ".comet" / "config.yaml").write_text(
2142
+ "schema: comet.project.v1\ndefault_workflow: native\nworkflows:\n - native\nnative:\n artifact_root: docs\n",
2143
+ encoding="utf-8",
2144
+ )
2145
+ evidence = tmp_path / ".cache/comet-native-eval"
2146
+ write_json(
2147
+ evidence / "cli-after.json",
2148
+ {"command": "status", "exitCode": 0, "data": projection},
2149
+ )
2150
+ write_json(
2151
+ evidence / "native-tree-after.json",
2152
+ {"files": validator._current_native_manifest()},
2153
+ )
2154
+
2155
+ real_run = validator.subprocess.run
2156
+
2157
+ def run_process(command, *args, **kwargs):
2158
+ if command[0] == "bash":
2159
+ mutable_marker.write_text("agent", encoding="utf-8")
2160
+ return validator.subprocess.CompletedProcess(command, 0, json.dumps(dashboard), "")
2161
+ return real_run(command, *args, **kwargs)
2162
+
2163
+ monkeypatch.setattr(validator.subprocess, "run", run_process)
2164
+
2165
+ result = validator.check_live_dashboard_and_tree()
2166
+
2167
+ assert result["status"] == "passed", result
2168
+ assert not mutable_marker.exists()