harness-everything 0.30.1 → 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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +15 -0
- package/ci/invariant-routing.test.js +5 -0
- package/ci/prompt-contract-regressions.test.js +60 -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-style.md +4 -4
- package/fable-mode/SKILL.md +1 -1
- package/fable-mode/agents/fable-worker-haiku.md +1 -2
- package/fable-mode/agents/fable-worker-sonnet.md +2 -2
- 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/harness-everything/SKILL.md +1 -1
- package/harness-everything/scripts/kernel-router-core.js +0 -1
- package/harness-everything/scripts/kernel-router.js +0 -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 +2 -2
- package/plugins/harness-everything/.codex-plugin/plugin.json +1 -1
- package/plugins/harness-everything/plugin.json +1 -1
- package/plugins/harness-everything/skills/fable-mode/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-haiku.md +1 -2
- package/plugins/harness-everything/skills/fable-mode/agents/fable-worker-sonnet.md +2 -2
- 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/harness-everything/SKILL.md +1 -1
- package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router-core.js +0 -1
- package/plugins/harness-everything/skills/harness-everything/scripts/kernel-router.js +0 -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-style/SKILL.md +2 -2
- package/plugins/harness-everything/skills/skill-style/references/style-guide.md +5 -5
- package/sbom.cdx.json +7 -7
- package/skill-style/SKILL.md +2 -2
- package/skill-style/references/style-guide.md +5 -5
|
@@ -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.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.
|
|
4
|
+
"version": "0.30.3",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Miya Daniel"
|
|
7
7
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,21 @@
|
|
|
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
|
+
|
|
14
|
+
## [0.30.2](https://github.com/dyphn1/Harness-everything/compare/v0.30.1...v0.30.2) (2026-10-01)
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* **prompts:** remove stale and duplicate guidance ([e8c326b](https://github.com/dyphn1/Harness-everything/commit/e8c326b687e6bac3e8fa3531376ea66371445406))
|
|
19
|
+
|
|
5
20
|
## [0.30.1](https://github.com/dyphn1/Harness-everything/compare/v0.30.0...v0.30.1) (2026-10-01)
|
|
6
21
|
|
|
7
22
|
### 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');
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const assert = require('assert');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const path = require('path');
|
|
6
|
+
const { spawnSync } = require('child_process');
|
|
7
|
+
|
|
8
|
+
const ROOT = path.resolve(__dirname, '..');
|
|
9
|
+
function read(rel) {
|
|
10
|
+
return fs.readFileSync(path.join(ROOT, rel), 'utf8');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// #268: model aliases evolve, so worker prompts must encode behavior rather
|
|
14
|
+
// than generation-specific personality/failure claims.
|
|
15
|
+
const workerPairs = [
|
|
16
|
+
['fable-mode/agents/fable-worker-haiku.md', 'plugins/harness-everything/skills/fable-mode/agents/fable-worker-haiku.md'],
|
|
17
|
+
['fable-mode/agents/fable-worker-sonnet.md', 'plugins/harness-everything/skills/fable-mode/agents/fable-worker-sonnet.md'],
|
|
18
|
+
];
|
|
19
|
+
for (const [canonical, packaged] of workerPairs) {
|
|
20
|
+
const body = read(canonical);
|
|
21
|
+
assert.ok(!/\b(?:Haiku|Sonnet)'s known failure\b/i.test(body), canonical + ' must not carry generation-specific failure traits');
|
|
22
|
+
assert.strictEqual(read(packaged), body, canonical + ' packaged mirror must match');
|
|
23
|
+
}
|
|
24
|
+
assert.ok(/named check is not optional/i.test(read(workerPairs[0][0])), 'Haiku worker keeps the verification behavior');
|
|
25
|
+
assert.ok(/A check\s+you did not run did not pass/i.test(read(workerPairs[1][0])), 'Sonnet worker keeps the verification behavior');
|
|
26
|
+
|
|
27
|
+
// #270: skill-style requires the elements, not one global physical order.
|
|
28
|
+
const skillStyle = read('skill-style/SKILL.md');
|
|
29
|
+
for (const marker of ['# Skill Style', '## Skill Contract', '## USE FOR:', '## DO NOT USE FOR:', '## Core Rules']) {
|
|
30
|
+
assert.ok(skillStyle.includes(marker), 'skill-style keeps required element: ' + marker);
|
|
31
|
+
}
|
|
32
|
+
for (const rel of [
|
|
33
|
+
'skill-style/SKILL.md',
|
|
34
|
+
'plugins/harness-everything/skills/skill-style/SKILL.md',
|
|
35
|
+
'docs/workflows/skill-style.md',
|
|
36
|
+
'skill-style/references/style-guide.md',
|
|
37
|
+
'plugins/harness-everything/skills/skill-style/references/style-guide.md',
|
|
38
|
+
]) {
|
|
39
|
+
const body = read(rel);
|
|
40
|
+
assert.ok(!/MUST include, in order:/i.test(body), rel + ' must not require the retired global section order');
|
|
41
|
+
assert.ok(!/Include in order:/i.test(body), rel + ' must not describe the retired global section order');
|
|
42
|
+
assert.ok(!/includes in order:/i.test(body), rel + ' must not checklist the retired global section order');
|
|
43
|
+
assert.ok(!/reorder the file to title, introduction, Skill Contract, usage, and actionable rules/i.test(body), rel + ' must not prescribe the retired global section order');
|
|
44
|
+
}
|
|
45
|
+
assert.ok(/section order MAY vary/i.test(skillStyle), 'skill-style explicitly permits readability-driven section ordering');
|
|
46
|
+
|
|
47
|
+
// #272: preserve one detailed checkpoint plus the invariant; remove duplicate
|
|
48
|
+
// restatements from later sections of the same router injection.
|
|
49
|
+
const kernel = path.join(ROOT, 'harness-everything/scripts/kernel-router.js');
|
|
50
|
+
const routed = spawnSync(process.execPath, [kernel, 'add a login endpoint with tests and update the implementation'], {
|
|
51
|
+
cwd: ROOT,
|
|
52
|
+
encoding: 'utf8',
|
|
53
|
+
});
|
|
54
|
+
assert.strictEqual(routed.status, 0, routed.stderr || 'kernel router must exit successfully');
|
|
55
|
+
assert.ok(routed.stdout.includes('Suggestion evaluation: MANDATORY.'), 'checkpoint keeps the detailed suggestion-resolution rule');
|
|
56
|
+
assert.ok(routed.stdout.includes('evaluate-suggestions-before-skip:'), 'semantic invariant remains emitted');
|
|
57
|
+
assert.ok(!routed.stdout.includes('Read-before-skip:'), 'workflow-skill footer must not duplicate suggestion resolution');
|
|
58
|
+
assert.ok(!routed.stdout.includes('Every suggested skill MUST resolve applicability.'), 'semantic-contract footer must not duplicate suggestion resolution');
|
|
59
|
+
|
|
60
|
+
console.log('PASS: prompt contract regressions');
|
|
@@ -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
|
|
@@ -11,8 +11,8 @@ Source of truth: `skill-style/SKILL.md`.
|
|
|
11
11
|
```mermaid
|
|
12
12
|
graph TD
|
|
13
13
|
TriggerEdit["Trigger: creating, reviewing, or refactoring a Harness SKILL.md"] --> FrontAccurate["Keep frontmatter accurate and description routeable"]
|
|
14
|
-
FrontAccurate -->
|
|
15
|
-
|
|
14
|
+
FrontAccurate --> SectionCheck["Cover purpose, Skill Contract, usage/applicability, and actionable rules; order may vary"]
|
|
15
|
+
SectionCheck --> ImperativeGate["Use imperative language and name the enforcing command or gate"]
|
|
16
16
|
ImperativeGate --> OverlapCheck["Avoid overlap with OS-layer routing or domain expertise"]
|
|
17
17
|
OverlapCheck --> ConsistencyGate["Gate: npm run test:consistency plus style-guide review"]
|
|
18
18
|
ConsistencyGate --> ConciseOut["Output: concise, complete, non-overlapping SKILL.md"]
|
|
@@ -44,12 +44,12 @@ graph LR
|
|
|
44
44
|
|
|
45
45
|
## 3. Real-World Use Case
|
|
46
46
|
|
|
47
|
-
An author drafts a new `backup-restore` SKILL.md and runs a style pass. They tighten the frontmatter description for routing,
|
|
47
|
+
An author drafts a new `backup-restore` SKILL.md and runs a style pass. They tighten the frontmatter description for routing, check that the skill purpose, Skill Contract, usage/applicability, and actionable rules are all present without forcing a global section order, rewrite vague advice in imperative language naming `npm run test:consistency` as the gate, remove duplicated routing already owned elsewhere, and check `skill-style/references/style-guide.md`. Intent interviewing and prompt testing are handed to `skill-creator/SKILL.md` per the Core Rules.
|
|
48
48
|
|
|
49
49
|
## 4. Verification Check
|
|
50
50
|
|
|
51
51
|
- [ ] Frontmatter accurate and description routeable
|
|
52
|
-
- [ ] File
|
|
52
|
+
- [ ] File covers the skill purpose, Skill Contract, usage/applicability, and actionable rules; section order may vary
|
|
53
53
|
- [ ] Imperative language used with the enforcing command or gate named (`npm run test:consistency` plus style-guide review)
|
|
54
54
|
- [ ] No overlap with OS-layer routing or domain expertise; catalog overlap checked
|
|
55
55
|
- [ ] Tone, formatting, and progressive disclosure standardized per `skill-style/references/style-guide.md`
|
package/fable-mode/SKILL.md
CHANGED
|
@@ -19,8 +19,7 @@ Rules, in order:
|
|
|
19
19
|
3. **Verify — tightened for this tier.** Run the named check from your briefing
|
|
20
20
|
and include its output. NO artifact may be reported unverified without naming
|
|
21
21
|
what check was impossible and why — a bare "unverified" is itself a failure.
|
|
22
|
-
|
|
23
|
-
is not optional.
|
|
22
|
+
The named check is not optional.
|
|
24
23
|
4. **Escalate instead of improvising.** If the assignment turns out to need
|
|
25
24
|
judgment or synthesis (conflicting sources, ambiguous spec, design choices),
|
|
26
25
|
stop and return the specific blocker — recommend fable-worker-sonnet. Do not
|
|
@@ -19,8 +19,8 @@ Rules of the loop, in order:
|
|
|
19
19
|
do not build it.
|
|
20
20
|
3. **Verify with the named check.** Your briefing states the pass condition. Run
|
|
21
21
|
it — the actual command, diff, or read-back — and include the output in your
|
|
22
|
-
report.
|
|
23
|
-
|
|
22
|
+
report. Do not substitute "looks right" for a check that can fail. A check
|
|
23
|
+
you did not run did not pass. If the
|
|
24
24
|
check is impossible, say exactly what was impossible and why, and mark the
|
|
25
25
|
artifact unverified.
|
|
26
26
|
4. **Report format:** artifact path, check command, check output, confirmed
|
|
@@ -194,7 +194,6 @@ function printKernelContract(plan) {
|
|
|
194
194
|
emitted.add(skill);
|
|
195
195
|
if (skill === 'fable-mode') emitted.add('fable-discipline');
|
|
196
196
|
}
|
|
197
|
-
console.log(' - Read-before-skip: MUST evaluate every suggested skill entry before omission. If applicable, MUST follow its core contract; adopting one suggestion does not waive resolution of the others.');
|
|
198
197
|
if (plan.strategy && plan.strategy.startsWith('fable-')) {
|
|
199
198
|
console.log(' - Fable is not a universal pipeline, but a selected Fable topology must be entered and resolved before completion.');
|
|
200
199
|
}
|
|
@@ -151,7 +151,6 @@ function run(raw) {
|
|
|
151
151
|
if (plan.strategySelection === 'selected') {
|
|
152
152
|
console.log(' - Selected-topology required obligations are semantic MUSTs; implementation technique and local tactics MAY adapt.');
|
|
153
153
|
console.log(' - Before claiming completion, MUST resolve required workflow evidence and objective verification, or report an explicit blocked/degraded disposition.');
|
|
154
|
-
console.log(' - Every suggested skill MUST resolve applicability. If applicable, follow its core contract; if not-applicable, keep a flow-grounded reason.');
|
|
155
154
|
console.log(' - Tier 3 / Fable broad mutation MUST resolve isolation: verified linked worktree or explicit degraded fallback. Missing isolation is not a Harness lock.');
|
|
156
155
|
console.log(' - Escape is only for genuinely uncovered declared scope with evidence; it does not erase covered MUST obligations.');
|
|
157
156
|
}
|
|
@@ -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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "harness-everything",
|
|
3
|
-
"version": "0.30.
|
|
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": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"repo:contract": "node scripts/repository-contract.js",
|
|
18
18
|
"docs:sync": "node scripts/sync-current-docs.js",
|
|
19
19
|
"test:repo-contract": "node ci/repository-contract.test.js",
|
|
20
|
-
"test:consistency": "node ci/consistency-check.js && node ci/doc-capability-consistency.test.js && node ci/repository-contract.test.js && node ci/mechanism-2ao-plugin-sync.test.js",
|
|
20
|
+
"test:consistency": "node ci/consistency-check.js && node ci/doc-capability-consistency.test.js && node ci/repository-contract.test.js && node ci/mechanism-2ao-plugin-sync.test.js && node ci/prompt-contract-regressions.test.js",
|
|
21
21
|
"test:docs:capabilities": "node ci/doc-capability-consistency.test.js",
|
|
22
22
|
"test:references": "node ci/reference-check.js",
|
|
23
23
|
"test:release": "node ci/release-consistency-check.js && node ci/mechanism-2x-release-automation.test.js && node ci/mechanism-2x-release-commit-message.test.js && node ci/mechanism-2ap-sbom.test.js",
|
|
@@ -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.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",
|
|
@@ -19,8 +19,7 @@ Rules, in order:
|
|
|
19
19
|
3. **Verify — tightened for this tier.** Run the named check from your briefing
|
|
20
20
|
and include its output. NO artifact may be reported unverified without naming
|
|
21
21
|
what check was impossible and why — a bare "unverified" is itself a failure.
|
|
22
|
-
|
|
23
|
-
is not optional.
|
|
22
|
+
The named check is not optional.
|
|
24
23
|
4. **Escalate instead of improvising.** If the assignment turns out to need
|
|
25
24
|
judgment or synthesis (conflicting sources, ambiguous spec, design choices),
|
|
26
25
|
stop and return the specific blocker — recommend fable-worker-sonnet. Do not
|
|
@@ -19,8 +19,8 @@ Rules of the loop, in order:
|
|
|
19
19
|
do not build it.
|
|
20
20
|
3. **Verify with the named check.** Your briefing states the pass condition. Run
|
|
21
21
|
it — the actual command, diff, or read-back — and include the output in your
|
|
22
|
-
report.
|
|
23
|
-
|
|
22
|
+
report. Do not substitute "looks right" for a check that can fail. A check
|
|
23
|
+
you did not run did not pass. If the
|
|
24
24
|
check is impossible, say exactly what was impossible and why, and mark the
|
|
25
25
|
artifact unverified.
|
|
26
26
|
4. **Report format:** artifact path, check command, check output, confirmed
|
|
@@ -194,7 +194,6 @@ function printKernelContract(plan) {
|
|
|
194
194
|
emitted.add(skill);
|
|
195
195
|
if (skill === 'fable-mode') emitted.add('fable-discipline');
|
|
196
196
|
}
|
|
197
|
-
console.log(' - Read-before-skip: MUST evaluate every suggested skill entry before omission. If applicable, MUST follow its core contract; adopting one suggestion does not waive resolution of the others.');
|
|
198
197
|
if (plan.strategy && plan.strategy.startsWith('fable-')) {
|
|
199
198
|
console.log(' - Fable is not a universal pipeline, but a selected Fable topology must be entered and resolved before completion.');
|
|
200
199
|
}
|
|
@@ -151,7 +151,6 @@ function run(raw) {
|
|
|
151
151
|
if (plan.strategySelection === 'selected') {
|
|
152
152
|
console.log(' - Selected-topology required obligations are semantic MUSTs; implementation technique and local tactics MAY adapt.');
|
|
153
153
|
console.log(' - Before claiming completion, MUST resolve required workflow evidence and objective verification, or report an explicit blocked/degraded disposition.');
|
|
154
|
-
console.log(' - Every suggested skill MUST resolve applicability. If applicable, follow its core contract; if not-applicable, keep a flow-grounded reason.');
|
|
155
154
|
console.log(' - Tier 3 / Fable broad mutation MUST resolve isolation: verified linked worktree or explicit degraded fallback. Missing isolation is not a Harness lock.');
|
|
156
155
|
console.log(' - Escape is only for genuinely uncovered declared scope with evidence; it does not erase covered MUST obligations.');
|
|
157
156
|
}
|
|
@@ -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: Apply Harness style guidelines when writing or refactoring SKILL.md
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.30.2
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Skill Style
|
|
@@ -34,7 +34,7 @@ Apply the Harness writing standard when creating or refactoring `SKILL.md` files
|
|
|
34
34
|
## Core Rules
|
|
35
35
|
|
|
36
36
|
1. MUST keep frontmatter accurate and the description routeable.
|
|
37
|
-
2. MUST
|
|
37
|
+
2. MUST cover the skill purpose, Skill Contract, usage/applicability, and actionable rules; section order MAY vary for readability and routeability.
|
|
38
38
|
3. MUST use imperative language and name the enforcing command or gate.
|
|
39
39
|
4. MUST avoid overlap with OS-layer routing or domain expertise.
|
|
40
40
|
5. For intent interviews, drafting, and prompt tests, load `<skills-repo-root>/skill-creator/SKILL.md`.
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
When you need to create a new Skill or refactor an existing one, strictly adhere to the writing style in this document to ensure all Skills seamlessly integrate into the `harness-everything` routing system and are mathematically enforced by scripts.
|
|
4
4
|
|
|
5
5
|
## 1. Structured Definition
|
|
6
|
-
Every Skill file (`SKILL.md`) MUST
|
|
6
|
+
Every Skill file (`SKILL.md`) MUST cover the following elements. Their relative order MAY vary when that improves routing clarity or readability; do not treat this list as a global section-order contract:
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
- **Title & Purpose**: Clearly state the purpose of this Skill.
|
|
9
|
+
- **📋 Skill Contract (CRITICAL)**: A strict Markdown table defining inputs, outputs, state mutations, and script gates. This replaces vague prose.
|
|
10
|
+
- **Triggers / Usage**: Explicitly tell the system when this skill applies.
|
|
11
|
+
- **Core Rules / Action List**: Specific, actionable commands tied to Terminal Scripts. Avoid vague suggestions.
|
|
12
12
|
|
|
13
13
|
### 📋 The Skill Contract Format
|
|
14
14
|
Every SKILL.md MUST include this table exactly:
|
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:557653e9-e704-5fd3-b675-167e0cadb8c9",
|
|
6
6
|
"version": 1,
|
|
7
7
|
"metadata": {
|
|
8
|
-
"timestamp": "2026-10-
|
|
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.
|
|
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.
|
|
18
|
+
"bom-ref": "pkg:npm/harness-everything@0.30.3",
|
|
19
19
|
"name": "harness-everything",
|
|
20
|
-
"version": "0.30.
|
|
21
|
-
"purl": "pkg:npm/harness-everything@0.30.
|
|
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.
|
|
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",
|
package/skill-style/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: Apply Harness style guidelines when writing or refactoring SKILL.md
|
|
|
4
4
|
license: Apache-2.0
|
|
5
5
|
metadata:
|
|
6
6
|
author: Miya Daniel
|
|
7
|
-
version: 0.
|
|
7
|
+
version: 0.30.2
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Skill Style
|
|
@@ -34,7 +34,7 @@ Apply the Harness writing standard when creating or refactoring `SKILL.md` files
|
|
|
34
34
|
## Core Rules
|
|
35
35
|
|
|
36
36
|
1. MUST keep frontmatter accurate and the description routeable.
|
|
37
|
-
2. MUST
|
|
37
|
+
2. MUST cover the skill purpose, Skill Contract, usage/applicability, and actionable rules; section order MAY vary for readability and routeability.
|
|
38
38
|
3. MUST use imperative language and name the enforcing command or gate.
|
|
39
39
|
4. MUST avoid overlap with OS-layer routing or domain expertise.
|
|
40
40
|
5. For intent interviews, drafting, and prompt tests, load `<skills-repo-root>/skill-creator/SKILL.md`.
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
When you need to create a new Skill or refactor an existing one, strictly adhere to the writing style in this document to ensure all Skills seamlessly integrate into the `harness-everything` routing system and are mathematically enforced by scripts.
|
|
4
4
|
|
|
5
5
|
## 1. Structured Definition
|
|
6
|
-
Every Skill file (`SKILL.md`) MUST
|
|
6
|
+
Every Skill file (`SKILL.md`) MUST cover the following elements. Their relative order MAY vary when that improves routing clarity or readability; do not treat this list as a global section-order contract:
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
- **Title & Purpose**: Clearly state the purpose of this Skill.
|
|
9
|
+
- **📋 Skill Contract (CRITICAL)**: A strict Markdown table defining inputs, outputs, state mutations, and script gates. This replaces vague prose.
|
|
10
|
+
- **Triggers / Usage**: Explicitly tell the system when this skill applies.
|
|
11
|
+
- **Core Rules / Action List**: Specific, actionable commands tied to Terminal Scripts. Avoid vague suggestions.
|
|
12
12
|
|
|
13
13
|
### 📋 The Skill Contract Format
|
|
14
14
|
Every SKILL.md MUST include this table exactly:
|