@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,171 @@
1
+ """Validation script for comet full workflow task.
2
+
3
+ Runs inside Docker. Checks that Claude followed the comet workflow
4
+ and implemented the sentence counting feature correctly.
5
+ """
6
+
7
+ import json
8
+ import os
9
+ import subprocess
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ WORKSPACE = Path("/workspace")
14
+ RESULTS_FILE = os.environ.get("BENCH_TEST_RESULTS", "_test_results.json")
15
+
16
+
17
+ def passed(name: str):
18
+ return {"check": name, "status": "passed"}
19
+
20
+
21
+ def failed(name: str, reason: str):
22
+ return {"check": name, "status": "failed", "reason": reason}
23
+
24
+
25
+ def check_openspec_artifacts():
26
+ """Check that OpenSpec artifacts were created (proposal, design, tasks).
27
+
28
+ Looks for a change directory either directly under openspec/changes/ (active)
29
+ or under openspec/changes/archive/ (archived). Accepts the first change dir
30
+ that actually contains proposal.md + tasks.md.
31
+ """
32
+ changes_dir = WORKSPACE / "openspec" / "changes"
33
+ if not changes_dir.exists():
34
+ return failed("openspec_artifacts", "openspec/changes/ directory not found")
35
+
36
+ # Candidate change dirs: direct children of openspec/changes/ (excluding the
37
+ # archive/ container itself) plus children of openspec/changes/archive/.
38
+ candidates = []
39
+ for d in changes_dir.iterdir():
40
+ if not d.is_dir():
41
+ continue
42
+ if d.name == "archive":
43
+ for sub in d.iterdir():
44
+ if sub.is_dir():
45
+ candidates.append(sub)
46
+ else:
47
+ candidates.append(d)
48
+
49
+ if not candidates:
50
+ return failed("openspec_artifacts", "No change directories found in openspec/changes/")
51
+
52
+ for change_dir in candidates:
53
+ if (change_dir / "proposal.md").exists() and (change_dir / "tasks.md").exists():
54
+ return passed("openspec_artifacts")
55
+
56
+ first = candidates[0]
57
+ return failed("openspec_artifacts", f"proposal.md/tasks.md not found together in any change dir (checked {len(candidates)}; e.g. {first})")
58
+
59
+
60
+ def check_sentence_feature():
61
+ """Check that the sentence counting feature was implemented."""
62
+ wordcount = WORKSPACE / "wordcount.py"
63
+ if not wordcount.exists():
64
+ return failed("sentence_feature", "wordcount.py not found")
65
+
66
+ content = wordcount.read_text()
67
+
68
+ # Check for --sentences flag
69
+ if "--sentences" not in content:
70
+ return failed("sentence_feature", "--sentences flag not found in wordcount.py")
71
+
72
+ # Check that it actually works
73
+ try:
74
+ result = subprocess.run(
75
+ [sys.executable, str(wordcount), "--sentences"],
76
+ input="Hello world. How are you? Fine!",
77
+ capture_output=True, text=True, timeout=10
78
+ )
79
+ if result.returncode != 0:
80
+ return failed("sentence_feature", f"wordcount.py --sentences failed: {result.stderr}")
81
+
82
+ # Should count 3 sentences
83
+ if "3" not in result.stdout:
84
+ return failed("sentence_feature", f"Expected 3 sentences, got: {result.stdout}")
85
+
86
+ except Exception as e:
87
+ return failed("sentence_feature", f"Error running wordcount.py: {e}")
88
+
89
+ return passed("sentence_feature")
90
+
91
+
92
+ def check_tests_exist():
93
+ """Check that tests were written for the new feature."""
94
+ # Look for test files
95
+ test_files = list(WORKSPACE.glob("test_*.py"))
96
+ if not test_files:
97
+ return failed("tests_exist", "No test files found")
98
+
99
+ # Check if any test file has sentence-related tests
100
+ for tf in test_files:
101
+ content = tf.read_text()
102
+ if "sentence" in content.lower() or "sentences" in content.lower():
103
+ return passed("tests_exist")
104
+
105
+ return failed("tests_exist", "No sentence-related tests found")
106
+
107
+
108
+ def check_comet_state():
109
+ """Check that .comet.yaml state file was created."""
110
+ # Look for .comet.yaml anywhere in the workspace
111
+ comet_files = list(WORKSPACE.rglob(".comet.yaml"))
112
+ if not comet_files:
113
+ # Also check for openspec status files
114
+ status_files = list(WORKSPACE.rglob("*.yaml"))
115
+ comet_like = [f for f in status_files if "comet" in f.name.lower()]
116
+ if not comet_like:
117
+ return failed("comet_state", "No .comet.yaml or comet state files found")
118
+ return passed("comet_state")
119
+
120
+ return passed("comet_state")
121
+
122
+
123
+ def check_workflow_phases():
124
+ """Check that multiple workflow phases were evident."""
125
+ # Look for evidence of multiple phases in any markdown files
126
+ md_files = list(WORKSPACE.rglob("*.md"))
127
+ all_content = " ".join(f.read_text() for f in md_files if f.exists())
128
+
129
+ phases_found = []
130
+ phase_keywords = {
131
+ "open": ["proposal", "design outline", "task list"],
132
+ "design": ["design doc", "brainstorming", "technical design"],
133
+ "build": ["implementation", "plan", "code"],
134
+ "verify": ["verification", "test results", "passed"],
135
+ }
136
+
137
+ for phase, keywords in phase_keywords.items():
138
+ if any(kw in all_content.lower() for kw in keywords):
139
+ phases_found.append(phase)
140
+
141
+ if len(phases_found) >= 2:
142
+ return passed("workflow_phases")
143
+
144
+ return failed("workflow_phases", f"Only found evidence of phases: {phases_found}")
145
+
146
+
147
+ def main():
148
+ results = []
149
+
150
+ results.append(check_openspec_artifacts())
151
+ results.append(check_sentence_feature())
152
+ results.append(check_tests_exist())
153
+ results.append(check_comet_state())
154
+ results.append(check_workflow_phases())
155
+
156
+ passed_list = [r["check"] for r in results if r["status"] == "passed"]
157
+ failed_list = [f'{r["check"]}: {r.get("reason", "")}' for r in results if r["status"] == "failed"]
158
+
159
+ output = {"passed": passed_list, "failed": failed_list}
160
+
161
+ # Write results file
162
+ (WORKSPACE / RESULTS_FILE).write_text(json.dumps(output, indent=2))
163
+
164
+ # Also print for stdout capture
165
+ print(json.dumps(output))
166
+
167
+ return 0 if not failed_list else 1
168
+
169
+
170
+ if __name__ == "__main__":
171
+ sys.exit(main())
@@ -0,0 +1,28 @@
1
+ FROM python:3.12-slim
2
+
3
+ WORKDIR /workspace
4
+
5
+ RUN apt-get update && apt-get install -y --no-install-recommends \
6
+ bash git curl jq ca-certificates nodejs npm && \
7
+ rm -rf /var/lib/apt/lists/*
8
+
9
+ RUN pip install --no-cache-dir pyyaml pytest
10
+
11
+ RUN npm config set registry https://registry.npmmirror.com && \
12
+ npm install -g @fission-ai/openspec@1.3.1 && \
13
+ npm install -g @anthropic-ai/claude-code@latest && \
14
+ npm config delete registry
15
+
16
+ COPY . /workspace/
17
+ RUN mkdir -p openspec/changes
18
+
19
+ RUN useradd --create-home --shell /bin/bash agent && \
20
+ chown -R agent:agent /workspace
21
+ USER agent
22
+ ENV HOME=/home/agent
23
+ ENV PYTHONPATH=/workspace
24
+ RUN git config --global user.email "agent@eval.local" && \
25
+ git config --global user.name "Comet Eval Agent" && \
26
+ git config --global init.defaultBranch master
27
+
28
+ CMD ["bash"]
@@ -0,0 +1,19 @@
1
+ THREADS = {}
2
+
3
+
4
+ def _process(task: str) -> str:
5
+ return f"processed:{task}"
6
+
7
+
8
+ def run_pipeline(tasks, thread_id="default", require_review=True):
9
+ selected = list(tasks)[:1]
10
+ results = [_process(task) for task in selected]
11
+ summary = f"finalized {len(results)} task(s)"
12
+ THREADS[thread_id] = {"tasks": selected, "results": results, "status": "finalized"}
13
+ return {"status": "finalized", "results": results, "summary": summary}
14
+
15
+
16
+ def resume_after_review(thread_id="default"):
17
+ state = THREADS.get(thread_id, {"tasks": [], "results": []})
18
+ THREADS[thread_id] = {"tasks": [], "results": [], "status": "approved"}
19
+ return {"status": "approved", "results": [], "summary": "approved 0 task(s)"}
@@ -0,0 +1,53 @@
1
+ import pipeline
2
+
3
+
4
+ def setup_function():
5
+ pipeline.THREADS.clear()
6
+
7
+
8
+ def test_fan_out_processes_every_task_without_review():
9
+ result = pipeline.run_pipeline(
10
+ ["alpha", "beta", "gamma"],
11
+ thread_id="fanout",
12
+ require_review=False,
13
+ )
14
+
15
+ assert result["status"] == "finalized"
16
+ assert len(result["results"]) == 3
17
+ assert "alpha" in " ".join(result["results"])
18
+ assert "beta" in " ".join(result["results"])
19
+ assert "gamma" in " ".join(result["results"])
20
+
21
+
22
+ def test_multi_task_run_interrupts_for_review_before_summary():
23
+ result = pipeline.run_pipeline(["draft", "verify"], thread_id="review")
24
+
25
+ assert "__interrupt__" in result
26
+ assert result["status"] == "waiting_for_review"
27
+ assert not result.get("summary")
28
+
29
+
30
+ def test_resume_after_review_continues_same_thread():
31
+ first = pipeline.run_pipeline(["extract", "transform", "load"], thread_id="resume")
32
+
33
+ assert "__interrupt__" in first
34
+
35
+ resumed = pipeline.resume_after_review(thread_id="resume")
36
+
37
+ assert resumed["status"] == "approved"
38
+ assert len(resumed["results"]) == 3
39
+ assert "3" in resumed["summary"]
40
+ assert "extract" in " ".join(resumed["results"])
41
+
42
+
43
+ def test_thread_state_is_isolated_by_thread_id():
44
+ pipeline.run_pipeline(["a1", "a2"], thread_id="thread-a")
45
+ pipeline.run_pipeline(["b1", "b2", "b3"], thread_id="thread-b")
46
+
47
+ resumed_a = pipeline.resume_after_review(thread_id="thread-a")
48
+ resumed_b = pipeline.resume_after_review(thread_id="thread-b")
49
+
50
+ assert len(resumed_a["results"]) == 2
51
+ assert len(resumed_b["results"]) == 3
52
+ assert "a1" in " ".join(resumed_a["results"])
53
+ assert "b1" in " ".join(resumed_b["results"])
@@ -0,0 +1,21 @@
1
+ You are working on a Python project called "review-pipeline".
2
+
3
+ Your task: Use the comet workflow to fix a graph-style data processing pipeline.
4
+
5
+ This task is adapted from `skills-benchmarks/oss-fix-lg-execution`.
6
+
7
+ ## Bugs
8
+
9
+ 1. `run_pipeline()` only processes part of the submitted task list.
10
+ 2. Multi-task runs finalize immediately instead of pausing for human review.
11
+ 3. `resume_after_review()` restarts or loses state instead of continuing the reviewed thread.
12
+ 4. Thread state must be isolated by `thread_id`.
13
+
14
+ ## What to do
15
+
16
+ 1. Run `python -m pytest test_pipeline.py -q` to confirm the failures.
17
+ 2. Follow the comet workflow phases from open through archive.
18
+ 3. Fix the pipeline while keeping the public function names unchanged.
19
+ 4. Verify that fan-out, review interruption, resume, and thread isolation all pass.
20
+
21
+ When the workflow asks for confirmation, assume "yes, proceed with the recommended option".
@@ -0,0 +1,24 @@
1
+ [metadata]
2
+ name = "comet-graph-execution-review"
3
+ description = "Fix parallel fan-out, human review, and resume behavior in a graph-style processing pipeline"
4
+ difficulty = "hard"
5
+ category = "comet"
6
+ tags = ["comet", "workflow", "graph", "review", "resume"]
7
+ default_treatments = [
8
+ "CONTROL",
9
+ "COMET_FULL_040_BETA",
10
+ "COMET_FULL_039",
11
+ ]
12
+
13
+ [template]
14
+ required = []
15
+
16
+ [environment]
17
+ description = "Python workspace with a graph-style pipeline that drops fan-out results and finalizes before review."
18
+ dockerfile = "environment/Dockerfile"
19
+ timeout_sec = 900
20
+
21
+ [validation]
22
+ test_scripts = "test_graph_execution_review.py"
23
+ target_artifacts = []
24
+ timeout = 120
@@ -0,0 +1,24 @@
1
+ import subprocess
2
+ import sys
3
+
4
+ from comet_checks import WORKSPACE, _failed, _passed, run_comet_checks, write_results
5
+
6
+
7
+ def _tail(result: subprocess.CompletedProcess) -> str:
8
+ return "\n".join(part.strip() for part in (result.stdout, result.stderr) if part and part.strip())[-600:]
9
+
10
+
11
+ def check_graph_execution_review() -> dict:
12
+ result = subprocess.run(
13
+ [sys.executable, "-m", "pytest", "test_pipeline.py", "-q"],
14
+ capture_output=True,
15
+ text=True,
16
+ cwd=str(WORKSPACE),
17
+ )
18
+ if result.returncode != 0:
19
+ return _failed("graph_execution_review", _tail(result))
20
+ return _passed("graph_execution_review", "fan-out, review interruption, resume, and thread isolation pass")
21
+
22
+
23
+ if __name__ == "__main__":
24
+ write_results([*run_comet_checks(), check_graph_execution_review()])
@@ -0,0 +1,15 @@
1
+ FROM python:3.12-slim
2
+
3
+ WORKDIR /workspace
4
+
5
+ RUN apt-get update && apt-get install -y --no-install-recommends bash git curl jq ca-certificates nodejs npm && rm -rf /var/lib/apt/lists/*
6
+ RUN pip install --no-cache-dir pyyaml pytest
7
+ RUN npm config set registry https://registry.npmmirror.com && npm install -g @fission-ai/openspec@1.3.1 && npm install -g @anthropic-ai/claude-code@latest && npm config delete registry
8
+ COPY . /workspace/
9
+ RUN mkdir -p openspec/changes
10
+ RUN useradd --create-home --shell /bin/bash agent && chown -R agent:agent /workspace
11
+ USER agent
12
+ ENV HOME=/home/agent
13
+ ENV PYTHONPATH=/workspace
14
+ RUN git config --global user.email "agent@eval.local" && git config --global user.name "Comet Eval Agent" && git config --global init.defaultBranch master
15
+ CMD ["bash"]
@@ -0,0 +1,17 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ DOCUMENTS = {"a": "Alpha", "b": "Beta"}
5
+
6
+
7
+ def read_document(doc_id: str) -> str | None:
8
+ return DOCUMENTS.get(doc_id)
9
+
10
+
11
+ def delete_document(doc_id: str) -> dict:
12
+ DOCUMENTS.pop(doc_id, None)
13
+ return {"status": "deleted", "doc_id": doc_id}
14
+
15
+
16
+ def approve(approval_id: str) -> dict:
17
+ return {"status": "missing", "approval_id": approval_id}
@@ -0,0 +1,30 @@
1
+ from __future__ import annotations
2
+
3
+ import approvals
4
+
5
+
6
+ def setup_function():
7
+ approvals.DOCUMENTS.clear()
8
+ approvals.DOCUMENTS.update({"a": "Alpha", "b": "Beta"})
9
+ if hasattr(approvals, "PENDING_APPROVALS"):
10
+ approvals.PENDING_APPROVALS.clear()
11
+
12
+
13
+ def test_delete_returns_pending_approval_without_deleting():
14
+ result = approvals.delete_document("a")
15
+ assert result["status"] == "pending_approval"
16
+ assert result["doc_id"] == "a"
17
+ assert "approval_id" in result
18
+ assert approvals.read_document("a") == "Alpha"
19
+
20
+
21
+ def test_approve_executes_pending_delete_once():
22
+ pending = approvals.delete_document("a")
23
+ approved = approvals.approve(pending["approval_id"])
24
+ assert approved == {"status": "deleted", "doc_id": "a"}
25
+ assert approvals.read_document("a") is None
26
+ assert approvals.approve(pending["approval_id"])["status"] == "missing"
27
+
28
+
29
+ def test_read_stays_immediate():
30
+ assert approvals.read_document("b") == "Beta"
@@ -0,0 +1,15 @@
1
+ You are working on a Python project called "doc-ops".
2
+
3
+ Your task: Use the comet workflow to add a human approval step before dangerous document operations execute.
4
+
5
+ This task is adapted from `skills-benchmarks/oss-fix-lc-hitl`.
6
+
7
+ ## Requirements
8
+
9
+ - `delete_document(doc_id)` should return a pending approval record, not delete immediately.
10
+ - `approve(approval_id)` should execute the pending delete exactly once.
11
+ - Safe operations such as `read_document(doc_id)` should remain immediate.
12
+
13
+ Run `python -m pytest test_approvals.py -q`, follow the comet workflow, and archive the completed change.
14
+
15
+ When the workflow asks for confirmation, assume "yes, proceed with the recommended option".
@@ -0,0 +1,20 @@
1
+ [metadata]
2
+ name = "comet-human-approval-flow"
3
+ description = "Add a pending approval flow before dangerous document operations execute"
4
+ difficulty = "hard"
5
+ category = "comet"
6
+ tags = ["comet", "workflow", "approval", "hitl"]
7
+ default_treatments = ["CONTROL", "COMET_FULL_040_BETA", "COMET_FULL_039"]
8
+
9
+ [template]
10
+ required = []
11
+
12
+ [environment]
13
+ description = "Python document operations module missing human approval for dangerous actions."
14
+ dockerfile = "environment/Dockerfile"
15
+ timeout_sec = 900
16
+
17
+ [validation]
18
+ test_scripts = "test_human_approval_flow.py"
19
+ target_artifacts = []
20
+ timeout = 120
@@ -0,0 +1,20 @@
1
+ import subprocess
2
+ import sys
3
+
4
+ from comet_checks import run_comet_checks, write_results, _passed, _failed, WORKSPACE
5
+
6
+
7
+ def check_approval_flow() -> dict:
8
+ result = subprocess.run(
9
+ [sys.executable, "-m", "pytest", "test_approvals.py", "-q"],
10
+ capture_output=True,
11
+ text=True,
12
+ cwd=str(WORKSPACE),
13
+ )
14
+ if result.returncode != 0:
15
+ return _failed("human_approval_flow", (result.stdout + result.stderr)[-600:])
16
+ return _passed("human_approval_flow", "dangerous deletes require pending approval")
17
+
18
+
19
+ if __name__ == "__main__":
20
+ write_results([*run_comet_checks(), check_approval_flow()])
@@ -0,0 +1,20 @@
1
+ FROM python:3.12-slim
2
+
3
+ WORKDIR /workspace
4
+
5
+ RUN apt-get update && apt-get install -y --no-install-recommends \
6
+ bash git curl jq ca-certificates nodejs npm && \
7
+ rm -rf /var/lib/apt/lists/*
8
+ RUN pip install --no-cache-dir pyyaml pytest
9
+ RUN npm config set registry https://registry.npmmirror.com && \
10
+ npm install -g @fission-ai/openspec@1.3.1 && \
11
+ npm install -g @anthropic-ai/claude-code@latest && \
12
+ npm config delete registry
13
+ COPY . /workspace/
14
+ RUN mkdir -p openspec/changes
15
+ RUN useradd --create-home --shell /bin/bash agent && chown -R agent:agent /workspace
16
+ USER agent
17
+ ENV HOME=/home/agent
18
+ ENV PYTHONPATH=/workspace
19
+ RUN git config --global user.email "agent@eval.local" && git config --global user.name "Comet Eval Agent" && git config --global init.defaultBranch master
20
+ CMD ["bash"]
@@ -0,0 +1,19 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ def stream_response(tokens: list[str]):
5
+ buffer = ""
6
+ for token in tokens:
7
+ buffer += token
8
+ yield buffer
9
+
10
+
11
+ def lookup_order(order_id: str) -> str:
12
+ return {"A100": "shipped", "B200": "processing"}.get(order_id, "unknown")
13
+
14
+
15
+ def handle_tool_call(tool_name: str, argument: str) -> str:
16
+ if tool_name == "lookup_order":
17
+ lookup_order(argument)
18
+ return "Tool call completed."
19
+ return "Unsupported tool."
@@ -0,0 +1,15 @@
1
+ from __future__ import annotations
2
+
3
+ from chat_app import handle_tool_call, stream_response
4
+
5
+
6
+ def test_stream_response_yields_each_token():
7
+ assert list(stream_response(["Hel", "lo", "!"])) == ["Hel", "lo", "!"]
8
+
9
+
10
+ def test_tool_result_is_included_in_response():
11
+ assert handle_tool_call("lookup_order", "A100") == "Order A100 is shipped."
12
+
13
+
14
+ def test_unknown_order_is_reported():
15
+ assert handle_tool_call("lookup_order", "Z999") == "Order Z999 is unknown."
@@ -0,0 +1,14 @@
1
+ You are working on a Python project called "chat-stream".
2
+
3
+ Your task: Use the comet workflow to fix two related chat application bugs.
4
+
5
+ This task is adapted from `skills-benchmarks/oss-fix-lc-streaming`.
6
+
7
+ ## Bugs
8
+
9
+ 1. `stream_response()` buffers all tokens and emits one combined string instead of streaming token chunks.
10
+ 2. `handle_tool_call()` ignores the tool result and returns a placeholder response.
11
+
12
+ Run `python -m pytest test_chat_app.py -q` first, then follow the comet workflow through archive. Keep the public function names unchanged.
13
+
14
+ When the workflow asks for confirmation, assume "yes, proceed with the recommended option".
@@ -0,0 +1,20 @@
1
+ [metadata]
2
+ name = "comet-layered-streaming-fix"
3
+ description = "Fix both streaming chunk behavior and tool-result handling in a chat application"
4
+ difficulty = "hard"
5
+ category = "comet"
6
+ tags = ["comet", "workflow", "streaming", "layered-bugs"]
7
+ default_treatments = ["CONTROL", "COMET_FULL_040_BETA", "COMET_FULL_039"]
8
+
9
+ [template]
10
+ required = []
11
+
12
+ [environment]
13
+ description = "Python chat app with layered streaming and tool-result bugs."
14
+ dockerfile = "environment/Dockerfile"
15
+ timeout_sec = 900
16
+
17
+ [validation]
18
+ test_scripts = "test_layered_streaming_fix.py"
19
+ target_artifacts = []
20
+ timeout = 120
@@ -0,0 +1,20 @@
1
+ import subprocess
2
+ import sys
3
+
4
+ from comet_checks import run_comet_checks, write_results, _passed, _failed, WORKSPACE
5
+
6
+
7
+ def check_chat_fixes() -> dict:
8
+ result = subprocess.run(
9
+ [sys.executable, "-m", "pytest", "test_chat_app.py", "-q"],
10
+ capture_output=True,
11
+ text=True,
12
+ cwd=str(WORKSPACE),
13
+ )
14
+ if result.returncode != 0:
15
+ return _failed("chat_streaming_and_tool_results", (result.stdout + result.stderr)[-600:])
16
+ return _passed("chat_streaming_and_tool_results", "streaming chunks and tool results are correct")
17
+
18
+
19
+ if __name__ == "__main__":
20
+ write_results([*run_comet_checks(), check_chat_fixes()])
@@ -0,0 +1,15 @@
1
+ FROM python:3.12-slim
2
+
3
+ WORKDIR /workspace
4
+
5
+ RUN apt-get update && apt-get install -y --no-install-recommends bash git curl jq ca-certificates nodejs npm && rm -rf /var/lib/apt/lists/*
6
+ RUN pip install --no-cache-dir pyyaml pytest
7
+ RUN npm config set registry https://registry.npmmirror.com && npm install -g @fission-ai/openspec@1.3.1 && npm install -g @anthropic-ai/claude-code@latest && npm config delete registry
8
+ COPY . /workspace/
9
+ RUN mkdir -p openspec/changes
10
+ RUN useradd --create-home --shell /bin/bash agent && chown -R agent:agent /workspace
11
+ USER agent
12
+ ENV HOME=/home/agent
13
+ ENV PYTHONPATH=/workspace
14
+ RUN git config --global user.email "agent@eval.local" && git config --global user.name "Comet Eval Agent" && git config --global init.defaultBranch master
15
+ CMD ["bash"]
@@ -0,0 +1,4 @@
1
+ # Parking Lot
2
+
3
+ This file is intentionally unrelated to the invoice tax bug.
4
+ Do not edit it during the task.
@@ -0,0 +1,5 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ def calculate_total(subtotal: float, tax_rate: float) -> float:
5
+ return round(subtotal + tax_rate, 2)
@@ -0,0 +1,18 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+
5
+ from invoice import calculate_total
6
+
7
+
8
+ def test_tax_rate_is_applied_as_percentage():
9
+ assert calculate_total(100, 0.08) == 108.0
10
+
11
+
12
+ def test_zero_tax_still_returns_subtotal():
13
+ assert calculate_total(42.5, 0) == 42.5
14
+
15
+
16
+ def test_distractor_file_is_untouched():
17
+ text = Path("distractor.md").read_text(encoding="utf-8")
18
+ assert "Do not edit it during the task." in text
@@ -0,0 +1,17 @@
1
+ You are working on a Python project called "invoice-lite".
2
+
3
+ Your task: Use the comet workflow to fix the invoice total calculation.
4
+
5
+ This task is adapted from `skills-benchmarks/lc-basic-noise`.
6
+
7
+ ## Main bug
8
+
9
+ `calculate_total(subtotal, tax_rate)` currently adds the raw tax rate instead of applying it as a percentage. `calculate_total(100, 0.08)` should return `108.0`.
10
+
11
+ ## Distractor
12
+
13
+ The file `distractor.md` contains unrelated ideas. Do not rewrite or "clean up" that file.
14
+
15
+ Run `python -m pytest test_invoice.py -q`, follow the comet workflow, and archive the completed change.
16
+
17
+ When the workflow asks for confirmation, assume "yes, proceed with the recommended option".