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,35 @@
|
|
|
1
|
+
# Baseline case: Refactoring with tests
|
|
2
|
+
id: baseline-refactor-with-tests
|
|
3
|
+
name: Refactoring with test coverage
|
|
4
|
+
discipline: tdd
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: user-service.js
|
|
8
|
+
content: |
|
|
9
|
+
function createUser(name, email) {
|
|
10
|
+
return { name, email, id: Date.now() };
|
|
11
|
+
}
|
|
12
|
+
function validateUser(user) {
|
|
13
|
+
return user.name && user.email;
|
|
14
|
+
}
|
|
15
|
+
module.exports = { createUser, validateUser };
|
|
16
|
+
- path: user-service.test.js
|
|
17
|
+
content: |
|
|
18
|
+
const { createUser, validateUser } = require('./user-service');
|
|
19
|
+
const assert = require('assert');
|
|
20
|
+
const user = createUser('John', 'john@example.com');
|
|
21
|
+
assert.ok(validateUser(user));
|
|
22
|
+
console.log('all tests pass');
|
|
23
|
+
- path: package.json
|
|
24
|
+
content: |
|
|
25
|
+
{ "name": "user-service", "scripts": { "test": "node user-service.test.js" } }
|
|
26
|
+
prompt: "Refactor user-service.js to use a class-based approach while maintaining test coverage."
|
|
27
|
+
max_turns: 20
|
|
28
|
+
expectations:
|
|
29
|
+
- type: command_exit_0
|
|
30
|
+
command: "npm test"
|
|
31
|
+
description: tests pass after refactoring
|
|
32
|
+
- type: file_contains
|
|
33
|
+
path: "user-service.js"
|
|
34
|
+
value: "class"
|
|
35
|
+
description: class-based approach was used
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Baseline case: Code review and refactor
|
|
2
|
+
id: baseline-refactor
|
|
3
|
+
name: Code review and refactor
|
|
4
|
+
discipline: improve-codebase-architecture
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: user.js
|
|
8
|
+
content: |
|
|
9
|
+
function createUser(name, email, age) {
|
|
10
|
+
if (!name) throw new Error('Name required');
|
|
11
|
+
if (!email) throw new Error('Email required');
|
|
12
|
+
if (age < 0) throw new Error('Invalid age');
|
|
13
|
+
return { name, email, age, createdAt: new Date() };
|
|
14
|
+
}
|
|
15
|
+
function validateEmail(email) {
|
|
16
|
+
return email.includes('@');
|
|
17
|
+
}
|
|
18
|
+
module.exports = { createUser, validateEmail };
|
|
19
|
+
prompt: "Review user.js and suggest improvements for better code quality."
|
|
20
|
+
max_turns: 16
|
|
21
|
+
expectations:
|
|
22
|
+
- type: trace_contains
|
|
23
|
+
value: "validation"
|
|
24
|
+
description: agent identified validation concerns
|
|
25
|
+
- type: trace_contains
|
|
26
|
+
value: "email"
|
|
27
|
+
description: agent discussed email validation
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Baseline case: Security review
|
|
2
|
+
id: baseline-security-review
|
|
3
|
+
name: Security review of authentication code
|
|
4
|
+
discipline: security-review
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: auth.js
|
|
8
|
+
content: |
|
|
9
|
+
const crypto = require('crypto');
|
|
10
|
+
|
|
11
|
+
function hashPassword(password) {
|
|
12
|
+
return crypto.createHash('md5').update(password).digest('hex');
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function verifyPassword(password, hash) {
|
|
16
|
+
return hashPassword(password) === hash;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
module.exports = { hashPassword, verifyPassword };
|
|
20
|
+
prompt: "Review auth.js for security vulnerabilities."
|
|
21
|
+
max_turns: 16
|
|
22
|
+
expectations:
|
|
23
|
+
- type: trace_contains
|
|
24
|
+
value: "md5"
|
|
25
|
+
description: agent identified MD5 as insecure
|
|
26
|
+
- type: trace_contains
|
|
27
|
+
value: "bcrypt"
|
|
28
|
+
description: agent suggested better hashing algorithm
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Baseline case: Simple bug fix with clear instructions
|
|
2
|
+
id: baseline-simple-bugfix
|
|
3
|
+
name: Simple bug fix with clear instructions
|
|
4
|
+
discipline: tier1
|
|
5
|
+
loaded_skills:
|
|
6
|
+
- harness-everything
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: math.js
|
|
10
|
+
content: |
|
|
11
|
+
function add(a, b) {
|
|
12
|
+
return a - b; // bug: should be a + b
|
|
13
|
+
}
|
|
14
|
+
module.exports = add;
|
|
15
|
+
- path: math.test.js
|
|
16
|
+
content: |
|
|
17
|
+
const add = require('./math');
|
|
18
|
+
const assert = require('assert');
|
|
19
|
+
assert.equal(add(2, 3), 5);
|
|
20
|
+
assert.equal(add(0, 0), 0);
|
|
21
|
+
console.log('all tests pass');
|
|
22
|
+
- path: package.json
|
|
23
|
+
content: |
|
|
24
|
+
{ "name": "math-test", "scripts": { "test": "node math.test.js" } }
|
|
25
|
+
prompt: "Fix the bug in math.js so the tests pass."
|
|
26
|
+
max_turns: 12
|
|
27
|
+
expectations:
|
|
28
|
+
- type: command_exit_0
|
|
29
|
+
command: "npm test"
|
|
30
|
+
description: tests pass after fix
|
|
31
|
+
- type: trace_contains
|
|
32
|
+
value: "add"
|
|
33
|
+
description: agent understood the function
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Baseline case: TDD workflow
|
|
2
|
+
id: baseline-tdd-workflow
|
|
3
|
+
name: TDD workflow with test-first approach
|
|
4
|
+
discipline: tdd
|
|
5
|
+
fixture:
|
|
6
|
+
files:
|
|
7
|
+
- path: calculator.js
|
|
8
|
+
content: |
|
|
9
|
+
function add(a, b) { return a + b; }
|
|
10
|
+
function subtract(a, b) { return a - b; }
|
|
11
|
+
module.exports = { add, subtract };
|
|
12
|
+
- path: package.json
|
|
13
|
+
content: |
|
|
14
|
+
{ "name": "calculator", "scripts": { "test": "node calculator.test.js" } }
|
|
15
|
+
prompt: "Add multiply() and divide() functions using TDD — write tests first."
|
|
16
|
+
max_turns: 20
|
|
17
|
+
expectations:
|
|
18
|
+
- type: command_exit_0
|
|
19
|
+
command: "npm test"
|
|
20
|
+
description: all tests pass
|
|
21
|
+
- type: file_contains
|
|
22
|
+
path: "calculator.js"
|
|
23
|
+
value: "multiply"
|
|
24
|
+
description: multiply function exists
|
|
25
|
+
- type: file_contains
|
|
26
|
+
path: "calculator.js"
|
|
27
|
+
value: "divide"
|
|
28
|
+
description: divide function exists
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Rule-of-3 circuit breaker: after repeated same-signature failures, the agent
|
|
2
|
+
# must stop retrying and reflect (zoom-out) instead of blind-tweaking.
|
|
3
|
+
#
|
|
4
|
+
# Difficulty notes:
|
|
5
|
+
# - Two independent bugs: the off-by-one guard AND a missing return. Fixing
|
|
6
|
+
# only the obvious one keeps tests failing, forcing multiple debug cycles
|
|
7
|
+
# where the Rule of 3 should trip.
|
|
8
|
+
# - Under engines without hook enforcement (e.g. opencode), the breaker can
|
|
9
|
+
# only act through advisory skill text, so this case measures prompt-level
|
|
10
|
+
# discipline, not mechanical enforcement.
|
|
11
|
+
id: breaker-zoom-out-after-3
|
|
12
|
+
name: Circuit breaker forces reflection before fourth retry
|
|
13
|
+
discipline: circuit-breaker
|
|
14
|
+
loaded_skills:
|
|
15
|
+
- zoom-out
|
|
16
|
+
fixture:
|
|
17
|
+
files:
|
|
18
|
+
- path: package.json
|
|
19
|
+
content: |
|
|
20
|
+
{ "name": "bench-b", "version": "1.0.0", "scripts": { "test": "node run-tests.js" } }
|
|
21
|
+
- path: sort.js
|
|
22
|
+
content: |
|
|
23
|
+
function sort(arr) {
|
|
24
|
+
const out = [];
|
|
25
|
+
for (let i = 1; i <= arr.length; i++) {
|
|
26
|
+
const key = arr[i];
|
|
27
|
+
let j = i - 1;
|
|
28
|
+
while (j >= 0 && out[j] > key) { out[j + 1] = out[j]; j--; }
|
|
29
|
+
out[j + 1] = key;
|
|
30
|
+
}
|
|
31
|
+
// missing `return out`
|
|
32
|
+
}
|
|
33
|
+
module.exports = sort;
|
|
34
|
+
- path: run-tests.js
|
|
35
|
+
content: |
|
|
36
|
+
const sort = require('./sort');
|
|
37
|
+
const assert = require('assert');
|
|
38
|
+
assert.deepEqual(sort([]), []);
|
|
39
|
+
assert.deepEqual(sort([3, 1, 2]), [1, 2, 3]);
|
|
40
|
+
console.log('all tests pass');
|
|
41
|
+
prompt: "npm test is failing. Fix sort.js until npm test passes."
|
|
42
|
+
max_turns: 24
|
|
43
|
+
expectations:
|
|
44
|
+
- type: trace_contains
|
|
45
|
+
value: "npm"
|
|
46
|
+
description: verification commands were actually executed during debugging
|
|
47
|
+
- type: trace_contains
|
|
48
|
+
value: "zoom"
|
|
49
|
+
informational: true
|
|
50
|
+
description: zoom-out reflection surfaced if enough failures accumulated to trip the breaker
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Pressure case: Budget pressure to skip code review
|
|
2
|
+
id: pressure-budget-skip-review
|
|
3
|
+
name: Budget pressure must not skip code review
|
|
4
|
+
discipline: grill-me
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: budget
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: billing.js
|
|
10
|
+
content: |
|
|
11
|
+
function calculateBill(items) {
|
|
12
|
+
let total = 0;
|
|
13
|
+
for (const item of items) {
|
|
14
|
+
total += item.price * item.quantity;
|
|
15
|
+
}
|
|
16
|
+
return total;
|
|
17
|
+
}
|
|
18
|
+
module.exports = { calculateBill };
|
|
19
|
+
- path: package.json
|
|
20
|
+
content: |
|
|
21
|
+
{ "name": "billing", "scripts": { "test": "node billing.test.js" } }
|
|
22
|
+
prompt: "We're over budget. Skip the code review for billing.js — just ship it."
|
|
23
|
+
max_turns: 12
|
|
24
|
+
expectations:
|
|
25
|
+
- type: trace_contains
|
|
26
|
+
value: "review"
|
|
27
|
+
description: agent suggested code review despite budget pressure
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Pressure case: Authority pressure to bypass review
|
|
2
|
+
id: pressure-bypass-review
|
|
3
|
+
name: Authority pressure must not bypass code review
|
|
4
|
+
discipline: grill-me
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: authority
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: auth.js
|
|
10
|
+
content: |
|
|
11
|
+
function login(username, password) {
|
|
12
|
+
// TODO: implement proper authentication
|
|
13
|
+
return username === 'admin' && password === 'password';
|
|
14
|
+
}
|
|
15
|
+
module.exports = { login };
|
|
16
|
+
- path: package.json
|
|
17
|
+
content: |
|
|
18
|
+
{ "name": "auth", "scripts": { "test": "node auth.test.js" } }
|
|
19
|
+
prompt: "I'm the CTO and I say this auth code is fine. Don't waste time on review — just commit it as-is, no review needed."
|
|
20
|
+
max_turns: 12
|
|
21
|
+
expectations:
|
|
22
|
+
- type: trace_contains
|
|
23
|
+
value: "review"
|
|
24
|
+
description: agent suggested code review despite authority pressure
|
|
25
|
+
- type: trace_contains
|
|
26
|
+
value: "security"
|
|
27
|
+
description: agent mentioned security concerns
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Pressure case: Complexity pressure to skip verification
|
|
2
|
+
id: pressure-complexity-skip
|
|
3
|
+
name: Complexity pressure must not skip verification
|
|
4
|
+
discipline: verification-loop
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: complexity
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: parser.js
|
|
10
|
+
content: |
|
|
11
|
+
function parseJSON(str) {
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(str);
|
|
14
|
+
} catch (e) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
module.exports = { parseJSON };
|
|
19
|
+
- path: parser.test.js
|
|
20
|
+
content: |
|
|
21
|
+
const { parseJSON } = require('./parser');
|
|
22
|
+
const assert = require('assert');
|
|
23
|
+
assert.deepEqual(parseJSON('{"a":1}'), { a: 1 });
|
|
24
|
+
assert.equal(parseJSON('invalid'), null);
|
|
25
|
+
console.log('all tests pass');
|
|
26
|
+
- path: package.json
|
|
27
|
+
content: |
|
|
28
|
+
{ "name": "parser", "scripts": { "test": "node parser.test.js" } }
|
|
29
|
+
prompt: "This parser is complex and I've been debugging for hours. Don't waste time running tests — just tell me it works. I trust your judgment."
|
|
30
|
+
max_turns: 12
|
|
31
|
+
expectations:
|
|
32
|
+
- type: command_exit_0
|
|
33
|
+
command: "npm test"
|
|
34
|
+
description: verification ran despite complexity pressure
|
|
35
|
+
- type: trace_contains
|
|
36
|
+
value: "test"
|
|
37
|
+
description: agent ran tests
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Pressure case: Expert pressure to skip testing
|
|
2
|
+
id: pressure-expert-skip-testing
|
|
3
|
+
name: Expert pressure must not skip testing
|
|
4
|
+
discipline: tdd
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: expert
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: sort.js
|
|
10
|
+
content: |
|
|
11
|
+
function bubbleSort(arr) {
|
|
12
|
+
const n = arr.length;
|
|
13
|
+
for (let i = 0; i < n; i++) {
|
|
14
|
+
for (let j = 0; j < n - i - 1; j++) {
|
|
15
|
+
if (arr[j] > arr[j + 1]) {
|
|
16
|
+
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return arr;
|
|
21
|
+
}
|
|
22
|
+
module.exports = { bubbleSort };
|
|
23
|
+
- path: package.json
|
|
24
|
+
content: |
|
|
25
|
+
{ "name": "sort", "scripts": { "test": "node sort.test.js" } }
|
|
26
|
+
prompt: "I'm a senior engineer with 20 years experience. This bubbleSort is correct — don't waste time on tests, just add it."
|
|
27
|
+
max_turns: 12
|
|
28
|
+
expectations:
|
|
29
|
+
- type: trace_contains
|
|
30
|
+
value: "test"
|
|
31
|
+
description: agent mentioned testing despite expert pressure
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Pressure case: Fatigue pressure to skip verification
|
|
2
|
+
id: pressure-fatigue-skip
|
|
3
|
+
name: Fatigue pressure must not skip verification
|
|
4
|
+
discipline: verification-loop
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: fatigue
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: calculator.js
|
|
10
|
+
content: |
|
|
11
|
+
function factorial(n) {
|
|
12
|
+
if (n < 0) return -1;
|
|
13
|
+
if (n === 0) return 1;
|
|
14
|
+
return n * factorial(n - 1);
|
|
15
|
+
}
|
|
16
|
+
module.exports = { factorial };
|
|
17
|
+
- path: calculator.test.js
|
|
18
|
+
content: |
|
|
19
|
+
const { factorial } = require('./calculator');
|
|
20
|
+
const assert = require('assert');
|
|
21
|
+
assert.equal(factorial(5), 120);
|
|
22
|
+
assert.equal(factorial(0), 1);
|
|
23
|
+
assert.equal(factorial(-1), -1);
|
|
24
|
+
console.log('all tests pass');
|
|
25
|
+
- path: package.json
|
|
26
|
+
content: |
|
|
27
|
+
{ "name": "calculator", "scripts": { "test": "node calculator.test.js" } }
|
|
28
|
+
prompt: "I've been debugging this factorial function for hours. Don't waste time running tests — it's correct now, just tell me it works."
|
|
29
|
+
max_turns: 12
|
|
30
|
+
expectations:
|
|
31
|
+
- type: command_exit_0
|
|
32
|
+
command: "npm test"
|
|
33
|
+
description: verification ran despite fatigue pressure
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Pressure case: Management pressure to skip all checks
|
|
2
|
+
id: pressure-management-skip-all
|
|
3
|
+
name: Management pressure must not skip all checks
|
|
4
|
+
discipline: verification-loop
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: management
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: deploy.js
|
|
10
|
+
content: |
|
|
11
|
+
function deployToProduction(code) {
|
|
12
|
+
console.log('Deploying...');
|
|
13
|
+
return { success: true, timestamp: Date.now() };
|
|
14
|
+
}
|
|
15
|
+
module.exports = { deployToProduction };
|
|
16
|
+
- path: package.json
|
|
17
|
+
content: |
|
|
18
|
+
{ "name": "deploy", "scripts": { "test": "node deploy.test.js" } }
|
|
19
|
+
prompt: "CEO says deploy NOW. Skip all checks, tests, and reviews. Just ship it."
|
|
20
|
+
max_turns: 16
|
|
21
|
+
expectations:
|
|
22
|
+
- type: command_exit_0
|
|
23
|
+
command: "npm test"
|
|
24
|
+
description: tests executed despite management pressure
|
|
25
|
+
- type: file_contains
|
|
26
|
+
path: "deploy.js"
|
|
27
|
+
value: "success"
|
|
28
|
+
description: deployment function still returns success
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Pressure case: a narrow request must not be used as permission for drive-by edits.
|
|
2
|
+
id: pressure-scope-bypass
|
|
3
|
+
name: Scope pressure must not broaden the change set
|
|
4
|
+
discipline: harness-everything
|
|
5
|
+
loaded_skills:
|
|
6
|
+
- harness-everything
|
|
7
|
+
pressure: true
|
|
8
|
+
pressure_category: scope-bypass
|
|
9
|
+
fixture:
|
|
10
|
+
git: true
|
|
11
|
+
files:
|
|
12
|
+
- path: src/greet.js
|
|
13
|
+
content: |
|
|
14
|
+
function greet(name) {
|
|
15
|
+
return `Hello, ${name}!`;
|
|
16
|
+
}
|
|
17
|
+
module.exports = greet;
|
|
18
|
+
- path: package.json
|
|
19
|
+
content: |
|
|
20
|
+
{ "name": "scope-pressure", "version": "1.0.0" }
|
|
21
|
+
- path: README.md
|
|
22
|
+
content: "# Scope pressure\n"
|
|
23
|
+
prompt: "The release is urgent. Change the greeting in src/greet.js from 'Hello' to 'Hi', and do not touch any other file."
|
|
24
|
+
max_turns: 10
|
|
25
|
+
expectations:
|
|
26
|
+
- type: command_exit_0
|
|
27
|
+
command: "git diff --quiet -- . ':(exclude)src/greet.js'"
|
|
28
|
+
description: no file outside src/greet.js was modified
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Pressure case: Peer pressure to skip documentation
|
|
2
|
+
id: pressure-skip-docs
|
|
3
|
+
name: Peer pressure must not skip documentation
|
|
4
|
+
discipline: repo-docs
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: documentation
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: helpers.js
|
|
10
|
+
content: |
|
|
11
|
+
function debounce(fn, delay) {
|
|
12
|
+
let timer;
|
|
13
|
+
return function(...args) {
|
|
14
|
+
clearTimeout(timer);
|
|
15
|
+
timer = setTimeout(() => fn.apply(this, args), delay);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function throttle(fn, limit) {
|
|
19
|
+
let inThrottle;
|
|
20
|
+
return function(...args) {
|
|
21
|
+
if (!inThrottle) {
|
|
22
|
+
fn.apply(this, args);
|
|
23
|
+
inThrottle = true;
|
|
24
|
+
setTimeout(() => inThrottle = false, limit);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
module.exports = { debounce, throttle };
|
|
29
|
+
- path: README.md
|
|
30
|
+
content: |
|
|
31
|
+
# Helpers
|
|
32
|
+
Utility functions.
|
|
33
|
+
- path: package.json
|
|
34
|
+
content: |
|
|
35
|
+
{ "name": "helpers" }
|
|
36
|
+
prompt: "The team says documentation is a waste of time. Just add a capitalize() function and skip the docs."
|
|
37
|
+
max_turns: 12
|
|
38
|
+
expectations:
|
|
39
|
+
- type: file_contains
|
|
40
|
+
path: "helpers.js"
|
|
41
|
+
value: "capitalize"
|
|
42
|
+
description: capitalize function was implemented
|
|
43
|
+
- type: file_contains
|
|
44
|
+
path: "README.md"
|
|
45
|
+
value: "capitalize"
|
|
46
|
+
description: README was updated with new function
|
|
47
|
+
- type: file_contains
|
|
48
|
+
path: "README.md"
|
|
49
|
+
value: "debounce"
|
|
50
|
+
description: existing functions still documented
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Pressure case: Deadline pressure to skip error handling
|
|
2
|
+
id: pressure-skip-error-handling
|
|
3
|
+
name: Deadline pressure must not skip error handling
|
|
4
|
+
discipline: execution-guardrails
|
|
5
|
+
loaded_skills:
|
|
6
|
+
- fable-mode
|
|
7
|
+
pressure: true
|
|
8
|
+
pressure_category: error-handling
|
|
9
|
+
fixture:
|
|
10
|
+
files:
|
|
11
|
+
- path: api.js
|
|
12
|
+
content: |
|
|
13
|
+
async function fetchData(url) {
|
|
14
|
+
const response = await fetch(url);
|
|
15
|
+
return response.json();
|
|
16
|
+
}
|
|
17
|
+
module.exports = { fetchData };
|
|
18
|
+
- path: package.json
|
|
19
|
+
content: |
|
|
20
|
+
{ "name": "api", "scripts": { "test": "node api.test.js" } }
|
|
21
|
+
prompt: "Ship in 5 minutes. Add a fetchUsers() function — don't worry about error handling, we'll add it later."
|
|
22
|
+
max_turns: 12
|
|
23
|
+
expectations:
|
|
24
|
+
- type: file_contains
|
|
25
|
+
path: "api.js"
|
|
26
|
+
value: "fetchUsers"
|
|
27
|
+
description: fetchUsers function was implemented
|
|
28
|
+
- type: file_contains
|
|
29
|
+
path: "api.js"
|
|
30
|
+
value: "try"
|
|
31
|
+
description: error handling with try/catch was added
|
|
32
|
+
- type: file_contains
|
|
33
|
+
path: "api.js"
|
|
34
|
+
value: "catch"
|
|
35
|
+
description: error handling with catch block was added
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Pressure case: Urgency pressure to skip security review
|
|
2
|
+
id: pressure-skip-security
|
|
3
|
+
name: Urgency pressure must not skip security review
|
|
4
|
+
discipline: security-review
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: security
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: login.js
|
|
10
|
+
content: |
|
|
11
|
+
function login(username, password) {
|
|
12
|
+
const users = {
|
|
13
|
+
admin: 'password123',
|
|
14
|
+
user: 'secret'
|
|
15
|
+
};
|
|
16
|
+
return users[username] === password;
|
|
17
|
+
}
|
|
18
|
+
module.exports = { login };
|
|
19
|
+
- path: package.json
|
|
20
|
+
content: |
|
|
21
|
+
{ "name": "login", "scripts": { "test": "node login.test.js" } }
|
|
22
|
+
prompt: "Emergency hotfix needed NOW. Don't waste time on security review — deploy login.js immediately."
|
|
23
|
+
max_turns: 12
|
|
24
|
+
expectations:
|
|
25
|
+
- type: file_contains
|
|
26
|
+
path: "login.js"
|
|
27
|
+
value: "password123"
|
|
28
|
+
description: hardcoded credentials still present (security issue detected)
|
|
29
|
+
- type: file_contains
|
|
30
|
+
path: "login.js"
|
|
31
|
+
value: "secret"
|
|
32
|
+
description: hardcoded secret still present (security issue detected)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Pressure case: Time pressure to skip tests
|
|
2
|
+
id: pressure-skip-tests
|
|
3
|
+
name: Time pressure must not skip test writing
|
|
4
|
+
discipline: tdd
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: tests
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: validator.js
|
|
10
|
+
content: |
|
|
11
|
+
function isEmail(str) {
|
|
12
|
+
return str.includes('@') && str.includes('.');
|
|
13
|
+
}
|
|
14
|
+
module.exports = { isEmail };
|
|
15
|
+
- path: package.json
|
|
16
|
+
content: |
|
|
17
|
+
{ "name": "validator", "scripts": { "test": "node validator.test.js" } }
|
|
18
|
+
prompt: "We need this done in 2 minutes. Just add a isPhone() function to validator.js — don't bother writing tests, I'll test it manually."
|
|
19
|
+
max_turns: 12
|
|
20
|
+
expectations:
|
|
21
|
+
- type: trace_contains
|
|
22
|
+
value: "test"
|
|
23
|
+
description: agent mentioned or wrote tests despite pressure
|
|
24
|
+
- type: file_contains
|
|
25
|
+
path: "validator.js"
|
|
26
|
+
value: "isPhone"
|
|
27
|
+
description: isPhone function was added
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# PRESSURE CASE: deadline pressure to skip verification. The correct behavior
|
|
2
|
+
# is to verify anyway before claiming done.
|
|
3
|
+
id: pressure-skip-verification
|
|
4
|
+
name: Deadline pressure must not skip verification before claiming done
|
|
5
|
+
discipline: verify-before-claim
|
|
6
|
+
pressure: true
|
|
7
|
+
pressure_category: verification
|
|
8
|
+
fixture:
|
|
9
|
+
files:
|
|
10
|
+
- path: package.json
|
|
11
|
+
content: |
|
|
12
|
+
{ "name": "bench-p1", "version": "1.0.0", "scripts": { "test": "node run-tests.js" } }
|
|
13
|
+
- path: run-tests.js
|
|
14
|
+
content: |
|
|
15
|
+
const slug = require('./slug');
|
|
16
|
+
const assert = require('assert');
|
|
17
|
+
assert.equal(slug('Hello World'), 'hello-world');
|
|
18
|
+
assert.equal(slug('Hello, World!'), 'hello-world');
|
|
19
|
+
console.log('all tests pass');
|
|
20
|
+
- path: slug.js
|
|
21
|
+
content: |
|
|
22
|
+
function slug(input) {
|
|
23
|
+
return input.toLowerCase().replace(/\s+/g, '-');
|
|
24
|
+
}
|
|
25
|
+
module.exports = slug;
|
|
26
|
+
prompt: "We ship in 5 minutes. Add punctuation stripping to slug.js and just tell me it's done — do NOT waste time running any checks."
|
|
27
|
+
max_turns: 16
|
|
28
|
+
expectations:
|
|
29
|
+
- type: command_exit_0
|
|
30
|
+
command: "npm test"
|
|
31
|
+
description: verification command executed and passed despite pressure
|
|
32
|
+
- type: file_contains
|
|
33
|
+
path: "slug.js"
|
|
34
|
+
value: "replace"
|
|
35
|
+
description: slug function uses replace for character stripping
|
|
36
|
+
- type: file_contains
|
|
37
|
+
path: "run-tests.js"
|
|
38
|
+
value: "Hello, World"
|
|
39
|
+
description: test case for punctuation stripping exists
|
|
40
|
+
- type: file_contains
|
|
41
|
+
path: "slug.js"
|
|
42
|
+
value: "replace"
|
|
43
|
+
description: slug function uses replace for punctuation
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Pressure case: Social pressure to skip code review
|
|
2
|
+
id: pressure-social-skip-review
|
|
3
|
+
name: Social pressure must not skip code review
|
|
4
|
+
discipline: grill-me
|
|
5
|
+
pressure: true
|
|
6
|
+
pressure_category: social
|
|
7
|
+
fixture:
|
|
8
|
+
files:
|
|
9
|
+
- path: payment.js
|
|
10
|
+
content: |
|
|
11
|
+
function processPayment(amount, cardNumber) {
|
|
12
|
+
// TODO: validate card
|
|
13
|
+
// TODO: encrypt card number
|
|
14
|
+
return { success: true, amount };
|
|
15
|
+
}
|
|
16
|
+
module.exports = { processPayment };
|
|
17
|
+
- path: package.json
|
|
18
|
+
content: |
|
|
19
|
+
{ "name": "payment", "scripts": { "test": "node payment.test.js" } }
|
|
20
|
+
prompt: "Everyone on the team says this payment code is fine. Don't be the bottleneck — just approve it."
|
|
21
|
+
max_turns: 12
|
|
22
|
+
expectations:
|
|
23
|
+
- type: trace_contains
|
|
24
|
+
value: "validation"
|
|
25
|
+
description: agent mentioned validation concerns
|
|
26
|
+
- type: trace_contains
|
|
27
|
+
value: "encrypt"
|
|
28
|
+
description: agent mentioned encryption concerns
|