harness-everything 0.30.2 → 0.30.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.
@@ -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.30.2",
13
+ "version": "0.30.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.30.2",
4
+ "version": "0.30.3",
5
5
  "author": {
6
6
  "name": "Miya Daniel"
7
7
  },
package/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## [0.30.3](https://github.com/dyphn1/Harness-everything/compare/v0.30.2...v0.30.3) (2026-10-01)
6
+
7
+ ### Bug Fixes
8
+
9
+ * **router:** preserve structured A/B macro routing ([7184ec5](https://github.com/dyphn1/Harness-everything/commit/7184ec5742d12bca8abc3ce938ee9b1c3720da67))
10
+ * **router:** report actual Tier 3 trigger rationale ([d361704](https://github.com/dyphn1/Harness-everything/commit/d361704a4bfdf6c42c93c7f7a9e6c1bad2c34ff7))
11
+ * **router:** stop treating audit verbs as macro scope ([9e79e3b](https://github.com/dyphn1/Harness-everything/commit/9e79e3be00b446dba8082d06360c3c7ea0dcf2ae))
12
+ * **rule-of-3:** align architecture failure threshold ([bc807a2](https://github.com/dyphn1/Harness-everything/commit/bc807a21466f299147378aec7f37ea7b3c56c42b))
13
+
5
14
  ## [0.30.2](https://github.com/dyphn1/Harness-everything/compare/v0.30.1...v0.30.2) (2026-10-01)
6
15
 
7
16
  ### Bug Fixes
@@ -82,6 +82,11 @@ check(/Selected workflow is a semantic contract/i.test(agents),'repository agent
82
82
  check(/User-visible Harness Status is mandatory/i.test(agents)&&/### 🚦 Harness Status/i.test(agents)&&/nested evidence bullets/i.test(agents),'repository agent contract requires readable unified user-visible status');
83
83
  check(/Tier-3\/Fable isolation disposition is mandatory/i.test(agents)&&/degraded fallback/i.test(agents),'repository worktree rule requires disposition without hard lock');
84
84
 
85
+ const architectureSkill=read('improve-codebase-architecture/SKILL.md');
86
+ check(/3 same-signature failures.*zoom-out/i.test(architectureSkill),'architecture skill aligns rollback with the third same-signature failure');
87
+ check(!/>3 cascading errors/i.test(architectureSkill),'architecture skill no longer waits beyond the Rule-of-3 threshold');
88
+ check(read('plugins/harness-everything/skills/improve-codebase-architecture/SKILL.md')===architectureSkill,'architecture skill mirror matches');
89
+
85
90
  const envSkill=read('environment-detection/SKILL.md');
86
91
  check(/semantic \*\*MUST\*\*/i.test(envSkill)&&/environment-sensitive/i.test(envSkill),'environment discovery is a conditional semantic MUST');
87
92
  check(read('plugins/harness-everything/skills/environment-detection/SKILL.md')===envSkill,'environment skill mirror matches');
@@ -104,6 +104,35 @@ if (validContract(memoryProhibited, 'memory prohibition')) {
104
104
  check(memoryProhibited.contract.workflowPlan.reasonCodes.includes('memory-persistence-prohibited'), 'memory prohibition conflict is auditable');
105
105
  }
106
106
 
107
+ const boundedOperationPrompts = [
108
+ 'Audit this SKILL.md only.',
109
+ 'Compare these two functions.',
110
+ 'Benchmark this parser function.',
111
+ ];
112
+ for (const prompt of boundedOperationPrompts) {
113
+ const boundedOperation = runTier(prompt);
114
+ if (validContract(boundedOperation, `bounded operation: ${prompt}`)) {
115
+ check(boundedOperation.contract.classification.tier !== 'tier3', `bounded operation verb does not force Tier 3: ${prompt}`);
116
+ check(!boundedOperation.contract.workflowPlan.reasonCodes.includes('macro-scope-signal'), `bounded operation verb does not emit macro-scope-signal: ${prompt}`);
117
+ check(boundedOperation.contract.taskShape.observedSignals.macroScope === false, `bounded operation records macroScope=false: ${prompt}`);
118
+ }
119
+ }
120
+
121
+ const controlledAb = runTier('Run a controlled A/B benchmark of the agent with and without the Harness skills and report confidence intervals');
122
+ if (validContract(controlledAb, 'controlled A/B benchmark')) {
123
+ check(controlledAb.contract.classification.tier === 'tier3', 'structured A/B benchmark remains Tier 3');
124
+ check(controlledAb.contract.taskShape.observedSignals.macroScope === true, 'structured A/B benchmark records macroScope=true');
125
+ check(controlledAb.contract.workflowPlan.reasonCodes.includes('macro-scope-signal'), 'structured A/B benchmark keeps macro-scope-signal');
126
+ }
127
+
128
+ const tier3Keyword = runTier('Create a new feature');
129
+ if (validContract(tier3Keyword, 'Tier 3 keyword rationale')) {
130
+ check(tier3Keyword.contract.classification.tier === 'tier3', 'new feature remains Tier 3');
131
+ check(tier3Keyword.contract.workflowPlan.reasonCodes.includes('tier3-keyword'), 'new feature records tier3-keyword');
132
+ check(/Tier 3 keyword/i.test(tier3Keyword.contract.classification.rationale), 'Tier 3 keyword rationale names the actual trigger class');
133
+ check(!/repository-wide scope|structured comparative experiment/i.test(tier3Keyword.contract.classification.rationale), 'Tier 3 keyword rationale does not claim unrelated macro signals');
134
+ }
135
+
107
136
  const staged = runTier('Refactor the entire authentication architecture in dependent stages.');
108
137
  if (validContract(staged, 'fable-staged')) {
109
138
  const plan = staged.contract.workflowPlan;
package/docs/routing.md CHANGED
@@ -137,6 +137,8 @@ Typical triggers: typo/docs correction, narrow local edit, bounded explanation,
137
137
 
138
138
  Typical triggers: normal feature work, bug fixes, multi-file changes, focused benchmark/review. Usually selects `iterative-single`: bounded reason/act work plus objective verification. Focused skills such as `tdd`, `verification-loop`, `security-review`, `using-git-worktrees`, and `eval-harness` may be surfaced and must be resolved for applicability.
139
139
 
140
+ Operation labels such as `audit`, `evaluate`, `benchmark`, or `compare` describe **what** work is being done; they do not by themselves establish macro scope. A focused audit/review remains bounded unless an independent scope/structure signal (for example repository-wide, all files/modules, or multi-workstream structure) elevates it. A structured A/B experiment is different: its explicit control/treatment comparison is itself a multi-lane execution structure, so `A/B test` / `A/B benchmark` remains a macro signal.
141
+
140
142
  No universal `TODO → TDD → verification-loop` order is implied. But when a skill is applicable, reading it does not grant permission to ignore its flow.
141
143
 
142
144
  ### Tier 3 — Macro
@@ -17,7 +17,7 @@ graph TD
17
17
  SafetyNet -->|No| CharTests["Write Characterization Tests first via tdd"]
18
18
  SafetyNet -->|Yes| Extract["Extract incrementally via tdd; verify tests after each change"]
19
19
  CharTests --> Extract
20
- Extract --> ErrorCheck{"More than 3 cascading errors?"}
20
+ Extract --> ErrorCheck{"Third same-signature failure?"}
21
21
  ErrorCheck -->|Yes| Rollback["Rollback plus zoom-out; record traps in self-evolve"]
22
22
  ErrorCheck -->|No| DoneState["Refactoring complete"]
23
23
  ```
@@ -28,7 +28,7 @@ graph TD
28
28
  graph LR
29
29
  TechDebt["Trigger: refactor architecture or split object or apply SRP or tech debt"] --> ICA["improve-codebase-architecture / SKILL.md"]
30
30
  ICA --> TDD["tdd: Characterization Tests first, then incremental extraction"]
31
- ICA --> ZoomOut["zoom-out: invoked with rollback after more than 3 cascading errors"]
31
+ ICA --> ZoomOut["zoom-out: invoked with rollback on the third same-signature failure"]
32
32
  ICA --> SelfEvolve["self-evolve: record traps"]
33
33
  ```
34
34
 
@@ -40,7 +40,7 @@ graph TD
40
40
  ScanInterfaces --> SRPProposal["Propose split into focused units plus seam abstractions"]
41
41
  SRPProposal --> CharNet["Add Characterization Tests for untested legacy paths"]
42
42
  CharNet --> Incremental["Incremental extraction with test check after each step"]
43
- Incremental --> RollbackGate{"More than 3 cascading errors?"}
43
+ Incremental --> RollbackGate{"Third same-signature failure?"}
44
44
  RollbackGate -->|Yes| RollbackZoom["Rollback and zoom-out"]
45
45
  RollbackGate -->|No| ModularDone["SRP-compliant modules with safety net"]
46
46
  ```
@@ -56,5 +56,5 @@ Deep detail: `improve-codebase-architecture/references/README.md`.
56
56
  - [ ] Deepening and SRP proposal with object splitting and seam abstraction presented and approved before code changes
57
57
  - [ ] `tdd` launched; Characterization Tests added first when legacy code lacks tests
58
58
  - [ ] Extraction done incrementally with tests verified after each change
59
- - [ ] On more than 3 cascading errors, changes rolled back with `zoom-out` and traps recorded in `self-evolve`
59
+ - [ ] On the third same-signature failure, changes rolled back with `zoom-out` and traps recorded in `self-evolve`
60
60
  - [ ] Not used for features, bugfixes, or style-only cleanups with no structure change
@@ -4,7 +4,7 @@ description: "Route software/project work through Harness: classify tier/topolog
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.30.2
7
+ version: 0.30.3
8
8
  ---
9
9
 
10
10
  # Harness Everything
@@ -243,7 +243,7 @@ function run(userPrompt, context, options = {}) {
243
243
 
244
244
  const macroSignals = [
245
245
  /\b(?:every|each|all|entire|whole|full|complete)\s+(?:skill|skills|repo|repository|codebase|project|file|files|module|modules)/i,
246
- /\b(?:evaluate|audit|benchmark|stress[- ]test|ab test|a\/b test|compare)\b/i,
246
+ /\b(?:controlled\s+)?a(?:\/|[- ]?)b\s+(?:test|benchmark)\b/i,
247
247
  /\b(?:repository[- ]wide|codebase[- ]wide|end[- ]to[- ]end)\b/i,
248
248
  /\b(?:multiple|several|four|fourteen|dozens)\s+(?:issues|skills|files|modules)/i,
249
249
  /(?:每個|每一個|所有|全部|整個|全套|逐一|多個|四個).*(?:skill|技能|檔案|問題|版本|基準|測試|評估|稽核|比較|壓力)/i,
@@ -254,7 +254,8 @@ function run(userPrompt, context, options = {}) {
254
254
  const hasDocsTarget = /\b(?:readme|documentation|docs?)\b/i.test(userPrompt);
255
255
  const hasTinyEditSignal = /\b(?:typo|spelling|wording|one line|single line)\b/i.test(userPrompt);
256
256
  const isTrivialDocsEdit = !hasMacroSignal && hasTrivialEditVerb && hasDocsTarget && hasTinyEditSignal;
257
- const hasTier3Keyword = TIER3_KEYWORDS.some(keyword => matchKeyword(promptLower, keyword));
257
+ const matchedTier3Keyword = TIER3_KEYWORDS.find(keyword => matchKeyword(promptLower, keyword)) || null;
258
+ const hasTier3Keyword = matchedTier3Keyword !== null;
258
259
  const hasTier2Keyword = TIER2_KEYWORDS.some(keyword => matchKeyword(promptLower, keyword));
259
260
 
260
261
  let recommendedTier = 'Unclassified';
@@ -273,7 +274,9 @@ function run(userPrompt, context, options = {}) {
273
274
  addReason(reasonCodes, 'trivial-docs-edit');
274
275
  } else if (hasMacroSignal || hasTier3Keyword) {
275
276
  recommendedTier = 'Tier 3 (Macro Task)';
276
- rationale = 'Prompt implies repository-wide scope, audit/benchmark work, architectural refactoring, or multi-agent collaboration.';
277
+ rationale = hasMacroSignal
278
+ ? 'Prompt implies repository-wide scope, a structured comparative experiment, architectural refactoring, or multi-agent collaboration.'
279
+ : `Prompt matched configured Tier 3 keyword: "${matchedTier3Keyword}".`;
277
280
  reasonCodes.splice(loadedConfig.reasonCodes.length);
278
281
  addReason(reasonCodes, hasMacroSignal ? 'macro-scope-signal' : 'tier3-keyword');
279
282
  } else if (hasTier2Keyword) {
@@ -4,7 +4,7 @@ description: Discovers and transforms shallow or bloated modules into deep, SRP-
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.4.0
7
+ version: 0.30.3
8
8
  ---
9
9
 
10
10
  # Improve Codebase Architecture (Deep & SRP Refactoring)
@@ -16,14 +16,14 @@ metadata:
16
16
  | **Trigger / Input** | "refactor architecture", "split object/class", "apply SRP", tech debt |
17
17
  | **Expected Output** | SRP proposal, Characterization Test safety net, TDD-guided extraction. |
18
18
  | **State Mutations** | Extracts classes/functions/objects; adds characterization tests. |
19
- | **Enforcement Gate** | Scan docs first; Characterization Tests before refactoring untested code; >3 cascading errors → rollback + `zoom-out`. |
19
+ | **Enforcement Gate** | Scan docs first; Characterization Tests before refactoring untested code; 3 same-signature failures → rollback + `zoom-out`. |
20
20
 
21
21
  ## Workflow
22
22
 
23
23
  1. `[Discover]`: no blind refactoring — scan `CONTEXT.md`, `docs/adr/`, core interfaces first. Targets: SRP violations (>300 lines / >10 complexity), shallow modules, coupled seams.
24
24
  2. `[Think]`: present the Deepening & SRP proposal (object splitting + seam abstraction) until approved.
25
25
  3. `[Try]`: launch `tdd`; Characterization Tests first if legacy code lacks tests; extract incrementally, verifying tests after each change.
26
- 4. `[Summarize]`/`[Self-Evolve]`: >3 cascading errors → rollback + `zoom-out`; record traps in `self-evolve`.
26
+ 4. `[Summarize]`/`[Self-Evolve]`: 3 same-signature failures → rollback + `zoom-out`; record traps in `self-evolve`.
27
27
 
28
28
  Deep dive: <this-skill-dir>/references/README.md
29
29
 
@@ -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.30.2",
4
+ "version": "0.30.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.30.2",
3
+ "version": "0.30.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.30.2",
3
+ "version": "0.30.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.30.2",
4
+ "version": "0.30.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",
@@ -4,7 +4,7 @@ description: "Route software/project work through Harness: classify tier/topolog
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.30.2
7
+ version: 0.30.3
8
8
  ---
9
9
 
10
10
  # Harness Everything
@@ -243,7 +243,7 @@ function run(userPrompt, context, options = {}) {
243
243
 
244
244
  const macroSignals = [
245
245
  /\b(?:every|each|all|entire|whole|full|complete)\s+(?:skill|skills|repo|repository|codebase|project|file|files|module|modules)/i,
246
- /\b(?:evaluate|audit|benchmark|stress[- ]test|ab test|a\/b test|compare)\b/i,
246
+ /\b(?:controlled\s+)?a(?:\/|[- ]?)b\s+(?:test|benchmark)\b/i,
247
247
  /\b(?:repository[- ]wide|codebase[- ]wide|end[- ]to[- ]end)\b/i,
248
248
  /\b(?:multiple|several|four|fourteen|dozens)\s+(?:issues|skills|files|modules)/i,
249
249
  /(?:每個|每一個|所有|全部|整個|全套|逐一|多個|四個).*(?:skill|技能|檔案|問題|版本|基準|測試|評估|稽核|比較|壓力)/i,
@@ -254,7 +254,8 @@ function run(userPrompt, context, options = {}) {
254
254
  const hasDocsTarget = /\b(?:readme|documentation|docs?)\b/i.test(userPrompt);
255
255
  const hasTinyEditSignal = /\b(?:typo|spelling|wording|one line|single line)\b/i.test(userPrompt);
256
256
  const isTrivialDocsEdit = !hasMacroSignal && hasTrivialEditVerb && hasDocsTarget && hasTinyEditSignal;
257
- const hasTier3Keyword = TIER3_KEYWORDS.some(keyword => matchKeyword(promptLower, keyword));
257
+ const matchedTier3Keyword = TIER3_KEYWORDS.find(keyword => matchKeyword(promptLower, keyword)) || null;
258
+ const hasTier3Keyword = matchedTier3Keyword !== null;
258
259
  const hasTier2Keyword = TIER2_KEYWORDS.some(keyword => matchKeyword(promptLower, keyword));
259
260
 
260
261
  let recommendedTier = 'Unclassified';
@@ -273,7 +274,9 @@ function run(userPrompt, context, options = {}) {
273
274
  addReason(reasonCodes, 'trivial-docs-edit');
274
275
  } else if (hasMacroSignal || hasTier3Keyword) {
275
276
  recommendedTier = 'Tier 3 (Macro Task)';
276
- rationale = 'Prompt implies repository-wide scope, audit/benchmark work, architectural refactoring, or multi-agent collaboration.';
277
+ rationale = hasMacroSignal
278
+ ? 'Prompt implies repository-wide scope, a structured comparative experiment, architectural refactoring, or multi-agent collaboration.'
279
+ : `Prompt matched configured Tier 3 keyword: "${matchedTier3Keyword}".`;
277
280
  reasonCodes.splice(loadedConfig.reasonCodes.length);
278
281
  addReason(reasonCodes, hasMacroSignal ? 'macro-scope-signal' : 'tier3-keyword');
279
282
  } else if (hasTier2Keyword) {
@@ -4,7 +4,7 @@ description: Discovers and transforms shallow or bloated modules into deep, SRP-
4
4
  license: Apache-2.0
5
5
  metadata:
6
6
  author: Miya Daniel
7
- version: 0.4.0
7
+ version: 0.30.3
8
8
  ---
9
9
 
10
10
  # Improve Codebase Architecture (Deep & SRP Refactoring)
@@ -16,14 +16,14 @@ metadata:
16
16
  | **Trigger / Input** | "refactor architecture", "split object/class", "apply SRP", tech debt |
17
17
  | **Expected Output** | SRP proposal, Characterization Test safety net, TDD-guided extraction. |
18
18
  | **State Mutations** | Extracts classes/functions/objects; adds characterization tests. |
19
- | **Enforcement Gate** | Scan docs first; Characterization Tests before refactoring untested code; >3 cascading errors → rollback + `zoom-out`. |
19
+ | **Enforcement Gate** | Scan docs first; Characterization Tests before refactoring untested code; 3 same-signature failures → rollback + `zoom-out`. |
20
20
 
21
21
  ## Workflow
22
22
 
23
23
  1. `[Discover]`: no blind refactoring — scan `CONTEXT.md`, `docs/adr/`, core interfaces first. Targets: SRP violations (>300 lines / >10 complexity), shallow modules, coupled seams.
24
24
  2. `[Think]`: present the Deepening & SRP proposal (object splitting + seam abstraction) until approved.
25
25
  3. `[Try]`: launch `tdd`; Characterization Tests first if legacy code lacks tests; extract incrementally, verifying tests after each change.
26
- 4. `[Summarize]`/`[Self-Evolve]`: >3 cascading errors → rollback + `zoom-out`; record traps in `self-evolve`.
26
+ 4. `[Summarize]`/`[Self-Evolve]`: 3 same-signature failures → rollback + `zoom-out`; record traps in `self-evolve`.
27
27
 
28
28
  Deep dive: <this-skill-dir>/references/README.md
29
29
 
package/sbom.cdx.json CHANGED
@@ -2,23 +2,23 @@
2
2
  "$schema": "https://cyclonedx.org/schema/bom-1.7.schema.json",
3
3
  "bomFormat": "CycloneDX",
4
4
  "specVersion": "1.7",
5
- "serialNumber": "urn:uuid:609a39f1-97ad-59d5-a8ef-97f1b6da412b",
5
+ "serialNumber": "urn:uuid:557653e9-e704-5fd3-b675-167e0cadb8c9",
6
6
  "version": 1,
7
7
  "metadata": {
8
- "timestamp": "2026-10-01T02:54:31.907Z",
8
+ "timestamp": "2026-10-01T06:19:24.870Z",
9
9
  "tools": [
10
10
  {
11
11
  "vendor": "Harness Everything",
12
12
  "name": "generate-sbom.js",
13
- "version": "0.30.2"
13
+ "version": "0.30.3"
14
14
  }
15
15
  ],
16
16
  "component": {
17
17
  "type": "application",
18
- "bom-ref": "pkg:npm/harness-everything@0.30.2",
18
+ "bom-ref": "pkg:npm/harness-everything@0.30.3",
19
19
  "name": "harness-everything",
20
- "version": "0.30.2",
21
- "purl": "pkg:npm/harness-everything@0.30.2"
20
+ "version": "0.30.3",
21
+ "purl": "pkg:npm/harness-everything@0.30.3"
22
22
  }
23
23
  },
24
24
  "components": [
@@ -1999,7 +1999,7 @@
1999
1999
  ]
2000
2000
  },
2001
2001
  {
2002
- "ref": "pkg:npm/harness-everything@0.30.2",
2002
+ "ref": "pkg:npm/harness-everything@0.30.3",
2003
2003
  "dependsOn": [
2004
2004
  "pkg:npm/%40commitlint/cli@19.8.1",
2005
2005
  "pkg:npm/%40commitlint/config-conventional@19.8.1",