@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.
- package/README.md +27 -18
- package/assets/manifest.json +2 -1
- package/assets/skills/comet/SKILL.md +25 -1
- package/assets/skills/comet/reference/comet-yaml-fields.md +6 -4
- package/assets/skills/comet/reference/context-recovery.md +10 -0
- package/assets/skills/comet/reference/scripts.md +47 -15
- package/assets/skills/comet/rules/comet-phase-guard.en.md +8 -0
- package/assets/skills/comet/rules/comet-phase-guard.md +9 -1
- package/assets/skills/comet/scripts/comet-resume-probe.mjs +3 -0
- package/assets/skills/comet/scripts/comet-runtime.mjs +1664 -512
- package/assets/skills/comet-archive/SKILL.md +24 -11
- package/assets/skills/comet-build/SKILL.md +40 -31
- package/assets/skills/comet-design/SKILL.md +1 -0
- package/assets/skills/comet-hotfix/SKILL.md +3 -1
- package/assets/skills/comet-open/SKILL.md +11 -1
- package/assets/skills/comet-tweak/SKILL.md +3 -1
- package/assets/skills/comet-verify/SKILL.md +29 -20
- package/assets/skills-zh/comet/SKILL.md +25 -1
- package/assets/skills-zh/comet/reference/comet-yaml-fields.md +5 -4
- package/assets/skills-zh/comet/reference/context-recovery.md +10 -0
- package/assets/skills-zh/comet/reference/scripts.md +47 -15
- package/assets/skills-zh/comet-archive/SKILL.md +24 -11
- package/assets/skills-zh/comet-build/SKILL.md +40 -31
- package/assets/skills-zh/comet-design/SKILL.md +1 -0
- package/assets/skills-zh/comet-hotfix/SKILL.md +3 -1
- package/assets/skills-zh/comet-open/SKILL.md +11 -1
- package/assets/skills-zh/comet-tweak/SKILL.md +3 -1
- package/assets/skills-zh/comet-verify/SKILL.md +30 -21
- package/dist/app/cli/comet-banner.d.ts +25 -0
- package/dist/app/cli/comet-banner.d.ts.map +1 -0
- package/dist/app/cli/comet-banner.js +265 -0
- package/dist/app/cli/comet-banner.js.map +1 -0
- package/dist/app/cli/index.js +37 -3
- package/dist/app/cli/index.js.map +1 -1
- package/dist/app/commands/classic.d.ts +4 -0
- package/dist/app/commands/classic.d.ts.map +1 -0
- package/dist/app/commands/classic.js +11 -0
- package/dist/app/commands/classic.js.map +1 -0
- package/dist/app/commands/doctor.d.ts +1 -0
- package/dist/app/commands/doctor.d.ts.map +1 -1
- package/dist/app/commands/doctor.js +100 -35
- package/dist/app/commands/doctor.js.map +1 -1
- package/dist/app/commands/eval.d.ts.map +1 -1
- package/dist/app/commands/eval.js +57 -20
- package/dist/app/commands/eval.js.map +1 -1
- package/dist/app/commands/i18n.d.ts +1 -1
- package/dist/app/commands/i18n.d.ts.map +1 -1
- package/dist/app/commands/i18n.js +12 -4
- package/dist/app/commands/i18n.js.map +1 -1
- package/dist/app/commands/init.d.ts.map +1 -1
- package/dist/app/commands/init.js +16 -13
- package/dist/app/commands/init.js.map +1 -1
- package/dist/app/commands/project-scope-selection.d.ts +13 -0
- package/dist/app/commands/project-scope-selection.d.ts.map +1 -0
- package/dist/app/commands/project-scope-selection.js +33 -0
- package/dist/app/commands/project-scope-selection.js.map +1 -0
- package/dist/app/commands/resume-probe.d.ts +11 -0
- package/dist/app/commands/resume-probe.d.ts.map +1 -0
- package/dist/app/commands/resume-probe.js +63 -0
- package/dist/app/commands/resume-probe.js.map +1 -0
- package/dist/app/commands/status.d.ts +31 -0
- package/dist/app/commands/status.d.ts.map +1 -1
- package/dist/app/commands/status.js +109 -20
- package/dist/app/commands/status.js.map +1 -1
- package/dist/app/commands/uninstall.d.ts +2 -0
- package/dist/app/commands/uninstall.d.ts.map +1 -1
- package/dist/app/commands/uninstall.js +217 -40
- package/dist/app/commands/uninstall.js.map +1 -1
- package/dist/app/commands/update.d.ts +6 -0
- package/dist/app/commands/update.d.ts.map +1 -1
- package/dist/app/commands/update.js +361 -68
- package/dist/app/commands/update.js.map +1 -1
- package/dist/config/repository-layout.json +4 -2
- package/dist/domains/bundle/bundle-platform.d.ts.map +1 -1
- package/dist/domains/bundle/bundle-platform.js +3 -1
- package/dist/domains/bundle/bundle-platform.js.map +1 -1
- package/dist/domains/bundle/eval-manifest-runtime.d.ts +6 -0
- package/dist/domains/bundle/eval-manifest-runtime.d.ts.map +1 -0
- package/dist/domains/bundle/eval-manifest-runtime.js +58 -0
- package/dist/domains/bundle/eval-manifest-runtime.js.map +1 -0
- package/dist/domains/bundle/types.d.ts +1 -1
- package/dist/domains/bundle/types.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-archive.d.ts +1 -0
- package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-archive.js +35 -38
- package/dist/domains/comet-classic/classic-archive.js.map +1 -1
- package/dist/domains/comet-classic/classic-cli.d.ts +1 -1
- package/dist/domains/comet-classic/classic-cli.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-cli.js +3 -0
- package/dist/domains/comet-classic/classic-cli.js.map +1 -1
- package/dist/domains/comet-classic/classic-command-checks.d.ts +20 -0
- package/dist/domains/comet-classic/classic-command-checks.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-command-checks.js +97 -0
- package/dist/domains/comet-classic/classic-command-checks.js.map +1 -0
- package/dist/domains/comet-classic/classic-current-change.d.ts +19 -0
- package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-current-change.js +132 -0
- package/dist/domains/comet-classic/classic-current-change.js.map +1 -0
- package/dist/domains/comet-classic/classic-diagnostics.d.ts +2 -1
- package/dist/domains/comet-classic/classic-diagnostics.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-diagnostics.js +54 -1
- package/dist/domains/comet-classic/classic-diagnostics.js.map +1 -1
- package/dist/domains/comet-classic/classic-evidence.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-evidence.js +4 -0
- package/dist/domains/comet-classic/classic-evidence.js.map +1 -1
- package/dist/domains/comet-classic/classic-guard.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-guard.js +101 -141
- package/dist/domains/comet-classic/classic-guard.js.map +1 -1
- package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-hook-guard.js +67 -29
- package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
- package/dist/domains/comet-classic/classic-project-config.d.ts +16 -0
- package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-project-config.js +40 -0
- package/dist/domains/comet-classic/classic-project-config.js.map +1 -0
- package/dist/domains/comet-classic/classic-resolver.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-resolver.js +3 -3
- package/dist/domains/comet-classic/classic-resolver.js.map +1 -1
- package/dist/domains/comet-classic/classic-resume-probe-command.d.ts +3 -0
- package/dist/domains/comet-classic/classic-resume-probe-command.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe-command.js +58 -0
- package/dist/domains/comet-classic/classic-resume-probe-command.js.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts +2 -0
- package/dist/domains/comet-classic/classic-resume-probe-entry.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe-entry.js +4 -0
- package/dist/domains/comet-classic/classic-resume-probe-entry.js.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe.d.ts +29 -0
- package/dist/domains/comet-classic/classic-resume-probe.d.ts.map +1 -0
- package/dist/domains/comet-classic/classic-resume-probe.js +386 -0
- package/dist/domains/comet-classic/classic-resume-probe.js.map +1 -0
- package/dist/domains/comet-classic/classic-runtime-run.d.ts +2 -1
- package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-runtime-run.js +269 -4
- package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
- package/dist/domains/comet-classic/classic-state-command.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-state-command.js +129 -15
- package/dist/domains/comet-classic/classic-state-command.js.map +1 -1
- package/dist/domains/comet-classic/classic-state.d.ts +3 -3
- package/dist/domains/comet-classic/classic-state.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-state.js +4 -6
- package/dist/domains/comet-classic/classic-state.js.map +1 -1
- package/dist/domains/comet-classic/classic-store.d.ts +4 -1
- package/dist/domains/comet-classic/classic-store.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-store.js +27 -9
- package/dist/domains/comet-classic/classic-store.js.map +1 -1
- package/dist/domains/comet-classic/classic-transitions.d.ts +1 -1
- package/dist/domains/comet-classic/classic-transitions.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-transitions.js +20 -1
- package/dist/domains/comet-classic/classic-transitions.js.map +1 -1
- package/dist/domains/comet-classic/classic-validate-command.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-validate-command.js +1 -0
- package/dist/domains/comet-classic/classic-validate-command.js.map +1 -1
- package/dist/domains/comet-classic/index.d.ts +3 -0
- package/dist/domains/comet-classic/index.d.ts.map +1 -1
- package/dist/domains/comet-classic/index.js +3 -0
- package/dist/domains/comet-classic/index.js.map +1 -1
- package/dist/domains/dashboard/collector.js +10 -2
- package/dist/domains/dashboard/collector.js.map +1 -1
- package/dist/domains/dashboard/web/assets/{index-CjU3VXVu.js → index-CIvN-PL8.js} +11 -11
- package/dist/domains/dashboard/web/assets/{index-BcO3_QlT.css → index-DcyRPBnT.css} +1 -1
- package/dist/domains/dashboard/web/index.html +16 -16
- package/dist/domains/engine/types.d.ts +1 -1
- package/dist/domains/engine/types.d.ts.map +1 -1
- package/dist/domains/integrations/openspec.d.ts.map +1 -1
- package/dist/domains/integrations/openspec.js +6 -6
- package/dist/domains/integrations/openspec.js.map +1 -1
- package/dist/domains/skill/find.d.ts.map +1 -1
- package/dist/domains/skill/find.js +1 -6
- package/dist/domains/skill/find.js.map +1 -1
- package/dist/domains/skill/managed-markdown.d.ts +14 -0
- package/dist/domains/skill/managed-markdown.d.ts.map +1 -0
- package/dist/domains/skill/managed-markdown.js +126 -0
- package/dist/domains/skill/managed-markdown.js.map +1 -0
- package/dist/domains/skill/platform-install.d.ts +4 -3
- package/dist/domains/skill/platform-install.d.ts.map +1 -1
- package/dist/domains/skill/platform-install.js +96 -26
- package/dist/domains/skill/platform-install.js.map +1 -1
- package/dist/domains/skill/project-instructions.d.ts +22 -0
- package/dist/domains/skill/project-instructions.d.ts.map +1 -0
- package/dist/domains/skill/project-instructions.js +61 -0
- package/dist/domains/skill/project-instructions.js.map +1 -0
- package/dist/domains/skill/uninstall.d.ts +3 -1
- package/dist/domains/skill/uninstall.d.ts.map +1 -1
- package/dist/domains/skill/uninstall.js +86 -39
- package/dist/domains/skill/uninstall.js.map +1 -1
- package/dist/platform/install/detect.d.ts +2 -1
- package/dist/platform/install/detect.d.ts.map +1 -1
- package/dist/platform/install/detect.js +10 -1
- package/dist/platform/install/detect.js.map +1 -1
- package/dist/platform/install/platforms.d.ts +5 -1
- package/dist/platform/install/platforms.d.ts.map +1 -1
- package/dist/platform/install/platforms.js +21 -4
- package/dist/platform/install/platforms.js.map +1 -1
- package/dist/platform/install/project-registry.d.ts +37 -0
- package/dist/platform/install/project-registry.d.ts.map +1 -0
- package/dist/platform/install/project-registry.js +205 -0
- package/dist/platform/install/project-registry.js.map +1 -0
- package/eval/.env +28 -0
- package/eval/.env.example +52 -0
- package/eval/CLAUDE.md +43 -0
- package/eval/README.md +538 -0
- package/eval/langsmith/.env.example +16 -0
- package/eval/langsmith/README.md +93 -0
- package/eval/langsmith/skills/README.md +5 -0
- package/eval/langsmith/tasks/README.md +5 -0
- package/eval/langsmith/tests/conftest.py +187 -0
- package/eval/langsmith/tests/tasks/test_tasks.py +287 -0
- package/eval/langsmith/treatments/README.md +5 -0
- package/eval/local/README.md +80 -0
- package/eval/local/regression_baseline.json +13 -0
- package/eval/local/report-style-demo-assets/quality_cost.en.svg +41 -0
- package/eval/local/report-style-demo-assets/quality_cost.zh.svg +41 -0
- package/eval/local/report-style-demo-assets/rubric_delta.en.svg +56 -0
- package/eval/local/report-style-demo-assets/rubric_delta.zh.svg +56 -0
- package/eval/local/report-style-demo-assets/task_outcomes.en.svg +46 -0
- package/eval/local/report-style-demo-assets/task_outcomes.zh.svg +46 -0
- package/eval/local/report-style-demo.html +867 -0
- package/eval/local/scripts/compare_baselines.py +1018 -0
- package/eval/local/scripts/generate_report_style_demo_charts.py +322 -0
- package/eval/local/scripts/regression_check.py +171 -0
- package/eval/local/scripts/render_readme_benchmark_figures.py +416 -0
- package/eval/local/scripts/rescore_rubric.py +120 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/SKILL.md +282 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/auto-transition.md +27 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/comet-yaml-fields.md +68 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/context-recovery.md +35 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/debug-gate.md +17 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/decision-point.md +20 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/dirty-worktree.md +59 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/file-structure.md +28 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/reference/subagent-dispatch.md +113 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/rules/comet-phase-guard.md +125 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-archive.sh +311 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-env.sh +110 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-guard.sh +778 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-handoff.sh +390 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-hook-guard.sh +336 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-state.sh +1338 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039/scripts/comet-yaml-validate.sh +225 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-archive/SKILL.md +100 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-build/SKILL.md +304 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-design/SKILL.md +263 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-hotfix/SKILL.md +204 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-open/SKILL.md +220 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-tweak/SKILL.md +180 -0
- package/eval/local/skills/benchmarks/039-release/comet-classic-039-verify/SKILL.md +234 -0
- package/eval/local/skills/benchmarks/040-beta/comet/SKILL.md +261 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/auto-transition.md +27 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/comet-yaml-fields.md +73 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/context-recovery.md +45 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/debug-gate.md +33 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/decision-point.md +31 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/dirty-worktree.md +59 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/file-structure.md +28 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/intent-frame.md +74 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/scripts.md +69 -0
- package/eval/local/skills/benchmarks/040-beta/comet/reference/subagent-dispatch.md +169 -0
- package/eval/local/skills/benchmarks/040-beta/comet/rules/comet-phase-guard.md +130 -0
- package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/checks.yaml +6 -0
- package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/guardrails.yaml +13 -0
- package/eval/local/skills/benchmarks/040-beta/comet/runtime/classic/skill.yaml +122 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-archive.mjs +9515 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-env.mjs +15 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-guard.mjs +10173 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-handoff.mjs +9491 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-hook-guard.mjs +9175 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-intent.mjs +404 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-state.mjs +9273 -0
- package/eval/local/skills/benchmarks/040-beta/comet/scripts/comet-yaml-validate.mjs +7627 -0
- package/eval/local/skills/benchmarks/040-beta/comet-archive/SKILL.md +110 -0
- package/eval/local/skills/benchmarks/040-beta/comet-build/SKILL.md +315 -0
- package/eval/local/skills/benchmarks/040-beta/comet-design/SKILL.md +260 -0
- package/eval/local/skills/benchmarks/040-beta/comet-hotfix/SKILL.md +190 -0
- package/eval/local/skills/benchmarks/040-beta/comet-open/SKILL.md +210 -0
- package/eval/local/skills/benchmarks/040-beta/comet-tweak/SKILL.md +183 -0
- package/eval/local/skills/benchmarks/040-beta/comet-verify/SKILL.md +230 -0
- package/eval/local/skills/benchmarks/dependency/claude-md/comet-workflow/CLAUDE.md +12 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-apply-change/SKILL.md +156 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-archive-change/SKILL.md +114 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-bulk-archive-change/SKILL.md +246 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-continue-change/SKILL.md +118 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-explore/SKILL.md +288 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-ff-change/SKILL.md +101 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-new-change/SKILL.md +74 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-onboard/SKILL.md +554 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-propose/SKILL.md +110 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-sync-specs/SKILL.md +138 -0
- package/eval/local/skills/benchmarks/dependency/openspec/openspec-verify-change/SKILL.md +168 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/SKILL.md +159 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/frame-template.html +213 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/helper.js +167 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/server.cjs +723 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/start-server.sh +209 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/scripts/stop-server.sh +120 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/brainstorming/visual-companion.md +291 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/dispatching-parallel-agents/SKILL.md +185 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/executing-plans/SKILL.md +70 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/finishing-a-development-branch/SKILL.md +241 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/receiving-code-review/SKILL.md +213 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/SKILL.md +103 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/requesting-code-review/code-reviewer.md +172 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/SKILL.md +418 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/implementer-prompt.md +139 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/review-package +44 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/sdd-workspace +22 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/scripts/task-brief +40 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/subagent-driven-development/task-reviewer-prompt.md +188 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/CREATION-LOG.md +119 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/SKILL.md +296 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/condition-based-waiting.md +115 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/defense-in-depth.md +122 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/find-polluter.sh +63 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/root-cause-tracing.md +169 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-academic.md +14 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-1.md +58 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-2.md +68 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/systematic-debugging/test-pressure-3.md +69 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/SKILL.md +371 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/test-driven-development/testing-anti-patterns.md +299 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/using-git-worktrees/SKILL.md +202 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/verification-before-completion/SKILL.md +139 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/SKILL.md +174 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/SKILL.md +689 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/anthropic-best-practices.md +1150 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/graphviz-conventions.dot +172 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/persuasion-principles.md +187 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/render-graphs.js +168 -0
- package/eval/local/skills/benchmarks/dependency/superpowers/writing-skills/testing-skills-with-subagents.md +384 -0
- package/eval/local/tasks/authoring-skill-smoke/environment/Dockerfile +2 -0
- package/eval/local/tasks/authoring-skill-smoke/instruction.md +4 -0
- package/eval/local/tasks/authoring-skill-smoke/task.toml +21 -0
- package/eval/local/tasks/authoring-skill-smoke/validation/test_authoring_skill_smoke.py +54 -0
- package/eval/local/tasks/comet-agent-memory-routing/environment/Dockerfile +28 -0
- package/eval/local/tasks/comet-agent-memory-routing/environment/agent_system.py +40 -0
- package/eval/local/tasks/comet-agent-memory-routing/environment/test_agent_system.py +29 -0
- package/eval/local/tasks/comet-agent-memory-routing/instruction.md +20 -0
- package/eval/local/tasks/comet-agent-memory-routing/task.toml +24 -0
- package/eval/local/tasks/comet-agent-memory-routing/validation/test_agent_memory_routing.py +24 -0
- package/eval/local/tasks/comet-api-cache-ttl/environment/Dockerfile +39 -0
- package/eval/local/tasks/comet-api-cache-ttl/environment/cache.py +39 -0
- package/eval/local/tasks/comet-api-cache-ttl/environment/test_cache.py +81 -0
- package/eval/local/tasks/comet-api-cache-ttl/instruction.md +33 -0
- package/eval/local/tasks/comet-api-cache-ttl/task.toml +24 -0
- package/eval/local/tasks/comet-api-cache-ttl/validation/test_api_cache_ttl.py +58 -0
- package/eval/local/tasks/comet-cross-file-refactor/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-cross-file-refactor/environment/cli.py +13 -0
- package/eval/local/tasks/comet-cross-file-refactor/environment/counting.py +13 -0
- package/eval/local/tasks/comet-cross-file-refactor/environment/test_textkit.py +21 -0
- package/eval/local/tasks/comet-cross-file-refactor/instruction.md +16 -0
- package/eval/local/tasks/comet-cross-file-refactor/task.toml +20 -0
- package/eval/local/tasks/comet-cross-file-refactor/validation/test_cross_file_refactor.py +20 -0
- package/eval/local/tasks/comet-dependency-confusion/environment/Dockerfile +28 -0
- package/eval/local/tasks/comet-dependency-confusion/environment/app.py +8 -0
- package/eval/local/tasks/comet-dependency-confusion/environment/settings_loader.py +14 -0
- package/eval/local/tasks/comet-dependency-confusion/environment/test_settings_service.py +19 -0
- package/eval/local/tasks/comet-dependency-confusion/instruction.md +18 -0
- package/eval/local/tasks/comet-dependency-confusion/task.toml +24 -0
- package/eval/local/tasks/comet-dependency-confusion/validation/test_dependency_confusion.py +24 -0
- package/eval/local/tasks/comet-fix-median/environment/Dockerfile +50 -0
- package/eval/local/tasks/comet-fix-median/environment/stats.py +54 -0
- package/eval/local/tasks/comet-fix-median/environment/test_stats.py +68 -0
- package/eval/local/tasks/comet-fix-median/instruction.md +25 -0
- package/eval/local/tasks/comet-fix-median/task.toml +24 -0
- package/eval/local/tasks/comet-fix-median/validation/test_fix_median.py +60 -0
- package/eval/local/tasks/comet-framework-selection/environment/Dockerfile +28 -0
- package/eval/local/tasks/comet-framework-selection/environment/architecture.py +12 -0
- package/eval/local/tasks/comet-framework-selection/environment/test_architecture.py +30 -0
- package/eval/local/tasks/comet-framework-selection/instruction.md +22 -0
- package/eval/local/tasks/comet-framework-selection/task.toml +24 -0
- package/eval/local/tasks/comet-framework-selection/validation/test_framework_selection.py +24 -0
- package/eval/local/tasks/comet-full-workflow/environment/Dockerfile +53 -0
- package/eval/local/tasks/comet-full-workflow/environment/test_wordcount.py +29 -0
- package/eval/local/tasks/comet-full-workflow/environment/wordcount.py +40 -0
- package/eval/local/tasks/comet-full-workflow/instruction.md +18 -0
- package/eval/local/tasks/comet-full-workflow/task.toml +24 -0
- package/eval/local/tasks/comet-full-workflow/validation/test_full_workflow.py +171 -0
- package/eval/local/tasks/comet-graph-execution-review/environment/Dockerfile +28 -0
- package/eval/local/tasks/comet-graph-execution-review/environment/pipeline.py +19 -0
- package/eval/local/tasks/comet-graph-execution-review/environment/test_pipeline.py +53 -0
- package/eval/local/tasks/comet-graph-execution-review/instruction.md +21 -0
- package/eval/local/tasks/comet-graph-execution-review/task.toml +24 -0
- package/eval/local/tasks/comet-graph-execution-review/validation/test_graph_execution_review.py +24 -0
- package/eval/local/tasks/comet-human-approval-flow/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-human-approval-flow/environment/approvals.py +17 -0
- package/eval/local/tasks/comet-human-approval-flow/environment/test_approvals.py +30 -0
- package/eval/local/tasks/comet-human-approval-flow/instruction.md +15 -0
- package/eval/local/tasks/comet-human-approval-flow/task.toml +20 -0
- package/eval/local/tasks/comet-human-approval-flow/validation/test_human_approval_flow.py +20 -0
- package/eval/local/tasks/comet-layered-streaming-fix/environment/Dockerfile +20 -0
- package/eval/local/tasks/comet-layered-streaming-fix/environment/chat_app.py +19 -0
- package/eval/local/tasks/comet-layered-streaming-fix/environment/test_chat_app.py +15 -0
- package/eval/local/tasks/comet-layered-streaming-fix/instruction.md +14 -0
- package/eval/local/tasks/comet-layered-streaming-fix/task.toml +20 -0
- package/eval/local/tasks/comet-layered-streaming-fix/validation/test_layered_streaming_fix.py +20 -0
- package/eval/local/tasks/comet-noise-distractor/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-noise-distractor/environment/distractor.md +4 -0
- package/eval/local/tasks/comet-noise-distractor/environment/invoice.py +5 -0
- package/eval/local/tasks/comet-noise-distractor/environment/test_invoice.py +18 -0
- package/eval/local/tasks/comet-noise-distractor/instruction.md +17 -0
- package/eval/local/tasks/comet-noise-distractor/task.toml +20 -0
- package/eval/local/tasks/comet-noise-distractor/validation/test_noise_distractor.py +20 -0
- package/eval/local/tasks/comet-observability-env-template/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-observability-env-template/environment/env_writer.py +17 -0
- package/eval/local/tasks/comet-observability-env-template/environment/test_env_writer.py +17 -0
- package/eval/local/tasks/comet-observability-env-template/instruction.md +20 -0
- package/eval/local/tasks/comet-observability-env-template/task.toml +20 -0
- package/eval/local/tasks/comet-observability-env-template/validation/test_observability_env_template.py +46 -0
- package/eval/local/tasks/comet-perf-dedupe/environment/Dockerfile +39 -0
- package/eval/local/tasks/comet-perf-dedupe/environment/dedupe.py +22 -0
- package/eval/local/tasks/comet-perf-dedupe/environment/test_dedupe.py +43 -0
- package/eval/local/tasks/comet-perf-dedupe/instruction.md +25 -0
- package/eval/local/tasks/comet-perf-dedupe/task.toml +24 -0
- package/eval/local/tasks/comet-perf-dedupe/validation/test_perf_dedupe.py +40 -0
- package/eval/local/tasks/comet-persistence-threading/environment/Dockerfile +15 -0
- package/eval/local/tasks/comet-persistence-threading/environment/session_store.py +15 -0
- package/eval/local/tasks/comet-persistence-threading/environment/test_session_store.py +21 -0
- package/eval/local/tasks/comet-persistence-threading/instruction.md +14 -0
- package/eval/local/tasks/comet-persistence-threading/task.toml +20 -0
- package/eval/local/tasks/comet-persistence-threading/validation/test_persistence_threading.py +20 -0
- package/eval/local/tasks/comet-refactor-counter/environment/Dockerfile +39 -0
- package/eval/local/tasks/comet-refactor-counter/environment/test_text_processor.py +57 -0
- package/eval/local/tasks/comet-refactor-counter/environment/text_processor.py +49 -0
- package/eval/local/tasks/comet-refactor-counter/instruction.md +31 -0
- package/eval/local/tasks/comet-refactor-counter/task.toml +24 -0
- package/eval/local/tasks/comet-refactor-counter/validation/test_refactor_counter.py +75 -0
- package/eval/local/tasks/comet-robust-config/environment/Dockerfile +39 -0
- package/eval/local/tasks/comet-robust-config/environment/config_loader.py +56 -0
- package/eval/local/tasks/comet-robust-config/environment/test_config_loader.py +72 -0
- package/eval/local/tasks/comet-robust-config/instruction.md +30 -0
- package/eval/local/tasks/comet-robust-config/task.toml +24 -0
- package/eval/local/tasks/comet-robust-config/validation/test_robust_config.py +37 -0
- package/eval/local/tasks/generic-skill-smoke/environment/Dockerfile +2 -0
- package/eval/local/tasks/generic-skill-smoke/instruction.md +7 -0
- package/eval/local/tasks/generic-skill-smoke/task.toml +21 -0
- package/eval/local/tasks/generic-skill-smoke/validation/test_generic_skill_smoke.py +36 -0
- package/eval/local/tasks/index.yaml +155 -0
- package/eval/local/tasks/workflow-overlay-contract/environment/Dockerfile +5 -0
- package/eval/local/tasks/workflow-overlay-contract/instruction.md +5 -0
- package/eval/local/tasks/workflow-overlay-contract/task.toml +21 -0
- package/eval/local/tasks/workflow-overlay-contract/validation/test_workflow_overlay_contract.py +235 -0
- package/eval/local/tasks/workflow-route-conformance/environment/Dockerfile +2 -0
- package/eval/local/tasks/workflow-route-conformance/instruction.md +5 -0
- package/eval/local/tasks/workflow-route-conformance/task.toml +21 -0
- package/eval/local/tasks/workflow-route-conformance/validation/test_workflow_route_conformance.py +84 -0
- package/eval/local/tests/conftest.py +1148 -0
- package/eval/local/tests/scaffold/test_attribution.py +48 -0
- package/eval/local/tests/scaffold/test_compare_baselines.py +999 -0
- package/eval/local/tests/scaffold/test_conftest_helpers.py +534 -0
- package/eval/local/tests/scaffold/test_evidence.py +15 -0
- package/eval/local/tests/scaffold/test_langsmith_conftest.py +244 -0
- package/eval/local/tests/scaffold/test_logging.py +243 -0
- package/eval/local/tests/scaffold/test_manifests.py +132 -0
- package/eval/local/tests/scaffold/test_profiles.py +866 -0
- package/eval/local/tests/scaffold/test_regression_check.py +19 -0
- package/eval/local/tests/scaffold/test_report_style_demo_charts.py +45 -0
- package/eval/local/tests/scaffold/test_sample_quality.py +211 -0
- package/eval/local/tests/scaffold/test_tasks.py +168 -0
- package/eval/local/tests/scaffold/test_treatments.py +244 -0
- package/eval/local/tests/scaffold/test_utils.py +139 -0
- package/eval/local/tests/tasks/test_tasks.py +445 -0
- package/eval/local/tests/tasks/test_validation_scripts.py +143 -0
- package/eval/local/treatments/comet/comet_full_039.yaml +141 -0
- package/eval/local/treatments/comet/comet_full_040_beta.yaml +140 -0
- package/eval/local/treatments/common/control.yaml +4 -0
- package/eval/pyproject.toml +41 -0
- package/eval/report-html-config.json +6 -0
- package/eval/scaffold/__init__.py +67 -0
- package/eval/scaffold/python/__init__.py +95 -0
- package/eval/scaffold/python/attribution.py +43 -0
- package/eval/scaffold/python/evidence.py +38 -0
- package/eval/scaffold/python/external_data_handler.py +18 -0
- package/eval/scaffold/python/generic_llm_judge.py +235 -0
- package/eval/scaffold/python/judge_config.py +168 -0
- package/eval/scaffold/python/llm_judge.py +191 -0
- package/eval/scaffold/python/logging.py +705 -0
- package/eval/scaffold/python/manifests.py +129 -0
- package/eval/scaffold/python/paper_charts.py +25 -0
- package/eval/scaffold/python/pass_at_k.py +107 -0
- package/eval/scaffold/python/paths.py +56 -0
- package/eval/scaffold/python/profiles.py +127 -0
- package/eval/scaffold/python/report_outputs.py +1391 -0
- package/eval/scaffold/python/sample_quality.py +339 -0
- package/eval/scaffold/python/schema.py +39 -0
- package/eval/scaffold/python/skill_parser.py +469 -0
- package/eval/scaffold/python/tasks.py +330 -0
- package/eval/scaffold/python/treatments.py +271 -0
- package/eval/scaffold/python/utils.py +366 -0
- package/eval/scaffold/python/validation/__init__.py +21 -0
- package/eval/scaffold/python/validation/authoring_rubric.py +326 -0
- package/eval/scaffold/python/validation/comet_workflow.py +187 -0
- package/eval/scaffold/python/validation/core.py +264 -0
- package/eval/scaffold/python/validation/dataset.py +337 -0
- package/eval/scaffold/python/validation/docker.py +106 -0
- package/eval/scaffold/python/validation/evaluator.py +549 -0
- package/eval/scaffold/python/validation/generic_rubric.py +169 -0
- package/eval/scaffold/python/validation/rubric.py +740 -0
- package/eval/scaffold/python/validation/runner.py +237 -0
- package/eval/scaffold/python/validation/scripts.py +58 -0
- package/eval/scaffold/python/validation/tracing.py +313 -0
- package/eval/scaffold/shell/common.sh +126 -0
- package/eval/scaffold/shell/docker.sh +482 -0
- package/eval/scaffold/shell/run-claude-loop.sh +181 -0
- package/eval/scaffold/shell/setup.sh +259 -0
- package/eval/simulator-instruction.md +9 -0
- package/package.json +24 -2
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from comet_checks import run_comet_checks, write_results, _passed, _failed, WORKSPACE
|
|
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_dependency_compatibility() -> dict:
|
|
12
|
+
result = subprocess.run(
|
|
13
|
+
[sys.executable, "-m", "pytest", "test_settings_service.py", "-q"],
|
|
14
|
+
capture_output=True,
|
|
15
|
+
text=True,
|
|
16
|
+
cwd=str(WORKSPACE),
|
|
17
|
+
)
|
|
18
|
+
if result.returncode != 0:
|
|
19
|
+
return _failed("dependency_compatibility", _tail(result))
|
|
20
|
+
return _passed("dependency_compatibility", "old and new settings imports both work")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
if __name__ == "__main__":
|
|
24
|
+
write_results([*run_comet_checks(), check_dependency_compatibility()])
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
FROM python:3.12-slim
|
|
2
|
+
|
|
3
|
+
WORKDIR /workspace
|
|
4
|
+
|
|
5
|
+
# Runtime tools for both comet baselines:
|
|
6
|
+
# - bash: 0.3.9 classic shell scripts (bash 4+ arrays, [[ ]]; python:3.12-slim ships only dash)
|
|
7
|
+
# - nodejs npm: 0.4.0-beta.1 comet (independent .mjs command scripts) and OpenSpec CLI
|
|
8
|
+
# - git curl jq: comet scripts and state inspection
|
|
9
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
10
|
+
bash git curl jq ca-certificates \
|
|
11
|
+
nodejs npm && \
|
|
12
|
+
rm -rf /var/lib/apt/lists/*
|
|
13
|
+
|
|
14
|
+
RUN pip install --no-cache-dir pyyaml pytest
|
|
15
|
+
|
|
16
|
+
# OpenSpec CLI (comet drives openspec new/list/status/archive).
|
|
17
|
+
RUN npm config set registry https://registry.npmmirror.com && \
|
|
18
|
+
npm install -g @fission-ai/openspec@1.3.1 && \
|
|
19
|
+
npm config delete registry
|
|
20
|
+
|
|
21
|
+
# Claude Code CLI (the agent runtime; version overridable via BENCH_CC_VERSION).
|
|
22
|
+
ARG CLAUDE_CODE_VERSION=latest
|
|
23
|
+
RUN npm config set registry https://registry.npmmirror.com && \
|
|
24
|
+
npm install -g @anthropic-ai/claude-code@${CLAUDE_CODE_VERSION} && \
|
|
25
|
+
npm config delete registry
|
|
26
|
+
|
|
27
|
+
# The stats library with the median bug
|
|
28
|
+
COPY stats.py /workspace/stats.py
|
|
29
|
+
COPY test_stats.py /workspace/test_stats.py
|
|
30
|
+
|
|
31
|
+
RUN mkdir -p wordcount-cli && \
|
|
32
|
+
echo '# Stats Lib\nA small statistics library.' > wordcount-cli/README.md
|
|
33
|
+
|
|
34
|
+
# OpenSpec working tree (comet-open writes under openspec/changes/)
|
|
35
|
+
RUN mkdir -p openspec/changes
|
|
36
|
+
|
|
37
|
+
# Create a non-root user: claude --dangerously-skip-permissions refuses to run
|
|
38
|
+
# as root, and most comet scripts also expect a normal HOME for git config etc.
|
|
39
|
+
RUN useradd --create-home --shell /bin/bash agent && \
|
|
40
|
+
chown -R agent:agent /workspace
|
|
41
|
+
USER agent
|
|
42
|
+
ENV HOME=/home/agent
|
|
43
|
+
# Validator scripts import `scaffold.*`; bake PYTHONPATH so it never crosses the
|
|
44
|
+
# MSYS path-conversion boundary on the docker run command line.
|
|
45
|
+
ENV PYTHONPATH=/workspace
|
|
46
|
+
RUN git config --global user.email "agent@eval.local" && \
|
|
47
|
+
git config --global user.name "Comet Eval Agent" && \
|
|
48
|
+
git config --global init.defaultBranch master
|
|
49
|
+
|
|
50
|
+
CMD ["bash"]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""stats-lib: a small statistics calculation library.
|
|
2
|
+
|
|
3
|
+
Provides mean, median, mode, and standard deviation. There is a known bug in
|
|
4
|
+
`median()` for even-length inputs that needs fixing.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from collections import Counter
|
|
10
|
+
from typing import Sequence
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def mean(values: Sequence[float]) -> float:
|
|
14
|
+
"""Arithmetic mean. Raises ValueError on empty input."""
|
|
15
|
+
if not values:
|
|
16
|
+
raise ValueError("mean() requires at least one value")
|
|
17
|
+
return sum(values) / len(values)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def median(values: Sequence[float]) -> float:
|
|
21
|
+
"""Median (middle value for odd length, average of two middles for even).
|
|
22
|
+
|
|
23
|
+
BUG: for even-length inputs this returns the lower middle only instead of
|
|
24
|
+
averaging the two middle values.
|
|
25
|
+
"""
|
|
26
|
+
if not values:
|
|
27
|
+
raise ValueError("median() requires at least one value")
|
|
28
|
+
ordered = sorted(values)
|
|
29
|
+
n = len(ordered)
|
|
30
|
+
mid = n // 2
|
|
31
|
+
if n % 2 == 1:
|
|
32
|
+
return ordered[mid]
|
|
33
|
+
# BUG: should be (ordered[mid - 1] + ordered[mid]) / 2
|
|
34
|
+
return ordered[mid - 1]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def mode(values: Sequence[float]) -> float:
|
|
38
|
+
"""Most common value. Raises ValueError on empty input or ties."""
|
|
39
|
+
if not values:
|
|
40
|
+
raise ValueError("mode() requires at least one value")
|
|
41
|
+
counts = Counter(values)
|
|
42
|
+
top = counts.most_common(2)
|
|
43
|
+
if len(top) > 1 and top[0][1] == top[1][1]:
|
|
44
|
+
raise ValueError("mode() is ambiguous: multiple values share the top count")
|
|
45
|
+
return top[0][0]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def stdev(values: Sequence[float]) -> float:
|
|
49
|
+
"""Population standard deviation. Raises ValueError on empty input."""
|
|
50
|
+
if not values:
|
|
51
|
+
raise ValueError("stdev() requires at least one value")
|
|
52
|
+
avg = mean(values)
|
|
53
|
+
variance = sum((x - avg) ** 2 for x in values) / len(values)
|
|
54
|
+
return variance ** 0.5
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Tests for stats-lib.
|
|
2
|
+
|
|
3
|
+
The median tests for even-length input currently FAIL — that is the bug to fix.
|
|
4
|
+
All other tests pass.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
from stats import mean, median, mode, stdev
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class TestMean:
|
|
13
|
+
def test_basic(self):
|
|
14
|
+
assert mean([1, 2, 3, 4]) == 2.5
|
|
15
|
+
|
|
16
|
+
def test_single(self):
|
|
17
|
+
assert mean([42]) == 42
|
|
18
|
+
|
|
19
|
+
def test_empty_raises(self):
|
|
20
|
+
with pytest.raises(ValueError):
|
|
21
|
+
mean([])
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class TestMedian:
|
|
25
|
+
def test_odd(self):
|
|
26
|
+
assert median([3, 1, 2]) == 2
|
|
27
|
+
|
|
28
|
+
def test_single(self):
|
|
29
|
+
assert median([7]) == 7
|
|
30
|
+
|
|
31
|
+
def test_even(self):
|
|
32
|
+
# This test currently FAILS due to the bug.
|
|
33
|
+
assert median([1, 2, 3, 4]) == 2.5
|
|
34
|
+
|
|
35
|
+
def test_even_unsorted(self):
|
|
36
|
+
# This test currently FAILS due to the bug.
|
|
37
|
+
assert median([4, 1, 3, 2]) == 2.5
|
|
38
|
+
|
|
39
|
+
def test_negative(self):
|
|
40
|
+
assert median([-5, -1, -3]) == -3
|
|
41
|
+
|
|
42
|
+
def test_empty_raises(self):
|
|
43
|
+
with pytest.raises(ValueError):
|
|
44
|
+
median([])
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class TestMode:
|
|
48
|
+
def test_basic(self):
|
|
49
|
+
assert mode([1, 2, 2, 3]) == 2
|
|
50
|
+
|
|
51
|
+
def test_all_same(self):
|
|
52
|
+
assert mode([5, 5, 5]) == 5
|
|
53
|
+
|
|
54
|
+
def test_tie_raises(self):
|
|
55
|
+
with pytest.raises(ValueError):
|
|
56
|
+
mode([1, 2])
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class TestStdev:
|
|
60
|
+
def test_basic(self):
|
|
61
|
+
assert stdev([2, 4, 4, 4, 5, 5, 7, 9]) == 2.0
|
|
62
|
+
|
|
63
|
+
def test_single_zero(self):
|
|
64
|
+
assert stdev([3]) == 0.0
|
|
65
|
+
|
|
66
|
+
def test_empty_raises(self):
|
|
67
|
+
with pytest.raises(ValueError):
|
|
68
|
+
stdev([])
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
You are working on a Python project called "stats-lib" - a small statistics calculation library.
|
|
2
|
+
|
|
3
|
+
Your task: Use the comet workflow to **fix a bug** in the `median()` function.
|
|
4
|
+
|
|
5
|
+
## The bug
|
|
6
|
+
|
|
7
|
+
`median()` returns the wrong result for even-length lists. For example, `median([1, 2, 3, 4])` returns `2` but should return `2.5` (the average of the two middle values).
|
|
8
|
+
|
|
9
|
+
The existing tests in `test_stats.py` make this explicit — two tests in `TestMedian` currently fail:
|
|
10
|
+
- `test_even`: `median([1, 2, 3, 4])` should be `2.5`
|
|
11
|
+
- `test_even_unsorted`: `median([4, 1, 3, 2])` should be `2.5`
|
|
12
|
+
|
|
13
|
+
All other tests pass and must continue to pass.
|
|
14
|
+
|
|
15
|
+
## What to do
|
|
16
|
+
|
|
17
|
+
1. First, run the existing tests to confirm the failure: `python -m pytest test_stats.py -v`
|
|
18
|
+
2. Follow the comet workflow phases:
|
|
19
|
+
- **Open**: Create a proposal describing the bug and fix scope
|
|
20
|
+
- **Design**: Investigate the root cause and design the fix
|
|
21
|
+
- **Build**: Implement the fix in `stats.py`
|
|
22
|
+
- **Verify**: Run the full test suite to confirm all tests pass (including previously-failing ones) and no regressions
|
|
23
|
+
- **Archive**: Archive the completed change
|
|
24
|
+
|
|
25
|
+
Start by detecting the current phase and following the comet workflow. When you reach a decision point that asks for confirmation, assume "yes, proceed with the recommended option".
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
[metadata]
|
|
2
|
+
name = "comet-fix-median"
|
|
3
|
+
description = "Fix a bug in the median() function of a stats library (even-length lists return the wrong value)"
|
|
4
|
+
difficulty = "medium"
|
|
5
|
+
category = "comet"
|
|
6
|
+
tags = ["comet", "workflow", "bugfix", "debugging"]
|
|
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 stats library with a median bug. Claude must diagnose, fix, and verify via the comet workflow."
|
|
18
|
+
dockerfile = "environment/Dockerfile"
|
|
19
|
+
timeout_sec = 900
|
|
20
|
+
|
|
21
|
+
[validation]
|
|
22
|
+
test_scripts = "test_fix_median.py"
|
|
23
|
+
target_artifacts = []
|
|
24
|
+
timeout = 120
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Validation script for the comet-fix-median task.
|
|
2
|
+
|
|
3
|
+
Runs inside Docker. Checks the comet workflow was followed AND the median bug
|
|
4
|
+
is fixed (even-length lists) with no regressions.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import json
|
|
8
|
+
import subprocess
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
from comet_checks import (
|
|
13
|
+
run_comet_checks,
|
|
14
|
+
write_results,
|
|
15
|
+
_passed,
|
|
16
|
+
_failed,
|
|
17
|
+
WORKSPACE,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _subprocess_output(result: subprocess.CompletedProcess) -> str:
|
|
22
|
+
output = "\n".join(
|
|
23
|
+
part.strip()
|
|
24
|
+
for part in (result.stdout or "", result.stderr or "")
|
|
25
|
+
if part and part.strip()
|
|
26
|
+
)
|
|
27
|
+
return output[-600:]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def check_median_fix() -> dict:
|
|
31
|
+
"""median() returns 2.5 for [1,2,3,4] and all existing tests pass."""
|
|
32
|
+
# Import the (presumably fixed) stats module and check the even case.
|
|
33
|
+
result = subprocess.run(
|
|
34
|
+
[sys.executable, "-c", "from stats import median; print(median([1,2,3,4]))"],
|
|
35
|
+
capture_output=True, text=True, cwd=str(WORKSPACE),
|
|
36
|
+
)
|
|
37
|
+
if result.returncode != 0:
|
|
38
|
+
return _failed("median_fix", f"import/run error: {result.stderr.strip()[:150]}")
|
|
39
|
+
val = result.stdout.strip()
|
|
40
|
+
if val != "2.5":
|
|
41
|
+
return _failed("median_fix", f"median([1,2,3,4]) == {val}, expected 2.5")
|
|
42
|
+
|
|
43
|
+
# Run the full existing test suite — all must pass now.
|
|
44
|
+
test_result = subprocess.run(
|
|
45
|
+
[sys.executable, "-m", "pytest", "test_stats.py", "-q"],
|
|
46
|
+
capture_output=True, text=True, cwd=str(WORKSPACE),
|
|
47
|
+
)
|
|
48
|
+
if test_result.returncode != 0:
|
|
49
|
+
return _failed("median_fix", f"existing tests still failing:\n{_subprocess_output(test_result)}")
|
|
50
|
+
return _passed("median_fix", "median([1,2,3,4])==2.5, all tests pass")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def run_all() -> list[dict]:
|
|
54
|
+
results = run_comet_checks()
|
|
55
|
+
results.append(check_median_fix())
|
|
56
|
+
return results
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
if __name__ == "__main__":
|
|
60
|
+
write_results(run_all())
|
|
@@ -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,12 @@
|
|
|
1
|
+
def select_framework(requirements):
|
|
2
|
+
return "single-tool-agent"
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def build_document_assistant():
|
|
6
|
+
return {
|
|
7
|
+
"orchestrator": "create_react_agent",
|
|
8
|
+
"memory": "short_term_only",
|
|
9
|
+
"tools": ["edit_document", "extract_fields"],
|
|
10
|
+
"subworkflow": None,
|
|
11
|
+
"retry_policy": 0,
|
|
12
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
import architecture
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def test_selects_hybrid_framework_for_long_session_documents():
|
|
7
|
+
requirements = [
|
|
8
|
+
"long_session_memory",
|
|
9
|
+
"multi_document_editing",
|
|
10
|
+
"deterministic_extraction",
|
|
11
|
+
"retry_on_failure",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
assert architecture.select_framework(requirements) == "hybrid-deep-agent-langgraph"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_blueprint_uses_deep_orchestrator_and_compiled_subworkflow():
|
|
18
|
+
blueprint = architecture.build_document_assistant()
|
|
19
|
+
|
|
20
|
+
assert blueprint["orchestrator"] == "create_deep_agent"
|
|
21
|
+
assert blueprint["subworkflow"] == "CompiledSubAgent"
|
|
22
|
+
assert blueprint["memory"] == "persistent_session"
|
|
23
|
+
assert blueprint["retry_policy"] >= 2
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_source_contains_framework_selection_markers():
|
|
27
|
+
source = Path("architecture.py").read_text(encoding="utf-8")
|
|
28
|
+
|
|
29
|
+
assert "create_deep_agent" in source
|
|
30
|
+
assert "CompiledSubAgent" in source
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
You are working on a Python project called "document-architect".
|
|
2
|
+
|
|
3
|
+
Your task: Use the comet workflow to choose and encode the right framework architecture.
|
|
4
|
+
|
|
5
|
+
This task is adapted from `skills-benchmarks/lc-framework-hybrid-pipeline`.
|
|
6
|
+
|
|
7
|
+
## Requirements
|
|
8
|
+
|
|
9
|
+
Build a blueprint for an assistant that:
|
|
10
|
+
|
|
11
|
+
1. Manages and edits multiple documents across a long session.
|
|
12
|
+
2. Delegates structured extraction for specific documents to a deterministic retry-on-failure pipeline.
|
|
13
|
+
3. Uses a deep-agent style orchestrator plus a compiled sub-workflow, rather than a single generic tool agent.
|
|
14
|
+
|
|
15
|
+
## What to do
|
|
16
|
+
|
|
17
|
+
1. Run `python -m pytest test_architecture.py -q` to confirm the failures.
|
|
18
|
+
2. Follow the comet workflow phases from open through archive.
|
|
19
|
+
3. Fix `architecture.py`; do not add external package dependencies.
|
|
20
|
+
4. Verify that the selected architecture and blueprint clearly represent the hybrid orchestrator/sub-workflow design.
|
|
21
|
+
|
|
22
|
+
When the workflow asks for confirmation, assume "yes, proceed with the recommended option".
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
[metadata]
|
|
2
|
+
name = "comet-framework-selection"
|
|
3
|
+
description = "Select a hybrid deep-agent plus deterministic sub-workflow architecture for document editing"
|
|
4
|
+
difficulty = "medium"
|
|
5
|
+
category = "comet"
|
|
6
|
+
tags = ["comet", "workflow", "architecture", "framework-selection"]
|
|
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 an incomplete architecture blueprint for a long-session document assistant."
|
|
18
|
+
dockerfile = "environment/Dockerfile"
|
|
19
|
+
timeout_sec = 900
|
|
20
|
+
|
|
21
|
+
[validation]
|
|
22
|
+
test_scripts = "test_framework_selection.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_framework_selection() -> dict:
|
|
12
|
+
result = subprocess.run(
|
|
13
|
+
[sys.executable, "-m", "pytest", "test_architecture.py", "-q"],
|
|
14
|
+
capture_output=True,
|
|
15
|
+
text=True,
|
|
16
|
+
cwd=str(WORKSPACE),
|
|
17
|
+
)
|
|
18
|
+
if result.returncode != 0:
|
|
19
|
+
return _failed("framework_selection", _tail(result))
|
|
20
|
+
return _passed("framework_selection", "hybrid deep-agent plus compiled sub-workflow blueprint passes")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
if __name__ == "__main__":
|
|
24
|
+
write_results([*run_comet_checks(), check_framework_selection()])
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
FROM python:3.12-slim
|
|
2
|
+
|
|
3
|
+
WORKDIR /workspace
|
|
4
|
+
|
|
5
|
+
# Runtime tools for both comet baselines:
|
|
6
|
+
# - bash: 0.3.9 classic shell scripts (bash 4+ arrays, [[ ]]; python:3.12-slim ships only dash)
|
|
7
|
+
# - nodejs npm: 0.4.0-beta.1 comet (independent .mjs command scripts) and OpenSpec CLI
|
|
8
|
+
# - git curl jq: comet scripts and state inspection
|
|
9
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
10
|
+
bash git curl jq ca-certificates \
|
|
11
|
+
nodejs npm && \
|
|
12
|
+
rm -rf /var/lib/apt/lists/*
|
|
13
|
+
|
|
14
|
+
RUN pip install --no-cache-dir pyyaml
|
|
15
|
+
|
|
16
|
+
# OpenSpec CLI (comet drives openspec new/list/status/archive).
|
|
17
|
+
# Use npmmirror for reproducible builds behind GFW.
|
|
18
|
+
RUN npm config set registry https://registry.npmmirror.com && \
|
|
19
|
+
npm install -g @fission-ai/openspec@1.3.1 && \
|
|
20
|
+
npm config delete registry
|
|
21
|
+
|
|
22
|
+
# Claude Code CLI (the agent runtime; version overridable via BENCH_CC_VERSION).
|
|
23
|
+
ARG CLAUDE_CODE_VERSION=latest
|
|
24
|
+
RUN npm config set registry https://registry.npmmirror.com && \
|
|
25
|
+
npm install -g @anthropic-ai/claude-code@${CLAUDE_CODE_VERSION} && \
|
|
26
|
+
npm config delete registry
|
|
27
|
+
|
|
28
|
+
# Sample project structure
|
|
29
|
+
RUN mkdir -p wordcount-cli && \
|
|
30
|
+
echo '# Word Count CLI\nA simple word counting tool.' > wordcount-cli/README.md
|
|
31
|
+
|
|
32
|
+
# Existing wordcount code (extended during the task)
|
|
33
|
+
COPY wordcount.py /workspace/wordcount.py
|
|
34
|
+
COPY test_wordcount.py /workspace/test_wordcount.py
|
|
35
|
+
|
|
36
|
+
# OpenSpec working tree (comet-open writes under openspec/changes/)
|
|
37
|
+
RUN mkdir -p openspec/changes
|
|
38
|
+
|
|
39
|
+
# Create a non-root user: claude --dangerously-skip-permissions refuses to run
|
|
40
|
+
# as root, and most comet scripts also expect a normal HOME for git config etc.
|
|
41
|
+
RUN useradd --create-home --shell /bin/bash agent && \
|
|
42
|
+
chown -R agent:agent /workspace
|
|
43
|
+
USER agent
|
|
44
|
+
ENV HOME=/home/agent
|
|
45
|
+
# Validator scripts import scaffold.*; bake PYTHONPATH so it never crosses the
|
|
46
|
+
# MSYS path-conversion boundary on the docker run command line.
|
|
47
|
+
ENV PYTHONPATH=/workspace
|
|
48
|
+
# Minimal git identity so comet commits don't fail.
|
|
49
|
+
RUN git config --global user.email "agent@eval.local" && \
|
|
50
|
+
git config --global user.name "Comet Eval Agent" && \
|
|
51
|
+
git config --global init.defaultBranch master
|
|
52
|
+
|
|
53
|
+
CMD ["bash"]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Tests for wordcount CLI."""
|
|
2
|
+
|
|
3
|
+
import subprocess
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def test_count_words():
|
|
8
|
+
result = subprocess.run(
|
|
9
|
+
[sys.executable, "wordcount.py"],
|
|
10
|
+
input="hello world foo",
|
|
11
|
+
capture_output=True, text=True
|
|
12
|
+
)
|
|
13
|
+
assert "Words: 3" in result.stdout
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_count_lines():
|
|
17
|
+
result = subprocess.run(
|
|
18
|
+
[sys.executable, "wordcount.py", "--lines"],
|
|
19
|
+
input="hello\nworld\nfoo",
|
|
20
|
+
capture_output=True, text=True
|
|
21
|
+
)
|
|
22
|
+
assert "Words: 3" in result.stdout
|
|
23
|
+
assert "Lines: 3" in result.stdout
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
if __name__ == "__main__":
|
|
27
|
+
test_count_words()
|
|
28
|
+
test_count_lines()
|
|
29
|
+
print("All tests passed")
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Simple word count CLI tool."""
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def count_words(text: str) -> int:
|
|
8
|
+
"""Count words in text."""
|
|
9
|
+
return len(text.split())
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def count_lines(text: str) -> int:
|
|
13
|
+
"""Count lines in text."""
|
|
14
|
+
return len(text.splitlines())
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def main():
|
|
18
|
+
parser = argparse.ArgumentParser(description="Count words and lines in text")
|
|
19
|
+
parser.add_argument("file", nargs="?", help="Input file (reads stdin if omitted)")
|
|
20
|
+
parser.add_argument("--lines", action="store_true", help="Also count lines")
|
|
21
|
+
parser.add_argument("--words", action="store_true", default=True, help="Count words (default)")
|
|
22
|
+
|
|
23
|
+
args = parser.parse_args()
|
|
24
|
+
|
|
25
|
+
if args.file:
|
|
26
|
+
with open(args.file) as f:
|
|
27
|
+
text = f.read()
|
|
28
|
+
else:
|
|
29
|
+
text = sys.stdin.read()
|
|
30
|
+
|
|
31
|
+
word_count = count_words(text)
|
|
32
|
+
print(f"Words: {word_count}")
|
|
33
|
+
|
|
34
|
+
if args.lines:
|
|
35
|
+
line_count = count_lines(text)
|
|
36
|
+
print(f"Lines: {line_count}")
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if __name__ == "__main__":
|
|
40
|
+
main()
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
You are working on a Python project called "wordcount-cli" - a simple command-line word counting tool.
|
|
2
|
+
|
|
3
|
+
Your task: Use the comet workflow to add a new feature: **sentence counting** (`--sentences` flag).
|
|
4
|
+
|
|
5
|
+
The feature requirements:
|
|
6
|
+
- Add a `--sentences` flag to the CLI
|
|
7
|
+
- Count sentences by splitting on `.`, `!`, `?`
|
|
8
|
+
- Output format: `Sentences: N`
|
|
9
|
+
- Handle edge cases (empty input, no punctuation)
|
|
10
|
+
|
|
11
|
+
Follow the comet workflow phases:
|
|
12
|
+
1. **Open**: Create proposal, design outline, and task list
|
|
13
|
+
2. **Design**: Deep design with brainstorming (create a Design Doc)
|
|
14
|
+
3. **Build**: Plan implementation and write the code
|
|
15
|
+
4. **Verify**: Run tests and verify the implementation
|
|
16
|
+
5. **Archive**: Archive the completed change
|
|
17
|
+
|
|
18
|
+
Start by detecting the current phase and following the comet workflow.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
[metadata]
|
|
2
|
+
name = "comet-full-workflow"
|
|
3
|
+
description = "Test Claude's ability to follow the full comet workflow (open → design → build → verify → archive)"
|
|
4
|
+
difficulty = "hard"
|
|
5
|
+
category = "comet"
|
|
6
|
+
tags = ["comet", "workflow", "openspec", "full-cycle"]
|
|
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 openspec CLI and comet scripts pre-installed. Claude must execute a full comet workflow for a sample feature request."
|
|
18
|
+
dockerfile = "environment/Dockerfile"
|
|
19
|
+
timeout_sec = 900
|
|
20
|
+
|
|
21
|
+
[validation]
|
|
22
|
+
test_scripts = "test_full_workflow.py"
|
|
23
|
+
target_artifacts = []
|
|
24
|
+
timeout = 120
|