harness-everything 0.16.2 → 0.16.3

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.
Files changed (29) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +6 -0
  4. package/ci/consistency-check.js +100 -0
  5. package/docker-verify.sh +46 -7
  6. package/docs/mechanism-first-skill-mesh.md +1 -1
  7. package/docs/workflows/zoom-out.md +6 -6
  8. package/fable-mode/CONTRACT-FORMAT.md +2 -1
  9. package/fable-mode/SKILL.md +1 -1
  10. package/fable-mode/agents/fable-orchestrator.md +6 -5
  11. package/fable-mode/execution-guardrails/SKILL.md +1 -1
  12. package/fable-mode/fable-haiku/SKILL.md +1 -1
  13. package/fable-mode/fable-opus/SKILL.md +1 -1
  14. package/fable-mode/fable-sonnet/SKILL.md +1 -1
  15. package/harness-everything/SKILL.md +1 -1
  16. package/harness-everything/references/router-workflow-plan.md +1 -1
  17. package/opencode-plugin/plugin.json +1 -1
  18. package/package.json +1 -1
  19. package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
  20. package/plugins/harness-everything/plugin.json +1 -1
  21. package/plugins/harness-everything/skills/fable-mode/CONTRACT-FORMAT.md +2 -1
  22. package/plugins/harness-everything/skills/fable-mode/SKILL.md +1 -1
  23. package/plugins/harness-everything/skills/fable-mode/agents/fable-orchestrator.md +6 -5
  24. package/plugins/harness-everything/skills/fable-mode/execution-guardrails/SKILL.md +1 -1
  25. package/plugins/harness-everything/skills/fable-mode/fable-haiku/SKILL.md +1 -1
  26. package/plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md +1 -1
  27. package/plugins/harness-everything/skills/fable-mode/fable-sonnet/SKILL.md +1 -1
  28. package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
  29. package/plugins/harness-everything/skills/harness-everything/references/router-workflow-plan.md +1 -1
@@ -10,7 +10,7 @@
10
10
  "name": "harness-everything",
11
11
  "source": "./",
12
12
  "description": "Harness OS: an orchestrated agent operating system — tier routing, circuit breaker guardrails, verification gates, WAL session memory, and self-evolving workspace rules.",
13
- "version": "0.16.2",
13
+ "version": "0.16.3",
14
14
  "author": {
15
15
  "name": "Miya Daniel"
16
16
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "harness-everything",
3
3
  "description": "Harness OS: an orchestrated agent operating system — tier routing, circuit breaker guardrails, verification gates, WAL session memory, and self-evolving workspace rules.",
4
- "version": "0.16.2",
4
+ "version": "0.16.3",
5
5
  "author": {
6
6
  "name": "Miya Daniel"
7
7
  },
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## [0.16.3](https://github.com/dyphn1/Harness-everything/compare/v0.16.2...v0.16.3) (2026-09-20)
6
+
7
+ ### Bug Fixes
8
+
9
+ * **docker:** Verify current re-trip contract in docker-verify.sh ([#200](https://github.com/dyphn1/Harness-everything/issues/200)) ([610ce32](https://github.com/dyphn1/Harness-everything/commit/610ce32733a74dd4a16f68d171346ea8b10f8d62)), closes [#190](https://github.com/dyphn1/Harness-everything/issues/190) [#42](https://github.com/dyphn1/Harness-everything/issues/42)
10
+
5
11
  ## [0.16.2](https://github.com/dyphn1/Harness-everything/compare/v0.16.1...v0.16.2) (2026-09-20)
6
12
 
7
13
  ### Bug Fixes
@@ -164,6 +164,106 @@ for (const [rel, pattern] of retiredClaims) {
164
164
  check(`${rel}: retired enforcement claim absent (${pattern})`, !pattern.test(text), 'stale pre-#190 contract wording');
165
165
  }
166
166
 
167
+ // The per-file entries above only freeze the files a past fix touched, so the
168
+ // same retired wording survived elsewhere (#204: docs/workflows/zoom-out.md,
169
+ // docker-verify.sh). Scan the whole agent-facing surface instead: docs, routed
170
+ // skills, shared references, the OpenCode README, root shell/container entry
171
+ // points, and the packaged plugin copies that ship to other hosts.
172
+ const RETIRED_CLAIM_DIRS = [
173
+ 'docs',
174
+ 'zoom-out',
175
+ 'fable-mode',
176
+ 'harness-everything/references',
177
+ 'plugins/harness-everything',
178
+ ];
179
+ const RETIRED_CLAIM_EXTENSIONS = new Set(['.md', '.sh', '.js', '.mjs']);
180
+
181
+ // Files that legitimately keep the retired wording: retained pre-#190
182
+ // live-host evidence, release history, capability docs whose hard-lock lines
183
+ // are explicitly labelled historical/reported-only, code that strips the
184
+ // retired state field, and the CI guards that assert its absence.
185
+ const RETIRED_CLAIM_ALLOWLIST = [
186
+ /^benchmarks\/results\/live-host\/opencode-2026-09-16\//,
187
+ /^CHANGELOG\.md$/,
188
+ /^docs\/platform-capabilities\.md$/,
189
+ /^opencode-plugin\/index\.mjs$/,
190
+ /^ci\//,
191
+ /^behavioral-evals\/[^/]+\.js$/,
192
+ ];
193
+
194
+ // A line that denies the retired behavior or dates it ("no permanent hard
195
+ // lock", "historical hard-lock evidence", "predates #190") is the correct
196
+ // wording, not drift. Only the broad hard-lock family needs this escape; the
197
+ // assertive patterns below are wrong in any context, so they never get it.
198
+ const HISTORICAL_CONTEXT =
199
+ /pre-#190|\b(?:no|not|never|without|remove[sd]?|retired|historical|predates|former(?:ly)?|legacy|post-reset|no longer)\b|rather than|instead of/i;
200
+
201
+ const RETIRED_CLAIM_SCAN = [
202
+ { label: 'hard-lock escalation', pattern: /hard[\s-]?lock/i, historicalAllowed: true },
203
+ { label: 'reset gated on a second cycle', pattern: /only after the (?:second|repeated) cycle/i },
204
+ { label: 'cycle-escalation reset branch', pattern: /\|\s*(?:second|repeated|repeat) cycle\s*\|\s*reset/i },
205
+ { label: 'machine-blocked disposition', pattern: /machine[\s-]blocked/i },
206
+ { label: 'replan budget', pattern: /replan[\s-]budget/i },
207
+ { label: 'runtime worker leases', pattern: /worker lease/i },
208
+ { label: 'retired loop-budget invariant', pattern: /\bloop-budget\b/i },
209
+ { label: 'explicit iteration budget', pattern: /explicit iteration budget/i },
210
+ ];
211
+
212
+ function collectRetiredClaimTargets() {
213
+ const targets = new Set();
214
+ const walk = (dir) => {
215
+ let entries;
216
+ try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return; }
217
+ for (const entry of entries) {
218
+ const p = path.join(dir, entry.name);
219
+ if (entry.isDirectory()) {
220
+ if (!entry.name.startsWith('.') && entry.name !== 'node_modules') walk(p);
221
+ } else if (RETIRED_CLAIM_EXTENSIONS.has(path.extname(entry.name))) {
222
+ targets.add(p);
223
+ }
224
+ }
225
+ };
226
+ for (const dir of RETIRED_CLAIM_DIRS) walk(path.join(ROOT, dir));
227
+ for (const entry of fs.readdirSync(ROOT, { withFileTypes: true })) {
228
+ if (entry.isFile() && (entry.name.endsWith('.sh') || entry.name === 'Dockerfile')) {
229
+ targets.add(path.join(ROOT, entry.name));
230
+ }
231
+ }
232
+ const behavioralDir = path.join(ROOT, 'behavioral-evals');
233
+ if (fs.existsSync(behavioralDir)) {
234
+ for (const entry of fs.readdirSync(behavioralDir, { withFileTypes: true })) {
235
+ if (entry.isFile() && entry.name.endsWith('.md')) targets.add(path.join(behavioralDir, entry.name));
236
+ }
237
+ }
238
+ const opencodeReadme = path.join(ROOT, 'opencode-plugin', 'README.md');
239
+ if (fs.existsSync(opencodeReadme)) targets.add(opencodeReadme);
240
+ return [...targets].sort();
241
+ }
242
+
243
+ const retiredClaimTargets = collectRetiredClaimTargets();
244
+ const retiredClaimHits = new Map(RETIRED_CLAIM_SCAN.map((rule) => [rule.label, []]));
245
+ for (const file of retiredClaimTargets) {
246
+ const rel = path.relative(ROOT, file).split(path.sep).join('/');
247
+ if (RETIRED_CLAIM_ALLOWLIST.some((allowed) => allowed.test(rel))) continue;
248
+ const lines = fs.readFileSync(file, 'utf8').split(/\r?\n/);
249
+ lines.forEach((line, index) => {
250
+ for (const rule of RETIRED_CLAIM_SCAN) {
251
+ if (!rule.pattern.test(line)) continue;
252
+ if (rule.historicalAllowed && HISTORICAL_CONTEXT.test(line)) continue;
253
+ retiredClaimHits.get(rule.label).push(`${rel}:${index + 1}`);
254
+ }
255
+ });
256
+ }
257
+ for (const rule of RETIRED_CLAIM_SCAN) {
258
+ const hits = retiredClaimHits.get(rule.label);
259
+ check(
260
+ `retired-claim scan: ${rule.label} absent across the agent-facing surface`,
261
+ hits.length === 0,
262
+ `stale pre-#190 contract wording at ${hits.join(', ')}`
263
+ );
264
+ }
265
+ console.log(`Scanned ${retiredClaimTargets.length} file(s) for retired advisory-contract claims.`);
266
+
167
267
  // --- 3+4. Distribution manifests -----------------------------------------
168
268
  const pkg = JSON.parse(fs.readFileSync(path.join(ROOT, 'package.json'), 'utf8'));
169
269
  const pluginJsonPath = path.join(ROOT, '.claude-plugin', 'plugin.json');
package/docker-verify.sh CHANGED
@@ -86,24 +86,63 @@ if ! node -e "const s=require('./.claude/harness-everything/state/sessions/defau
86
86
  fi
87
87
  echo "✅ PASS: Valid reflection report released the breaker (self-recovery)."
88
88
 
89
- # Second trip on the same signature must hard-lock even though a report exists
90
- # (the report is stale relative to lastFailureAt, and the cycle budget is spent).
91
- node -e "require('fs').writeFileSync('.claude/harness-everything/state/sessions/default/rule-of-3-state.json', JSON.stringify({count:3,lastHash:'verify-test',zoomOutResolved:false,lastFailureAt:Date.now()+60000,zoomOutCycles:1}))"
89
+ # 3a-ter. Re-trip: three more failures on the same signature after a released
90
+ # cycle ask for ANOTHER zoom-out. #190 retired the second-stage escalation, so
91
+ # the contract is exit 2 plus the reflection-required message the hook actually
92
+ # prints - never a permanent lock (ci/mechanism-2a-rule-of-3.test.js:58-64).
93
+ echo -e "\n---> Running 3a-ter: Re-trip requests another zoom-out"
94
+ # Seed through the hooks' own resolver: since #42 runtime state lives in the
95
+ # global, workspace-keyed state root ($HARNESS_STATE_HOME or
96
+ # ~/.agents/harness-everything/...), and a repo-relative seed only reaches the
97
+ # hook while the one-time legacy migration can still move it.
98
+ STATE_DIR=$(node -e "process.stdout.write(require('./hooks/scripts/lib/harness-state').getSessionDir(null, 'default'))")
99
+ RETRIP_AT=$(node -e "process.stdout.write(String(Date.now()))")
100
+ node -e "require('fs').writeFileSync(process.argv[1], JSON.stringify({count:3,lastHash:'verify-test',zoomOutResolved:false,lastFailureAt:Number(process.argv[2]),zoomOutCycles:1}))" "$STATE_DIR/rule-of-3-state.json" "$RETRIP_AT"
92
101
  set +e
93
102
  node hooks/scripts/rule-of-3.js 2>rule-of-3-err.log
94
103
  EXIT_CODE=$?
95
104
  set -e
96
105
  if [ "$EXIT_CODE" -ne 2 ]; then
97
- echo "❌ FAIL: Second trip did not hard-lock (expected 2, got $EXIT_CODE)"
106
+ echo "❌ FAIL: Re-trip did not request another zoom-out (expected 2, got $EXIT_CODE)"
98
107
  cat rule-of-3-err.log
99
108
  exit 1
100
109
  fi
101
- if ! grep -q "hard lock" rule-of-3-err.log; then
102
- echo "❌ FAIL: Second-trip output did not contain hard-lock escalation message"
110
+ if ! grep -q "RULE OF 3 CIRCUIT BREAKER TRIGGERED" rule-of-3-err.log; then
111
+ echo "❌ FAIL: Re-trip output did not contain the circuit-breaker trigger message"
103
112
  cat rule-of-3-err.log
104
113
  exit 1
105
114
  fi
106
- echo "✅ PASS: Second trip on the same signature hard-locked for human decision."
115
+ if ! grep -q "ACTION REQUIRED (reflect first)" rule-of-3-err.log; then
116
+ echo "❌ FAIL: Re-trip output did not demand reflection"
117
+ cat rule-of-3-err.log
118
+ exit 1
119
+ fi
120
+ # Negative guard: the retired escalation wording must never come back (#190).
121
+ if grep -qi "hard lock" rule-of-3-err.log; then # this must never match
122
+ echo "❌ FAIL: Re-trip printed the retired hard-lock escalation, which no longer exists"
123
+ cat rule-of-3-err.log
124
+ exit 1
125
+ fi
126
+ echo "✅ PASS: Re-trip asked for another zoom-out, with no retired escalation wording."
127
+
128
+ # A fresh report, written after the re-trip failure, releases the breaker again.
129
+ printf '## Goal\nx\n## Failed Attempts\nx\n## Verified Facts\nx\n## Diagnosis\nx\n## Decision\nRESUME: second untried approach\n' > "$STATE_DIR/zoom-out-report.md"
130
+ set +e
131
+ node hooks/scripts/rule-of-3.js
132
+ EXIT_CODE=$?
133
+ set -e
134
+ if [ "$EXIT_CODE" -ne 0 ]; then
135
+ echo "❌ FAIL: Fresh reflection report did not release the re-tripped breaker (expected 0, got $EXIT_CODE)"
136
+ exit 1
137
+ fi
138
+ if ! node -e "const s=JSON.parse(require('fs').readFileSync(process.argv[1],'utf8')); process.exit(s.count===0 && s.zoomOutResolved===true && s.zoomOutCycles===2 ? 0 : 1)" "$STATE_DIR/rule-of-3-state.json"; then
139
+ echo "❌ FAIL: Breaker state not updated after the second report release"
140
+ cat "$STATE_DIR/rule-of-3-state.json"
141
+ exit 1
142
+ fi
143
+ echo "✅ PASS: A fresh report released the re-tripped breaker (advisory re-trip, not an escalation)."
144
+
145
+ # harness:reset stays an optional manual clear, not a required escalation step.
107
146
  npm run harness:reset
108
147
 
109
148
 
@@ -55,7 +55,7 @@ HARNESS_DECISION
55
55
  tier: 2
56
56
  strategy: iterative-single
57
57
  workflow_state: active
58
- required: route-before-execution, objective-verification, loop-budget
58
+ required: scope-lock, objective-verification, loop-awareness
59
59
  suggest: tdd, verification-loop
60
60
  suggestion_policy: evaluate-applicability
61
61
  escape_policy: workflow-uncovered-scope-only
@@ -4,7 +4,7 @@
4
4
 
5
5
  Source of truth: `zoom-out/SKILL.md`.
6
6
 
7
- Contract summary from SKILL.md — Trigger: three same-signature failures or an explicit loop/rethink request. Output: fact-checked report ending in `RESUME` or `ESCALATE`. State: writes the session `zoom-out-report.md`; reset may clear breaker state. Gate: `hooks/scripts/rule-of-3.js` plus a valid report; reset only after the second cycle. USE FOR: "you are stuck in a loop", "the same error keeps failing", "rethink your assumptions". DO NOT USE FOR: routine single-failure debugging, greenfield planning without failures.
7
+ Contract summary from SKILL.md — Trigger: three same-signature failures or an explicit loop/rethink request. Output: fact-checked report ending in `RESUME` or `ESCALATE`. State: writes the session `zoom-out-report.md`; reset may clear breaker state. Gate: `hooks/scripts/rule-of-3.js` plus a valid report; a later three-failure cycle requests another reflection. USE FOR: "you are stuck in a loop", "the same error keeps failing", "rethink your assumptions". DO NOT USE FOR: routine single-failure debugging, greenfield planning without failures.
8
8
 
9
9
  ## 1. Skill Behavior Workflow
10
10
 
@@ -16,9 +16,9 @@ graph TD
16
16
  Fill --> Decide{RESUME or ESCALATE?}
17
17
  Decide -->|untried path| Resume[RESUME On Untried Path]
18
18
  Decide -->|genuine user decision| Escalate[ESCALATE With Options]
19
- Resume --> Again{Repeated Breaker Cycle?}
20
- Again -->|second cycle| Reset[npm run harness reset]
21
- Reset --> Evolve[Record Insight With self-evolve]
19
+ Resume --> Again{Three More Matching Failures?}
20
+ Again -->|yes| Cycle[Another Zoom-Out Cycle]
21
+ Cycle --> Evolve[Record Insight With self-evolve]
22
22
  Again -->|no| Done([Report Complete])
23
23
  Escalate --> Done
24
24
  ```
@@ -47,7 +47,7 @@ graph TD
47
47
  Write --> Choice{Untried Path Exists?}
48
48
  Choice -->|yes| Resume2[RESUME On Untried Path]
49
49
  Choice -->|no| Esc2[ESCALATE With Options]
50
- Resume2 -->|repeated cycle| Reset2[npm run harness reset Then self-evolve]
50
+ Resume2 -->|three more matching failures| Cycle2[Another Zoom-Out Cycle Then self-evolve]
51
51
  ```
52
52
 
53
53
  Template: `zoom-out/templates/zoom-out-report.template.md`. Enforcement: `hooks/scripts/rule-of-3.js`. Deep dive: `zoom-out/references/circuit-breaker.md`.
@@ -58,5 +58,5 @@ Template: `zoom-out/templates/zoom-out-report.template.md`. Enforcement: `hooks/
58
58
  - [ ] Goal, files, configuration, and logs were rechecked with read-only tools before any resume
59
59
  - [ ] `templates/zoom-out-report.template.md` was filled and the session `zoom-out-report.md` ends in `RESUME` or `ESCALATE`
60
60
  - [ ] Resume targeted only an untried path; genuine user decisions were escalated with options
61
- - [ ] Reset via `npm run harness:reset` happened only after the second cycle, with the insight recorded via `self-evolve`
61
+ - [ ] A later three-failure cycle ran another zoom-out; `npm run harness:reset` was used only as an optional manual clear, with the insight recorded via `self-evolve`
62
62
  - [ ] Routine single-failure debugging and greenfield planning without failures were not routed here
@@ -2,7 +2,8 @@
2
2
 
3
3
  Issue #85 Phase 3 makes the stage map a machine-readable execution contract.
4
4
  The router still chooses only the execution topology. Fable owns the stage map,
5
- model selector, worker briefs, stage audit, replan budget, and cold verifier.
5
+ model selector, worker briefs, stage audit, advisory replan limits, and cold
6
+ verifier.
6
7
  Phase 4 adds an optional bounded ensemble modifier without creating a new base
7
8
  topology.
8
9
 
@@ -4,7 +4,7 @@ description: "Stage large, multi-source or multi-session tasks through a written
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Fable Mode (v3)
@@ -77,11 +77,12 @@ spawn workers.
77
77
 
78
78
  For `fable-parallel`, spawn only stages in the same validated execution batch;
79
79
  never invent an additional parallel edge. A stage depending on another stage is
80
- not in the same ready batch. Never exceed `workflowPlan.limits.maxWorkers`. The router plan is the numeric
81
- source of truth; `workflow-plan-consumer.js` chunks ready sets to that cap and
82
- runtime worker leases enforce it when the host exposes stable worker IDs. For
83
- other Fable strategies, serialize the returned batches unless a later validated
84
- plan says otherwise.
80
+ not in the same ready batch. Treat `workflowPlan.limits.maxWorkers` as a
81
+ planning cap you are expected to respect: it is advisory. `workflow-plan-consumer.js`
82
+ returns every dependency-ready stage without chunking to that cap, and nothing
83
+ leases or counts workers at runtime, so exceeding it is your own judgement call,
84
+ not a blocked action. For other Fable strategies, serialize the returned batches
85
+ unless a later validated plan says otherwise.
85
86
 
86
87
  **3. Verify with a check that can fail — external artifacts only.** Each stage
87
88
  defines a pass condition an external artifact satisfies: a test that runs, a file
@@ -7,7 +7,7 @@ description: >-
7
7
  license: Apache-2.0
8
8
  metadata:
9
9
  author: Miya Daniel
10
- version: 0.16.2
10
+ version: 0.16.3
11
11
  ---
12
12
 
13
13
  # Execution Guardrails
@@ -4,7 +4,7 @@ description: "Run staged fable work on Haiku for bulk mechanical tasks with expl
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Fable Mode — Haiku
@@ -4,7 +4,7 @@ description: "Run staged fable orchestration on Opus for cross-stage synthesis,
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Fable Mode — Opus
@@ -4,7 +4,7 @@ description: "Run staged fable work on Sonnet for non-trivial implementation, re
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Fable Mode — Sonnet
@@ -4,7 +4,7 @@ description: "Route software/project work through the Harness kernel: classify T
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Harness Everything
@@ -110,7 +110,7 @@ This does not choose a topology and does not itself enforce the gate. Phase 5 ow
110
110
 
111
111
  Examples:
112
112
 
113
- - `objective-verification` and `loop-budget` are mandatory for `iterative-single`;
113
+ - `loop-awareness` and `objective-verification` are mandatory for `iterative-single`, on top of the base `scope-lock`, `verify-before-claim`, and `replan-after-repeated-failure`;
114
114
  - `tdd` and `verification-loop` remain advisory skill suggestions;
115
115
  - `stage-contracts` and `cold-verification` are mandatory for Fable topologies;
116
116
  - `multi-agent-workspace` is suggested only when the selected topology actually requires durable workspace behavior.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "harness-enforcement",
3
3
  "description": "Repository inventory for the opencode enforcement plugin and its standalone helper",
4
- "version": "0.16.2",
4
+ "version": "0.16.3",
5
5
  "runtime": "index.mjs",
6
6
  "hooks": {
7
7
  "verify": "hooks/verify.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harness-everything",
3
- "version": "0.16.2",
3
+ "version": "0.16.3",
4
4
  "description": "Harness OS: An Orchestrated Agent Operating System for AI-driven Development",
5
5
  "main": "harness-everything/scripts/bootstrap.js",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harness-everything",
3
- "version": "0.16.2",
3
+ "version": "0.16.3",
4
4
  "description": "Invariant-first engineering harness for routing, verification, and failure recovery while preserving agent autonomy.",
5
5
  "author": {
6
6
  "name": "Miya Daniel",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "harness-everything",
4
- "version": "0.16.2",
4
+ "version": "0.16.3",
5
5
  "description": "Invariant-first engineering harness for routing, verification, and failure recovery while preserving agent autonomy.",
6
6
  "author": {
7
7
  "name": "Miya Daniel",
@@ -2,7 +2,8 @@
2
2
 
3
3
  Issue #85 Phase 3 makes the stage map a machine-readable execution contract.
4
4
  The router still chooses only the execution topology. Fable owns the stage map,
5
- model selector, worker briefs, stage audit, replan budget, and cold verifier.
5
+ model selector, worker briefs, stage audit, advisory replan limits, and cold
6
+ verifier.
6
7
  Phase 4 adds an optional bounded ensemble modifier without creating a new base
7
8
  topology.
8
9
 
@@ -4,7 +4,7 @@ description: "Stage large, multi-source or multi-session tasks through a written
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Fable Mode (v3)
@@ -77,11 +77,12 @@ spawn workers.
77
77
 
78
78
  For `fable-parallel`, spawn only stages in the same validated execution batch;
79
79
  never invent an additional parallel edge. A stage depending on another stage is
80
- not in the same ready batch. Never exceed `workflowPlan.limits.maxWorkers`. The router plan is the numeric
81
- source of truth; `workflow-plan-consumer.js` chunks ready sets to that cap and
82
- runtime worker leases enforce it when the host exposes stable worker IDs. For
83
- other Fable strategies, serialize the returned batches unless a later validated
84
- plan says otherwise.
80
+ not in the same ready batch. Treat `workflowPlan.limits.maxWorkers` as a
81
+ planning cap you are expected to respect: it is advisory. `workflow-plan-consumer.js`
82
+ returns every dependency-ready stage without chunking to that cap, and nothing
83
+ leases or counts workers at runtime, so exceeding it is your own judgement call,
84
+ not a blocked action. For other Fable strategies, serialize the returned batches
85
+ unless a later validated plan says otherwise.
85
86
 
86
87
  **3. Verify with a check that can fail — external artifacts only.** Each stage
87
88
  defines a pass condition an external artifact satisfies: a test that runs, a file
@@ -7,7 +7,7 @@ description: >-
7
7
  license: Apache-2.0
8
8
  metadata:
9
9
  author: Miya Daniel
10
- version: 0.16.2
10
+ version: 0.16.3
11
11
  ---
12
12
 
13
13
  # Execution Guardrails
@@ -4,7 +4,7 @@ description: "Run staged fable work on Haiku for bulk mechanical tasks with expl
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Fable Mode — Haiku
@@ -4,7 +4,7 @@ description: "Run staged fable orchestration on Opus for cross-stage synthesis,
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Fable Mode — Opus
@@ -4,7 +4,7 @@ description: "Run staged fable work on Sonnet for non-trivial implementation, re
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Fable Mode — Sonnet
@@ -4,7 +4,7 @@ description: "Route software/project work through the Harness kernel: classify T
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.16.2
7
+ version: 0.16.3
8
8
  ---
9
9
 
10
10
  # Harness Everything
@@ -110,7 +110,7 @@ This does not choose a topology and does not itself enforce the gate. Phase 5 ow
110
110
 
111
111
  Examples:
112
112
 
113
- - `objective-verification` and `loop-budget` are mandatory for `iterative-single`;
113
+ - `loop-awareness` and `objective-verification` are mandatory for `iterative-single`, on top of the base `scope-lock`, `verify-before-claim`, and `replan-after-repeated-failure`;
114
114
  - `tdd` and `verification-loop` remain advisory skill suggestions;
115
115
  - `stage-contracts` and `cold-verification` are mandatory for Fable topologies;
116
116
  - `multi-agent-workspace` is suggested only when the selected topology actually requires durable workspace behavior.