@rpamis/comet 0.4.0-beta.2 → 0.4.0-beta.4

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 (509) hide show
  1. package/README.md +27 -18
  2. package/assets/manifest.json +2 -1
  3. package/assets/skills/comet/SKILL.md +25 -1
  4. package/assets/skills/comet/reference/comet-yaml-fields.md +6 -4
  5. package/assets/skills/comet/reference/context-recovery.md +10 -0
  6. package/assets/skills/comet/reference/scripts.md +47 -15
  7. package/assets/skills/comet/rules/comet-phase-guard.en.md +8 -0
  8. package/assets/skills/comet/rules/comet-phase-guard.md +9 -1
  9. package/assets/skills/comet/scripts/comet-resume-probe.mjs +3 -0
  10. package/assets/skills/comet/scripts/comet-runtime.mjs +1664 -512
  11. package/assets/skills/comet-archive/SKILL.md +24 -11
  12. package/assets/skills/comet-build/SKILL.md +40 -31
  13. package/assets/skills/comet-design/SKILL.md +1 -0
  14. package/assets/skills/comet-hotfix/SKILL.md +3 -1
  15. package/assets/skills/comet-open/SKILL.md +11 -1
  16. package/assets/skills/comet-tweak/SKILL.md +3 -1
  17. package/assets/skills/comet-verify/SKILL.md +29 -20
  18. package/assets/skills-zh/comet/SKILL.md +25 -1
  19. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +5 -4
  20. package/assets/skills-zh/comet/reference/context-recovery.md +10 -0
  21. package/assets/skills-zh/comet/reference/scripts.md +47 -15
  22. package/assets/skills-zh/comet-archive/SKILL.md +24 -11
  23. package/assets/skills-zh/comet-build/SKILL.md +40 -31
  24. package/assets/skills-zh/comet-design/SKILL.md +1 -0
  25. package/assets/skills-zh/comet-hotfix/SKILL.md +3 -1
  26. package/assets/skills-zh/comet-open/SKILL.md +11 -1
  27. package/assets/skills-zh/comet-tweak/SKILL.md +3 -1
  28. package/assets/skills-zh/comet-verify/SKILL.md +30 -21
  29. package/dist/app/cli/comet-banner.d.ts +25 -0
  30. package/dist/app/cli/comet-banner.d.ts.map +1 -0
  31. package/dist/app/cli/comet-banner.js +265 -0
  32. package/dist/app/cli/comet-banner.js.map +1 -0
  33. package/dist/app/cli/index.js +37 -3
  34. package/dist/app/cli/index.js.map +1 -1
  35. package/dist/app/commands/classic.d.ts +4 -0
  36. package/dist/app/commands/classic.d.ts.map +1 -0
  37. package/dist/app/commands/classic.js +11 -0
  38. package/dist/app/commands/classic.js.map +1 -0
  39. package/dist/app/commands/doctor.d.ts +1 -0
  40. package/dist/app/commands/doctor.d.ts.map +1 -1
  41. package/dist/app/commands/doctor.js +100 -35
  42. package/dist/app/commands/doctor.js.map +1 -1
  43. package/dist/app/commands/eval.d.ts.map +1 -1
  44. package/dist/app/commands/eval.js +57 -20
  45. package/dist/app/commands/eval.js.map +1 -1
  46. package/dist/app/commands/i18n.d.ts +1 -1
  47. package/dist/app/commands/i18n.d.ts.map +1 -1
  48. package/dist/app/commands/i18n.js +12 -4
  49. package/dist/app/commands/i18n.js.map +1 -1
  50. package/dist/app/commands/init.d.ts.map +1 -1
  51. package/dist/app/commands/init.js +16 -13
  52. package/dist/app/commands/init.js.map +1 -1
  53. package/dist/app/commands/project-scope-selection.d.ts +13 -0
  54. package/dist/app/commands/project-scope-selection.d.ts.map +1 -0
  55. package/dist/app/commands/project-scope-selection.js +33 -0
  56. package/dist/app/commands/project-scope-selection.js.map +1 -0
  57. package/dist/app/commands/resume-probe.d.ts +11 -0
  58. package/dist/app/commands/resume-probe.d.ts.map +1 -0
  59. package/dist/app/commands/resume-probe.js +63 -0
  60. package/dist/app/commands/resume-probe.js.map +1 -0
  61. package/dist/app/commands/status.d.ts +31 -0
  62. package/dist/app/commands/status.d.ts.map +1 -1
  63. package/dist/app/commands/status.js +109 -20
  64. package/dist/app/commands/status.js.map +1 -1
  65. package/dist/app/commands/uninstall.d.ts +2 -0
  66. package/dist/app/commands/uninstall.d.ts.map +1 -1
  67. package/dist/app/commands/uninstall.js +217 -40
  68. package/dist/app/commands/uninstall.js.map +1 -1
  69. package/dist/app/commands/update.d.ts +6 -0
  70. package/dist/app/commands/update.d.ts.map +1 -1
  71. package/dist/app/commands/update.js +361 -68
  72. package/dist/app/commands/update.js.map +1 -1
  73. package/dist/config/repository-layout.json +4 -2
  74. package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
  75. package/dist/domains/bundle/bundle-platform.js +3 -1
  76. package/dist/domains/bundle/bundle-platform.js.map +1 -1
  77. package/dist/domains/bundle/eval-manifest-runtime.d.ts +6 -0
  78. package/dist/domains/bundle/eval-manifest-runtime.d.ts.map +1 -0
  79. package/dist/domains/bundle/eval-manifest-runtime.js +58 -0
  80. package/dist/domains/bundle/eval-manifest-runtime.js.map +1 -0
  81. package/dist/domains/bundle/types.d.ts +1 -1
  82. package/dist/domains/bundle/types.d.ts.map +1 -1
  83. package/dist/domains/comet-classic/classic-archive.d.ts +1 -0
  84. package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
  85. package/dist/domains/comet-classic/classic-archive.js +35 -38
  86. package/dist/domains/comet-classic/classic-archive.js.map +1 -1
  87. package/dist/domains/comet-classic/classic-cli.d.ts +1 -1
  88. package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -1
  89. package/dist/domains/comet-classic/classic-cli.js +3 -0
  90. package/dist/domains/comet-classic/classic-cli.js.map +1 -1
  91. package/dist/domains/comet-classic/classic-command-checks.d.ts +20 -0
  92. package/dist/domains/comet-classic/classic-command-checks.d.ts.map +1 -0
  93. package/dist/domains/comet-classic/classic-command-checks.js +97 -0
  94. package/dist/domains/comet-classic/classic-command-checks.js.map +1 -0
  95. package/dist/domains/comet-classic/classic-current-change.d.ts +19 -0
  96. package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -0
  97. package/dist/domains/comet-classic/classic-current-change.js +132 -0
  98. package/dist/domains/comet-classic/classic-current-change.js.map +1 -0
  99. package/dist/domains/comet-classic/classic-diagnostics.d.ts +2 -1
  100. package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -1
  101. package/dist/domains/comet-classic/classic-diagnostics.js +54 -1
  102. package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -1
  103. package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -1
  104. package/dist/domains/comet-classic/classic-evidence.js +4 -0
  105. package/dist/domains/comet-classic/classic-evidence.js.map +1 -1
  106. package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
  107. package/dist/domains/comet-classic/classic-guard.js +101 -141
  108. package/dist/domains/comet-classic/classic-guard.js.map +1 -1
  109. package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
  110. package/dist/domains/comet-classic/classic-hook-guard.js +67 -29
  111. package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
  112. package/dist/domains/comet-classic/classic-project-config.d.ts +16 -0
  113. package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -0
  114. package/dist/domains/comet-classic/classic-project-config.js +40 -0
  115. package/dist/domains/comet-classic/classic-project-config.js.map +1 -0
  116. package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -1
  117. package/dist/domains/comet-classic/classic-resolver.js +3 -3
  118. package/dist/domains/comet-classic/classic-resolver.js.map +1 -1
  119. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts +3 -0
  120. package/dist/domains/comet-classic/classic-resume-probe-command.d.ts.map +1 -0
  121. package/dist/domains/comet-classic/classic-resume-probe-command.js +58 -0
  122. package/dist/domains/comet-classic/classic-resume-probe-command.js.map +1 -0
  123. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts +2 -0
  124. package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts.map +1 -0
  125. package/dist/domains/comet-classic/classic-resume-probe-entry.js +4 -0
  126. package/dist/domains/comet-classic/classic-resume-probe-entry.js.map +1 -0
  127. package/dist/domains/comet-classic/classic-resume-probe.d.ts +29 -0
  128. package/dist/domains/comet-classic/classic-resume-probe.d.ts.map +1 -0
  129. package/dist/domains/comet-classic/classic-resume-probe.js +386 -0
  130. package/dist/domains/comet-classic/classic-resume-probe.js.map +1 -0
  131. package/dist/domains/comet-classic/classic-runtime-run.d.ts +2 -1
  132. package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
  133. package/dist/domains/comet-classic/classic-runtime-run.js +269 -4
  134. package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
  135. package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -1
  136. package/dist/domains/comet-classic/classic-state-command.js +129 -15
  137. package/dist/domains/comet-classic/classic-state-command.js.map +1 -1
  138. package/dist/domains/comet-classic/classic-state.d.ts +3 -3
  139. package/dist/domains/comet-classic/classic-state.d.ts.map +1 -1
  140. package/dist/domains/comet-classic/classic-state.js +4 -6
  141. package/dist/domains/comet-classic/classic-state.js.map +1 -1
  142. package/dist/domains/comet-classic/classic-store.d.ts +4 -1
  143. package/dist/domains/comet-classic/classic-store.d.ts.map +1 -1
  144. package/dist/domains/comet-classic/classic-store.js +27 -9
  145. package/dist/domains/comet-classic/classic-store.js.map +1 -1
  146. package/dist/domains/comet-classic/classic-transitions.d.ts +1 -1
  147. package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -1
  148. package/dist/domains/comet-classic/classic-transitions.js +20 -1
  149. package/dist/domains/comet-classic/classic-transitions.js.map +1 -1
  150. package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -1
  151. package/dist/domains/comet-classic/classic-validate-command.js +1 -0
  152. package/dist/domains/comet-classic/classic-validate-command.js.map +1 -1
  153. package/dist/domains/comet-classic/index.d.ts +3 -0
  154. package/dist/domains/comet-classic/index.d.ts.map +1 -1
  155. package/dist/domains/comet-classic/index.js +3 -0
  156. package/dist/domains/comet-classic/index.js.map +1 -1
  157. package/dist/domains/dashboard/collector.js +10 -2
  158. package/dist/domains/dashboard/collector.js.map +1 -1
  159. package/dist/domains/dashboard/web/assets/{index-CjU3VXVu.js → index-CIvN-PL8.js} +11 -11
  160. package/dist/domains/dashboard/web/assets/{index-BcO3_QlT.css → index-DcyRPBnT.css} +1 -1
  161. package/dist/domains/dashboard/web/index.html +16 -16
  162. package/dist/domains/engine/types.d.ts +1 -1
  163. package/dist/domains/engine/types.d.ts.map +1 -1
  164. package/dist/domains/integrations/openspec.d.ts.map +1 -1
  165. package/dist/domains/integrations/openspec.js +6 -6
  166. package/dist/domains/integrations/openspec.js.map +1 -1
  167. package/dist/domains/skill/find.d.ts.map +1 -1
  168. package/dist/domains/skill/find.js +1 -6
  169. package/dist/domains/skill/find.js.map +1 -1
  170. package/dist/domains/skill/managed-markdown.d.ts +14 -0
  171. package/dist/domains/skill/managed-markdown.d.ts.map +1 -0
  172. package/dist/domains/skill/managed-markdown.js +126 -0
  173. package/dist/domains/skill/managed-markdown.js.map +1 -0
  174. package/dist/domains/skill/platform-install.d.ts +4 -3
  175. package/dist/domains/skill/platform-install.d.ts.map +1 -1
  176. package/dist/domains/skill/platform-install.js +96 -26
  177. package/dist/domains/skill/platform-install.js.map +1 -1
  178. package/dist/domains/skill/project-instructions.d.ts +22 -0
  179. package/dist/domains/skill/project-instructions.d.ts.map +1 -0
  180. package/dist/domains/skill/project-instructions.js +61 -0
  181. package/dist/domains/skill/project-instructions.js.map +1 -0
  182. package/dist/domains/skill/uninstall.d.ts +3 -1
  183. package/dist/domains/skill/uninstall.d.ts.map +1 -1
  184. package/dist/domains/skill/uninstall.js +86 -39
  185. package/dist/domains/skill/uninstall.js.map +1 -1
  186. package/dist/platform/install/detect.d.ts +2 -1
  187. package/dist/platform/install/detect.d.ts.map +1 -1
  188. package/dist/platform/install/detect.js +10 -1
  189. package/dist/platform/install/detect.js.map +1 -1
  190. package/dist/platform/install/platforms.d.ts +5 -1
  191. package/dist/platform/install/platforms.d.ts.map +1 -1
  192. package/dist/platform/install/platforms.js +21 -4
  193. package/dist/platform/install/platforms.js.map +1 -1
  194. package/dist/platform/install/project-registry.d.ts +37 -0
  195. package/dist/platform/install/project-registry.d.ts.map +1 -0
  196. package/dist/platform/install/project-registry.js +205 -0
  197. package/dist/platform/install/project-registry.js.map +1 -0
  198. package/eval/.env +28 -0
  199. package/eval/.env.example +52 -0
  200. package/eval/CLAUDE.md +43 -0
  201. package/eval/README.md +538 -0
  202. package/eval/langsmith/.env.example +16 -0
  203. package/eval/langsmith/README.md +93 -0
  204. package/eval/langsmith/skills/README.md +5 -0
  205. package/eval/langsmith/tasks/README.md +5 -0
  206. package/eval/langsmith/tests/conftest.py +187 -0
  207. package/eval/langsmith/tests/tasks/test_tasks.py +287 -0
  208. package/eval/langsmith/treatments/README.md +5 -0
  209. package/eval/local/README.md +80 -0
  210. package/eval/local/regression_baseline.json +13 -0
  211. package/eval/local/report-style-demo-assets/quality_cost.en.svg +41 -0
  212. package/eval/local/report-style-demo-assets/quality_cost.zh.svg +41 -0
  213. package/eval/local/report-style-demo-assets/rubric_delta.en.svg +56 -0
  214. package/eval/local/report-style-demo-assets/rubric_delta.zh.svg +56 -0
  215. package/eval/local/report-style-demo-assets/task_outcomes.en.svg +46 -0
  216. package/eval/local/report-style-demo-assets/task_outcomes.zh.svg +46 -0
  217. package/eval/local/report-style-demo.html +867 -0
  218. package/eval/local/scripts/compare_baselines.py +1018 -0
  219. package/eval/local/scripts/generate_report_style_demo_charts.py +322 -0
  220. package/eval/local/scripts/regression_check.py +171 -0
  221. package/eval/local/scripts/render_readme_benchmark_figures.py +416 -0
  222. package/eval/local/scripts/rescore_rubric.py +120 -0
  223. package/eval/local/skills/benchmarks/039-release/comet-classic-039/SKILL.md +282 -0
  224. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/auto-transition.md +27 -0
  225. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/comet-yaml-fields.md +68 -0
  226. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/context-recovery.md +35 -0
  227. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/debug-gate.md +17 -0
  228. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/decision-point.md +20 -0
  229. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/dirty-worktree.md +59 -0
  230. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/file-structure.md +28 -0
  231. package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/subagent-dispatch.md +113 -0
  232. package/eval/local/skills/benchmarks/039-release/comet-classic-039/rules/comet-phase-guard.md +125 -0
  233. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-archive.sh +311 -0
  234. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-env.sh +110 -0
  235. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-guard.sh +778 -0
  236. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-handoff.sh +390 -0
  237. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-hook-guard.sh +336 -0
  238. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-state.sh +1338 -0
  239. package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-yaml-validate.sh +225 -0
  240. package/eval/local/skills/benchmarks/039-release/comet-classic-039-archive/SKILL.md +100 -0
  241. package/eval/local/skills/benchmarks/039-release/comet-classic-039-build/SKILL.md +304 -0
  242. package/eval/local/skills/benchmarks/039-release/comet-classic-039-design/SKILL.md +263 -0
  243. package/eval/local/skills/benchmarks/039-release/comet-classic-039-hotfix/SKILL.md +204 -0
  244. package/eval/local/skills/benchmarks/039-release/comet-classic-039-open/SKILL.md +220 -0
  245. package/eval/local/skills/benchmarks/039-release/comet-classic-039-tweak/SKILL.md +180 -0
  246. package/eval/local/skills/benchmarks/039-release/comet-classic-039-verify/SKILL.md +234 -0
  247. package/eval/local/skills/benchmarks/040-beta/comet/SKILL.md +261 -0
  248. package/eval/local/skills/benchmarks/040-beta/comet/reference/auto-transition.md +27 -0
  249. package/eval/local/skills/benchmarks/040-beta/comet/reference/comet-yaml-fields.md +73 -0
  250. package/eval/local/skills/benchmarks/040-beta/comet/reference/context-recovery.md +45 -0
  251. package/eval/local/skills/benchmarks/040-beta/comet/reference/debug-gate.md +33 -0
  252. package/eval/local/skills/benchmarks/040-beta/comet/reference/decision-point.md +31 -0
  253. package/eval/local/skills/benchmarks/040-beta/comet/reference/dirty-worktree.md +59 -0
  254. package/eval/local/skills/benchmarks/040-beta/comet/reference/file-structure.md +28 -0
  255. package/eval/local/skills/benchmarks/040-beta/comet/reference/intent-frame.md +74 -0
  256. package/eval/local/skills/benchmarks/040-beta/comet/reference/scripts.md +69 -0
  257. package/eval/local/skills/benchmarks/040-beta/comet/reference/subagent-dispatch.md +169 -0
  258. package/eval/local/skills/benchmarks/040-beta/comet/rules/comet-phase-guard.md +130 -0
  259. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/checks.yaml +6 -0
  260. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/guardrails.yaml +13 -0
  261. package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/skill.yaml +122 -0
  262. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-archive.mjs +9515 -0
  263. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-env.mjs +15 -0
  264. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-guard.mjs +10173 -0
  265. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-handoff.mjs +9491 -0
  266. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-hook-guard.mjs +9175 -0
  267. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-intent.mjs +404 -0
  268. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-state.mjs +9273 -0
  269. package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-yaml-validate.mjs +7627 -0
  270. package/eval/local/skills/benchmarks/040-beta/comet-archive/SKILL.md +110 -0
  271. package/eval/local/skills/benchmarks/040-beta/comet-build/SKILL.md +315 -0
  272. package/eval/local/skills/benchmarks/040-beta/comet-design/SKILL.md +260 -0
  273. package/eval/local/skills/benchmarks/040-beta/comet-hotfix/SKILL.md +190 -0
  274. package/eval/local/skills/benchmarks/040-beta/comet-open/SKILL.md +210 -0
  275. package/eval/local/skills/benchmarks/040-beta/comet-tweak/SKILL.md +183 -0
  276. package/eval/local/skills/benchmarks/040-beta/comet-verify/SKILL.md +230 -0
  277. package/eval/local/skills/benchmarks/dependency/claude-md/comet-workflow/CLAUDE.md +12 -0
  278. package/eval/local/skills/benchmarks/dependency/openspec/openspec-apply-change/SKILL.md +156 -0
  279. package/eval/local/skills/benchmarks/dependency/openspec/openspec-archive-change/SKILL.md +114 -0
  280. package/eval/local/skills/benchmarks/dependency/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
  281. package/eval/local/skills/benchmarks/dependency/openspec/openspec-continue-change/SKILL.md +118 -0
  282. package/eval/local/skills/benchmarks/dependency/openspec/openspec-explore/SKILL.md +288 -0
  283. package/eval/local/skills/benchmarks/dependency/openspec/openspec-ff-change/SKILL.md +101 -0
  284. package/eval/local/skills/benchmarks/dependency/openspec/openspec-new-change/SKILL.md +74 -0
  285. package/eval/local/skills/benchmarks/dependency/openspec/openspec-onboard/SKILL.md +554 -0
  286. package/eval/local/skills/benchmarks/dependency/openspec/openspec-propose/SKILL.md +110 -0
  287. package/eval/local/skills/benchmarks/dependency/openspec/openspec-sync-specs/SKILL.md +138 -0
  288. package/eval/local/skills/benchmarks/dependency/openspec/openspec-verify-change/SKILL.md +168 -0
  289. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/SKILL.md +159 -0
  290. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/frame-template.html +213 -0
  291. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/helper.js +167 -0
  292. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/server.cjs +723 -0
  293. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/start-server.sh +209 -0
  294. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/stop-server.sh +120 -0
  295. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
  296. package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/visual-companion.md +291 -0
  297. package/eval/local/skills/benchmarks/dependency/superpowers/dispatching-parallel-agents/SKILL.md +185 -0
  298. package/eval/local/skills/benchmarks/dependency/superpowers/executing-plans/SKILL.md +70 -0
  299. package/eval/local/skills/benchmarks/dependency/superpowers/finishing-a-development-branch/SKILL.md +241 -0
  300. package/eval/local/skills/benchmarks/dependency/superpowers/receiving-code-review/SKILL.md +213 -0
  301. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/SKILL.md +103 -0
  302. package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/code-reviewer.md +172 -0
  303. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/SKILL.md +418 -0
  304. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/implementer-prompt.md +139 -0
  305. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/review-package +44 -0
  306. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/sdd-workspace +22 -0
  307. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/task-brief +40 -0
  308. package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/task-reviewer-prompt.md +188 -0
  309. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
  310. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/SKILL.md +296 -0
  311. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
  312. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
  313. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/defense-in-depth.md +122 -0
  314. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/find-polluter.sh +63 -0
  315. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
  316. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-academic.md +14 -0
  317. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-1.md +58 -0
  318. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-2.md +68 -0
  319. package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-3.md +69 -0
  320. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/SKILL.md +371 -0
  321. package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
  322. package/eval/local/skills/benchmarks/dependency/superpowers/using-git-worktrees/SKILL.md +202 -0
  323. package/eval/local/skills/benchmarks/dependency/superpowers/verification-before-completion/SKILL.md +139 -0
  324. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/SKILL.md +174 -0
  325. package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
  326. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/SKILL.md +689 -0
  327. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
  328. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  329. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/graphviz-conventions.dot +172 -0
  330. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/persuasion-principles.md +187 -0
  331. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/render-graphs.js +168 -0
  332. package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
  333. package/eval/local/tasks/authoring-skill-smoke/environment/Dockerfile +2 -0
  334. package/eval/local/tasks/authoring-skill-smoke/instruction.md +4 -0
  335. package/eval/local/tasks/authoring-skill-smoke/task.toml +21 -0
  336. package/eval/local/tasks/authoring-skill-smoke/validation/test_authoring_skill_smoke.py +54 -0
  337. package/eval/local/tasks/comet-agent-memory-routing/environment/Dockerfile +28 -0
  338. package/eval/local/tasks/comet-agent-memory-routing/environment/agent_system.py +40 -0
  339. package/eval/local/tasks/comet-agent-memory-routing/environment/test_agent_system.py +29 -0
  340. package/eval/local/tasks/comet-agent-memory-routing/instruction.md +20 -0
  341. package/eval/local/tasks/comet-agent-memory-routing/task.toml +24 -0
  342. package/eval/local/tasks/comet-agent-memory-routing/validation/test_agent_memory_routing.py +24 -0
  343. package/eval/local/tasks/comet-api-cache-ttl/environment/Dockerfile +39 -0
  344. package/eval/local/tasks/comet-api-cache-ttl/environment/cache.py +39 -0
  345. package/eval/local/tasks/comet-api-cache-ttl/environment/test_cache.py +81 -0
  346. package/eval/local/tasks/comet-api-cache-ttl/instruction.md +33 -0
  347. package/eval/local/tasks/comet-api-cache-ttl/task.toml +24 -0
  348. package/eval/local/tasks/comet-api-cache-ttl/validation/test_api_cache_ttl.py +58 -0
  349. package/eval/local/tasks/comet-cross-file-refactor/environment/Dockerfile +15 -0
  350. package/eval/local/tasks/comet-cross-file-refactor/environment/cli.py +13 -0
  351. package/eval/local/tasks/comet-cross-file-refactor/environment/counting.py +13 -0
  352. package/eval/local/tasks/comet-cross-file-refactor/environment/test_textkit.py +21 -0
  353. package/eval/local/tasks/comet-cross-file-refactor/instruction.md +16 -0
  354. package/eval/local/tasks/comet-cross-file-refactor/task.toml +20 -0
  355. package/eval/local/tasks/comet-cross-file-refactor/validation/test_cross_file_refactor.py +20 -0
  356. package/eval/local/tasks/comet-dependency-confusion/environment/Dockerfile +28 -0
  357. package/eval/local/tasks/comet-dependency-confusion/environment/app.py +8 -0
  358. package/eval/local/tasks/comet-dependency-confusion/environment/settings_loader.py +14 -0
  359. package/eval/local/tasks/comet-dependency-confusion/environment/test_settings_service.py +19 -0
  360. package/eval/local/tasks/comet-dependency-confusion/instruction.md +18 -0
  361. package/eval/local/tasks/comet-dependency-confusion/task.toml +24 -0
  362. package/eval/local/tasks/comet-dependency-confusion/validation/test_dependency_confusion.py +24 -0
  363. package/eval/local/tasks/comet-fix-median/environment/Dockerfile +50 -0
  364. package/eval/local/tasks/comet-fix-median/environment/stats.py +54 -0
  365. package/eval/local/tasks/comet-fix-median/environment/test_stats.py +68 -0
  366. package/eval/local/tasks/comet-fix-median/instruction.md +25 -0
  367. package/eval/local/tasks/comet-fix-median/task.toml +24 -0
  368. package/eval/local/tasks/comet-fix-median/validation/test_fix_median.py +60 -0
  369. package/eval/local/tasks/comet-framework-selection/environment/Dockerfile +28 -0
  370. package/eval/local/tasks/comet-framework-selection/environment/architecture.py +12 -0
  371. package/eval/local/tasks/comet-framework-selection/environment/test_architecture.py +30 -0
  372. package/eval/local/tasks/comet-framework-selection/instruction.md +22 -0
  373. package/eval/local/tasks/comet-framework-selection/task.toml +24 -0
  374. package/eval/local/tasks/comet-framework-selection/validation/test_framework_selection.py +24 -0
  375. package/eval/local/tasks/comet-full-workflow/environment/Dockerfile +53 -0
  376. package/eval/local/tasks/comet-full-workflow/environment/test_wordcount.py +29 -0
  377. package/eval/local/tasks/comet-full-workflow/environment/wordcount.py +40 -0
  378. package/eval/local/tasks/comet-full-workflow/instruction.md +18 -0
  379. package/eval/local/tasks/comet-full-workflow/task.toml +24 -0
  380. package/eval/local/tasks/comet-full-workflow/validation/test_full_workflow.py +171 -0
  381. package/eval/local/tasks/comet-graph-execution-review/environment/Dockerfile +28 -0
  382. package/eval/local/tasks/comet-graph-execution-review/environment/pipeline.py +19 -0
  383. package/eval/local/tasks/comet-graph-execution-review/environment/test_pipeline.py +53 -0
  384. package/eval/local/tasks/comet-graph-execution-review/instruction.md +21 -0
  385. package/eval/local/tasks/comet-graph-execution-review/task.toml +24 -0
  386. package/eval/local/tasks/comet-graph-execution-review/validation/test_graph_execution_review.py +24 -0
  387. package/eval/local/tasks/comet-human-approval-flow/environment/Dockerfile +15 -0
  388. package/eval/local/tasks/comet-human-approval-flow/environment/approvals.py +17 -0
  389. package/eval/local/tasks/comet-human-approval-flow/environment/test_approvals.py +30 -0
  390. package/eval/local/tasks/comet-human-approval-flow/instruction.md +15 -0
  391. package/eval/local/tasks/comet-human-approval-flow/task.toml +20 -0
  392. package/eval/local/tasks/comet-human-approval-flow/validation/test_human_approval_flow.py +20 -0
  393. package/eval/local/tasks/comet-layered-streaming-fix/environment/Dockerfile +20 -0
  394. package/eval/local/tasks/comet-layered-streaming-fix/environment/chat_app.py +19 -0
  395. package/eval/local/tasks/comet-layered-streaming-fix/environment/test_chat_app.py +15 -0
  396. package/eval/local/tasks/comet-layered-streaming-fix/instruction.md +14 -0
  397. package/eval/local/tasks/comet-layered-streaming-fix/task.toml +20 -0
  398. package/eval/local/tasks/comet-layered-streaming-fix/validation/test_layered_streaming_fix.py +20 -0
  399. package/eval/local/tasks/comet-noise-distractor/environment/Dockerfile +15 -0
  400. package/eval/local/tasks/comet-noise-distractor/environment/distractor.md +4 -0
  401. package/eval/local/tasks/comet-noise-distractor/environment/invoice.py +5 -0
  402. package/eval/local/tasks/comet-noise-distractor/environment/test_invoice.py +18 -0
  403. package/eval/local/tasks/comet-noise-distractor/instruction.md +17 -0
  404. package/eval/local/tasks/comet-noise-distractor/task.toml +20 -0
  405. package/eval/local/tasks/comet-noise-distractor/validation/test_noise_distractor.py +20 -0
  406. package/eval/local/tasks/comet-observability-env-template/environment/Dockerfile +15 -0
  407. package/eval/local/tasks/comet-observability-env-template/environment/env_writer.py +17 -0
  408. package/eval/local/tasks/comet-observability-env-template/environment/test_env_writer.py +17 -0
  409. package/eval/local/tasks/comet-observability-env-template/instruction.md +20 -0
  410. package/eval/local/tasks/comet-observability-env-template/task.toml +20 -0
  411. package/eval/local/tasks/comet-observability-env-template/validation/test_observability_env_template.py +46 -0
  412. package/eval/local/tasks/comet-perf-dedupe/environment/Dockerfile +39 -0
  413. package/eval/local/tasks/comet-perf-dedupe/environment/dedupe.py +22 -0
  414. package/eval/local/tasks/comet-perf-dedupe/environment/test_dedupe.py +43 -0
  415. package/eval/local/tasks/comet-perf-dedupe/instruction.md +25 -0
  416. package/eval/local/tasks/comet-perf-dedupe/task.toml +24 -0
  417. package/eval/local/tasks/comet-perf-dedupe/validation/test_perf_dedupe.py +40 -0
  418. package/eval/local/tasks/comet-persistence-threading/environment/Dockerfile +15 -0
  419. package/eval/local/tasks/comet-persistence-threading/environment/session_store.py +15 -0
  420. package/eval/local/tasks/comet-persistence-threading/environment/test_session_store.py +21 -0
  421. package/eval/local/tasks/comet-persistence-threading/instruction.md +14 -0
  422. package/eval/local/tasks/comet-persistence-threading/task.toml +20 -0
  423. package/eval/local/tasks/comet-persistence-threading/validation/test_persistence_threading.py +20 -0
  424. package/eval/local/tasks/comet-refactor-counter/environment/Dockerfile +39 -0
  425. package/eval/local/tasks/comet-refactor-counter/environment/test_text_processor.py +57 -0
  426. package/eval/local/tasks/comet-refactor-counter/environment/text_processor.py +49 -0
  427. package/eval/local/tasks/comet-refactor-counter/instruction.md +31 -0
  428. package/eval/local/tasks/comet-refactor-counter/task.toml +24 -0
  429. package/eval/local/tasks/comet-refactor-counter/validation/test_refactor_counter.py +75 -0
  430. package/eval/local/tasks/comet-robust-config/environment/Dockerfile +39 -0
  431. package/eval/local/tasks/comet-robust-config/environment/config_loader.py +56 -0
  432. package/eval/local/tasks/comet-robust-config/environment/test_config_loader.py +72 -0
  433. package/eval/local/tasks/comet-robust-config/instruction.md +30 -0
  434. package/eval/local/tasks/comet-robust-config/task.toml +24 -0
  435. package/eval/local/tasks/comet-robust-config/validation/test_robust_config.py +37 -0
  436. package/eval/local/tasks/generic-skill-smoke/environment/Dockerfile +2 -0
  437. package/eval/local/tasks/generic-skill-smoke/instruction.md +7 -0
  438. package/eval/local/tasks/generic-skill-smoke/task.toml +21 -0
  439. package/eval/local/tasks/generic-skill-smoke/validation/test_generic_skill_smoke.py +36 -0
  440. package/eval/local/tasks/index.yaml +155 -0
  441. package/eval/local/tasks/workflow-overlay-contract/environment/Dockerfile +5 -0
  442. package/eval/local/tasks/workflow-overlay-contract/instruction.md +5 -0
  443. package/eval/local/tasks/workflow-overlay-contract/task.toml +21 -0
  444. package/eval/local/tasks/workflow-overlay-contract/validation/test_workflow_overlay_contract.py +235 -0
  445. package/eval/local/tasks/workflow-route-conformance/environment/Dockerfile +2 -0
  446. package/eval/local/tasks/workflow-route-conformance/instruction.md +5 -0
  447. package/eval/local/tasks/workflow-route-conformance/task.toml +21 -0
  448. package/eval/local/tasks/workflow-route-conformance/validation/test_workflow_route_conformance.py +84 -0
  449. package/eval/local/tests/conftest.py +1148 -0
  450. package/eval/local/tests/scaffold/test_attribution.py +48 -0
  451. package/eval/local/tests/scaffold/test_compare_baselines.py +999 -0
  452. package/eval/local/tests/scaffold/test_conftest_helpers.py +534 -0
  453. package/eval/local/tests/scaffold/test_evidence.py +15 -0
  454. package/eval/local/tests/scaffold/test_langsmith_conftest.py +244 -0
  455. package/eval/local/tests/scaffold/test_logging.py +243 -0
  456. package/eval/local/tests/scaffold/test_manifests.py +132 -0
  457. package/eval/local/tests/scaffold/test_profiles.py +866 -0
  458. package/eval/local/tests/scaffold/test_regression_check.py +19 -0
  459. package/eval/local/tests/scaffold/test_report_style_demo_charts.py +45 -0
  460. package/eval/local/tests/scaffold/test_sample_quality.py +211 -0
  461. package/eval/local/tests/scaffold/test_tasks.py +168 -0
  462. package/eval/local/tests/scaffold/test_treatments.py +244 -0
  463. package/eval/local/tests/scaffold/test_utils.py +139 -0
  464. package/eval/local/tests/tasks/test_tasks.py +445 -0
  465. package/eval/local/tests/tasks/test_validation_scripts.py +143 -0
  466. package/eval/local/treatments/comet/comet_full_039.yaml +141 -0
  467. package/eval/local/treatments/comet/comet_full_040_beta.yaml +140 -0
  468. package/eval/local/treatments/common/control.yaml +4 -0
  469. package/eval/pyproject.toml +41 -0
  470. package/eval/report-html-config.json +6 -0
  471. package/eval/scaffold/__init__.py +67 -0
  472. package/eval/scaffold/python/__init__.py +95 -0
  473. package/eval/scaffold/python/attribution.py +43 -0
  474. package/eval/scaffold/python/evidence.py +38 -0
  475. package/eval/scaffold/python/external_data_handler.py +18 -0
  476. package/eval/scaffold/python/generic_llm_judge.py +235 -0
  477. package/eval/scaffold/python/judge_config.py +168 -0
  478. package/eval/scaffold/python/llm_judge.py +191 -0
  479. package/eval/scaffold/python/logging.py +705 -0
  480. package/eval/scaffold/python/manifests.py +129 -0
  481. package/eval/scaffold/python/paper_charts.py +25 -0
  482. package/eval/scaffold/python/pass_at_k.py +107 -0
  483. package/eval/scaffold/python/paths.py +56 -0
  484. package/eval/scaffold/python/profiles.py +127 -0
  485. package/eval/scaffold/python/report_outputs.py +1391 -0
  486. package/eval/scaffold/python/sample_quality.py +339 -0
  487. package/eval/scaffold/python/schema.py +39 -0
  488. package/eval/scaffold/python/skill_parser.py +469 -0
  489. package/eval/scaffold/python/tasks.py +330 -0
  490. package/eval/scaffold/python/treatments.py +271 -0
  491. package/eval/scaffold/python/utils.py +366 -0
  492. package/eval/scaffold/python/validation/__init__.py +21 -0
  493. package/eval/scaffold/python/validation/authoring_rubric.py +326 -0
  494. package/eval/scaffold/python/validation/comet_workflow.py +187 -0
  495. package/eval/scaffold/python/validation/core.py +264 -0
  496. package/eval/scaffold/python/validation/dataset.py +337 -0
  497. package/eval/scaffold/python/validation/docker.py +106 -0
  498. package/eval/scaffold/python/validation/evaluator.py +549 -0
  499. package/eval/scaffold/python/validation/generic_rubric.py +169 -0
  500. package/eval/scaffold/python/validation/rubric.py +740 -0
  501. package/eval/scaffold/python/validation/runner.py +237 -0
  502. package/eval/scaffold/python/validation/scripts.py +58 -0
  503. package/eval/scaffold/python/validation/tracing.py +313 -0
  504. package/eval/scaffold/shell/common.sh +126 -0
  505. package/eval/scaffold/shell/docker.sh +482 -0
  506. package/eval/scaffold/shell/run-claude-loop.sh +181 -0
  507. package/eval/scaffold/shell/setup.sh +259 -0
  508. package/eval/simulator-instruction.md +9 -0
  509. package/package.json +24 -2
@@ -0,0 +1,143 @@
1
+ """Regression tests for task validation scripts."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib.util
6
+ import sys
7
+ import types
8
+ from pathlib import Path
9
+
10
+
11
+ ROOT = Path(__file__).resolve().parents[3]
12
+
13
+
14
+ def _load_validator(path: Path, workspace: Path):
15
+ fake_checks = types.ModuleType("comet_checks")
16
+ fake_checks.WORKSPACE = workspace
17
+ fake_checks._passed = lambda check, message: {
18
+ "check": check,
19
+ "status": "passed",
20
+ "message": message,
21
+ }
22
+ fake_checks._failed = lambda check, message: {
23
+ "check": check,
24
+ "status": "failed",
25
+ "message": message,
26
+ }
27
+ fake_checks.run_comet_checks = lambda: []
28
+ fake_checks.write_results = lambda results: results
29
+
30
+ previous = sys.modules.get("comet_checks")
31
+ sys.modules["comet_checks"] = fake_checks
32
+ try:
33
+ spec = importlib.util.spec_from_file_location(f"validator_{path.stem}", path)
34
+ assert spec and spec.loader
35
+ module = importlib.util.module_from_spec(spec)
36
+ spec.loader.exec_module(module)
37
+ return module
38
+ finally:
39
+ if previous is None:
40
+ sys.modules.pop("comet_checks", None)
41
+ else:
42
+ sys.modules["comet_checks"] = previous
43
+
44
+
45
+ def test_refactor_counter_accepts_annotated_wrappers(tmp_path: Path):
46
+ (tmp_path / "text_processor.py").write_text(
47
+ """
48
+ def count(text: str, unit: str) -> int:
49
+ return len(text)
50
+
51
+ def count_words(text: str) -> int:
52
+ return count(text, "words")
53
+
54
+ def count_lines(text: str) -> int:
55
+ return count(text, "lines")
56
+
57
+ def count_chars(text: str) -> int:
58
+ return count(text, "chars")
59
+ """,
60
+ encoding="utf-8",
61
+ )
62
+ module = _load_validator(
63
+ ROOT / "local/tasks/comet-refactor-counter/validation/test_refactor_counter.py",
64
+ tmp_path,
65
+ )
66
+
67
+ result = module.check_count_dispatcher()
68
+
69
+ assert result["status"] == "passed"
70
+
71
+
72
+ def test_fix_median_reports_pytest_stderr(monkeypatch, tmp_path: Path):
73
+ module = _load_validator(
74
+ ROOT / "local/tasks/comet-fix-median/validation/test_fix_median.py",
75
+ tmp_path,
76
+ )
77
+ calls = []
78
+
79
+ def fake_run(*args, **kwargs):
80
+ calls.append(args[0])
81
+ if len(calls) == 1:
82
+ return types.SimpleNamespace(returncode=0, stdout="2.5\n", stderr="")
83
+ return types.SimpleNamespace(
84
+ returncode=1,
85
+ stdout="",
86
+ stderr="/usr/local/bin/python: No module named pytest\n",
87
+ )
88
+
89
+ monkeypatch.setattr(module.subprocess, "run", fake_run)
90
+
91
+ result = module.check_median_fix()
92
+
93
+ assert result["status"] == "failed"
94
+ assert "No module named pytest" in result["message"]
95
+
96
+
97
+ def test_pytest_task_images_install_pytest():
98
+ task_root = ROOT / "local/tasks"
99
+ missing = []
100
+ for dockerfile in task_root.glob("*/environment/Dockerfile"):
101
+ environment = dockerfile.parent
102
+ if not any("import pytest" in test.read_text(encoding="utf-8") for test in environment.glob("test_*.py")):
103
+ continue
104
+ text = dockerfile.read_text(encoding="utf-8").lower()
105
+ if "pytest" not in text:
106
+ missing.append(str(dockerfile.relative_to(ROOT)))
107
+
108
+ assert missing == []
109
+
110
+
111
+ def test_comet_state_accepts_archived_change_without_active_state(monkeypatch, tmp_path: Path):
112
+ from scaffold.python.validation import comet_workflow
113
+
114
+ archived = tmp_path / "openspec" / "changes" / "archive" / "2026-06-20-fix"
115
+ archived.mkdir(parents=True)
116
+ (archived / "proposal.md").write_text("# Proposal\n", encoding="utf-8")
117
+ (archived / "tasks.md").write_text("- [x] Done\n", encoding="utf-8")
118
+ monkeypatch.setattr(comet_workflow, "WORKSPACE", tmp_path)
119
+
120
+ result = comet_workflow.check_comet_state()
121
+
122
+ assert result == {
123
+ "check": "comet_state",
124
+ "status": "passed",
125
+ "message": "phase=archived",
126
+ }
127
+
128
+
129
+ def test_workflow_phases_accepts_verification_report_name(monkeypatch, tmp_path: Path):
130
+ from scaffold.python.validation import comet_workflow
131
+
132
+ archived = tmp_path / "openspec" / "changes" / "archive" / "2026-06-20-refactor"
133
+ archived.mkdir(parents=True)
134
+ (archived / "proposal.md").write_text("# Proposal\n", encoding="utf-8")
135
+ (archived / "design.md").write_text("# Design\n", encoding="utf-8")
136
+ (archived / "tasks.md").write_text("- [x] Done\n", encoding="utf-8")
137
+ (archived / "verification-report.md").write_text("# Verification\n", encoding="utf-8")
138
+ monkeypatch.setattr(comet_workflow, "WORKSPACE", tmp_path)
139
+
140
+ result = comet_workflow.check_workflow_phases()
141
+
142
+ assert result["status"] == "passed"
143
+ assert "verify" in result["message"]
@@ -0,0 +1,141 @@
1
+ # Full comet skill treatment (0.3.9 baseline, .sh runtime)
2
+ # Injects: the 0.3.9 Comet snapshot plus the same benchmark dependency
3
+ # snapshots used by the 0.4.0 treatment. Source dirs are prefixed
4
+ # comet-classic-039* to avoid colliding with the 0.4.0 sources, but the
5
+ # injected skill names are restored to comet/comet-open/etc. so the 0.3.9
6
+ # boilerplate `find ... */comet/scripts/comet-env.sh` resolves.
7
+ COMET_FULL_039:
8
+ description: "0.3.9 baseline comet skill (shell runtime) with Comet, OpenSpec, and Superpowers dependencies"
9
+ skills:
10
+ # Main dispatcher (carries scripts/ with the frozen 0.3.9 .sh launchers)
11
+ - name: comet
12
+ skill: 039-release/comet-classic-039
13
+ variant: all
14
+ base: benchmarks
15
+ # Phase sub-skills — source is the 0.3.9 snapshot, injected under canonical names
16
+ - name: comet-open
17
+ skill: 039-release/comet-classic-039-open
18
+ variant: all
19
+ base: benchmarks
20
+ - name: comet-design
21
+ skill: 039-release/comet-classic-039-design
22
+ variant: all
23
+ base: benchmarks
24
+ - name: comet-build
25
+ skill: 039-release/comet-classic-039-build
26
+ variant: all
27
+ base: benchmarks
28
+ - name: comet-verify
29
+ skill: 039-release/comet-classic-039-verify
30
+ variant: all
31
+ base: benchmarks
32
+ - name: comet-archive
33
+ skill: 039-release/comet-classic-039-archive
34
+ variant: all
35
+ base: benchmarks
36
+ - name: comet-hotfix
37
+ skill: 039-release/comet-classic-039-hotfix
38
+ variant: all
39
+ base: benchmarks
40
+ - name: comet-tweak
41
+ skill: 039-release/comet-classic-039-tweak
42
+ variant: all
43
+ base: benchmarks
44
+ # OpenSpec workflow dependencies (benchmark dependency snapshots).
45
+ - name: openspec-apply-change
46
+ skill: dependency/openspec/openspec-apply-change
47
+ variant: all
48
+ base: benchmarks
49
+ - name: openspec-archive-change
50
+ skill: dependency/openspec/openspec-archive-change
51
+ variant: all
52
+ base: benchmarks
53
+ - name: openspec-bulk-archive-change
54
+ skill: dependency/openspec/openspec-bulk-archive-change
55
+ variant: all
56
+ base: benchmarks
57
+ - name: openspec-continue-change
58
+ skill: dependency/openspec/openspec-continue-change
59
+ variant: all
60
+ base: benchmarks
61
+ - name: openspec-explore
62
+ skill: dependency/openspec/openspec-explore
63
+ variant: all
64
+ base: benchmarks
65
+ - name: openspec-ff-change
66
+ skill: dependency/openspec/openspec-ff-change
67
+ variant: all
68
+ base: benchmarks
69
+ - name: openspec-new-change
70
+ skill: dependency/openspec/openspec-new-change
71
+ variant: all
72
+ base: benchmarks
73
+ - name: openspec-onboard
74
+ skill: dependency/openspec/openspec-onboard
75
+ variant: all
76
+ base: benchmarks
77
+ - name: openspec-propose
78
+ skill: dependency/openspec/openspec-propose
79
+ variant: all
80
+ base: benchmarks
81
+ - name: openspec-sync-specs
82
+ skill: dependency/openspec/openspec-sync-specs
83
+ variant: all
84
+ base: benchmarks
85
+ - name: openspec-verify-change
86
+ skill: dependency/openspec/openspec-verify-change
87
+ variant: all
88
+ base: benchmarks
89
+ # Superpowers dependencies used by Comet phase guidance and recovery paths.
90
+ - name: brainstorming
91
+ skill: dependency/superpowers/brainstorming
92
+ variant: all
93
+ base: benchmarks
94
+ - name: dispatching-parallel-agents
95
+ skill: dependency/superpowers/dispatching-parallel-agents
96
+ variant: all
97
+ base: benchmarks
98
+ - name: executing-plans
99
+ skill: dependency/superpowers/executing-plans
100
+ variant: all
101
+ base: benchmarks
102
+ - name: finishing-a-development-branch
103
+ skill: dependency/superpowers/finishing-a-development-branch
104
+ variant: all
105
+ base: benchmarks
106
+ - name: receiving-code-review
107
+ skill: dependency/superpowers/receiving-code-review
108
+ variant: all
109
+ base: benchmarks
110
+ - name: requesting-code-review
111
+ skill: dependency/superpowers/requesting-code-review
112
+ variant: all
113
+ base: benchmarks
114
+ - name: subagent-driven-development
115
+ skill: dependency/superpowers/subagent-driven-development
116
+ variant: all
117
+ base: benchmarks
118
+ - name: systematic-debugging
119
+ skill: dependency/superpowers/systematic-debugging
120
+ variant: all
121
+ base: benchmarks
122
+ - name: test-driven-development
123
+ skill: dependency/superpowers/test-driven-development
124
+ variant: all
125
+ base: benchmarks
126
+ - name: using-git-worktrees
127
+ skill: dependency/superpowers/using-git-worktrees
128
+ variant: all
129
+ base: benchmarks
130
+ - name: verification-before-completion
131
+ skill: dependency/superpowers/verification-before-completion
132
+ variant: all
133
+ base: benchmarks
134
+ - name: writing-plans
135
+ skill: dependency/superpowers/writing-plans
136
+ variant: all
137
+ base: benchmarks
138
+ - name: writing-skills
139
+ skill: dependency/superpowers/writing-skills
140
+ variant: all
141
+ base: benchmarks
@@ -0,0 +1,140 @@
1
+ # Full comet skill treatment (workflow 0.4.0-beta.1, .mjs runtime)
2
+ # Injects: the 0.4.0 beta Comet snapshot plus the benchmark dependency
3
+ # snapshots under dependency/openspec and dependency/superpowers.
4
+ # OpenSpec CLI is still provided by the task Docker image; OpenSpec Skills are
5
+ # injected so slash/Skill invocation behavior matches a real installation.
6
+ COMET_FULL_040_BETA:
7
+ description: "Full comet skill (workflow 0.4.0-beta.1) with Comet, OpenSpec, and Superpowers dependencies"
8
+ skills:
9
+ # Main dispatcher (carries scripts/ with independent .mjs command bundles and runtime/classic control package)
10
+ - name: comet
11
+ skill: 040-beta/comet
12
+ variant: all
13
+ base: benchmarks
14
+ # Phase sub-skills (slash-invoked as /comet-open etc.)
15
+ - name: comet-open
16
+ skill: 040-beta/comet-open
17
+ variant: all
18
+ base: benchmarks
19
+ - name: comet-design
20
+ skill: 040-beta/comet-design
21
+ variant: all
22
+ base: benchmarks
23
+ - name: comet-build
24
+ skill: 040-beta/comet-build
25
+ variant: all
26
+ base: benchmarks
27
+ - name: comet-verify
28
+ skill: 040-beta/comet-verify
29
+ variant: all
30
+ base: benchmarks
31
+ - name: comet-archive
32
+ skill: 040-beta/comet-archive
33
+ variant: all
34
+ base: benchmarks
35
+ - name: comet-hotfix
36
+ skill: 040-beta/comet-hotfix
37
+ variant: all
38
+ base: benchmarks
39
+ - name: comet-tweak
40
+ skill: 040-beta/comet-tweak
41
+ variant: all
42
+ base: benchmarks
43
+ # OpenSpec workflow dependencies (benchmark dependency snapshots).
44
+ - name: openspec-apply-change
45
+ skill: dependency/openspec/openspec-apply-change
46
+ variant: all
47
+ base: benchmarks
48
+ - name: openspec-archive-change
49
+ skill: dependency/openspec/openspec-archive-change
50
+ variant: all
51
+ base: benchmarks
52
+ - name: openspec-bulk-archive-change
53
+ skill: dependency/openspec/openspec-bulk-archive-change
54
+ variant: all
55
+ base: benchmarks
56
+ - name: openspec-continue-change
57
+ skill: dependency/openspec/openspec-continue-change
58
+ variant: all
59
+ base: benchmarks
60
+ - name: openspec-explore
61
+ skill: dependency/openspec/openspec-explore
62
+ variant: all
63
+ base: benchmarks
64
+ - name: openspec-ff-change
65
+ skill: dependency/openspec/openspec-ff-change
66
+ variant: all
67
+ base: benchmarks
68
+ - name: openspec-new-change
69
+ skill: dependency/openspec/openspec-new-change
70
+ variant: all
71
+ base: benchmarks
72
+ - name: openspec-onboard
73
+ skill: dependency/openspec/openspec-onboard
74
+ variant: all
75
+ base: benchmarks
76
+ - name: openspec-propose
77
+ skill: dependency/openspec/openspec-propose
78
+ variant: all
79
+ base: benchmarks
80
+ - name: openspec-sync-specs
81
+ skill: dependency/openspec/openspec-sync-specs
82
+ variant: all
83
+ base: benchmarks
84
+ - name: openspec-verify-change
85
+ skill: dependency/openspec/openspec-verify-change
86
+ variant: all
87
+ base: benchmarks
88
+ # Superpowers dependencies used by Comet phase guidance and recovery paths.
89
+ - name: brainstorming
90
+ skill: dependency/superpowers/brainstorming
91
+ variant: all
92
+ base: benchmarks
93
+ - name: dispatching-parallel-agents
94
+ skill: dependency/superpowers/dispatching-parallel-agents
95
+ variant: all
96
+ base: benchmarks
97
+ - name: executing-plans
98
+ skill: dependency/superpowers/executing-plans
99
+ variant: all
100
+ base: benchmarks
101
+ - name: finishing-a-development-branch
102
+ skill: dependency/superpowers/finishing-a-development-branch
103
+ variant: all
104
+ base: benchmarks
105
+ - name: receiving-code-review
106
+ skill: dependency/superpowers/receiving-code-review
107
+ variant: all
108
+ base: benchmarks
109
+ - name: requesting-code-review
110
+ skill: dependency/superpowers/requesting-code-review
111
+ variant: all
112
+ base: benchmarks
113
+ - name: subagent-driven-development
114
+ skill: dependency/superpowers/subagent-driven-development
115
+ variant: all
116
+ base: benchmarks
117
+ - name: systematic-debugging
118
+ skill: dependency/superpowers/systematic-debugging
119
+ variant: all
120
+ base: benchmarks
121
+ - name: test-driven-development
122
+ skill: dependency/superpowers/test-driven-development
123
+ variant: all
124
+ base: benchmarks
125
+ - name: using-git-worktrees
126
+ skill: dependency/superpowers/using-git-worktrees
127
+ variant: all
128
+ base: benchmarks
129
+ - name: verification-before-completion
130
+ skill: dependency/superpowers/verification-before-completion
131
+ variant: all
132
+ base: benchmarks
133
+ - name: writing-plans
134
+ skill: dependency/superpowers/writing-plans
135
+ variant: all
136
+ base: benchmarks
137
+ - name: writing-skills
138
+ skill: dependency/superpowers/writing-skills
139
+ variant: all
140
+ base: benchmarks
@@ -0,0 +1,4 @@
1
+ # Control treatment: no skills injected (baseline)
2
+ CONTROL:
3
+ description: "No skills baseline - Claude has no comet workflow guidance"
4
+ skills: []
@@ -0,0 +1,41 @@
1
+ [project]
2
+ name = "comet-skill-eval"
3
+ version = "0.1.0"
4
+ description = "Benchmark evaluation for Comet skill (OpenSpec + Superpowers workflow)"
5
+ requires-python = ">=3.11"
6
+ dependencies = [
7
+ "pytest>=8.0",
8
+ "pytest-timeout>=2.2",
9
+ "pytest-xdist>=3.5",
10
+ "python-dotenv>=1.0",
11
+ "pyyaml>=6.0",
12
+ "pydantic>=2.0",
13
+ "requests>=2.31",
14
+ "tomli>=2.0; python_version < '3.11'",
15
+ ]
16
+
17
+ [project.optional-dependencies]
18
+ # LangSmith tracing + pytest integration; install with: uv sync --extra langsmith
19
+ # The LangSmith suite marks tests with @pytest.mark.langsmith and logs rubric
20
+ # scores + treatment comparison via langsmith.testing (requires the pytest extra).
21
+ langsmith = [
22
+ "langsmith[pytest]>=0.3.4",
23
+ "langchain>=0.3",
24
+ "langchain-openai>=0.2",
25
+ ]
26
+ dev = [
27
+ "ruff>=0.4",
28
+ "pre-commit>=3.7",
29
+ "matplotlib>=3.8",
30
+ ]
31
+
32
+ [tool.pytest.ini_options]
33
+ testpaths = ["local/tests"]
34
+ pythonpath = ["."]
35
+ markers = [
36
+ "langsmith: marks test as using LangSmith tracing",
37
+ ]
38
+
39
+ [tool.ruff]
40
+ line-length = 100
41
+ target-version = "py311"
@@ -0,0 +1,6 @@
1
+ {
2
+ "report_outputs": {
3
+ "markdown": true,
4
+ "html": true
5
+ }
6
+ }
@@ -0,0 +1,67 @@
1
+ """Testing scaffold for Comet skill benchmarks.
2
+
3
+ Re-exports from scaffold.python for convenience.
4
+ """
5
+
6
+ from .python import (
7
+ NoiseTask,
8
+ Treatment,
9
+ ValidatorFn,
10
+ build_docker_image,
11
+ check_claude_available,
12
+ check_code_execution,
13
+ check_docker_available,
14
+ check_file_exists,
15
+ check_no_pattern,
16
+ check_pattern,
17
+ check_skill_invoked,
18
+ compose_validators,
19
+ make_execution_validator,
20
+ run_claude_in_docker,
21
+ run_eval_in_docker,
22
+ run_node_in_docker,
23
+ run_python_in_docker,
24
+ run_shell,
25
+ run_validators,
26
+ )
27
+ from .python.tasks import Task, TaskConfig, list_tasks, load_task
28
+ from .python.treatments import (
29
+ TreatmentConfig,
30
+ build_treatment_skills,
31
+ list_treatments,
32
+ load_treatment,
33
+ load_treatments,
34
+ load_treatments_yaml,
35
+ )
36
+
37
+ __all__ = [
38
+ "Task",
39
+ "TaskConfig",
40
+ "load_task",
41
+ "list_tasks",
42
+ "TreatmentConfig",
43
+ "build_treatment_skills",
44
+ "list_treatments",
45
+ "load_treatment",
46
+ "load_treatments",
47
+ "load_treatments_yaml",
48
+ "NoiseTask",
49
+ "Treatment",
50
+ "ValidatorFn",
51
+ "compose_validators",
52
+ "run_validators",
53
+ "check_file_exists",
54
+ "check_pattern",
55
+ "check_no_pattern",
56
+ "check_skill_invoked",
57
+ "check_code_execution",
58
+ "run_shell",
59
+ "check_docker_available",
60
+ "check_claude_available",
61
+ "build_docker_image",
62
+ "run_python_in_docker",
63
+ "make_execution_validator",
64
+ "run_eval_in_docker",
65
+ "run_node_in_docker",
66
+ "run_claude_in_docker",
67
+ ]
@@ -0,0 +1,95 @@
1
+ """Python-specific scaffold components for comet skill benchmarks."""
2
+
3
+ from .logging import (
4
+ ExperimentLogger,
5
+ ReportColumn,
6
+ TreatmentResult,
7
+ bool_column,
8
+ default_columns,
9
+ extract_events,
10
+ parse_output,
11
+ quality_column,
12
+ save_events,
13
+ save_raw,
14
+ save_report,
15
+ strip_ansi,
16
+ )
17
+ from .manifests import SkillEvalManifest, load_eval_manifest
18
+ from .profiles import (
19
+ AUTHORING_SKILL_PROFILE,
20
+ COMET_WORKFLOW_PROFILE,
21
+ GENERIC_PROFILE,
22
+ ProfileSpec,
23
+ all_rubric_dimensions,
24
+ get_profile,
25
+ list_profiles,
26
+ resolve_profile_name,
27
+ run_profile_rubric,
28
+ )
29
+ from .evidence import EvalArtifactReference, build_eval_artifact_references
30
+ from .attribution import FailureAttribution, classify_failures
31
+ from .sample_quality import (
32
+ SampleQuality,
33
+ include_in_analysis,
34
+ infer_sample_quality,
35
+ quality_from_report,
36
+ sample_quality_dict,
37
+ )
38
+ from .report_outputs import (
39
+ ReportOutputConfig,
40
+ load_report_output_config,
41
+ preferred_report_path,
42
+ render_markdown_html,
43
+ write_report_outputs,
44
+ )
45
+ from .schema import NoiseTask, Treatment
46
+ from .utils import (
47
+ build_docker_image,
48
+ check_claude_available,
49
+ check_docker_available,
50
+ get_field,
51
+ get_nested_field,
52
+ make_execution_validator,
53
+ normalize_score,
54
+ read_json_file,
55
+ retry_with_backoff,
56
+ run_claude_in_docker,
57
+ run_eval_in_docker,
58
+ run_node_in_docker,
59
+ run_python_in_docker,
60
+ run_shell,
61
+ )
62
+ from .validation import (
63
+ ValidatorFn,
64
+ check_code_execution,
65
+ check_file_exists,
66
+ check_no_pattern,
67
+ check_pattern,
68
+ check_python_execution,
69
+ check_skill_invoked,
70
+ check_typescript_execution,
71
+ compose_validators,
72
+ run_validators,
73
+ )
74
+
75
+ __all__ = [
76
+ "NoiseTask", "Treatment", "ValidatorFn", "compose_validators", "run_validators",
77
+ "check_file_exists", "check_pattern", "check_no_pattern", "check_skill_invoked",
78
+ "check_code_execution", "check_python_execution", "check_typescript_execution",
79
+ "run_shell", "check_docker_available", "check_claude_available", "build_docker_image",
80
+ "run_python_in_docker", "make_execution_validator", "run_eval_in_docker",
81
+ "run_node_in_docker", "run_claude_in_docker", "retry_with_backoff", "read_json_file",
82
+ "get_field", "get_nested_field", "normalize_score", "parse_output", "extract_events",
83
+ "strip_ansi", "ExperimentLogger", "TreatmentResult", "save_events", "save_raw",
84
+ "save_report", "ReportColumn", "bool_column", "quality_column", "default_columns",
85
+ "EvalArtifactReference", "build_eval_artifact_references",
86
+ "FailureAttribution", "classify_failures",
87
+ "SkillEvalManifest", "load_eval_manifest",
88
+ "AUTHORING_SKILL_PROFILE", "COMET_WORKFLOW_PROFILE", "GENERIC_PROFILE",
89
+ "ProfileSpec", "all_rubric_dimensions", "get_profile", "list_profiles",
90
+ "resolve_profile_name", "run_profile_rubric",
91
+ "ReportOutputConfig", "load_report_output_config", "preferred_report_path",
92
+ "render_markdown_html", "write_report_outputs",
93
+ "SampleQuality", "infer_sample_quality", "quality_from_report",
94
+ "sample_quality_dict", "include_in_analysis",
95
+ ]
@@ -0,0 +1,43 @@
1
+ """Failure attribution for eval reports."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from dataclasses import asdict, dataclass
7
+ from typing import Literal
8
+
9
+ FailureBucket = Literal["harness", "workflow", "task", "model"]
10
+
11
+
12
+ @dataclass(frozen=True)
13
+ class FailureAttribution:
14
+ bucket: FailureBucket
15
+ check: str
16
+ reason: str
17
+
18
+
19
+ def classify_failure(check: str, events: dict, profile: str | None) -> FailureAttribution:
20
+ skills_invoked = events.get("skills_invoked") or []
21
+ if re.search(r"Required skill not invoked|skill.*not invoked", check, re.I):
22
+ if not skills_invoked:
23
+ return FailureAttribution(
24
+ "harness",
25
+ check,
26
+ "target Skill was never invoked, so workflow quality is not observable",
27
+ )
28
+ return FailureAttribution("workflow", check, "Skill invocation contract failed")
29
+
30
+ if re.search(r"artifact path|not found in archive|validator|task directory", check, re.I):
31
+ return FailureAttribution("task", check, "task or validator path assumption failed")
32
+
33
+ if re.search(r"\.comet\.yaml|guard|state|transition|archive", check, re.I):
34
+ return FailureAttribution("workflow", check, "workflow state or guard evidence failed")
35
+
36
+ if profile == "generic" and not skills_invoked:
37
+ return FailureAttribution("harness", check, "generic Skill target did not run")
38
+
39
+ return FailureAttribution("model", check, "task failed after observable workflow execution")
40
+
41
+
42
+ def classify_failures(failed: list[str], events: dict, profile: str | None) -> list[dict[str, str]]:
43
+ return [asdict(classify_failure(check, events, profile)) for check in failed]