harness-everything 0.30.2 → 0.30.4
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/CHANGELOG.md +28 -0
- package/ci/invariant-routing.test.js +5 -0
- package/ci/prompt-contract-regressions.test.js +46 -0
- package/ci/router-workflow-plan.test.js +29 -0
- package/docs/routing.md +2 -0
- package/docs/workflows/improve-codebase-architecture.md +4 -4
- package/docs/workflows/skill-creator.md +5 -4
- package/harness-everything/SKILL.md +1 -1
- package/harness-everything/scripts/tier-router.js +6 -3
- package/improve-codebase-architecture/SKILL.md +3 -3
- package/opencode-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
- package/plugins/harness-everything/plugin.json +1 -1
- package/plugins/harness-everything/skills/harness-everything/SKILL.md +1 -1
- package/plugins/harness-everything/skills/harness-everything/scripts/tier-router.js +6 -3
- package/plugins/harness-everything/skills/improve-codebase-architecture/SKILL.md +3 -3
- package/plugins/harness-everything/skills/skill-creator/SKILL.md +3 -3
- package/plugins/harness-everything/skills/skill-creator/references/authoring-workflow.md +6 -6
- package/plugins/harness-everything/skills/skill-creator/references/testing-workflow.md +4 -4
- package/plugins/harness-everything/skills/to-spec/SKILL.md +2 -2
- package/plugins/harness-everything/skills/to-spec/references/process.md +1 -1
- package/sbom.cdx.json +7 -7
- package/skill-creator/SKILL.md +3 -3
- package/skill-creator/references/authoring-workflow.md +6 -6
- package/skill-creator/references/testing-workflow.md +4 -4
- package/to-spec/SKILL.md +2 -2
- package/to-spec/references/process.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.30.
|
|
13
|
+
"version": "0.30.4",
|
|
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.
|
|
4
|
+
"version": "0.30.4",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Miya Daniel"
|
|
7
7
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.30.4](https://github.com/dyphn1/Harness-everything/compare/v0.30.3...v0.30.4) (2026-10-01)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* **plugin:** sync skill-creator A/B contract ([2eeea6e](https://github.com/dyphn1/Harness-everything/commit/2eeea6ec3845c5affcbd38f8c44c8120155818c2))
|
|
10
|
+
* **plugin:** sync to-spec design audit contract ([4a298e6](https://github.com/dyphn1/Harness-everything/commit/4a298e64477078e8c435ab90d1968d36f91bc648))
|
|
11
|
+
* **plugin:** sync to-spec workspace contract ([591c50f](https://github.com/dyphn1/Harness-everything/commit/591c50f6a99819f51202e0fbebc0bdb3511746e0))
|
|
12
|
+
* **skill-creator:** define executor-agnostic A/B lanes ([7294807](https://github.com/dyphn1/Harness-everything/commit/7294807da0c0c96f7baa148eb05913b476e192fa))
|
|
13
|
+
* **skill-creator:** keep A/B invariant within token budget ([0e249ab](https://github.com/dyphn1/Harness-everything/commit/0e249ab2205daba3f11ad8aa7886e27821d63edb))
|
|
14
|
+
* **skill-creator:** keep A/B invariant within token budget ([d0c7cba](https://github.com/dyphn1/Harness-everything/commit/d0c7cba2c9d2123a3a9c192d022dae3a70740efc))
|
|
15
|
+
* **skill-creator:** keep topology router-owned in authoring guide ([842241d](https://github.com/dyphn1/Harness-everything/commit/842241dfadc98ed5983d744c9d615cf8e93b5e5e))
|
|
16
|
+
* **skill-creator:** keep topology router-owned in authoring guide ([97ec713](https://github.com/dyphn1/Harness-everything/commit/97ec713580958629df11923be0acf25f4eaf92d2))
|
|
17
|
+
* **skill-creator:** remove stale workspace spawner guidance ([37fbb99](https://github.com/dyphn1/Harness-everything/commit/37fbb99b992881fe4c93126c0198697e2d825240))
|
|
18
|
+
* **skill-creator:** remove stale workspace spawner guidance ([14f0614](https://github.com/dyphn1/Harness-everything/commit/14f0614843d79fc1067384b1b5ffa3f22caf1b6b))
|
|
19
|
+
* **to-spec:** define design audit outcome instead of executor ([ffe8e6e](https://github.com/dyphn1/Harness-everything/commit/ffe8e6e414edbb50412d48fd07cfe187b97cdc6f))
|
|
20
|
+
* **to-spec:** keep audit invariant within token budget ([c29757a](https://github.com/dyphn1/Harness-everything/commit/c29757af92dc560a6fb15f16252ca931d4abc5cc))
|
|
21
|
+
* **to-spec:** keep audit invariant within token budget ([5ab9667](https://github.com/dyphn1/Harness-everything/commit/5ab966710ca32e776a9cd9d8c608b92e2558898c))
|
|
22
|
+
* **to-spec:** stop treating workspace as subagent executor ([32b797c](https://github.com/dyphn1/Harness-everything/commit/32b797c9fd9028ca26b8bb61f101bace23a5cd18))
|
|
23
|
+
|
|
24
|
+
## [0.30.3](https://github.com/dyphn1/Harness-everything/compare/v0.30.2...v0.30.3) (2026-10-01)
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
* **router:** preserve structured A/B macro routing ([7184ec5](https://github.com/dyphn1/Harness-everything/commit/7184ec5742d12bca8abc3ce938ee9b1c3720da67))
|
|
29
|
+
* **router:** report actual Tier 3 trigger rationale ([d361704](https://github.com/dyphn1/Harness-everything/commit/d361704a4bfdf6c42c93c7f7a9e6c1bad2c34ff7))
|
|
30
|
+
* **router:** stop treating audit verbs as macro scope ([9e79e3b](https://github.com/dyphn1/Harness-everything/commit/9e79e3be00b446dba8082d06360c3c7ea0dcf2ae))
|
|
31
|
+
* **rule-of-3:** align architecture failure threshold ([bc807a2](https://github.com/dyphn1/Harness-everything/commit/bc807a21466f299147378aec7f37ea7b3c56c42b))
|
|
32
|
+
|
|
5
33
|
## [0.30.2](https://github.com/dyphn1/Harness-everything/compare/v0.30.1...v0.30.2) (2026-10-01)
|
|
6
34
|
|
|
7
35
|
### 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');
|
|
@@ -44,6 +44,52 @@ for (const rel of [
|
|
|
44
44
|
}
|
|
45
45
|
assert.ok(/section order MAY vary/i.test(skillStyle), 'skill-style explicitly permits readability-driven section ordering');
|
|
46
46
|
|
|
47
|
+
// #266: older callers must describe review/evaluation outcomes, not treat
|
|
48
|
+
// multi-agent-workspace as a generic subagent executor. Topology remains
|
|
49
|
+
// router-owned, and canonical skill files must stay in sync with packaged copies.
|
|
50
|
+
const contractPairs = [
|
|
51
|
+
['to-spec/SKILL.md', 'plugins/harness-everything/skills/to-spec/SKILL.md'],
|
|
52
|
+
['to-spec/references/process.md', 'plugins/harness-everything/skills/to-spec/references/process.md'],
|
|
53
|
+
['skill-creator/SKILL.md', 'plugins/harness-everything/skills/skill-creator/SKILL.md'],
|
|
54
|
+
['skill-creator/references/testing-workflow.md', 'plugins/harness-everything/skills/skill-creator/references/testing-workflow.md'],
|
|
55
|
+
['skill-creator/references/authoring-workflow.md', 'plugins/harness-everything/skills/skill-creator/references/authoring-workflow.md'],
|
|
56
|
+
];
|
|
57
|
+
for (const [canonical, packaged] of contractPairs) {
|
|
58
|
+
assert.strictEqual(read(packaged), read(canonical), canonical + ' packaged mirror must match');
|
|
59
|
+
}
|
|
60
|
+
const contractSurfaces = [
|
|
61
|
+
'to-spec/SKILL.md',
|
|
62
|
+
'to-spec/references/process.md',
|
|
63
|
+
'skill-creator/SKILL.md',
|
|
64
|
+
'skill-creator/references/testing-workflow.md',
|
|
65
|
+
'skill-creator/references/authoring-workflow.md',
|
|
66
|
+
'docs/workflows/skill-creator.md',
|
|
67
|
+
];
|
|
68
|
+
const staleExecutorClaims = [
|
|
69
|
+
/Design Audit \(\`multi-agent-workspace\`\)/i,
|
|
70
|
+
/recommend invoking \`multi-agent-workspace\`/i,
|
|
71
|
+
/A\/B-test via \`multi-agent-workspace\` subagents/i,
|
|
72
|
+
/multi-agent-workspace subagents/i,
|
|
73
|
+
/`multi-agent-workspace` skill for bounded sub-agent spawning/i,
|
|
74
|
+
/Use `multi-agent-workspace` to spawn/i,
|
|
75
|
+
/multi-agent entrypoint is `multi-agent-workspace`; it owns\s+bounded delegation/i,
|
|
76
|
+
];
|
|
77
|
+
for (const rel of contractSurfaces) {
|
|
78
|
+
const body = read(rel);
|
|
79
|
+
for (const pattern of staleExecutorClaims) {
|
|
80
|
+
assert.ok(!pattern.test(body), rel + ' must not treat multi-agent-workspace as a generic executor: ' + pattern);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
assert.ok(/independent Design Audit findings/i.test(read('to-spec/SKILL.md')), 'to-spec requires independent Design Audit evidence');
|
|
84
|
+
assert.ok(/Describe the required audit outcome, not an executor/i.test(read('to-spec/references/process.md')), 'to-spec process specifies audit outcome rather than executor');
|
|
85
|
+
assert.ok(/A\/B-test isolated control/i.test(read('skill-creator/SKILL.md')), 'skill-creator defines isolated A/B lanes');
|
|
86
|
+
assert.ok(/control \(without skill\) vs treatment \(with skill\)/i.test(read('skill-creator/SKILL.md')), 'skill-creator preserves control/treatment semantics');
|
|
87
|
+
assert.ok(/topology owned by the active router\/host/i.test(read('skill-creator/references/testing-workflow.md')), 'testing guide keeps evaluation topology router-owned');
|
|
88
|
+
assert.ok(/Execution topology belongs to the router\/host/i.test(read('skill-creator/references/authoring-workflow.md')), 'authoring guide keeps execution topology router-owned');
|
|
89
|
+
const workspaceContract = read('multi-agent-workspace/SKILL.md');
|
|
90
|
+
assert.ok(/router owns that decision/i.test(workspaceContract), 'multi-agent-workspace keeps router-owned topology');
|
|
91
|
+
assert.ok(/does not spawn workers/i.test(workspaceContract), 'multi-agent-workspace remains a topology/workspace consumer');
|
|
92
|
+
|
|
47
93
|
// #272: preserve one detailed checkpoint plus the invariant; remove duplicate
|
|
48
94
|
// restatements from later sections of the same router injection.
|
|
49
95
|
const kernel = path.join(ROOT, 'harness-everything/scripts/kernel-router.js');
|
|
@@ -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{"
|
|
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
|
|
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{"
|
|
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
|
|
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
|
|
@@ -13,7 +13,7 @@ graph TD
|
|
|
13
13
|
NewReq["Trigger: new skill, SKILL.md audit, or self-evolve packaging"] --> DupGrep["Grep registry for near-duplicates; when-to-fire sentence becomes description"]
|
|
14
14
|
DupGrep --> DraftContract["Draft Contract table first, then USE FOR and DO NOT USE FOR, then steps or flat reference"]
|
|
15
15
|
DraftContract --> PushRef["Push branch-only detail to references/"]
|
|
16
|
-
PushRef --> ABTest["A/B-test
|
|
16
|
+
PushRef --> ABTest["A/B-test in isolated control/treatment lanes; capture and read both transcripts"]
|
|
17
17
|
ABTest --> QualityGate["Quality Checklist gate before registering"]
|
|
18
18
|
QualityGate --> RegisterOut["Output: SKILL.md passing Quality Checklist; writes SKILL.md and updates registry or generated folder"]
|
|
19
19
|
```
|
|
@@ -38,7 +38,8 @@ graph LR
|
|
|
38
38
|
|
|
39
39
|
```mermaid
|
|
40
40
|
graph LR
|
|
41
|
-
CreatorSkill2["skill-creator / SKILL.md"] -->|A
|
|
41
|
+
CreatorSkill2["skill-creator / SKILL.md"] -->|Defines isolated A/B lanes and evidence| EvalLanes["Control: without candidate skill / Treatment: with candidate skill"]
|
|
42
|
+
EvalLanes --> RouterExec["Router/host selects execution topology"]
|
|
42
43
|
NonSkillDocs["Non-skill project docs"] -->|Use instead| RepoDocs["repo-docs or to-spec"]
|
|
43
44
|
ThirdParty["Third-party skill discovery"] -->|Use instead| FindSkills["find-skills"]
|
|
44
45
|
StyleOnly["Code style outside SKILL.md files"] -->|Out of scope| NotCreator["Not skill-creator"]
|
|
@@ -46,7 +47,7 @@ graph LR
|
|
|
46
47
|
|
|
47
48
|
## 3. Real-World Use Case
|
|
48
49
|
|
|
49
|
-
A team wants a new `deploy-preview` skill. The author greps the registry for near-duplicates, writes the when-to-fire sentence as the description, drafts the Contract table first with its enforcement gate, then `USE FOR` and `DO NOT USE FOR`, then the steps, pushing long detail to `references/`. They A/B-test
|
|
50
|
+
A team wants a new `deploy-preview` skill. The author greps the registry for near-duplicates, writes the when-to-fire sentence as the description, drafts the Contract table first with its enforcement gate, then `USE FOR` and `DO NOT USE FOR`, then the steps, pushing long detail to `references/`. They A/B-test in two isolated lanes (control without the candidate skill; treatment with it), capture and read both transcripts, let the router/host select the execution topology, run the Quality Checklist (`skill-creator/references/quality-checklist.md`), and only then register. A separate small tip discovered mid-session does not qualify as a dynamic skill and goes to `<workspace>/memories/repo/RULES.md`.
|
|
50
51
|
|
|
51
52
|
## 4. Verification Check
|
|
52
53
|
|
|
@@ -54,7 +55,7 @@ A team wants a new `deploy-preview` skill. The author greps the registry for nea
|
|
|
54
55
|
- [ ] Contract table drafted first to force the enforcement gate
|
|
55
56
|
- [ ] `USE FOR` and `DO NOT USE FOR` present before steps or flat reference
|
|
56
57
|
- [ ] Branch-only detail pushed to `references/` (e.g. `skill-creator/references/quality-checklist.md`)
|
|
57
|
-
- [ ] A/B-tested
|
|
58
|
+
- [ ] A/B-tested in isolated control/treatment lanes; both transcripts captured and read; execution topology left to the router/host
|
|
58
59
|
- [ ] Quality Checklist passed before registering, including `USE FOR` / `DO NOT USE FOR` consistency
|
|
59
60
|
- [ ] Output is a SKILL.md passing the Quality Checklist; `<skill>/SKILL.md` written and registry or generated folder updated
|
|
60
61
|
- [ ] Dynamic path gated by Quality Checklist first; location, frontmatter triggers, generated type, and draft status correct
|
|
@@ -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(?:
|
|
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
|
|
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 =
|
|
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.
|
|
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;
|
|
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]`:
|
|
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/package.json
CHANGED
|
@@ -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.
|
|
4
|
+
"version": "0.30.4",
|
|
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",
|
|
@@ -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(?:
|
|
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
|
|
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 =
|
|
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.
|
|
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;
|
|
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]`:
|
|
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
|
|
|
@@ -4,7 +4,7 @@ description: Author, audit, and refactor SKILL.md files against one quality bar
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.30.4
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Skill Creator
|
|
@@ -31,8 +31,8 @@ metadata:
|
|
|
31
31
|
## Authoring Workflow
|
|
32
32
|
|
|
33
33
|
1. Grep the registry for near-duplicates; the when-to-fire sentence becomes the description.
|
|
34
|
-
2. Draft
|
|
35
|
-
3. A/B-test
|
|
34
|
+
2. Draft Contract table first, then `## USE FOR:`/`## DO NOT USE FOR:`, then steps; move branch-only detail to references/.
|
|
35
|
+
3. A/B-test isolated control (without skill) vs treatment (with skill); read both transcripts; router owns topology.
|
|
36
36
|
4. Run the Quality Checklist; register (static quotes the description; dynamic below).
|
|
37
37
|
|
|
38
38
|
## Dynamic Skill Generation Contract
|
|
@@ -5,10 +5,10 @@ the enforcement gate. Use short ordered steps for actions and move branch-only
|
|
|
5
5
|
detail into references or guides.
|
|
6
6
|
|
|
7
7
|
Before registering a skill, check the Harness registry for overlap, define one
|
|
8
|
-
human-readable frontmatter description, run realistic with/without
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
human-readable frontmatter description, run realistic isolated with/without
|
|
9
|
+
tests, and complete the Quality Checklist. Static skills belong in the root
|
|
10
|
+
catalog and need a routing eval; dynamic skills use the generated manifest flow
|
|
11
|
+
from `self-evolve`.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
Execution topology belongs to the router/host. `multi-agent-workspace` is only
|
|
14
|
+
consumed when the router already selected its workspace topology.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Testing Workflow
|
|
2
2
|
|
|
3
3
|
Read this when `skill-creator/SKILL.md` asks for realistic trigger tests or a
|
|
4
|
-
with/without comparison.
|
|
5
|
-
|
|
4
|
+
with/without comparison. Use isolated control/treatment lanes and keep execution
|
|
5
|
+
topology owned by the active router/host.
|
|
6
6
|
|
|
7
7
|
## With/without comparison
|
|
8
8
|
|
|
9
9
|
1. Write 2-3 realistic prompts with paths, framework names, and near-misses.
|
|
10
|
-
2.
|
|
11
|
-
|
|
10
|
+
2. Run the treatment with the draft skill loaded and the control without it in
|
|
11
|
+
isolated lanes selected by the active router/host.
|
|
12
12
|
3. Read both transcripts, not only final answers; record thrashing and missed
|
|
13
13
|
gates as evidence.
|
|
14
14
|
4. Construct one prompt that should trigger the skill's enforcement gate and
|
|
@@ -4,7 +4,7 @@ description: "Turn the conversation into a written spec — feature PRD, CLI/API
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.30.4
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# To Spec
|
|
@@ -26,7 +26,7 @@ Turns the conversation into one published spec artifact. No interviewing — `gr
|
|
|
26
26
|
2. Zero-trust context: cite `Evidence: <file:line> -> Finding: <meaning>`; blocking forks mean run `grill-me`/`grill-with-docs` first.
|
|
27
27
|
3. Mandatory outline preview (closest fit, 10-20 lines + target path); write only after user confirms.
|
|
28
28
|
4. Publish to `specs/<feature-slug>.md` (`Status: ready-for-agent`) or `reference/`, `adr/`.
|
|
29
|
-
5. Golden Flow: Feature
|
|
29
|
+
5. Golden Flow: Feature specs require independent Design Audit findings before `/to-tickets`; router owns topology.
|
|
30
30
|
|
|
31
31
|
Deep dive: <this-skill-dir>/references/process.md
|
|
32
32
|
|
|
@@ -100,4 +100,4 @@ No additional triage needed beyond the `issueDefinition` marker. A clearly-shape
|
|
|
100
100
|
|
|
101
101
|
## Golden Flow rationale
|
|
102
102
|
|
|
103
|
-
After publishing a `Feature spec` (Tier 3), do NOT immediately instruct the user to run `/to-tickets`. Instead,
|
|
103
|
+
After publishing a `Feature spec` (Tier 3), do NOT immediately instruct the user to run `/to-tickets`. Instead, require a Design Audit with at least two independent reviewer perspectives (for example, Security Auditor and Senior Architect) and preserve their findings as audit evidence. Describe the required audit outcome, not an executor: the Harness router/host selects the execution topology. `multi-agent-workspace` is valid only when the router contract has already selected `strategy=fable-multi-agent-workspace` with `workspace.required=true`; otherwise use the independent review lanes available on the active host/router. State explicitly: "This specification must pass a Design Audit before being broken down by `/to-tickets`. Any architectural flaws or over-engineering must be caught now, not during implementation."
|
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:
|
|
5
|
+
"serialNumber": "urn:uuid:29356e45-bc4a-52e1-86a1-e76ba7221fbe",
|
|
6
6
|
"version": 1,
|
|
7
7
|
"metadata": {
|
|
8
|
-
"timestamp": "2026-10-
|
|
8
|
+
"timestamp": "2026-10-01T08:19:06.883Z",
|
|
9
9
|
"tools": [
|
|
10
10
|
{
|
|
11
11
|
"vendor": "Harness Everything",
|
|
12
12
|
"name": "generate-sbom.js",
|
|
13
|
-
"version": "0.30.
|
|
13
|
+
"version": "0.30.4"
|
|
14
14
|
}
|
|
15
15
|
],
|
|
16
16
|
"component": {
|
|
17
17
|
"type": "application",
|
|
18
|
-
"bom-ref": "pkg:npm/harness-everything@0.30.
|
|
18
|
+
"bom-ref": "pkg:npm/harness-everything@0.30.4",
|
|
19
19
|
"name": "harness-everything",
|
|
20
|
-
"version": "0.30.
|
|
21
|
-
"purl": "pkg:npm/harness-everything@0.30.
|
|
20
|
+
"version": "0.30.4",
|
|
21
|
+
"purl": "pkg:npm/harness-everything@0.30.4"
|
|
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.
|
|
2002
|
+
"ref": "pkg:npm/harness-everything@0.30.4",
|
|
2003
2003
|
"dependsOn": [
|
|
2004
2004
|
"pkg:npm/%40commitlint/cli@19.8.1",
|
|
2005
2005
|
"pkg:npm/%40commitlint/config-conventional@19.8.1",
|
package/skill-creator/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: Author, audit, and refactor SKILL.md files against one quality bar
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.30.4
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Skill Creator
|
|
@@ -31,8 +31,8 @@ metadata:
|
|
|
31
31
|
## Authoring Workflow
|
|
32
32
|
|
|
33
33
|
1. Grep the registry for near-duplicates; the when-to-fire sentence becomes the description.
|
|
34
|
-
2. Draft
|
|
35
|
-
3. A/B-test
|
|
34
|
+
2. Draft Contract table first, then `## USE FOR:`/`## DO NOT USE FOR:`, then steps; move branch-only detail to references/.
|
|
35
|
+
3. A/B-test isolated control (without skill) vs treatment (with skill); read both transcripts; router owns topology.
|
|
36
36
|
4. Run the Quality Checklist; register (static quotes the description; dynamic below).
|
|
37
37
|
|
|
38
38
|
## Dynamic Skill Generation Contract
|
|
@@ -5,10 +5,10 @@ the enforcement gate. Use short ordered steps for actions and move branch-only
|
|
|
5
5
|
detail into references or guides.
|
|
6
6
|
|
|
7
7
|
Before registering a skill, check the Harness registry for overlap, define one
|
|
8
|
-
human-readable frontmatter description, run realistic with/without
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
human-readable frontmatter description, run realistic isolated with/without
|
|
9
|
+
tests, and complete the Quality Checklist. Static skills belong in the root
|
|
10
|
+
catalog and need a routing eval; dynamic skills use the generated manifest flow
|
|
11
|
+
from `self-evolve`.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
Execution topology belongs to the router/host. `multi-agent-workspace` is only
|
|
14
|
+
consumed when the router already selected its workspace topology.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# Testing Workflow
|
|
2
2
|
|
|
3
3
|
Read this when `skill-creator/SKILL.md` asks for realistic trigger tests or a
|
|
4
|
-
with/without comparison.
|
|
5
|
-
|
|
4
|
+
with/without comparison. Use isolated control/treatment lanes and keep execution
|
|
5
|
+
topology owned by the active router/host.
|
|
6
6
|
|
|
7
7
|
## With/without comparison
|
|
8
8
|
|
|
9
9
|
1. Write 2-3 realistic prompts with paths, framework names, and near-misses.
|
|
10
|
-
2.
|
|
11
|
-
|
|
10
|
+
2. Run the treatment with the draft skill loaded and the control without it in
|
|
11
|
+
isolated lanes selected by the active router/host.
|
|
12
12
|
3. Read both transcripts, not only final answers; record thrashing and missed
|
|
13
13
|
gates as evidence.
|
|
14
14
|
4. Construct one prompt that should trigger the skill's enforcement gate and
|
package/to-spec/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: "Turn the conversation into a written spec — feature PRD, CLI/API
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.30.4
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# To Spec
|
|
@@ -26,7 +26,7 @@ Turns the conversation into one published spec artifact. No interviewing — `gr
|
|
|
26
26
|
2. Zero-trust context: cite `Evidence: <file:line> -> Finding: <meaning>`; blocking forks mean run `grill-me`/`grill-with-docs` first.
|
|
27
27
|
3. Mandatory outline preview (closest fit, 10-20 lines + target path); write only after user confirms.
|
|
28
28
|
4. Publish to `specs/<feature-slug>.md` (`Status: ready-for-agent`) or `reference/`, `adr/`.
|
|
29
|
-
5. Golden Flow: Feature
|
|
29
|
+
5. Golden Flow: Feature specs require independent Design Audit findings before `/to-tickets`; router owns topology.
|
|
30
30
|
|
|
31
31
|
Deep dive: <this-skill-dir>/references/process.md
|
|
32
32
|
|
|
@@ -100,4 +100,4 @@ No additional triage needed beyond the `issueDefinition` marker. A clearly-shape
|
|
|
100
100
|
|
|
101
101
|
## Golden Flow rationale
|
|
102
102
|
|
|
103
|
-
After publishing a `Feature spec` (Tier 3), do NOT immediately instruct the user to run `/to-tickets`. Instead,
|
|
103
|
+
After publishing a `Feature spec` (Tier 3), do NOT immediately instruct the user to run `/to-tickets`. Instead, require a Design Audit with at least two independent reviewer perspectives (for example, Security Auditor and Senior Architect) and preserve their findings as audit evidence. Describe the required audit outcome, not an executor: the Harness router/host selects the execution topology. `multi-agent-workspace` is valid only when the router contract has already selected `strategy=fable-multi-agent-workspace` with `workspace.required=true`; otherwise use the independent review lanes available on the active host/router. State explicitly: "This specification must pass a Design Audit before being broken down by `/to-tickets`. Any architectural flaws or over-engineering must be caught now, not during implementation."
|