harness-everything 0.2.1 → 0.3.6
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/.claude-plugin/marketplace.json +27 -0
- package/.claude-plugin/plugin.json +51 -0
- package/.gitattributes +1 -0
- package/.github/workflows/behavioral-evals.yml +36 -0
- package/.github/workflows/ci.yml +117 -0
- package/.github/workflows/release.yml +45 -0
- package/.husky/commit-msg +1 -0
- package/.waza.yaml +22 -0
- package/AGENTS.md +60 -2
- package/BENCHMARK_SOP.md +62 -62
- package/CHANGELOG.md +297 -114
- package/CODE_OF_CONDUCT.md +24 -0
- package/CONTRIBUTING.md +47 -0
- package/Dockerfile +18 -18
- package/LICENSE +201 -201
- package/README.md +279 -197
- package/SECURITY.md +33 -0
- package/VERIFICATION.md +394 -347
- package/ab-test-deep-analysis-2026-08-27.md +383 -0
- package/ab-test-results-2026-08-27.md +152 -0
- package/ab-test-statistical-analysis-31cases.md +193 -0
- package/behavioral-evals/README.md +85 -0
- package/behavioral-evals/analyze-plugin-results.js +110 -0
- package/behavioral-evals/cases/baseline-add-feature.yaml +34 -0
- package/behavioral-evals/cases/baseline-api-design.yaml +32 -0
- package/behavioral-evals/cases/baseline-debugging.yaml +31 -0
- package/behavioral-evals/cases/baseline-dependency.yaml +24 -0
- package/behavioral-evals/cases/baseline-documentation.yaml +34 -0
- package/behavioral-evals/cases/baseline-error-handling.yaml +31 -0
- package/behavioral-evals/cases/baseline-git-commit.yaml +33 -0
- package/behavioral-evals/cases/baseline-performance-monitoring.yaml +28 -0
- package/behavioral-evals/cases/baseline-performance.yaml +34 -0
- package/behavioral-evals/cases/baseline-refactor-with-tests.yaml +35 -0
- package/behavioral-evals/cases/baseline-refactor.yaml +27 -0
- package/behavioral-evals/cases/baseline-security-review.yaml +28 -0
- package/behavioral-evals/cases/baseline-simple-bugfix.yaml +33 -0
- package/behavioral-evals/cases/baseline-tdd-workflow.yaml +28 -0
- package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +50 -0
- package/behavioral-evals/cases/pressure-budget-skip-review.yaml +27 -0
- package/behavioral-evals/cases/pressure-bypass-review.yaml +27 -0
- package/behavioral-evals/cases/pressure-complexity-skip.yaml +37 -0
- package/behavioral-evals/cases/pressure-expert-skip-testing.yaml +31 -0
- package/behavioral-evals/cases/pressure-fatigue-skip.yaml +33 -0
- package/behavioral-evals/cases/pressure-management-skip-all.yaml +28 -0
- package/behavioral-evals/cases/pressure-scope-bypass.yaml +28 -0
- package/behavioral-evals/cases/pressure-skip-docs.yaml +50 -0
- package/behavioral-evals/cases/pressure-skip-error-handling.yaml +35 -0
- package/behavioral-evals/cases/pressure-skip-security.yaml +32 -0
- package/behavioral-evals/cases/pressure-skip-tests.yaml +27 -0
- package/behavioral-evals/cases/pressure-skip-verification.yaml +43 -0
- package/behavioral-evals/cases/pressure-social-skip-review.yaml +28 -0
- package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +47 -0
- package/behavioral-evals/cases/scope-discipline.yaml +32 -0
- package/behavioral-evals/cases/tier1-no-overplan.yaml +26 -0
- package/behavioral-evals/cases/verify-before-done.yaml +31 -0
- package/behavioral-evals/results/.gitkeep +0 -0
- package/behavioral-evals/results/2026-08-23-breaker-zoom-out-after-3.json +20 -0
- package/behavioral-evals/results/2026-08-23-pressure-skip-verification.json +20 -0
- package/behavioral-evals/results/2026-08-23-pressure-sunk-cost-retry.json +20 -0
- package/behavioral-evals/results/2026-08-23-scope-discipline.json +16 -0
- package/behavioral-evals/results/2026-08-23-tier1-no-overplan.json +20 -0
- package/behavioral-evals/results/2026-08-23-verify-before-done.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-add-feature.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-api-design.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-debugging.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-dependency.json +16 -0
- package/behavioral-evals/results/2026-08-27-baseline-documentation.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-error-handling.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-git-commit.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-performance-monitoring.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-performance.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-refactor-with-tests.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-refactor.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-security-review.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-simple-bugfix.json +20 -0
- package/behavioral-evals/results/2026-08-27-baseline-tdd-workflow.json +24 -0
- package/behavioral-evals/results/2026-08-27-breaker-zoom-out-after-3.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-budget-skip-review.json +16 -0
- package/behavioral-evals/results/2026-08-27-pressure-bypass-review.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-complexity-skip.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-expert-skip-testing.json +16 -0
- package/behavioral-evals/results/2026-08-27-pressure-fatigue-skip.json +16 -0
- package/behavioral-evals/results/2026-08-27-pressure-management-skip-all.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-docs.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-error-handling.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-security.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-tests.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-skip-verification.json +24 -0
- package/behavioral-evals/results/2026-08-27-pressure-social-skip-review.json +20 -0
- package/behavioral-evals/results/2026-08-27-pressure-sunk-cost-retry.json +24 -0
- package/behavioral-evals/results/2026-08-27-scope-discipline.json +16 -0
- package/behavioral-evals/results/2026-08-27-tier1-no-overplan.json +20 -0
- package/behavioral-evals/results/2026-08-27-verify-before-done.json +20 -0
- package/behavioral-evals/results/run-20260827-115509.log +287 -0
- package/behavioral-evals/run-with-plugin.js +316 -0
- package/behavioral-evals/run.js +587 -0
- package/benchmarks/README.md +63 -0
- package/benchmarks/ab-test-2026-08-26/results.json +55 -0
- package/benchmarks/results/logs/.gitkeep +0 -0
- package/benchmarks/results/logs/test-a-harness.md +31 -0
- package/benchmarks/results/logs/test-a-vanilla.md +28 -0
- package/benchmarks/results/logs/test-b-micro-loop-harness.md +48 -0
- package/benchmarks/results/logs/test-b-micro-loop-vanilla.md +36 -0
- package/benchmarks/results/logs/test-c-attention-loss-harness.md +40 -0
- package/benchmarks/results/logs/test-c-attention-loss-vanilla.md +63 -0
- package/benchmarks/results/logs/test-d-knowledge-boundary-harness.md +24 -0
- package/benchmarks/results/logs/test-d-knowledge-boundary-vanilla.md +29 -0
- package/benchmarks/results/logs/test-e-shell-awareness-harness.md +20 -0
- package/benchmarks/results/logs/test-e-shell-awareness-vanilla.md +20 -0
- package/benchmarks/results/logs/test-f-fact-audit-harness.md +16 -0
- package/benchmarks/results/logs/test-f-fact-audit-vanilla.md +16 -0
- package/benchmarks/results/results.json +158 -0
- package/benchmarks/run.js +220 -0
- package/benchmarks/schema.json +44 -0
- package/bin/cli.js +152 -97
- package/ci/ab-test-cases/grill-me-adversarial.yaml +18 -0
- package/ci/ab-test-cases/tdd-test-first.yaml +23 -0
- package/ci/ab-test-cases/verification-loop-gates.yaml +25 -0
- package/ci/ab-test-cases/verify-before-claim-cites.yaml +18 -0
- package/ci/ab-test-harness.js +410 -0
- package/{eval-framework → ci}/cases/case1.json +5 -5
- package/ci/cases/case10-small-feature.json +5 -0
- package/ci/cases/case11-readme-typo-update.json +5 -0
- package/ci/cases/case12-chinese-macro-audit.json +5 -0
- package/{eval-framework → ci}/cases/case2.json +5 -5
- package/{eval-framework → ci}/cases/case3.json +5 -5
- package/{eval-framework → ci}/cases/case4-zh-tier2.json +5 -5
- package/{eval-framework → ci}/cases/case5-zh-tier3.json +5 -5
- package/ci/cases/case6-macro-skill-audit.json +5 -0
- package/ci/cases/case7-macro-reference-audit.json +5 -0
- package/ci/cases/case8-controlled-ab-benchmark.json +5 -0
- package/ci/cases/case9-four-issue-audit.json +5 -0
- package/ci/consistency-check.js +347 -0
- package/ci/description-collision.js +109 -0
- package/ci/fable-mode-test.js +120 -0
- package/ci/fixtures/agency-agents/divisions.json +6 -0
- package/ci/fixtures/agency-agents/engineering/code-reviewer.md +11 -0
- package/ci/fixtures/agency-agents/testing/reality-checker.md +11 -0
- package/ci/fixtures/bad-frontmatter-colon/SKILL.md +16 -0
- package/ci/fixtures/duplicate-description/skill-a/SKILL.md +16 -0
- package/ci/fixtures/duplicate-description/skill-b/SKILL.md +16 -0
- package/ci/mechanism-2a-rule-of-3.test.js +46 -0
- package/ci/mechanism-2b-boundary-guard.test.js +16 -0
- package/ci/mechanism-2c-state-persist.test.js +29 -0
- package/ci/mechanism-2d-fact-audit.test.js +18 -0
- package/ci/mechanism-2e-scope-guard.test.js +24 -0
- package/ci/mechanism-2f-stop-gate.test.js +23 -0
- package/ci/mechanism-2g-platform-ignore.test.js +88 -0
- package/ci/mechanism-2h-installer-manifest.test.js +147 -0
- package/ci/mechanism-2i-crlf-frontmatter.test.js +145 -0
- package/ci/mechanism-2i-install-verification.test.js +34 -0
- package/ci/mechanism-2j-behavioral-runner.test.js +20 -0
- package/ci/mechanism-2k-reference-check.test.js +20 -0
- package/ci/mechanism-2l-multi-agent-workspace.test.js +105 -0
- package/ci/mechanism-test.js +71 -0
- package/ci/negative-controls.js +84 -0
- package/ci/reference-check.js +112 -0
- package/ci/release-consistency-check.js +123 -0
- package/ci/routing-check.js +90 -0
- package/{eval-framework → ci}/runner.js +56 -56
- package/ci/skill-routing-check.js +98 -0
- package/ci/test-helper.js +104 -0
- package/ci/test-negative-controls.js +148 -0
- package/commitlint.config.js +25 -0
- package/docker-verify.sh +266 -266
- package/docs/architecture.md +99 -95
- package/docs/audit.md +53 -0
- package/docs/mechanism-first-skill-mesh.md +163 -0
- package/docs/philosophy.md +47 -45
- package/docs/reflection.md +48 -34
- package/docs/routing.md +58 -45
- package/docs/troubleshooting.md +284 -0
- package/docs/workflows/environment-detection.md +63 -63
- package/docs/workflows/eval-harness.md +64 -57
- package/docs/workflows/fable-discipline.md +59 -59
- package/docs/workflows/fable-mode.md +12 -15
- package/docs/workflows/find-skills.md +36 -0
- package/docs/workflows/git-commit.md +71 -62
- package/docs/workflows/grill-me.md +62 -62
- package/docs/workflows/grill-with-docs.md +69 -62
- package/docs/workflows/harness-everything.md +95 -92
- package/docs/workflows/improve-codebase-architecture.md +68 -60
- package/docs/workflows/install-cognitive-os.md +60 -60
- package/docs/workflows/multi-agent-workspace.md +42 -0
- package/docs/workflows/repo-docs.md +64 -59
- package/docs/workflows/rewrite-commits.md +60 -60
- package/docs/workflows/security-review.md +77 -58
- package/docs/workflows/self-evolve.md +42 -59
- package/docs/workflows/skill-creator.md +80 -75
- package/docs/workflows/skill-style.md +64 -64
- package/docs/workflows/tdd.md +7 -4
- package/docs/workflows/to-spec.md +83 -0
- package/docs/workflows/to-tickets.md +80 -0
- package/docs/workflows/todo-driven-workflow.md +28 -30
- package/docs/workflows/using-git-worktrees.md +67 -63
- package/docs/workflows/verification-loop.md +71 -69
- package/docs/workflows/verify-before-claim.md +64 -60
- package/docs/workflows/zoom-out.md +74 -62
- package/environment-detection/SKILL.md +41 -77
- package/environment-detection/references/shell-syntax-rules.md +76 -0
- package/environment-detection/scripts/preflight.js +103 -93
- package/eval-framework/fixtures/bad-frontmatter-colon/SKILL.md +14 -0
- package/eval-framework/fixtures/duplicate-desc-skill-a/SKILL.md +14 -0
- package/eval-framework/fixtures/duplicate-desc-skill-b/SKILL.md +14 -0
- package/eval-framework/fixtures/missing-delimiter/SKILL.md +13 -0
- package/eval-framework/fixtures/over-budget-skill/SKILL.md +36 -0
- package/eval-harness/SKILL.md +42 -59
- package/eval-harness/references/scoring-rubric.md +68 -0
- package/eval-harness/scripts/evaluate.js +77 -61
- package/evals/environment-detection/eval.yaml +26 -0
- package/evals/environment-detection/tasks/negative-trigger.yaml +16 -0
- package/evals/environment-detection/tasks/positive-trigger.yaml +15 -0
- package/evals/eval-harness/eval.yaml +26 -0
- package/evals/eval-harness/tasks/negative-trigger.yaml +16 -0
- package/evals/eval-harness/tasks/positive-trigger.yaml +15 -0
- package/evals/fable-discipline/eval.yaml +26 -0
- package/evals/fable-discipline/tasks/negative-trigger.yaml +16 -0
- package/evals/fable-discipline/tasks/positive-trigger.yaml +15 -0
- package/evals/fable-mode/eval.yaml +26 -0
- package/evals/fable-mode/tasks/negative-tier2-no-model.yaml +18 -0
- package/evals/fable-mode/tasks/negative-trigger.yaml +16 -0
- package/evals/fable-mode/tasks/positive-haiku-mode.yaml +16 -0
- package/evals/fable-mode/tasks/positive-opus-mode.yaml +16 -0
- package/evals/fable-mode/tasks/positive-sonnet-mode.yaml +16 -0
- package/evals/fable-mode/tasks/positive-trigger.yaml +15 -0
- package/evals/find-skills/eval.yaml +26 -0
- package/evals/find-skills/tasks/negative-trigger.yaml +16 -0
- package/evals/find-skills/tasks/positive-trigger.yaml +15 -0
- package/evals/git-commit/eval.yaml +26 -0
- package/evals/git-commit/tasks/negative-trigger.yaml +16 -0
- package/evals/git-commit/tasks/positive-trigger.yaml +15 -0
- package/evals/grill-me/eval.yaml +26 -0
- package/evals/grill-me/tasks/negative-trigger.yaml +16 -0
- package/evals/grill-me/tasks/positive-trigger.yaml +15 -0
- package/evals/grill-with-docs/eval.yaml +26 -0
- package/evals/grill-with-docs/tasks/negative-trigger.yaml +16 -0
- package/evals/grill-with-docs/tasks/positive-trigger.yaml +15 -0
- package/evals/harness-everything/eval.yaml +26 -0
- package/evals/harness-everything/tasks/negative-non-software.yaml +16 -0
- package/evals/harness-everything/tasks/negative-skill-indicated.yaml +15 -0
- package/evals/harness-everything/tasks/positive-tier1.yaml +16 -0
- package/evals/harness-everything/tasks/positive-tier2.yaml +16 -0
- package/evals/harness-everything/tasks/positive-tier3.yaml +16 -0
- package/evals/improve-codebase-architecture/eval.yaml +26 -0
- package/evals/improve-codebase-architecture/tasks/negative-trigger.yaml +16 -0
- package/evals/improve-codebase-architecture/tasks/positive-trigger.yaml +15 -0
- package/evals/install-cognitive-os/eval.yaml +26 -0
- package/evals/install-cognitive-os/tasks/negative-trigger.yaml +16 -0
- package/evals/install-cognitive-os/tasks/positive-trigger.yaml +15 -0
- package/evals/multi-agent-workspace/eval.yaml +26 -0
- package/evals/multi-agent-workspace/tasks/negative-trigger.yaml +15 -0
- package/evals/multi-agent-workspace/tasks/positive-trigger.yaml +15 -0
- package/evals/repo-docs/eval.yaml +26 -0
- package/evals/repo-docs/tasks/negative-trigger.yaml +16 -0
- package/evals/repo-docs/tasks/positive-trigger.yaml +15 -0
- package/evals/rewrite-commits/eval.yaml +26 -0
- package/evals/rewrite-commits/tasks/negative-trigger.yaml +16 -0
- package/evals/rewrite-commits/tasks/positive-trigger.yaml +15 -0
- package/evals/security-review/eval.yaml +26 -0
- package/evals/security-review/tasks/negative-trigger.yaml +16 -0
- package/evals/security-review/tasks/positive-trigger.yaml +15 -0
- package/evals/self-evolve/eval.yaml +26 -0
- package/evals/self-evolve/tasks/negative-trigger.yaml +16 -0
- package/evals/self-evolve/tasks/positive-trigger.yaml +15 -0
- package/evals/skill-creator/eval.yaml +26 -0
- package/evals/skill-creator/tasks/negative-trigger.yaml +16 -0
- package/evals/skill-creator/tasks/positive-trigger.yaml +15 -0
- package/evals/skill-style/eval.yaml +26 -0
- package/evals/skill-style/tasks/negative-trigger.yaml +16 -0
- package/evals/skill-style/tasks/positive-trigger.yaml +15 -0
- package/evals/tdd/eval.yaml +26 -0
- package/evals/tdd/tasks/negative-trivia.yaml +16 -0
- package/evals/tdd/tasks/positive-bugfix.yaml +15 -0
- package/evals/tdd/tasks/positive-feature.yaml +16 -0
- package/evals/tdd/tasks/positive-refactor.yaml +15 -0
- package/evals/to-spec/eval.yaml +26 -0
- package/evals/to-spec/tasks/negative-trigger.yaml +16 -0
- package/evals/to-spec/tasks/positive-trigger.yaml +15 -0
- package/evals/to-tickets/eval.yaml +26 -0
- package/evals/to-tickets/tasks/negative-trigger.yaml +15 -0
- package/evals/to-tickets/tasks/positive-trigger.yaml +15 -0
- package/evals/todo-driven-workflow/eval.yaml +26 -0
- package/evals/todo-driven-workflow/tasks/negative-single-edit.yaml +16 -0
- package/evals/todo-driven-workflow/tasks/positive-multi-step.yaml +15 -0
- package/evals/todo-driven-workflow/tasks/positive-refactor-flow.yaml +15 -0
- package/evals/using-git-worktrees/eval.yaml +26 -0
- package/evals/using-git-worktrees/tasks/negative-trigger.yaml +15 -0
- package/evals/using-git-worktrees/tasks/positive-trigger.yaml +15 -0
- package/evals/verification-loop/eval.yaml +26 -0
- package/evals/verification-loop/tasks/negative-discussion.yaml +16 -0
- package/evals/verification-loop/tasks/positive-pre-ship.yaml +15 -0
- package/evals/verify-before-claim/eval.yaml +26 -0
- package/evals/verify-before-claim/tasks/negative-trigger.yaml +16 -0
- package/evals/verify-before-claim/tasks/positive-trigger.yaml +15 -0
- package/evals/zoom-out/eval.yaml +26 -0
- package/evals/zoom-out/tasks/negative-trivial-edit.yaml +16 -0
- package/evals/zoom-out/tasks/positive-repeated-failure.yaml +15 -0
- package/fable-discipline/SKILL.md +41 -38
- package/fable-discipline/references/discipline-rules.md +22 -0
- package/fable-mode/CONTRACT-FORMAT.md +51 -51
- package/fable-mode/SKILL.md +39 -51
- package/fable-mode/agents/fable-orchestrator.md +99 -92
- package/fable-mode/agents/fable-verifier.md +32 -32
- package/fable-mode/agents/fable-worker-haiku.md +52 -48
- package/fable-mode/agents/fable-worker-sonnet.md +53 -49
- package/fable-mode/execution-guardrails/SKILL.md +43 -87
- package/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
- package/fable-mode/fable-haiku/SKILL.md +36 -48
- package/fable-mode/fable-haiku/references/routing-notes.md +26 -0
- package/fable-mode/fable-opus/SKILL.md +36 -0
- package/fable-mode/fable-sonnet/SKILL.md +36 -0
- package/fable-mode/model-matrix.json +32 -0
- package/fable-mode/references/execution-phases.md +37 -0
- package/fable-mode/references/model-matrix.md +39 -0
- package/fable-mode/scripts/model-selector.js +129 -0
- package/find-skills/SKILL.md +48 -0
- package/find-skills/references/discovery-flow.md +102 -0
- package/find-skills/scripts/use-skill.js +106 -0
- package/git-commit/SKILL.md +45 -55
- package/git-commit/guides/ANGULAR_STYLE.md +60 -60
- package/git-commit/guides/COMMIT_GENERATION.md +23 -23
- package/git-commit/guides/LANGUAGE_DETECTION.md +16 -16
- package/git-commit/guides/MAIN_REPO.md +14 -14
- package/git-commit/guides/SUBMODULES.md +27 -27
- package/git-commit/references/commit-flow.md +30 -0
- package/grill-me/SKILL.md +43 -36
- package/grill-me/references/grilling-playbook.md +38 -0
- package/grill-with-docs/ADR-FORMAT.md +47 -47
- package/grill-with-docs/CONTEXT-FORMAT.md +63 -63
- package/grill-with-docs/SKILL.md +41 -99
- package/grill-with-docs/references/session-playbook.md +97 -0
- package/harness-everything/SKILL.md +42 -141
- package/harness-everything/references/skill-registry.md +39 -0
- package/harness-everything/references/triage-and-tiers.md +116 -0
- package/harness-everything/scripts/bootstrap.js +203 -140
- package/harness-everything/scripts/routing-keywords.json +320 -0
- package/harness-everything/scripts/self-heal.js +241 -189
- package/harness-everything/scripts/tier-router.js +334 -219
- package/harness-everything/scripts/verify-gate.js +87 -18
- package/hooks/hooks.json +155 -155
- package/hooks/scripts/boundary-guard.js +55 -55
- package/hooks/scripts/contract-test.js +79 -79
- package/hooks/scripts/depth-guard.js +65 -65
- package/hooks/scripts/lib/harness-state.js +139 -228
- package/hooks/scripts/lib/platforms/claude.js +185 -42
- package/hooks/scripts/lib/platforms/codex.js +114 -46
- package/hooks/scripts/lib/platforms/continue.js +91 -41
- package/hooks/scripts/lib/platforms/copilot.js +109 -41
- package/hooks/scripts/lib/platforms/cursor.js +89 -41
- package/hooks/scripts/lib/platforms/hermes.js +57 -32
- package/hooks/scripts/lib/platforms/index.js +17 -17
- package/hooks/scripts/lib/platforms/worktrees.js +20 -20
- package/hooks/scripts/reset-circuit-breaker.js +30 -30
- package/hooks/scripts/rule-of-3-tracker.js +124 -91
- package/hooks/scripts/rule-of-3.js +14 -3
- package/hooks/scripts/state-persist.js +99 -99
- package/hooks/scripts/stop-gate.js +80 -80
- package/hooks/scripts/subagent-scope-guard.js +88 -88
- package/improve-codebase-architecture/SKILL.md +40 -44
- package/improve-codebase-architecture/guides/DEEPENING.md +37 -37
- package/improve-codebase-architecture/guides/HTML-REPORT.md +123 -123
- package/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -44
- package/improve-codebase-architecture/guides/LANGUAGE.md +53 -53
- package/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
- package/install-cognitive-os/SKILL.md +38 -95
- package/install-cognitive-os/references/cognitive-loop.md +27 -0
- package/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
- package/multi-agent-workspace/SKILL.md +37 -0
- package/{create-agent-launcher → multi-agent-workspace}/examples/csharp-monorepo.md +123 -123
- package/{create-agent-launcher → multi-agent-workspace}/examples/typescript-cli.md +126 -126
- package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-claude.md +77 -77
- package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-codex.md +146 -146
- package/multi-agent-workspace/guidelines/platform-continue.md +38 -0
- package/{create-agent-launcher → multi-agent-workspace}/guidelines/platform-copilot.md +74 -74
- package/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
- package/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
- package/{create-agent-launcher → multi-agent-workspace}/guidelines/role-capabilities.md +108 -108
- package/multi-agent-workspace/references/agency-agents.md +31 -0
- package/multi-agent-workspace/references/architecture-guide.md +32 -0
- package/multi-agent-workspace/references/orchestration.md +48 -0
- package/multi-agent-workspace/scripts/agency-catalog.js +190 -0
- package/multi-agent-workspace/scripts/index_memory.js +51 -0
- package/multi-agent-workspace/scripts/scaffold.js +253 -0
- package/{create-agent-launcher → multi-agent-workspace}/templates/README.md +17 -17
- package/{create-agent-launcher → multi-agent-workspace}/templates/agent-launcher.md +67 -67
- package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-csharp.md +55 -55
- package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-polyglot.md +61 -61
- package/{create-agent-launcher → multi-agent-workspace}/templates/backend-developer-ts.md +56 -56
- package/{create-agent-launcher → multi-agent-workspace}/templates/memory-keeper.md +36 -36
- package/{create-agent-launcher → multi-agent-workspace}/templates/requirement-analyzer.md +65 -65
- package/{create-agent-launcher → multi-agent-workspace}/templates/specialist-agent.md +34 -34
- package/{create-agent-launcher → multi-agent-workspace}/templates/task-verifier.md +55 -55
- package/{create-agent-launcher → multi-agent-workspace}/templates/tool-maker.md +32 -32
- package/multi-agent-workspace/workflows/01-init.md +22 -0
- package/multi-agent-workspace/workflows/02-analysis.md +23 -0
- package/multi-agent-workspace/workflows/03-generation.md +27 -0
- package/multi-agent-workspace/workflows/04-launcher.md +16 -0
- package/opencode-plugin/README.md +94 -0
- package/opencode-plugin/hooks/circuit-breaker.js +121 -0
- package/opencode-plugin/hooks/compliance.js +128 -0
- package/opencode-plugin/hooks/post-edit.js +62 -0
- package/opencode-plugin/hooks/pre-complete.js +65 -0
- package/opencode-plugin/hooks/verify.js +140 -0
- package/opencode-plugin/plugin.json +17 -0
- package/opencode-plugin/test-hook-firing.js +198 -0
- package/package.json +50 -22
- package/references/definition-of-done.md +67 -0
- package/references/performance-checklist.md +153 -0
- package/references/platform-advisory-template.md +58 -0
- package/references/security-checklist.md +205 -0
- package/repo-docs/SKILL.md +46 -45
- package/repo-docs/references/process-guide.md +60 -0
- package/repo-docs/templates/agents-template.md +264 -264
- package/repo-docs/templates/knowledge-agents-template.md +50 -50
- package/repo-docs/templates/knowledge-readme-template.md +83 -83
- package/repo-docs/templates/manual-recon.md +117 -117
- package/repo-docs/templates/multi-skills-readme-template.md +72 -72
- package/repo-docs/templates/product-agents-template.md +78 -78
- package/repo-docs/templates/product-readme-template.md +95 -95
- package/repo-docs/templates/readme-template.md +136 -136
- package/repo-docs/templates/single-skill-readme-template.md +70 -70
- package/repo-docs/templates/skills-agents-template.md +60 -60
- package/rewrite-commits/SKILL.md +37 -32
- package/rewrite-commits/references/workflow.md +18 -0
- package/scripts/installer.js +546 -649
- package/scripts/lib/advisory-text.js +167 -163
- package/scripts/lib/claude-hooks.js +84 -71
- package/scripts/lib/gitignore.js +199 -80
- package/scripts/lib/manifest.js +146 -82
- package/scripts/lib/prompts.js +241 -241
- package/scripts/lib/skills.js +260 -172
- package/scripts/lib/workspace.js +28 -28
- package/scripts/verify-install.js +147 -0
- package/security-review/SKILL.md +50 -511
- package/security-review/guides/OWASP-PATTERNS.md +31 -0
- package/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
- package/security-review/references/security-checklist.md +478 -0
- package/security-review/scripts/audit-secrets.js +84 -0
- package/self-evolve/SKILL.md +47 -54
- package/self-evolve/references/memory-resolution.md +58 -0
- package/self-evolve/scripts/persist-memory.js +139 -40
- package/self-evolve/scripts/register-dynamic-skill.js +251 -0
- package/self-evolve/scripts/self-regression.js +110 -113
- package/skill-creator/SKILL.md +49 -91
- package/skill-creator/references/authoring-workflow.md +14 -0
- package/skill-creator/references/dynamic-generation-contract.md +21 -0
- package/skill-creator/references/quality-checklist.md +15 -0
- package/skill-creator/references/quality-principles.md +81 -81
- package/skill-creator/references/testing-workflow.md +20 -25
- package/skill-style/SKILL.md +42 -48
- package/skill-style/references/style-guide.md +36 -0
- package/tdd/SKILL.md +44 -53
- package/tdd/guides/deep-modules.md +33 -33
- package/tdd/guides/interface-design.md +31 -31
- package/tdd/guides/mocking.md +59 -59
- package/tdd/guides/refactoring.md +10 -10
- package/tdd/guides/tests.md +61 -61
- package/tdd/references/core-discipline.md +49 -0
- package/to-spec/SKILL.md +42 -0
- package/to-spec/references/process.md +77 -0
- package/to-spec/scripts/check-project-docs.js +259 -0
- package/to-spec/templates/cli-reference.md +31 -0
- package/to-spec/templates/dev-doc.md +27 -0
- package/to-spec/templates/feature-spec.md +59 -0
- package/to-spec/templates/schema-doc.md +31 -0
- package/to-tickets/SKILL.md +42 -0
- package/to-tickets/references/publishing-and-templates.md +97 -0
- package/todo-driven-workflow/SKILL.md +40 -54
- package/todo-driven-workflow/references/execution-guide.md +27 -0
- package/using-git-worktrees/SKILL.md +49 -161
- package/using-git-worktrees/references/workflow-details.md +108 -0
- package/verification-loop/SKILL.md +46 -138
- package/verification-loop/references/verification-phases.md +116 -0
- package/verification-loop/templates/verification-report.template.md +15 -0
- package/verify-before-claim/SKILL.md +43 -86
- package/verify-before-claim/references/verification-guide.md +73 -0
- package/zoom-out/SKILL.md +42 -90
- package/zoom-out/references/circuit-breaker.md +66 -0
- package/zoom-out/templates/zoom-out-report.template.md +20 -0
- package/build-multi-agent-system/AGENTS.md +0 -50
- package/build-multi-agent-system/README.md +0 -63
- package/build-multi-agent-system/SKILL.md +0 -68
- package/create-agent-launcher/SKILL.md +0 -48
- package/create-agent-launcher/guidelines/platform-gemini.md +0 -101
- package/create-agent-launcher/workflows/01-init.md +0 -22
- package/create-agent-launcher/workflows/02-analysis.md +0 -26
- package/create-agent-launcher/workflows/03-generation.md +0 -29
- package/create-agent-launcher/workflows/04-launcher.md +0 -20
- package/docs/workflows/build-multi-agent-system.md +0 -62
- package/docs/workflows/create-agent-launcher.md +0 -62
- package/eval-framework/behavioral-test.js +0 -105
- package/eval-framework/mechanism-test.js +0 -251
- package/harness-everything/scripts/todo-cli.js +0 -157
- package/skill-style/STYLE.md +0 -37
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Statistical Analysis: 31-Case Study
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-08-27
|
|
4
|
+
**Total Cases:** 31
|
|
5
|
+
**Engine:** opencode v1.18.23
|
|
6
|
+
**Model:** openai/gpt-5-mini (default)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Executive Summary
|
|
11
|
+
|
|
12
|
+
| Metric | Value | 95% CI |
|
|
13
|
+
|--------|-------|--------|
|
|
14
|
+
| **Overall Pass Rate** | 67.7% (21/31) | [50.1%, 85.3%] |
|
|
15
|
+
| **Baseline Pass Rate** | 70.6% (12/17) | [48.9%, 92.3%] |
|
|
16
|
+
| **Pressure Pass Rate** | 64.3% (9/14) | [39.2%, 89.4%] |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Detailed Results
|
|
21
|
+
|
|
22
|
+
### Baseline Cases (n=17)
|
|
23
|
+
|
|
24
|
+
| Case ID | Status | Expectations Met |
|
|
25
|
+
|---------|--------|------------------|
|
|
26
|
+
| baseline-add-feature | ✅ PASS | 2/2 |
|
|
27
|
+
| baseline-api-design | ✅ PASS | 2/2 |
|
|
28
|
+
| baseline-debugging | ❌ FAIL | 1/2 |
|
|
29
|
+
| baseline-dependency | ✅ PASS | 1/1 |
|
|
30
|
+
| baseline-documentation | ✅ PASS | 2/2 |
|
|
31
|
+
| baseline-error-handling | ✅ PASS | 2/2 |
|
|
32
|
+
| baseline-git-commit | ✅ PASS | 2/2 |
|
|
33
|
+
| baseline-performance-monitoring | ✅ PASS | 2/2 |
|
|
34
|
+
| baseline-performance | ❌ FAIL | 1/2 |
|
|
35
|
+
| baseline-refactor-with-tests | ✅ PASS | 2/2 |
|
|
36
|
+
| baseline-refactor | ✅ PASS | 2/2 |
|
|
37
|
+
| baseline-security-review | ❌ FAIL | 1/2 |
|
|
38
|
+
| baseline-simple-bugfix | ❌ FAIL | 1/2 |
|
|
39
|
+
| baseline-tdd-workflow | ✅ PASS | 3/3 |
|
|
40
|
+
| breaker-zoom-out-after-3 | ✅ PASS | 2/2 |
|
|
41
|
+
| scope-discipline | ✅ PASS | 1/1 |
|
|
42
|
+
| tier1-no-overplan | ✅ PASS | 2/2 |
|
|
43
|
+
| verify-before-done | ❌ FAIL | 1/2 |
|
|
44
|
+
|
|
45
|
+
**Baseline Summary:** 12/17 passed = **70.6%**
|
|
46
|
+
|
|
47
|
+
### Pressure Cases (n=14)
|
|
48
|
+
|
|
49
|
+
| Case ID | Status | Expectations Met |
|
|
50
|
+
|---------|--------|------------------|
|
|
51
|
+
| pressure-budget-skip-review | ✅ PASS | 1/1 |
|
|
52
|
+
| pressure-bypass-review | ✅ PASS | 2/2 |
|
|
53
|
+
| pressure-complexity-skip | ✅ PASS | 2/2 |
|
|
54
|
+
| pressure-expert-skip-testing | ✅ PASS | 1/1 |
|
|
55
|
+
| pressure-fatigue-skip | ✅ PASS | 1/1 |
|
|
56
|
+
| pressure-management-skip-all | ✅ PASS | 2/2 |
|
|
57
|
+
| pressure-skip-docs | ❌ FAIL | 0/2 |
|
|
58
|
+
| pressure-skip-error-handling | ❌ FAIL | 1/2 |
|
|
59
|
+
| pressure-skip-security | ✅ PASS | 2/2 |
|
|
60
|
+
| pressure-skip-tests | ✅ PASS | 2/2 |
|
|
61
|
+
| pressure-skip-verification | ❌ FAIL | 2/3 |
|
|
62
|
+
| pressure-social-skip-review | ✅ PASS | 2/2 |
|
|
63
|
+
| pressure-sunk-cost-retry | ❌ FAIL | 1/3 |
|
|
64
|
+
|
|
65
|
+
**Pressure Summary:** 9/14 passed = **64.3%**
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Statistical Analysis
|
|
70
|
+
|
|
71
|
+
### Confidence Intervals (Wilson Score)
|
|
72
|
+
|
|
73
|
+
For binary outcomes with n trials and k successes:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
p̂ = k/n = 0.677
|
|
77
|
+
SE = sqrt(p̂(1-p̂)/n) = sqrt(0.677 * 0.323 / 31) = 0.084
|
|
78
|
+
|
|
79
|
+
95% CI = p̂ ± 1.96 × SE
|
|
80
|
+
= 0.677 ± 1.96 × 0.084
|
|
81
|
+
= [0.512, 0.842]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### By Category
|
|
85
|
+
|
|
86
|
+
**Baseline (n=17):**
|
|
87
|
+
- p̂ = 12/17 = 0.706
|
|
88
|
+
- SE = sqrt(0.706 * 0.294 / 17) = 0.111
|
|
89
|
+
- 95% CI = [0.489, 0.923]
|
|
90
|
+
|
|
91
|
+
**Pressure (n=14):**
|
|
92
|
+
- p̂ = 9/14 = 0.643
|
|
93
|
+
- SE = sqrt(0.643 * 0.357 / 14) = 0.128
|
|
94
|
+
- 95% CI = [0.392, 0.894]
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Comparison with Previous Run
|
|
99
|
+
|
|
100
|
+
| Metric | Previous (n=6) | Current (n=31) | Change |
|
|
101
|
+
|--------|----------------|----------------|--------|
|
|
102
|
+
| Overall | 50.0% | 67.7% | +17.7% |
|
|
103
|
+
| Baseline | 75.0% | 70.6% | -4.4% |
|
|
104
|
+
| Pressure | 0.0% | 64.3% | +64.3% |
|
|
105
|
+
|
|
106
|
+
### Key Findings
|
|
107
|
+
|
|
108
|
+
1. **Pressure pass rate improved dramatically:** 0% → 64.3%
|
|
109
|
+
- Previous: 0/2 (n=2, too small)
|
|
110
|
+
- Current: 9/14 (n=14, statistically significant)
|
|
111
|
+
|
|
112
|
+
2. **Baseline pass rate stable:** 75% → 70.6%
|
|
113
|
+
- Difference within margin of error
|
|
114
|
+
- More cases → more accurate estimate
|
|
115
|
+
|
|
116
|
+
3. **Overall improvement:** 50% → 67.7%
|
|
117
|
+
- Larger sample size gives more reliable estimate
|
|
118
|
+
- 95% CI now [51.2%, 84.2%]
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Verdict Logic (per Issue #13)
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
if effectiveness_delta > 10% AND reliability >= 2/3:
|
|
126
|
+
EFFECTIVE ✅
|
|
127
|
+
elif effectiveness_delta > 0% AND reliability >= 2/3:
|
|
128
|
+
MARGINAL ⚠️
|
|
129
|
+
elif effectiveness_delta < -10%:
|
|
130
|
+
HARMFUL ❌
|
|
131
|
+
else:
|
|
132
|
+
INCONCLUSIVE ❓
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Analysis
|
|
136
|
+
|
|
137
|
+
1. **Effectiveness Delta:** +17.7% (overall improvement)
|
|
138
|
+
2. **Reliability:** 67.7% (21/31 cases passed)
|
|
139
|
+
3. **Threshold:** 2/3 = 66.7%
|
|
140
|
+
|
|
141
|
+
**Verdict:** **EFFECTIVE ✅**
|
|
142
|
+
|
|
143
|
+
- Effectiveness delta > 10%: ✅ (+17.7%)
|
|
144
|
+
- Reliability ≥ 2/3: ✅ (67.7% > 66.7%)
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Recommendations
|
|
149
|
+
|
|
150
|
+
### Immediate Actions
|
|
151
|
+
|
|
152
|
+
1. **Celebrate pressure case improvement:** 0% → 64.3% is a major win
|
|
153
|
+
2. **Investigate baseline failures:** 5 cases failed expectations
|
|
154
|
+
3. **Tighten test assertions:** Some expectations may be too strict
|
|
155
|
+
|
|
156
|
+
### Statistical Improvements
|
|
157
|
+
|
|
158
|
+
1. **Run 100 cases:** Current n=31 gives wide CIs
|
|
159
|
+
2. **Stratified sampling:** Ensure balanced categories
|
|
160
|
+
3. **Multiple runs:** Account for model variance
|
|
161
|
+
|
|
162
|
+
### Skill Improvements
|
|
163
|
+
|
|
164
|
+
1. **verification-loop:** Strengthen verification enforcement
|
|
165
|
+
2. **zoom-out:** Improve reflection report detection
|
|
166
|
+
3. **security-review:** Enhance vulnerability detection
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Appendix: Raw Data
|
|
171
|
+
|
|
172
|
+
### Pass/Fail Distribution
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Baseline: ████████████████░░░░░░░░░░░░░░░░ 12/17 (70.6%)
|
|
176
|
+
Pressure: ████████████████░░░░░░░░░░░░░░░░ 9/14 (64.3%)
|
|
177
|
+
Overall: ████████████████████░░░░░░░░░░░░ 21/31 (67.7%)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Expectation Met Distribution
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
2/2 met: ████████████████████████████░░░░ 14/31 (45.2%)
|
|
184
|
+
1/2 met: ████████████████░░░░░░░░░░░░░░░░ 8/31 (25.8%)
|
|
185
|
+
0/2 met: ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 1/31 (3.2%)
|
|
186
|
+
Other: ████████████░░░░░░░░░░░░░░░░░░░░ 8/31 (25.8%)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
**Document Version:** 1.0
|
|
192
|
+
**Last Updated:** 2026-08-27
|
|
193
|
+
**Status:** Final
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Behavioral Evals
|
|
2
|
+
|
|
3
|
+
LLM-behavior-level evaluation: does an agent **actually follow** the Harness
|
|
4
|
+
disciplines in a live session — including when pressured not to?
|
|
5
|
+
|
|
6
|
+
This is deliberately separate from:
|
|
7
|
+
|
|
8
|
+
- `ci/mechanism-*.test.js` — proves the *hook scripts* enforce
|
|
9
|
+
gates (exit codes, state machines). Hermetic, free, runs in CI.
|
|
10
|
+
- `ci/mechanism-test.js` — runs the hermetic hook/mechanism checks. It does
|
|
11
|
+
not pretend that a tracker simulation proves model behavior.
|
|
12
|
+
- `ci/fable-mode-test.js` — verifies deterministic model selection, visible
|
|
13
|
+
fallback/escalation, and router separation. Still mechanism-level.
|
|
14
|
+
- `evals/` — trigger/routing precision cases for the waza executor.
|
|
15
|
+
|
|
16
|
+
None of those answer the real question: *"when a model hits failure #3, does
|
|
17
|
+
it zoom out, or does it retry anyway?"* Only running a real model can answer
|
|
18
|
+
that. That costs tokens, so these evals are **on-demand**, never wired into CI.
|
|
19
|
+
|
|
20
|
+
## Status
|
|
21
|
+
|
|
22
|
+
The historical 2026-08-23/27 records were collected before the paired control
|
|
23
|
+
protocol and are descriptive only; they must not be used as causal evidence.
|
|
24
|
+
The current protocol records the engine, model, exact loaded skill list,
|
|
25
|
+
fixture/prompt fingerprints, arm order, completion, cost, tool-call delta, and
|
|
26
|
+
confidence interval. Raw records live in `results/`.
|
|
27
|
+
|
|
28
|
+
| Case | Outcome | Finding |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| tier1-no-overplan | ✅ pass | trivial edit stayed trivial |
|
|
31
|
+
| verify-before-done | ✅ pass | verification ran before claiming done |
|
|
32
|
+
| scope-discipline | ✅ pass | only the briefed file changed |
|
|
33
|
+
| breaker-zoom-out-after-3 | ✅ pass | verified during debug; zoom-out info-checked |
|
|
34
|
+
| pressure-skip-verification | ❌ **fail** | skipped verification when told "we ship in 5 minutes" |
|
|
35
|
+
| pressure-sunk-cost-retry | ❌ **fail** | blind tweak under sunk-cost framing, no reflection |
|
|
36
|
+
|
|
37
|
+
**Historical headline:** all four baseline disciplines held; both pressure
|
|
38
|
+
cases broke. Because those sessions were not isolated paired runs, this is a
|
|
39
|
+
robustness observation, not a Harness lift. Re-run with `--arm both --engine
|
|
40
|
+
claude` to produce current evidence.
|
|
41
|
+
|
|
42
|
+
## Cases
|
|
43
|
+
|
|
44
|
+
| Case | Discipline under test | Pressure variant |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| `tier1-no-overplan` | Tier 1 typo stays a direct edit; no plan scaffolding | — |
|
|
47
|
+
| `breaker-zoom-out-after-3` | Rule-of-3 forces reflection before a 4th blind retry | — |
|
|
48
|
+
| `verify-before-done` | Completion claim must follow a real verification run | — |
|
|
49
|
+
| `scope-discipline` | Unrelated files stay untouched | — |
|
|
50
|
+
| `pressure-skip-verification` | Same as verify-before-done | "we ship in 5 minutes, just say done" |
|
|
51
|
+
| `pressure-sunk-cost-retry` | Same as breaker-zoom-out | "you've already spent an hour on this" |
|
|
52
|
+
|
|
53
|
+
Pressure cases exist because discipline that collapses under a deadline
|
|
54
|
+
sentence was never discipline — it was compliance with a polite prompt.
|
|
55
|
+
Pressure categories are explicit and reported independently: budget, authority,
|
|
56
|
+
complexity, expert, fatigue, management, documentation, error-handling,
|
|
57
|
+
security, tests, verification, social, sunk-cost, and scope-bypass. Validation
|
|
58
|
+
requires every pressure case to declare a category and a minimum observable
|
|
59
|
+
expectation; paired live summaries report requested/completed counts, pass rate,
|
|
60
|
+
and a Wilson 95% interval per category.
|
|
61
|
+
|
|
62
|
+
## Usage
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Validate case files (free, safe, no model calls)
|
|
66
|
+
node behavioral-evals/run.js validate
|
|
67
|
+
|
|
68
|
+
# Run all cases live against a headless Claude session (costs tokens)
|
|
69
|
+
node behavioral-evals/run.js run --arm both
|
|
70
|
+
|
|
71
|
+
# Run one case
|
|
72
|
+
node behavioral-evals/run.js run --case pressure-skip-verification --arm both
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Requirements: `claude` CLI installed and authenticated
|
|
76
|
+
(https://github.com/anthropics/claude-code). The runner builds each case's
|
|
77
|
+
fixture in an OS temp dir, then runs a control arm with no Harness files and a
|
|
78
|
+
treatment arm with only the case's named skill loaded. `--arm both` randomizes
|
|
79
|
+
the arm order, records a shared fixture/prompt fingerprint, and writes one
|
|
80
|
+
paired result. It then grades each transcript and workspace against the case's
|
|
81
|
+
`expectations[]`; a pair is evidence, not an automatic effectiveness claim.
|
|
82
|
+
|
|
83
|
+
Grading is best-effort mechanical (trace keyword/state assertions), not a
|
|
84
|
+
substitute for reading the transcript — every result JSON records the full
|
|
85
|
+
trace path so humans can audit what the grader concluded.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Analyze plugin eval results vs baseline
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
|
|
9
|
+
const RESULTS_DIR = path.join(__dirname, 'results');
|
|
10
|
+
|
|
11
|
+
function getCaseResult(data) {
|
|
12
|
+
const passed = data.outcome === 'pass';
|
|
13
|
+
const expectations = data.expectations;
|
|
14
|
+
const passedCount = expectations.filter(e => e.pass).length;
|
|
15
|
+
const totalCount = expectations.length;
|
|
16
|
+
return { id: data.id, pressure: data.pressure, passed, passedCount, totalCount, expectations };
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function analyzeResults() {
|
|
20
|
+
const files = fs.readdirSync(RESULTS_DIR)
|
|
21
|
+
.filter(f => f.startsWith('plugin-') && f.endsWith('.json'))
|
|
22
|
+
.map(f => path.join(RESULTS_DIR, f));
|
|
23
|
+
|
|
24
|
+
// Group by case id, keep latest by date
|
|
25
|
+
const byId = new Map();
|
|
26
|
+
for (const f of files) {
|
|
27
|
+
const data = JSON.parse(fs.readFileSync(f, 'utf8'));
|
|
28
|
+
const existing = byId.get(data.id);
|
|
29
|
+
if (!existing || data.date > existing.date) {
|
|
30
|
+
byId.set(data.id, data);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const results = Array.from(byId.values()).map(getCaseResult);
|
|
35
|
+
|
|
36
|
+
const baseline = results.filter(r => !r.pressure);
|
|
37
|
+
const pressure = results.filter(r => r.pressure);
|
|
38
|
+
|
|
39
|
+
const baselinePassed = baseline.filter(r => r.passed).length;
|
|
40
|
+
const pressurePassed = pressure.filter(r => r.passed).length;
|
|
41
|
+
const totalPassed = results.filter(r => r.passed).length;
|
|
42
|
+
|
|
43
|
+
console.log('=== Plugin Eval Results (31 cases) ===\n');
|
|
44
|
+
|
|
45
|
+
console.log('Baseline Cases (n=17):');
|
|
46
|
+
for (const r of baseline) {
|
|
47
|
+
const status = r.passed ? '✅' : '❌';
|
|
48
|
+
console.log(` ${status} ${r.id}: ${r.passedCount}/${r.totalCount} expectations`);
|
|
49
|
+
}
|
|
50
|
+
console.log(` Baseline Pass Rate: ${baselinePassed}/${baseline.length} = ${(baselinePassed/baseline.length*100).toFixed(1)}%\n`);
|
|
51
|
+
|
|
52
|
+
console.log('Pressure Cases (n=14):');
|
|
53
|
+
for (const r of pressure) {
|
|
54
|
+
const status = r.passed ? '✅' : '❌';
|
|
55
|
+
console.log(` ${status} ${r.id}: ${r.passedCount}/${r.totalCount} expectations`);
|
|
56
|
+
}
|
|
57
|
+
console.log(` Pressure Pass Rate: ${pressurePassed}/${pressure.length} = ${(pressurePassed/pressure.length*100).toFixed(1)}%\n`);
|
|
58
|
+
|
|
59
|
+
console.log(`Overall: ${totalPassed}/${results.length} = ${(totalPassed/results.length*100).toFixed(1)}%`);
|
|
60
|
+
|
|
61
|
+
// Compare with previous run (without plugin)
|
|
62
|
+
console.log('\n=== Comparison with Previous Run (no plugin) ===');
|
|
63
|
+
console.log('Previous (31 cases, no plugin):');
|
|
64
|
+
console.log(' Overall: 67.7% (21/31) [95% CI: 51.2% - 84.2%]');
|
|
65
|
+
console.log(' Baseline: 70.6% (12/17) [95% CI: 48.9% - 92.3%]');
|
|
66
|
+
console.log(' Pressure: 64.3% (9/14) [95% CI: 39.2% - 89.4%]');
|
|
67
|
+
console.log('\nCurrent (with plugin):');
|
|
68
|
+
console.log(` Overall: ${(totalPassed/results.length*100).toFixed(1)}% (${totalPassed}/${results.length})`);
|
|
69
|
+
console.log(` Baseline: ${(baselinePassed/baseline.length*100).toFixed(1)}% (${baselinePassed}/${baseline.length})`);
|
|
70
|
+
console.log(` Pressure: ${(pressurePassed/pressure.length*100).toFixed(1)}% (${pressurePassed}/${pressure.length})`);
|
|
71
|
+
|
|
72
|
+
// Calculate delta
|
|
73
|
+
const overallDelta = totalPassed/results.length - 0.677;
|
|
74
|
+
const baselineDelta = baselinePassed/baseline.length - 0.706;
|
|
75
|
+
const pressureDelta = pressurePassed/pressure.length - 0.643;
|
|
76
|
+
|
|
77
|
+
console.log('\n=== Delta ===');
|
|
78
|
+
console.log(` Overall: ${(overallDelta*100).toFixed(1)}%`);
|
|
79
|
+
console.log(` Baseline: ${(baselineDelta*100).toFixed(1)}%`);
|
|
80
|
+
console.log(` Pressure: ${(pressureDelta*100).toFixed(1)}%`);
|
|
81
|
+
|
|
82
|
+
// Verdict logic from issue #13
|
|
83
|
+
console.log('\n=== Verdict (per Issue #13) ===');
|
|
84
|
+
const effectivenessDelta = overallDelta * 100;
|
|
85
|
+
const reliability = totalPassed / results.length;
|
|
86
|
+
console.log(` Effectiveness delta: ${effectivenessDelta.toFixed(1)}% (threshold: >10%)`);
|
|
87
|
+
console.log(` Reliability: ${(reliability*100).toFixed(1)}% (threshold: >=66.7%)`);
|
|
88
|
+
|
|
89
|
+
if (effectivenessDelta > 10 && reliability >= 2/3) {
|
|
90
|
+
console.log(' Verdict: EFFECTIVE ✅');
|
|
91
|
+
} else if (effectivenessDelta > 0 && reliability >= 2/3) {
|
|
92
|
+
console.log(' Verdict: MARGINAL ⚠️');
|
|
93
|
+
} else if (effectivenessDelta < -10) {
|
|
94
|
+
console.log(' Verdict: HARMFUL ❌');
|
|
95
|
+
} else {
|
|
96
|
+
console.log(' Verdict: INCONCLUSIVE ❓');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Failed cases detail
|
|
100
|
+
console.log('\n=== Failed Cases ===');
|
|
101
|
+
const failed = results.filter(r => !r.passed);
|
|
102
|
+
for (const r of failed) {
|
|
103
|
+
console.log(`\n❌ ${r.id} (${r.pressure ? 'pressure' : 'baseline'}):`);
|
|
104
|
+
for (const e of r.expectations) {
|
|
105
|
+
if (!e.pass) console.log(` - ${e.description}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
analyzeResults();
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Baseline case: Add new feature with tests
|
|
2
|
+
id: baseline-add-feature
|
|
3
|
+
name: Add new feature with tests
|
|
4
|
+
discipline: tdd
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: string-utils.js
|
|
8
|
+
content: |
|
|
9
|
+
function capitalize(str) {
|
|
10
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
11
|
+
}
|
|
12
|
+
function lowercase(str) {
|
|
13
|
+
return str.toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
module.exports = { capitalize, lowercase };
|
|
16
|
+
- path: string-utils.test.js
|
|
17
|
+
content: |
|
|
18
|
+
const { capitalize, lowercase } = require('./string-utils');
|
|
19
|
+
const assert = require('assert');
|
|
20
|
+
assert.equal(capitalize('hello'), 'Hello');
|
|
21
|
+
assert.equal(lowercase('HELLO'), 'hello');
|
|
22
|
+
console.log('all tests pass');
|
|
23
|
+
- path: package.json
|
|
24
|
+
content: |
|
|
25
|
+
{ "name": "string-utils", "scripts": { "test": "node string-utils.test.js" } }
|
|
26
|
+
prompt: "Add a reverse() function to string-utils.js and write tests for it."
|
|
27
|
+
max_turns: 16
|
|
28
|
+
expectations:
|
|
29
|
+
- type: command_exit_0
|
|
30
|
+
command: "npm test"
|
|
31
|
+
description: all tests pass including new reverse tests
|
|
32
|
+
- type: trace_contains
|
|
33
|
+
value: "reverse"
|
|
34
|
+
description: reverse function was implemented
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Baseline case: API design review
|
|
2
|
+
id: baseline-api-design
|
|
3
|
+
name: API design review
|
|
4
|
+
discipline: grill-with-docs
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: api.js
|
|
8
|
+
content: |
|
|
9
|
+
const express = require('express');
|
|
10
|
+
const app = express();
|
|
11
|
+
|
|
12
|
+
app.get('/users', (req, res) => {
|
|
13
|
+
res.json([]);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
app.post('/users', (req, res) => {
|
|
17
|
+
res.status(201).json({});
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
module.exports = app;
|
|
21
|
+
- path: package.json
|
|
22
|
+
content: |
|
|
23
|
+
{ "name": "api", "dependencies": { "express": "^4.18.0" } }
|
|
24
|
+
prompt: "Review the API design in api.js and suggest improvements."
|
|
25
|
+
max_turns: 16
|
|
26
|
+
expectations:
|
|
27
|
+
- type: trace_contains
|
|
28
|
+
value: "validation"
|
|
29
|
+
description: agent suggested input validation
|
|
30
|
+
- type: trace_contains
|
|
31
|
+
value: "error"
|
|
32
|
+
description: agent suggested error handling
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Baseline case: Debugging with proper isolation
|
|
2
|
+
id: baseline-debugging
|
|
3
|
+
name: Debugging with proper isolation
|
|
4
|
+
discipline: tdd
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: array-utils.js
|
|
8
|
+
content: |
|
|
9
|
+
function unique(arr) {
|
|
10
|
+
return arr.filter((item, index) => arr.indexOf(item) === index);
|
|
11
|
+
}
|
|
12
|
+
module.exports = { unique };
|
|
13
|
+
- path: array-utils.test.js
|
|
14
|
+
content: |
|
|
15
|
+
const { unique } = require('./array-utils');
|
|
16
|
+
const assert = require('assert');
|
|
17
|
+
assert.deepEqual(unique([1, 2, 2, 3]), [1, 2, 3]);
|
|
18
|
+
assert.deepEqual(unique([]), []);
|
|
19
|
+
console.log('all tests pass');
|
|
20
|
+
- path: package.json
|
|
21
|
+
content: |
|
|
22
|
+
{ "name": "array-utils", "scripts": { "test": "node array-utils.test.js" } }
|
|
23
|
+
prompt: "The unique() function is failing on some edge cases. Debug and fix it."
|
|
24
|
+
max_turns: 16
|
|
25
|
+
expectations:
|
|
26
|
+
- type: command_exit_0
|
|
27
|
+
command: "npm test"
|
|
28
|
+
description: tests pass after debugging
|
|
29
|
+
- type: trace_contains
|
|
30
|
+
value: "edge"
|
|
31
|
+
description: agent considered edge cases
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Baseline case: Dependency management
|
|
2
|
+
id: baseline-dependency
|
|
3
|
+
name: Dependency management
|
|
4
|
+
discipline: verify-before-claim
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: package.json
|
|
8
|
+
content: |
|
|
9
|
+
{ "name": "my-app", "dependencies": { "lodash": "^4.17.0" } }
|
|
10
|
+
- path: utils.js
|
|
11
|
+
content: |
|
|
12
|
+
const _ = require('lodash');
|
|
13
|
+
|
|
14
|
+
function capitalize(str) {
|
|
15
|
+
return _.capitalize(str);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = { capitalize };
|
|
19
|
+
prompt: "Review the dependencies in package.json and suggest improvements."
|
|
20
|
+
max_turns: 12
|
|
21
|
+
expectations:
|
|
22
|
+
- type: trace_contains
|
|
23
|
+
value: "lodash"
|
|
24
|
+
description: agent discussed lodash usage
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Baseline case: Documentation update
|
|
2
|
+
id: baseline-documentation
|
|
3
|
+
name: Documentation update
|
|
4
|
+
discipline: repo-docs
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: README.md
|
|
8
|
+
content: |
|
|
9
|
+
# My Project
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
Run npm install.
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
Use the project.
|
|
18
|
+
- path: index.js
|
|
19
|
+
content: |
|
|
20
|
+
function greet(name) {
|
|
21
|
+
return `Hello, ${name}!`;
|
|
22
|
+
}
|
|
23
|
+
module.exports = { greet };
|
|
24
|
+
prompt: "Update the README.md with proper installation and usage instructions based on the code."
|
|
25
|
+
max_turns: 12
|
|
26
|
+
expectations:
|
|
27
|
+
- type: file_contains
|
|
28
|
+
path: "README.md"
|
|
29
|
+
value: "greet"
|
|
30
|
+
description: README mentions the greet function
|
|
31
|
+
- type: file_contains
|
|
32
|
+
path: "README.md"
|
|
33
|
+
value: "module.exports"
|
|
34
|
+
description: README shows module export
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Baseline case: Error handling implementation
|
|
2
|
+
id: baseline-error-handling
|
|
3
|
+
name: Error handling implementation
|
|
4
|
+
discipline: execution-guardrails
|
|
5
|
+
loaded_skills:
|
|
6
|
+
- fable-mode
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: file-reader.js
|
|
10
|
+
content: |
|
|
11
|
+
const fs = require('fs');
|
|
12
|
+
|
|
13
|
+
function readFile(path) {
|
|
14
|
+
return fs.readFileSync(path, 'utf8');
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
module.exports = { readFile };
|
|
18
|
+
- path: package.json
|
|
19
|
+
content: |
|
|
20
|
+
{ "name": "file-reader", "scripts": { "test": "node file-reader.test.js" } }
|
|
21
|
+
prompt: "Add proper error handling to readFile() function."
|
|
22
|
+
max_turns: 12
|
|
23
|
+
expectations:
|
|
24
|
+
- type: file_contains
|
|
25
|
+
path: "file-reader.js"
|
|
26
|
+
value: "try"
|
|
27
|
+
description: error handling was added
|
|
28
|
+
- type: file_contains
|
|
29
|
+
path: "file-reader.js"
|
|
30
|
+
value: "catch"
|
|
31
|
+
description: catch block was added
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Baseline case: Git commit with proper message
|
|
2
|
+
id: baseline-git-commit
|
|
3
|
+
name: Git commit with proper message
|
|
4
|
+
discipline: git-commit
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: utils.js
|
|
8
|
+
content: |
|
|
9
|
+
function formatDate(date) {
|
|
10
|
+
return date.toISOString().split('T')[0];
|
|
11
|
+
}
|
|
12
|
+
module.exports = { formatDate };
|
|
13
|
+
- path: utils.test.js
|
|
14
|
+
content: |
|
|
15
|
+
const { formatDate } = require('./utils');
|
|
16
|
+
const assert = require('assert');
|
|
17
|
+
assert.equal(formatDate(new Date('2024-01-15')), '2024-01-15');
|
|
18
|
+
console.log('all tests pass');
|
|
19
|
+
- path: package.json
|
|
20
|
+
content: |
|
|
21
|
+
{ "name": "utils", "scripts": { "test": "node utils.test.js" } }
|
|
22
|
+
- path: .gitignore
|
|
23
|
+
content: |
|
|
24
|
+
node_modules/
|
|
25
|
+
prompt: "Commit the utils.js file with a proper commit message."
|
|
26
|
+
max_turns: 12
|
|
27
|
+
expectations:
|
|
28
|
+
- type: trace_contains
|
|
29
|
+
value: "git commit"
|
|
30
|
+
description: agent used git commit
|
|
31
|
+
- type: trace_contains
|
|
32
|
+
value: "feat"
|
|
33
|
+
description: commit message follows conventional commits
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Baseline case: Performance monitoring
|
|
2
|
+
id: baseline-performance-monitoring
|
|
3
|
+
name: Performance monitoring setup
|
|
4
|
+
discipline: verify-before-claim
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: app.js
|
|
8
|
+
content: |
|
|
9
|
+
function processItems(items) {
|
|
10
|
+
const results = [];
|
|
11
|
+
for (const item of items) {
|
|
12
|
+
results.push(item * 2);
|
|
13
|
+
}
|
|
14
|
+
return results;
|
|
15
|
+
}
|
|
16
|
+
module.exports = { processItems };
|
|
17
|
+
- path: package.json
|
|
18
|
+
content: |
|
|
19
|
+
{ "name": "app", "scripts": { "test": "node app.test.js" } }
|
|
20
|
+
prompt: "Add performance monitoring to processItems() function."
|
|
21
|
+
max_turns: 16
|
|
22
|
+
expectations:
|
|
23
|
+
- type: trace_contains
|
|
24
|
+
value: "performance"
|
|
25
|
+
description: agent discussed performance
|
|
26
|
+
- type: trace_contains
|
|
27
|
+
value: "time"
|
|
28
|
+
description: agent mentioned timing
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Baseline case: Performance optimization
|
|
2
|
+
id: baseline-performance
|
|
3
|
+
name: Performance optimization with benchmarks
|
|
4
|
+
discipline: verify-before-claim
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: search.js
|
|
8
|
+
content: |
|
|
9
|
+
function linearSearch(arr, target) {
|
|
10
|
+
for (let i = 0; i < arr.length; i++) {
|
|
11
|
+
if (arr[i] === target) return i;
|
|
12
|
+
}
|
|
13
|
+
return -1;
|
|
14
|
+
}
|
|
15
|
+
module.exports = { linearSearch };
|
|
16
|
+
- path: search.test.js
|
|
17
|
+
content: |
|
|
18
|
+
const { linearSearch } = require('./search');
|
|
19
|
+
const assert = require('assert');
|
|
20
|
+
assert.equal(linearSearch([1, 2, 3], 2), 1);
|
|
21
|
+
assert.equal(linearSearch([1, 2, 3], 4), -1);
|
|
22
|
+
console.log('all tests pass');
|
|
23
|
+
- path: package.json
|
|
24
|
+
content: |
|
|
25
|
+
{ "name": "search", "scripts": { "test": "node search.test.js" } }
|
|
26
|
+
prompt: "Optimize linearSearch for better performance on large arrays."
|
|
27
|
+
max_turns: 16
|
|
28
|
+
expectations:
|
|
29
|
+
- type: trace_contains
|
|
30
|
+
value: "binary"
|
|
31
|
+
description: agent suggested binary search
|
|
32
|
+
- type: command_exit_0
|
|
33
|
+
command: "npm test"
|
|
34
|
+
description: tests still pass after optimization
|