harness-everything 0.3.6 → 0.4.1
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/.agents/plugins/marketplace.json +20 -0
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +8 -7
- package/.github/workflows/behavioral-evals.yml +3 -3
- package/.github/workflows/ci.yml +49 -28
- package/.github/workflows/release.yml +52 -27
- package/.nvmrc +1 -0
- package/.releaserc.json +113 -0
- package/AGENTS.md +44 -24
- package/BENCHMARK_SOP.md +38 -18
- package/CHANGELOG.md +196 -3
- package/CONTRIBUTING.md +37 -9
- package/Dockerfile +1 -1
- package/PRIVACY.md +25 -0
- package/README.md +126 -91
- package/RELEASING.md +93 -0
- package/SUPPORT.md +27 -0
- package/TERMS.md +21 -0
- package/VERIFICATION.md +192 -284
- package/behavioral-evals/README.md +21 -0
- package/behavioral-evals/case-validator.js +194 -0
- package/behavioral-evals/cases/baseline-environment-detection.yaml +21 -0
- package/behavioral-evals/cases/baseline-eval-harness.yaml +27 -0
- package/behavioral-evals/cases/baseline-fable-discipline.yaml +31 -0
- package/behavioral-evals/cases/baseline-find-skills-exposure.yaml +49 -0
- package/behavioral-evals/cases/baseline-find-skills.yaml +21 -0
- package/behavioral-evals/cases/baseline-git-commit.yaml +2 -2
- package/behavioral-evals/cases/baseline-install-cognitive-os.yaml +24 -0
- package/behavioral-evals/cases/baseline-multi-agent-workspace.yaml +28 -0
- package/behavioral-evals/cases/baseline-rewrite-commits.yaml +34 -0
- package/behavioral-evals/cases/baseline-self-evolve.yaml +31 -0
- package/behavioral-evals/cases/baseline-skill-creator.yaml +20 -0
- package/behavioral-evals/cases/baseline-skill-style.yaml +21 -0
- package/behavioral-evals/cases/baseline-to-spec.yaml +34 -0
- package/behavioral-evals/cases/baseline-to-tickets.yaml +24 -0
- package/behavioral-evals/cases/baseline-todo-driven-workflow.yaml +32 -0
- package/behavioral-evals/cases/baseline-using-git-worktrees.yaml +15 -0
- package/behavioral-evals/cases/breaker-zoom-out-after-3.yaml +2 -2
- package/behavioral-evals/cases/pressure-complexity-skip.yaml +2 -2
- package/behavioral-evals/cases/pressure-scope-bypass.yaml +7 -2
- package/behavioral-evals/cases/pressure-sunk-cost-retry.yaml +7 -4
- package/behavioral-evals/cases/scope-discipline.yaml +2 -1
- package/behavioral-evals/cases/verify-before-done.yaml +7 -5
- package/behavioral-evals/evidence/2026-09-07/baseline-debugging/case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-debugging/historical-case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-debugging/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-debugging/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-performance/case.yaml +34 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-performance/historical-case.yaml +34 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-performance/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-performance/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-security-review/case.yaml +28 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-security-review/historical-case.yaml +28 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-security-review/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-security-review/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/historical-case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/baseline-simple-bugfix/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/case.yaml +28 -0
- package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/historical-case.yaml +18 -0
- package/behavioral-evals/evidence/2026-09-07/grill-me-adversarial/provenance.json +30 -0
- package/behavioral-evals/evidence/2026-09-07/live-run-blocker.md +16 -0
- package/behavioral-evals/evidence/2026-09-07/manifest.json +88 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/historical-case.yaml +28 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-scope-bypass/provenance.json +30 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/historical-case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-docs/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/case.yaml +35 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/historical-case.yaml +35 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-error-handling/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/historical-case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification/result.sanitized.json +24 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/historical-case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-23-pressure-skip-verification/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/historical-case.yaml +43 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-skip-verification--2026-08-27-pressure-skip-verification/result.sanitized.json +24 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/historical-case.yaml +47 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry/result.sanitized.json +24 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/historical-case.yaml +47 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-23-pressure-sunk-cost-retry/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/case.yaml +50 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/historical-case.yaml +47 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/pressure-sunk-cost-retry--2026-08-27-pressure-sunk-cost-retry/result.sanitized.json +24 -0
- package/behavioral-evals/evidence/2026-09-07/tdd-test-first/case.yaml +30 -0
- package/behavioral-evals/evidence/2026-09-07/tdd-test-first/historical-case.yaml +23 -0
- package/behavioral-evals/evidence/2026-09-07/tdd-test-first/provenance.json +30 -0
- package/behavioral-evals/evidence/2026-09-07/triage-matrix.json +426 -0
- package/behavioral-evals/evidence/2026-09-07/triage-matrix.md +24 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/case.yaml +19 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/historical-case.yaml +18 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-claim-cites/provenance.json +30 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done/historical-case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/historical-case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-23-verify-before-done/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/historical-case.yaml +31 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-07/verify-before-done--2026-08-27-verify-before-done/result.sanitized.json +20 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/historical-case.yaml +33 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/provenance.json +42 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/result.sanitized.json +480 -0
- package/behavioral-evals/evidence/2026-09-09/pressure-scope-bypass/transcript.sanitized.jsonl +95 -0
- package/behavioral-evals/evidence-tool.js +443 -0
- package/behavioral-evals/fixtures/claude-denied.jsonl +3 -0
- package/behavioral-evals/fixtures/claude-legacy.json +1 -0
- package/behavioral-evals/fixtures/claude-oral-only.jsonl +2 -0
- package/behavioral-evals/fixtures/claude-success.jsonl +5 -0
- package/behavioral-evals/fixtures/claude-truncated.jsonl +3 -0
- package/behavioral-evals/fixtures/opencode-success.jsonl +6 -0
- package/behavioral-evals/results/2026-08-31-baseline-add-feature.json +20 -0
- package/behavioral-evals/results/2026-09-03-baseline-environment-detection-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-baseline-eval-harness-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-fable-discipline-pair.json +149 -0
- package/behavioral-evals/results/2026-09-03-baseline-find-skills-exposure-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-find-skills-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-install-cognitive-os-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-baseline-multi-agent-workspace-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-rewrite-commits-pair.json +95 -0
- package/behavioral-evals/results/2026-09-03-baseline-self-evolve-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-skill-creator-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-skill-style-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-baseline-to-spec-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-baseline-to-tickets-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-todo-driven-workflow-pair.json +141 -0
- package/behavioral-evals/results/2026-09-03-baseline-using-git-worktrees-pair.json +133 -0
- package/behavioral-evals/results/2026-09-03-summary-both.json +41 -0
- package/behavioral-evals/results/2026-09-04-baseline-find-skills-pair.json +141 -0
- package/behavioral-evals/results/2026-09-04-baseline-self-evolve-treatment.json +80 -0
- package/behavioral-evals/results/2026-09-04-baseline-skill-creator-treatment.json +80 -0
- package/behavioral-evals/results/2026-09-04-summary-both.json +41 -0
- package/behavioral-evals/run-with-plugin.js +15 -31
- package/behavioral-evals/run.js +446 -105
- package/behavioral-evals/transcript-parser.js +591 -0
- package/bin/cli.js +24 -12
- package/ci/ab-test-cases/grill-me-adversarial.yaml +14 -4
- package/ci/ab-test-cases/tdd-test-first.yaml +13 -6
- package/ci/ab-test-cases/verification-loop-gates.yaml +20 -7
- package/ci/ab-test-cases/verify-before-claim-cites.yaml +7 -6
- package/ci/ab-test-harness.js +113 -38
- package/ci/action-gate-platform-doc.test.js +31 -0
- package/ci/action-gate.test.js +260 -0
- package/ci/cases/case2.json +2 -2
- package/ci/consistency-check.js +51 -5
- package/ci/description-collision.js +15 -6
- package/ci/disclosure-check.js +225 -0
- package/ci/doc-capability-consistency.test.js +180 -0
- package/ci/fixtures/phase4/parallel-disjoint.stages.json +32 -0
- package/ci/fixtures/phase4/parallel-read-only.stages.json +32 -0
- package/ci/installer-roundtrip.test.js +159 -0
- package/ci/invariant-routing.test.js +74 -0
- package/ci/issue99-runtime.test.js +218 -0
- package/ci/mechanism-2aa-codex-action-gate-policy.test.js +117 -0
- package/ci/mechanism-2ab-openai-plugin-sync-integrity.test.js +80 -0
- package/ci/mechanism-2j-behavioral-runner.test.js +43 -1
- package/ci/mechanism-2k-reference-check.test.js +57 -2
- package/ci/mechanism-2l-multi-agent-workspace.test.js +202 -6
- package/ci/mechanism-2m-self-repo-guard.test.js +65 -0
- package/ci/mechanism-2n-opencode-plugin.test.js +461 -0
- package/ci/mechanism-2o-state-home-isolation.test.js +183 -0
- package/ci/mechanism-2p-installer-links.test.js +183 -0
- package/ci/mechanism-2q-installer-global-shared-store.test.js +132 -0
- package/ci/mechanism-2r-uninstall-flags.test.js +148 -0
- package/ci/mechanism-2s-tdd-quality.test.js +203 -0
- package/ci/mechanism-2t-disclosure.test.js +90 -0
- package/ci/mechanism-2t-evidence-triage.test.js +200 -0
- package/ci/mechanism-2t-issue-20.test.js +75 -0
- package/ci/mechanism-2t-platform-skill-targets.test.js +164 -0
- package/ci/mechanism-2t-transcript-parser.test.js +179 -0
- package/ci/mechanism-2t-workspace-identity.test.js +200 -0
- package/ci/mechanism-2u-issue-42-regressions.test.js +239 -0
- package/ci/mechanism-2u-issue-44.test.js +35 -0
- package/ci/mechanism-2v-verifier-boundaries.test.js +138 -0
- package/ci/mechanism-2w-platform-compatibility.test.js +148 -0
- package/ci/mechanism-2x-release-automation.test.js +157 -0
- package/ci/mechanism-2x-release-commit-message.test.js +66 -0
- package/ci/mechanism-2y-release-tooling-compat.test.js +47 -0
- package/ci/mechanism-2z-claude-plugin-manifest.test.js +29 -0
- package/ci/mutation-check.js +53 -0
- package/ci/mutation-loader.js +57 -0
- package/ci/negative-controls.js +76 -46
- package/ci/openai-plugin-package.test.js +182 -0
- package/ci/openai-plugin-runtime.test.js +175 -0
- package/ci/openai-plugin-submission.test.js +101 -0
- package/ci/phase4-ensemble-memory.test.js +307 -0
- package/ci/reference-check.js +73 -25
- package/ci/release-consistency-check.js +24 -1
- package/ci/repository-contract.test.js +17 -0
- package/ci/router-phase2-safety.test.js +81 -0
- package/ci/router-workflow-plan.test.js +264 -0
- package/ci/routing-check.js +6 -5
- package/ci/runner.js +6 -5
- package/ci/skill-routing-check.js +48 -11
- package/ci/test-behavioral-case-validation.js +62 -0
- package/ci/test-helper.js +10 -0
- package/ci/workflow-plan-consumers-edge.test.js +72 -0
- package/ci/workflow-plan-consumers.test.js +276 -0
- package/docs/architecture.md +137 -57
- package/docs/audit.md +22 -20
- package/docs/codex-action-gate.md +90 -0
- package/docs/issue-20-rollup.md +47 -0
- package/docs/mechanism-first-skill-mesh.md +22 -20
- package/docs/openai-plugin.md +118 -0
- package/docs/philosophy.md +28 -17
- package/docs/platform-capabilities.md +73 -0
- package/docs/platform-compatibility.json +270 -0
- package/docs/reflection.md +37 -22
- package/docs/release-evidence.md +27 -0
- package/docs/repository-contract.md +27 -0
- package/docs/routing.md +157 -44
- package/docs/security-audit.md +38 -0
- package/docs/troubleshooting.md +94 -51
- package/docs/verifier-boundaries.md +45 -0
- package/docs/workflows/fable-mode.md +77 -21
- package/docs/workflows/find-skills.md +40 -0
- package/docs/workflows/grill-with-docs.md +2 -2
- package/docs/workflows/multi-agent-workspace.md +22 -10
- package/docs/workflows/self-evolve.md +33 -0
- package/docs/workflows/tdd.md +36 -0
- package/docs/workflows/todo-driven-workflow.md +33 -0
- package/environment-detection/SKILL.md +3 -3
- package/eval-harness/SKILL.md +7 -7
- package/eval-harness/scripts/evaluate.js +12 -10
- package/evals/evaluation-reports.md +14 -0
- package/evals/harness-everything/tasks/positive-tier1.yaml +1 -1
- package/evals/harness-everything/tasks/positive-tier2.yaml +1 -1
- package/evals/harness-everything/tasks/positive-tier3.yaml +1 -1
- package/evals/install-cognitive-os/tasks/positive-trigger.yaml +1 -1
- package/fable-discipline/SKILL.md +2 -2
- package/fable-mode/CONTRACT-FORMAT.md +147 -33
- package/fable-mode/SKILL.md +3 -3
- package/fable-mode/agents/fable-orchestrator.md +95 -35
- package/fable-mode/execution-guardrails/SKILL.md +2 -2
- package/fable-mode/fable-haiku/SKILL.md +3 -3
- package/fable-mode/fable-opus/SKILL.md +3 -3
- package/fable-mode/fable-sonnet/SKILL.md +3 -3
- package/fable-mode/scripts/ensemble-review.js +371 -0
- package/fable-mode/scripts/model-selector.js +134 -3
- package/fable-mode/scripts/workflow-plan-consumer.js +337 -0
- package/find-skills/SKILL.md +5 -5
- package/find-skills/references/discovery-flow.md +1 -1
- package/find-skills/scripts/use-skill.js +7 -1
- package/git-commit/SKILL.md +4 -11
- package/grill-me/SKILL.md +5 -5
- package/grill-with-docs/SKILL.md +7 -7
- package/grill-with-docs/references/session-playbook.md +6 -4
- package/harness-everything/SKILL.md +23 -22
- package/harness-everything/references/router-workflow-plan.md +128 -0
- package/harness-everything/references/triage-and-tiers.md +173 -96
- package/harness-everything/schemas/router-task-shape.schema.json +126 -0
- package/harness-everything/schemas/router-workflow-plan.schema.json +149 -0
- package/harness-everything/scripts/bootstrap.js +13 -4
- package/harness-everything/scripts/ensemble-policy.js +102 -0
- package/harness-everything/scripts/kernel-router.js +212 -0
- package/harness-everything/scripts/router-contract.js +612 -0
- package/harness-everything/scripts/self-heal.js +29 -20
- package/harness-everything/scripts/tier-router.js +346 -221
- package/hooks/hooks.json +60 -15
- package/hooks/scripts/action-gate-rules.json +77 -0
- package/hooks/scripts/action-gate.js +528 -0
- package/hooks/scripts/atomic-commit-check.js +5 -5
- package/hooks/scripts/codex-action-gate-post.js +46 -0
- package/hooks/scripts/codex-permission-request.js +140 -0
- package/hooks/scripts/context-compact.js +4 -3
- package/hooks/scripts/contract-test.js +118 -51
- package/hooks/scripts/lib/fable-contracts.js +121 -0
- package/hooks/scripts/lib/harness-state.js +164 -28
- package/hooks/scripts/lib/platforms/claude.js +45 -62
- package/hooks/scripts/lib/platforms/codex.js +35 -61
- package/hooks/scripts/lib/platforms/continue.js +7 -7
- package/hooks/scripts/lib/platforms/copilot.js +29 -53
- package/hooks/scripts/lib/platforms/hermes.js +71 -20
- package/hooks/scripts/openai-session-start.js +81 -0
- package/hooks/scripts/rule-of-3-tracker.js +9 -8
- package/hooks/scripts/rule-of-3.js +29 -21
- package/hooks/scripts/state-persist.js +5 -4
- package/hooks/scripts/stop-gate.js +2 -2
- package/hooks/scripts/subagent-scope-guard.js +144 -38
- package/hooks/scripts/subagent-start.js +19 -0
- package/hooks/scripts/subagent-stop.js +6 -0
- package/improve-codebase-architecture/SKILL.md +2 -4
- package/improve-codebase-architecture/references/README.md +16 -0
- package/install-cognitive-os/SKILL.md +28 -22
- package/multi-agent-workspace/SKILL.md +16 -15
- package/multi-agent-workspace/references/architecture-guide.md +13 -9
- package/multi-agent-workspace/references/orchestration.md +39 -22
- package/multi-agent-workspace/scripts/consume-workflow-plan.js +129 -0
- package/multi-agent-workspace/scripts/index_memory.js +79 -26
- package/multi-agent-workspace/scripts/path-boundary.js +59 -0
- package/multi-agent-workspace/scripts/project-docs-resolver.js +357 -0
- package/multi-agent-workspace/scripts/scaffold.js +258 -103
- package/multi-agent-workspace/templates/AGENTS.md +20 -0
- package/multi-agent-workspace/workflows/03-generation.md +8 -10
- package/multi-agent-workspace/workflows/04-launcher.md +5 -5
- package/opencode-plugin/README.md +114 -71
- package/opencode-plugin/hooks/verify.js +62 -12
- package/opencode-plugin/index.mjs +547 -0
- package/opencode-plugin/plugin.json +4 -12
- package/package.json +20 -4
- package/plugins/harness-everything/.codex-plugin/plugin.json +39 -0
- package/plugins/harness-everything/hooks/hooks.json +197 -0
- package/plugins/harness-everything/hooks/scripts/action-gate-rules.json +77 -0
- package/plugins/harness-everything/hooks/scripts/action-gate.js +528 -0
- package/plugins/harness-everything/hooks/scripts/atomic-commit-check.js +68 -0
- package/plugins/harness-everything/hooks/scripts/boundary-guard.js +55 -0
- package/plugins/harness-everything/hooks/scripts/codex-action-gate-post.js +46 -0
- package/plugins/harness-everything/hooks/scripts/codex-permission-request.js +140 -0
- package/plugins/harness-everything/hooks/scripts/context-compact.js +115 -0
- package/plugins/harness-everything/hooks/scripts/contract-test.js +146 -0
- package/plugins/harness-everything/hooks/scripts/depth-guard.js +65 -0
- package/plugins/harness-everything/hooks/scripts/lib/fable-contracts.js +121 -0
- package/plugins/harness-everything/hooks/scripts/lib/harness-state.js +275 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/claude.js +168 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/codex.js +88 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/continue.js +91 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/copilot.js +85 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/cursor.js +89 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/hermes.js +108 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/index.js +17 -0
- package/plugins/harness-everything/hooks/scripts/lib/platforms/worktrees.js +20 -0
- package/plugins/harness-everything/hooks/scripts/lib/workspace.js +290 -0
- package/plugins/harness-everything/hooks/scripts/openai-session-start.js +81 -0
- package/plugins/harness-everything/hooks/scripts/reset-circuit-breaker.js +30 -0
- package/plugins/harness-everything/hooks/scripts/rule-of-3-tracker.js +125 -0
- package/plugins/harness-everything/hooks/scripts/rule-of-3.js +195 -0
- package/plugins/harness-everything/hooks/scripts/state-persist.js +100 -0
- package/plugins/harness-everything/hooks/scripts/stop-gate.js +80 -0
- package/plugins/harness-everything/hooks/scripts/subagent-scope-guard.js +194 -0
- package/plugins/harness-everything/hooks/scripts/subagent-start.js +19 -0
- package/plugins/harness-everything/hooks/scripts/subagent-stop.js +6 -0
- package/plugins/harness-everything/hooks/session-start.js +81 -0
- package/plugins/harness-everything/plugin.json +43 -0
- package/plugins/harness-everything/scripts/lib/advisory-text.js +174 -0
- package/plugins/harness-everything/skills/environment-detection/SKILL.md +41 -0
- package/plugins/harness-everything/skills/environment-detection/references/shell-syntax-rules.md +76 -0
- package/plugins/harness-everything/skills/environment-detection/scripts/preflight.js +103 -0
- package/plugins/harness-everything/skills/eval-harness/SKILL.md +42 -0
- package/plugins/harness-everything/skills/eval-harness/references/scoring-rubric.md +68 -0
- package/plugins/harness-everything/skills/eval-harness/scripts/evaluate.js +79 -0
- package/plugins/harness-everything/skills/fable-discipline/SKILL.md +41 -0
- package/plugins/harness-everything/skills/fable-discipline/references/discipline-rules.md +22 -0
- package/plugins/harness-everything/skills/fable-mode/CONTRACT-FORMAT.md +165 -0
- package/plugins/harness-everything/skills/fable-mode/SKILL.md +39 -0
- package/plugins/harness-everything/skills/fable-mode/agents/fable-orchestrator.md +159 -0
- package/plugins/harness-everything/skills/fable-mode/agents/fable-verifier.md +32 -0
- package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-haiku.md +52 -0
- package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-sonnet.md +53 -0
- package/plugins/harness-everything/skills/fable-mode/execution-guardrails/SKILL.md +43 -0
- package/plugins/harness-everything/skills/fable-mode/execution-guardrails/references/guardrail-rules.md +56 -0
- package/plugins/harness-everything/skills/fable-mode/fable-haiku/SKILL.md +36 -0
- package/plugins/harness-everything/skills/fable-mode/fable-haiku/references/routing-notes.md +26 -0
- package/plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md +36 -0
- package/plugins/harness-everything/skills/fable-mode/fable-sonnet/SKILL.md +36 -0
- package/plugins/harness-everything/skills/fable-mode/model-matrix.json +32 -0
- package/plugins/harness-everything/skills/fable-mode/references/execution-phases.md +37 -0
- package/plugins/harness-everything/skills/fable-mode/references/model-matrix.md +39 -0
- package/plugins/harness-everything/skills/fable-mode/scripts/ensemble-review.js +371 -0
- package/plugins/harness-everything/skills/fable-mode/scripts/model-selector.js +260 -0
- package/plugins/harness-everything/skills/fable-mode/scripts/workflow-plan-consumer.js +337 -0
- package/plugins/harness-everything/skills/find-skills/SKILL.md +48 -0
- package/plugins/harness-everything/skills/find-skills/references/discovery-flow.md +102 -0
- package/plugins/harness-everything/skills/find-skills/scripts/use-skill.js +112 -0
- package/plugins/harness-everything/skills/git-commit/SKILL.md +38 -0
- package/plugins/harness-everything/skills/git-commit/guides/ANGULAR_STYLE.md +61 -0
- package/plugins/harness-everything/skills/git-commit/guides/COMMIT_GENERATION.md +24 -0
- package/plugins/harness-everything/skills/git-commit/guides/LANGUAGE_DETECTION.md +16 -0
- package/plugins/harness-everything/skills/git-commit/guides/MAIN_REPO.md +15 -0
- package/plugins/harness-everything/skills/git-commit/guides/SUBMODULES.md +27 -0
- package/plugins/harness-everything/skills/git-commit/references/commit-flow.md +30 -0
- package/plugins/harness-everything/skills/grill-me/SKILL.md +43 -0
- package/plugins/harness-everything/skills/grill-me/references/grilling-playbook.md +38 -0
- package/plugins/harness-everything/skills/grill-with-docs/ADR-FORMAT.md +47 -0
- package/plugins/harness-everything/skills/grill-with-docs/CONTEXT-FORMAT.md +63 -0
- package/plugins/harness-everything/skills/grill-with-docs/SKILL.md +41 -0
- package/plugins/harness-everything/skills/grill-with-docs/references/session-playbook.md +99 -0
- package/plugins/harness-everything/skills/harness-everything/SKILL.md +43 -0
- package/plugins/harness-everything/skills/harness-everything/examples/README.md +9 -0
- package/plugins/harness-everything/skills/harness-everything/examples/todo-workflow.md +22 -0
- package/plugins/harness-everything/skills/harness-everything/references/router-workflow-plan.md +128 -0
- package/plugins/harness-everything/skills/harness-everything/references/skill-registry.md +39 -0
- package/plugins/harness-everything/skills/harness-everything/references/triage-and-tiers.md +193 -0
- package/plugins/harness-everything/skills/harness-everything/schemas/router-task-shape.schema.json +126 -0
- package/plugins/harness-everything/skills/harness-everything/schemas/router-workflow-plan.schema.json +149 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/bootstrap.js +212 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/ensemble-policy.js +102 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router.js +212 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/router-contract.js +612 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/routing-keywords.json +320 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/self-heal.js +250 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/tier-router.js +459 -0
- package/plugins/harness-everything/skills/harness-everything/scripts/verify-gate.js +100 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/SKILL.md +38 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/DEEPENING.md +37 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/HTML-REPORT.md +123 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/INTERFACE-DESIGN.md +44 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/LANGUAGE.md +53 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/guides/refactoring-workflow.md +59 -0
- package/plugins/harness-everything/skills/improve-codebase-architecture/references/README.md +16 -0
- package/plugins/harness-everything/skills/install-cognitive-os/SKILL.md +44 -0
- package/plugins/harness-everything/skills/install-cognitive-os/references/cognitive-loop.md +27 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/NOTICE-agency-agents.md +27 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/SKILL.md +38 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/examples/csharp-monorepo.md +123 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/examples/typescript-cli.md +126 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-claude.md +77 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-codex.md +146 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-continue.md +38 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-copilot.md +74 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-cursor.md +40 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/platform-hermes.md +38 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/guidelines/role-capabilities.md +108 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/references/agency-agents.md +31 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/references/architecture-guide.md +36 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/references/orchestration.md +65 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/agency-catalog.js +190 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/consume-workflow-plan.js +129 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/index_memory.js +104 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/path-boundary.js +59 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/project-docs-resolver.js +357 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/scripts/scaffold.js +408 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/AGENTS.md +20 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/README.md +17 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/agent-launcher.md +68 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-csharp.md +56 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-polyglot.md +62 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/backend-developer-ts.md +57 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/memory-keeper.md +37 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/requirement-analyzer.md +66 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/specialist-agent.md +34 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/task-verifier.md +56 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/templates/tool-maker.md +33 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/workflows/01-init.md +22 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/workflows/02-analysis.md +23 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/workflows/03-generation.md +25 -0
- package/plugins/harness-everything/skills/multi-agent-workspace/workflows/04-launcher.md +16 -0
- package/plugins/harness-everything/skills/repo-docs/SKILL.md +42 -0
- package/plugins/harness-everything/skills/repo-docs/references/process-guide.md +60 -0
- package/plugins/harness-everything/skills/repo-docs/templates/agents-template.md +264 -0
- package/plugins/harness-everything/skills/repo-docs/templates/knowledge-agents-template.md +50 -0
- package/plugins/harness-everything/skills/repo-docs/templates/knowledge-readme-template.md +83 -0
- package/plugins/harness-everything/skills/repo-docs/templates/manual-recon.md +117 -0
- package/plugins/harness-everything/skills/repo-docs/templates/multi-skills-readme-template.md +72 -0
- package/plugins/harness-everything/skills/repo-docs/templates/product-agents-template.md +78 -0
- package/plugins/harness-everything/skills/repo-docs/templates/product-readme-template.md +95 -0
- package/plugins/harness-everything/skills/repo-docs/templates/readme-template.md +136 -0
- package/plugins/harness-everything/skills/repo-docs/templates/single-skill-readme-template.md +70 -0
- package/plugins/harness-everything/skills/repo-docs/templates/skills-agents-template.md +60 -0
- package/plugins/harness-everything/skills/rewrite-commits/SKILL.md +37 -0
- package/plugins/harness-everything/skills/rewrite-commits/references/workflow.md +18 -0
- package/plugins/harness-everything/skills/security-review/SKILL.md +47 -0
- package/plugins/harness-everything/skills/security-review/guides/OWASP-PATTERNS.md +31 -0
- package/plugins/harness-everything/skills/security-review/guides/STRIDE-THREAT-MODEL.md +21 -0
- package/plugins/harness-everything/skills/security-review/references/security-checklist.md +478 -0
- package/plugins/harness-everything/skills/security-review/scripts/audit-secrets.js +85 -0
- package/plugins/harness-everything/skills/self-evolve/SKILL.md +45 -0
- package/plugins/harness-everything/skills/self-evolve/references/memory-resolution.md +61 -0
- package/plugins/harness-everything/skills/self-evolve/scripts/persist-memory.js +272 -0
- package/plugins/harness-everything/skills/self-evolve/scripts/register-dynamic-skill.js +253 -0
- package/plugins/harness-everything/skills/self-evolve/scripts/self-regression.js +125 -0
- package/plugins/harness-everything/skills/skill-creator/SKILL.md +47 -0
- package/plugins/harness-everything/skills/skill-creator/references/authoring-workflow.md +14 -0
- package/plugins/harness-everything/skills/skill-creator/references/dynamic-generation-contract.md +21 -0
- package/plugins/harness-everything/skills/skill-creator/references/quality-checklist.md +16 -0
- package/plugins/harness-everything/skills/skill-creator/references/quality-principles.md +81 -0
- package/plugins/harness-everything/skills/skill-creator/references/testing-workflow.md +27 -0
- package/plugins/harness-everything/skills/skill-style/SKILL.md +42 -0
- package/plugins/harness-everything/skills/skill-style/references/style-guide.md +62 -0
- package/plugins/harness-everything/skills/tdd/SKILL.md +38 -0
- package/plugins/harness-everything/skills/tdd/fixtures/pass-evidence.json +100 -0
- package/plugins/harness-everything/skills/tdd/fixtures/quality-scenarios.json +20 -0
- package/plugins/harness-everything/skills/tdd/guides/deep-modules.md +33 -0
- package/plugins/harness-everything/skills/tdd/guides/interface-design.md +31 -0
- package/plugins/harness-everything/skills/tdd/guides/mocking.md +59 -0
- package/plugins/harness-everything/skills/tdd/guides/refactoring.md +10 -0
- package/plugins/harness-everything/skills/tdd/guides/tests.md +61 -0
- package/plugins/harness-everything/skills/tdd/references/core-discipline.md +51 -0
- package/plugins/harness-everything/skills/tdd/references/integration-testing.md +13 -0
- package/plugins/harness-everything/skills/tdd/references/quality-model.md +68 -0
- package/plugins/harness-everything/skills/tdd/references/unit-testing.md +15 -0
- package/plugins/harness-everything/skills/tdd/schemas/quality-evidence.schema.json +211 -0
- package/plugins/harness-everything/skills/tdd/schemas/quality-report.schema.json +110 -0
- package/plugins/harness-everything/skills/tdd/scripts/quality-gate.js +475 -0
- package/plugins/harness-everything/skills/to-spec/SKILL.md +40 -0
- package/plugins/harness-everything/skills/to-spec/references/process.md +77 -0
- package/plugins/harness-everything/skills/to-spec/scripts/check-project-docs.js +239 -0
- package/plugins/harness-everything/skills/to-spec/scripts/project-docs-resolver.js +111 -0
- package/plugins/harness-everything/skills/to-spec/templates/cli-reference.md +31 -0
- package/plugins/harness-everything/skills/to-spec/templates/dev-doc.md +27 -0
- package/plugins/harness-everything/skills/to-spec/templates/feature-spec.md +59 -0
- package/plugins/harness-everything/skills/to-spec/templates/schema-doc.md +31 -0
- package/plugins/harness-everything/skills/to-tickets/SKILL.md +42 -0
- package/plugins/harness-everything/skills/to-tickets/references/publishing-and-templates.md +97 -0
- package/plugins/harness-everything/skills/todo-driven-workflow/SKILL.md +42 -0
- package/plugins/harness-everything/skills/todo-driven-workflow/references/execution-guide.md +27 -0
- package/plugins/harness-everything/skills/using-git-worktrees/SKILL.md +49 -0
- package/plugins/harness-everything/skills/using-git-worktrees/references/workflow-details.md +108 -0
- package/plugins/harness-everything/skills/verification-loop/SKILL.md +46 -0
- package/plugins/harness-everything/skills/verification-loop/references/verification-phases.md +116 -0
- package/plugins/harness-everything/skills/verification-loop/templates/verification-report.template.md +15 -0
- package/plugins/harness-everything/skills/verify-before-claim/SKILL.md +43 -0
- package/plugins/harness-everything/skills/verify-before-claim/references/verification-guide.md +73 -0
- package/plugins/harness-everything/skills/zoom-out/SKILL.md +42 -0
- package/plugins/harness-everything/skills/zoom-out/references/circuit-breaker.md +66 -0
- package/plugins/harness-everything/skills/zoom-out/templates/zoom-out-report.template.md +20 -0
- package/repo-docs/SKILL.md +3 -7
- package/rewrite-commits/SKILL.md +2 -2
- package/scripts/build-openai-submission.js +158 -0
- package/scripts/installer.js +86 -11
- package/scripts/lib/advisory-text.js +25 -18
- package/scripts/lib/execution-contract.js +70 -0
- package/scripts/lib/manifest.js +34 -38
- package/scripts/lib/path-boundary.js +90 -0
- package/scripts/lib/skills.js +124 -70
- package/scripts/lib/workspace.js +269 -7
- package/scripts/repository-contract.js +213 -0
- package/scripts/sync-current-docs.js +12 -0
- package/scripts/sync-openai-plugin.js +91 -0
- package/scripts/sync-release-version.js +212 -0
- package/security-review/SKILL.md +4 -7
- package/security-review/scripts/audit-secrets.js +9 -8
- package/self-evolve/SKILL.md +9 -11
- package/self-evolve/references/memory-resolution.md +4 -1
- package/self-evolve/scripts/persist-memory.js +221 -88
- package/self-evolve/scripts/register-dynamic-skill.js +12 -10
- package/self-evolve/scripts/self-regression.js +23 -8
- package/skill-creator/SKILL.md +12 -14
- package/skill-creator/references/quality-checklist.md +1 -0
- package/skill-style/SKILL.md +4 -4
- package/skill-style/references/style-guide.md +29 -3
- package/submission/openai/README.md +67 -0
- package/submission/openai/listing.json +31 -0
- package/submission/openai/test-cases.json +61 -0
- package/tdd/SKILL.md +20 -26
- package/tdd/fixtures/pass-evidence.json +100 -0
- package/tdd/fixtures/quality-scenarios.json +20 -0
- package/tdd/references/core-discipline.md +2 -0
- package/tdd/references/integration-testing.md +13 -0
- package/tdd/references/quality-model.md +68 -0
- package/tdd/references/unit-testing.md +15 -0
- package/tdd/schemas/quality-evidence.schema.json +211 -0
- package/tdd/schemas/quality-report.schema.json +110 -0
- package/tdd/scripts/quality-gate.js +475 -0
- package/to-spec/SKILL.md +3 -5
- package/to-spec/scripts/check-project-docs.js +42 -62
- package/to-spec/scripts/project-docs-resolver.js +111 -0
- package/to-tickets/SKILL.md +4 -4
- package/todo-driven-workflow/SKILL.md +6 -4
- package/using-git-worktrees/SKILL.md +3 -3
- package/verification-loop/SKILL.md +4 -4
- package/verify-before-claim/SKILL.md +2 -2
- package/zoom-out/SKILL.md +4 -4
- package/ab-test-deep-analysis-2026-08-27.md +0 -383
- package/ab-test-results-2026-08-27.md +0 -152
- package/ab-test-statistical-analysis-31cases.md +0 -193
- package/opencode-plugin/hooks/circuit-breaker.js +0 -121
- package/opencode-plugin/hooks/compliance.js +0 -128
- package/opencode-plugin/hooks/post-edit.js +0 -62
- package/opencode-plugin/hooks/pre-complete.js +0 -65
- package/opencode-plugin/test-hook-firing.js +0 -198
package/docs/routing.md
CHANGED
|
@@ -1,58 +1,171 @@
|
|
|
1
1
|
# Harness Routing & Task Triage
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Harness classifies software work into three tiers to prevent both over-engineering and under-planning. **The tier is a scope recommendation, not a workflow pipeline.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The current architecture follows one rule:
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
> **Do not enforce workflow order. Enforce workflow invariants.**
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
A strong model should be free to decide how to complete the task. Harness protects only the small set of behaviors that must not disappear when the host chooses a peer/domain skill directly.
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## Kernel invariants
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
For software/project work, Harness establishes three mandatory rails before mutation:
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
1. **Route before execution** — establish task scope/tier.
|
|
16
|
+
2. **Verify before claim** — completion requires objective evidence appropriate to the change.
|
|
17
|
+
3. **Re-plan after repeated failure** — after three same-signature failures, stop micro-retrying and use a fresh diagnosis / `zoom-out`.
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
Skill selection, ordering, planning style, and delegation remain agent decisions unless the user or an authoritative project contract explicitly requires them.
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
## Public routing path
|
|
20
22
|
|
|
23
|
+
```text
|
|
24
|
+
kernel-router.js
|
|
25
|
+
├─ delegates classification / guide discovery → tier-router.js
|
|
26
|
+
├─ preserves tier + rationale + dynamic-skill recommendations
|
|
27
|
+
├─ suppresses legacy fixed-pipeline wording
|
|
28
|
+
├─ emits required invariants
|
|
29
|
+
└─ emits advisory skill suggestions
|
|
21
30
|
```
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
|
|
32
|
+
Use:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
node harness-everything/scripts/kernel-router.js "<prompt>"
|
|
36
|
+
# or
|
|
37
|
+
npx github:dyphn1/Harness-everything next "<prompt>"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
On a host where `UserPromptSubmit` is wired, reuse the hook output instead of running it twice.
|
|
41
|
+
|
|
42
|
+
## Non-software bypass
|
|
43
|
+
|
|
44
|
+
General Q&A, translation, ordinary web search, and non-software writing bypass Harness routing. The model should answer directly and naturally.
|
|
45
|
+
|
|
46
|
+
A software prompt that already says "use TDD", "security review", `repo-docs`, or another skill **does not bypass the kernel**. Host skill routing and Harness routing are different layers: the kernel establishes cross-cutting invariants; the host/model selects useful expertise.
|
|
47
|
+
|
|
48
|
+
## Three-tier recommendation model
|
|
49
|
+
|
|
50
|
+
```mermaid
|
|
51
|
+
flowchart TD
|
|
52
|
+
U([User Request]) --> S{Software / project work?}
|
|
53
|
+
S -- No --> B[Bypass Harness]
|
|
54
|
+
S -- Yes --> K[Harness Kernel<br/>scope + invariants]
|
|
55
|
+
K --> T{Tier recommendation}
|
|
56
|
+
T -- Tier 1 --> A[Agent self-orchestrates]
|
|
57
|
+
T -- Tier 2 --> A
|
|
58
|
+
T -- Tier 3 --> A
|
|
59
|
+
A --> E[Execute selected tactics / skills]
|
|
60
|
+
E --> V{Evidence supports completion?}
|
|
61
|
+
V -- Yes --> D([Done])
|
|
62
|
+
V -- No --> R[Diagnose and iterate]
|
|
63
|
+
R --> F{Same failure x3?}
|
|
64
|
+
F -- No --> E
|
|
65
|
+
F -- Yes --> Z[Zoom out / re-plan]
|
|
66
|
+
Z --> E
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Tier 1 — Trivial
|
|
70
|
+
|
|
71
|
+
Typical triggers: typos, narrow single-file edits, straightforward cleanup, code explanation, simple Git operations.
|
|
72
|
+
|
|
73
|
+
Guidance:
|
|
74
|
+
- prefer direct execution,
|
|
75
|
+
- avoid large plans/delegation,
|
|
76
|
+
- load a focused skill only when it adds value,
|
|
77
|
+
- still gather enough evidence to support the completion claim.
|
|
78
|
+
|
|
79
|
+
### Tier 2 — Standard
|
|
80
|
+
|
|
81
|
+
Typical triggers: normal feature work, bug fixes, multi-file changes, security review, focused benchmark/evaluation.
|
|
82
|
+
|
|
83
|
+
Possible suggestions:
|
|
84
|
+
- `todo-driven-workflow` when explicit progress tracking helps,
|
|
85
|
+
- `tdd` when executable behavioral tests are a useful design/verification tool,
|
|
86
|
+
- `verification-loop` when systematic build/lint/test/diff selection helps,
|
|
87
|
+
- `security-review` for trust/input/auth/secrets/network boundaries,
|
|
88
|
+
- `using-git-worktrees` where isolation reduces workspace risk,
|
|
89
|
+
- `eval-harness` for quantitative scoring.
|
|
90
|
+
|
|
91
|
+
None of those imply a universal `TODO → TDD → verification-loop` sequence.
|
|
92
|
+
|
|
93
|
+
### Tier 3 — Macro
|
|
94
|
+
|
|
95
|
+
Typical triggers: repository-wide refactors, architecture/migration work, large ambiguous requirements, broad documentation/system design, or work that may benefit from delegation.
|
|
96
|
+
|
|
97
|
+
Possible suggestions:
|
|
98
|
+
- `fable-mode` / `fable-discipline` for deliberate macro planning,
|
|
99
|
+
- `multi-agent-workspace` for bounded delegation,
|
|
100
|
+
- `repo-docs` for project-level documentation,
|
|
101
|
+
- `grill-with-docs`, `to-spec`, and `to-tickets` when design decisions/specs/issues genuinely help.
|
|
102
|
+
|
|
103
|
+
Tier 3 does **not** automatically mean multi-agent. If one capable agent can complete the work safely and efficiently, direct execution is valid.
|
|
104
|
+
|
|
105
|
+
## Classifier tuning
|
|
106
|
+
|
|
107
|
+
`tier-router.js` reads keyword/guide tables from `harness-everything/scripts/routing-keywords.json`. Edit that data to tune Tier 2/3 signals or knowledge-guide matches without changing classifier code.
|
|
108
|
+
|
|
109
|
+
The classifier remains heuristic:
|
|
110
|
+
- its recommendation is the default, not an order,
|
|
111
|
+
- a clear task reading may override it,
|
|
112
|
+
- explicit user intent wins,
|
|
113
|
+
- when overriding a materially different tier, record the reason briefly.
|
|
114
|
+
|
|
115
|
+
## Pre-action `actionGate`
|
|
116
|
+
|
|
117
|
+
The router may predict that a request needs `workflowPlan.actionGate`, but the Phase 5 enforcement hook deliberately **re-classifies the exact tool payload**. A missing or incorrect router prediction therefore cannot authorize a destructive command.
|
|
118
|
+
|
|
119
|
+
The executable policy lives in `hooks/scripts/action-gate-rules.json`. A missing or invalid table activates built-in safety defaults and reports the degradation. A valid empty table remains empty so the CI negative control can detect accidental policy erasure.
|
|
120
|
+
|
|
121
|
+
| Exact tool action | Harness result | Audit disposition before execution |
|
|
122
|
+
|---|---|---|
|
|
123
|
+
| Safe unmatched command such as `git status` | allow/no decision | no gate record |
|
|
124
|
+
| Matched command on Claude Code (default policy) | no decision: the session's permission mode, rules and auto-mode classifier decide | `deferred-to-host` |
|
|
125
|
+
| Matched command on Claude Code with `HARNESS_ACTION_GATE_POLICY=always-ask` | `permissionDecision: "ask"` | `pending-approval` |
|
|
126
|
+
| Matched command on a host without Harness-verified ask semantics | block with exit 2 | `rejected` |
|
|
127
|
+
| Payload reaches `PostToolUse` | continue | `executed` with exact payload SHA-256 |
|
|
128
|
+
| Payload reaches `PostToolUseFailure` | continue | `executed` + failed execution outcome |
|
|
129
|
+
| Deferred or pending payload never executes before `Stop` | no execution | `rejected` |
|
|
130
|
+
| Hook internal error | Claude: no decision plus a `systemMessage` warning (`always-ask`: `ask`); other/unverified host: exit 2 | host decides on Claude; fail closed elsewhere |
|
|
131
|
+
|
|
132
|
+
`rm -rf` and `Remove-Item -Recurse -Force` are exempt only when every parsed target is inside the OS temp directory, the current session scratch directory, or an explicitly supplied Harness scratch directory. An uncertain target is gated conservatively.
|
|
133
|
+
|
|
134
|
+
```mermaid
|
|
135
|
+
flowchart TD
|
|
136
|
+
P[PreToolUse exact payload] --> C{Matches action-gate rule?}
|
|
137
|
+
C -- No --> A[Allow without gate record]
|
|
138
|
+
C -- Yes --> X{Scratch-only destructive delete?}
|
|
139
|
+
X -- Yes --> A
|
|
140
|
+
X -- No --> H{Host has a native permission flow?}
|
|
141
|
+
H -- Claude Code --> Y{always-ask policy?}
|
|
142
|
+
Y -- No --> D[No decision: the permission mode decides<br/>record deferred-to-host + payload hash]
|
|
143
|
+
Y -- Yes --> Q[Emit permissionDecision: ask<br/>record pending-approval + payload hash]
|
|
144
|
+
H -- No / unknown --> B[Exit 2 block<br/>record rejected]
|
|
145
|
+
D --> U{Did the exact tool payload execute?}
|
|
146
|
+
Q --> U
|
|
147
|
+
U -- PostToolUse --> E[record executed]
|
|
148
|
+
U -- PostToolUseFailure --> F[record executed + failure]
|
|
149
|
+
U -- no execution by Stop --> R[record rejected]
|
|
37
150
|
```
|
|
38
151
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
152
|
+
On Claude Code the gate returns no decision by default. The [hooks reference](https://code.claude.com/docs/en/hooks) says a hook's `ask` "also forces a permission prompt in auto mode: the classifier can still deny the tool call, but it can't approve the call silently". A forced `ask` would therefore override the permission mode the user picked (#107).
|
|
153
|
+
|
|
154
|
+
With no decision, the normal permission flow applies:
|
|
155
|
+
|
|
156
|
+
- Manual and `acceptEdits` prompt unless a rule or the mode already allows the command.
|
|
157
|
+
- Auto mode lets the classifier decide.
|
|
158
|
+
- `dontAsk` denies anything that is not pre-approved.
|
|
159
|
+
- Deny rules apply in every mode.
|
|
160
|
+
|
|
161
|
+
Set `HARNESS_ACTION_GATE_POLICY=always-ask` to have Harness force its own prompt instead. Either way the gate classifies and audits every matched payload.
|
|
162
|
+
|
|
163
|
+
The deterministic suite verifies two things: the deferred result for every known `permission_mode` value, and the `ask` JSON under `always-ask`. That is **mechanism evidence only** until preserved live evidence exists.
|
|
164
|
+
|
|
165
|
+
## Cognitive OS relationship
|
|
166
|
+
|
|
167
|
+
`install-cognitive-os` remains the canonical explanatory/manual entry point for Discover → Think → Try → Summarize → Record. It is **not** required to win peer-skill selection before domain work begins. The runtime kernel establishes the smaller invariant contract independently; domain skills provide their own tactics inside that contract.
|
|
168
|
+
|
|
169
|
+
## Enforcement strength
|
|
170
|
+
|
|
171
|
+
A lifecycle hook can mechanically inject/guard supported invariants. Instruction-only integrations can only advise the model. Do not label advisory behavior as hard enforcement, and do not infer cross-host parity from shared skill text alone.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Security Audit: Verifier Boundaries
|
|
2
|
+
|
|
3
|
+
Date: 2026-09-10
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
The audit covers `scripts/lib/path-boundary.js` and
|
|
8
|
+
`scripts/lib/execution-contract.js`, which are shared by later verifier,
|
|
9
|
+
workspace, installer, and plugin fixes. The standalone consumers also have
|
|
10
|
+
focused regressions for archive output, legacy migration, global installation,
|
|
11
|
+
fixture construction, and reflection patch authorization.
|
|
12
|
+
|
|
13
|
+
## STRIDE and abuse cases
|
|
14
|
+
|
|
15
|
+
| Threat | Abuse case | Boundary |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| Tampering | A junction or symlink below an output root redirects a new file outside it. | Resolve the deepest existing ancestor and reject link components below the root. |
|
|
18
|
+
| Tampering | `..` or an absolute patch path escapes the repository allowlist. | Normalize repository-relative paths and reject traversal/absolute paths. |
|
|
19
|
+
| Information disclosure | A verifier treats a path fragment as proof that a different command ran. | Compare the complete normalized command or exact argv. |
|
|
20
|
+
| Elevation of privilege | A mixed patch includes one allowed file and one unrelated file. | Require every parsed patch path to be authorized; reject the entire patch otherwise. |
|
|
21
|
+
| Repudiation | A caller cannot distinguish an outside path from a link alias. | Stable error codes identify the rejected boundary condition. |
|
|
22
|
+
|
|
23
|
+
## Residual risks
|
|
24
|
+
|
|
25
|
+
- Callers must still use the returned physical target and perform the check
|
|
26
|
+
immediately before the filesystem operation; a check done earlier can be
|
|
27
|
+
invalidated by a time-of-check/time-of-use race.
|
|
28
|
+
- The helper does not grant permission to choose a boundary root. Consumers
|
|
29
|
+
must establish that the root itself is trusted before calling it.
|
|
30
|
+
- Live model behavioral evidence remains an environment/acceptance concern and
|
|
31
|
+
is not manufactured by these deterministic helpers.
|
|
32
|
+
|
|
33
|
+
## Verification
|
|
34
|
+
|
|
35
|
+
`ci/mechanism-2v-verifier-boundaries.test.js` covers normal paths, traversal,
|
|
36
|
+
junction/symlink escapes, missing leaves, Windows casing, exact commands, and
|
|
37
|
+
all-or-nothing patch authorization. `npm run test:mutations` then verifies that
|
|
38
|
+
eight corresponding production protections are load-bearing.
|
package/docs/troubleshooting.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Harness OS Troubleshooting Guide
|
|
2
2
|
|
|
3
|
-
This guide helps you resolve common issues with Harness OS installation and usage.
|
|
3
|
+
This guide helps you resolve common issues with Harness OS installation and usage. Platform enforcement claims follow [platform-capabilities.md](platform-capabilities.md). Current Node/workflow values are generated in [repository-contract.md](repository-contract.md).
|
|
4
4
|
|
|
5
5
|
## Installation Issues
|
|
6
6
|
|
|
@@ -31,14 +31,20 @@ export PATH=~/.npm-global/bin:$PATH
|
|
|
31
31
|
# Check your Node.js version
|
|
32
32
|
node --version
|
|
33
33
|
|
|
34
|
-
# Harness
|
|
35
|
-
#
|
|
36
|
-
nvm install
|
|
37
|
-
nvm use
|
|
34
|
+
# Harness supports Node.js 22 or newer.
|
|
35
|
+
# Node.js 24 is the primary/recommended development runtime.
|
|
36
|
+
nvm install 24
|
|
37
|
+
nvm use 24
|
|
38
38
|
|
|
39
|
-
#
|
|
39
|
+
# To reproduce the minimum-runtime CI lane explicitly:
|
|
40
|
+
nvm install 22
|
|
41
|
+
nvm use 22
|
|
42
|
+
|
|
43
|
+
# Or download a supported release from https://nodejs.org/
|
|
40
44
|
```
|
|
41
45
|
|
|
46
|
+
The checked-in `.nvmrc` selects the primary runtime. If runtime/workflow files change, run `npm run docs:sync` followed by `npm run test:repo-contract` so generated current-state documentation cannot drift.
|
|
47
|
+
|
|
42
48
|
### Network Issues
|
|
43
49
|
|
|
44
50
|
**Symptom:** `npm ERR! network` or timeout errors
|
|
@@ -69,13 +75,11 @@ yarn install
|
|
|
69
75
|
```bash
|
|
70
76
|
cat .claude/settings.json | grep -A 10 "hooks"
|
|
71
77
|
```
|
|
72
|
-
|
|
73
78
|
2. Check hook file permissions:
|
|
74
79
|
```bash
|
|
75
80
|
ls -la hooks/scripts/*.js
|
|
76
81
|
```
|
|
77
|
-
|
|
78
|
-
3. Restart Claude Code session
|
|
82
|
+
3. Restart Claude Code session.
|
|
79
83
|
|
|
80
84
|
### Hook Execution Errors
|
|
81
85
|
|
|
@@ -99,18 +103,19 @@ npx github:dyphn1/Harness-everything install
|
|
|
99
103
|
**Symptom:** `RULE OF 3 CIRCUIT BREAKER TRIGGERED!` frequently
|
|
100
104
|
|
|
101
105
|
**Solution:**
|
|
102
|
-
1. This is normal behavior - Harness is protecting you from infinite loops
|
|
103
|
-
2. Follow the zoom-out instructions in the error message
|
|
104
|
-
3. If it's a false positive, check the error signature:
|
|
106
|
+
1. This is normal behavior on an integration surface that actually packages the circuit-breaker hooks: Harness is protecting you from infinite loops.
|
|
107
|
+
2. Follow the zoom-out instructions in the error message.
|
|
108
|
+
3. If it's a false positive on the Claude Code hook path, check the error signature:
|
|
105
109
|
```bash
|
|
106
110
|
cat .claude/harness-everything/state/sessions/default/rule-of-3-state.json
|
|
107
111
|
```
|
|
108
|
-
|
|
109
112
|
4. Reset if needed:
|
|
110
113
|
```bash
|
|
111
114
|
npm run harness:reset
|
|
112
115
|
```
|
|
113
116
|
|
|
117
|
+
Do not expect this Claude Code state file merely because Harness skills or an instruction-only platform integration are installed.
|
|
118
|
+
|
|
114
119
|
## Platform-Specific Issues
|
|
115
120
|
|
|
116
121
|
### Cursor Not Showing Rules
|
|
@@ -122,13 +127,11 @@ npx github:dyphn1/Harness-everything install
|
|
|
122
127
|
```bash
|
|
123
128
|
cat .cursorrules | head -20
|
|
124
129
|
```
|
|
125
|
-
|
|
126
130
|
2. If missing, reinstall with Cursor flag:
|
|
127
131
|
```bash
|
|
128
132
|
npx github:dyphn1/Harness-everything install --cursor
|
|
129
133
|
```
|
|
130
|
-
|
|
131
|
-
3. Restart Cursor
|
|
134
|
+
3. Restart Cursor.
|
|
132
135
|
|
|
133
136
|
### Copilot Not Following Rules
|
|
134
137
|
|
|
@@ -139,43 +142,90 @@ npx github:dyphn1/Harness-everything install
|
|
|
139
142
|
```bash
|
|
140
143
|
cat .github/copilot-instructions.md | head -20
|
|
141
144
|
```
|
|
145
|
+
2. Ensure Copilot is using the instructions file.
|
|
146
|
+
3. Restart VS Code/GitHub Copilot.
|
|
142
147
|
|
|
143
|
-
|
|
144
|
-
3. Restart VS Code/GitHub Copilot
|
|
145
|
-
|
|
146
|
-
### Codex/AGENTS.md Issues
|
|
148
|
+
### Codex advisory installer / AGENTS.md issues
|
|
147
149
|
|
|
148
|
-
**Symptom:** Codex not
|
|
150
|
+
**Symptom:** Codex does not appear to receive the general installer guidance.
|
|
149
151
|
|
|
150
152
|
**Solution:**
|
|
151
|
-
1. Check AGENTS.md exists:
|
|
153
|
+
1. Check `AGENTS.md` exists and contains Harness guidance:
|
|
152
154
|
```bash
|
|
153
155
|
cat AGENTS.md | head -20
|
|
154
156
|
```
|
|
155
|
-
|
|
156
|
-
2. Reinstall with Codex flag:
|
|
157
|
+
2. Reinstall the advisory Codex target if needed:
|
|
157
158
|
```bash
|
|
158
159
|
npx github:dyphn1/Harness-everything install --codex
|
|
159
160
|
```
|
|
161
|
+
3. Remember that this is the instruction-oriented installer path. It is different from the **local OpenAI plugin** package described below.
|
|
162
|
+
|
|
163
|
+
### Codex / local OpenAI plugin not appearing
|
|
164
|
+
|
|
165
|
+
**Symptom:** The Harness plugin is missing from the local Plugins Directory, skills are stale, or packaged lifecycle behavior does not reflect the current repository package.
|
|
166
|
+
|
|
167
|
+
**Checks:**
|
|
168
|
+
```bash
|
|
169
|
+
npm run plugin:sync
|
|
170
|
+
npm run test:plugin:openai
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Then verify the repository contains:
|
|
174
|
+
|
|
175
|
+
```text
|
|
176
|
+
.agents/plugins/marketplace.json
|
|
177
|
+
plugins/harness-everything/.codex-plugin/plugin.json
|
|
178
|
+
plugins/harness-everything/hooks/hooks.json
|
|
179
|
+
plugins/harness-everything/hooks/session-start.js
|
|
180
|
+
plugins/harness-everything/skills/
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
If those checks pass but the host still shows an older copy:
|
|
184
|
+
|
|
185
|
+
1. Refresh/sync the imported marketplace or repository plugin in the host.
|
|
186
|
+
2. Restart/refresh the local ChatGPT/Codex host if it cached the plugin package.
|
|
187
|
+
3. Start a **new chat/session** before judging `SessionStart` or `UserPromptSubmit` behavior.
|
|
188
|
+
4. Re-review/trust changed command hooks if the host asks again after hook definitions changed.
|
|
189
|
+
|
|
190
|
+
The local plugin mechanically injects the session policy and invariant-first routing contract, and its package includes mechanism-tested supported-tool, subagent, and stop adapters. If those events do not appear in a live session, verify the host loaded the current package and that changed command hooks were reviewed/trusted; package tests alone cannot prove host loading.
|
|
191
|
+
|
|
192
|
+
See [openai-plugin.md](openai-plugin.md) for installation and validation details.
|
|
193
|
+
|
|
194
|
+
### Public OpenAI Skills-only plugin behaves differently from local Codex plugin
|
|
195
|
+
|
|
196
|
+
**Symptom:** A public/reviewer Skills-only install does not run local `.codex-plugin` lifecycle hooks.
|
|
197
|
+
|
|
198
|
+
**Expected behavior:** This is by design. The public Skills-only upload contains reusable skills and referenced assets, but not the local `.codex-plugin` lifecycle hooks. Validate public behavior with:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
npm run plugin:submission:build
|
|
202
|
+
npm run test:plugin:submission
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Do not troubleshoot a missing `SessionStart` or `UserPromptSubmit` hook in the public Skills-only artifact as if it were a packaging defect.
|
|
206
|
+
|
|
207
|
+
### OpenCode plugin implementation works in tests but host loading is uncertain
|
|
208
|
+
|
|
209
|
+
**Symptom:** Source/mechanism tests pass, but there is no evidence that a real OpenCode session loaded and fired the plugin.
|
|
210
|
+
|
|
211
|
+
**Interpretation:** The current repository claim is intentionally **mechanism-tested, live loading unverified**. Check [`../opencode-plugin/README.md`](../opencode-plugin/README.md) and run the OpenCode mechanism coverage. Do not promote a source-level pass into a live-host pass without a real session artifact.
|
|
160
212
|
|
|
161
213
|
## Performance Issues
|
|
162
214
|
|
|
163
215
|
### Slow Hook Execution
|
|
164
216
|
|
|
165
|
-
**Symptom:** Terminal commands feel slower
|
|
217
|
+
**Symptom:** Terminal commands feel slower on a hook-enabled integration.
|
|
166
218
|
|
|
167
219
|
**Solution:**
|
|
168
|
-
1. Check hook execution time:
|
|
220
|
+
1. Check Claude Code hook execution time where applicable:
|
|
169
221
|
```bash
|
|
170
222
|
time node hooks/scripts/rule-of-3.js < /dev/null
|
|
171
223
|
```
|
|
172
|
-
|
|
173
224
|
2. If >200ms, check for:
|
|
174
225
|
- Large state files
|
|
175
226
|
- Network calls in hooks
|
|
176
227
|
- Complex file operations
|
|
177
|
-
|
|
178
|
-
3. Reset state:
|
|
228
|
+
3. Reset state if appropriate:
|
|
179
229
|
```bash
|
|
180
230
|
rm -rf .claude/harness-everything/state/sessions/
|
|
181
231
|
```
|
|
@@ -187,47 +237,44 @@ npx github:dyphn1/Harness-everything install
|
|
|
187
237
|
**Solution:**
|
|
188
238
|
1. Check for memory leaks:
|
|
189
239
|
```bash
|
|
190
|
-
# Monitor Node.js processes
|
|
191
240
|
ps aux | grep node
|
|
192
241
|
```
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
3. Report issue if persistent
|
|
242
|
+
2. Restart session if needed.
|
|
243
|
+
3. Report issue if persistent.
|
|
196
244
|
|
|
197
245
|
## Debugging
|
|
198
246
|
|
|
199
247
|
### Enable Verbose Logging
|
|
200
248
|
|
|
201
249
|
```bash
|
|
202
|
-
# Set debug environment variable
|
|
203
250
|
export HARNESS_DEBUG=1
|
|
204
|
-
|
|
205
|
-
# Run with verbose output
|
|
206
251
|
node hooks/scripts/rule-of-3.js < payload.json
|
|
207
252
|
```
|
|
208
253
|
|
|
209
254
|
### Check State Files
|
|
210
255
|
|
|
211
256
|
```bash
|
|
212
|
-
#
|
|
257
|
+
# Claude Code hook-path state example
|
|
213
258
|
cat .claude/harness-everything/state/sessions/default/rule-of-3-state.json
|
|
214
259
|
cat .claude/harness-everything/state/sessions/default/handoff-state.json
|
|
215
260
|
|
|
216
|
-
# Reset
|
|
261
|
+
# Reset Claude hook-path state
|
|
217
262
|
rm -rf .claude/harness-everything/state/sessions/
|
|
218
263
|
npm run harness:reset
|
|
219
264
|
```
|
|
220
265
|
|
|
221
266
|
### Manual Hook Testing
|
|
222
267
|
|
|
223
|
-
|
|
224
|
-
# Test rule-of-3 hook
|
|
225
|
-
echo '{"tool_name":"Bash","tool_input":{"command":"test"}}' | node hooks/scripts/rule-of-3.js
|
|
268
|
+
For deterministic cross-platform mechanism checks, prefer:
|
|
226
269
|
|
|
227
|
-
|
|
228
|
-
|
|
270
|
+
```bash
|
|
271
|
+
npm run test:mechanism
|
|
272
|
+
npm run test:docs:capabilities
|
|
273
|
+
npm run test:repo-contract
|
|
229
274
|
```
|
|
230
275
|
|
|
276
|
+
When isolating a specific Claude hook, use the Windows-safe `spawnSync` recipes in [../VERIFICATION.md](../VERIFICATION.md) rather than assuming a shell `echo | node` pipeline behaves the same on every OS.
|
|
277
|
+
|
|
231
278
|
## Getting Help
|
|
232
279
|
|
|
233
280
|
### Collect Diagnostic Information
|
|
@@ -244,22 +291,18 @@ cat package.json | grep version >> harness-diagnostic.txt
|
|
|
244
291
|
echo "" >> harness-diagnostic.txt
|
|
245
292
|
|
|
246
293
|
echo "=== Installed Platforms ===" >> harness-diagnostic.txt
|
|
247
|
-
ls -la .claude/ .cursorrules .github/copilot-instructions.md AGENTS.md .continue/rules/ .hermes.md 2>/dev/null >> harness-diagnostic.txt
|
|
294
|
+
ls -la .claude/ .cursorrules .github/copilot-instructions.md AGENTS.md .continue/rules/ .hermes.md .agents/plugins/ plugins/harness-everything/ 2>/dev/null >> harness-diagnostic.txt
|
|
248
295
|
echo "" >> harness-diagnostic.txt
|
|
249
296
|
|
|
250
297
|
echo "=== Hook Status ===" >> harness-diagnostic.txt
|
|
251
298
|
cat .claude/settings.json | grep -A 20 "hooks" >> harness-diagnostic.txt 2>/dev/null
|
|
252
|
-
echo "" >> harness-diagnostic.txt
|
|
253
|
-
|
|
254
|
-
echo "=== Recent Errors ===" >> harness-diagnostic.txt
|
|
255
|
-
# Add any recent error logs here
|
|
256
299
|
```
|
|
257
300
|
|
|
258
301
|
### Contact Support
|
|
259
302
|
|
|
260
303
|
1. **GitHub Issues:** https://github.com/dyphn1/Harness-everything/issues
|
|
261
304
|
2. **Include:** Diagnostic report, error messages, steps to reproduce
|
|
262
|
-
3. **Platform:** Specify which AI tool you're using (
|
|
305
|
+
3. **Platform:** Specify which AI tool and which Harness installation surface you're using (for example `--codex` advisory installer vs local OpenAI plugin vs public Skills-only plugin).
|
|
263
306
|
|
|
264
307
|
## Common Error Messages
|
|
265
308
|
|
|
@@ -272,8 +315,8 @@ echo "=== Recent Errors ===" >> harness-diagnostic.txt
|
|
|
272
315
|
- **Solution:** Will fail open to Tier 1 - reinstall to restore
|
|
273
316
|
|
|
274
317
|
### "Session state not found"
|
|
275
|
-
- **Cause:** First run or state
|
|
276
|
-
- **Solution:**
|
|
318
|
+
- **Cause:** First run, state cleared, or the selected platform surface does not create that runtime state
|
|
319
|
+
- **Solution:** Confirm the platform/integration surface first; on a supported stateful hook path, state is created on first use
|
|
277
320
|
|
|
278
321
|
### "Zoom-out report not found"
|
|
279
322
|
- **Cause:** Circuit breaker tripped but no report written
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Verifier Boundary Contracts
|
|
2
|
+
|
|
3
|
+
This repository handles paths and execution evidence produced by local agent
|
|
4
|
+
sessions. Consumers must use these contracts before writing, deleting, or
|
|
5
|
+
grading anything derived from a session. The repository-side evidence archiver
|
|
6
|
+
and legacy workspace migration use the same checks; the standalone OpenCode
|
|
7
|
+
plugin mirrors the patch authorization rule because it is distributed as one
|
|
8
|
+
file.
|
|
9
|
+
|
|
10
|
+
## Physical path containment
|
|
11
|
+
|
|
12
|
+
```js
|
|
13
|
+
const { assertContainedPath } = require('../scripts/lib/path-boundary');
|
|
14
|
+
|
|
15
|
+
const { target } = assertContainedPath(outputRoot, requestedPath);
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`assertContainedPath()` resolves the deepest existing ancestor before appending
|
|
19
|
+
missing segments. It rejects lexical traversal, junction/symlink components
|
|
20
|
+
below the selected root, and physical paths outside the root. Call it for the
|
|
21
|
+
final target, not only for the user-provided parent directory. Consumers must
|
|
22
|
+
handle `PATH_OUTSIDE_BOUNDARY`, `LINK_COMPONENT_IN_BOUNDARY`, and
|
|
23
|
+
`INVALID_BOUNDARY_PATH` as hard failures.
|
|
24
|
+
|
|
25
|
+
## Exact execution evidence
|
|
26
|
+
|
|
27
|
+
Use `commandMatches()` for command expectations. Complete strings compare after
|
|
28
|
+
whitespace normalization; argv arrays compare each argument and length exactly.
|
|
29
|
+
The only shorthand accepted is a script basename when an approved interpreter
|
|
30
|
+
(`node`, `bun`, `deno`, Python, or Ruby) is the command launcher. Substring
|
|
31
|
+
checks are not valid evidence.
|
|
32
|
+
|
|
33
|
+
Use `extractPatchPaths()` and `patchPathsAuthorized()` for patch-shaped tool
|
|
34
|
+
output. A patch is authorized only when every touched path is allowlisted;
|
|
35
|
+
mixed authorized and unauthorized patches must be rejected atomically.
|
|
36
|
+
|
|
37
|
+
Prefer structured argv and patch metadata when the producer provides them.
|
|
38
|
+
These string fallbacks intentionally fail closed rather than guessing intent.
|
|
39
|
+
|
|
40
|
+
## Mutation gate
|
|
41
|
+
|
|
42
|
+
`npm run test:mutations` runs focused tests against temporary in-memory source
|
|
43
|
+
mutations for each consumer boundary. A green result means the test would fail
|
|
44
|
+
if its corresponding protection were removed; it does not replace the normal
|
|
45
|
+
mechanism, consistency, or live behavioral-evidence gates.
|