@rpamis/comet 0.4.0-beta.6 → 0.4.0-beta.7
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 +209 -74
- package/assets/manifest.json +14 -5
- package/assets/skills/comet/SKILL.md +17 -282
- package/assets/skills/comet/reference/comet-yaml-fields.md +1 -1
- package/assets/skills/comet/reference/context-recovery.md +3 -3
- package/assets/skills/comet/reference/intent-frame.md +2 -2
- package/assets/skills/comet/reference/scripts.md +2 -2
- package/assets/skills/comet/rules/comet-workflow-guard.en.md +32 -0
- package/assets/skills/comet/rules/comet-workflow-guard.md +32 -0
- package/assets/skills/comet/scripts/comet-entry-runtime.mjs +7834 -0
- package/assets/skills/comet/scripts/comet-hook-router.mjs +10307 -0
- package/assets/skills/comet/scripts/comet-runtime.mjs +612 -499
- package/assets/skills/comet-any/SKILL.md +4 -4
- package/assets/skills/comet-any/reference/authoring-subagents.md +1 -1
- package/assets/skills/comet-any/reference/bundle-authoring.md +1 -1
- package/assets/skills/comet-any/reference/subagents/reference-author.md +1 -1
- package/assets/skills/comet-any/reference/subagents/script-author.md +1 -1
- package/assets/skills/comet-any/reference/subagents/skill-core-author.md +1 -1
- package/assets/skills/comet-any/reference/subagents/skill-reviewer.md +2 -2
- package/assets/skills/comet-any/reference/subagents/workflow-entry-author.md +3 -3
- package/assets/skills/comet-archive/SKILL.md +1 -2
- package/assets/skills/comet-build/SKILL.md +1 -1
- package/assets/skills/comet-classic/SKILL.md +293 -0
- package/assets/skills/comet-design/SKILL.md +1 -1
- package/assets/skills/comet-hotfix/SKILL.md +4 -4
- package/assets/skills/comet-native/SKILL.md +257 -0
- package/assets/skills/comet-native/reference/artifacts.md +204 -0
- package/assets/skills/comet-native/reference/commands.md +118 -0
- package/assets/skills/comet-native/reference/recovery.md +143 -0
- package/assets/skills/comet-native/scripts/comet-native-hook-guard.mjs +4 -0
- package/assets/skills/comet-native/scripts/comet-native-runtime.mjs +28898 -0
- package/assets/skills/comet-open/SKILL.md +4 -4
- package/assets/skills/comet-tweak/SKILL.md +7 -7
- package/assets/skills-zh/comet/SKILL.md +17 -270
- package/assets/skills-zh/comet/reference/comet-yaml-fields.md +1 -1
- package/assets/skills-zh/comet/reference/context-recovery.md +3 -3
- package/assets/skills-zh/comet/reference/intent-frame.md +2 -2
- package/assets/skills-zh/comet/reference/scripts.md +2 -2
- package/assets/skills-zh/comet-any/SKILL.md +4 -4
- package/assets/skills-zh/comet-any/reference/authoring-subagents.md +1 -1
- package/assets/skills-zh/comet-any/reference/bundle-authoring.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/reference-author.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/script-author.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/skill-core-author.md +1 -1
- package/assets/skills-zh/comet-any/reference/subagents/skill-reviewer.md +2 -2
- package/assets/skills-zh/comet-any/reference/subagents/workflow-entry-author.md +3 -3
- package/assets/skills-zh/comet-archive/SKILL.md +1 -2
- package/assets/skills-zh/comet-build/SKILL.md +1 -1
- package/assets/skills-zh/comet-classic/SKILL.md +281 -0
- package/assets/skills-zh/comet-design/SKILL.md +1 -1
- package/assets/skills-zh/comet-hotfix/SKILL.md +4 -4
- package/assets/skills-zh/comet-native/SKILL.md +257 -0
- package/assets/skills-zh/comet-native/reference/artifacts.md +206 -0
- package/assets/skills-zh/comet-native/reference/commands.md +118 -0
- package/assets/skills-zh/comet-native/reference/recovery.md +143 -0
- package/assets/skills-zh/comet-open/SKILL.md +4 -4
- package/assets/skills-zh/comet-tweak/SKILL.md +7 -7
- package/dist/app/cli/index.js +59 -13
- package/dist/app/cli/index.js.map +1 -1
- package/dist/app/commands/command-result.d.ts +6 -0
- package/dist/app/commands/command-result.d.ts.map +1 -0
- package/dist/app/commands/command-result.js +4 -0
- package/dist/app/commands/command-result.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 +201 -26
- package/dist/app/commands/doctor.js.map +1 -1
- package/dist/app/commands/eval.d.ts +3 -1
- package/dist/app/commands/eval.d.ts.map +1 -1
- package/dist/app/commands/eval.js +17 -7
- 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 +6 -2
- package/dist/app/commands/i18n.js.map +1 -1
- package/dist/app/commands/init.d.ts +10 -2
- package/dist/app/commands/init.d.ts.map +1 -1
- package/dist/app/commands/init.js +331 -50
- package/dist/app/commands/init.js.map +1 -1
- package/dist/app/commands/native.d.ts +2 -0
- package/dist/app/commands/native.d.ts.map +1 -0
- package/dist/app/commands/native.js +10 -0
- package/dist/app/commands/native.js.map +1 -0
- package/dist/app/commands/project-scope-selection.d.ts.map +1 -1
- package/dist/app/commands/project-scope-selection.js +2 -0
- package/dist/app/commands/project-scope-selection.js.map +1 -1
- package/dist/app/commands/resume-probe.d.ts.map +1 -1
- package/dist/app/commands/resume-probe.js +8 -2
- package/dist/app/commands/resume-probe.js.map +1 -1
- package/dist/app/commands/status.d.ts +0 -32
- package/dist/app/commands/status.d.ts.map +1 -1
- package/dist/app/commands/status.js +44 -177
- package/dist/app/commands/status.js.map +1 -1
- package/dist/app/commands/update.d.ts +20 -4
- package/dist/app/commands/update.d.ts.map +1 -1
- package/dist/app/commands/update.js +698 -90
- package/dist/app/commands/update.js.map +1 -1
- package/dist/app/commands/workflow.d.ts +6 -0
- package/dist/app/commands/workflow.d.ts.map +1 -0
- package/dist/app/commands/workflow.js +11 -0
- package/dist/app/commands/workflow.js.map +1 -0
- package/dist/config/repository-layout.json +21 -1
- package/dist/domains/comet-classic/classic-archive.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-archive.js +3 -0
- package/dist/domains/comet-classic/classic-archive.js.map +1 -1
- package/dist/domains/comet-classic/classic-current-change.d.ts +3 -5
- package/dist/domains/comet-classic/classic-current-change.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-current-change.js +31 -57
- package/dist/domains/comet-classic/classic-current-change.js.map +1 -1
- package/dist/domains/comet-classic/classic-hook-guard.d.ts +9 -0
- package/dist/domains/comet-classic/classic-hook-guard.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-hook-guard.js +84 -11
- package/dist/domains/comet-classic/classic-hook-guard.js.map +1 -1
- package/dist/domains/comet-classic/classic-project-config.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-project-config.js +12 -8
- package/dist/domains/comet-classic/classic-project-config.js.map +1 -1
- package/dist/domains/comet-classic/classic-runtime-run.d.ts.map +1 -1
- package/dist/domains/comet-classic/classic-runtime-run.js +9 -1
- package/dist/domains/comet-classic/classic-runtime-run.js.map +1 -1
- package/dist/domains/comet-entry/current-selection-repair.d.ts +17 -0
- package/dist/domains/comet-entry/current-selection-repair.d.ts.map +1 -0
- package/dist/domains/comet-entry/current-selection-repair.js +19 -0
- package/dist/domains/comet-entry/current-selection-repair.js.map +1 -0
- package/dist/domains/comet-entry/current-selection.d.ts +28 -0
- package/dist/domains/comet-entry/current-selection.d.ts.map +1 -0
- package/dist/domains/comet-entry/current-selection.js +116 -0
- package/dist/domains/comet-entry/current-selection.js.map +1 -0
- package/dist/domains/comet-entry/entry-runtime-entry.d.ts +2 -0
- package/dist/domains/comet-entry/entry-runtime-entry.d.ts.map +1 -0
- package/dist/domains/comet-entry/entry-runtime-entry.js +3 -0
- package/dist/domains/comet-entry/entry-runtime-entry.js.map +1 -0
- package/dist/domains/comet-entry/entry-runtime.d.ts +7 -0
- package/dist/domains/comet-entry/entry-runtime.d.ts.map +1 -0
- package/dist/domains/comet-entry/entry-runtime.js +55 -0
- package/dist/domains/comet-entry/entry-runtime.js.map +1 -0
- package/dist/domains/comet-entry/hook-adapter.d.ts +6 -0
- package/dist/domains/comet-entry/hook-adapter.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-adapter.js +202 -0
- package/dist/domains/comet-entry/hook-adapter.js.map +1 -0
- package/dist/domains/comet-entry/hook-router-entry.d.ts +8 -0
- package/dist/domains/comet-entry/hook-router-entry.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-router-entry.js +92 -0
- package/dist/domains/comet-entry/hook-router-entry.js.map +1 -0
- package/dist/domains/comet-entry/hook-router.d.ts +32 -0
- package/dist/domains/comet-entry/hook-router.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-router.js +133 -0
- package/dist/domains/comet-entry/hook-router.js.map +1 -0
- package/dist/domains/comet-entry/hook-types.d.ts +20 -0
- package/dist/domains/comet-entry/hook-types.d.ts.map +1 -0
- package/dist/domains/comet-entry/hook-types.js +2 -0
- package/dist/domains/comet-entry/hook-types.js.map +1 -0
- package/dist/domains/comet-entry/init-workflow.d.ts +16 -0
- package/dist/domains/comet-entry/init-workflow.d.ts.map +1 -0
- package/dist/domains/comet-entry/init-workflow.js +103 -0
- package/dist/domains/comet-entry/init-workflow.js.map +1 -0
- package/dist/domains/comet-entry/project-status.d.ts +3 -0
- package/dist/domains/comet-entry/project-status.d.ts.map +1 -0
- package/dist/domains/comet-entry/project-status.js +222 -0
- package/dist/domains/comet-entry/project-status.js.map +1 -0
- package/dist/domains/comet-entry/resolve-entry.d.ts +3 -0
- package/dist/domains/comet-entry/resolve-entry.d.ts.map +1 -0
- package/dist/domains/comet-entry/resolve-entry.js +22 -0
- package/dist/domains/comet-entry/resolve-entry.js.map +1 -0
- package/dist/domains/comet-entry/resume-probe.d.ts +34 -0
- package/dist/domains/comet-entry/resume-probe.d.ts.map +1 -0
- package/dist/domains/comet-entry/resume-probe.js +458 -0
- package/dist/domains/comet-entry/resume-probe.js.map +1 -0
- package/dist/domains/comet-entry/types.d.ts +59 -0
- package/dist/domains/comet-entry/types.d.ts.map +1 -0
- package/dist/domains/comet-entry/types.js +2 -0
- package/dist/domains/comet-entry/types.js.map +1 -0
- package/dist/domains/comet-entry/workflow-resolution.d.ts +8 -0
- package/dist/domains/comet-entry/workflow-resolution.d.ts.map +1 -0
- package/dist/domains/comet-entry/workflow-resolution.js +16 -0
- package/dist/domains/comet-entry/workflow-resolution.js.map +1 -0
- package/dist/domains/comet-native/index.d.ts +35 -0
- package/dist/domains/comet-native/index.d.ts.map +1 -0
- package/dist/domains/comet-native/index.js +35 -0
- package/dist/domains/comet-native/index.js.map +1 -0
- package/dist/domains/comet-native/native-acceptance.d.ts +42 -0
- package/dist/domains/comet-native/native-acceptance.d.ts.map +1 -0
- package/dist/domains/comet-native/native-acceptance.js +503 -0
- package/dist/domains/comet-native/native-acceptance.js.map +1 -0
- package/dist/domains/comet-native/native-archive-content.d.ts +26 -0
- package/dist/domains/comet-native/native-archive-content.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-content.js +159 -0
- package/dist/domains/comet-native/native-archive-content.js.map +1 -0
- package/dist/domains/comet-native/native-archive-inspection.d.ts +9 -0
- package/dist/domains/comet-native/native-archive-inspection.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-inspection.js +94 -0
- package/dist/domains/comet-native/native-archive-inspection.js.map +1 -0
- package/dist/domains/comet-native/native-archive-preflight.d.ts +52 -0
- package/dist/domains/comet-native/native-archive-preflight.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-preflight.js +214 -0
- package/dist/domains/comet-native/native-archive-preflight.js.map +1 -0
- package/dist/domains/comet-native/native-archive-transaction.d.ts +19 -0
- package/dist/domains/comet-native/native-archive-transaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive-transaction.js +1181 -0
- package/dist/domains/comet-native/native-archive-transaction.js.map +1 -0
- package/dist/domains/comet-native/native-archive.d.ts +36 -0
- package/dist/domains/comet-native/native-archive.d.ts.map +1 -0
- package/dist/domains/comet-native/native-archive.js +403 -0
- package/dist/domains/comet-native/native-archive.js.map +1 -0
- package/dist/domains/comet-native/native-artifacts.d.ts +10 -0
- package/dist/domains/comet-native/native-artifacts.d.ts.map +1 -0
- package/dist/domains/comet-native/native-artifacts.js +204 -0
- package/dist/domains/comet-native/native-artifacts.js.map +1 -0
- package/dist/domains/comet-native/native-atomic-file.d.ts +10 -0
- package/dist/domains/comet-native/native-atomic-file.d.ts.map +1 -0
- package/dist/domains/comet-native/native-atomic-file.js +175 -0
- package/dist/domains/comet-native/native-atomic-file.js.map +1 -0
- package/dist/domains/comet-native/native-bounded-file.d.ts +19 -0
- package/dist/domains/comet-native/native-bounded-file.d.ts.map +1 -0
- package/dist/domains/comet-native/native-bounded-file.js +180 -0
- package/dist/domains/comet-native/native-bounded-file.js.map +1 -0
- package/dist/domains/comet-native/native-build-evidence.d.ts +42 -0
- package/dist/domains/comet-native/native-build-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-build-evidence.js +257 -0
- package/dist/domains/comet-native/native-build-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-canonical-hash.d.ts +10 -0
- package/dist/domains/comet-native/native-canonical-hash.d.ts.map +1 -0
- package/dist/domains/comet-native/native-canonical-hash.js +100 -0
- package/dist/domains/comet-native/native-canonical-hash.js.map +1 -0
- package/dist/domains/comet-native/native-change-recovery.d.ts +11 -0
- package/dist/domains/comet-native/native-change-recovery.d.ts.map +1 -0
- package/dist/domains/comet-native/native-change-recovery.js +15 -0
- package/dist/domains/comet-native/native-change-recovery.js.map +1 -0
- package/dist/domains/comet-native/native-change.d.ts +61 -0
- package/dist/domains/comet-native/native-change.d.ts.map +1 -0
- package/dist/domains/comet-native/native-change.js +696 -0
- package/dist/domains/comet-native/native-change.js.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-model.d.ts +63 -0
- package/dist/domains/comet-native/native-check-receipt-model.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-model.js +347 -0
- package/dist/domains/comet-native/native-check-receipt-model.js.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-storage.d.ts +10 -0
- package/dist/domains/comet-native/native-check-receipt-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check-receipt-storage.js +196 -0
- package/dist/domains/comet-native/native-check-receipt-storage.js.map +1 -0
- package/dist/domains/comet-native/native-check-receipt.d.ts +19 -0
- package/dist/domains/comet-native/native-check-receipt.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check-receipt.js +446 -0
- package/dist/domains/comet-native/native-check-receipt.js.map +1 -0
- package/dist/domains/comet-native/native-check.d.ts +18 -0
- package/dist/domains/comet-native/native-check.d.ts.map +1 -0
- package/dist/domains/comet-native/native-check.js +29 -0
- package/dist/domains/comet-native/native-check.js.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-journal.d.ts +13 -0
- package/dist/domains/comet-native/native-checkpoint-journal.d.ts.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-journal.js +53 -0
- package/dist/domains/comet-native/native-checkpoint-journal.js.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-storage.d.ts +43 -0
- package/dist/domains/comet-native/native-checkpoint-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-checkpoint-storage.js +487 -0
- package/dist/domains/comet-native/native-checkpoint-storage.js.map +1 -0
- package/dist/domains/comet-native/native-cli-entry.d.ts +2 -0
- package/dist/domains/comet-native/native-cli-entry.d.ts.map +1 -0
- package/dist/domains/comet-native/native-cli-entry.js +18 -0
- package/dist/domains/comet-native/native-cli-entry.js.map +1 -0
- package/dist/domains/comet-native/native-cli.d.ts +7 -0
- package/dist/domains/comet-native/native-cli.d.ts.map +1 -0
- package/dist/domains/comet-native/native-cli.js +642 -0
- package/dist/domains/comet-native/native-cli.js.map +1 -0
- package/dist/domains/comet-native/native-config.d.ts +15 -0
- package/dist/domains/comet-native/native-config.d.ts.map +1 -0
- package/dist/domains/comet-native/native-config.js +281 -0
- package/dist/domains/comet-native/native-config.js.map +1 -0
- package/dist/domains/comet-native/native-conflict-inspection.d.ts +17 -0
- package/dist/domains/comet-native/native-conflict-inspection.d.ts.map +1 -0
- package/dist/domains/comet-native/native-conflict-inspection.js +90 -0
- package/dist/domains/comet-native/native-conflict-inspection.js.map +1 -0
- package/dist/domains/comet-native/native-conflict-radar.d.ts +75 -0
- package/dist/domains/comet-native/native-conflict-radar.d.ts.map +1 -0
- package/dist/domains/comet-native/native-conflict-radar.js +326 -0
- package/dist/domains/comet-native/native-conflict-radar.js.map +1 -0
- package/dist/domains/comet-native/native-continuation.d.ts +9 -0
- package/dist/domains/comet-native/native-continuation.d.ts.map +1 -0
- package/dist/domains/comet-native/native-continuation.js +146 -0
- package/dist/domains/comet-native/native-continuation.js.map +1 -0
- package/dist/domains/comet-native/native-contract-files.d.ts +24 -0
- package/dist/domains/comet-native/native-contract-files.d.ts.map +1 -0
- package/dist/domains/comet-native/native-contract-files.js +66 -0
- package/dist/domains/comet-native/native-contract-files.js.map +1 -0
- package/dist/domains/comet-native/native-contract.d.ts +41 -0
- package/dist/domains/comet-native/native-contract.d.ts.map +1 -0
- package/dist/domains/comet-native/native-contract.js +141 -0
- package/dist/domains/comet-native/native-contract.js.map +1 -0
- package/dist/domains/comet-native/native-diagnostics.d.ts +18 -0
- package/dist/domains/comet-native/native-diagnostics.d.ts.map +1 -0
- package/dist/domains/comet-native/native-diagnostics.js +522 -0
- package/dist/domains/comet-native/native-diagnostics.js.map +1 -0
- package/dist/domains/comet-native/native-doctor.d.ts +12 -0
- package/dist/domains/comet-native/native-doctor.d.ts.map +1 -0
- package/dist/domains/comet-native/native-doctor.js +768 -0
- package/dist/domains/comet-native/native-doctor.js.map +1 -0
- package/dist/domains/comet-native/native-evidence-retention.d.ts +37 -0
- package/dist/domains/comet-native/native-evidence-retention.d.ts.map +1 -0
- package/dist/domains/comet-native/native-evidence-retention.js +885 -0
- package/dist/domains/comet-native/native-evidence-retention.js.map +1 -0
- package/dist/domains/comet-native/native-evidence-storage.d.ts +41 -0
- package/dist/domains/comet-native/native-evidence-storage.d.ts.map +1 -0
- package/dist/domains/comet-native/native-evidence-storage.js +351 -0
- package/dist/domains/comet-native/native-evidence-storage.js.map +1 -0
- package/dist/domains/comet-native/native-findings.d.ts +8 -0
- package/dist/domains/comet-native/native-findings.d.ts.map +1 -0
- package/dist/domains/comet-native/native-findings.js +238 -0
- package/dist/domains/comet-native/native-findings.js.map +1 -0
- package/dist/domains/comet-native/native-guards.d.ts +7 -0
- package/dist/domains/comet-native/native-guards.d.ts.map +1 -0
- package/dist/domains/comet-native/native-guards.js +126 -0
- package/dist/domains/comet-native/native-guards.js.map +1 -0
- package/dist/domains/comet-native/native-hash.d.ts +3 -0
- package/dist/domains/comet-native/native-hash.d.ts.map +1 -0
- package/dist/domains/comet-native/native-hash.js +12 -0
- package/dist/domains/comet-native/native-hash.js.map +1 -0
- package/dist/domains/comet-native/native-hook-guard.d.ts +17 -0
- package/dist/domains/comet-native/native-hook-guard.d.ts.map +1 -0
- package/dist/domains/comet-native/native-hook-guard.js +154 -0
- package/dist/domains/comet-native/native-hook-guard.js.map +1 -0
- package/dist/domains/comet-native/native-lock.d.ts +47 -0
- package/dist/domains/comet-native/native-lock.d.ts.map +1 -0
- package/dist/domains/comet-native/native-lock.js +395 -0
- package/dist/domains/comet-native/native-lock.js.map +1 -0
- package/dist/domains/comet-native/native-mutation-lock.d.ts +5 -0
- package/dist/domains/comet-native/native-mutation-lock.d.ts.map +1 -0
- package/dist/domains/comet-native/native-mutation-lock.js +66 -0
- package/dist/domains/comet-native/native-mutation-lock.js.map +1 -0
- package/dist/domains/comet-native/native-paths.d.ts +10 -0
- package/dist/domains/comet-native/native-paths.d.ts.map +1 -0
- package/dist/domains/comet-native/native-paths.js +171 -0
- package/dist/domains/comet-native/native-paths.js.map +1 -0
- package/dist/domains/comet-native/native-progress-checkpoint.d.ts +13 -0
- package/dist/domains/comet-native/native-progress-checkpoint.d.ts.map +1 -0
- package/dist/domains/comet-native/native-progress-checkpoint.js +104 -0
- package/dist/domains/comet-native/native-progress-checkpoint.js.map +1 -0
- package/dist/domains/comet-native/native-protected-file.d.ts +113 -0
- package/dist/domains/comet-native/native-protected-file.d.ts.map +1 -0
- package/dist/domains/comet-native/native-protected-file.js +509 -0
- package/dist/domains/comet-native/native-protected-file.js.map +1 -0
- package/dist/domains/comet-native/native-redaction.d.ts +2 -0
- package/dist/domains/comet-native/native-redaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-redaction.js +18 -0
- package/dist/domains/comet-native/native-redaction.js.map +1 -0
- package/dist/domains/comet-native/native-repair-integration.d.ts +42 -0
- package/dist/domains/comet-native/native-repair-integration.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-integration.js +184 -0
- package/dist/domains/comet-native/native-repair-integration.js.map +1 -0
- package/dist/domains/comet-native/native-repair-runtime.d.ts +73 -0
- package/dist/domains/comet-native/native-repair-runtime.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-runtime.js +509 -0
- package/dist/domains/comet-native/native-repair-runtime.js.map +1 -0
- package/dist/domains/comet-native/native-repair-stagnation.d.ts +85 -0
- package/dist/domains/comet-native/native-repair-stagnation.d.ts.map +1 -0
- package/dist/domains/comet-native/native-repair-stagnation.js +256 -0
- package/dist/domains/comet-native/native-repair-stagnation.js.map +1 -0
- package/dist/domains/comet-native/native-resume-view.d.ts +14 -0
- package/dist/domains/comet-native/native-resume-view.d.ts.map +1 -0
- package/dist/domains/comet-native/native-resume-view.js +105 -0
- package/dist/domains/comet-native/native-resume-view.js.map +1 -0
- package/dist/domains/comet-native/native-revision.d.ts +20 -0
- package/dist/domains/comet-native/native-revision.d.ts.map +1 -0
- package/dist/domains/comet-native/native-revision.js +32 -0
- package/dist/domains/comet-native/native-revision.js.map +1 -0
- package/dist/domains/comet-native/native-root-move.d.ts +20 -0
- package/dist/domains/comet-native/native-root-move.d.ts.map +1 -0
- package/dist/domains/comet-native/native-root-move.js +812 -0
- package/dist/domains/comet-native/native-root-move.js.map +1 -0
- package/dist/domains/comet-native/native-run-consistency.d.ts +3 -0
- package/dist/domains/comet-native/native-run-consistency.d.ts.map +1 -0
- package/dist/domains/comet-native/native-run-consistency.js +136 -0
- package/dist/domains/comet-native/native-run-consistency.js.map +1 -0
- package/dist/domains/comet-native/native-run-store.d.ts +41 -0
- package/dist/domains/comet-native/native-run-store.d.ts.map +1 -0
- package/dist/domains/comet-native/native-run-store.js +451 -0
- package/dist/domains/comet-native/native-run-store.js.map +1 -0
- package/dist/domains/comet-native/native-runtime-package.d.ts +16 -0
- package/dist/domains/comet-native/native-runtime-package.d.ts.map +1 -0
- package/dist/domains/comet-native/native-runtime-package.js +72 -0
- package/dist/domains/comet-native/native-runtime-package.js.map +1 -0
- package/dist/domains/comet-native/native-schema-migration.d.ts +11 -0
- package/dist/domains/comet-native/native-schema-migration.d.ts.map +1 -0
- package/dist/domains/comet-native/native-schema-migration.js +899 -0
- package/dist/domains/comet-native/native-schema-migration.js.map +1 -0
- package/dist/domains/comet-native/native-selection.d.ts +12 -0
- package/dist/domains/comet-native/native-selection.d.ts.map +1 -0
- package/dist/domains/comet-native/native-selection.js +52 -0
- package/dist/domains/comet-native/native-selection.js.map +1 -0
- package/dist/domains/comet-native/native-sensitive-paths.d.ts +7 -0
- package/dist/domains/comet-native/native-sensitive-paths.d.ts.map +1 -0
- package/dist/domains/comet-native/native-sensitive-paths.js +69 -0
- package/dist/domains/comet-native/native-sensitive-paths.js.map +1 -0
- package/dist/domains/comet-native/native-snapshot.d.ts +74 -0
- package/dist/domains/comet-native/native-snapshot.d.ts.map +1 -0
- package/dist/domains/comet-native/native-snapshot.js +2308 -0
- package/dist/domains/comet-native/native-snapshot.js.map +1 -0
- package/dist/domains/comet-native/native-specs.d.ts +12 -0
- package/dist/domains/comet-native/native-specs.d.ts.map +1 -0
- package/dist/domains/comet-native/native-specs.js +270 -0
- package/dist/domains/comet-native/native-specs.js.map +1 -0
- package/dist/domains/comet-native/native-trajectory-limits.d.ts +7 -0
- package/dist/domains/comet-native/native-trajectory-limits.d.ts.map +1 -0
- package/dist/domains/comet-native/native-trajectory-limits.js +13 -0
- package/dist/domains/comet-native/native-trajectory-limits.js.map +1 -0
- package/dist/domains/comet-native/native-trajectory-recovery.d.ts +37 -0
- package/dist/domains/comet-native/native-trajectory-recovery.d.ts.map +1 -0
- package/dist/domains/comet-native/native-trajectory-recovery.js +133 -0
- package/dist/domains/comet-native/native-trajectory-recovery.js.map +1 -0
- package/dist/domains/comet-native/native-trajectory.d.ts +16 -0
- package/dist/domains/comet-native/native-trajectory.d.ts.map +1 -0
- package/dist/domains/comet-native/native-trajectory.js +27 -0
- package/dist/domains/comet-native/native-trajectory.js.map +1 -0
- package/dist/domains/comet-native/native-transaction.d.ts +45 -0
- package/dist/domains/comet-native/native-transaction.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transaction.js +846 -0
- package/dist/domains/comet-native/native-transaction.js.map +1 -0
- package/dist/domains/comet-native/native-transition-evidence.d.ts +4 -0
- package/dist/domains/comet-native/native-transition-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transition-evidence.js +20 -0
- package/dist/domains/comet-native/native-transition-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-transition-journal.d.ts +30 -0
- package/dist/domains/comet-native/native-transition-journal.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transition-journal.js +819 -0
- package/dist/domains/comet-native/native-transition-journal.js.map +1 -0
- package/dist/domains/comet-native/native-transitions.d.ts +13 -0
- package/dist/domains/comet-native/native-transitions.d.ts.map +1 -0
- package/dist/domains/comet-native/native-transitions.js +632 -0
- package/dist/domains/comet-native/native-transitions.js.map +1 -0
- package/dist/domains/comet-native/native-types.d.ts +547 -0
- package/dist/domains/comet-native/native-types.d.ts.map +1 -0
- package/dist/domains/comet-native/native-types.js +8 -0
- package/dist/domains/comet-native/native-types.js.map +1 -0
- package/dist/domains/comet-native/native-verification-evidence.d.ts +86 -0
- package/dist/domains/comet-native/native-verification-evidence.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-evidence.js +480 -0
- package/dist/domains/comet-native/native-verification-evidence.js.map +1 -0
- package/dist/domains/comet-native/native-verification-runtime.d.ts +58 -0
- package/dist/domains/comet-native/native-verification-runtime.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-runtime.js +321 -0
- package/dist/domains/comet-native/native-verification-runtime.js.map +1 -0
- package/dist/domains/comet-native/native-verification-scope.d.ts +117 -0
- package/dist/domains/comet-native/native-verification-scope.d.ts.map +1 -0
- package/dist/domains/comet-native/native-verification-scope.js +1040 -0
- package/dist/domains/comet-native/native-verification-scope.js.map +1 -0
- package/dist/domains/comet-native/native-workspace.d.ts +46 -0
- package/dist/domains/comet-native/native-workspace.d.ts.map +1 -0
- package/dist/domains/comet-native/native-workspace.js +276 -0
- package/dist/domains/comet-native/native-workspace.js.map +1 -0
- package/dist/domains/dashboard/collector.d.ts.map +1 -1
- package/dist/domains/dashboard/collector.js +9 -1
- package/dist/domains/dashboard/collector.js.map +1 -1
- package/dist/domains/dashboard/native-adapter.d.ts +157 -0
- package/dist/domains/dashboard/native-adapter.d.ts.map +1 -0
- package/dist/domains/dashboard/native-adapter.js +302 -0
- package/dist/domains/dashboard/native-adapter.js.map +1 -0
- package/dist/domains/dashboard/native-collector.d.ts +6 -0
- package/dist/domains/dashboard/native-collector.d.ts.map +1 -0
- package/dist/domains/dashboard/native-collector.js +285 -0
- package/dist/domains/dashboard/native-collector.js.map +1 -0
- package/dist/domains/dashboard/types.d.ts +5 -0
- package/dist/domains/dashboard/types.d.ts.map +1 -1
- package/dist/domains/dashboard/web/assets/{arc-TGVUG2WN.js → arc-CxdiLJ50.js} +1 -1
- package/dist/domains/dashboard/web/assets/{architectureDiagram-3BPJPVTR-ASHmiHoP.js → architectureDiagram-3BPJPVTR-D5YCQu4e.js} +1 -1
- package/dist/domains/dashboard/web/assets/{blockDiagram-GPEHLZMM-CwASxBKe.js → blockDiagram-GPEHLZMM-8NfdCOQ8.js} +1 -1
- package/dist/domains/dashboard/web/assets/{c4Diagram-AAUBKEIU-BU8z_WNk.js → c4Diagram-AAUBKEIU-B3cFnNT7.js} +1 -1
- package/dist/domains/dashboard/web/assets/channel-B6AFly29.js +1 -0
- package/dist/domains/dashboard/web/assets/{chunk-2J33WTMH-CBGlUx4_.js → chunk-2J33WTMH-CBNfW-Dr.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-4BX2VUAB-CS-iGcFz.js → chunk-4BX2VUAB-vWyemRBr.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-55IACEB6-BUtCVJat.js → chunk-55IACEB6-H6haOo2C.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-727SXJPM-C94tj_pf.js → chunk-727SXJPM-D02UjGND.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-AQP2D5EJ-BFOKcpdG.js → chunk-AQP2D5EJ-wKsbOw_T.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-FMBD7UC4-Dmx8B-st.js → chunk-FMBD7UC4-eYFEZimP.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-ND2GUHAM-DYV00CNn.js → chunk-ND2GUHAM-fMaIDDI2.js} +1 -1
- package/dist/domains/dashboard/web/assets/{chunk-QZHKN3VN-DMJJyQnw.js → chunk-QZHKN3VN-C9rhF6Hm.js} +1 -1
- package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-BcnrxOTt.js +1 -0
- package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-BcnrxOTt.js +1 -0
- package/dist/domains/dashboard/web/assets/{cose-bilkent-S5V4N54A-P4nE2rea.js → cose-bilkent-S5V4N54A-CbaShPub.js} +1 -1
- package/dist/domains/dashboard/web/assets/{cynefin-VYW2F7L2-C-R1HXDv.js → cynefin-VYW2F7L2-DN4emAQv.js} +1 -1
- package/dist/domains/dashboard/web/assets/{dagre-BM42HDAG-BH8d-C9z.js → dagre-BM42HDAG-BpSzbk_V.js} +1 -1
- package/dist/domains/dashboard/web/assets/demo-BuVau32v.js +25 -0
- package/dist/domains/dashboard/web/assets/{diagram-2AECGRRQ-DpXTgQIH.js → diagram-2AECGRRQ-CfXwGGpQ.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-5GNKFQAL-DSiFJzSw.js → diagram-5GNKFQAL-DMp0Zmot.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-KO2AKTUF-DULMkben.js → diagram-KO2AKTUF-C7ZvofsM.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-LMA3HP47-Pi8m_NO9.js → diagram-LMA3HP47-BjmxFnap.js} +1 -1
- package/dist/domains/dashboard/web/assets/{diagram-OG6HWLK6-BSe6bCWm.js → diagram-OG6HWLK6-DFBG1Iqy.js} +1 -1
- package/dist/domains/dashboard/web/assets/{erDiagram-TEJ5UH35-zb-FEcbq.js → erDiagram-TEJ5UH35-MpNT7dzt.js} +1 -1
- package/dist/domains/dashboard/web/assets/{flowDiagram-I6XJVG4X-Dr-Gk0z2.js → flowDiagram-I6XJVG4X-_1wAR6c1.js} +1 -1
- package/dist/domains/dashboard/web/assets/{ganttDiagram-6RSMTGT7-qs6Zb2A6.js → ganttDiagram-6RSMTGT7-DJKjDeWl.js} +1 -1
- package/dist/domains/dashboard/web/assets/{gitGraphDiagram-PVQCEYII-BQ314orT.js → gitGraphDiagram-PVQCEYII-BL7yUEn-.js} +1 -1
- package/dist/domains/dashboard/web/assets/index-CjE9mHGb.js +24 -0
- package/dist/domains/dashboard/web/assets/index-D-AGxvI4.css +1 -0
- package/dist/domains/dashboard/web/assets/{infoDiagram-5YYISTIA-O0bQp98A.js → infoDiagram-5YYISTIA-Bt5fqrOd.js} +1 -1
- package/dist/domains/dashboard/web/assets/{ishikawaDiagram-YF4QCWOH-BPC7wbKh.js → ishikawaDiagram-YF4QCWOH-COCMcjBM.js} +1 -1
- package/dist/domains/dashboard/web/assets/{journeyDiagram-JHISSGLW-ohViOd4b.js → journeyDiagram-JHISSGLW-DGcpcWny.js} +1 -1
- package/dist/domains/dashboard/web/assets/{kanban-definition-UN3LZRKU-CHleNdbG.js → kanban-definition-UN3LZRKU-QSBNsWMP.js} +1 -1
- package/dist/domains/dashboard/web/assets/{linear-CyqiW--Q.js → linear-9uyeeBZf.js} +1 -1
- package/dist/domains/dashboard/web/assets/{mermaid.core-qS9XvtaK.js → mermaid.core-CkNdB471.js} +4 -4
- package/dist/domains/dashboard/web/assets/{mindmap-definition-RKZ34NQL-oaGkqO9l.js → mindmap-definition-RKZ34NQL-CiNxI0gP.js} +1 -1
- package/dist/domains/dashboard/web/assets/{pieDiagram-4H26LBE5-CPcB-AFh.js → pieDiagram-4H26LBE5-BLJ6QnRO.js} +1 -1
- package/dist/domains/dashboard/web/assets/{quadrantDiagram-W4KKPZXB-LFy52Qtj.js → quadrantDiagram-W4KKPZXB-CflW-eFH.js} +1 -1
- package/dist/domains/dashboard/web/assets/{requirementDiagram-4Y6WPE33-BdjeaYP_.js → requirementDiagram-4Y6WPE33-B9HLmRWH.js} +1 -1
- package/dist/domains/dashboard/web/assets/{sankeyDiagram-5OEKKPKP-DDJ4styL.js → sankeyDiagram-5OEKKPKP-6xnco5k5.js} +1 -1
- package/dist/domains/dashboard/web/assets/{sequenceDiagram-3UESZ5HK-BL5bFNoz.js → sequenceDiagram-3UESZ5HK-Dp1rujNZ.js} +1 -1
- package/dist/domains/dashboard/web/assets/{stateDiagram-AJRCARHV-BNUfikui.js → stateDiagram-AJRCARHV-C1Xc90ek.js} +1 -1
- package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-p-qmzXyE.js +1 -0
- package/dist/domains/dashboard/web/assets/{timeline-definition-PNZ67QCA--ps2uu6L.js → timeline-definition-PNZ67QCA-g9s-m5Z4.js} +1 -1
- package/dist/domains/dashboard/web/assets/{vennDiagram-CIIHVFJN-C2q8q26c.js → vennDiagram-CIIHVFJN-rkEyhyCc.js} +1 -1
- package/dist/domains/dashboard/web/assets/{wardleyDiagram-YWT4CUSO-BUH9gXqd.js → wardleyDiagram-YWT4CUSO-CJLrWGXc.js} +1 -1
- package/dist/domains/dashboard/web/assets/{xychartDiagram-2RQKCTM6-B-DielEy.js → xychartDiagram-2RQKCTM6-BxJvPNqo.js} +1 -1
- package/dist/domains/dashboard/web/index.html +2 -2
- package/dist/domains/engine/storage-layout.d.ts +14 -0
- package/dist/domains/engine/storage-layout.d.ts.map +1 -0
- package/dist/domains/engine/storage-layout.js +32 -0
- package/dist/domains/engine/storage-layout.js.map +1 -0
- package/dist/domains/engine/storage-run.d.ts +9 -0
- package/dist/domains/engine/storage-run.d.ts.map +1 -0
- package/dist/domains/engine/storage-run.js +116 -0
- package/dist/domains/engine/storage-run.js.map +1 -0
- package/dist/domains/factory/package.d.ts.map +1 -1
- package/dist/domains/factory/package.js +5 -3
- package/dist/domains/factory/package.js.map +1 -1
- package/dist/domains/integrations/openspec.d.ts.map +1 -1
- package/dist/domains/integrations/openspec.js +8 -6
- package/dist/domains/integrations/openspec.js.map +1 -1
- package/dist/domains/skill/platform-inspect.d.ts +6 -2
- package/dist/domains/skill/platform-inspect.d.ts.map +1 -1
- package/dist/domains/skill/platform-inspect.js +52 -8
- package/dist/domains/skill/platform-inspect.js.map +1 -1
- package/dist/domains/skill/platform-install.d.ts +18 -7
- package/dist/domains/skill/platform-install.d.ts.map +1 -1
- package/dist/domains/skill/platform-install.js +338 -71
- package/dist/domains/skill/platform-install.js.map +1 -1
- package/dist/domains/skill/project-instructions.d.ts.map +1 -1
- package/dist/domains/skill/project-instructions.js +12 -6
- package/dist/domains/skill/project-instructions.js.map +1 -1
- package/dist/domains/skill/uninstall.d.ts.map +1 -1
- package/dist/domains/skill/uninstall.js +15 -3
- package/dist/domains/skill/uninstall.js.map +1 -1
- package/dist/domains/workflow-contract/builtins.d.ts +6 -0
- package/dist/domains/workflow-contract/builtins.d.ts.map +1 -1
- package/dist/domains/workflow-contract/builtins.js +137 -0
- package/dist/domains/workflow-contract/builtins.js.map +1 -1
- package/dist/domains/workflow-contract/index.d.ts +3 -1
- package/dist/domains/workflow-contract/index.d.ts.map +1 -1
- package/dist/domains/workflow-contract/index.js +2 -1
- package/dist/domains/workflow-contract/index.js.map +1 -1
- package/dist/domains/workflow-contract/normalize.d.ts.map +1 -1
- package/dist/domains/workflow-contract/normalize.js +28 -10
- package/dist/domains/workflow-contract/normalize.js.map +1 -1
- package/dist/domains/workflow-contract/project-config.d.ts +7 -0
- package/dist/domains/workflow-contract/project-config.d.ts.map +1 -0
- package/dist/domains/workflow-contract/project-config.js +110 -0
- package/dist/domains/workflow-contract/project-config.js.map +1 -0
- package/dist/domains/workflow-contract/types.d.ts +4 -2
- package/dist/domains/workflow-contract/types.d.ts.map +1 -1
- package/dist/domains/workflow-contract/validation.d.ts.map +1 -1
- package/dist/domains/workflow-contract/validation.js +14 -5
- package/dist/domains/workflow-contract/validation.js.map +1 -1
- package/dist/platform/install/detect.d.ts +3 -1
- package/dist/platform/install/detect.d.ts.map +1 -1
- package/dist/platform/install/detect.js +4 -1
- package/dist/platform/install/detect.js.map +1 -1
- package/dist/platform/install/project-registry.js +2 -2
- package/dist/platform/install/project-registry.js.map +1 -1
- package/dist/platform/paths/repository-layout.d.ts +16 -0
- package/dist/platform/paths/repository-layout.d.ts.map +1 -1
- package/dist/platform/paths/repository-layout.js.map +1 -1
- package/eval/local/README.md +50 -0
- package/eval/local/scripts/compare_baselines.py +127 -1
- package/eval/local/scripts/regression_check.py +3 -4
- package/eval/local/tasks/comet-native-clarification/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-clarification/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-clarification/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-clarification/instruction.md +7 -0
- package/eval/local/tasks/comet-native-clarification/task.toml +40 -0
- package/eval/local/tasks/comet-native-clarification/validation/test_native_clarification.py +193 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-clarification-modes/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-clarification-modes/instruction.md +13 -0
- package/eval/local/tasks/comet-native-clarification-modes/task.toml +39 -0
- package/eval/local/tasks/comet-native-clarification-modes/validation/test_native_clarification_modes.py +235 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/.comet/config.yaml +6 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/Dockerfile +28 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/brief.md +17 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/comet-state.yaml +12 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/runtime/transition.json +69 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/docs/comet/changes/add-character-counting/specs/character-counting/spec.md +3 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/test_wordcount.py +20 -0
- package/eval/local/tasks/comet-native-interrupted-transition/environment/wordcount.py +27 -0
- package/eval/local/tasks/comet-native-interrupted-transition/instruction.md +7 -0
- package/eval/local/tasks/comet-native-interrupted-transition/task.toml +35 -0
- package/eval/local/tasks/comet-native-interrupted-transition/validation/test_native_interrupted_transition.py +63 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/Dockerfile +26 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/PRODUCT_RULES.md +3 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/test_wordcount.py +20 -0
- package/eval/local/tasks/comet-native-repository-fact/environment/wordcount.py +27 -0
- package/eval/local/tasks/comet-native-repository-fact/instruction.md +7 -0
- package/eval/local/tasks/comet-native-repository-fact/task.toml +35 -0
- package/eval/local/tasks/comet-native-repository-fact/validation/test_native_repository_fact.py +53 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/instruction.md +9 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/task.toml +40 -0
- package/eval/local/tasks/comet-native-wave-b-decision-resume/validation/test_native_wave_b_decision_resume.py +208 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/instruction.md +11 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/task.toml +36 -0
- package/eval/local/tasks/comet-native-wave-c-verification-integrity/validation/test_native_wave_c_verification_integrity.py +344 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/instruction.md +11 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/task.toml +37 -0
- package/eval/local/tasks/comet-native-wave-d-stagnation-stop/validation/test_native_wave_d_stagnation_stop.py +284 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/.include-trusted-native-runtime +1 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/instruction.md +9 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/task.toml +37 -0
- package/eval/local/tasks/comet-native-wave-e-parallel-safety/validation/test_native_wave_e_parallel_safety.py +309 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/.include-current-comet-cli +1 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/Dockerfile +31 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet-package.json +18 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/current-comet.sh +14 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/test_wordcount.py +27 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/instruction.md +7 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/task.toml +36 -0
- package/eval/local/tasks/comet-native-wave-f-dashboard-readonly/validation/test_native_wave_f_dashboard_readonly.py +469 -0
- package/eval/local/tasks/comet-native-workflow/environment/Dockerfile +27 -0
- package/eval/local/tasks/comet-native-workflow/environment/test_wordcount.py +25 -0
- package/eval/local/tasks/comet-native-workflow/environment/wordcount.py +36 -0
- package/eval/local/tasks/comet-native-workflow/instruction.md +14 -0
- package/eval/local/tasks/comet-native-workflow/task.toml +36 -0
- package/eval/local/tasks/comet-native-workflow/validation/test_native_workflow.py +149 -0
- package/eval/local/tasks/index.yaml +61 -0
- package/eval/local/tests/conftest.py +407 -22
- package/eval/local/tests/scaffold/test_aligned_comparison.py +1012 -0
- package/eval/local/tests/scaffold/test_conftest_helpers.py +187 -7
- package/eval/local/tests/scaffold/test_logging.py +135 -1
- package/eval/local/tests/scaffold/test_manifests.py +2 -0
- package/eval/local/tests/scaffold/test_native_aligned_eval.py +346 -0
- package/eval/local/tests/scaffold/test_native_wave_evaluations.py +1889 -0
- package/eval/local/tests/scaffold/test_profiles.py +33 -0
- package/eval/local/tests/scaffold/test_sample_quality.py +57 -0
- package/eval/local/tests/scaffold/test_tasks.py +377 -1
- package/eval/local/tests/scaffold/test_treatments.py +59 -13
- package/eval/local/tests/scaffold/test_utils.py +277 -4
- package/eval/local/tests/tasks/__init__.py +1 -0
- package/eval/local/tests/tasks/test_tasks.py +104 -78
- package/eval/local/tests/tasks/test_validation_scripts.py +37 -0
- package/eval/local/treatments/comet/comet_native_phase1.yaml +66 -0
- package/eval/scaffold/python/aligned_comparison.py +1631 -0
- package/eval/scaffold/python/generic_llm_judge.py +3 -1
- package/eval/scaffold/python/llm_judge.py +0 -3
- package/eval/scaffold/python/logging.py +115 -16
- package/eval/scaffold/python/manifests.py +2 -0
- package/eval/scaffold/python/native_eval.py +138 -0
- package/eval/scaffold/python/pass_at_k.py +0 -1
- package/eval/scaffold/python/report_outputs.py +226 -44
- package/eval/scaffold/python/sample_quality.py +45 -2
- package/eval/scaffold/python/tasks.py +11 -0
- package/eval/scaffold/python/utils.py +108 -20
- package/eval/scaffold/python/validation/__init__.py +15 -5
- package/eval/scaffold/python/validation/comet_workflow.py +10 -5
- package/eval/scaffold/python/validation/generic_rubric.py +1 -2
- package/eval/scaffold/python/validation/native_wave.py +2154 -0
- package/eval/scaffold/python/validation/native_workflow.py +252 -0
- package/eval/scaffold/python/validation/rubric.py +0 -2
- package/eval/scaffold/shell/completion-point.sh +18 -0
- package/eval/scaffold/shell/decision-point.sh +35 -0
- package/eval/scaffold/shell/docker.sh +150 -9
- package/eval/scaffold/shell/run-claude-loop.sh +57 -27
- package/package.json +19 -5
- package/dist/domains/dashboard/web/assets/channel-kp6Ng2JJ.js +0 -1
- package/dist/domains/dashboard/web/assets/classDiagram-4FO5ZUOK-yBDjgMY_.js +0 -1
- package/dist/domains/dashboard/web/assets/classDiagram-v2-Q7XG4LA2-yBDjgMY_.js +0 -1
- package/dist/domains/dashboard/web/assets/demo-DQyfozbi.js +0 -1
- package/dist/domains/dashboard/web/assets/index-BLAfkNTu.css +0 -1
- package/dist/domains/dashboard/web/assets/index-DtLUOcAW.js +0 -24
- package/dist/domains/dashboard/web/assets/stateDiagram-v2-BHNVJYJU-DGrsmWts.js +0 -1
- package/eval/.env.example +0 -52
- package/eval/langsmith/.env.example +0 -16
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
"""Unit tests for eval scaffold utilities."""
|
|
2
2
|
|
|
3
|
+
import importlib
|
|
4
|
+
import os
|
|
5
|
+
import subprocess
|
|
3
6
|
from pathlib import Path
|
|
4
7
|
|
|
8
|
+
import dotenv
|
|
9
|
+
|
|
5
10
|
from scaffold.python import utils
|
|
6
11
|
from scaffold.python.skill_parser import load_skill_content, parse_skill_md
|
|
7
12
|
|
|
8
13
|
|
|
14
|
+
def test_import_does_not_read_dotenv(monkeypatch):
|
|
15
|
+
calls = []
|
|
16
|
+
monkeypatch.setattr(dotenv, "load_dotenv", lambda *args, **kwargs: calls.append((args, kwargs)))
|
|
17
|
+
|
|
18
|
+
importlib.reload(utils)
|
|
19
|
+
|
|
20
|
+
assert calls == []
|
|
21
|
+
utils.load_eval_environment()
|
|
22
|
+
assert len(calls) == 2
|
|
23
|
+
monkeypatch.undo()
|
|
24
|
+
importlib.reload(utils)
|
|
25
|
+
|
|
26
|
+
|
|
9
27
|
def test_execution_validator_converts_structured_checks(monkeypatch, tmp_path: Path):
|
|
10
28
|
def fake_run_eval_in_docker(*_args, **_kwargs):
|
|
11
29
|
return {
|
|
@@ -33,6 +51,25 @@ def test_execution_validator_converts_structured_checks(monkeypatch, tmp_path: P
|
|
|
33
51
|
assert failed == ["tests_written: missing assertions"]
|
|
34
52
|
|
|
35
53
|
|
|
54
|
+
def test_docker_script_failure_preserves_stderr(monkeypatch, tmp_path: Path):
|
|
55
|
+
monkeypatch.setattr(utils, "check_docker_available", lambda: True)
|
|
56
|
+
monkeypatch.setattr(
|
|
57
|
+
utils,
|
|
58
|
+
"run_shell",
|
|
59
|
+
lambda *_args, **_kwargs: subprocess.CompletedProcess(
|
|
60
|
+
args=["docker.sh"],
|
|
61
|
+
returncode=1,
|
|
62
|
+
stdout="",
|
|
63
|
+
stderr="validator import failed",
|
|
64
|
+
),
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
success, output = utils.run_python_in_docker(tmp_path, "validation/check.py")
|
|
68
|
+
|
|
69
|
+
assert success is False
|
|
70
|
+
assert "validator import failed" in output
|
|
71
|
+
|
|
72
|
+
|
|
36
73
|
def test_run_shell_decodes_subprocess_output_as_utf8(monkeypatch):
|
|
37
74
|
captured = {}
|
|
38
75
|
|
|
@@ -55,6 +92,24 @@ def test_to_bash_path_uses_msys_drive_prefix_for_git_bash(monkeypatch):
|
|
|
55
92
|
assert utils._to_bash_path(r"D:\Project\Comet\eval") == "/d/Project/Comet/eval"
|
|
56
93
|
|
|
57
94
|
|
|
95
|
+
def test_resolve_bash_prefers_git_bash_when_path_bash_is_wsl(monkeypatch):
|
|
96
|
+
monkeypatch.delenv("GIT_BASH", raising=False)
|
|
97
|
+
monkeypatch.setattr(
|
|
98
|
+
utils.shutil,
|
|
99
|
+
"which",
|
|
100
|
+
lambda name: {"bash": r"C:\Windows\System32\bash.exe", "git": r"D:\Git\cmd\git.exe"}.get(
|
|
101
|
+
name
|
|
102
|
+
),
|
|
103
|
+
)
|
|
104
|
+
monkeypatch.setattr(
|
|
105
|
+
utils.os.path,
|
|
106
|
+
"isfile",
|
|
107
|
+
lambda path: str(path).replace("/", "\\").lower() == r"d:\git\bin\bash.exe",
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
assert utils._resolve_bash(os_name="nt") == r"D:\Git\bin\bash.exe"
|
|
111
|
+
|
|
112
|
+
|
|
58
113
|
def test_to_bash_path_uses_wsl_mount_prefix_for_windowsapps_bash(monkeypatch):
|
|
59
114
|
monkeypatch.setattr(utils.os, "name", "nt")
|
|
60
115
|
monkeypatch.setattr(
|
|
@@ -122,10 +177,40 @@ def test_docker_loop_passes_langsmith_plugin_args_to_loop_driver():
|
|
|
122
177
|
assert "CC_LANGSMITH_LOG_FILE" in docker_sh
|
|
123
178
|
|
|
124
179
|
|
|
180
|
+
def test_claude_loop_timeout_force_removes_its_named_container(monkeypatch, tmp_path: Path):
|
|
181
|
+
calls = []
|
|
182
|
+
|
|
183
|
+
def fake_run_shell(script, *args, **kwargs):
|
|
184
|
+
calls.append((script, args, kwargs))
|
|
185
|
+
if args[0] == "run-claude-loop":
|
|
186
|
+
raise subprocess.TimeoutExpired([script, *args], timeout=42)
|
|
187
|
+
return subprocess.CompletedProcess([script, *args], 0, "", "")
|
|
188
|
+
|
|
189
|
+
monkeypatch.setattr(utils, "run_shell", fake_run_shell)
|
|
190
|
+
|
|
191
|
+
result = utils.run_claude_loop_in_docker(tmp_path, ["prompt"], timeout=42)
|
|
192
|
+
|
|
193
|
+
assert result.returncode == 124
|
|
194
|
+
assert calls[0][1][0] == "run-claude-loop"
|
|
195
|
+
assert calls[1][1] == ("cleanup-claude-loop", tmp_path)
|
|
196
|
+
|
|
197
|
+
docker_sh = (utils.SHELL_DIR / "docker.sh").read_text(encoding="utf-8")
|
|
198
|
+
assert '--name "$container_name"' in docker_sh
|
|
199
|
+
assert "cleanup-claude-loop" in docker_sh
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def test_docker_subject_run_uses_controller_verified_immutable_image_identity():
|
|
203
|
+
docker_sh = (utils.SHELL_DIR / "docker.sh").read_text(encoding="utf-8")
|
|
204
|
+
|
|
205
|
+
assert "docker_execution_identity" in docker_sh
|
|
206
|
+
assert "claude --version" in docker_sh
|
|
207
|
+
assert "runtime_image_id" in docker_sh
|
|
208
|
+
assert 'image_id=$(resolve_runtime_image "$dir" "$expected_image_id")' in docker_sh
|
|
209
|
+
assert '"$image_id"' in docker_sh
|
|
210
|
+
|
|
211
|
+
|
|
125
212
|
def test_run_claude_fixture_defaults_langsmith_hook_log_path():
|
|
126
|
-
conftest_py = (Path(__file__).resolve().parents[1] / "conftest.py").read_text(
|
|
127
|
-
encoding="utf-8"
|
|
128
|
-
)
|
|
213
|
+
conftest_py = (Path(__file__).resolve().parents[1] / "conftest.py").read_text(encoding="utf-8")
|
|
129
214
|
|
|
130
215
|
assert 'os.environ["CC_LANGSMITH_LOG_FILE"] = "/workspace/langsmith-hook.log"' in conftest_py
|
|
131
216
|
|
|
@@ -134,6 +219,194 @@ def test_claude_loop_applies_plugin_args_to_subject_turns_only():
|
|
|
134
219
|
loop_sh = (utils.SHELL_DIR / "run-claude-loop.sh").read_text(encoding="utf-8")
|
|
135
220
|
|
|
136
221
|
assert "PLUGIN_ARGS=()" in loop_sh
|
|
137
|
-
assert
|
|
222
|
+
assert "shopt -s nocasematch" in loop_sh
|
|
223
|
+
assert "DECISION_REPLY=" in loop_sh
|
|
224
|
+
assert 'USER_REPLY="$DECISION_REPLY"' in loop_sh
|
|
225
|
+
assert 'bash "$SCRIPT_DIR/decision-point.sh" "$RESULT_TEXT"' in loop_sh
|
|
226
|
+
assert 'bash "$SCRIPT_DIR/completion-point.sh" "$RESULT_TEXT"' in loop_sh
|
|
227
|
+
assert loop_sh.index("workflow completion detected") < loop_sh.index(
|
|
228
|
+
'bash "$SCRIPT_DIR/decision-point.sh" "$RESULT_TEXT"'
|
|
229
|
+
)
|
|
230
|
+
assert 'SUBJECT_PROMPT="${FRESH_PROMPT:-$PROMPT}"' in loop_sh
|
|
231
|
+
assert 'claude -p "$SUBJECT_PROMPT" "${PLUGIN_ARGS[@]}"' in loop_sh
|
|
138
232
|
assert 'claude -p "$USER_REPLY" "${PLUGIN_ARGS[@]}"' in loop_sh
|
|
233
|
+
assert "fresh resume boundary detected" in loop_sh
|
|
139
234
|
assert 'claude -p "$sim_prompt" "${PLUGIN_ARGS[@]}"' not in loop_sh
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def test_claude_loop_surfaces_subject_resume_failure(tmp_path: Path):
|
|
238
|
+
fake_bin = tmp_path / "bin"
|
|
239
|
+
fake_bin.mkdir()
|
|
240
|
+
fake_claude = fake_bin / "claude"
|
|
241
|
+
fake_claude.write_text(
|
|
242
|
+
"""#!/usr/bin/env bash
|
|
243
|
+
for arg in "$@"; do
|
|
244
|
+
if [[ "$arg" == "--resume" ]]; then
|
|
245
|
+
echo "resume failed stdout diagnostic"
|
|
246
|
+
echo "resume failed diagnostic" >&2
|
|
247
|
+
exit 42
|
|
248
|
+
fi
|
|
249
|
+
done
|
|
250
|
+
printf '%s\n' '{"type":"system","session_id":"session-1"}'
|
|
251
|
+
printf '%s\n' '{"type":"result","subtype":"success","session_id":"session-1","result":"Should abbreviations end a sentence?"}'
|
|
252
|
+
""",
|
|
253
|
+
encoding="utf-8",
|
|
254
|
+
newline="\n",
|
|
255
|
+
)
|
|
256
|
+
fake_claude.chmod(0o755)
|
|
257
|
+
|
|
258
|
+
env = os.environ.copy()
|
|
259
|
+
env["PATH"] = f"{utils._to_bash_path(fake_bin)}:{env.get('PATH', '')}"
|
|
260
|
+
result = subprocess.run(
|
|
261
|
+
[
|
|
262
|
+
utils.BASH_EXEC,
|
|
263
|
+
utils._to_bash_path(utils.SHELL_DIR / "run-claude-loop.sh"),
|
|
264
|
+
"Implement the requested change.",
|
|
265
|
+
"--max-turns",
|
|
266
|
+
"2",
|
|
267
|
+
"--decision-pattern",
|
|
268
|
+
"abbreviation",
|
|
269
|
+
"--decision-reply",
|
|
270
|
+
"Use an explicit abbreviation list.",
|
|
271
|
+
],
|
|
272
|
+
capture_output=True,
|
|
273
|
+
text=True,
|
|
274
|
+
encoding="utf-8",
|
|
275
|
+
errors="replace",
|
|
276
|
+
timeout=10,
|
|
277
|
+
check=False,
|
|
278
|
+
env=env,
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
assert result.returncode != 0
|
|
282
|
+
assert "resume failed stdout diagnostic" in result.stderr
|
|
283
|
+
assert "resume failed diagnostic" in result.stderr
|
|
284
|
+
assert "subject turn 2 failed" in result.stderr
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
def test_decision_point_detector_rejects_completion_statements():
|
|
288
|
+
statement = "Implementation is complete and the artifacts provide the requested evidence."
|
|
289
|
+
punctuation_summary = "Done. The counter recognizes ., !, and ? terminators."
|
|
290
|
+
question = "Please confirm whether abbreviations should end a sentence."
|
|
291
|
+
|
|
292
|
+
statement_result = utils.run_shell("decision-point.sh", statement, check=False)
|
|
293
|
+
punctuation_result = utils.run_shell("decision-point.sh", punctuation_summary, check=False)
|
|
294
|
+
question_result = utils.run_shell("decision-point.sh", question, check=False)
|
|
295
|
+
|
|
296
|
+
assert statement_result.returncode == 1
|
|
297
|
+
assert punctuation_result.returncode == 1
|
|
298
|
+
assert question_result.returncode == 0
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
def test_decision_point_detector_rejects_multiline_archived_decision_summary():
|
|
302
|
+
result = utils.run_shell(
|
|
303
|
+
"decision-point.sh",
|
|
304
|
+
"""Change archived successfully.
|
|
305
|
+
1. Should abbreviations end sentences — No.
|
|
306
|
+
2. Consecutive terminators (`?!`) count as one boundary.
|
|
307
|
+
All verification checks passed.""",
|
|
308
|
+
check=False,
|
|
309
|
+
)
|
|
310
|
+
|
|
311
|
+
assert result.returncode == 1
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def test_decision_point_patterns_require_an_unresolved_decision_signal():
|
|
315
|
+
ordinary = utils.run_shell(
|
|
316
|
+
"decision-point.sh",
|
|
317
|
+
"The brief records abbreviation behavior.",
|
|
318
|
+
"abbreviation",
|
|
319
|
+
check=False,
|
|
320
|
+
)
|
|
321
|
+
unresolved = utils.run_shell(
|
|
322
|
+
"decision-point.sh",
|
|
323
|
+
"Abbreviation behavior is unresolved; I need your decision before continuing.",
|
|
324
|
+
"abbreviation",
|
|
325
|
+
check=False,
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
assert ordinary.returncode == 1
|
|
329
|
+
assert unresolved.returncode == 0
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def test_decision_point_detector_accepts_question_followed_by_recommendation_and_impact():
|
|
333
|
+
result = utils.run_shell(
|
|
334
|
+
"decision-point.sh",
|
|
335
|
+
"""How should abbreviations affect sentence boundaries?
|
|
336
|
+
|
|
337
|
+
Recommendation: Ignore a small explicit list.
|
|
338
|
+
Impact: Counts remain intuitive, but the list needs maintenance.""",
|
|
339
|
+
check=False,
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
assert result.returncode == 0
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def test_decision_point_detector_accepts_batch_labels_and_reply_confirmation():
|
|
346
|
+
labelled_question = utils.run_shell(
|
|
347
|
+
"decision-point.sh",
|
|
348
|
+
"""**1. Question:** Whether abbreviations such as `e.g.` end a sentence.
|
|
349
|
+
**Recommendation:** No.
|
|
350
|
+
**Impact:** Counts stay intuitive.""",
|
|
351
|
+
check=False,
|
|
352
|
+
)
|
|
353
|
+
reply_confirmation = utils.run_shell(
|
|
354
|
+
"decision-point.sh",
|
|
355
|
+
'Please reply **"confirmed"** to approve this shared understanding.',
|
|
356
|
+
check=False,
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
assert labelled_question.returncode == 0
|
|
360
|
+
assert reply_confirmation.returncode == 0
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def test_completion_point_detector_requires_explicit_non_negated_workflow_completion():
|
|
364
|
+
archived = utils.run_shell(
|
|
365
|
+
"completion-point.sh",
|
|
366
|
+
"Change archived at docs/comet/archive/2026-07-15-add-counting/.",
|
|
367
|
+
check=False,
|
|
368
|
+
)
|
|
369
|
+
archive_complete = utils.run_shell(
|
|
370
|
+
"completion-point.sh", "The archive is complete and verified from disk.", check=False
|
|
371
|
+
)
|
|
372
|
+
completed_through_archive = utils.run_shell(
|
|
373
|
+
"completion-point.sh", "Change add-counting completed through Archive.", check=False
|
|
374
|
+
)
|
|
375
|
+
archived_to = utils.run_shell(
|
|
376
|
+
"completion-point.sh", "- **Archived to**: docs/comet/archive/2026-07-19-add-counting/", check=False
|
|
377
|
+
)
|
|
378
|
+
completed_all_phases = utils.run_shell(
|
|
379
|
+
"completion-point.sh",
|
|
380
|
+
"The change has been completed through all phases and archived.",
|
|
381
|
+
check=False,
|
|
382
|
+
)
|
|
383
|
+
terminal_archived = utils.run_shell(
|
|
384
|
+
"completion-point.sh",
|
|
385
|
+
"The change is already in its terminal archived state.",
|
|
386
|
+
check=False,
|
|
387
|
+
)
|
|
388
|
+
archived_heading = utils.run_shell(
|
|
389
|
+
"completion-point.sh",
|
|
390
|
+
"**Native change `add-sentence-counting` is archived**",
|
|
391
|
+
check=False,
|
|
392
|
+
)
|
|
393
|
+
phase_done = utils.run_shell(
|
|
394
|
+
"completion-point.sh", "Shape is done; Build remains pending.", check=False
|
|
395
|
+
)
|
|
396
|
+
negated = utils.run_shell(
|
|
397
|
+
"completion-point.sh", "The workflow is not complete yet.", check=False
|
|
398
|
+
)
|
|
399
|
+
negated_through_archive = utils.run_shell(
|
|
400
|
+
"completion-point.sh", "The change is not completed through Archive.", check=False
|
|
401
|
+
)
|
|
402
|
+
|
|
403
|
+
assert archived.returncode == 0
|
|
404
|
+
assert archive_complete.returncode == 0
|
|
405
|
+
assert completed_through_archive.returncode == 0
|
|
406
|
+
assert archived_to.returncode == 0
|
|
407
|
+
assert completed_all_phases.returncode == 0
|
|
408
|
+
assert terminal_archived.returncode == 0
|
|
409
|
+
assert archived_heading.returncode == 0
|
|
410
|
+
assert phase_done.returncode == 1
|
|
411
|
+
assert negated.returncode == 1
|
|
412
|
+
assert negated_through_archive.returncode == 1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Unit tests for Eval task definitions and validators."""
|
|
@@ -21,25 +21,25 @@ import pytest
|
|
|
21
21
|
import conftest
|
|
22
22
|
from conftest import get_fixtures
|
|
23
23
|
|
|
24
|
-
from scaffold import
|
|
24
|
+
from scaffold import Treatment
|
|
25
25
|
from scaffold.python import extract_events, parse_output
|
|
26
|
+
from scaffold.python.aligned_comparison import build_case_manifest, case_manifest_payload
|
|
27
|
+
from scaffold.python.native_eval import (
|
|
28
|
+
adapt_checks_for_native,
|
|
29
|
+
adapt_prompt_for_native,
|
|
30
|
+
filter_control_workflow_checks as _filter_control_workflow_checks,
|
|
31
|
+
is_control_business_only_run as _is_control_business_only_run,
|
|
32
|
+
split_comet_completion_checks as _split_comet_completion_checks,
|
|
33
|
+
)
|
|
26
34
|
from scaffold.python.profiles import resolve_profile_name, run_profile_rubric
|
|
27
35
|
from scaffold.python.tasks import list_tasks, load_task
|
|
28
36
|
from scaffold.python.treatments import TreatmentConfig, build_treatment_skills, load_treatments
|
|
29
37
|
from scaffold.python.validation import run_validators
|
|
30
38
|
|
|
31
39
|
# Timeouts
|
|
32
|
-
CLAUDE_TIMEOUT = 1500 #
|
|
33
|
-
PYTEST_TIMEOUT =
|
|
40
|
+
CLAUDE_TIMEOUT = 1500 # Default floor for Claude to complete a multi-turn task
|
|
41
|
+
PYTEST_TIMEOUT = 3000 # 50 minutes total including task-specific runtime and teardown
|
|
34
42
|
MANIFEST_DYNAMIC_ONLY_TASKS = {"workflow-overlay-contract"}
|
|
35
|
-
CONTROL_BUSINESS_ONLY_TREATMENTS = {"CONTROL"}
|
|
36
|
-
COMET_WORKFLOW_ONLY_CHECK_PREFIXES = (
|
|
37
|
-
"openspec_artifacts",
|
|
38
|
-
"comet_state",
|
|
39
|
-
"workflow_phases",
|
|
40
|
-
"tests_written",
|
|
41
|
-
"tests_exist",
|
|
42
|
-
)
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
# =============================================================================
|
|
@@ -98,9 +98,7 @@ def generate_test_params(task_filter: str | None, treatment_filter: str | None,
|
|
|
98
98
|
treatment_list = expand_treatment_patterns(patterns, all_treatments)
|
|
99
99
|
elif dynamic and manifest_tasks:
|
|
100
100
|
treatment_list = [
|
|
101
|
-
treatment
|
|
102
|
-
for treatment in manifest_baseline_treatments
|
|
103
|
-
if treatment in all_treatments
|
|
101
|
+
treatment for treatment in manifest_baseline_treatments if treatment in all_treatments
|
|
104
102
|
]
|
|
105
103
|
if dynamic.name not in treatment_list:
|
|
106
104
|
treatment_list.append(dynamic.name)
|
|
@@ -130,52 +128,6 @@ def generate_test_params(task_filter: str | None, treatment_filter: str | None,
|
|
|
130
128
|
return params
|
|
131
129
|
|
|
132
130
|
|
|
133
|
-
def _is_control_business_only_run(profile_name: str, treatment_name: str) -> bool:
|
|
134
|
-
return profile_name == "comet-workflow" and treatment_name in CONTROL_BUSINESS_ONLY_TREATMENTS
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def _filter_control_workflow_checks(
|
|
138
|
-
profile_name: str,
|
|
139
|
-
treatment_name: str,
|
|
140
|
-
passed: list[str],
|
|
141
|
-
failed: list[str],
|
|
142
|
-
) -> tuple[list[str], list[str]]:
|
|
143
|
-
"""For CONTROL, evaluate comet tasks by business outcome only.
|
|
144
|
-
|
|
145
|
-
CONTROL intentionally has no Skill mounted. OpenSpec/Comet state, phase
|
|
146
|
-
evidence, and workflow-test discipline are reported by the rubric as
|
|
147
|
-
non-applicable instead of counted as task failures.
|
|
148
|
-
"""
|
|
149
|
-
if not _is_control_business_only_run(profile_name, treatment_name):
|
|
150
|
-
return passed, failed
|
|
151
|
-
|
|
152
|
-
def keep(check: str) -> bool:
|
|
153
|
-
return not any(check.startswith(prefix) for prefix in COMET_WORKFLOW_ONLY_CHECK_PREFIXES)
|
|
154
|
-
|
|
155
|
-
return [check for check in passed if keep(check)], [check for check in failed if keep(check)]
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
def _split_comet_completion_checks(
|
|
159
|
-
passed: list[str],
|
|
160
|
-
failed: list[str],
|
|
161
|
-
) -> dict[str, dict[str, list[str]]]:
|
|
162
|
-
"""Split validator results into business and workflow completion buckets."""
|
|
163
|
-
|
|
164
|
-
def is_workflow_check(check: str) -> bool:
|
|
165
|
-
return any(check.startswith(prefix) for prefix in COMET_WORKFLOW_ONLY_CHECK_PREFIXES)
|
|
166
|
-
|
|
167
|
-
return {
|
|
168
|
-
"business_completion": {
|
|
169
|
-
"passed": [check for check in passed if not is_workflow_check(check)],
|
|
170
|
-
"failed": [check for check in failed if not is_workflow_check(check)],
|
|
171
|
-
},
|
|
172
|
-
"workflow_completion": {
|
|
173
|
-
"passed": [check for check in passed if is_workflow_check(check)],
|
|
174
|
-
"failed": [check for check in failed if is_workflow_check(check)],
|
|
175
|
-
},
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
179
131
|
def test_eval_manifest_baselines_extend_dynamic_treatment_list(tmp_path, monkeypatch):
|
|
180
132
|
package = tmp_path / "manifest-skill"
|
|
181
133
|
package.mkdir()
|
|
@@ -215,7 +167,9 @@ interaction:
|
|
|
215
167
|
"load_treatments",
|
|
216
168
|
lambda: {
|
|
217
169
|
"CONTROL": TreatmentConfig(name="CONTROL", description="Control"),
|
|
218
|
-
"COMET_FULL_040_BETA": TreatmentConfig(
|
|
170
|
+
"COMET_FULL_040_BETA": TreatmentConfig(
|
|
171
|
+
name="COMET_FULL_040_BETA", description="Comet full"
|
|
172
|
+
),
|
|
219
173
|
},
|
|
220
174
|
)
|
|
221
175
|
|
|
@@ -242,13 +196,23 @@ def test_control_comet_workflow_filters_workflow_only_checks():
|
|
|
242
196
|
passed, failed = _filter_control_workflow_checks(
|
|
243
197
|
"comet-workflow",
|
|
244
198
|
"CONTROL",
|
|
245
|
-
[
|
|
199
|
+
[
|
|
200
|
+
"sentence_feature",
|
|
201
|
+
"tests_written: ok",
|
|
202
|
+
"workflow_phases: 5/5",
|
|
203
|
+
"tests_exist",
|
|
204
|
+
"native_skill_invocation",
|
|
205
|
+
"native_artifacts",
|
|
206
|
+
"native_trajectory",
|
|
207
|
+
],
|
|
246
208
|
[
|
|
247
209
|
"openspec_artifacts: openspec/changes/ directory not found",
|
|
248
210
|
"comet_state: No .comet.yaml found",
|
|
249
211
|
"workflow_phases: Only 1/5 phases",
|
|
250
212
|
"tests_written: No test files written by the agent",
|
|
251
213
|
"tests_exist: No test files found",
|
|
214
|
+
"native_state: no terminal Native archive exists",
|
|
215
|
+
"native_isolation: Classic or hidden workflow artifacts exist",
|
|
252
216
|
"sentence_feature: --sentences flag not found",
|
|
253
217
|
],
|
|
254
218
|
)
|
|
@@ -259,10 +223,19 @@ def test_control_comet_workflow_filters_workflow_only_checks():
|
|
|
259
223
|
|
|
260
224
|
def test_split_comet_completion_checks_separates_business_and_workflow():
|
|
261
225
|
completion = _split_comet_completion_checks(
|
|
262
|
-
[
|
|
226
|
+
[
|
|
227
|
+
"sentence_feature",
|
|
228
|
+
"tests_exist",
|
|
229
|
+
"workflow_phases: 5/5",
|
|
230
|
+
"native_skill_invocation",
|
|
231
|
+
"native_artifacts",
|
|
232
|
+
"native_trajectory",
|
|
233
|
+
],
|
|
263
234
|
[
|
|
264
235
|
"openspec_artifacts: missing",
|
|
265
236
|
"comet_state: missing",
|
|
237
|
+
"native_state: incomplete",
|
|
238
|
+
"native_isolation: forbidden artifacts",
|
|
266
239
|
"business_rule: failed",
|
|
267
240
|
],
|
|
268
241
|
)
|
|
@@ -272,8 +245,19 @@ def test_split_comet_completion_checks_separates_business_and_workflow():
|
|
|
272
245
|
"failed": ["business_rule: failed"],
|
|
273
246
|
}
|
|
274
247
|
assert completion["workflow_completion"] == {
|
|
275
|
-
"passed": [
|
|
276
|
-
|
|
248
|
+
"passed": [
|
|
249
|
+
"tests_exist",
|
|
250
|
+
"workflow_phases: 5/5",
|
|
251
|
+
"native_skill_invocation",
|
|
252
|
+
"native_artifacts",
|
|
253
|
+
"native_trajectory",
|
|
254
|
+
],
|
|
255
|
+
"failed": [
|
|
256
|
+
"openspec_artifacts: missing",
|
|
257
|
+
"comet_state: missing",
|
|
258
|
+
"native_state: incomplete",
|
|
259
|
+
"native_isolation: forbidden artifacts",
|
|
260
|
+
],
|
|
277
261
|
}
|
|
278
262
|
|
|
279
263
|
|
|
@@ -300,13 +284,19 @@ def pytest_generate_tests(metafunc):
|
|
|
300
284
|
treatment_filter = metafunc.config.getoption("--treatment")
|
|
301
285
|
count = int(metafunc.config.getoption("--count") or 1)
|
|
302
286
|
base_params = generate_test_params(task_filter, treatment_filter, metafunc.config)
|
|
303
|
-
#
|
|
304
|
-
#
|
|
305
|
-
# distinct test invocations we append a rep suffix to the param id.
|
|
287
|
+
# The explicit marker is the controller-owned repetition identity used
|
|
288
|
+
# to persist a complete matrix before any model run begins.
|
|
306
289
|
params = []
|
|
307
290
|
for rep in range(count):
|
|
308
291
|
for task_name, treatment_name in base_params:
|
|
309
|
-
params.append(
|
|
292
|
+
params.append(
|
|
293
|
+
pytest.param(
|
|
294
|
+
task_name,
|
|
295
|
+
treatment_name,
|
|
296
|
+
id=f"{task_name}-{treatment_name}-r{rep + 1}",
|
|
297
|
+
marks=pytest.mark.eval_case(repetition=rep + 1),
|
|
298
|
+
)
|
|
299
|
+
)
|
|
310
300
|
metafunc.parametrize("task_name,treatment_name", params)
|
|
311
301
|
|
|
312
302
|
|
|
@@ -352,7 +342,11 @@ def test_task_treatment(task_name, treatment_name):
|
|
|
352
342
|
for var_name, var_template in task.config.setup.template_vars.items():
|
|
353
343
|
template_vars[var_name] = var_template.format(run_id=run_id)
|
|
354
344
|
|
|
355
|
-
prompt =
|
|
345
|
+
prompt = adapt_prompt_for_native(
|
|
346
|
+
task.render_prompt(**template_vars),
|
|
347
|
+
treatment_name,
|
|
348
|
+
terminal_mode=task.config.evaluation.native_terminal,
|
|
349
|
+
)
|
|
356
350
|
target_profile = None
|
|
357
351
|
if treatment_cfg.skills:
|
|
358
352
|
target_profile = treatment_cfg.skills[0].get("profile")
|
|
@@ -361,20 +355,39 @@ def test_task_treatment(task_name, treatment_name):
|
|
|
361
355
|
override=fixtures.request_config.getoption("--profile"),
|
|
362
356
|
target_profile=target_profile,
|
|
363
357
|
)
|
|
358
|
+
interaction = conftest._resolve_interaction_config(task, profile_name, fixtures.request_config)
|
|
364
359
|
fixtures.setup_test_context(
|
|
365
360
|
skills=treatment.skills,
|
|
366
361
|
claude_md=conftest._build_eval_claude_md(profile_name, treatment.claude_md),
|
|
367
362
|
environment_dir=task.environment_dir,
|
|
368
363
|
)
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
364
|
+
selected_model = conftest._selected_claude_model()
|
|
365
|
+
captured_execution = conftest._capture_execution_identity(
|
|
366
|
+
fixtures.test_dir,
|
|
367
|
+
model=selected_model,
|
|
368
|
+
interaction=interaction,
|
|
369
|
+
)
|
|
370
|
+
case_manifest = case_manifest_payload(
|
|
371
|
+
build_case_manifest(
|
|
372
|
+
task.name,
|
|
373
|
+
task.path.parent,
|
|
374
|
+
execution_identity=captured_execution.report_identity,
|
|
375
|
+
)
|
|
376
|
+
)
|
|
377
|
+
skill_package_path = conftest._snapshot_dynamic_skill_package(
|
|
378
|
+
fixtures.test_dir, skill_hints
|
|
379
|
+
) or skill_hints.get("path")
|
|
380
|
+
|
|
381
|
+
result = fixtures.run_claude(
|
|
382
|
+
prompt,
|
|
383
|
+
timeout=max(CLAUDE_TIMEOUT, task.config.timeout_sec),
|
|
384
|
+
model=selected_model,
|
|
385
|
+
interaction=interaction,
|
|
386
|
+
image_id=captured_execution.runtime_image_id,
|
|
373
387
|
)
|
|
374
|
-
|
|
375
|
-
result = fixtures.run_claude(prompt, timeout=CLAUDE_TIMEOUT, interaction=interaction)
|
|
376
388
|
|
|
377
389
|
events = extract_events(parse_output(result.stdout))
|
|
390
|
+
loop_interaction = conftest._extract_loop_interaction(result.stderr)
|
|
378
391
|
outputs = {
|
|
379
392
|
"run_id": run_id,
|
|
380
393
|
"treatment_name": treatment_name,
|
|
@@ -386,8 +399,10 @@ def test_task_treatment(task_name, treatment_name):
|
|
|
386
399
|
or task.config.evaluation.required_skills,
|
|
387
400
|
"expected_artifacts": skill_hints.get("expected_artifacts")
|
|
388
401
|
or task.config.evaluation.expected_artifacts,
|
|
389
|
-
"require_skill_invocation":
|
|
402
|
+
"require_skill_invocation": skill_hints.get("require_skill_invocation")
|
|
403
|
+
or task.config.evaluation.require_skill_invocation,
|
|
390
404
|
"rubric_criteria": task.config.evaluation.rubric_criteria,
|
|
405
|
+
"native_terminal": task.config.evaluation.native_terminal,
|
|
391
406
|
"skill_package_path": skill_package_path,
|
|
392
407
|
"generated_node_skills": skill_hints.get("generated_node_skills") or [],
|
|
393
408
|
"route_conformance_task": skill_hints.get("route_conformance_task"),
|
|
@@ -402,14 +417,23 @@ def test_task_treatment(task_name, treatment_name):
|
|
|
402
417
|
"interaction": {
|
|
403
418
|
"mode": interaction.mode,
|
|
404
419
|
"max_turns": interaction.max_turns,
|
|
420
|
+
**loop_interaction,
|
|
405
421
|
},
|
|
422
|
+
"case_manifest": case_manifest,
|
|
406
423
|
}
|
|
407
424
|
events["profile"] = outputs["profile"]
|
|
408
425
|
events["skill_sources"] = outputs["skill_sources"]
|
|
409
426
|
events["eval_manifest"] = outputs["eval_manifest"]
|
|
410
427
|
events["interaction"] = outputs["interaction"]
|
|
428
|
+
events["case_manifest"] = case_manifest
|
|
411
429
|
|
|
412
430
|
passed, failed = run_validators(validators, fixtures.test_dir, outputs)
|
|
431
|
+
passed, failed = adapt_checks_for_native(
|
|
432
|
+
fixtures.test_dir,
|
|
433
|
+
outputs,
|
|
434
|
+
passed,
|
|
435
|
+
failed,
|
|
436
|
+
)
|
|
413
437
|
completion_slices = _split_comet_completion_checks(passed, failed)
|
|
414
438
|
passed, failed = _filter_control_workflow_checks(
|
|
415
439
|
profile_name,
|
|
@@ -427,7 +451,9 @@ def test_task_treatment(task_name, treatment_name):
|
|
|
427
451
|
rubric_outputs.update(completion_slices)
|
|
428
452
|
if _is_control_business_only_run(profile_name, treatment_name):
|
|
429
453
|
rubric_outputs["workflow_completion"] = {"passed": [], "failed": []}
|
|
430
|
-
rubric_passed, rubric_failed = run_profile_rubric(
|
|
454
|
+
rubric_passed, rubric_failed = run_profile_rubric(
|
|
455
|
+
profile_name, fixtures.test_dir, rubric_outputs
|
|
456
|
+
)
|
|
431
457
|
passed = passed + rubric_passed
|
|
432
458
|
failed = failed + rubric_failed
|
|
433
459
|
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import importlib.util
|
|
6
|
+
import os
|
|
7
|
+
import subprocess
|
|
6
8
|
import sys
|
|
7
9
|
import types
|
|
8
10
|
from pathlib import Path
|
|
@@ -11,6 +13,41 @@ from pathlib import Path
|
|
|
11
13
|
ROOT = Path(__file__).resolve().parents[3]
|
|
12
14
|
|
|
13
15
|
|
|
16
|
+
def test_native_wave_validator_import_does_not_load_host_docker_helpers(tmp_path: Path):
|
|
17
|
+
from scaffold.python import utils
|
|
18
|
+
|
|
19
|
+
stale_package = tmp_path / "scaffold/python"
|
|
20
|
+
stale_package.mkdir(parents=True)
|
|
21
|
+
(tmp_path / "scaffold/__init__.py").write_text("", encoding="utf-8")
|
|
22
|
+
(stale_package / "__init__.py").write_text(
|
|
23
|
+
"raise RuntimeError('host scaffold package leaked into validator')\n",
|
|
24
|
+
encoding="utf-8",
|
|
25
|
+
)
|
|
26
|
+
utils._copy_scaffold_to_docker(tmp_path)
|
|
27
|
+
env = os.environ.copy()
|
|
28
|
+
env["PYTHONPATH"] = str(tmp_path)
|
|
29
|
+
result = subprocess.run(
|
|
30
|
+
[
|
|
31
|
+
sys.executable,
|
|
32
|
+
"-c",
|
|
33
|
+
(
|
|
34
|
+
"import sys; "
|
|
35
|
+
"import scaffold.python.validation.native_wave; "
|
|
36
|
+
"assert 'scaffold.python.validation.docker' not in sys.modules"
|
|
37
|
+
),
|
|
38
|
+
],
|
|
39
|
+
cwd=tmp_path,
|
|
40
|
+
capture_output=True,
|
|
41
|
+
text=True,
|
|
42
|
+
encoding="utf-8",
|
|
43
|
+
errors="replace",
|
|
44
|
+
check=False,
|
|
45
|
+
env=env,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
assert result.returncode == 0, result.stderr
|
|
49
|
+
|
|
50
|
+
|
|
14
51
|
def _load_validator(path: Path, workspace: Path):
|
|
15
52
|
fake_checks = types.ModuleType("comet_checks")
|
|
16
53
|
fake_checks.WORKSPACE = workspace
|