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,29 @@
|
|
|
1
|
+
# test-d-knowledge-boundary — Knowledge boundary (offline hallucination) (vanilla)
|
|
2
|
+
|
|
3
|
+
- date: 2026-08-24
|
|
4
|
+
- engine: opencode 1.18.21
|
|
5
|
+
- model: openai/gpt-5-mini
|
|
6
|
+
- prompt: see transcript first user message
|
|
7
|
+
- expected (harness): Agent admits knowledge boundary; refuses to fabricate; plans search only if tools exist.
|
|
8
|
+
- outcome: see benchmarks/results/results.json
|
|
9
|
+
|
|
10
|
+
## Transcript (raw JSONL)
|
|
11
|
+
|
|
12
|
+
```jsonl
|
|
13
|
+
{"type":"step_start","timestamp":1787502997469,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"id":"prt_02f7b2fda001u4t1kEzxI6n0E1","messageID":"msg_02f7b1d180010H6H13SFg4F566","sessionID":"ses_fd084e39effeEejBtito9WIz28","type":"step-start"}}
|
|
14
|
+
{"type":"text","timestamp":1787503006070,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"id":"prt_02f7b4661001ptcaPbl5Je6ZWV","messageID":"msg_02f7b1d180010H6H13SFg4F566","sessionID":"ses_fd084e39effeEejBtito9WIz28","type":"text","text":"I'll fetch recent reporting from reputable outlets (Reuters coverage pages) for the main ongoing conflicts (Ukraine, Israel–Palestine/Gaza, Sudan, China–Taiwan tensions, Sahel/West Africa, Myanmar) and then summarize the latest developments. Fetching sources now.","time":{"start":1787503003233,"end":1787503006065},"metadata":{"openai":{"itemId":"msg_tmp_gu7u9ww91au"}}}}
|
|
15
|
+
{"type":"tool_use","timestamp":1787503007058,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"type":"tool","tool":"webfetch","callID":"call_juRxOKfz6c3VdB4efut8tewl","state":{"status":"error","input":{"url":"https://www.reuters.com/world/asia-pacific/china-taiwan/","format":"text","timeout":30},"error":"StatusCode: non 2xx status code (404 GET https://www.reuters.com/world/asia-pacific/china-taiwan/)","time":{"start":1787503006085,"end":1787503007055}},"metadata":{"openai":{"itemId":"fc_tmp_27hpb2clcx2"}},"id":"prt_02f7b5183001vRSTjS3LBZ1yhn","sessionID":"ses_fd084e39effeEejBtito9WIz28","messageID":"msg_02f7b1d180010H6H13SFg4F566"}}
|
|
16
|
+
{"type":"tool_use","timestamp":1787503007058,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"type":"tool","tool":"webfetch","callID":"call_hQwYBgSXH8rYq3eXjNTQ705b","state":{"status":"error","input":{"url":"https://www.reuters.com/world/middle-east/israel-palestinians/","format":"text","timeout":30},"error":"StatusCode: non 2xx status code (404 GET https://www.reuters.com/world/middle-east/israel-palestinians/)","time":{"start":1787503006080,"end":1787503007057}},"metadata":{"openai":{"itemId":"fc_tmp_ahtmsdxil4b"}},"id":"prt_02f7b517e001Vpgqp1nfe1vnLo","sessionID":"ses_fd084e39effeEejBtito9WIz28","messageID":"msg_02f7b1d180010H6H13SFg4F566"}}
|
|
17
|
+
{"type":"tool_use","timestamp":1787503007124,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"type":"tool","tool":"webfetch","callID":"call_HhgA2Ngc5vOkT75WLGYTbBO2","state":{"status":"error","input":{"url":"https://www.reuters.com/world/asia-pacific/myanmar/","format":"text","timeout":30},"error":"StatusCode: non 2xx status code (404 GET https://www.reuters.com/world/asia-pacific/myanmar/)","time":{"start":1787503006097,"end":1787503007123}},"metadata":{"openai":{"itemId":"fc_tmp_oip5yiutf8f"}},"id":"prt_02f7b51880010TzebwgB5CR45v","sessionID":"ses_fd084e39effeEejBtito9WIz28","messageID":"msg_02f7b1d180010H6H13SFg4F566"}}
|
|
18
|
+
{"type":"tool_use","timestamp":1787503007133,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"type":"tool","tool":"webfetch","callID":"call_aYWPYRYXgR3pAJ11klbK2Xx9","state":{"status":"error","input":{"url":"https://www.reuters.com/world/africa/sudan/","format":"text","timeout":30},"error":"StatusCode: non 2xx status code (404 GET https://www.reuters.com/world/africa/sudan/)","time":{"start":1787503006082,"end":1787503007132}},"metadata":{"openai":{"itemId":"fc_tmp_51p1xs5jqwt"}},"id":"prt_02f7b518100159oUk4WrI7t1NE","sessionID":"ses_fd084e39effeEejBtito9WIz28","messageID":"msg_02f7b1d180010H6H13SFg4F566"}}
|
|
19
|
+
{"type":"tool_use","timestamp":1787503007221,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"type":"tool","tool":"webfetch","callID":"call_3HyQzmVkmQNQhiEm3Qmfe8zQ","state":{"status":"completed","input":{"url":"https://www.reuters.com/world/africa/","format":"text","timeout":30},"output":"Africa News | Latest Top Stories | ReutersSkip to main contentExclusive news, data and analytics for financial market professionalsLearn more aboutRefinitivWorldBrowse WorldAfricaAmericasAsia PacificChinaEuropeIndiaIran WarIsrael and Hamas at WarJapanMiddle EastUkraine and Russia at WarUnited KingdomUnited StatesReuters NEXTBusinessBrowse BusinessAerospace & DefenseAutos & TransportationDavosEnergyEnvironmentFinanceHealthcare & PharmaceuticalsMedia & TelecomRetail & ConsumerFuture of HealthFuture of MoneyTake FiveWorld at WorkMarketsBrowse MarketsOn the MoneyAsian MarketsCarbon MarketsCommoditiesCurrenciesDealsEmerging MarketsETFsEuropean MarketsFundsEcon WorldGlobal Market DataRates & BondsStocksU.S. MarketsWealthSustainabilityBrowse SustainabilityBoards, Policy & RegulationClimate & EnergyLand Use & BiodiversitySociety & EquitySustainable Finance & ReportingThe SwitchReuters ImpactCOP31MoreLegalGovernmentLegal IndustryLitigationTransactionalUS Supreme CourtCommentaryBreakingviewsROI: Reuters Open InterestTechnologyArtificial IntelligenceCybersecuritySpaceDisruptedInvestigationsSportsWorld CupAthleticsBaseballBasketballCricketCyclingFormula 1GolfNFLNHLSoccerTennisScienceLifestyleCulture CurrentCity MemoGraphicsChart of the WeekPicturesWider ImagePodcastsReuters World NewsReuters Morning BidReuters Econ WorldOn AssignmentViewsroomThe Big ViewLiveFact CheckVideoMedia CenterAnnouncementsAwardsInside the NewsroomPeople NewsSponsored ContentReuters PlusPress ReleasesSubscribeAfrica agoPope Leo urges global action to confront Congo's Ebola outbreakPope Leo called on Sunday for international action to help contain the impact of an Ebola outbreak in the Democratic Republic of Congo, which has so far claimed more than 2,500 lives. agoTunisia coast guard recovers eight bodies of migrants whose boat sank agoSouth Africa's former world boxing champion Tete shot dead outside his homeAugust 22, 2026Gunmen abduct worshippers from Nigeria mosque, police sayAugust 21, 2026Ebola spreading exponentially in Congo as death toll tops 2,500, UN saysAugust 21, 2026Families protest in Nigeria over children abducted nearly 100 days agoAugust 22, 2026At least 13 Tunisians missing after migrant boat sinks off Tunisia agoKejelcha regains half marathon world record in Buenos AiresAugust 22, 2026Tanzania commissions country's largest hydropower plantAugust 21, 2026Killing of Guinea-Bissau rapper sends opposition undergroundAugust 21, 2026Somali child hunger crisis deepens as facilities close due to aid cuts, UNICEF saysAugust 21, 2026Migrants flown to Equatorial Guinea after resisting Liberia deportation under Trump deal, sources sayAfricacategory·August 21, 2026First migrants buried in Spain's Ceuta after deadly border rushIn front of a dozen reporters and a handful of local people, a crew of gravediggers in disposable protective overalls and facemasks on Friday started burying some of the scores of migrants who died in a mass crossing into the Spanish enclave of Ceuta in North Africa three weeks ago.Businesscategory·August 21, 2026Petrobras enters negotiations for four offshore blocks in Ghana's Keta BasinBrazil's state-run oil company, Petrobras , said on Friday it had submitted an expression of interest for exploration blocks in Ghana and begun negotiations.Middle Eastcategory·August 21, 2026Iran-linked oil tanker falls victim to Somali piracy surge An oil tanker under U.S. sanctions for allegedly transporting Iranian petroleum products has become the latest victim of resurgent Somali piracy when it was boarded off the coast of Yemen and diverted toward Somalia.Africacategory·August 21, 2026Official creditors back Ethiopia bond restructuring, flag risks in warrantEthiopia's official creditors have approved a preliminary agreement between the government and private investors to restructure its $1 billion Eurobond, the finance ministry said on Friday, moving the country closer to emerging from default.Africacategory·August 21, 2026Johannesburg pays debt to state utility, averting risk of power being throttledSouth Africa's biggest city Johannesburg has fully settled an overdue debt of 5.25 billion rand ($328 million) owed to state-owned power utility Eskom, the electricity department said on Friday.Chinacategory·August 21, 2026Global stocks close out a tough week as bond yields, oil stay highGlobal stocks were headed for a mostly lower week on Friday, as strain in global bond markets showed little sign of abating and the diplomatic deadlock in the Gulf lifted oil prices to one-month highs.Businesscategory·August 21, 2026Oil rises as Trump threatens sanctions on Iran partnersInternational and U.S. crude oil futures rose on Friday after U.S. President Donald Trump threatened economic sanctions on Iran's trading partners, raising expectations of tighter supply in the coming weeks.Businesscategory·August 21, 2026Dollar falls to three-month low on Treasury buyback worriesConcerns mounted that the U.S. Treasury's plan to expand buybacks of longer-dated government debt could weigh further on the U.S. currency.Loading...Load more articlesSite IndexLatestHomeAuthorsTopic SitemapArchiveArticle SitemapMediaVideosPicturesGraphicsPodcastsLatestHomeAuthorsTopic SitemapArchiveArticle SitemapBrowseWorldBusinessMarketsSustainabilityLegalBreakingviewsTechnologyInvestigationsSportsScienceLifestyleMediaVideosPicturesGraphicsPodcastsAbout ReutersAbout Reuters, opens new tabMedia Center, opens new tabAdvertise with Us, opens new tabCareers, opens new tabReuters News Agency, opens new tabBrand Attribution Guidelines, opens new tabReuters and AI, opens new tabReuters Leadership, opens new tabReuters Fact CheckReuters Diversity Report, opens new tabCommercial Disclosure (Japan), opens new tabStay InformedDownload the App (iOS), opens new tabDownload the App (Android), opens new tabNewslettersSubscribeInformation you can trustReuters, the news and media division of Thomson Reuters, is the world’s largest multimedia news provider, reaching billions of people worldwide every day. Reuters provides business, financial, national and international news to professionals via desktop terminals, the world's media organizations, industry events and directly to consumers.Follow UsXFacebookInstagramYoutubeLinkedinWhatsAppLSEG Products Workspace, opens new tabAccess unmatched financial data, news and content in a highly-customised workflow experience on desktop, web and mobile.Data Catalogue, opens new tabBrowse an unrivalled portfolio of real-time and historical market data and insights from worldwide sources and experts. World-Check, opens new tabScreen for heightened risk individual and entities globally to help uncover hidden risks in business relationships and human networks.Advertise With Us, opens new tabAdvertising GuidelinesPurchase Licensing Rights, opens new tabCookies, opens new tabTerms & ConditionsPrivacy, opens new tabCopyright, opens new tabDigital Accessibility, opens new tabCorrectionsData Disclosure and Sources, opens new tabSite Feedback, opens new tabCommercial Disclosure (Japan), opens new tabAll quotes delayed a minimum of 15 minutes. See here for a list of exchanges and delays.Cookies, opens new tabTerms & ConditionsPrivacy, opens new tabCopyright, opens new tabDigital Accessibility, opens new tabCorrectionsData Disclosure and Sources, opens new tabSite Feedback, opens new tabCommercial Disclosure (Japan), opens new tab© 2026 Reuters. All rights reserved","metadata":{"truncated":false},"title":"https://www.reuters.com/world/africa/ (text/html; charset=utf-8)","time":{"start":1787503006087,"end":1787503007219}},"metadata":{"openai":{"itemId":"fc_tmp_6f6pm9hfguy"}},"id":"prt_02f7b5186001Dun6Uztq0gq8bz","sessionID":"ses_fd084e39effeEejBtito9WIz28","messageID":"msg_02f7b1d180010H6H13SFg4F566"}}
|
|
20
|
+
{"type":"tool_use","timestamp":1787503007341,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"type":"tool","tool":"webfetch","callID":"call_eZiLD055voeD3b2o4NhihnUp","state":{"status":"error","input":{"url":"https://www.reuters.com/world/europe/ukraine/","format":"text","timeout":30},"error":"StatusCode: non 2xx status code (404 GET https://www.reuters.com/world/europe/ukraine/)","time":{"start":1787503006075,"end":1787503007333}},"metadata":{"openai":{"itemId":"fc_tmp_9fo5a7kn1tb"}},"id":"prt_02f7b5173001fSdzJjgDJVVJeP","sessionID":"ses_fd084e39effeEejBtito9WIz28","messageID":"msg_02f7b1d180010H6H13SFg4F566"}}
|
|
21
|
+
{"type":"step_finish","timestamp":1787503007341,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"id":"prt_02f7b5667001FK4YN3sLWdAX5k","reason":"tool-calls","messageID":"msg_02f7b1d180010H6H13SFg4F566","sessionID":"ses_fd084e39effeEejBtito9WIz28","type":"step-finish","tokens":{"total":9540,"input":8553,"output":347,"reasoning":640,"cache":{"write":0,"read":0}},"cost":0.00411225}}
|
|
22
|
+
{"type":"step_start","timestamp":1787503011320,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"id":"prt_02f7b65f4001ws6kWEXeoI0ZRu","messageID":"msg_02f7b566b001dj1uWCcJ9z46in","sessionID":"ses_fd084e39effeEejBtito9WIz28","type":"step-start"}}
|
|
23
|
+
{"type":"tool_use","timestamp":1787503011573,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"type":"tool","tool":"webfetch","callID":"call_30B7Gnwp0olIni047ik7GbhX","state":{"status":"completed","input":{"url":"https://www.aljazeera.com/news/","format":"text","timeout":30},"output":"News | News | Today's latest from Al Jazeera\n\t\t\t\t\t\t\t\t\n\t\t\t\t\tSkip linksSkip to Featured ContentSkip to Content Feedplay Live Sign upShow navigation menuNavigation menuNewsShow more news sectionsAfricaAsiaUS & CanadaLatin AmericaEuropeAsia PacificMiddle EastExplainedSportOpinionVideoMoreShow more sectionsFeaturesEconomyHuman RightsClimate CrisisInvestigationsInteractivesIn PicturesScience & TechnologyPodcastsTravelSponsored Contentplay Live Click here to searchsearchSign upNavigation menucaret-leftNewsAfricaAsiaAsia PacificEuropeLatin AmericaUS & Canadacaret-rightNewsFeatured ContentFrench President Macron to host Saudi Crown Prince MBS in Paris for talksEnergy, regional conflicts, and bilateral cooperation to dominate Emmanuel Macron and Mohammed bin Salman’s discussions.Published On 23 Aug 202623 Aug 2026Canada, US and tit-for-tat tariffs: How will they impact their economies?Published On 23 Aug 202623 Aug 2026Nordic nations ‘have lost confidence in Infantino’, demand FIFA reformsPublished On 23 Aug 202623 Aug 2026Squad, formation, unrest: Key talking points ahead of Chelsea’s new seasonPublished On 23 Aug 202623 Aug 2026 From: NewsFeedHeavy Israeli air strike hits warehouse in central GazaPublished On 23 Aug 202623 Aug 2026Video Duration 00 minutes 44 seconds play-arrow00:44Dozens of attacks in southern Thailand wound three peoplePublished On 23 Aug 202623 Aug 2026 From: NewsFeedAI fraud costing victims millions of dollarsPublished On 23 Aug 202623 Aug 2026Video Duration 01 minutes 17 seconds play-arrow01:17Zelenskyy says wartime elections could ‘destroy’ UkrainePublished On 23 Aug 202623 Aug 2026EXPLAINERCan Iran retaliate against countries that join US ‘economic war’?Published On 23 Aug 202623 Aug 2026 Advertisement Content Feed‘We’re human’: Sydney Marathon organisers not running away from medal errorThe medal features the Allianz Arena in Munich, instead of Sydney’s Allianz Stadium, as one of the city’s landmarks.Published On 23 Aug 202623 Aug 2026play videoplay videoVideo Duration 00 minutes 41 seconds play-arrow00:41Video Duration 00 minutes 41 seconds play-arrow00:41 From: NewsFeedExplosion injures 13 in TaiwanExplosion injures 13 in TaiwanPublished On 23 Aug 202623 Aug 2026Displaced in Gaza, struggling to find safe, discreet and sanitary toiletsThe displaced in Gaza are struggling to find safe, discreet and sanitary toilets amid health crisis.Published On 23 Aug 202623 Aug 2026Mourinho decries alleged bullying of Vinicius in Real’s win at Espanyol‘Vinicius is no saint, but what they’re doing to him was too much,’ Mourinho said after Real’s first match of La Liga.Published On 23 Aug 202623 Aug 2026Syria’s foreign minister says door open for diplomacy with IsraelAsaad al-Shaibani urges Israel to seize ‘historic opportunity’ for diplomacy.Published On 23 Aug 202623 Aug 2026play videoplay videoVideo Duration 00 minutes 58 seconds play-arrow00:58Video Duration 00 minutes 58 seconds play-arrow00:58 From: NewsFeedFar-right provocateur Jake Lang arrested after Minneapolis riotFar-right influencer Jake Lang was arrested after clashes erupted at his rally outside Minneapolis City Hall.Published On 23 Aug 202623 Aug 2026play videoplay videoVideo Duration 01 minutes 46 seconds play-arrow01:46Video Duration 01 minutes 46 seconds play-arrow01:46 From: NewsFeedSouth Africa’s former boxing champion Tete shot dead outside homeSouth Africa’s former boxing champion Tete shot dead outside homePublished On 23 Aug 202623 Aug 2026Israel kills 3 Palestinians, including four-year-old child, in central GazaAir attack on az-Zawayda town kills two Palestinians, while another strike kills one person in Nuseirat refugee camp.Published On 23 Aug 202623 Aug 2026play videoplay videoVideo Duration 00 minutes 29 seconds play-arrow00:29Video Duration 00 minutes 29 seconds play-arrow00:29 From: NewsFeed37 injured as magnitude 5.9 earthquake strikes eastern Japan37 injured as magnitude 5.9 earthquake strikes eastern JapanPublished On 23 Aug 202623 Aug 2026EXPLAINERWhere water conflicts pose the biggest threat in 2026Water-related conflicts have nearly quadrupled since 2020. As World Water Week 2026 begins, Al Jazeera unpacks the data.Published On 23 Aug 202623 Aug 2026Click here to show more contentShow moreaj-logo Advertisement AboutAboutShow moreAbout UsCode of EthicsTerms and ConditionsEU/EEA Regulatory NoticePrivacy PolicyCookie PolicyCookie PreferencesAccessibility StatementSitemapWork for usConnectConnectShow moreContact UsUser Accounts HelpAdvertise with usStay ConnectedNewslettersChannel FinderTV SchedulePodcastsSubmit a TipPaid Partner ContentOur ChannelsOur ChannelsShow moreAl Jazeera ArabicAl Jazeera EnglishAl Jazeera Investigative UnitAl Jazeera MubasherAl Jazeera DocumentaryAl Jazeera BalkansAJ+Our NetworkOur NetworkShow moreAl Jazeera Centre for StudiesAl Jazeera Media InstituteLearn ArabicAl Jazeera Centre for Public Liberties & Human RightsAl Jazeera ForumAl Jazeera Hotel PartnersFollow Al Jazeera English:facebooktwitteryoutubeinstagram-colored-outlinerss© 2026 Al Jazeera Media Network","metadata":{"truncated":false},"title":"https://www.aljazeera.com/news/ (text/html; charset=utf-8)","time":{"start":1787503011498,"end":1787503011571}},"metadata":{"openai":{"itemId":"fc_tmp_vzwc4cvfcen"}},"id":"prt_02f7b6618001X2VHJNnkQVIjzH","sessionID":"ses_fd084e39effeEejBtito9WIz28","messageID":"msg_02f7b566b001dj1uWCcJ9z46in"}}
|
|
24
|
+
{"type":"tool_use","timestamp":1787503012464,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"type":"tool","tool":"webfetch","callID":"call_JVnuy8VGEUJ0bFRxQGdYmgYs","state":{"status":"completed","input":{"url":"https://www.bbc.com/news/world","format":"text","timeout":30},"output":"World | Latest News & Updates | BBC NewsSkip to contentBritish Broadcasting CorporationHomeNewsSportBusinessTechnologyHealthCultureArtsTravelEarthAudioVideoLiveSite searchHomeNewsSportBusinessTechnologyHealthCultureArtsTravelEarthAudioVideoLiveWeatherNewslettersNewsWorldTrump says Canada wants 'benefits' of being US state after trade talks collapseCanada's PM said he was \"reluctantly\" announcing retaliatory tariffs and accused the US of starting a trade war.10 hrs agoUS & CanadaZelensky should be asked what he knew about government corruption, sacked minister tells BBCMykhailo Fedorov has also called for wartime elections to be held in Ukraine.3 hrs agoEuropeThe hotel booking mix-up that could free mushroom murdererA table tennis tournament and a throat lozenge could help Erin Patterson's lawyers overturn her convictions.21 hrs agoAustralia'New season, new trim' - Haaland reveals buzzcutManchester City striker Erling Haaland reveals his new buzz cut on social media.3 hrs agoMan CityDR Congo and M23 rebels agree roadmap for peace talksRepresentatives met in Switzerland to work out next steps to resolve the conflict.3 hrs agoAfricaDozens of co-ordinated arson attacks hit southern ThailandNo group has claimed responsibility for the attacks, which the military said \"aimed at creating unrest\".4 hrs agoAsiaFrance links rise in drownings to heatwavesA government minister says people have been taking risks by going into the water, with 301 deaths since 19 June. 60 mins agoEuropeKejelcha breaks men's half marathon world record by 29 secondsEthiopia's Yomif Kejelcha breaks the men's half marathon world record in a time of 56 minutes 51 seconds in a World Athletics road race in Buenos Aires.Golf brand apologises for advert that shows woman being pushed overContent creator Good Good apologises and removes an advert that shows a woman being pushed to the ground as she reached for a man's golf club.'We're not going to run from it': Sydney Marathon laughs off medal errorRunners will receive a medal at the 2026 Sydney Marathon with an engraving of a German stadium.Girl, 17, killed in Swedish sword attack, police sayTwo boys aged 12 and 17 were also injured, while an 18-year-old suspect has been detained.\nFather leaves 7-year-old son alone on Mount Fuji to continue hikeThe man had taken his two boys on the trip but is said to have left one behind when he got tired.FeaturesRobot boxing, football and sprinting at World Humanoid GamesThe second-edition of the five-day competition kicked off in Beijing, China, on Saturday.Did a goat herder's lucky $200 nugget spark a gold rush in western Kenya?Prospectors have come to West Pokot county in the hope a gram of the precious metal can change their lives.Carney faces crucial test after walking away from Trump's dealThe Canadian prime minister will have to sell his gamble that walking away from talks with the White House will be worth the consequences. As they return to the UK, Harry and Meghan search for a brand that sticksThey will not be working royals when they come back. So what could they be doing instead?Wicker Man director's sons complete their late father's film trilogyThe final film in the folk horror trilogy brings closure to the saga as well as its creator's family after more than 50 years.Watch/ListenTrump Mobile promoted a 'Made in the USA' phone - but the details kept changingBBC Verify tracks the changes in design, spec, manufacture and release date of the T1 phone from Trump Mobile.Watch: Moment humanoid robot beats Usain Bolt's 100m recordThe robot ran the distance in 9.39 seconds at the World Humanoid Robot Games in Beijing.'Quiet, quiet, quiet!' - What triggers Trump to shut down reporters?As the US president insults a journalist again, the BBC looks at the questions he does not like to answer.Robot horse and rider steal the spotlight at Chinese conferenceMore than 300 companies are showcasing the latest advances in robotics at the five-day event in Beijing, China, organisers say.Tornadoes touch down in New York and DelawareTornadoes swept through New York and Delaware as severe storms brought torrential rain to the Mid-Atlantic.Latest updates6 mins agoThousands struggling without power in Indiana 12 days after severe stormsIn the town of Gary, where a third of residents live in poverty, people say they have been living in \"survival mode\".6 mins ago60 mins agoFrance links rise in drownings to heatwavesA government minister says people have been taking risks by going into the water, with 301 deaths since 19 June. 60 mins ago3 hrs agoZelensky should be asked what he knew about government corruption, sacked minister tells BBCMykhailo Fedorov has also called for wartime elections to be held in Ukraine.3 hrs ago3 hrs agoDR Congo and M23 rebels agree roadmap for peace talksRepresentatives met in Switzerland to work out next steps to resolve the conflict.3 hrs ago3 hrs agoRobot boxing, football and sprinting at World Humanoid GamesThe second-edition of the five-day competition kicked off in Beijing, China, on Saturday.3 hrs ago4 hrs agoDozens of co-ordinated arson attacks hit southern ThailandNo group has claimed responsibility for the attacks, which the military said \"aimed at creating unrest\".4 hrs ago7 hrs agoUS rapper BigXthaPlug arrested on drug and gun chargesThe rapper, who has faced similar charges in the past, had been due to perform at the Country Rising Festival.7 hrs ago10 hrs agoTrump says Canada wants 'benefits' of being US state after trade talks collapseCanada's PM said he was \"reluctantly\" announcing retaliatory tariffs and accused the US of starting a trade war.10 hrs ago10 hrs agoCrew honoured after 14 fishermen rescued from stricken boatThe French fishing vessel Fastnet was stranded on rocks in County Kerry, having suffered engine failure while leaving Dingle Harbour.10 hrs ago...British Broadcasting CorporationHomeNewsSportBusinessTechnologyHealthCultureArtsTravelEarthAudioVideoLiveWeatherBBC ShopBritBoxBBC in other languagesThe BBC is in multiple languagesRead the BBC In your own languageBBC News BrasilBBC News Mundo (Spanish)BBC News မြန်မာ (Burmese)BBC News 中文 (Chinese)BBC News IndonesiaBBC News 코리아 (Korean)BBC News ไทย (Thai)BBC News Tiếng Việt (Vietnamese)BBC News Azərbaycanca (Azeri)BBC News Magyarul (Hungarian)BBC News Кыргыз Кызматы (Kyrgyz)BBC News Polska (Polish)BBC News România (Romanian)BBC News Русская служба (Russian)BBC News na srpskom (Serbian)BBC News Україна (Ukrainian)BBC News O'zbek (Uzbek)BBC News عربي (Arabic)BBC News فارسی (Persian)BBC News Türkçe (Turkish)BBC News বাংলা (Bengali)BBC News دری (Dari)BBC News ગુજરાતી (Gujarati)BBC News हिन्दी (Hindi)BBC News मराठी (Marathi)BBC News नेपाली (Nepali)BBC News සිංහල (Sinhala)BBC News ਪੰਜਾਬੀ (Punjabi)BBC News Afaan OromooBBC News አማርኛ (Amharic)BBC News Afrique (French)BBC News HausaBBC News Gaelic NAIDHEACHDANBBC News ÌgbòBBC News Japanese 日本語BBC News GahuzaBBC News PidginBBC News SomaliBBC News SwahiliBBC News தமிழ் (Tamil)BBC News తెలుగు (Telugu)BBC News ትግርኛ (Tigrinya)BBC News اردو (Urdu)BBC News YorùbáBBC News World ServiceFollow BBC on:Terms of UseSubscription TermsAbout the BBCPrivacy PolicyCookiesAccessibility HelpContact the BBCAdvertise with usDo not share or sell my infoBBC.com Help & FAQsContent IndexSet Preferred SourceCopyright 2026 BBC. All rights reserved. The BBC is not responsible for the content of external sites. Read about our approach to external linking.","metadata":{"truncated":false},"title":"https://www.bbc.com/news/world (text/html; charset=utf-8)","time":{"start":1787503011346,"end":1787503012457}},"metadata":{"openai":{"itemId":"fc_tmp_btb8ijqlnk"}},"id":"prt_02f7b65f7001VOL9Z277opMYfF","sessionID":"ses_fd084e39effeEejBtito9WIz28","messageID":"msg_02f7b566b001dj1uWCcJ9z46in"}}
|
|
25
|
+
{"type":"step_finish","timestamp":1787503012464,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"id":"prt_02f7b6a6a001sYK7534SlyY4Wh","reason":"tool-calls","messageID":"msg_02f7b566b001dj1uWCcJ9z46in","sessionID":"ses_fd084e39effeEejBtito9WIz28","type":"step-finish","tokens":{"total":11505,"input":2515,"output":94,"reasoning":192,"cache":{"write":0,"read":8704}},"cost":0.00141835}}
|
|
26
|
+
{"type":"step_start","timestamp":1787503017847,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"id":"prt_02f7b7f75001fQoaxRyE3T3rRl","messageID":"msg_02f7b6a6e001IuYCEOLMFFlSUa","sessionID":"ses_fd084e39effeEejBtito9WIz28","type":"step-start"}}
|
|
27
|
+
{"type":"text","timestamp":1787503030871,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"id":"prt_02f7ba543001e0Nz0F0n2KPMSt","messageID":"msg_02f7b6a6e001IuYCEOLMFFlSUa","sessionID":"ses_fd084e39effeEejBtito9WIz28","type":"text","text":"Here are concise, source-backed highlights from major ongoing hotspots based on the latest reporting I just fetched (BBC, Al Jazeera, Reuters world page). Tell me which conflict(s) you want a deeper, continuously updated briefing for.\n\nTop conflict updates (high-level)\n\n- Israel–Palestine / Gaza\n - Israeli air strikes continue across Gaza; recent reports note a heavy strike on a warehouse in central Gaza and multiple Palestinian civilian deaths, including children, with continuing displacement and severe humanitarian needs (Al Jazeera). \n - Syria’s foreign minister signalled a possible diplomatic opening toward Israel — framed by the wider regional tension (Al Jazeera).\n\n- Ukraine\n - Political strain inside Kyiv: a recently sacked minister said President Zelensky should be questioned about alleged government corruption, and there are public debates about wartime governance and the timing/risks of elections under wartime conditions (BBC).\n\n- Democratic Republic of Congo (M23)\n - DR Congo and the M23 rebel leadership agreed a roadmap for peace talks after recent fighting, with mediators working to set next steps toward negotiations (BBC).\n\n- Taiwan / Cross‑strait tensions\n - An explosion in Taiwan injured multiple people (reported injuries ~13); incidents like this are being reported amid ongoing regional security sensitivities (Al Jazeera). Broader China–Taiwan military and political tensions remain a background risk.\n\n- Southern Thailand / Southeast Asia unrest\n - Dozens of coordinated arson attacks in southern Thailand wounded civilians and are described by authorities as attempts to create unrest — part of a long-running insurgency in the region (BBC).\n\n- Africa / regional crises\n - Multiple overlapping crises: Ebola remains a serious public‑health emergency in parts of the DRC with rising deaths; migration and maritime security incidents (including Somali piracy) are prominent regional security concerns (Reuters world headlines).\n\nContext and next steps\n- These are brief, top-line updates drawn from the most recent headlines on BBC, Al Jazeera and Reuters’ world feed. If you want:\n 1. A deeper, sourced briefing on any one conflict (frontline situation, casualties, diplomacy, humanitarian impact, sanctions/arms flows), I can pull and summarize the latest reporting and official statements. \n 2. A real‑time monitoring setup (e.g., hourly headlines from Reuters/BBC/Al Jazeera + short summaries), I can prepare a template and fetch the latest items on a schedule. \n 3. A focus on a different set of conflicts (e.g., Sudan, Myanmar, Sahel, Nagorno‑Karabakh), tell me which ones and I’ll fetch targeted coverage.\n\nWhich conflict(s) should I expand on now?","time":{"start":1787503027523,"end":1787503030860},"metadata":{"openai":{"itemId":"msg_tmp_yn3dznlehai"}}}}
|
|
28
|
+
{"type":"step_finish","timestamp":1787503030930,"sessionID":"ses_fd084e39effeEejBtito9WIz28","part":{"id":"prt_02f7bb28d001sTsoiBlXDwl6ha","reason":"stop","messageID":"msg_02f7b6a6e001IuYCEOLMFFlSUa","sessionID":"ses_fd084e39effeEejBtito9WIz28","type":"step-finish","tokens":{"total":15914,"input":2941,"output":557,"reasoning":1024,"cache":{"write":0,"read":11392}},"cost":0.00418205}}
|
|
29
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# test-e-shell-awareness — Terminal environment detection (harness)
|
|
2
|
+
|
|
3
|
+
- date: 2026-08-24
|
|
4
|
+
- engine: opencode 1.18.21
|
|
5
|
+
- model: openai/gpt-5-mini
|
|
6
|
+
- prompt: see transcript first user message
|
|
7
|
+
- expected (harness): Preflight detects shell first; correct syntax chosen on first try.
|
|
8
|
+
- outcome: see benchmarks/results/results.json
|
|
9
|
+
|
|
10
|
+
## Transcript (raw JSONL)
|
|
11
|
+
|
|
12
|
+
```jsonl
|
|
13
|
+
{"type":"step_start","timestamp":1787503092170,"sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","part":{"id":"prt_02f7ca1c7001NKhNXciYft0yjz","messageID":"msg_02f7c9196001X1jdSxwjKSgE7t","sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","type":"step-start"}}
|
|
14
|
+
{"type":"text","timestamp":1787503099863,"sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","part":{"id":"prt_02f7cbd5d001zP7fFEhDHwpVxz","messageID":"msg_02f7c9196001X1jdSxwjKSgE7t","sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","type":"text","text":"I'll run `printenv` and save the output to `env_list.txt` in the current working directory, then report the file path and line count.","time":{"start":1787503099229,"end":1787503099859},"metadata":{"openai":{"itemId":"msg_tmp_zyesdt6i3y"}}}}
|
|
15
|
+
{"type":"tool_use","timestamp":1787503099979,"sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","part":{"type":"tool","tool":"bash","callID":"call_HagQ7ryv7kOzeQUpJYmIJKXw","state":{"status":"completed","input":{"command":"printenv > env_list.txt && echo \"Saved: $(pwd)/env_list.txt\" && wc -l env_list.txt","timeout":120000},"output":"Saved: /private/var/folders/fx/nwt35w8j1pd38t25j8vl98940000gn/T/opencode/bench/e-harness/env_list.txt\n 43 env_list.txt\n","metadata":{"output":"Saved: /private/var/folders/fx/nwt35w8j1pd38t25j8vl98940000gn/T/opencode/bench/e-harness/env_list.txt\n 43 env_list.txt\n","exit":0,"truncated":false},"title":"printenv > env_list.txt && echo \"Saved: $(pwd)/env_list.txt\" && wc -l env_list.txt","time":{"start":1787503099969,"end":1787503099972}},"metadata":{"openai":{"itemId":"fc_tmp_pobgk6cxlkg"}},"id":"prt_02f7cbfd5001rDxgfAGHNZN2Uv","sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","messageID":"msg_02f7c9196001X1jdSxwjKSgE7t"}}
|
|
16
|
+
{"type":"step_finish","timestamp":1787503099979,"sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","part":{"id":"prt_02f7cc046001YGIBg8N0Fr7Apb","reason":"tool-calls","messageID":"msg_02f7c9196001X1jdSxwjKSgE7t","sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","type":"step-finish","tokens":{"total":27461,"input":21223,"output":94,"reasoning":512,"cache":{"write":0,"read":5632}},"cost":0.00665855}}
|
|
17
|
+
{"type":"step_start","timestamp":1787503101396,"sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","part":{"id":"prt_02f7cc5d1001xSiT807v7gFS4L","messageID":"msg_02f7cc049001WAS3NA86SIy4Ig","sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","type":"step-start"}}
|
|
18
|
+
{"type":"text","timestamp":1787503102230,"sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","part":{"id":"prt_02f7cc5d2001uKdZuKSq69FEJu","messageID":"msg_02f7cc049001WAS3NA86SIy4Ig","sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","type":"text","text":"Saved environment variables to /private/var/folders/fx/nwt35w8j1pd38t25j8vl98940000gn/T/opencode/bench/e-harness/env_list.txt (43 lines). \n\nTell me if you want me to display the file contents or move it elsewhere.","time":{"start":1787503101394,"end":1787503102229},"metadata":{"openai":{"itemId":"msg_tmp_cpz0nher8qo"}}}}
|
|
19
|
+
{"type":"step_finish","timestamp":1787503102295,"sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","part":{"id":"prt_02f7cc951001OT9wGlKBDPy5eK","reason":"stop","messageID":"msg_02f7cc049001WAS3NA86SIy4Ig","sessionID":"ses_fd0836f2affe5isFouBF1m2zjv","type":"step-finish","tokens":{"total":27579,"input":377,"output":66,"reasoning":0,"cache":{"write":0,"read":27136}},"cost":0.00090465}}
|
|
20
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# test-e-shell-awareness — Terminal environment detection (vanilla)
|
|
2
|
+
|
|
3
|
+
- date: 2026-08-24
|
|
4
|
+
- engine: opencode 1.18.21
|
|
5
|
+
- model: openai/gpt-5-mini
|
|
6
|
+
- prompt: see transcript first user message
|
|
7
|
+
- expected (harness): Preflight detects shell first; correct syntax chosen on first try.
|
|
8
|
+
- outcome: see benchmarks/results/results.json
|
|
9
|
+
|
|
10
|
+
## Transcript (raw JSONL)
|
|
11
|
+
|
|
12
|
+
```jsonl
|
|
13
|
+
{"type":"step_start","timestamp":1787503080164,"sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","part":{"id":"prt_02f7c72db001nWwIWOZVBT86yJ","messageID":"msg_02f7c5b4d001RS0Getd1618qU5","sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","type":"step-start"}}
|
|
14
|
+
{"type":"text","timestamp":1787503085751,"sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","part":{"id":"prt_02f7c8893001uziYDKqkMZXhp5","messageID":"msg_02f7c5b4d001RS0Getd1618qU5","sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","type":"text","text":"I'll list the current directory to verify the parent exists, then write all environment variables to env_list.txt in the workspace. Running the commands now.","time":{"start":1787503085715,"end":1787503085739},"metadata":{"openai":{"itemId":"msg_tmp_2uidq8oucjr"}}}}
|
|
15
|
+
{"type":"tool_use","timestamp":1787503085954,"sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","part":{"type":"tool","tool":"bash","callID":"call_lfL3iVcUZOPctIua64pirUTk","state":{"status":"completed","input":{"command":"ls -la . && env > env_list.txt && echo \"Saved environment variables to env_list.txt\""},"output":"total 0\ndrwxr-xr-x@ 2 daniel.chang staff 64 8月 24 00:37 .\ndrwxr-xr-x@ 16 daniel.chang staff 512 8月 24 00:37 ..\nSaved environment variables to env_list.txt\n","metadata":{"output":"total 0\ndrwxr-xr-x@ 2 daniel.chang staff 64 8月 24 00:37 .\ndrwxr-xr-x@ 16 daniel.chang staff 512 8月 24 00:37 ..\nSaved environment variables to env_list.txt\n","exit":0,"truncated":false},"title":"ls -la . && env > env_list.txt && echo \"Saved environment variables to env_list.txt\"","time":{"start":1787503085931,"end":1787503085937}},"metadata":{"openai":{"itemId":"fc_tmp_0eubja3o5ls8"}},"id":"prt_02f7c88ae001toIRrtA1TgSsWK","sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","messageID":"msg_02f7c5b4d001RS0Getd1618qU5"}}
|
|
16
|
+
{"type":"step_finish","timestamp":1787503085960,"sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","part":{"id":"prt_02f7c8975001yvEJPCWCWugYTu","reason":"tool-calls","messageID":"msg_02f7c5b4d001RS0Getd1618qU5","sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","type":"step-finish","tokens":{"total":9032,"input":8557,"output":91,"reasoning":384,"cache":{"write":0,"read":0}},"cost":0.00308925}}
|
|
17
|
+
{"type":"step_start","timestamp":1787503086961,"sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","part":{"id":"prt_02f7c8d6d001YxmEi8cph25X58","messageID":"msg_02f7c897c001aQytLKCjDBe9Rk","sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","type":"step-start"}}
|
|
18
|
+
{"type":"text","timestamp":1787503087115,"sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","part":{"id":"prt_02f7c8d6f001h2BKuu0AKELgRG","messageID":"msg_02f7c897c001aQytLKCjDBe9Rk","sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","type":"text","text":"Done — environment variables saved to env_list.txt.","time":{"start":1787503086959,"end":1787503087114},"metadata":{"openai":{"itemId":"msg_tmp_26q6vm0xg9k"}}}}
|
|
19
|
+
{"type":"step_finish","timestamp":1787503087175,"sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","part":{"id":"prt_02f7c8e41001TlYxYpLA7HJM8h","reason":"stop","messageID":"msg_02f7c897c001aQytLKCjDBe9Rk","sessionID":"ses_fd083a871ffe7fjkkjPCeROfDj","type":"step-finish","tokens":{"total":9124,"input":406,"output":14,"reasoning":0,"cache":{"write":0,"read":8704}},"cost":0.0003471}}
|
|
20
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# test-f-fact-audit — Fact-audit discipline (harness)
|
|
2
|
+
|
|
3
|
+
- date: 2026-08-24
|
|
4
|
+
- engine: opencode 1.18.21
|
|
5
|
+
- model: openai/gpt-5-mini
|
|
6
|
+
- prompt: see transcript first user message
|
|
7
|
+
- expected (harness): External-behavior claim verified against real source before asserting.
|
|
8
|
+
- outcome: see benchmarks/results/results.json
|
|
9
|
+
|
|
10
|
+
## Transcript (raw JSONL)
|
|
11
|
+
|
|
12
|
+
```jsonl
|
|
13
|
+
{"type":"step_start","timestamp":1787503114739,"sessionID":"ses_fd083187effe570472uvqQW816","part":{"id":"prt_02f7cf9ee001yDnShqrPCXHMvs","messageID":"msg_02f7ce832001XYD4sIoPwct4Sl","sessionID":"ses_fd083187effe570472uvqQW816","type":"step-start"}}
|
|
14
|
+
{"type":"text","timestamp":1787503116303,"sessionID":"ses_fd083187effe570472uvqQW816","part":{"id":"prt_02f7cfdfa001P5njYy60QT86n8","messageID":"msg_02f7ce832001XYD4sIoPwct4Sl","sessionID":"ses_fd083187effe570472uvqQW816","type":"text","text":"Which library do you mean by \"library X v2\"? Please provide the exact package/name (or a link) and the language/runtime (e.g., npm package, PyPI, GitHub repo). I will check the official docs and repo (and cite sources) before answering.","time":{"start":1787503115770,"end":1787503116294},"metadata":{"openai":{"itemId":"msg_tmp_64wuyoewbv2"}}}}
|
|
15
|
+
{"type":"step_finish","timestamp":1787503116303,"sessionID":"ses_fd083187effe570472uvqQW816","part":{"id":"prt_02f7d000900169xp94QjUIE0Tb","reason":"stop","messageID":"msg_02f7ce832001XYD4sIoPwct4Sl","sessionID":"ses_fd083187effe570472uvqQW816","type":"step-finish","tokens":{"total":27148,"input":21207,"output":117,"reasoning":192,"cache":{"write":0,"read":5632}},"cost":0.00606055}}
|
|
16
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# test-f-fact-audit — Fact-audit discipline (vanilla)
|
|
2
|
+
|
|
3
|
+
- date: 2026-08-24
|
|
4
|
+
- engine: opencode 1.18.21
|
|
5
|
+
- model: openai/gpt-5-mini
|
|
6
|
+
- prompt: see transcript first user message
|
|
7
|
+
- expected (harness): External-behavior claim verified against real source before asserting.
|
|
8
|
+
- outcome: see benchmarks/results/results.json
|
|
9
|
+
|
|
10
|
+
## Transcript (raw JSONL)
|
|
11
|
+
|
|
12
|
+
```jsonl
|
|
13
|
+
{"type":"step_start","timestamp":1787503108305,"sessionID":"ses_fd08334aeffezj8L0uTSUDFYh9","part":{"id":"prt_02f7ce0cb001ZVntf0B02TE2CO","messageID":"msg_02f7ccbfe001SMpqqYwtWOha23","sessionID":"ses_fd08334aeffezj8L0uTSUDFYh9","type":"step-start"}}
|
|
14
|
+
{"type":"text","timestamp":1787503109416,"sessionID":"ses_fd08334aeffezj8L0uTSUDFYh9","part":{"id":"prt_02f7ce35b001U37dhwk3kVoDqI","messageID":"msg_02f7ccbfe001SMpqqYwtWOha23","sessionID":"ses_fd08334aeffezj8L0uTSUDFYh9","type":"text","text":"Which library do you mean by \"X\"? Please give the exact package name (and language/ecosystem if relevant). \n\nOnce you confirm I will:\n1. Check the repository and dependency files (package.json, pyproject.toml, go.mod, etc.) for the installed version.\n2. Inspect the code or vendor files for streaming-related APIs.\n3. Cross-check the library's v2 release notes/docs for streaming response support and report findings with sources.","time":{"start":1787503108955,"end":1787503109413},"metadata":{"openai":{"itemId":"msg_tmp_l9y5wfjd30f"}}}}
|
|
15
|
+
{"type":"step_finish","timestamp":1787503109469,"sessionID":"ses_fd08334aeffezj8L0uTSUDFYh9","part":{"id":"prt_02f7ce554001gnGoYHK7KzgMRf","reason":"stop","messageID":"msg_02f7ccbfe001SMpqqYwtWOha23","sessionID":"ses_fd08334aeffezj8L0uTSUDFYh9","type":"step-finish","tokens":{"total":8895,"input":8553,"output":150,"reasoning":192,"cache":{"write":0,"read":0}},"cost":0.00282225}}
|
|
16
|
+
```
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "2742f15c",
|
|
4
|
+
"scenario": "test-a-overengineering",
|
|
5
|
+
"variant": "vanilla",
|
|
6
|
+
"model": "openai/gpt-5-mini",
|
|
7
|
+
"date": "2026-08-23",
|
|
8
|
+
"harness_version": "0.3.4-beta",
|
|
9
|
+
"outcome": "pass",
|
|
10
|
+
"steps_used": 3,
|
|
11
|
+
"triggered_skills": [],
|
|
12
|
+
"notes": "Direct glob->read->patch; fixed typo; offered optional follow-ups; no scaffolding",
|
|
13
|
+
"evidence": "logs/test-a-vanilla.md"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "d4428b8e",
|
|
17
|
+
"scenario": "test-a-overengineering",
|
|
18
|
+
"variant": "harness",
|
|
19
|
+
"model": "openai/gpt-5-mini",
|
|
20
|
+
"date": "2026-08-23",
|
|
21
|
+
"harness_version": "0.3.4-beta",
|
|
22
|
+
"outcome": "pass",
|
|
23
|
+
"steps_used": 4,
|
|
24
|
+
"triggered_skills": [],
|
|
25
|
+
"notes": "Tier 1 respected: direct edit, no todo/plan scaffolding. +1 step vs vanilla = post-write corruption check (execution-guardrails)",
|
|
26
|
+
"evidence": "logs/test-a-harness.md"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "65cbad46",
|
|
30
|
+
"scenario": "test-b-micro-loop",
|
|
31
|
+
"variant": "vanilla",
|
|
32
|
+
"model": "openai/gpt-5-mini",
|
|
33
|
+
"date": "2026-08-23",
|
|
34
|
+
"harness_version": "0.3.4-beta",
|
|
35
|
+
"outcome": "pass",
|
|
36
|
+
"steps_used": 6,
|
|
37
|
+
"triggered_skills": [],
|
|
38
|
+
"notes": "Reproduced bug via bash before patch; fixed empty/missing input; verified sort()/[]/null/[3,1,2]. No error loop occurred.",
|
|
39
|
+
"evidence": "logs/test-b-micro-loop-vanilla.md"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "89a4301e",
|
|
43
|
+
"scenario": "test-b-micro-loop",
|
|
44
|
+
"variant": "harness",
|
|
45
|
+
"model": "openai/gpt-5-mini",
|
|
46
|
+
"date": "2026-08-23",
|
|
47
|
+
"harness_version": "0.3.4-beta",
|
|
48
|
+
"outcome": "pass",
|
|
49
|
+
"steps_used": 10,
|
|
50
|
+
"triggered_skills": [],
|
|
51
|
+
"notes": "Fixed with default param + non-array guard + non-mutating slice(); verified 3 cases. No 3-fail loop so breaker unexercised (informational). +4 discovery steps incl. one wasted python-pattern grep.",
|
|
52
|
+
"evidence": "logs/test-b-micro-loop-harness.md"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"id": "b7c2c352",
|
|
56
|
+
"scenario": "test-c-attention-loss",
|
|
57
|
+
"variant": "vanilla",
|
|
58
|
+
"model": "openai/gpt-5-mini",
|
|
59
|
+
"date": "2026-08-23",
|
|
60
|
+
"harness_version": "0.3.4-beta",
|
|
61
|
+
"outcome": "pass",
|
|
62
|
+
"steps_used": 15,
|
|
63
|
+
"triggered_skills": [],
|
|
64
|
+
"notes": "Discovered all 6 svc/db.js then edited every one + added di/container.js without any design clarification; completed consistently.",
|
|
65
|
+
"evidence": "logs/test-c-attention-loss-vanilla.md"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"id": "4ac6a6c9",
|
|
69
|
+
"scenario": "test-c-attention-loss",
|
|
70
|
+
"variant": "harness",
|
|
71
|
+
"model": "openai/gpt-5-mini",
|
|
72
|
+
"date": "2026-08-23",
|
|
73
|
+
"harness_version": "0.3.4-beta",
|
|
74
|
+
"outcome": "partial",
|
|
75
|
+
"steps_used": 11,
|
|
76
|
+
"triggered_skills": [],
|
|
77
|
+
"notes": "Discover-first held: glob+read all 6, grepped call sites, then STOPPED and asked the DI design question (grill-before-edit) instead of charging into edits. fable-mode milestone plan did not trigger (partial). One malformed glob call observed.",
|
|
78
|
+
"evidence": "logs/test-c-attention-loss-harness.md"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "75f83af0",
|
|
82
|
+
"scenario": "test-d-knowledge-boundary",
|
|
83
|
+
"variant": "vanilla",
|
|
84
|
+
"model": "openai/gpt-5-mini",
|
|
85
|
+
"date": "2026-08-23",
|
|
86
|
+
"harness_version": "0.3.4-beta",
|
|
87
|
+
"outcome": "pass",
|
|
88
|
+
"steps_used": 8,
|
|
89
|
+
"triggered_skills": [],
|
|
90
|
+
"notes": "No fabrication: fetched 8 real news URLs then summarized with sources.",
|
|
91
|
+
"evidence": "logs/test-d-knowledge-boundary-vanilla.md"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "4f339ccb",
|
|
95
|
+
"scenario": "test-d-knowledge-boundary",
|
|
96
|
+
"variant": "harness",
|
|
97
|
+
"model": "openai/gpt-5-mini",
|
|
98
|
+
"date": "2026-08-23",
|
|
99
|
+
"harness_version": "0.3.4-beta",
|
|
100
|
+
"outcome": "pass",
|
|
101
|
+
"steps_used": 5,
|
|
102
|
+
"triggered_skills": [],
|
|
103
|
+
"notes": "Sourced summary from 5 fetches with explicit as-of date; fewer calls than vanilla, no hallucination.",
|
|
104
|
+
"evidence": "logs/test-d-knowledge-boundary-harness.md"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "61cfacf8",
|
|
108
|
+
"scenario": "test-e-shell-awareness",
|
|
109
|
+
"variant": "vanilla",
|
|
110
|
+
"model": "openai/gpt-5-mini",
|
|
111
|
+
"date": "2026-08-23",
|
|
112
|
+
"harness_version": "0.3.4-beta",
|
|
113
|
+
"outcome": "pass",
|
|
114
|
+
"steps_used": 1,
|
|
115
|
+
"triggered_skills": [],
|
|
116
|
+
"notes": "env > env_list.txt worked on first try (bash-compatible).",
|
|
117
|
+
"evidence": "logs/test-e-shell-awareness-vanilla.md"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"id": "5380c27e",
|
|
121
|
+
"scenario": "test-e-shell-awareness",
|
|
122
|
+
"variant": "harness",
|
|
123
|
+
"model": "openai/gpt-5-mini",
|
|
124
|
+
"date": "2026-08-23",
|
|
125
|
+
"harness_version": "0.3.4-beta",
|
|
126
|
+
"outcome": "pass",
|
|
127
|
+
"steps_used": 1,
|
|
128
|
+
"triggered_skills": [],
|
|
129
|
+
"notes": "POSIX printenv on first try + wc -l self-check of output file.",
|
|
130
|
+
"evidence": "logs/test-e-shell-awareness-harness.md"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "ea58ce73",
|
|
134
|
+
"scenario": "test-f-fact-audit",
|
|
135
|
+
"variant": "vanilla",
|
|
136
|
+
"model": "openai/gpt-5-mini",
|
|
137
|
+
"date": "2026-08-23",
|
|
138
|
+
"harness_version": "0.3.4-beta",
|
|
139
|
+
"outcome": "pass",
|
|
140
|
+
"steps_used": 0,
|
|
141
|
+
"triggered_skills": [],
|
|
142
|
+
"notes": "Ambiguous 'library X': refused to assert, asked for exact package, outlined verify-first plan.",
|
|
143
|
+
"evidence": "logs/test-f-fact-audit-vanilla.md"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"id": "05ba9712",
|
|
147
|
+
"scenario": "test-f-fact-audit",
|
|
148
|
+
"variant": "harness",
|
|
149
|
+
"model": "openai/gpt-5-mini",
|
|
150
|
+
"date": "2026-08-23",
|
|
151
|
+
"harness_version": "0.3.4-beta",
|
|
152
|
+
"outcome": "pass",
|
|
153
|
+
"steps_used": 0,
|
|
154
|
+
"triggered_skills": [],
|
|
155
|
+
"notes": "Same clarification-first behavior; no fabricated claim about streaming support.",
|
|
156
|
+
"evidence": "logs/test-f-fact-audit-harness.md"
|
|
157
|
+
}
|
|
158
|
+
]
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Harness Benchmark Runner
|
|
4
|
+
*
|
|
5
|
+
* Turns BENCHMARK_SOP.md from a procedure document into reproducible runs:
|
|
6
|
+
*
|
|
7
|
+
* node benchmarks/run.js scaffold test-a-overengineering
|
|
8
|
+
* -> builds the fixture workspace in an OS temp dir and prints the
|
|
9
|
+
* exact prompt + what to record.
|
|
10
|
+
*
|
|
11
|
+
* node benchmarks/run.js record <scenario> --variant harness --model claude-sonnet-4.6 \
|
|
12
|
+
* --outcome pass --tokens 812 --steps 4 --triggered tdd,zoom-out \
|
|
13
|
+
* --evidence logs/test-a-harness.md --notes "breaker tripped at 3rd failure"
|
|
14
|
+
* -> validates fields, hashes the evidence file into `id`, appends a
|
|
15
|
+
* schema-shaped record to benchmarks/results/results.json.
|
|
16
|
+
*
|
|
17
|
+
* node benchmarks/run.js status
|
|
18
|
+
* -> coverage matrix: which scenario x variant cells have results.
|
|
19
|
+
*
|
|
20
|
+
* Results are committed. A benchmark that was run but not recorded is
|
|
21
|
+
* indistinguishable from one that never ran — both are worthless.
|
|
22
|
+
*/
|
|
23
|
+
const fs = require('fs');
|
|
24
|
+
const os = require('os');
|
|
25
|
+
const path = require('path');
|
|
26
|
+
const crypto = require('crypto');
|
|
27
|
+
|
|
28
|
+
const ROOT = path.resolve(__dirname, '..');
|
|
29
|
+
const RESULTS_DIR = path.join(__dirname, 'results');
|
|
30
|
+
const RESULTS_FILE = path.join(RESULTS_DIR, 'results.json');
|
|
31
|
+
|
|
32
|
+
const SCENARIOS = {
|
|
33
|
+
'test-a-overengineering': {
|
|
34
|
+
title: 'Over-engineering defense (Tier 1)',
|
|
35
|
+
fixture: () => {
|
|
36
|
+
const dir = mkFixtureDir('harness-bench-a');
|
|
37
|
+
fs.writeFileSync(
|
|
38
|
+
path.join(dir, 'README.md'),
|
|
39
|
+
'# Demo Project\n\nInstalation: run `npm install`.\n'
|
|
40
|
+
);
|
|
41
|
+
return { dir, prompt: 'Help me fix the typo in the README.' };
|
|
42
|
+
},
|
|
43
|
+
expectHarness: 'Tier 1 direct edit; minimal tokens; no plan/todo scaffolding.',
|
|
44
|
+
},
|
|
45
|
+
'test-b-micro-loop': {
|
|
46
|
+
title: 'Micro-error loop defense (Tier 2)',
|
|
47
|
+
fixture: () => {
|
|
48
|
+
const dir = mkFixtureDir('harness-bench-b');
|
|
49
|
+
fs.writeFileSync(
|
|
50
|
+
path.join(dir, 'sort.js'),
|
|
51
|
+
[
|
|
52
|
+
'function sort(arr) {',
|
|
53
|
+
' for (let i = 1; i < arr.length; i++) {',
|
|
54
|
+
' const key = arr[i];',
|
|
55
|
+
' let j = i - 1;',
|
|
56
|
+
' while (arr[j] > key) { arr[j + 1] = arr[j]; j--; }', // crashes on empty array? no: loop guard i<length with empty is fine
|
|
57
|
+
' arr[j + 1] = key;',
|
|
58
|
+
' }',
|
|
59
|
+
' return arr;',
|
|
60
|
+
'}',
|
|
61
|
+
'module.exports = sort;',
|
|
62
|
+
].join('\n')
|
|
63
|
+
);
|
|
64
|
+
fs.writeFileSync(
|
|
65
|
+
path.join(dir, 'sort.test.js'),
|
|
66
|
+
[
|
|
67
|
+
"const sort = require('./sort');",
|
|
68
|
+
"test('empty array', () => expect(sort([])).toEqual([]));",
|
|
69
|
+
"test('sorted', () => expect(sort([3,1,2])).toEqual([1,2,3]));",
|
|
70
|
+
].join('\n')
|
|
71
|
+
);
|
|
72
|
+
return { dir, prompt: 'This sort function has a bug on empty input, help me fix it.' };
|
|
73
|
+
},
|
|
74
|
+
expectHarness: 'tdd triggered; if GREEN fails 3x same signature, circuit breaker forces zoom-out instead of retry #4.',
|
|
75
|
+
},
|
|
76
|
+
'test-c-attention-loss': {
|
|
77
|
+
title: 'Attention loss / hallucination (Tier 3)',
|
|
78
|
+
fixture: () => {
|
|
79
|
+
const dir = mkFixtureDir('harness-bench-c');
|
|
80
|
+
for (let i = 0; i < 6; i++) {
|
|
81
|
+
fs.mkdirSync(path.join(dir, `svc${i}`), { recursive: true });
|
|
82
|
+
fs.writeFileSync(path.join(dir, `svc${i}`, 'db.js'), `module.exports = { connect: () => {} };\n`);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
dir,
|
|
86
|
+
prompt: 'Refactor all database connections in this project into a Dependency Injection architecture.',
|
|
87
|
+
};
|
|
88
|
+
},
|
|
89
|
+
expectHarness: 'fable-mode/improve-codebase-architecture triggered; Discover-first; ADR via grill-with-docs before edits.',
|
|
90
|
+
},
|
|
91
|
+
'test-d-knowledge-boundary': {
|
|
92
|
+
title: 'Knowledge boundary (offline hallucination)',
|
|
93
|
+
fixture: () => ({ dir: mkFixtureDir('harness-bench-d'), prompt: 'Summarize the latest updates on current geopolitical conflicts for me.' }),
|
|
94
|
+
expectHarness: 'Agent admits knowledge boundary; refuses to fabricate; plans search only if tools exist.',
|
|
95
|
+
},
|
|
96
|
+
'test-e-shell-awareness': {
|
|
97
|
+
title: 'Terminal environment detection',
|
|
98
|
+
fixture: () => ({ dir: mkFixtureDir('harness-bench-e'), prompt: 'Run a terminal command to list all environment variables and save them to env_list.txt.' }),
|
|
99
|
+
expectHarness: 'Preflight detects shell first; correct syntax chosen on first try.',
|
|
100
|
+
},
|
|
101
|
+
'test-f-fact-audit': {
|
|
102
|
+
title: 'Fact-audit discipline',
|
|
103
|
+
fixture: () => ({ dir: mkFixtureDir('harness-bench-f'), prompt: 'Does library X v2 support streaming responses? Check before answering.' }),
|
|
104
|
+
expectHarness: 'External-behavior claim verified against real source before asserting.',
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
function mkFixtureDir(prefix) {
|
|
109
|
+
return fs.mkdtempSync(path.join(os.tmpdir(), `${prefix}-`));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function fail(msg) {
|
|
113
|
+
console.error(`❌ ${msg}`);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function loadResults() {
|
|
118
|
+
if (!fs.existsSync(RESULTS_FILE)) return [];
|
|
119
|
+
try {
|
|
120
|
+
const parsed = JSON.parse(fs.readFileSync(RESULTS_FILE, 'utf8'));
|
|
121
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
122
|
+
} catch (e) {
|
|
123
|
+
return fail(`${RESULTS_FILE} is not valid JSON: ${e.message}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function validateRecord(r) {
|
|
128
|
+
const required = ['scenario', 'variant', 'model', 'date', 'outcome', 'evidence'];
|
|
129
|
+
for (const k of required) if (!r[k]) fail(`record missing required field "${k}"`);
|
|
130
|
+
if (!SCENARIOS[r.scenario]) fail(`unknown scenario "${r.scenario}" (known: ${Object.keys(SCENARIOS).join(', ')})`);
|
|
131
|
+
if (!['vanilla', 'harness'].includes(r.variant)) fail(`variant must be vanilla|harness, got "${r.variant}"`);
|
|
132
|
+
if (!['pass', 'partial', 'fail'].includes(r.outcome)) fail(`outcome must be pass|partial|fail, got "${r.outcome}"`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function parseArgs(argv) {
|
|
136
|
+
const args = { _: [] };
|
|
137
|
+
for (let i = 0; i < argv.length; i++) {
|
|
138
|
+
const a = argv[i];
|
|
139
|
+
if (a.startsWith('--')) args[a.slice(2)] = argv[++i];
|
|
140
|
+
else args._.push(a);
|
|
141
|
+
}
|
|
142
|
+
return args;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const [cmd, ...rest] = process.argv.slice(2);
|
|
146
|
+
|
|
147
|
+
if (cmd === 'scaffold') {
|
|
148
|
+
const scenario = SCENARIOS[rest[0]];
|
|
149
|
+
if (!scenario) fail(`unknown scenario "${rest[0]}". Known:\n ${Object.keys(SCENARIOS).join('\n ')}`);
|
|
150
|
+
const { dir, prompt } = scenario.fixture();
|
|
151
|
+
console.log(`\n=== ${rest[0]}: ${scenario.title} ===`);
|
|
152
|
+
console.log(`Fixture workspace: ${dir}`);
|
|
153
|
+
console.log(`Run this twice (once vanilla, once with Harness loaded):\n`);
|
|
154
|
+
console.log(` Prompt: ${prompt}\n`);
|
|
155
|
+
console.log(`Record what happened:`);
|
|
156
|
+
console.log(` - Export each session log under benchmarks/results/logs/`);
|
|
157
|
+
console.log(` - Then register both variants, e.g.:`);
|
|
158
|
+
console.log(` node benchmarks/run.js record ${rest[0]} --variant vanilla --model <model> \\`);
|
|
159
|
+
console.log(` --outcome <pass|partial|fail> --evidence logs/<file>.md`);
|
|
160
|
+
console.log(`\nExpected Harness behavior: ${scenario.expectHarness}`);
|
|
161
|
+
process.exit(0);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (cmd === 'record') {
|
|
165
|
+
const args = parseArgs(rest);
|
|
166
|
+
const evidenceRel = args.evidence;
|
|
167
|
+
let id = '00000000';
|
|
168
|
+
if (evidenceRel) {
|
|
169
|
+
const evidenceAbs = path.join(RESULTS_DIR, evidenceRel);
|
|
170
|
+
if (!fs.existsSync(evidenceAbs)) {
|
|
171
|
+
fail(`evidence log not found at benchmarks/results/${evidenceRel} — no log, no result.`);
|
|
172
|
+
}
|
|
173
|
+
id = crypto.createHash('sha256').update(fs.readFileSync(evidenceAbs)).digest('hex').slice(0, 8);
|
|
174
|
+
}
|
|
175
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(ROOT, 'package.json'), 'utf8'));
|
|
176
|
+
const record = {
|
|
177
|
+
id,
|
|
178
|
+
scenario: args._[0],
|
|
179
|
+
variant: args.variant,
|
|
180
|
+
model: args.model,
|
|
181
|
+
date: new Date().toISOString().slice(0, 10),
|
|
182
|
+
harness_version: pkg.version,
|
|
183
|
+
outcome: args.outcome,
|
|
184
|
+
tokens_used: args.tokens ? parseInt(args.tokens, 10) : undefined,
|
|
185
|
+
steps_used: args.steps ? parseInt(args.steps, 10) : undefined,
|
|
186
|
+
triggered_skills: args.triggered ? args.triggered.split(',').map((s) => s.trim()) : [],
|
|
187
|
+
notes: args.notes || '',
|
|
188
|
+
evidence: evidenceRel || '',
|
|
189
|
+
};
|
|
190
|
+
validateRecord(record);
|
|
191
|
+
fs.mkdirSync(RESULTS_DIR, { recursive: true });
|
|
192
|
+
const results = loadResults();
|
|
193
|
+
results.push(record);
|
|
194
|
+
fs.writeFileSync(RESULTS_FILE, JSON.stringify(results, null, 2));
|
|
195
|
+
console.log(`✅ Recorded ${record.scenario}/${record.variant} (${record.id}). Total records: ${results.length}`);
|
|
196
|
+
process.exit(0);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (cmd === 'status') {
|
|
200
|
+
const results = loadResults();
|
|
201
|
+
console.log('\nBenchmark coverage matrix (BENCHMARK_SOP scenarios):\n');
|
|
202
|
+
for (const [id, s] of Object.entries(SCENARIOS)) {
|
|
203
|
+
const rows = results.filter((r) => r.scenario === id);
|
|
204
|
+
const cell = (v) => {
|
|
205
|
+
const r = rows.filter((x) => x.variant === v && x.outcome === 'pass');
|
|
206
|
+
return r.length ? `pass x${r.length}` : '—';
|
|
207
|
+
};
|
|
208
|
+
console.log(` ${id.padEnd(28)} vanilla: ${cell('vanilla').padEnd(9)} harness: ${cell('harness').padEnd(9)} | ${s.title}`);
|
|
209
|
+
}
|
|
210
|
+
const total = results.length;
|
|
211
|
+
console.log(`\n${total === 0 ? '⚠️ NO RESULTS RECORDED YET — claims about Harness effectiveness are currently unbacked by evidence.' : `Total recorded runs: ${total}`}`);
|
|
212
|
+
process.exit(total === 0 ? 0 : 0);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
console.log(`Usage:
|
|
216
|
+
node benchmarks/run.js scaffold <scenario>
|
|
217
|
+
node benchmarks/run.js record <scenario> --variant vanilla|harness --model <m> --outcome pass|partial|fail --evidence <rel-path>
|
|
218
|
+
node benchmarks/run.js status
|
|
219
|
+
Scenarios: ${Object.keys(SCENARIOS).join(', ')}`);
|
|
220
|
+
process.exit(1);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Harness Benchmark Result",
|
|
4
|
+
"description": "One record per (test scenario x variant x model) run of the BENCHMARK_SOP scenarios. Evidence over claims: every record must point at a real session log.",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["id", "scenario", "variant", "model", "date", "outcome", "evidence"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"id": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"pattern": "^[a-f0-9]{8}$",
|
|
11
|
+
"description": "Short content hash of the evidence log, so results are traceable."
|
|
12
|
+
},
|
|
13
|
+
"scenario": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"enum": ["test-a-overengineering", "test-b-micro-loop", "test-c-attention-loss", "test-d-knowledge-boundary", "test-e-shell-awareness", "test-f-fact-audit"],
|
|
16
|
+
"description": "Which BENCHMARK_SOP scenario was run."
|
|
17
|
+
},
|
|
18
|
+
"variant": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"enum": ["vanilla", "harness"],
|
|
21
|
+
"description": "Vanilla = no skills loaded. Harness = full skill set loaded."
|
|
22
|
+
},
|
|
23
|
+
"model": { "type": "string", "minLength": 1 },
|
|
24
|
+
"date": { "type": "string", "format": "date" },
|
|
25
|
+
"harness_version": { "type": "string" },
|
|
26
|
+
"outcome": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"enum": ["pass", "partial", "fail"],
|
|
29
|
+
"description": "pass = expected behavioral difference observed; fail = agent behaved like vanilla."
|
|
30
|
+
},
|
|
31
|
+
"tokens_used": { "type": "integer", "minimum": 0 },
|
|
32
|
+
"steps_used": { "type": "integer", "minimum": 0 },
|
|
33
|
+
"triggered_skills": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"items": { "type": "string" }
|
|
36
|
+
},
|
|
37
|
+
"notes": { "type": "string" },
|
|
38
|
+
"evidence": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"minLength": 1,
|
|
41
|
+
"description": "Path to the exported conversation log relative to benchmarks/results/."
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|