harness-everything 0.16.0 → 0.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +14 -0
- package/README.md +7 -7
- package/VERIFICATION.md +3 -3
- package/behavioral-evals/PAIRED-BENCHMARK.md +3 -3
- package/behavioral-evals/README.md +38 -32
- package/behavioral-evals/opencode-hardlock-live.js +6 -290
- package/behavioral-evals/opencode-reflection-gate-live.js +342 -0
- package/behavioral-evals/paired-benchmark.js +3 -3
- package/ci/consistency-check.js +20 -0
- package/ci/invariant-routing.test.js +58 -158
- package/ci/mechanism-2a-rule-of-3.test.js +73 -138
- package/ci/mechanism-2ac-atomic-commit-check.test.js +2 -2
- package/ci/mechanism-2af-worktree-isolation.test.js +38 -196
- package/ci/mechanism-2ah-workflow-lifecycle.test.js +20 -831
- package/ci/mechanism-2ai-workspace-fingerprint-batch.test.js +3 -4
- package/ci/mechanism-2b-boundary-guard.test.js +6 -16
- package/ci/mechanism-2e-scope-guard.test.js +8 -24
- package/ci/mechanism-2f-stop-gate.test.js +21 -75
- package/ci/mechanism-2n-opencode-plugin.test.js +13 -28
- package/ci/mechanism-31-opencode-hardlock-evidence.test.js +43 -99
- package/ci/openai-plugin-package.test.js +8 -8
- package/ci/openai-plugin-runtime.test.js +2 -2
- package/ci/router-workflow-plan.test.js +25 -6
- package/ci/self-evolve-loop.test.js +4 -1
- package/ci/workflow-execution-contract.test.js +51 -129
- package/ci/workflow-plan-consumers-edge.test.js +1 -1
- package/ci/workflow-plan-consumers.test.js +6 -6
- package/docs/architecture.md +21 -21
- package/docs/enforcement-locks.md +41 -102
- package/docs/mechanism-first-skill-mesh.md +2 -2
- package/docs/philosophy.md +2 -2
- package/docs/platform-capabilities.md +3 -3
- package/docs/routing.md +14 -14
- package/docs/workflow-runtime.md +80 -110
- 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/using-git-worktrees/tasks/positive-trigger.yaml +1 -1
- package/fable-mode/SKILL.md +1 -1
- package/fable-mode/agents/fable-orchestrator.md +7 -6
- package/fable-mode/execution-guardrails/SKILL.md +1 -1
- package/fable-mode/fable-haiku/SKILL.md +1 -1
- package/fable-mode/fable-opus/SKILL.md +1 -1
- package/fable-mode/fable-sonnet/SKILL.md +1 -1
- package/fable-mode/scripts/workflow-plan-consumer.js +4 -3
- package/harness-everything/SKILL.md +11 -11
- package/harness-everything/references/router-workflow-plan.md +2 -2
- package/harness-everything/references/triage-and-tiers.md +11 -11
- package/harness-everything/scripts/kernel-router-core.js +5 -5
- package/harness-everything/scripts/kernel-router.js +16 -21
- package/harness-everything/scripts/router-contract-core.js +1 -1
- package/hooks/hooks.json +10 -23
- package/hooks/scripts/atomic-commit-check.js +1 -1
- package/hooks/scripts/boundary-guard.js +4 -4
- package/hooks/scripts/contract-test.js +8 -11
- package/hooks/scripts/depth-guard.js +2 -2
- package/hooks/scripts/lib/workflow-runtime.js +24 -402
- package/hooks/scripts/rule-of-3-tracker.js +28 -31
- package/hooks/scripts/rule-of-3.js +4 -28
- package/hooks/scripts/state-persist.js +36 -136
- package/hooks/scripts/stop-gate.js +15 -48
- package/hooks/scripts/subagent-scope-guard.js +8 -8
- package/hooks/scripts/workflow-disposition.js +2 -10
- package/hooks/scripts/workflow-gate.js +33 -84
- package/hooks/scripts/workflow-mutation-denied.js +3 -15
- package/hooks/scripts/workflow-stop-gate.js +23 -38
- package/opencode-plugin/README.md +10 -13
- package/opencode-plugin/index.mjs +14 -30
- package/opencode-plugin/plugin.json +1 -1
- package/package.json +3 -2
- package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
- package/plugins/harness-everything/hooks/hooks.json +3 -3
- package/plugins/harness-everything/hooks/scripts/atomic-commit-check.js +1 -1
- package/plugins/harness-everything/hooks/scripts/boundary-guard.js +4 -4
- package/plugins/harness-everything/hooks/scripts/contract-test.js +8 -11
- package/plugins/harness-everything/hooks/scripts/depth-guard.js +2 -2
- package/plugins/harness-everything/hooks/scripts/lib/workflow-runtime.js +24 -402
- package/plugins/harness-everything/hooks/scripts/rule-of-3-tracker.js +28 -31
- package/plugins/harness-everything/hooks/scripts/rule-of-3.js +4 -28
- package/plugins/harness-everything/hooks/scripts/state-persist.js +36 -136
- package/plugins/harness-everything/hooks/scripts/stop-gate.js +15 -48
- package/plugins/harness-everything/hooks/scripts/subagent-scope-guard.js +8 -8
- package/plugins/harness-everything/hooks/scripts/workflow-disposition.js +2 -10
- package/plugins/harness-everything/hooks/scripts/workflow-gate.js +33 -84
- package/plugins/harness-everything/hooks/scripts/workflow-mutation-denied.js +3 -15
- package/plugins/harness-everything/hooks/scripts/workflow-stop-gate.js +23 -38
- package/plugins/harness-everything/plugin.json +1 -1
- package/plugins/harness-everything/scripts/lib/advisory-text.js +16 -29
- package/plugins/harness-everything/skills/fable-mode/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/agents/fable-orchestrator.md +7 -6
- package/plugins/harness-everything/skills/fable-mode/execution-guardrails/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/fable-haiku/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/fable-sonnet/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/scripts/workflow-plan-consumer.js +4 -3
- package/plugins/harness-everything/skills/harness-everything/SKILL.md +11 -11
- package/plugins/harness-everything/skills/harness-everything/references/router-workflow-plan.md +2 -2
- package/plugins/harness-everything/skills/harness-everything/references/triage-and-tiers.md +11 -11
- package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router-core.js +5 -5
- package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router.js +16 -21
- package/plugins/harness-everything/skills/harness-everything/scripts/router-contract-core.js +1 -1
- package/plugins/harness-everything/skills/using-git-worktrees/SKILL.md +5 -5
- package/plugins/harness-everything/skills/zoom-out/SKILL.md +3 -3
- package/plugins/harness-everything/skills/zoom-out/references/circuit-breaker.md +4 -4
- package/scripts/lib/advisory-text.js +16 -29
- package/using-git-worktrees/SKILL.md +5 -5
- package/zoom-out/SKILL.md +3 -3
- package/zoom-out/references/circuit-breaker.md +4 -4
|
@@ -7,35 +7,23 @@ const MARKER = "Harness OS Guidance (Advisory)";
|
|
|
7
7
|
|
|
8
8
|
const advisoryInstructions = [
|
|
9
9
|
`\n# ${MARKER}`,
|
|
10
|
-
`
|
|
11
|
-
`Treat the workflow contract below as required agent behavior, while keeping enforcement`,
|
|
12
|
-
`claims bounded by the host's verified capabilities.`,
|
|
10
|
+
`Harness is an observer/router/reminder layer on this surface; do not treat its workflow guidance as a hard scheduler.`,
|
|
13
11
|
``,
|
|
14
|
-
`## 🚦
|
|
15
|
-
`For
|
|
16
|
-
`1. Run \`npx github:dyphn1/Harness-everything next "<Brief summary of user's prompt>"
|
|
17
|
-
`2. For EVERY suggested skill, read its complete \`SKILL.md\` entry and
|
|
18
|
-
`3.
|
|
19
|
-
`4.
|
|
20
|
-
`5. Surface a compact checkpoint
|
|
21
|
-
` \`\`\`markdown`,
|
|
22
|
-
` ## 🚦 Harness OS Routing Checkpoint`,
|
|
23
|
-
` - **Active Tier**: Tier 1 | Tier 2 | Tier 3 | unclassified`,
|
|
24
|
-
` - **Strategy**: <selected/deferred strategy>`,
|
|
25
|
-
` - **Workflow State**: <active | deferred | blocked | escaped>`,
|
|
26
|
-
` - **Required Invariants**: <router invariants>`,
|
|
27
|
-
` - **Suggested Skills**: <deduplicated suggestions or none>`,
|
|
28
|
-
` - **Applicability**: <use | not-applicable + reason | unresolved/unavailable>`,
|
|
29
|
-
` - **Escape**: <none | reason + uncovered scope + evidence>`,
|
|
30
|
-
` \`\`\``,
|
|
12
|
+
`## 🚦 ENTRY TRIAGE & WORKFLOW GUIDANCE`,
|
|
13
|
+
`For software/project work, load the \`harness-everything\` skill and establish routing context before broad mutation:`,
|
|
14
|
+
`1. Run \`npx github:dyphn1/Harness-everything next "<Brief summary of user's prompt>"\` when terminal execution is available.`,
|
|
15
|
+
`2. For EVERY suggested skill, read its complete \`SKILL.md\` entry and evaluate applicability from \`USE FOR\`, \`DO NOT USE FOR\`, and its basic flow.`,
|
|
16
|
+
`3. Treat the selected workflow topology and numeric limits as planning guidance, not a lock. Choose, combine, reorder, or skip steps when evidence supports it.`,
|
|
17
|
+
`4. Prefer objective verification before declaring done and worktree isolation for broad/Tier-3 mutation.`,
|
|
18
|
+
`5. Surface a compact routing checkpoint with tier, strategy, suggested skills, and any relevant warnings.`,
|
|
31
19
|
``,
|
|
32
20
|
`## 🤖 COGNITIVE COMPLIANCE`,
|
|
33
|
-
`- **No universal skill pipeline**: do not force every task through TODO/TDD/Fable
|
|
34
|
-
`- **
|
|
35
|
-
`- **
|
|
36
|
-
`- **
|
|
21
|
+
`- **No universal skill pipeline**: do not force every task through TODO/TDD/Fable.`,
|
|
22
|
+
`- **Rule of 3**: after 3 same-signature failures, stop micro-retrying and use a fresh diagnosis / zoom-out. This reflection boundary may block mutation until completed.`,
|
|
23
|
+
`- **Permission boundaries are separate**: explicit host/user approval for destructive or external actions remains authoritative.`,
|
|
24
|
+
`- **Verification is evidence, not a cage**: missing evidence should trigger a reminder, not a persistent workflow lock.`,
|
|
37
25
|
`- **Environment discovery**: discover OS, shell, package manager/runtime, and host capability before relying on them.`,
|
|
38
|
-
`- **Memory / self-evolve**: persist only verified reusable lessons
|
|
26
|
+
`- **Memory / self-evolve**: persist only verified reusable lessons.`,
|
|
39
27
|
`- **Prefer editing**: prefer targeted edits and logically complete commits over broad rewrites.`,
|
|
40
28
|
``
|
|
41
29
|
].join('\n');
|
|
@@ -149,10 +137,9 @@ function buildCodexGlobalContent() {
|
|
|
149
137
|
`- Discover the environment and host capabilities before relying on them.`,
|
|
150
138
|
`- For software/project work, run \`npx github:dyphn1/Harness-everything next "<summary>"\` before mutation and surface the routing checkpoint.`,
|
|
151
139
|
`- Read every suggested skill's complete \`SKILL.md\` entry before resolving applicability; do not omit it from metadata or confidence alone.`,
|
|
152
|
-
`-
|
|
153
|
-
`- Do not impose a universal TODO/TDD/Fable sequence; use the smallest
|
|
154
|
-
`-
|
|
155
|
-
`- Before declaring done, run \`npx github:dyphn1/Harness-everything verify\` and fix failures.`,
|
|
140
|
+
`- Use the selected workflow topology as planning guidance; the model may adapt or skip steps with an explicit evidence-based reason.`,
|
|
141
|
+
`- Do not impose a universal TODO/TDD/Fable sequence; use the smallest useful topology plus applicable skills.`,
|
|
142
|
+
`- Prefer objective verification before declaring done; missing verification is a reminder, not a persistent lock.`,
|
|
156
143
|
`- After 3 same-signature failures, stop retrying and use a fresh diagnosis / zoom-out.`,
|
|
157
144
|
`- Prefer targeted edits and logically complete commits.`,
|
|
158
145
|
``
|
|
@@ -53,12 +53,13 @@ overlap reject dispatch instead of becoming a verbal warning.
|
|
|
53
53
|
|
|
54
54
|
The stage map remains a living orchestration document only inside those
|
|
55
55
|
constraints. When new information invalidates it, re-plan and create revised
|
|
56
|
-
stage contracts before dispatching new work.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
stage contracts before dispatching new work. `workflowPlan.limits.maxReplans`
|
|
57
|
+
is advisory orchestration guidance, not a machine-enforced counter. Re-enter
|
|
58
|
+
through `workflow-disposition.js start`; after repeated replans, consider a
|
|
59
|
+
zoom-out/reflection and keep the reason explicit, but do not block execution
|
|
60
|
+
solely because an advisory count was reached. Scope rule: deliver the task as
|
|
61
|
+
specified; new scope discovered mid-run is surfaced as a recommendation at
|
|
62
|
+
delivery, not silently built.
|
|
62
63
|
|
|
63
64
|
**2. Delegate by name and validated batch.** Every artifact-producing stage goes
|
|
64
65
|
to a named agent via the Task tool:
|
|
@@ -180,8 +180,9 @@ function dependencyBatches(stages, validateWrites, maxBatchSize = Infinity) {
|
|
|
180
180
|
return batches;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
-
function topologicalBatches(stages,
|
|
184
|
-
|
|
183
|
+
function topologicalBatches(stages, _maxWorkers) {
|
|
184
|
+
// maxWorkers is an advisory planning hint, not a runtime concurrency lock (#190).
|
|
185
|
+
return dependencyBatches(stages, true);
|
|
185
186
|
}
|
|
186
187
|
|
|
187
188
|
function sequentialBatches(stages) {
|
|
@@ -197,7 +198,7 @@ function validateRouterPlan(routerContract) {
|
|
|
197
198
|
if (plan.strategySelection !== 'selected') throw new Error(`workflow strategy is not selected: ${plan.strategySelection}`);
|
|
198
199
|
if (!FABLE_STRATEGIES.has(plan.strategy)) throw new Error(`workflow strategy is not a Fable consumer topology: ${plan.strategy}`);
|
|
199
200
|
if (plan.fallback && plan.fallback.disposition === 'blocked') {
|
|
200
|
-
|
|
201
|
+
console.error(`[Fable Reminder] plan reports blocked/degraded capability: ${(plan.fallback.reasonCodes || []).join(', ') || 'unspecified reason'}`);
|
|
201
202
|
}
|
|
202
203
|
if (plan.strategy === 'fable-parallel' && (!plan.parallelism || plan.parallelism.allowed !== true)) {
|
|
203
204
|
throw new Error('fable-parallel requires workflowPlan.parallelism.allowed=true');
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: harness-everything
|
|
3
|
-
description: "Route software/project work through the Harness kernel: classify Tier 1/2/3,
|
|
3
|
+
description: "Route software/project work through the Harness kernel: classify Tier 1/2/3, surface planning guidance and applicable skills, then let the agent choose tactics. 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.16.2
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Harness Everything
|
|
@@ -19,20 +19,20 @@ Kernel routing entry.
|
|
|
19
19
|
- General Q&A or non-software writing.
|
|
20
20
|
|
|
21
21
|
## Invariants
|
|
22
|
-
1. **Route before execution** — establish scope/tier and
|
|
23
|
-
2. **Verify before claim** —
|
|
24
|
-
3. **
|
|
22
|
+
1. **Route before execution** — establish scope/tier and useful workflow guidance.
|
|
23
|
+
2. **Verify before claim** — seek objective evidence before saying work is done.
|
|
24
|
+
3. **Zoom out on repetition** — after 3 same-signature failures, use `zoom-out`.
|
|
25
25
|
4. **Evaluate before omission** — read each suggested skill's `SKILL.md` before deciding applicability.
|
|
26
|
-
5. **
|
|
26
|
+
5. **Keep agency** — workflow state and numeric limits guide; they do not hard-stop execution.
|
|
27
27
|
|
|
28
28
|
## Workflow
|
|
29
29
|
1. Reuse kernel output, or run `node "<this-skill-dir>/scripts/kernel-router.js" "<prompt summary>"`.
|
|
30
30
|
2. Surface the **Harness Routing Checkpoint**.
|
|
31
|
-
3. Read each suggested `SKILL.md`; evaluate `USE FOR`, `DO NOT USE FOR`, workflow/basic flow, and hard rules.
|
|
32
|
-
4.
|
|
33
|
-
5.
|
|
34
|
-
6.
|
|
31
|
+
3. Read each suggested `SKILL.md`; evaluate `USE FOR`, `DO NOT USE FOR`, workflow/basic flow, and hard rules.
|
|
32
|
+
4. Use the selected topology as planning guidance. Choose, combine, reorder, or skip steps when evidence supports doing so.
|
|
33
|
+
5. Prefer worktree isolation for broad/Tier-3 mutation and objective verification before completion.
|
|
34
|
+
6. If guidance is not useful, explain the reason briefly and continue; no Harness reset is required.
|
|
35
35
|
|
|
36
|
-
**Rule:**
|
|
36
|
+
**Rule:** guidance may become louder when evidence is weak, but only Rule-of-3 reflection and explicit user/host permission boundaries may block.
|
|
37
37
|
|
|
38
38
|
Deep dive: <this-skill-dir>/references/triage-and-tiers.md
|
package/plugins/harness-everything/skills/harness-everything/references/router-workflow-plan.md
CHANGED
|
@@ -54,14 +54,14 @@ If the structured contract is missing or invalid, the kernel emits a degraded/un
|
|
|
54
54
|
| Strategy | Selection rule | Key invariants |
|
|
55
55
|
|---|---|---|
|
|
56
56
|
| `direct-single` | Tier 1 bounded/trivial task | scope lock, verify before claim |
|
|
57
|
-
| `iterative-single` | Tier 2 ordinary diagnosis/TDD/tool loop | objective verification,
|
|
57
|
+
| `iterative-single` | Tier 2 ordinary diagnosis/TDD/tool loop | objective verification, advisory iteration guidance |
|
|
58
58
|
| `fable-staged` | Tier 3 dependent work or parallel independence not proven | stage contracts, cold verifier |
|
|
59
59
|
| `fable-parallel` | Tier 3 with explicit independent workstreams and read-only/disjoint write scope | stage contracts, parallel scope contract, synthesis barrier |
|
|
60
60
|
| `fable-multi-agent-workspace` | durable multi-session task needing reusable specialists | workspace state, handoffs, stage contracts, cold verifier |
|
|
61
61
|
|
|
62
62
|
Tier 3 alone never implies a persistent workspace. Likewise, an `independent` label alone is insufficient for `fable-parallel`: the write set must also be `read-only` or `disjoint`.
|
|
63
63
|
|
|
64
|
-
The Phase 2 `iterative-single`
|
|
64
|
+
The Phase 2 `iterative-single` plan exposes **8 iterations** as advisory planning guidance, not a machine-enforced stop. Continue when evidence justifies it; the separate rule-of-3 repeated-failure reflection gate remains the hard boundary.
|
|
65
65
|
|
|
66
66
|
## Explicit user choice and prohibitions
|
|
67
67
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Harness uses tiers to estimate scope and select the smallest sufficient execution topology. A tier is **not** a fixed TODO/TDD/Fable pipeline. Once the router selects an applicable topology, however, that topology becomes the run's execution contract.
|
|
4
4
|
|
|
5
|
-
> Architecture rule: **
|
|
5
|
+
> Architecture rule: **Guidance-first workflow; flexible reasoning/implementation; only Rule-of-3 reflection and explicit permission boundaries may block.**
|
|
6
6
|
|
|
7
7
|
## 0. When Harness Routing Applies
|
|
8
8
|
|
|
@@ -43,7 +43,7 @@ The kernel protects lifecycle obligations without micromanaging model reasoning.
|
|
|
43
43
|
2. **Verify before claim** — completion requires objective evidence appropriate to the change.
|
|
44
44
|
3. **Re-plan on repetition** — after three same-signature failures, stop micro-retrying and use a fresh diagnosis / `zoom-out`.
|
|
45
45
|
4. **Evaluate before omission** — when the router suggests a skill, read its complete `SKILL.md` entry/basic flow before deciding applicability.
|
|
46
|
-
5. **
|
|
46
|
+
5. **Review selected workflow** — use the topology as planning guidance and keep any skipped step evidence-based.
|
|
47
47
|
|
|
48
48
|
The model remains free to choose tools, implementation technique, decomposition details, and reasoning inside the workflow.
|
|
49
49
|
|
|
@@ -54,7 +54,7 @@ The model remains free to choose tools, implementation technique, decomposition
|
|
|
54
54
|
- Every router-suggested skill when its evaluated flow is objectively not applicable.
|
|
55
55
|
- Every optional deep-dive/reference linked from a skill.
|
|
56
56
|
|
|
57
|
-
A suggested skill may resolve as `use`, `not-applicable`, or `unresolved/unavailable`. `not-applicable` needs a flow-grounded reason; a metadata-only or confidence-only judgement is insufficient. The selected **topology** is
|
|
57
|
+
A suggested skill may resolve as `use`, `not-applicable`, or `unresolved/unavailable`. `not-applicable` needs a flow-grounded reason; a metadata-only or confidence-only judgement is insufficient. The selected **topology** is planning guidance. Escape/replan metadata may still record why a suggested path was not followed, but it is not a lock.
|
|
58
58
|
|
|
59
59
|
## 2. Routing Mechanism
|
|
60
60
|
|
|
@@ -73,7 +73,7 @@ npx github:dyphn1/Harness-everything next "<brief prompt summary>"
|
|
|
73
73
|
- compact **Harness Routing Checkpoint**,
|
|
74
74
|
- required invariants,
|
|
75
75
|
- suggested skills whose applicability must be evaluated,
|
|
76
|
-
- **Workflow
|
|
76
|
+
- **Workflow Guidance** for the selected topology.
|
|
77
77
|
|
|
78
78
|
If `UserPromptSubmit` already ran the kernel this turn, reuse that output. Do not infer a silent Tier 1/direct path from missing or degraded routing.
|
|
79
79
|
|
|
@@ -90,12 +90,12 @@ A name, description, router summary, tier label, or generic "routine/common task
|
|
|
90
90
|
|
|
91
91
|
### Workflow escape contract
|
|
92
92
|
|
|
93
|
-
Escape is
|
|
93
|
+
Escape is audit metadata for a bounded guidance deviation. Use it only when the selected topology genuinely cannot represent part of the task. The permitted reason codes are:
|
|
94
94
|
|
|
95
95
|
- `workflow-uncovered-scope` — the selected topology cannot represent a bounded part of the task;
|
|
96
96
|
- `host-capability-unavailable` — the host lacks a capability required to execute the selected topology.
|
|
97
97
|
|
|
98
|
-
Every escape must name a declared stage in the correlated run and record the reason code, uncovered scope, and evidence explaining the coverage/capability gap.
|
|
98
|
+
Every escape must name a declared stage in the correlated run and record the reason code, uncovered scope, and evidence explaining the coverage/capability gap. Host capability loss and missing isolation should remain visible as warnings/evidence, without creating a persistent execution lock.
|
|
99
99
|
|
|
100
100
|
## 3. Tier Guidance
|
|
101
101
|
|
|
@@ -117,7 +117,7 @@ When an evaluated skill is applicable, follow its workflow rather than reading i
|
|
|
117
117
|
|
|
118
118
|
Typical shape: repository-wide/architectural work, large ambiguous requirements, cross-source synthesis, or bounded delegation.
|
|
119
119
|
|
|
120
|
-
The router may select `fable-staged`, `fable-parallel`, or `fable-multi-agent-workspace`. A selected Fable topology is
|
|
120
|
+
The router may select `fable-staged`, `fable-parallel`, or `fable-multi-agent-workspace`. A selected Fable topology is structured planning guidance: use its stages/dependencies/evidence when helpful, but do not convert missing lifecycle evidence into a persistent workflow lock.
|
|
121
121
|
|
|
122
122
|
Tier 3 does **not** automatically mean multi-agent; the router still chooses the smallest sufficient topology.
|
|
123
123
|
|
|
@@ -140,11 +140,11 @@ This describes a reasoning policy. The workflow contract governs lifecycle oblig
|
|
|
140
140
|
|
|
141
141
|
| Host mode | Expected behavior |
|
|
142
142
|
|---|---|
|
|
143
|
-
| Lifecycle hooks available | Kernel
|
|
144
|
-
| Advisory instructions only | Agent
|
|
143
|
+
| Lifecycle hooks available | Kernel records selected workflow guidance. PreToolUse/Stop hooks emit reminders; Rule-of-3 and permission gates are the intentional blocking exceptions. |
|
|
144
|
+
| Advisory instructions only | Agent receives the same routing/workflow guidance without lifecycle observations. |
|
|
145
145
|
| Manual use | Invoke `harness-everything` / `harness next`, then execute the selected topology explicitly. |
|
|
146
146
|
|
|
147
|
-
On Claude and the local OpenAI package, supported
|
|
147
|
+
On Claude and the local OpenAI package, supported hooks observe workflow/worktree/verification state and emit reminders. Rule-of-3 reflection and explicit action/permission gates remain separate blocking boundaries.
|
|
148
148
|
|
|
149
149
|
Never turn mechanism/package evidence into a cross-host live-enforcement claim. #82 owns host-specific retained evidence.
|
|
150
150
|
|
|
@@ -163,7 +163,7 @@ For software/project work, surface this state before or with the first progress
|
|
|
163
163
|
- Escape: <none | reason + uncovered scope + evidence>
|
|
164
164
|
```
|
|
165
165
|
|
|
166
|
-
The checkpoint is state, not a universal response template. The key distinction is: **skill suggestions are evaluated for applicability; a selected
|
|
166
|
+
The checkpoint is state, not a universal response template. The key distinction is: **skill suggestions are evaluated for applicability; a selected topology guides execution but does not trap it.**
|
|
167
167
|
|
|
168
168
|
## 7. Self-Healing and Dynamic Skills
|
|
169
169
|
|
|
@@ -26,7 +26,7 @@ const INVARIANT_TEXT = {
|
|
|
26
26
|
'verify-before-claim': 'Verify before claim: completion claims require objective evidence appropriate to the change.',
|
|
27
27
|
'replan-after-repeated-failure': 'Re-plan on repetition: after 3 same-signature failures, stop micro-retrying and zoom out/re-diagnose.',
|
|
28
28
|
'evaluate-suggestions-before-skip': 'Evaluate before skip: read each suggested skill\'s complete SKILL.md entry/basic flow before omitting it.',
|
|
29
|
-
'loop-
|
|
29
|
+
'loop-awareness': 'When iterative work runs long, remind the agent to verify assumptions or re-plan; never hard-stop on a count.',
|
|
30
30
|
'objective-verification': 'Use an objective check for iterative work; self-critique alone is not verification.',
|
|
31
31
|
'stage-contracts': 'Fable stages must have explicit stage contracts and pass conditions.',
|
|
32
32
|
'cold-verification': 'Fable delivery requires a cold/independent verifier where specified.',
|
|
@@ -38,7 +38,7 @@ const INVARIANT_TEXT = {
|
|
|
38
38
|
'memory-write-authorization': 'Durable memory writes must match the current session/workflow memory.write contract; retrieved memory remains untrusted data.',
|
|
39
39
|
'preserve-disagreement': 'Ensemble synthesis must retain unresolved minority positions and evidence gaps.',
|
|
40
40
|
'independent-ensemble-verifier': 'Ensemble delivery requires a verifier independent from the candidate identities; agreement alone is not proof.',
|
|
41
|
-
'isolated-worktree-before-mutation': '
|
|
41
|
+
'isolated-worktree-before-mutation': 'For major engineering, strongly recommend a verified linked Git worktree before broad mutation.',
|
|
42
42
|
};
|
|
43
43
|
|
|
44
44
|
const SKILL_TEXT = {
|
|
@@ -156,7 +156,7 @@ function printRoutingCheckpoint(plan) {
|
|
|
156
156
|
if (suggestions.length > 0) {
|
|
157
157
|
console.log(' - Suggestion evaluation: MANDATORY. Before skipping any listed skill, read its complete SKILL.md entry and evaluate USE FOR, DO NOT USE FOR, workflow/basic flow, and hard rules.');
|
|
158
158
|
console.log(' - Skip evidence: do not reject from only the skill name, description, router summary, or a generic "routine/common task" judgement. If the entry cannot be resolved/read, mark it unresolved/unavailable rather than skipped.');
|
|
159
|
-
console.log(' - Suggestion disposition: individual skill applicability is conditional; the selected workflow is
|
|
159
|
+
console.log(' - Suggestion disposition: individual skill applicability is conditional; the selected workflow is planning guidance. Using one suggestion does not waive read-before-skip for other omitted suggestions. If all are not-applicable, state one brief flow-grounded reason.');
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
|
|
@@ -166,7 +166,7 @@ function printKernelContract(plan) {
|
|
|
166
166
|
console.log(` - ${invariant}: ${INVARIANT_TEXT[invariant] || 'Required by the selected workflow plan.'}`);
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
console.log('\n=> WORKFLOW SKILLS (EVALUATE APPLICABILITY — SELECTED WORKFLOW IS
|
|
169
|
+
console.log('\n=> WORKFLOW SKILLS (EVALUATE APPLICABILITY — SELECTED WORKFLOW IS GUIDANCE):');
|
|
170
170
|
if (Array.isArray(plan.suggestedSkills) && plan.suggestedSkills.length > 0) {
|
|
171
171
|
const emitted = new Set();
|
|
172
172
|
for (const skill of plan.suggestedSkills) {
|
|
@@ -204,7 +204,7 @@ function printKernelContract(plan) {
|
|
|
204
204
|
console.log('\n=> ROUTING DEGRADATION: Structured routing is degraded. Keep the strategy deferred unless independent evidence supports a route; do not silently downgrade to Tier 1/direct execution.');
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
console.log('\n=> ORCHESTRATION POLICY:
|
|
207
|
+
console.log('\n=> ORCHESTRATION POLICY: Selected topology is planning guidance. Evaluate the suggested workflow and preserve objective evidence, but lifecycle hooks remind rather than hard-block. User/host permission boundaries and the Rule-of-3 zoom-out remain separate safety rails.');
|
|
208
208
|
}
|
|
209
209
|
|
|
210
210
|
function route(prompt, stdinPayload) {
|
|
@@ -58,9 +58,8 @@ function persistWorkflow(plan, payload, prompt) {
|
|
|
58
58
|
// Steering/status prompts cannot drop an unresolved execution contract.
|
|
59
59
|
// Stronger new work is retained as a pending route until explicit replan.
|
|
60
60
|
if (runtime.isMajorWorkflow(plan) && !runtime.isMajorWorkflow(context.workflow)) {
|
|
61
|
-
context.workflow.state = 'blocked';
|
|
62
61
|
context.workflow.pendingPlan = plan;
|
|
63
|
-
context.workflow.
|
|
62
|
+
context.workflow.planningWarning = 'stronger-route-suggested';
|
|
64
63
|
}
|
|
65
64
|
context.workflow.lastPromptHash = crypto.createHash('sha256').update(prompt).digest('hex').slice(0, 24);
|
|
66
65
|
const memoryCapability = issueMemoryCapability(context.workflow);
|
|
@@ -84,14 +83,15 @@ function persistWorkflow(plan, payload, prompt) {
|
|
|
84
83
|
verification: plan.verification,
|
|
85
84
|
mutationIsolation: plan.mutationIsolation || { required: false },
|
|
86
85
|
workflowPlan: plan,
|
|
87
|
-
state:
|
|
86
|
+
state: selected ? 'pending' : 'deferred',
|
|
87
|
+
planningWarnings: plan.fallback?.disposition === 'none' ? [] : [...(plan.fallback?.reasonCodes || [])],
|
|
88
88
|
runId: null,
|
|
89
89
|
revision: 0,
|
|
90
90
|
escapes: [],
|
|
91
|
-
|
|
92
|
-
mode: '
|
|
93
|
-
escapePolicy: 'scoped-evidence-only',
|
|
91
|
+
guidance: {
|
|
92
|
+
mode: 'advisory-workflow',
|
|
94
93
|
reasoningPolicy: 'model-controls-how',
|
|
94
|
+
hardBoundaries: ['rule-of-3-reflection', 'user-host-permission'],
|
|
95
95
|
},
|
|
96
96
|
};
|
|
97
97
|
const memoryCapability = issueMemoryCapability(context.workflow);
|
|
@@ -120,10 +120,7 @@ function run(raw) {
|
|
|
120
120
|
} catch (error) { failure = error; }
|
|
121
121
|
if (hostNotification && !persisted?.workflow) {
|
|
122
122
|
console.log('\n=> Host notification — no active execution contract; ignored for routing.');
|
|
123
|
-
if (failure)
|
|
124
|
-
console.error('[Workflow Router] ' + failure.message);
|
|
125
|
-
process.exitCode = 2;
|
|
126
|
-
}
|
|
123
|
+
if (failure) console.error('[Workflow Reminder] routing state was not persisted: ' + failure.message);
|
|
127
124
|
return;
|
|
128
125
|
}
|
|
129
126
|
if (result?.sanitized) console.log(result.sanitized);
|
|
@@ -133,15 +130,15 @@ function run(raw) {
|
|
|
133
130
|
core.printWorkflowPlan(plan);
|
|
134
131
|
core.printRoutingCheckpoint(plan);
|
|
135
132
|
core.printKernelContract(plan);
|
|
136
|
-
console.log('\n=> WORKFLOW
|
|
133
|
+
console.log('\n=> WORKFLOW GUIDANCE (ADVISORY WHEN SELECTED):');
|
|
137
134
|
console.log(' - State: ' + (persisted?.workflow.state || (plan.strategy ? 'unpersisted' : 'deferred')));
|
|
138
135
|
console.log(' - Selected workflow: ' + (plan.strategy || 'deferred'));
|
|
139
136
|
if (plan.strategySelection === 'selected') {
|
|
140
|
-
console.log(' -
|
|
141
|
-
console.log(' -
|
|
142
|
-
console.log(' -
|
|
143
|
-
console.log(' - Tier 3 / Fable
|
|
144
|
-
console.log(' - Escape
|
|
137
|
+
console.log(' - Use the selected workflow as planning guidance; reasoning and implementation remain flexible.');
|
|
138
|
+
console.log(' - Before claiming completion, review unresolved workflow evidence and objective verification.');
|
|
139
|
+
console.log(' - If you skip a suggested step, keep the reason explicit and evidence-based.');
|
|
140
|
+
console.log(' - Tier 3 / Fable changes are safer in a linked Git worktree; missing isolation is a strong reminder, not a Harness lock.');
|
|
141
|
+
console.log(' - Escape/replan metadata remains useful for audit, but it does not create a persistent execution lock.');
|
|
145
142
|
}
|
|
146
143
|
if (persisted?.workflow) {
|
|
147
144
|
const controller = path.join(persisted.hooksRoot, 'workflow-disposition.js');
|
|
@@ -152,12 +149,10 @@ function run(raw) {
|
|
|
152
149
|
console.log(' - Enter/replan: node "' + controller + '" start --session-id "' + persisted.sessionId + '"');
|
|
153
150
|
console.log(' - Escape one declared stage: node "' + controller + '" escape --session-id "' + persisted.sessionId + '" --stage-id "<id>" --reason-code workflow-uncovered-scope --scope "<uncovered scope>" --evidence "<evidence>"');
|
|
154
151
|
} else {
|
|
155
|
-
console.log(' - Runtime state was not persisted;
|
|
152
|
+
console.log(' - Runtime state was not persisted; reminders may be less precise, but execution remains available.');
|
|
156
153
|
}
|
|
157
|
-
if (failure)
|
|
158
|
-
|
|
159
|
-
process.exitCode = 2;
|
|
160
|
-
} else if (result && result.status !== 0) process.exitCode = result.status || 1;
|
|
154
|
+
if (failure) console.error('[Workflow Reminder] routing state was not persisted: ' + failure.message);
|
|
155
|
+
if (result && result.status !== 0) console.error('[Workflow Reminder] router returned status ' + result.status + '; guidance is degraded, not blocking.');
|
|
161
156
|
}
|
|
162
157
|
|
|
163
158
|
if (typeof module !== 'undefined') module.exports = { isHostNotificationPrompt };
|
package/plugins/harness-everything/skills/harness-everything/scripts/router-contract-core.js
CHANGED
|
@@ -349,7 +349,7 @@ function planMetadataForStrategy(strategy) {
|
|
|
349
349
|
return {
|
|
350
350
|
...base,
|
|
351
351
|
patterns: ['router', 'react'],
|
|
352
|
-
requiredInvariants: [...base.requiredInvariants, 'loop-
|
|
352
|
+
requiredInvariants: [...base.requiredInvariants, 'loop-awareness', 'objective-verification'],
|
|
353
353
|
suggestedSkills: ['tdd', 'verification-loop'],
|
|
354
354
|
maxIterations: ITERATIVE_MAX_ITERATIONS,
|
|
355
355
|
parallelAllowed: false,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: using-git-worktrees
|
|
3
|
-
description: Use when starting feature work needing isolation or before implementation plans -
|
|
3
|
+
description: Use when starting feature work needing isolation or before implementation plans - recommends an isolated workspace via native tools or git worktree fallback
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.16.1
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Using Git Worktrees
|
|
@@ -13,7 +13,7 @@ Use native worktree support first; raw Git is the fallback.
|
|
|
13
13
|
|
|
14
14
|
## Contract
|
|
15
15
|
|
|
16
|
-
- **Major workflow
|
|
16
|
+
- **Major workflow guidance** — Tier 3 / Fable-class engineering is safer in a linked worktree before broad source/artifact mutation. Reuse one or create one when practical.
|
|
17
17
|
- **Ordinary mode** — isolation-needing feature work may honor an explicit user preference to stay in place.
|
|
18
18
|
- Never nest a worktree inside an already isolated worktree.
|
|
19
19
|
|
|
@@ -28,11 +28,11 @@ git rev-parse --show-superproject-working-tree
|
|
|
28
28
|
```
|
|
29
29
|
Different git/common dirs and no superproject => already isolated; continue to Step 2. A submodule is a normal repo for this check.
|
|
30
30
|
|
|
31
|
-
**Step 1 — Create/enter**: prefer native `EnterWorktree`, `/worktree`, or `--worktree`. Otherwise use `git worktree add "$path" -b "$BRANCH_NAME"`.
|
|
31
|
+
**Step 1 — Create/enter**: prefer native `EnterWorktree`, `/worktree`, or `--worktree`. Otherwise use `git worktree add "$path" -b "$BRANCH_NAME"`. Prefer an already-ignored or external/sibling path. If creation/entry fails, report it and continue only with explicit awareness of the isolation risk.
|
|
32
32
|
|
|
33
33
|
**Step 2 — Setup**: install project dependencies as needed.
|
|
34
34
|
|
|
35
|
-
**Step 3 — Baseline**: run
|
|
35
|
+
**Step 3 — Baseline**: run relevant tests/build before implementation when useful; surface existing failures before relying on the baseline.
|
|
36
36
|
|
|
37
37
|
Deep dive: <this-skill-dir>/references/workflow-details.md
|
|
38
38
|
|
|
@@ -4,7 +4,7 @@ description: "Reflect-first circuit breaker - after 3 failures, stop edits, rebu
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.16.2
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Zoom Out (Circuit Breaker)
|
|
@@ -18,7 +18,7 @@ Stop repeated failures, rebuild the facts, and choose a safe next step.
|
|
|
18
18
|
| **Trigger / Input** | Three same-signature failures or an explicit loop/rethink request. |
|
|
19
19
|
| **Expected Output** | Fact-checked report ending in `RESUME` or `ESCALATE`. |
|
|
20
20
|
| **State Mutations** | Writes the session `zoom-out-report.md`; reset may clear breaker state. |
|
|
21
|
-
| **Enforcement Gate** | `<skills-repo-root>/hooks/scripts/rule-of-3.js` plus a valid report;
|
|
21
|
+
| **Enforcement Gate** | `<skills-repo-root>/hooks/scripts/rule-of-3.js` plus a valid report; a later three-failure cycle requests another reflection. |
|
|
22
22
|
|
|
23
23
|
## Circuit Breaker Flow
|
|
24
24
|
|
|
@@ -26,7 +26,7 @@ Stop repeated failures, rebuild the facts, and choose a safe next step.
|
|
|
26
26
|
2. Use read-only tools to restate the goal and check files, configuration, and logs.
|
|
27
27
|
3. Fill `<this-skill-dir>/templates/zoom-out-report.template.md` and end with `RESUME` or `ESCALATE`.
|
|
28
28
|
4. Resume only on an untried path; escalate genuine user decisions with options.
|
|
29
|
-
5.
|
|
29
|
+
5. If three more matching failures occur, run another zoom-out cycle. `npm run harness:reset` is only an optional manual state clear; record the insight with `self-evolve`.
|
|
30
30
|
|
|
31
31
|
## USE FOR:
|
|
32
32
|
- "you are stuck in a loop"
|
|
@@ -21,7 +21,7 @@ flowchart TD
|
|
|
21
21
|
|
|
22
22
|
Resume --> Resolved{5. Problem Cracking Succeeds?}
|
|
23
23
|
Resolved -- Yes --> SelfEvolve[Call self-evolve to Persist Insight]
|
|
24
|
-
Resolved -- No (3 More Failures) -->
|
|
24
|
+
Resolved -- No (3 More Matching Failures) --> CeaseFire
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
## 1. Triggers
|
|
@@ -50,7 +50,7 @@ A complete report automatically releases the circuit breaker on hook-enabled sys
|
|
|
50
50
|
## 5. Phase 4 — Decision Gate: Resume or Escalate
|
|
51
51
|
|
|
52
52
|
- **RESUME**: Selected when the fresh diagnosis identifies a clear, untried path within existing authority.
|
|
53
|
-
- **ESCALATE**: Reserved for true decision points belonging to the user (conflicting requirements, destructive migration, missing credentials/access, or repeated breaker trips).
|
|
53
|
+
- **ESCALATE**: Reserved for true decision points belonging to the user (conflicting requirements, destructive migration, missing credentials/access, or repeated breaker trips that expose a genuine decision or access gap).
|
|
54
54
|
Hand the human a **decision**, not a plea:
|
|
55
55
|
|
|
56
56
|
> "Goal: [...]. I falsified paths X, Y, Z — verified facts: [...].
|
|
@@ -61,6 +61,6 @@ Hand the human a **decision**, not a plea:
|
|
|
61
61
|
Banned: "I have tried everything and failed, please help." That reports incapability, not a decision.
|
|
62
62
|
|
|
63
63
|
## 7. Recovery
|
|
64
|
-
- **Self-recovery path**: a valid report ending in `RESUME` releases the breaker — reload the appropriate execution mode (`tdd`, `fable-mode`) and execute the new diagnosis. If the SAME failure signature accumulates 3 more failures,
|
|
65
|
-
- **Human path**: after the human answers an `ESCALATE`,
|
|
64
|
+
- **Self-recovery path**: a valid report ending in `RESUME` releases the breaker — reload the appropriate execution mode (`tdd`, `fable-mode`) and execute the new diagnosis. If the SAME failure signature accumulates 3 more failures, start another zoom-out/reflection cycle.
|
|
65
|
+
- **Human path**: after the human answers an `ESCALATE`, continue under their direction. `npm run harness:reset` (or a new session / `/clear`) is an optional manual state clear for recovery or maintenance; it is not required merely because the breaker re-tripped.
|
|
66
66
|
- Either way, once the problem is ultimately cracked, feed the insight to `self-evolve`.
|