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
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const crypto = require('crypto');
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const os = require('os');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
|
|
9
|
+
const STAGE_CONTRACT_VERSION = 2;
|
|
10
|
+
const FABLE_STRATEGIES = new Set([
|
|
11
|
+
'fable-staged',
|
|
12
|
+
'fable-parallel',
|
|
13
|
+
'fable-multi-agent-workspace',
|
|
14
|
+
]);
|
|
15
|
+
|
|
16
|
+
function canonicalPath(value) {
|
|
17
|
+
const resolved = path.resolve(value || process.cwd());
|
|
18
|
+
try { return fs.realpathSync(resolved); } catch (_) { return resolved; }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function getStateHome() {
|
|
22
|
+
return process.env.HARNESS_STATE_HOME || path.join(os.homedir(), '.agents', 'harness-everything');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Keep this algorithm identical to scripts/lib/workspace.js. This skill ships
|
|
26
|
+
// standalone, so it cannot depend on the source repository being present.
|
|
27
|
+
function getWorkspaceKey(root) {
|
|
28
|
+
const real = canonicalPath(root);
|
|
29
|
+
const slug = path.basename(real).toLowerCase()
|
|
30
|
+
.replace(/[^a-z0-9._-]+/g, '-')
|
|
31
|
+
.replace(/^-+|-+$/g, '') || 'workspace';
|
|
32
|
+
const hashInput = process.platform === 'win32' ? real.toLowerCase() : real;
|
|
33
|
+
const hash = crypto.createHash('sha1').update(hashInput).digest('hex').slice(0, 12);
|
|
34
|
+
return `${slug}-${hash}`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function getWorkspaceStateRoot(root) {
|
|
38
|
+
return path.join(getStateHome(), 'workspaces', getWorkspaceKey(root), 'state');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function stableValue(value) {
|
|
42
|
+
if (Array.isArray(value)) return value.map(stableValue);
|
|
43
|
+
if (!value || typeof value !== 'object') return value;
|
|
44
|
+
return Object.keys(value).sort().reduce((acc, key) => {
|
|
45
|
+
acc[key] = stableValue(value[key]);
|
|
46
|
+
return acc;
|
|
47
|
+
}, {});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function derivePlanId(routerContract) {
|
|
51
|
+
const canonical = JSON.stringify(stableValue(routerContract));
|
|
52
|
+
return `plan-${crypto.createHash('sha256').update(canonical).digest('hex').slice(0, 16)}`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function sanitizeId(value, label) {
|
|
56
|
+
const text = String(value || '').trim();
|
|
57
|
+
if (!text) throw new Error(`${label} is required`);
|
|
58
|
+
if (!/^[A-Za-z0-9._-]+$/.test(text)) throw new Error(`${label} contains unsupported characters: ${text}`);
|
|
59
|
+
return text.slice(0, 128);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function normalizeWritePath(value) {
|
|
63
|
+
if (typeof value !== 'string' || !value.trim()) throw new Error('writeSet entries must be non-empty strings');
|
|
64
|
+
let normalized = value.trim().replace(/\\/g, '/').replace(/^\.\//, '');
|
|
65
|
+
normalized = normalized.replace(/\/+$/g, '');
|
|
66
|
+
if (!normalized || normalized.startsWith('/') || /^[A-Za-z]:\//.test(normalized)) {
|
|
67
|
+
throw new Error(`writeSet paths must be repository-relative: ${value}`);
|
|
68
|
+
}
|
|
69
|
+
const parts = normalized.split('/');
|
|
70
|
+
if (parts.some(part => !part || part === '.' || part === '..')) {
|
|
71
|
+
throw new Error(`writeSet path escapes or ambiguously names repository scope: ${value}`);
|
|
72
|
+
}
|
|
73
|
+
if (/[*?\[\]]/.test(normalized)) {
|
|
74
|
+
throw new Error(`writeSet uses unsupported glob syntax; declare concrete path scopes: ${value}`);
|
|
75
|
+
}
|
|
76
|
+
return normalized;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function normalizeStage(raw) {
|
|
80
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) throw new Error('stage must be an object');
|
|
81
|
+
const stageId = sanitizeId(raw.stageId, 'stageId');
|
|
82
|
+
if (typeof raw.goal !== 'string' || !raw.goal.trim()) throw new Error(`${stageId}: goal is required`);
|
|
83
|
+
if (typeof raw.agent !== 'string' || !raw.agent.trim()) throw new Error(`${stageId}: agent is required`);
|
|
84
|
+
if (typeof raw.task !== 'string' || !raw.task.trim()) throw new Error(`${stageId}: task is required`);
|
|
85
|
+
if (!Array.isArray(raw.dependsOn)) throw new Error(`${stageId}: dependsOn must be an array (use [] for a root stage)`);
|
|
86
|
+
if (!Array.isArray(raw.writeSet)) throw new Error(`${stageId}: writeSet must be an array (use [] for read-only)`);
|
|
87
|
+
|
|
88
|
+
const dependsOn = [...new Set(raw.dependsOn.map(value => sanitizeId(value, `${stageId}.dependsOn`)))];
|
|
89
|
+
const writeSet = [...new Set(raw.writeSet.map(normalizeWritePath))].sort();
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
stageId,
|
|
93
|
+
goal: raw.goal.trim(),
|
|
94
|
+
agent: raw.agent.trim(),
|
|
95
|
+
task: raw.task.trim(),
|
|
96
|
+
inputs: Array.isArray(raw.inputs) ? raw.inputs : [],
|
|
97
|
+
expectedOutputs: Array.isArray(raw.expectedOutputs) ? raw.expectedOutputs : [],
|
|
98
|
+
outputPath: raw.outputPath === undefined ? null : raw.outputPath,
|
|
99
|
+
dependsOn,
|
|
100
|
+
writeSet,
|
|
101
|
+
checkCommand: typeof raw.checkCommand === 'string' && raw.checkCommand.trim() ? raw.checkCommand.trim() : null,
|
|
102
|
+
passCondition: typeof raw.passCondition === 'string' && raw.passCondition.trim() ? raw.passCondition.trim() : null,
|
|
103
|
+
failureReturn: typeof raw.failureReturn === 'string' && raw.failureReturn.trim()
|
|
104
|
+
? raw.failureReturn.trim()
|
|
105
|
+
: 'failure summary + evidence + missing prerequisite',
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function validateStageGraph(stages) {
|
|
110
|
+
const normalized = stages.map(normalizeStage);
|
|
111
|
+
const byId = new Map();
|
|
112
|
+
for (const stage of normalized) {
|
|
113
|
+
if (byId.has(stage.stageId)) throw new Error(`duplicate stageId: ${stage.stageId}`);
|
|
114
|
+
byId.set(stage.stageId, stage);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
for (const stage of normalized) {
|
|
118
|
+
for (const dependency of stage.dependsOn) {
|
|
119
|
+
if (dependency === stage.stageId) throw new Error(`${stage.stageId}: stage cannot depend on itself`);
|
|
120
|
+
if (!byId.has(dependency)) throw new Error(`${stage.stageId}: unresolved dependency ${dependency}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const visiting = new Set();
|
|
125
|
+
const visited = new Set();
|
|
126
|
+
function visit(stageId) {
|
|
127
|
+
if (visiting.has(stageId)) throw new Error(`cyclic stage dependency detected at ${stageId}`);
|
|
128
|
+
if (visited.has(stageId)) return;
|
|
129
|
+
visiting.add(stageId);
|
|
130
|
+
for (const dependency of byId.get(stageId).dependsOn) visit(dependency);
|
|
131
|
+
visiting.delete(stageId);
|
|
132
|
+
visited.add(stageId);
|
|
133
|
+
}
|
|
134
|
+
for (const stage of normalized) visit(stage.stageId);
|
|
135
|
+
return normalized;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function pathScopesOverlap(left, right) {
|
|
139
|
+
const a = normalizeWritePath(left);
|
|
140
|
+
const b = normalizeWritePath(right);
|
|
141
|
+
return a === b || a.startsWith(`${b}/`) || b.startsWith(`${a}/`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function validateParallelBatch(stages) {
|
|
145
|
+
for (let i = 0; i < stages.length; i++) {
|
|
146
|
+
for (let j = i + 1; j < stages.length; j++) {
|
|
147
|
+
for (const left of stages[i].writeSet) {
|
|
148
|
+
for (const right of stages[j].writeSet) {
|
|
149
|
+
if (pathScopesOverlap(left, right)) {
|
|
150
|
+
throw new Error(`parallel write-set overlap: ${stages[i].stageId}:${left} conflicts with ${stages[j].stageId}:${right}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function dependencyBatches(stages, validateWrites) {
|
|
159
|
+
const byId = new Map(stages.map(stage => [stage.stageId, stage]));
|
|
160
|
+
const remaining = new Set(byId.keys());
|
|
161
|
+
const completed = new Set();
|
|
162
|
+
const batches = [];
|
|
163
|
+
|
|
164
|
+
while (remaining.size > 0) {
|
|
165
|
+
const ready = [...remaining]
|
|
166
|
+
.filter(stageId => byId.get(stageId).dependsOn.every(dep => completed.has(dep)))
|
|
167
|
+
.sort();
|
|
168
|
+
if (ready.length === 0) throw new Error('unresolved or cyclic dependency graph');
|
|
169
|
+
const batch = ready.map(stageId => byId.get(stageId));
|
|
170
|
+
if (validateWrites) validateParallelBatch(batch);
|
|
171
|
+
batches.push(batch.map(stage => stage.stageId));
|
|
172
|
+
for (const stageId of ready) {
|
|
173
|
+
remaining.delete(stageId);
|
|
174
|
+
completed.add(stageId);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return batches;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function topologicalBatches(stages) {
|
|
181
|
+
return dependencyBatches(stages, true);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function sequentialBatches(stages) {
|
|
185
|
+
return dependencyBatches(stages, false).flat().map(stageId => [stageId]);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function validateRouterPlan(routerContract) {
|
|
189
|
+
if (!routerContract || typeof routerContract !== 'object' || Array.isArray(routerContract)) {
|
|
190
|
+
throw new Error('router contract must be an object');
|
|
191
|
+
}
|
|
192
|
+
const plan = routerContract.workflowPlan;
|
|
193
|
+
if (!plan || typeof plan !== 'object') throw new Error('router contract is missing workflowPlan');
|
|
194
|
+
if (plan.strategySelection !== 'selected') throw new Error(`workflow strategy is not selected: ${plan.strategySelection}`);
|
|
195
|
+
if (!FABLE_STRATEGIES.has(plan.strategy)) throw new Error(`workflow strategy is not a Fable consumer topology: ${plan.strategy}`);
|
|
196
|
+
if (plan.fallback && plan.fallback.disposition === 'blocked') {
|
|
197
|
+
throw new Error(`workflow plan is blocked: ${(plan.fallback.reasonCodes || []).join(', ') || 'unspecified reason'}`);
|
|
198
|
+
}
|
|
199
|
+
if (plan.strategy === 'fable-parallel' && (!plan.parallelism || plan.parallelism.allowed !== true)) {
|
|
200
|
+
throw new Error('fable-parallel requires workflowPlan.parallelism.allowed=true');
|
|
201
|
+
}
|
|
202
|
+
return plan;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function atomicWriteJson(filePath, value) {
|
|
206
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
207
|
+
const tempPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
|
|
208
|
+
fs.writeFileSync(tempPath, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
|
|
209
|
+
fs.renameSync(tempPath, filePath);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function prepareRun({ routerContract, stages, workspaceRoot, runId, sessionId = null }) {
|
|
213
|
+
const plan = validateRouterPlan(routerContract);
|
|
214
|
+
const normalizedStages = validateStageGraph(stages || []);
|
|
215
|
+
if (normalizedStages.length === 0) throw new Error('at least one stage contract is required');
|
|
216
|
+
|
|
217
|
+
const planId = derivePlanId(routerContract);
|
|
218
|
+
const resolvedRunId = sanitizeId(runId || `run-${crypto.randomUUID()}`, 'runId');
|
|
219
|
+
const root = canonicalPath(workspaceRoot || process.cwd());
|
|
220
|
+
const stateRoot = getWorkspaceStateRoot(root);
|
|
221
|
+
const runRoot = path.join(stateRoot, 'fable-runs', resolvedRunId);
|
|
222
|
+
if (fs.existsSync(runRoot)) throw new Error(`runId already exists in this workspace: ${resolvedRunId}`);
|
|
223
|
+
|
|
224
|
+
const batches = plan.strategy === 'fable-parallel'
|
|
225
|
+
? topologicalBatches(normalizedStages)
|
|
226
|
+
: sequentialBatches(normalizedStages);
|
|
227
|
+
|
|
228
|
+
const createdAt = new Date().toISOString();
|
|
229
|
+
const contractsDir = path.join(runRoot, 'contracts');
|
|
230
|
+
const evidenceDir = path.join(runRoot, 'evidence');
|
|
231
|
+
fs.mkdirSync(contractsDir, { recursive: true });
|
|
232
|
+
fs.mkdirSync(evidenceDir, { recursive: true });
|
|
233
|
+
|
|
234
|
+
for (const stage of normalizedStages) {
|
|
235
|
+
atomicWriteJson(path.join(contractsDir, `${stage.stageId}.json`), {
|
|
236
|
+
schemaVersion: STAGE_CONTRACT_VERSION,
|
|
237
|
+
planId,
|
|
238
|
+
runId: resolvedRunId,
|
|
239
|
+
sessionId: sessionId || null,
|
|
240
|
+
workspaceRoot: root,
|
|
241
|
+
...stage,
|
|
242
|
+
workerId: null,
|
|
243
|
+
status: 'planned',
|
|
244
|
+
verificationEvidence: null,
|
|
245
|
+
createdAt,
|
|
246
|
+
updatedAt: createdAt,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const runManifest = {
|
|
251
|
+
schemaVersion: 1,
|
|
252
|
+
planId,
|
|
253
|
+
runId: resolvedRunId,
|
|
254
|
+
sessionId: sessionId || null,
|
|
255
|
+
workspaceRoot: root,
|
|
256
|
+
workspaceKey: getWorkspaceKey(root),
|
|
257
|
+
strategy: plan.strategy,
|
|
258
|
+
router: {
|
|
259
|
+
routingStatus: plan.routingStatus,
|
|
260
|
+
tier: plan.tier,
|
|
261
|
+
reasonCodes: plan.reasonCodes || [],
|
|
262
|
+
},
|
|
263
|
+
execution: {
|
|
264
|
+
batches,
|
|
265
|
+
parallelism: plan.parallelism,
|
|
266
|
+
verification: plan.verification,
|
|
267
|
+
workspace: plan.workspace,
|
|
268
|
+
memory: plan.memory,
|
|
269
|
+
modelSelection: plan.modelSelection,
|
|
270
|
+
limits: plan.limits,
|
|
271
|
+
},
|
|
272
|
+
stageIds: normalizedStages.map(stage => stage.stageId),
|
|
273
|
+
createdAt,
|
|
274
|
+
};
|
|
275
|
+
atomicWriteJson(path.join(runRoot, 'run.json'), runManifest);
|
|
276
|
+
return { ...runManifest, runRoot };
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function parseArgs(argv) {
|
|
280
|
+
const args = {};
|
|
281
|
+
for (let i = 0; i < argv.length; i++) {
|
|
282
|
+
const token = argv[i];
|
|
283
|
+
if (token === '--plan-file') args.planFile = argv[++i];
|
|
284
|
+
else if (token === '--stages-file') args.stagesFile = argv[++i];
|
|
285
|
+
else if (token === '--root') args.root = argv[++i];
|
|
286
|
+
else if (token === '--run-id') args.runId = argv[++i];
|
|
287
|
+
else if (token === '--session-id') args.sessionId = argv[++i];
|
|
288
|
+
else if (token === '--help' || token === '-h') args.help = true;
|
|
289
|
+
else throw new Error(`unknown argument: ${token}`);
|
|
290
|
+
}
|
|
291
|
+
return args;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function usage() {
|
|
295
|
+
return 'Usage: node fable-mode/scripts/workflow-plan-consumer.js --plan-file <router-contract.json> --stages-file <stages.json> [--root <workspace>] [--run-id <id>] [--session-id <id>]';
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
if (require.main === module) {
|
|
299
|
+
try {
|
|
300
|
+
const args = parseArgs(process.argv.slice(2));
|
|
301
|
+
if (args.help) {
|
|
302
|
+
console.log(usage());
|
|
303
|
+
process.exit(0);
|
|
304
|
+
}
|
|
305
|
+
if (!args.planFile || !args.stagesFile) throw new Error(usage());
|
|
306
|
+
const routerContract = JSON.parse(fs.readFileSync(path.resolve(args.planFile), 'utf8'));
|
|
307
|
+
const stagesPayload = JSON.parse(fs.readFileSync(path.resolve(args.stagesFile), 'utf8'));
|
|
308
|
+
const stages = Array.isArray(stagesPayload) ? stagesPayload : stagesPayload.stages;
|
|
309
|
+
const manifest = prepareRun({
|
|
310
|
+
routerContract,
|
|
311
|
+
stages,
|
|
312
|
+
workspaceRoot: args.root || process.cwd(),
|
|
313
|
+
runId: args.runId,
|
|
314
|
+
sessionId: args.sessionId || null,
|
|
315
|
+
});
|
|
316
|
+
process.stdout.write(`${JSON.stringify(manifest)}\n`);
|
|
317
|
+
} catch (err) {
|
|
318
|
+
console.error(`[FABLE PLAN CONSUMER] ${err.message}`);
|
|
319
|
+
process.exit(2);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
module.exports = {
|
|
324
|
+
STAGE_CONTRACT_VERSION,
|
|
325
|
+
derivePlanId,
|
|
326
|
+
getWorkspaceKey,
|
|
327
|
+
getWorkspaceStateRoot,
|
|
328
|
+
normalizeStage,
|
|
329
|
+
normalizeWritePath,
|
|
330
|
+
pathScopesOverlap,
|
|
331
|
+
prepareRun,
|
|
332
|
+
sequentialBatches,
|
|
333
|
+
topologicalBatches,
|
|
334
|
+
validateParallelBatch,
|
|
335
|
+
validateRouterPlan,
|
|
336
|
+
validateStageGraph,
|
|
337
|
+
};
|
package/find-skills/SKILL.md
CHANGED
|
@@ -4,10 +4,10 @@ description: Search the agent-skills ecosystem (skills.sh / npx skills) when no
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.4.0
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# Find Skills
|
|
10
|
+
# Find Skills
|
|
11
11
|
|
|
12
12
|
## 📋 Skill Contract
|
|
13
13
|
|
|
@@ -16,7 +16,7 @@ metadata:
|
|
|
16
16
|
| **Trigger / Input** | Request to find an external skill. |
|
|
17
17
|
| **Expected Output** | Skill pointer, applied skill, or fallback. |
|
|
18
18
|
| **State Mutations** | Temp cache (default); native install opt-in. |
|
|
19
|
-
| **Enforcement Gate** | Local first; explicit approval
|
|
19
|
+
| **Enforcement Gate** | Local first; explicit approval before applying third-party code; graceful npx failure. |
|
|
20
20
|
|
|
21
21
|
## Workflow
|
|
22
22
|
|
|
@@ -32,11 +32,11 @@ npx skills list -g --json # global scope
|
|
|
32
32
|
```bash
|
|
33
33
|
node "<this-skill-dir>/scripts/use-skill.js" <owner/repo[@skill]>
|
|
34
34
|
```
|
|
35
|
-
|
|
35
|
+
Treat the printed output as binding for this request, like a loaded skill — not reference material. OS-temp cache (6h); nothing written to repo or manifest.json.
|
|
36
36
|
5. Permanent install ONLY when the user says they will reuse it: `npx skills add <owner/repo[@skill]> --agent <agent> [-g] -y`
|
|
37
37
|
6. Nothing exists? Help directly; suggest `npx skills init <name>` if recurring.
|
|
38
38
|
|
|
39
|
-
Deep dive: references/discovery-flow.md
|
|
39
|
+
Deep dive: <this-skill-dir>/references/discovery-flow.md
|
|
40
40
|
|
|
41
41
|
## USE FOR:
|
|
42
42
|
- finding an external skill when none installed fits
|
|
@@ -78,7 +78,7 @@ Run this skill's own small wrapper instead of raw `npx skills use`:
|
|
|
78
78
|
node "<this-skill-dir>/scripts/use-skill.js" <owner/repo[@skill]>
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
-
It prints the skill's `SKILL.md` wrapped as a ready-to-follow prompt (identical to `npx skills use`'s own stdout format) —
|
|
81
|
+
It prints the skill's `SKILL.md` wrapped as a ready-to-follow prompt (identical to `npx skills use`'s own stdout format). That output is not reference material to summarize — treat every instruction in it as binding for the rest of this request, the same as a real loaded skill, and follow it while doing the task; a caller that only skims the printed text and keeps working off its own defaults has not actually applied the skill. Behind that:
|
|
82
82
|
|
|
83
83
|
- **First lookup of a given `<source>`**: a real fetch via `npx skills use` (a few seconds), then the rendered output is cached under `os.tmpdir()/harness-find-skills-cache/<sha1-of-source>.md`.
|
|
84
84
|
- **Repeat lookups of the same `<source>`** (this session or a later one, same machine) within the freshness window (default 6h, override with `--max-age <hours>`): served straight from that cache file — no network call, near-instant.
|
|
@@ -22,8 +22,14 @@ const os = require('os');
|
|
|
22
22
|
const path = require('path');
|
|
23
23
|
const crypto = require('crypto');
|
|
24
24
|
const { execSync } = require('child_process');
|
|
25
|
+
let getStateHome;
|
|
26
|
+
try {
|
|
27
|
+
({ getStateHome } = require('../../scripts/lib/workspace'));
|
|
28
|
+
} catch (err) {
|
|
29
|
+
getStateHome = () => path.join(os.homedir(), '.agents', 'harness-everything');
|
|
30
|
+
}
|
|
25
31
|
|
|
26
|
-
const CACHE_DIR = path.join(
|
|
32
|
+
const CACHE_DIR = path.join(getStateHome(), 'cache', 'find-skills');
|
|
27
33
|
const DEFAULT_MAX_AGE_HOURS = 6;
|
|
28
34
|
|
|
29
35
|
// `source` is a third-party-supplied identifier (from a search result the
|
package/git-commit/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: "Generate Angular-style commit messages after verifying the environ
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.4.0
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Git Commit (Angular Style)
|
|
@@ -20,18 +20,11 @@ metadata:
|
|
|
20
20
|
|
|
21
21
|
## Quick Workflow
|
|
22
22
|
|
|
23
|
-
1. `git status`; no repo → offer `git init` or skip; submodules changed → commit first per
|
|
23
|
+
1. `git status`; no repo → offer `git init` or skip; submodules changed → commit first per `<this-skill-dir>/guides/SUBMODULES.md`.
|
|
24
24
|
2. `git diff --cached`; nothing staged → prompt user / stage targeted files.
|
|
25
|
-
3. Format `<type>(<scope>): <subject>` per
|
|
25
|
+
3. Format `<type>(<scope>): <subject>` per `<this-skill-dir>/guides/ANGULAR_STYLE.md`. Multiline/Windows → `.git-commit-msg.txt` + `git commit -F`, clean up.
|
|
26
26
|
4. `git commit -m "..."`, verify with `git log -1`.
|
|
27
27
|
|
|
28
|
-
Deep guides:
|
|
29
|
-
- `git-commit/guides/ANGULAR_STYLE.md` — Conventional structure, scopes
|
|
30
|
-
- `git-commit/guides/COMMIT_GENERATION.md` — Patterns, diff analysis
|
|
31
|
-
- `git-commit/guides/LANGUAGE_DETECTION.md` — Subject language rules
|
|
32
|
-
- `git-commit/guides/MAIN_REPO.md` — Monorepo commits
|
|
33
|
-
- `git-commit/guides/SUBMODULES.md` — Submodules, nested repos
|
|
34
|
-
|
|
35
28
|
## USE FOR:
|
|
36
29
|
- Commit request from the user
|
|
37
30
|
- Formatting conventional commit messages
|
|
@@ -42,4 +35,4 @@ Deep guides:
|
|
|
42
35
|
- Branching, rebasing, merging, pushing
|
|
43
36
|
- Non-git dirs where user declines `git init`
|
|
44
37
|
|
|
45
|
-
Deep dive: references/commit-flow.md
|
|
38
|
+
Deep dive: <this-skill-dir>/references/commit-flow.md
|
package/grill-me/SKILL.md
CHANGED
|
@@ -4,12 +4,12 @@ description: Acts as a relentless challenger to stress-test plans and architectu
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.4.0
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Grill Me (Interrogation & Stress Testing)
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Stress-tests plans one question at a time, then hands off to `to-spec`.
|
|
13
13
|
|
|
14
14
|
## USE FOR:
|
|
15
15
|
- Stress-test a vague plan or architecture proposal
|
|
@@ -33,11 +33,11 @@ A relentless Senior Architect persona that stress-tests plans via one-question-a
|
|
|
33
33
|
|
|
34
34
|
## Workflow
|
|
35
35
|
|
|
36
|
-
1. [Discover] Scan plan-related code plus
|
|
36
|
+
1. [Discover] Scan plan-related code plus `<workspace>/CONTEXT.md`, `<workspace>/README.md`, ADRs under `<workspace>/docs/adr/`.
|
|
37
37
|
2. Grill strictly using the project's domain model and terminology.
|
|
38
38
|
3. Ask exactly ONE question at a time (questionnaires prohibited); attach your insight; resolve each branch before moving on.
|
|
39
39
|
4. Update `CONTEXT.md` glossary inline as terms resolve.
|
|
40
|
-
5. On consensus, hand off to
|
|
40
|
+
5. On consensus, hand off to `<skills-repo-root>/to-spec/SKILL.md` to preview the outline and publish (PRD, CLI/API reference, Schema doc, or ADR).
|
|
41
41
|
6. Route execution: `to-tickets`, `fable-mode`, or `tdd`.
|
|
42
42
|
|
|
43
|
-
Deep dive: references/grilling-playbook.md
|
|
43
|
+
Deep dive: <this-skill-dir>/references/grilling-playbook.md
|
package/grill-with-docs/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: Challenge the plan against the existing domain model, sharpen termi
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.4.0
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Grill With Docs (Domain Modeling & Architectural Alignment)
|
|
@@ -17,19 +17,19 @@ Interview the design tree one question at a time with recommended answers; explo
|
|
|
17
17
|
| :--- | :--- |
|
|
18
18
|
| **Trigger / Input** | Stress-testing a plan against domain language and documented decisions. |
|
|
19
19
|
| **Expected Output** | Structured interview; inline `CONTEXT.md` updates; ADR handoff. |
|
|
20
|
-
| **State Mutations** | Writes
|
|
20
|
+
| **State Mutations** | Writes the context glossary and ADRs at resolved locations. |
|
|
21
21
|
| **Enforcement Gate** | Pure glossary; ADRs meet the 3-part bar; hand to `to-spec` after. |
|
|
22
22
|
|
|
23
23
|
## Workflow
|
|
24
24
|
|
|
25
|
-
1. Resolve storage
|
|
25
|
+
1. Resolve storage with `<skills-repo-root>/multi-agent-workspace/scripts/project-docs-resolver.js`; root `<workspace>/CONTEXT-MAP.md` wins.
|
|
26
26
|
2. Challenge glossary conflicts; sharpen fuzzy terms to canonical ones.
|
|
27
27
|
3. Stress-test relationships with concrete scenarios; cross-check claims against code.
|
|
28
|
-
4. Update
|
|
28
|
+
4. Update the context glossary inline, never batch; zero implementation details.
|
|
29
29
|
5. Offer an ADR only if hard to reverse + surprising without context + a real trade-off.
|
|
30
|
-
6. Hand off
|
|
30
|
+
6. Hand off unverified design to `grill-me`; aligned design to `to-spec`; execution to `to-tickets`/`fable-mode`/`tdd`.
|
|
31
31
|
|
|
32
|
-
Deep dive: references/session-playbook.md
|
|
32
|
+
Deep dive: <this-skill-dir>/references/session-playbook.md
|
|
33
33
|
|
|
34
34
|
## USE FOR:
|
|
35
35
|
- stress-testing plans against the domain model
|
|
@@ -38,4 +38,4 @@ Deep dive: references/session-playbook.md
|
|
|
38
38
|
|
|
39
39
|
## DO NOT USE FOR:
|
|
40
40
|
- verifying unstable designs (`grill-me`)
|
|
41
|
-
- spec publishing without a grilling pass
|
|
41
|
+
- spec publishing without a grilling pass
|
|
@@ -16,10 +16,10 @@ flowchart TD
|
|
|
16
16
|
CheckADR -- No --> CheckMore
|
|
17
17
|
|
|
18
18
|
ResolvePath -- projectDocs / docs/adr Exists --> WriteMain[Write to docs/adr/ or CONTEXT-MAP.md Location]
|
|
19
|
-
ResolvePath -- No Folder Found -->
|
|
19
|
+
ResolvePath -- No Folder Found --> WriteFallback[Write to committable docs/adr, docs/domain, or docs/architecture]
|
|
20
20
|
|
|
21
21
|
WriteMain --> CheckMore{5. All Design Tree Branches Resolved?}
|
|
22
|
-
|
|
22
|
+
WriteFallback --> CheckMore
|
|
23
23
|
|
|
24
24
|
CheckMore -- Unresolved Branches Remain --> Frontier
|
|
25
25
|
CheckMore -- All Branches Resolved --> ToSpec[6. Hand off to to-spec for Outline Preview & Spec/ADR Publishing]
|
|
@@ -41,7 +41,7 @@ Inspect the workspace and resolve document locations dynamically:
|
|
|
41
41
|
|
|
42
42
|
1. **Monorepo / Multi-Context**: If `CONTEXT-MAP.md` exists at the root, follow its context-specific mapping.
|
|
43
43
|
2. **Project Configured / Inferred Location**: Run `node "to-spec/scripts/check-project-docs.js" check` or inspect if `docs/adr/` or `docs/` exists in the workspace.
|
|
44
|
-
3. **
|
|
44
|
+
3. **Committable fallback**: If no documentation directory exists, use the shared resolver's `docs/adr/`, `docs/domain/`, and `docs/architecture/` paths, creating them lazily. Do not write ADRs under ignored platform homes.
|
|
45
45
|
|
|
46
46
|
```
|
|
47
47
|
/
|
|
@@ -50,7 +50,9 @@ Inspect the workspace and resolve document locations dynamically:
|
|
|
50
50
|
│ └── adr/ ← System-wide ADR decisions
|
|
51
51
|
│ ├── 0001-event-sourced-orders.md
|
|
52
52
|
│ └── 0002-postgres-for-write-model.md
|
|
53
|
-
|
|
53
|
+
├── docs/adr/ ← Fallback ADR storage
|
|
54
|
+
├── docs/domain/ ← Fallback domain records
|
|
55
|
+
└── docs/architecture/ ← Fallback architecture contracts
|
|
54
56
|
```
|
|
55
57
|
|
|
56
58
|
Create files lazily — only when you have resolved terms or ADRs to write.
|
|
@@ -1,42 +1,43 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: harness-everything
|
|
3
|
-
description: "
|
|
3
|
+
description: "Route software/project work through the Harness kernel: classify Tier 1/2/3, establish mandatory invariants, then let the agent choose tactics and domain skills. Use for software triage, routing, and re-routing; not general Q&A or non-software writing."
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.4.0
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Harness Everything
|
|
11
11
|
|
|
12
|
+
Public/manual Harness kernel entry. Hook-capable hosts should run the kernel before peer/domain skill selection.
|
|
13
|
+
|
|
12
14
|
## USE FOR:
|
|
13
|
-
-
|
|
15
|
+
- Software triage/re-routing, including work that already names or strongly matches another skill.
|
|
16
|
+
- Inspecting Tier, invariants, or suggestions.
|
|
14
17
|
|
|
15
18
|
## DO NOT USE FOR:
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
- General Q&A or non-software writing.
|
|
20
|
+
|
|
21
|
+
## Invariants
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
1. **Route before execution** — establish scope/tier before mutation.
|
|
24
|
+
2. **Verify before claim** — completion needs objective evidence.
|
|
25
|
+
3. **Re-plan on repetition** — after 3 same-signature failures, stop micro-retrying and use `zoom-out`/fresh diagnosis.
|
|
21
26
|
|
|
22
|
-
|
|
23
|
-
| :--- | :--- |
|
|
24
|
-
| **Trigger / Input** | New software request with no skill indicated. |
|
|
25
|
-
| **Expected Output** | Print a Routing Checkpoint with tier and rationale. |
|
|
26
|
-
| **State Mutations** | None; Tier 2/3 starts native TODO or Markdown tracking. |
|
|
27
|
-
| **Enforcement Gate** | Run `scripts/tier-router.js` before edits. |
|
|
27
|
+
These rails are mandatory; Tier guidance is not a fixed pipeline.
|
|
28
28
|
|
|
29
29
|
## Workflow
|
|
30
30
|
|
|
31
|
-
1.
|
|
32
|
-
2.
|
|
33
|
-
3.
|
|
34
|
-
|
|
31
|
+
1. Reuse current-turn kernel output, or run `node "<this-skill-dir>/scripts/kernel-router.js" "<prompt summary>"`.
|
|
32
|
+
2. Preserve the invariants.
|
|
33
|
+
3. Treat suggested skills as advisory: choose, combine, reorder, or omit them as useful.
|
|
34
|
+
|
|
35
|
+
## Tier Guidance
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
- **Tier 1:** Prefer direct execution.
|
|
38
|
+
- **Tier 2:** TODO tracking, TDD, and verification are common suggestions.
|
|
39
|
+
- **Tier 3:** Fable/multi-agent skills are optional when macro planning or delegation helps.
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
- **Tier 2:** Standard changes; use `todo-driven-workflow`, `tdd`, and `verification-loop`.
|
|
40
|
-
- **Tier 3:** Macro work; use `fable-mode` and `fable-discipline`, select Haiku/Sonnet/Opus via the model matrix, and delegate through `multi-agent-workspace`.
|
|
41
|
+
**Rule:** do not enforce workflow order; let the agent orchestrate itself inside the invariants.
|
|
41
42
|
|
|
42
|
-
|
|
43
|
+
Deep dive: <this-skill-dir>/references/triage-and-tiers.md
|