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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (699) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +209 -74
  3. package/assets/manifest.json +14 -5
  4. package/assets/skills/comet/SKILL.md +17 -282
  5. package/assets/skills/comet/reference/comet-yaml-fields.md +1 -1
  6. package/assets/skills/comet/reference/context-recovery.md +3 -3
  7. package/assets/skills/comet/reference/intent-frame.md +2 -2
  8. package/assets/skills/comet/reference/scripts.md +2 -2
  9. package/assets/skills/comet/rules/comet-workflow-guard.en.md +32 -0
  10. package/assets/skills/comet/rules/comet-workflow-guard.md +32 -0
  11. package/assets/skills/comet/scripts/comet-entry-runtime.mjs +7855 -0
  12. package/assets/skills/comet/scripts/comet-hook-router.mjs +10336 -0
  13. package/assets/skills/comet/scripts/comet-runtime.mjs +615 -501
  14. package/assets/skills/comet-any/SKILL.md +4 -4
  15. package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
  16. package/assets/skills/comet-any/reference/bundle-authoring.md +1 -1
  17. package/assets/skills/comet-any/reference/subagents/reference-author.md +1 -1
  18. package/assets/skills/comet-any/reference/subagents/script-author.md +1 -1
  19. package/assets/skills/comet-any/reference/subagents/skill-core-author.md +1 -1
  20. package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +2 -2
  21. package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +3 -3
  22. package/assets/skills/comet-archive/SKILL.md +1 -2
  23. package/assets/skills/comet-build/SKILL.md +1 -1
  24. package/assets/skills/comet-classic/SKILL.md +293 -0
  25. package/assets/skills/comet-design/SKILL.md +1 -1
  26. package/assets/skills/comet-hotfix/SKILL.md +4 -4
  27. package/assets/skills/comet-native/SKILL.md +257 -0
  28. package/assets/skills/comet-native/reference/artifacts.md +204 -0
  29. package/assets/skills/comet-native/reference/commands.md +118 -0
  30. package/assets/skills/comet-native/reference/recovery.md +143 -0
  31. package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
  32. package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +28969 -0
  33. package/assets/skills/comet-open/SKILL.md +4 -4
  34. package/assets/skills/comet-tweak/SKILL.md +7 -7
  35. package/assets/skills-zh/comet/SKILL.md +17 -270
  36. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +1 -1
  37. package/assets/skills-zh/comet/reference/context-recovery.md +3 -3
  38. package/assets/skills-zh/comet/reference/intent-frame.md +2 -2
  39. package/assets/skills-zh/comet/reference/scripts.md +2 -2
  40. package/assets/skills-zh/comet-any/SKILL.md +4 -4
  41. package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
  42. package/assets/skills-zh/comet-any/reference/bundle-authoring.md +1 -1
  43. package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +1 -1
  44. package/assets/skills-zh/comet-any/reference/subagents/script-author.md +1 -1
  45. package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +1 -1
  46. package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +2 -2
  47. package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +3 -3
  48. package/assets/skills-zh/comet-archive/SKILL.md +1 -2
  49. package/assets/skills-zh/comet-build/SKILL.md +1 -1
  50. package/assets/skills-zh/comet-classic/SKILL.md +281 -0
  51. package/assets/skills-zh/comet-design/SKILL.md +1 -1
  52. package/assets/skills-zh/comet-hotfix/SKILL.md +4 -4
  53. package/assets/skills-zh/comet-native/SKILL.md +257 -0
  54. package/assets/skills-zh/comet-native/reference/artifacts.md +206 -0
  55. package/assets/skills-zh/comet-native/reference/commands.md +118 -0
  56. package/assets/skills-zh/comet-native/reference/recovery.md +143 -0
  57. package/assets/skills-zh/comet-open/SKILL.md +4 -4
  58. package/assets/skills-zh/comet-tweak/SKILL.md +7 -7
  59. package/dist/app/cli/index.js +59 -13
  60. package/dist/app/cli/index.js.map +1 -1
  61. package/dist/app/commands/command-result.d.ts +6 -0
  62. package/dist/app/commands/command-result.d.ts.map +1 -0
  63. package/dist/app/commands/command-result.js +4 -0
  64. package/dist/app/commands/command-result.js.map +1 -0
  65. package/dist/app/commands/doctor.d.ts +1 -0
  66. package/dist/app/commands/doctor.d.ts.map +1 -1
  67. package/dist/app/commands/doctor.js +201 -26
  68. package/dist/app/commands/doctor.js.map +1 -1
  69. package/dist/app/commands/eval.d.ts +3 -1
  70. package/dist/app/commands/eval.d.ts.map +1 -1
  71. package/dist/app/commands/eval.js +17 -7
  72. package/dist/app/commands/eval.js.map +1 -1
  73. package/dist/app/commands/i18n.d.ts +1 -1
  74. package/dist/app/commands/i18n.d.ts.map +1 -1
  75. package/dist/app/commands/i18n.js +6 -2
  76. package/dist/app/commands/i18n.js.map +1 -1
  77. package/dist/app/commands/init.d.ts +10 -2
  78. package/dist/app/commands/init.d.ts.map +1 -1
  79. package/dist/app/commands/init.js +331 -50
  80. package/dist/app/commands/init.js.map +1 -1
  81. package/dist/app/commands/native.d.ts +2 -0
  82. package/dist/app/commands/native.d.ts.map +1 -0
  83. package/dist/app/commands/native.js +10 -0
  84. package/dist/app/commands/native.js.map +1 -0
  85. package/dist/app/commands/project-scope-selection.d.ts.map +1 -1
  86. package/dist/app/commands/project-scope-selection.js +2 -0
  87. package/dist/app/commands/project-scope-selection.js.map +1 -1
  88. package/dist/app/commands/resume-probe.d.ts.map +1 -1
  89. package/dist/app/commands/resume-probe.js +8 -2
  90. package/dist/app/commands/resume-probe.js.map +1 -1
  91. package/dist/app/commands/status.d.ts +0 -32
  92. package/dist/app/commands/status.d.ts.map +1 -1
  93. package/dist/app/commands/status.js +44 -177
  94. package/dist/app/commands/status.js.map +1 -1
  95. package/dist/app/commands/update.d.ts +20 -4
  96. package/dist/app/commands/update.d.ts.map +1 -1
  97. package/dist/app/commands/update.js +698 -90
  98. package/dist/app/commands/update.js.map +1 -1
  99. package/dist/app/commands/workflow.d.ts +6 -0
  100. package/dist/app/commands/workflow.d.ts.map +1 -0
  101. package/dist/app/commands/workflow.js +11 -0
  102. package/dist/app/commands/workflow.js.map +1 -0
  103. package/dist/config/repository-layout.json +21 -1
  104. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
  105. package/dist/domains/bundle/bundle-platform.js +1 -1
  106. package/dist/domains/bundle/bundle-platform.js.map +1 -1
  107. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
  108. package/dist/domains/comet-classic/classic-archive.js +3 -0
  109. package/dist/domains/comet-classic/classic-archive.js.map +1 -1
  110. package/dist/domains/comet-classic/classic-current-change.d.ts +3 -5
  111. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -1
  112. package/dist/domains/comet-classic/classic-current-change.js +31 -57
  113. package/dist/domains/comet-classic/classic-current-change.js.map +1 -1
  114. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
  115. package/dist/domains/comet-classic/classic-guard.js +3 -2
  116. package/dist/domains/comet-classic/classic-guard.js.map +1 -1
  117. package/dist/domains/comet-classic/classic-hook-guard.d.ts +9 -0
  118. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  119. package/dist/domains/comet-classic/classic-hook-guard.js +84 -11
  120. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  121. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -1
  122. package/dist/domains/comet-classic/classic-project-config.js +12 -8
  123. package/dist/domains/comet-classic/classic-project-config.js.map +1 -1
  124. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
  125. package/dist/domains/comet-classic/classic-runtime-run.js +9 -1
  126. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
  127. package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
  128. package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
  129. package/dist/domains/comet-entry/current-selection-repair.js +19 -0
  130. package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
  131. package/dist/domains/comet-entry/current-selection.d.ts +28 -0
  132. package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
  133. package/dist/domains/comet-entry/current-selection.js +116 -0
  134. package/dist/domains/comet-entry/current-selection.js.map +1 -0
  135. package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
  136. package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
  137. package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
  138. package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
  139. package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
  140. package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
  141. package/dist/domains/comet-entry/entry-runtime.js +55 -0
  142. package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
  143. package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
  144. package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
  145. package/dist/domains/comet-entry/hook-adapter.js +202 -0
  146. package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
  147. package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
  148. package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
  149. package/dist/domains/comet-entry/hook-router-entry.js +92 -0
  150. package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
  151. package/dist/domains/comet-entry/hook-router.d.ts +32 -0
  152. package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
  153. package/dist/domains/comet-entry/hook-router.js +133 -0
  154. package/dist/domains/comet-entry/hook-router.js.map +1 -0
  155. package/dist/domains/comet-entry/hook-types.d.ts +20 -0
  156. package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
  157. package/dist/domains/comet-entry/hook-types.js +2 -0
  158. package/dist/domains/comet-entry/hook-types.js.map +1 -0
  159. package/dist/domains/comet-entry/init-workflow.d.ts +16 -0
  160. package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
  161. package/dist/domains/comet-entry/init-workflow.js +103 -0
  162. package/dist/domains/comet-entry/init-workflow.js.map +1 -0
  163. package/dist/domains/comet-entry/project-status.d.ts +3 -0
  164. package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
  165. package/dist/domains/comet-entry/project-status.js +222 -0
  166. package/dist/domains/comet-entry/project-status.js.map +1 -0
  167. package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
  168. package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
  169. package/dist/domains/comet-entry/resolve-entry.js +22 -0
  170. package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
  171. package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
  172. package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
  173. package/dist/domains/comet-entry/resume-probe.js +458 -0
  174. package/dist/domains/comet-entry/resume-probe.js.map +1 -0
  175. package/dist/domains/comet-entry/types.d.ts +59 -0
  176. package/dist/domains/comet-entry/types.d.ts.map +1 -0
  177. package/dist/domains/comet-entry/types.js +2 -0
  178. package/dist/domains/comet-entry/types.js.map +1 -0
  179. package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
  180. package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
  181. package/dist/domains/comet-entry/workflow-resolution.js +16 -0
  182. package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
  183. package/dist/domains/comet-native/index.d.ts +35 -0
  184. package/dist/domains/comet-native/index.d.ts.map +1 -0
  185. package/dist/domains/comet-native/index.js +35 -0
  186. package/dist/domains/comet-native/index.js.map +1 -0
  187. package/dist/domains/comet-native/native-acceptance.d.ts +42 -0
  188. package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
  189. package/dist/domains/comet-native/native-acceptance.js +503 -0
  190. package/dist/domains/comet-native/native-acceptance.js.map +1 -0
  191. package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
  192. package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
  193. package/dist/domains/comet-native/native-archive-content.js +159 -0
  194. package/dist/domains/comet-native/native-archive-content.js.map +1 -0
  195. package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
  196. package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
  197. package/dist/domains/comet-native/native-archive-inspection.js +94 -0
  198. package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
  199. package/dist/domains/comet-native/native-archive-preflight.d.ts +52 -0
  200. package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
  201. package/dist/domains/comet-native/native-archive-preflight.js +214 -0
  202. package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
  203. package/dist/domains/comet-native/native-archive-transaction.d.ts +19 -0
  204. package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
  205. package/dist/domains/comet-native/native-archive-transaction.js +1180 -0
  206. package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
  207. package/dist/domains/comet-native/native-archive.d.ts +36 -0
  208. package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
  209. package/dist/domains/comet-native/native-archive.js +403 -0
  210. package/dist/domains/comet-native/native-archive.js.map +1 -0
  211. package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
  212. package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
  213. package/dist/domains/comet-native/native-artifacts.js +204 -0
  214. package/dist/domains/comet-native/native-artifacts.js.map +1 -0
  215. package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
  216. package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
  217. package/dist/domains/comet-native/native-atomic-file.js +179 -0
  218. package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
  219. package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
  220. package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
  221. package/dist/domains/comet-native/native-bounded-file.js +184 -0
  222. package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
  223. package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
  224. package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
  225. package/dist/domains/comet-native/native-build-evidence.js +257 -0
  226. package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
  227. package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
  228. package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
  229. package/dist/domains/comet-native/native-canonical-hash.js +100 -0
  230. package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
  231. package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
  232. package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
  233. package/dist/domains/comet-native/native-change-recovery.js +15 -0
  234. package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
  235. package/dist/domains/comet-native/native-change.d.ts +61 -0
  236. package/dist/domains/comet-native/native-change.d.ts.map +1 -0
  237. package/dist/domains/comet-native/native-change.js +696 -0
  238. package/dist/domains/comet-native/native-change.js.map +1 -0
  239. package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
  240. package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
  241. package/dist/domains/comet-native/native-check-receipt-model.js +347 -0
  242. package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
  243. package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
  244. package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
  245. package/dist/domains/comet-native/native-check-receipt-storage.js +200 -0
  246. package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
  247. package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
  248. package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
  249. package/dist/domains/comet-native/native-check-receipt.js +449 -0
  250. package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
  251. package/dist/domains/comet-native/native-check.d.ts +18 -0
  252. package/dist/domains/comet-native/native-check.d.ts.map +1 -0
  253. package/dist/domains/comet-native/native-check.js +29 -0
  254. package/dist/domains/comet-native/native-check.js.map +1 -0
  255. package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
  256. package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
  257. package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
  258. package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
  259. package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
  260. package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
  261. package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
  262. package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
  263. package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
  264. package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
  265. package/dist/domains/comet-native/native-cli-entry.js +18 -0
  266. package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
  267. package/dist/domains/comet-native/native-cli.d.ts +7 -0
  268. package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
  269. package/dist/domains/comet-native/native-cli.js +642 -0
  270. package/dist/domains/comet-native/native-cli.js.map +1 -0
  271. package/dist/domains/comet-native/native-config.d.ts +15 -0
  272. package/dist/domains/comet-native/native-config.d.ts.map +1 -0
  273. package/dist/domains/comet-native/native-config.js +281 -0
  274. package/dist/domains/comet-native/native-config.js.map +1 -0
  275. package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
  276. package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
  277. package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
  278. package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
  279. package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
  280. package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
  281. package/dist/domains/comet-native/native-conflict-radar.js +326 -0
  282. package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
  283. package/dist/domains/comet-native/native-continuation.d.ts +9 -0
  284. package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
  285. package/dist/domains/comet-native/native-continuation.js +146 -0
  286. package/dist/domains/comet-native/native-continuation.js.map +1 -0
  287. package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
  288. package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
  289. package/dist/domains/comet-native/native-contract-files.js +66 -0
  290. package/dist/domains/comet-native/native-contract-files.js.map +1 -0
  291. package/dist/domains/comet-native/native-contract.d.ts +41 -0
  292. package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
  293. package/dist/domains/comet-native/native-contract.js +141 -0
  294. package/dist/domains/comet-native/native-contract.js.map +1 -0
  295. package/dist/domains/comet-native/native-diagnostics.d.ts +18 -0
  296. package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
  297. package/dist/domains/comet-native/native-diagnostics.js +522 -0
  298. package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
  299. package/dist/domains/comet-native/native-doctor.d.ts +12 -0
  300. package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
  301. package/dist/domains/comet-native/native-doctor.js +768 -0
  302. package/dist/domains/comet-native/native-doctor.js.map +1 -0
  303. package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
  304. package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
  305. package/dist/domains/comet-native/native-evidence-retention.js +887 -0
  306. package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
  307. package/dist/domains/comet-native/native-evidence-storage.d.ts +41 -0
  308. package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
  309. package/dist/domains/comet-native/native-evidence-storage.js +355 -0
  310. package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
  311. package/dist/domains/comet-native/native-file-identity.d.ts +9 -0
  312. package/dist/domains/comet-native/native-file-identity.d.ts.map +1 -0
  313. package/dist/domains/comet-native/native-file-identity.js +21 -0
  314. package/dist/domains/comet-native/native-file-identity.js.map +1 -0
  315. package/dist/domains/comet-native/native-findings.d.ts +8 -0
  316. package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
  317. package/dist/domains/comet-native/native-findings.js +238 -0
  318. package/dist/domains/comet-native/native-findings.js.map +1 -0
  319. package/dist/domains/comet-native/native-guards.d.ts +7 -0
  320. package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
  321. package/dist/domains/comet-native/native-guards.js +126 -0
  322. package/dist/domains/comet-native/native-guards.js.map +1 -0
  323. package/dist/domains/comet-native/native-hash.d.ts +3 -0
  324. package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
  325. package/dist/domains/comet-native/native-hash.js +12 -0
  326. package/dist/domains/comet-native/native-hash.js.map +1 -0
  327. package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
  328. package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
  329. package/dist/domains/comet-native/native-hook-guard.js +154 -0
  330. package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
  331. package/dist/domains/comet-native/native-lock.d.ts +47 -0
  332. package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
  333. package/dist/domains/comet-native/native-lock.js +398 -0
  334. package/dist/domains/comet-native/native-lock.js.map +1 -0
  335. package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
  336. package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
  337. package/dist/domains/comet-native/native-mutation-lock.js +66 -0
  338. package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
  339. package/dist/domains/comet-native/native-paths.d.ts +10 -0
  340. package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
  341. package/dist/domains/comet-native/native-paths.js +171 -0
  342. package/dist/domains/comet-native/native-paths.js.map +1 -0
  343. package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
  344. package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
  345. package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
  346. package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
  347. package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
  348. package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
  349. package/dist/domains/comet-native/native-protected-file.js +510 -0
  350. package/dist/domains/comet-native/native-protected-file.js.map +1 -0
  351. package/dist/domains/comet-native/native-redaction.d.ts +2 -0
  352. package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
  353. package/dist/domains/comet-native/native-redaction.js +18 -0
  354. package/dist/domains/comet-native/native-redaction.js.map +1 -0
  355. package/dist/domains/comet-native/native-repair-integration.d.ts +42 -0
  356. package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
  357. package/dist/domains/comet-native/native-repair-integration.js +184 -0
  358. package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
  359. package/dist/domains/comet-native/native-repair-runtime.d.ts +73 -0
  360. package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
  361. package/dist/domains/comet-native/native-repair-runtime.js +509 -0
  362. package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
  363. package/dist/domains/comet-native/native-repair-stagnation.d.ts +85 -0
  364. package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
  365. package/dist/domains/comet-native/native-repair-stagnation.js +256 -0
  366. package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
  367. package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
  368. package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
  369. package/dist/domains/comet-native/native-resume-view.js +105 -0
  370. package/dist/domains/comet-native/native-resume-view.js.map +1 -0
  371. package/dist/domains/comet-native/native-revision.d.ts +20 -0
  372. package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
  373. package/dist/domains/comet-native/native-revision.js +32 -0
  374. package/dist/domains/comet-native/native-revision.js.map +1 -0
  375. package/dist/domains/comet-native/native-root-move.d.ts +20 -0
  376. package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
  377. package/dist/domains/comet-native/native-root-move.js +812 -0
  378. package/dist/domains/comet-native/native-root-move.js.map +1 -0
  379. package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
  380. package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
  381. package/dist/domains/comet-native/native-run-consistency.js +136 -0
  382. package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
  383. package/dist/domains/comet-native/native-run-store.d.ts +41 -0
  384. package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
  385. package/dist/domains/comet-native/native-run-store.js +452 -0
  386. package/dist/domains/comet-native/native-run-store.js.map +1 -0
  387. package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
  388. package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
  389. package/dist/domains/comet-native/native-runtime-package.js +72 -0
  390. package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
  391. package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
  392. package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
  393. package/dist/domains/comet-native/native-schema-migration.js +899 -0
  394. package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
  395. package/dist/domains/comet-native/native-selection.d.ts +12 -0
  396. package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
  397. package/dist/domains/comet-native/native-selection.js +52 -0
  398. package/dist/domains/comet-native/native-selection.js.map +1 -0
  399. package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
  400. package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
  401. package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
  402. package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
  403. package/dist/domains/comet-native/native-snapshot.d.ts +74 -0
  404. package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
  405. package/dist/domains/comet-native/native-snapshot.js +2312 -0
  406. package/dist/domains/comet-native/native-snapshot.js.map +1 -0
  407. package/dist/domains/comet-native/native-specs.d.ts +12 -0
  408. package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
  409. package/dist/domains/comet-native/native-specs.js +270 -0
  410. package/dist/domains/comet-native/native-specs.js.map +1 -0
  411. package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
  412. package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
  413. package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
  414. package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
  415. package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
  416. package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
  417. package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
  418. package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
  419. package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
  420. package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
  421. package/dist/domains/comet-native/native-trajectory.js +27 -0
  422. package/dist/domains/comet-native/native-trajectory.js.map +1 -0
  423. package/dist/domains/comet-native/native-transaction.d.ts +45 -0
  424. package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
  425. package/dist/domains/comet-native/native-transaction.js +846 -0
  426. package/dist/domains/comet-native/native-transaction.js.map +1 -0
  427. package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
  428. package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
  429. package/dist/domains/comet-native/native-transition-evidence.js +20 -0
  430. package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
  431. package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
  432. package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
  433. package/dist/domains/comet-native/native-transition-journal.js +819 -0
  434. package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
  435. package/dist/domains/comet-native/native-transitions.d.ts +13 -0
  436. package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
  437. package/dist/domains/comet-native/native-transitions.js +632 -0
  438. package/dist/domains/comet-native/native-transitions.js.map +1 -0
  439. package/dist/domains/comet-native/native-types.d.ts +547 -0
  440. package/dist/domains/comet-native/native-types.d.ts.map +1 -0
  441. package/dist/domains/comet-native/native-types.js +8 -0
  442. package/dist/domains/comet-native/native-types.js.map +1 -0
  443. package/dist/domains/comet-native/native-verification-evidence.d.ts +86 -0
  444. package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
  445. package/dist/domains/comet-native/native-verification-evidence.js +480 -0
  446. package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
  447. package/dist/domains/comet-native/native-verification-runtime.d.ts +58 -0
  448. package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
  449. package/dist/domains/comet-native/native-verification-runtime.js +321 -0
  450. package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
  451. package/dist/domains/comet-native/native-verification-scope.d.ts +117 -0
  452. package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
  453. package/dist/domains/comet-native/native-verification-scope.js +1040 -0
  454. package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
  455. package/dist/domains/comet-native/native-workspace.d.ts +46 -0
  456. package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
  457. package/dist/domains/comet-native/native-workspace.js +276 -0
  458. package/dist/domains/comet-native/native-workspace.js.map +1 -0
  459. package/dist/domains/dashboard/collector.d.ts.map +1 -1
  460. package/dist/domains/dashboard/collector.js +9 -1
  461. package/dist/domains/dashboard/collector.js.map +1 -1
  462. package/dist/domains/dashboard/native-adapter.d.ts +157 -0
  463. package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
  464. package/dist/domains/dashboard/native-adapter.js +302 -0
  465. package/dist/domains/dashboard/native-adapter.js.map +1 -0
  466. package/dist/domains/dashboard/native-collector.d.ts +6 -0
  467. package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
  468. package/dist/domains/dashboard/native-collector.js +285 -0
  469. package/dist/domains/dashboard/native-collector.js.map +1 -0
  470. package/dist/domains/dashboard/types.d.ts +5 -0
  471. package/dist/domains/dashboard/types.d.ts.map +1 -1
  472. package/dist/domains/dashboard/web/assets/{arc-TGVUG2WN.js → arc-CxdiLJ50.js} +1 -1
  473. package/dist/domains/dashboard/web/assets/{architectureDiagram-3BPJPVTR-ASHmiHoP.js → architectureDiagram-3BPJPVTR-D5YCQu4e.js} +1 -1
  474. package/dist/domains/dashboard/web/assets/{blockDiagram-GPEHLZMM-CwASxBKe.js → blockDiagram-GPEHLZMM-8NfdCOQ8.js} +1 -1
  475. package/dist/domains/dashboard/web/assets/{c4Diagram-AAUBKEIU-BU8z_WNk.js → c4Diagram-AAUBKEIU-B3cFnNT7.js} +1 -1
  476. package/dist/domains/dashboard/web/assets/channel-B6AFly29.js +1 -0
  477. package/dist/domains/dashboard/web/assets/{chunk-2J33WTMH-CBGlUx4_.js → chunk-2J33WTMH-CBNfW-Dr.js} +1 -1
  478. package/dist/domains/dashboard/web/assets/{chunk-4BX2VUAB-CS-iGcFz.js → chunk-4BX2VUAB-vWyemRBr.js} +1 -1
  479. package/dist/domains/dashboard/web/assets/{chunk-55IACEB6-BUtCVJat.js → chunk-55IACEB6-H6haOo2C.js} +1 -1
  480. package/dist/domains/dashboard/web/assets/{chunk-727SXJPM-C94tj_pf.js → chunk-727SXJPM-D02UjGND.js} +1 -1
  481. package/dist/domains/dashboard/web/assets/{chunk-AQP2D5EJ-BFOKcpdG.js → chunk-AQP2D5EJ-wKsbOw_T.js} +1 -1
  482. package/dist/domains/dashboard/web/assets/{chunk-FMBD7UC4-Dmx8B-st.js → chunk-FMBD7UC4-eYFEZimP.js} +1 -1
  483. package/dist/domains/dashboard/web/assets/{chunk-ND2GUHAM-DYV00CNn.js → chunk-ND2GUHAM-fMaIDDI2.js} +1 -1
  484. package/dist/domains/dashboard/web/assets/{chunk-QZHKN3VN-DMJJyQnw.js → chunk-QZHKN3VN-C9rhF6Hm.js} +1 -1
  485. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BcnrxOTt.js +1 -0
  486. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BcnrxOTt.js +1 -0
  487. package/dist/domains/dashboard/web/assets/{cose-bilkent-S5V4N54A-P4nE2rea.js → cose-bilkent-S5V4N54A-CbaShPub.js} +1 -1
  488. package/dist/domains/dashboard/web/assets/{cynefin-VYW2F7L2-C-R1HXDv.js → cynefin-VYW2F7L2-DN4emAQv.js} +1 -1
  489. package/dist/domains/dashboard/web/assets/{dagre-BM42HDAG-BH8d-C9z.js → dagre-BM42HDAG-BpSzbk_V.js} +1 -1
  490. package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
  491. package/dist/domains/dashboard/web/assets/{diagram-2AECGRRQ-DpXTgQIH.js → diagram-2AECGRRQ-CfXwGGpQ.js} +1 -1
  492. package/dist/domains/dashboard/web/assets/{diagram-5GNKFQAL-DSiFJzSw.js → diagram-5GNKFQAL-DMp0Zmot.js} +1 -1
  493. package/dist/domains/dashboard/web/assets/{diagram-KO2AKTUF-DULMkben.js → diagram-KO2AKTUF-C7ZvofsM.js} +1 -1
  494. package/dist/domains/dashboard/web/assets/{diagram-LMA3HP47-Pi8m_NO9.js → diagram-LMA3HP47-BjmxFnap.js} +1 -1
  495. package/dist/domains/dashboard/web/assets/{diagram-OG6HWLK6-BSe6bCWm.js → diagram-OG6HWLK6-DFBG1Iqy.js} +1 -1
  496. package/dist/domains/dashboard/web/assets/{erDiagram-TEJ5UH35-zb-FEcbq.js → erDiagram-TEJ5UH35-MpNT7dzt.js} +1 -1
  497. package/dist/domains/dashboard/web/assets/{flowDiagram-I6XJVG4X-Dr-Gk0z2.js → flowDiagram-I6XJVG4X-_1wAR6c1.js} +1 -1
  498. package/dist/domains/dashboard/web/assets/{ganttDiagram-6RSMTGT7-qs6Zb2A6.js → ganttDiagram-6RSMTGT7-DJKjDeWl.js} +1 -1
  499. package/dist/domains/dashboard/web/assets/{gitGraphDiagram-PVQCEYII-BQ314orT.js → gitGraphDiagram-PVQCEYII-BL7yUEn-.js} +1 -1
  500. package/dist/domains/dashboard/web/assets/index-CjE9mHGb.js +24 -0
  501. package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
  502. package/dist/domains/dashboard/web/assets/{infoDiagram-5YYISTIA-O0bQp98A.js → infoDiagram-5YYISTIA-Bt5fqrOd.js} +1 -1
  503. package/dist/domains/dashboard/web/assets/{ishikawaDiagram-YF4QCWOH-BPC7wbKh.js → ishikawaDiagram-YF4QCWOH-COCMcjBM.js} +1 -1
  504. package/dist/domains/dashboard/web/assets/{journeyDiagram-JHISSGLW-ohViOd4b.js → journeyDiagram-JHISSGLW-DGcpcWny.js} +1 -1
  505. package/dist/domains/dashboard/web/assets/{kanban-definition-UN3LZRKU-CHleNdbG.js → kanban-definition-UN3LZRKU-QSBNsWMP.js} +1 -1
  506. package/dist/domains/dashboard/web/assets/{linear-CyqiW--Q.js → linear-9uyeeBZf.js} +1 -1
  507. package/dist/domains/dashboard/web/assets/{mermaid.core-qS9XvtaK.js → mermaid.core-CkNdB471.js} +4 -4
  508. package/dist/domains/dashboard/web/assets/{mindmap-definition-RKZ34NQL-oaGkqO9l.js → mindmap-definition-RKZ34NQL-CiNxI0gP.js} +1 -1
  509. package/dist/domains/dashboard/web/assets/{pieDiagram-4H26LBE5-CPcB-AFh.js → pieDiagram-4H26LBE5-BLJ6QnRO.js} +1 -1
  510. package/dist/domains/dashboard/web/assets/{quadrantDiagram-W4KKPZXB-LFy52Qtj.js → quadrantDiagram-W4KKPZXB-CflW-eFH.js} +1 -1
  511. package/dist/domains/dashboard/web/assets/{requirementDiagram-4Y6WPE33-BdjeaYP_.js → requirementDiagram-4Y6WPE33-B9HLmRWH.js} +1 -1
  512. package/dist/domains/dashboard/web/assets/{sankeyDiagram-5OEKKPKP-DDJ4styL.js → sankeyDiagram-5OEKKPKP-6xnco5k5.js} +1 -1
  513. package/dist/domains/dashboard/web/assets/{sequenceDiagram-3UESZ5HK-BL5bFNoz.js → sequenceDiagram-3UESZ5HK-Dp1rujNZ.js} +1 -1
  514. package/dist/domains/dashboard/web/assets/{stateDiagram-AJRCARHV-BNUfikui.js → stateDiagram-AJRCARHV-C1Xc90ek.js} +1 -1
  515. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-p-qmzXyE.js +1 -0
  516. package/dist/domains/dashboard/web/assets/{timeline-definition-PNZ67QCA--ps2uu6L.js → timeline-definition-PNZ67QCA-g9s-m5Z4.js} +1 -1
  517. package/dist/domains/dashboard/web/assets/{vennDiagram-CIIHVFJN-C2q8q26c.js → vennDiagram-CIIHVFJN-rkEyhyCc.js} +1 -1
  518. package/dist/domains/dashboard/web/assets/{wardleyDiagram-YWT4CUSO-BUH9gXqd.js → wardleyDiagram-YWT4CUSO-CJLrWGXc.js} +1 -1
  519. package/dist/domains/dashboard/web/assets/{xychartDiagram-2RQKCTM6-B-DielEy.js → xychartDiagram-2RQKCTM6-BxJvPNqo.js} +1 -1
  520. package/dist/domains/dashboard/web/index.html +16 -16
  521. package/dist/domains/engine/storage-layout.d.ts +14 -0
  522. package/dist/domains/engine/storage-layout.d.ts.map +1 -0
  523. package/dist/domains/engine/storage-layout.js +32 -0
  524. package/dist/domains/engine/storage-layout.js.map +1 -0
  525. package/dist/domains/engine/storage-run.d.ts +9 -0
  526. package/dist/domains/engine/storage-run.d.ts.map +1 -0
  527. package/dist/domains/engine/storage-run.js +116 -0
  528. package/dist/domains/engine/storage-run.js.map +1 -0
  529. package/dist/domains/factory/package.d.ts.map +1 -1
  530. package/dist/domains/factory/package.js +5 -3
  531. package/dist/domains/factory/package.js.map +1 -1
  532. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  533. package/dist/domains/integrations/openspec.js +8 -6
  534. package/dist/domains/integrations/openspec.js.map +1 -1
  535. package/dist/domains/skill/platform-inspect.d.ts +6 -2
  536. package/dist/domains/skill/platform-inspect.d.ts.map +1 -1
  537. package/dist/domains/skill/platform-inspect.js +52 -8
  538. package/dist/domains/skill/platform-inspect.js.map +1 -1
  539. package/dist/domains/skill/platform-install.d.ts +18 -7
  540. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  541. package/dist/domains/skill/platform-install.js +338 -71
  542. package/dist/domains/skill/platform-install.js.map +1 -1
  543. package/dist/domains/skill/project-instructions.d.ts.map +1 -1
  544. package/dist/domains/skill/project-instructions.js +12 -6
  545. package/dist/domains/skill/project-instructions.js.map +1 -1
  546. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  547. package/dist/domains/skill/uninstall.js +15 -3
  548. package/dist/domains/skill/uninstall.js.map +1 -1
  549. package/dist/domains/workflow-contract/builtins.d.ts +6 -0
  550. package/dist/domains/workflow-contract/builtins.d.ts.map +1 -1
  551. package/dist/domains/workflow-contract/builtins.js +137 -0
  552. package/dist/domains/workflow-contract/builtins.js.map +1 -1
  553. package/dist/domains/workflow-contract/index.d.ts +3 -1
  554. package/dist/domains/workflow-contract/index.d.ts.map +1 -1
  555. package/dist/domains/workflow-contract/index.js +2 -1
  556. package/dist/domains/workflow-contract/index.js.map +1 -1
  557. package/dist/domains/workflow-contract/normalize.d.ts.map +1 -1
  558. package/dist/domains/workflow-contract/normalize.js +28 -10
  559. package/dist/domains/workflow-contract/normalize.js.map +1 -1
  560. package/dist/domains/workflow-contract/project-config.d.ts +7 -0
  561. package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
  562. package/dist/domains/workflow-contract/project-config.js +110 -0
  563. package/dist/domains/workflow-contract/project-config.js.map +1 -0
  564. package/dist/domains/workflow-contract/types.d.ts +4 -2
  565. package/dist/domains/workflow-contract/types.d.ts.map +1 -1
  566. package/dist/domains/workflow-contract/validation.d.ts.map +1 -1
  567. package/dist/domains/workflow-contract/validation.js +14 -5
  568. package/dist/domains/workflow-contract/validation.js.map +1 -1
  569. package/dist/platform/install/detect.d.ts +3 -1
  570. package/dist/platform/install/detect.d.ts.map +1 -1
  571. package/dist/platform/install/detect.js +4 -1
  572. package/dist/platform/install/detect.js.map +1 -1
  573. package/dist/platform/install/project-registry.js +2 -2
  574. package/dist/platform/install/project-registry.js.map +1 -1
  575. package/dist/platform/paths/repository-layout.d.ts +16 -0
  576. package/dist/platform/paths/repository-layout.d.ts.map +1 -1
  577. package/dist/platform/paths/repository-layout.js.map +1 -1
  578. package/eval/local/README.md +50 -0
  579. package/eval/local/scripts/compare_baselines.py +127 -1
  580. package/eval/local/scripts/regression_check.py +3 -4
  581. package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +27 -0
  582. package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
  583. package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
  584. package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
  585. package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
  586. package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
  587. package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +27 -0
  588. package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
  589. package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
  590. package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
  591. package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
  592. package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
  593. package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
  594. package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +28 -0
  595. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
  596. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
  597. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
  598. package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
  599. package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
  600. package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
  601. package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
  602. package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
  603. package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
  604. package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +26 -0
  605. package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
  606. package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
  607. package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
  608. package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
  609. package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
  610. package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
  611. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +27 -0
  612. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
  613. package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
  614. package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
  615. package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
  616. package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
  617. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +27 -0
  618. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
  619. package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
  620. package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
  621. package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
  622. package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
  623. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +27 -0
  624. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
  625. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
  626. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
  627. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
  628. package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
  629. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
  630. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +27 -0
  631. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
  632. package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
  633. package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
  634. package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
  635. package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
  636. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
  637. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +31 -0
  638. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
  639. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
  640. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
  641. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
  642. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
  643. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
  644. package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +469 -0
  645. package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +27 -0
  646. package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
  647. package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
  648. package/eval/local/tasks/comet-native-workflow/instruction.md +14 -0
  649. package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
  650. package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +149 -0
  651. package/eval/local/tasks/index.yaml +61 -0
  652. package/eval/local/tests/conftest.py +407 -22
  653. package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
  654. package/eval/local/tests/scaffold/test_conftest_helpers.py +187 -7
  655. package/eval/local/tests/scaffold/test_logging.py +135 -1
  656. package/eval/local/tests/scaffold/test_manifests.py +2 -0
  657. package/eval/local/tests/scaffold/test_native_aligned_eval.py +346 -0
  658. package/eval/local/tests/scaffold/test_native_wave_evaluations.py +1889 -0
  659. package/eval/local/tests/scaffold/test_profiles.py +33 -0
  660. package/eval/local/tests/scaffold/test_sample_quality.py +57 -0
  661. package/eval/local/tests/scaffold/test_tasks.py +377 -1
  662. package/eval/local/tests/scaffold/test_treatments.py +59 -13
  663. package/eval/local/tests/scaffold/test_utils.py +277 -4
  664. package/eval/local/tests/tasks/__init__.py +1 -0
  665. package/eval/local/tests/tasks/test_tasks.py +104 -78
  666. package/eval/local/tests/tasks/test_validation_scripts.py +37 -0
  667. package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
  668. package/eval/pyproject.toml +4 -4
  669. package/eval/scaffold/python/aligned_comparison.py +1631 -0
  670. package/eval/scaffold/python/generic_llm_judge.py +3 -1
  671. package/eval/scaffold/python/llm_judge.py +0 -3
  672. package/eval/scaffold/python/logging.py +115 -16
  673. package/eval/scaffold/python/manifests.py +2 -0
  674. package/eval/scaffold/python/native_eval.py +138 -0
  675. package/eval/scaffold/python/pass_at_k.py +0 -1
  676. package/eval/scaffold/python/report_outputs.py +226 -44
  677. package/eval/scaffold/python/sample_quality.py +45 -2
  678. package/eval/scaffold/python/tasks.py +11 -0
  679. package/eval/scaffold/python/utils.py +108 -20
  680. package/eval/scaffold/python/validation/__init__.py +15 -5
  681. package/eval/scaffold/python/validation/comet_workflow.py +10 -5
  682. package/eval/scaffold/python/validation/generic_rubric.py +1 -2
  683. package/eval/scaffold/python/validation/native_wave.py +2154 -0
  684. package/eval/scaffold/python/validation/native_workflow.py +252 -0
  685. package/eval/scaffold/python/validation/rubric.py +0 -2
  686. package/eval/scaffold/shell/completion-point.sh +18 -0
  687. package/eval/scaffold/shell/decision-point.sh +35 -0
  688. package/eval/scaffold/shell/docker.sh +150 -9
  689. package/eval/scaffold/shell/run-claude-loop.sh +57 -27
  690. package/package.json +26 -5
  691. package/dist/domains/dashboard/web/assets/channel-kp6Ng2JJ.js +0 -1
  692. package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-yBDjgMY_.js +0 -1
  693. package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-yBDjgMY_.js +0 -1
  694. package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
  695. package/dist/domains/dashboard/web/assets/index-BLAfkNTu.css +0 -1
  696. package/dist/domains/dashboard/web/assets/index-DtLUOcAW.js +0 -24
  697. package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-DGrsmWts.js +0 -1
  698. package/eval/.env.example +0 -52
  699. package/eval/langsmith/.env.example +0 -16
@@ -12,12 +12,13 @@ Supports pytest-xdist parallel execution via worker coordination.
12
12
  """
13
13
 
14
14
  import json
15
+ import hashlib
15
16
  import os
17
+ import re
16
18
  import shutil
17
19
  import subprocess
18
20
  import tempfile
19
21
  import time
20
- import uuid
21
22
  from contextlib import contextmanager
22
23
  from datetime import datetime
23
24
  from pathlib import Path
@@ -25,9 +26,8 @@ from types import SimpleNamespace
25
26
  from typing import Any
26
27
 
27
28
  import pytest
28
- from dotenv import load_dotenv
29
29
 
30
- from scaffold import run_claude_in_docker, run_node_in_docker, run_python_in_docker, run_shell
30
+ from scaffold import run_claude_in_docker, run_python_in_docker, run_shell
31
31
  from scaffold.python import (
32
32
  ExperimentLogger,
33
33
  TreatmentResult,
@@ -42,6 +42,30 @@ from scaffold.python import (
42
42
  )
43
43
  from scaffold.python.sample_quality import infer_sample_quality
44
44
  from scaffold.python.skill_parser import SCRIPT_EXTENSIONS
45
+ from scaffold.python.utils import run_claude_loop_in_docker
46
+ from scaffold.python.aligned_comparison import (
47
+ EXPECTED_CASE_MATRIX_FILENAME,
48
+ build_execution_identity,
49
+ expected_case_matrix_payload,
50
+ parse_expected_case_matrix,
51
+ )
52
+
53
+
54
+ def _extract_loop_turns(stderr: str | None) -> int | None:
55
+ match = re.search(r"\[loop\] finished after (\d+) turns", stderr or "")
56
+ return int(match.group(1)) if match else None
57
+
58
+
59
+ def _extract_loop_interaction(stderr: str | None) -> dict[str, int | None]:
60
+ source = stderr or ""
61
+ return {
62
+ "actual_turns": _extract_loop_turns(source),
63
+ "decision_points": source.count("[loop] decision point detected"),
64
+ "deterministic_replies": source.count("[loop] deterministic decision reply applied"),
65
+ "completion_signals": source.count("[loop] workflow completion detected"),
66
+ "fresh_resume_boundaries": source.count("[loop] fresh resume boundary detected"),
67
+ }
68
+
45
69
 
46
70
  # =============================================================================
47
71
  # CONSTANTS
@@ -49,6 +73,7 @@ from scaffold.python.skill_parser import SCRIPT_EXTENSIONS
49
73
 
50
74
  PROJECT_ROOT = Path(__file__).parent.parent
51
75
  EVAL_ROOT = PROJECT_ROOT.parent
76
+ REPOSITORY_ROOT = EVAL_ROOT.parent
52
77
 
53
78
  # Shared files for xdist worker coordination
54
79
  XDIST_EXPERIMENT_FILE = PROJECT_ROOT / ".pytest_experiment_id"
@@ -70,6 +95,239 @@ COMET_WORKFLOW_CLAUDE_MD_PATH = (
70
95
  / "CLAUDE.md"
71
96
  )
72
97
 
98
+ CURRENT_COMET_CLI_MARKER = ".include-current-comet-cli"
99
+ CURRENT_COMET_BUILD_SCHEMA = "comet.eval.current-comet-build.v1"
100
+ TRUSTED_NATIVE_RUNTIME_MARKER = ".include-trusted-native-runtime"
101
+ TRUSTED_NATIVE_RUNTIME_SCHEMA = "comet.eval.trusted-native-runtime.v1"
102
+ MODEL_EXECUTION_ENV_KEYS = (
103
+ "ANTHROPIC_BASE_URL",
104
+ "ANTHROPIC_MODEL",
105
+ "ANTHROPIC_DEFAULT_HAIKU_MODEL",
106
+ "ANTHROPIC_DEFAULT_SONNET_MODEL",
107
+ "ANTHROPIC_DEFAULT_OPUS_MODEL",
108
+ "ANTHROPIC_DEFAULT_OPUS_MODEL_NAME",
109
+ "ANTHROPIC_DEFAULT_SONNET_MODEL_NAME",
110
+ "CLAUDE_CODE_SUBAGENT_MODEL",
111
+ )
112
+
113
+
114
+ def _selected_claude_model() -> str | None:
115
+ """Resolve the exact model selector passed to Claude without persisting it."""
116
+ return os.environ.get("BENCH_CC_MODEL") or os.environ.get("ANTHROPIC_MODEL")
117
+
118
+
119
+ def _model_execution_config() -> dict[str, str | None]:
120
+ """Return only model-routing values; credentials are deliberately excluded."""
121
+ return {key: os.environ.get(key) for key in MODEL_EXECUTION_ENV_KEYS}
122
+
123
+
124
+ def _capture_execution_identity(test_dir: Path, *, model: str | None, interaction):
125
+ """Capture an immutable image/tool identity and a safe report payload."""
126
+ result = run_shell(
127
+ "docker.sh",
128
+ "execution-identity",
129
+ str(test_dir),
130
+ timeout=300,
131
+ check=False,
132
+ )
133
+ if result.returncode != 0:
134
+ raise RuntimeError("Could not verify eval Docker/Claude execution identity")
135
+ try:
136
+ raw = json.loads(result.stdout)
137
+ except (TypeError, json.JSONDecodeError) as error:
138
+ raise RuntimeError("Eval execution identity output is not valid JSON") from error
139
+ report_identity = build_execution_identity(
140
+ raw,
141
+ model=model,
142
+ model_config=_model_execution_config(),
143
+ interaction=interaction,
144
+ )
145
+ return SimpleNamespace(
146
+ runtime_image_id=raw["runtime_image_id"],
147
+ report_identity=report_identity,
148
+ )
149
+
150
+
151
+ def _regular_tree_files(root: Path) -> list[Path]:
152
+ files: list[Path] = []
153
+ for path in sorted(root.rglob("*")):
154
+ if path.is_symlink():
155
+ raise ValueError(f"Current Comet snapshot source contains a symbolic link: {path}")
156
+ if path.is_file():
157
+ files.append(path)
158
+ return files
159
+
160
+
161
+ def _tree_digest(root: Path, files: list[Path] | None = None) -> tuple[str, int]:
162
+ digest = hashlib.sha256()
163
+ selected = files if files is not None else _regular_tree_files(root)
164
+ for path in selected:
165
+ relative = path.relative_to(root).as_posix()
166
+ payload = path.read_bytes()
167
+ digest.update(relative.encode("utf-8"))
168
+ digest.update(b"\0")
169
+ digest.update(str(len(payload)).encode("ascii"))
170
+ digest.update(b"\0")
171
+ digest.update(hashlib.sha256(payload).hexdigest().encode("ascii"))
172
+ digest.update(b"\n")
173
+ return digest.hexdigest(), len(selected)
174
+
175
+
176
+ def _build_current_comet_dist(checkout: Path, output: Path) -> str:
177
+ """Compile the checkout's TypeScript into an isolated, timestamp-free dist tree."""
178
+ node = shutil.which("node")
179
+ tsc = checkout / "node_modules/typescript/bin/tsc"
180
+ compiler_package = checkout / "node_modules/typescript/package.json"
181
+ if not node or not tsc.is_file() or not compiler_package.is_file():
182
+ raise FileNotFoundError("Current Comet source build requires local Node.js and TypeScript")
183
+ compiler = json.loads(compiler_package.read_text(encoding="utf-8"))
184
+ version = compiler.get("version")
185
+ if not isinstance(version, str) or not version:
186
+ raise ValueError("Current Comet TypeScript compiler version is invalid")
187
+ result = subprocess.run(
188
+ [
189
+ node,
190
+ str(tsc),
191
+ "--pretty",
192
+ "false",
193
+ "--outDir",
194
+ str(output),
195
+ "--declaration",
196
+ "false",
197
+ "--declarationMap",
198
+ "false",
199
+ "--sourceMap",
200
+ "false",
201
+ "--incremental",
202
+ "false",
203
+ ],
204
+ cwd=checkout,
205
+ capture_output=True,
206
+ text=True,
207
+ timeout=180,
208
+ check=False,
209
+ )
210
+ if result.returncode != 0:
211
+ detail = (result.stdout + "\n" + result.stderr).strip()
212
+ raise RuntimeError(f"Current Comet source build failed: {detail[-4000:]}")
213
+ required = [output / "app/cli/index.js", output / "domains/dashboard/native-adapter.js"]
214
+ missing = [str(path) for path in required if not path.is_file()]
215
+ if missing:
216
+ raise FileNotFoundError(f"Current Comet source build omitted required output: {missing}")
217
+ return version
218
+
219
+
220
+ def _copy_current_comet_cli_snapshot(environment_dir: Path, test_dir: Path) -> None:
221
+ """Expose the current checkout's built CLI to task containers on request.
222
+
223
+ The task workspace is the only host directory mounted into Docker. A task
224
+ carrying ``CURRENT_COMET_CLI_MARKER`` therefore needs an explicit snapshot
225
+ of this checkout's bin/dist package rather than a published npm version.
226
+ """
227
+ if not (environment_dir / CURRENT_COMET_CLI_MARKER).is_file():
228
+ return
229
+
230
+ target = test_dir / "_eval_current_comet"
231
+ if target.exists():
232
+ shutil.rmtree(target)
233
+ target.mkdir(parents=True)
234
+ package_file = REPOSITORY_ROOT / "package.json"
235
+ bin_dir = REPOSITORY_ROOT / "bin"
236
+ source_roots = [
237
+ REPOSITORY_ROOT / "app",
238
+ REPOSITORY_ROOT / "domains",
239
+ REPOSITORY_ROOT / "platform",
240
+ ]
241
+ source_files = [
242
+ path
243
+ for root in source_roots
244
+ for path in _regular_tree_files(root)
245
+ if path.suffix in {".ts", ".tsx", ".json"}
246
+ ]
247
+ source_files.extend(
248
+ path
249
+ for path in (
250
+ REPOSITORY_ROOT / "tsconfig.json",
251
+ package_file,
252
+ REPOSITORY_ROOT / "bin/comet.js",
253
+ )
254
+ if path.is_file()
255
+ )
256
+ if not package_file.is_file() or not bin_dir.is_dir() or not source_files:
257
+ raise FileNotFoundError("Current Comet source snapshot is incomplete")
258
+ source_hash, source_count = _tree_digest(REPOSITORY_ROOT, sorted(set(source_files)))
259
+ with tempfile.TemporaryDirectory(prefix="comet-eval-source-build-") as temporary:
260
+ built_dist = Path(temporary) / "dist"
261
+ compiler_version = _build_current_comet_dist(REPOSITORY_ROOT, built_dist)
262
+ shutil.copytree(built_dist, target / "dist")
263
+ shutil.copytree(bin_dir, target / "bin")
264
+ shutil.copy2(package_file, target / "package.json")
265
+ snapshot_files = [
266
+ path for relative in ("bin", "dist") for path in _regular_tree_files(target / relative)
267
+ ] + [target / "package.json"]
268
+ snapshot_hash, snapshot_count = _tree_digest(target, sorted(snapshot_files))
269
+ identity = {
270
+ "schema": CURRENT_COMET_BUILD_SCHEMA,
271
+ "sourceHash": source_hash,
272
+ "sourceFileCount": source_count,
273
+ "snapshotHash": snapshot_hash,
274
+ "snapshotFileCount": snapshot_count,
275
+ "packageHash": hashlib.sha256((target / "package.json").read_bytes()).hexdigest(),
276
+ "entryHash": hashlib.sha256((target / "dist/app/cli/index.js").read_bytes()).hexdigest(),
277
+ "nativeAdapterHash": hashlib.sha256(
278
+ (target / "dist/domains/dashboard/native-adapter.js").read_bytes()
279
+ ).hexdigest(),
280
+ "compilerVersion": compiler_version,
281
+ }
282
+ (target / "build-identity.json").write_text(
283
+ json.dumps(identity, indent=2) + "\n", encoding="utf-8"
284
+ )
285
+
286
+
287
+ def _copy_trusted_native_runtime_snapshot(
288
+ environment_dir: Path,
289
+ test_dir: Path,
290
+ skills: dict[str, Any] | None,
291
+ ) -> None:
292
+ """Snapshot the controller-selected Native runtime before the Agent starts."""
293
+ if not (environment_dir / TRUSTED_NATIVE_RUNTIME_MARKER).is_file():
294
+ return
295
+ config = (skills or {}).get("comet-native")
296
+ if not isinstance(config, dict):
297
+ raise ValueError("Trusted Native oracle requires the comet-native Skill source")
298
+ source_dir = config.get("source_dir")
299
+ scripts_dir = config.get("scripts_dir")
300
+ candidates = []
301
+ if source_dir:
302
+ candidates.append(Path(source_dir) / "scripts/comet-native-runtime.mjs")
303
+ if scripts_dir:
304
+ candidates.append(Path(scripts_dir) / "comet-native-runtime.mjs")
305
+ source = next(
306
+ (
307
+ candidate
308
+ for candidate in candidates
309
+ if candidate.is_file() and not candidate.is_symlink()
310
+ ),
311
+ None,
312
+ )
313
+ if source is None:
314
+ raise FileNotFoundError("Controller-selected Comet Native runtime is unavailable")
315
+
316
+ target_root = test_dir / "_eval_trusted_oracles"
317
+ if target_root.exists():
318
+ shutil.rmtree(target_root)
319
+ target_root.mkdir(parents=True)
320
+ target = target_root / "comet-native-runtime.mjs"
321
+ shutil.copyfile(source, target)
322
+ identity = {
323
+ "schema": TRUSTED_NATIVE_RUNTIME_SCHEMA,
324
+ "runtimeFile": target.name,
325
+ "runtimeHash": hashlib.sha256(target.read_bytes()).hexdigest(),
326
+ }
327
+ (target_root / "native-runtime-identity.json").write_text(
328
+ json.dumps(identity, indent=2) + "\n", encoding="utf-8"
329
+ )
330
+
73
331
 
74
332
  # =============================================================================
75
333
  # PYTEST HOOKS
@@ -149,6 +407,10 @@ def pytest_addoption(parser):
149
407
 
150
408
  def pytest_configure(config):
151
409
  """Register experiment plugin (decision deferred to sessionstart)."""
410
+ config.addinivalue_line(
411
+ "markers",
412
+ "eval_case(repetition): controller-owned task/treatment/repetition identity",
413
+ )
152
414
  global _plugin
153
415
  _plugin = ExperimentPlugin(config)
154
416
  config.pluginmanager.register(_plugin, "experiment_plugin")
@@ -198,6 +460,22 @@ class ExperimentPlugin:
198
460
  print(f"Logging to: {self.logger.base_dir}")
199
461
  print(f"{'=' * 60}\n")
200
462
 
463
+ def pytest_collection_finish(self, session):
464
+ """Persist the full collected case matrix before any model run starts."""
465
+ if not self.logger:
466
+ return
467
+ cases = _expected_cases_from_items(session.items)
468
+ if not cases:
469
+ return
470
+ payload = expected_case_matrix_payload(cases)
471
+ _persist_expected_case_matrix(self.logger.base_dir, payload)
472
+ self.logger.metadata["expected_case_matrix"] = {
473
+ "schema": payload["schema"],
474
+ "matrix_hash": payload["matrix_hash"],
475
+ "case_count": len(payload["cases"]),
476
+ "path": EXPECTED_CASE_MATRIX_FILENAME,
477
+ }
478
+
201
479
  def pytest_sessionfinish(self, session, exitstatus):
202
480
  """Generate and save summary at session end."""
203
481
  if not self.logger:
@@ -209,6 +487,7 @@ class ExperimentPlugin:
209
487
  if self.is_xdist_master:
210
488
  time.sleep(1)
211
489
 
490
+ self._reload_expected_case_matrix_metadata()
212
491
  self._reload_results_from_reports()
213
492
 
214
493
  if self.logger.results:
@@ -217,6 +496,23 @@ class ExperimentPlugin:
217
496
 
218
497
  _cleanup_experiment_coordination()
219
498
 
499
+ def _reload_expected_case_matrix_metadata(self):
500
+ """Attach the worker-written matrix to controller-finalized metadata."""
501
+ path = self.logger.base_dir / EXPECTED_CASE_MATRIX_FILENAME
502
+ if not path.is_file():
503
+ return
504
+ try:
505
+ payload = json.loads(path.read_text(encoding="utf-8"))
506
+ matrix = parse_expected_case_matrix(payload)
507
+ except (OSError, json.JSONDecodeError, ValueError) as error:
508
+ raise RuntimeError("Expected case matrix became invalid before finalize") from error
509
+ self.logger.metadata["expected_case_matrix"] = {
510
+ "schema": payload["schema"],
511
+ "matrix_hash": matrix.matrix_hash,
512
+ "case_count": len(matrix.cases),
513
+ "path": EXPECTED_CASE_MATRIX_FILENAME,
514
+ }
515
+
220
516
  def get_rep_number(self, treatment_name: str) -> int:
221
517
  """Get the next repetition number for a treatment."""
222
518
  if treatment_name not in self.run_counter:
@@ -395,8 +691,12 @@ def _resolve_interaction_config(task, profile_name: str, config):
395
691
  mode = task_interaction.mode or profile_default.mode
396
692
  max_turns = task_interaction.max_turns or profile_default.max_turns
397
693
  simulator_prompt = task_interaction.simulator_prompt or profile_default.simulator_prompt
398
- decision_patterns = list(task_interaction.decision_patterns or profile_default.decision_patterns)
694
+ decision_patterns = list(
695
+ task_interaction.decision_patterns or profile_default.decision_patterns
696
+ )
697
+ decision_reply = task_interaction.decision_reply or profile_default.decision_reply
399
698
  continue_prompt = task_interaction.continue_prompt or profile_default.continue_prompt
699
+ fresh_resume_marker = task_interaction.fresh_resume_marker
400
700
 
401
701
  mode_override = config.getoption("--interaction-mode")
402
702
  if mode_override:
@@ -423,7 +723,9 @@ def _resolve_interaction_config(task, profile_name: str, config):
423
723
  max_turns=max_turns,
424
724
  simulator_prompt=simulator_prompt,
425
725
  decision_patterns=decision_patterns,
726
+ decision_reply=decision_reply,
426
727
  continue_prompt=continue_prompt,
728
+ fresh_resume_marker=fresh_resume_marker,
427
729
  )
428
730
 
429
731
 
@@ -499,6 +801,48 @@ def _get_or_create_experiment_id(name: str, use_coordination: bool) -> str:
499
801
  return experiment_id
500
802
 
501
803
 
804
+ def _expected_cases_from_items(items) -> list[tuple[str, str, int]]:
805
+ """Read explicit eval-case marks from the complete pytest collection."""
806
+ cases: list[tuple[str, str, int]] = []
807
+ for item in items:
808
+ callspec = getattr(item, "callspec", None)
809
+ marker = item.get_closest_marker("eval_case")
810
+ if callspec is None or marker is None:
811
+ continue
812
+ task = callspec.params.get("task_name")
813
+ treatment = callspec.params.get("treatment_name")
814
+ repetition = marker.kwargs.get("repetition")
815
+ if not isinstance(task, str) or not isinstance(treatment, str):
816
+ raise pytest.UsageError("eval_case is missing task/treatment parameters")
817
+ if isinstance(repetition, bool) or not isinstance(repetition, int) or repetition < 1:
818
+ raise pytest.UsageError("eval_case repetition must be a positive integer")
819
+ cases.append((task, treatment, repetition))
820
+ return cases
821
+
822
+
823
+ def _persist_expected_case_matrix(base_dir: Path, payload: dict[str, Any]) -> None:
824
+ """Write one xdist-shared matrix; workers must agree byte-for-byte."""
825
+ canonical = parse_expected_case_matrix(payload)
826
+ path = base_dir / EXPECTED_CASE_MATRIX_FILENAME
827
+ lock_path = base_dir / f".{EXPECTED_CASE_MATRIX_FILENAME}.lock"
828
+ serialized = json.dumps(payload, indent=2, sort_keys=True) + "\n"
829
+ with file_lock(lock_path):
830
+ if path.exists():
831
+ try:
832
+ existing = parse_expected_case_matrix(json.loads(path.read_text(encoding="utf-8")))
833
+ except (OSError, json.JSONDecodeError, ValueError) as error:
834
+ raise RuntimeError("Existing expected case matrix is invalid") from error
835
+ if existing != canonical:
836
+ raise RuntimeError("pytest workers collected different expected case matrices")
837
+ return
838
+ temporary = path.with_name(f".{path.name}.{os.getpid()}.{time.time_ns()}.tmp")
839
+ try:
840
+ temporary.write_text(serialized, encoding="utf-8")
841
+ os.replace(temporary, path)
842
+ finally:
843
+ temporary.unlink(missing_ok=True)
844
+
845
+
502
846
  def _snapshot_dynamic_skill_package(test_dir: Path, skill_hints: dict[str, Any]) -> str | None:
503
847
  """Copy a manifest target package and generated Node Skills into the workspace.
504
848
 
@@ -564,8 +908,9 @@ def verify_environment(project_root, request):
564
908
  if _is_unit_tests_only(request.config):
565
909
  return
566
910
 
567
- load_dotenv(EVAL_ROOT / ".env")
568
- load_dotenv(project_root / ".env")
911
+ from scaffold.python.utils import load_eval_environment
912
+
913
+ load_eval_environment()
569
914
 
570
915
  # Check uv (Python package manager)
571
916
  if shutil.which("uv") is None:
@@ -580,9 +925,7 @@ def verify_environment(project_root, request):
580
925
  if os.name == "nt" and BASH_EXEC == "bash":
581
926
  # _resolve_bash() fell back to bare "bash" — verify it actually works
582
927
  try:
583
- bash_check = subprocess.run(
584
- ["bash", "--version"], capture_output=True, timeout=5
585
- )
928
+ bash_check = subprocess.run(["bash", "--version"], capture_output=True, timeout=5)
586
929
  if bash_check.returncode != 0:
587
930
  raise FileNotFoundError
588
931
  except (FileNotFoundError, subprocess.TimeoutExpired):
@@ -669,6 +1012,8 @@ def setup_test_context(test_dir):
669
1012
 
670
1013
  def _copy_environment(environment_dir: Path) -> None:
671
1014
  for item in environment_dir.iterdir():
1015
+ if item.name in {CURRENT_COMET_CLI_MARKER, TRUSTED_NATIVE_RUNTIME_MARKER}:
1016
+ continue
672
1017
  dest = test_dir / item.name
673
1018
  if item.is_dir():
674
1019
  if dest.exists() and dest.is_dir():
@@ -678,6 +1023,7 @@ def setup_test_context(test_dir):
678
1023
  else:
679
1024
  dest.parent.mkdir(parents=True, exist_ok=True)
680
1025
  shutil.copy2(item, dest)
1026
+ _copy_current_comet_cli_snapshot(environment_dir, test_dir)
681
1027
 
682
1028
  def _write_claude_md(content_file: str) -> None:
683
1029
  claude_dir = test_dir / ".claude"
@@ -720,6 +1066,7 @@ def setup_test_context(test_dir):
720
1066
 
721
1067
  if environment_dir and environment_dir.exists():
722
1068
  _copy_environment(environment_dir)
1069
+ _copy_trusted_native_runtime_snapshot(environment_dir, test_dir, skills)
723
1070
 
724
1071
  if claude_md:
725
1072
  with tempfile.NamedTemporaryFile(
@@ -747,42 +1094,66 @@ def run_claude(test_dir, experiment_logger, request):
747
1094
  is replaced by the multi-turn ``run-claude-loop`` driver, which simulates a
748
1095
  user replying at the workflow's decision points.
749
1096
  """
750
- default_model = os.environ.get("BENCH_CC_MODEL")
751
-
752
- def _run(prompt: str, timeout: int = 600, model: str = None, interaction=None):
1097
+ default_model = _selected_claude_model()
1098
+
1099
+ def _run(
1100
+ prompt: str,
1101
+ timeout: int = 600,
1102
+ model: str = None,
1103
+ interaction=None,
1104
+ image_id: str | None = None,
1105
+ ):
753
1106
  mdl = model or default_model
754
- if (
755
- os.environ.get("TRACE_TO_LANGSMITH", "").lower() == "true"
756
- and not os.environ.get("CC_LANGSMITH_LOG_FILE")
1107
+ if os.environ.get("TRACE_TO_LANGSMITH", "").lower() == "true" and not os.environ.get(
1108
+ "CC_LANGSMITH_LOG_FILE"
757
1109
  ):
758
1110
  os.environ["CC_LANGSMITH_LOG_FILE"] = "/workspace/langsmith-hook.log"
759
1111
  use_loop = interaction is not None and interaction.mode == "auto_user"
760
1112
  if not use_loop:
761
- result = run_claude_in_docker(test_dir, prompt, timeout=timeout, model=mdl)
1113
+ result = run_claude_in_docker(
1114
+ test_dir,
1115
+ prompt,
1116
+ timeout=timeout,
1117
+ model=mdl,
1118
+ image_id=image_id,
1119
+ )
762
1120
  else:
763
1121
  task_prompt_file = test_dir / ".eval-task-prompt.txt"
764
1122
  task_prompt_file.write_text(prompt, encoding="utf-8")
765
1123
  loop_args = [
766
1124
  "run-claude-loop",
767
1125
  test_dir,
768
- "@/workspace/.eval-task-prompt.txt",
1126
+ "@//workspace/.eval-task-prompt.txt",
769
1127
  "--max-turns",
770
1128
  str(interaction.max_turns),
771
1129
  ]
772
1130
  if mdl:
773
1131
  loop_args += ["--model", mdl]
1132
+ if image_id:
1133
+ loop_args += ["--image-id", image_id]
774
1134
  if interaction.continue_prompt:
775
1135
  loop_args += ["--continue-prompt", interaction.continue_prompt]
776
1136
  for pattern in interaction.decision_patterns:
777
1137
  loop_args += ["--decision-pattern", pattern]
1138
+ if interaction.decision_reply:
1139
+ loop_args += ["--decision-reply", interaction.decision_reply]
1140
+ if interaction.fresh_resume_marker:
1141
+ loop_args += ["--fresh-resume-marker", interaction.fresh_resume_marker]
778
1142
 
779
1143
  prompt_file = None
780
1144
  try:
781
- if interaction.simulator_prompt:
1145
+ if interaction.simulator_prompt and not interaction.decision_reply:
782
1146
  prompt_file = test_dir / ".eval-simulator-prompt.txt"
783
1147
  prompt_file.write_text(interaction.simulator_prompt, encoding="utf-8")
784
- loop_args += ["--simulator-prompt-file", "/workspace/.eval-simulator-prompt.txt"]
785
- result = run_shell("docker.sh", *loop_args, timeout=timeout + 60, check=False)
1148
+ loop_args += [
1149
+ "--simulator-prompt-file",
1150
+ "//workspace/.eval-simulator-prompt.txt",
1151
+ ]
1152
+ result = run_claude_loop_in_docker(
1153
+ test_dir,
1154
+ loop_args[2:],
1155
+ timeout=timeout + 60,
1156
+ )
786
1157
  finally:
787
1158
  task_prompt_file.unlink(missing_ok=True)
788
1159
  if prompt_file and prompt_file.exists():
@@ -874,6 +1245,7 @@ def record_result(test_dir, experiment_logger, request):
874
1245
  "profile": events.get("profile"),
875
1246
  "skill_sources": events.get("skill_sources", []),
876
1247
  "eval_manifest": events.get("eval_manifest"),
1248
+ "case_manifest": events.get("case_manifest"),
877
1249
  "interaction": events.get("interaction", {}),
878
1250
  "artifact_references": artifact_references,
879
1251
  "failure_attribution": failure_attribution,
@@ -934,6 +1306,7 @@ def _build_report_payload(
934
1306
  "profile": events.get("profile"),
935
1307
  "skill_sources": events.get("skill_sources", []),
936
1308
  "eval_manifest": events.get("eval_manifest"),
1309
+ "case_manifest": events.get("case_manifest"),
937
1310
  "interaction": events.get("interaction", {}),
938
1311
  "artifact_references": artifact_references,
939
1312
  "failure_attribution": failure_attribution,
@@ -1028,14 +1401,25 @@ def _build_docker_image_with_lock(environment_dir: Path) -> str | None:
1028
1401
 
1029
1402
 
1030
1403
  @contextmanager
1031
- def file_lock(path: Path):
1404
+ def file_lock(path: Path, timeout: float = 600):
1032
1405
  """Cross-platform exclusive file lock for pytest-xdist coordination."""
1033
1406
  path.parent.mkdir(parents=True, exist_ok=True)
1034
1407
  with open(path, "a+b") as lock_file:
1035
1408
  if os.name == "nt":
1036
1409
  import msvcrt
1037
1410
 
1038
- msvcrt.locking(lock_file.fileno(), msvcrt.LK_LOCK, 1)
1411
+ deadline = time.monotonic() + timeout
1412
+ while True:
1413
+ lock_file.seek(0)
1414
+ try:
1415
+ msvcrt.locking(lock_file.fileno(), msvcrt.LK_NBLCK, 1)
1416
+ break
1417
+ except OSError as error:
1418
+ if error.errno not in {13, 36}:
1419
+ raise
1420
+ if time.monotonic() >= deadline:
1421
+ raise
1422
+ time.sleep(0.05)
1039
1423
  try:
1040
1424
  yield
1041
1425
  finally:
@@ -1098,6 +1482,7 @@ def _save_artifacts(base_dir: Path, treatment_name: str, rep: int, test_dir: Pat
1098
1482
  exclude_dirs = {
1099
1483
  ".claude",
1100
1484
  ".git",
1485
+ "_eval_current_comet",
1101
1486
  "node_modules",
1102
1487
  "__pycache__",
1103
1488
  "scaffold",