harness-everything 0.31.2 → 0.31.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 +19 -0
- package/bin/cli.js +1 -0
- package/ci/lib/isolated-test-process.js +30 -0
- package/ci/mechanism-2al-codex-hooks-compat.test.js +14 -14
- package/ci/mechanism-2ao-plugin-sync.test.js +19 -2
- package/ci/mechanism-2at-fable-execution-phases.test.js +46 -0
- package/ci/mechanism-2au-codex-runtime-safety.test.js +340 -0
- package/ci/mechanism-2av-test-home-isolation.test.js +48 -0
- package/ci/mechanism-test.js +2 -2
- package/docs/platform-capabilities.md +4 -0
- package/docs/platform-compatibility.json +1 -1
- package/fable-mode/SKILL.md +1 -1
- package/fable-mode/execution-guardrails/SKILL.md +1 -1
- package/fable-mode/fable-haiku/SKILL.md +1 -1
- package/fable-mode/fable-opus/SKILL.md +1 -1
- package/fable-mode/fable-sonnet/SKILL.md +1 -1
- package/fable-mode/references/execution-phases.md +93 -25
- 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/execution-guardrails/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/fable-haiku/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/fable-opus/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/fable-sonnet/SKILL.md +1 -1
- package/plugins/harness-everything/skills/fable-mode/references/execution-phases.md +93 -25
- package/plugins/harness-everything/skills/self-evolve/SKILL.md +1 -1
- package/plugins/harness-everything/skills/self-evolve/scripts/self-regression.js +8 -6
- package/sbom.cdx.json +7 -7
- package/scripts/codex-hooks-compat.js +265 -25
- package/self-evolve/SKILL.md +1 -1
- package/self-evolve/scripts/self-regression.js +8 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "harness-everything",
|
|
3
|
-
"version": "0.31.
|
|
3
|
+
"version": "0.31.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": {
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"waza:check": "node scripts/waza-harness-check.js",
|
|
64
64
|
"test:waza:compat": "node ci/mechanism-2aj-waza-reference-adapter.test.js",
|
|
65
65
|
"codex:hooks": "node scripts/codex-hooks-compat.js",
|
|
66
|
-
"test:codex:hooks-compat": "node ci/mechanism-2al-codex-hooks-compat.test.js"
|
|
66
|
+
"test:codex:hooks-compat": "node ci/mechanism-2al-codex-hooks-compat.test.js && node ci/mechanism-2au-codex-runtime-safety.test.js"
|
|
67
67
|
},
|
|
68
68
|
"engines": {
|
|
69
69
|
"node": ">=22"
|
|
@@ -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.31.
|
|
4
|
+
"version": "0.31.3",
|
|
5
5
|
"description": "Invariant-first engineering harness for routing, verification, and failure recovery while preserving agent autonomy.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Miya Daniel",
|
|
@@ -2,37 +2,105 @@
|
|
|
2
2
|
|
|
3
3
|
```mermaid
|
|
4
4
|
flowchart TD
|
|
5
|
-
Start[Qualifying Tier 3 task] --> Discover[Discover
|
|
6
|
-
Discover -->
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Review --> Done[Record result or
|
|
5
|
+
Start[Qualifying Tier 3 task] --> Discover[Discover runtime and authorized scope]
|
|
6
|
+
Discover --> Profile[Resolve behavior profile and runtime choice]
|
|
7
|
+
Profile --> Plan[Write dependency-aware stage map and checks]
|
|
8
|
+
Plan --> Register[Write workflow-stages.json in session state]
|
|
9
|
+
Register --> Execute[Start workflow-disposition and execute ready stages]
|
|
10
|
+
Execute --> Check[Run exact check and record correlated evidence]
|
|
11
|
+
Check --> Review[Cold-review when the selected plan requires it]
|
|
12
|
+
Review --> Done[Record result or blocker]
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## Discovery and planning
|
|
16
16
|
|
|
17
|
-
Read
|
|
18
|
-
authorized write scope
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
Read relevant files and sources before producing an artifact. Record the
|
|
18
|
+
authorized write scope. Give each stage an objective, dependencies, write set,
|
|
19
|
+
expected output, exact check command, and pass condition. Required and optional
|
|
20
|
+
bindings belong on the stage that needs them. Replan counts are advisory; after
|
|
21
|
+
three same-signature failures, use Rule-of-3 `zoom-out`.
|
|
21
22
|
|
|
22
|
-
##
|
|
23
|
+
## Profiles and delegation
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
Resolve a requested behavior profile with Fable's profile selector and record
|
|
26
|
+
it separately from the runtime choice. `fable-orchestrator`,
|
|
27
|
+
`fable-worker-sonnet`, and `fable-worker-haiku` name coordination,
|
|
28
|
+
reasoning/synthesis, and mechanical-work roles. These are behavior-profile
|
|
29
|
+
aliases; they do not switch the runtime model. Preserve an explicit user or
|
|
30
|
+
host runtime choice. Workers do not spawn workers. If a named worker is
|
|
31
|
+
unavailable, use a declared inline fallback or report the gap.
|
|
29
32
|
|
|
30
|
-
##
|
|
33
|
+
## Active workflow
|
|
34
|
+
|
|
35
|
+
For an active mandatory workflow, use the router-displayed session path for
|
|
36
|
+
`workflow-stages.json` and the router-displayed `workflow-disposition.js`
|
|
37
|
+
controller. Do not register active stages in a repository-local contracts
|
|
38
|
+
directory. Every required stage needs `dependsOn`, `writeSet`, `checkCommand`,
|
|
39
|
+
and `passCondition`; an independent plan also needs a read-only `fable-verifier`
|
|
40
|
+
stage that depends on all implementation stages.
|
|
41
|
+
|
|
42
|
+
Start the selected run with the controller path and session id from the router:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
node "<workflow-disposition.js path from the router>" start --session-id "<session-id>"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The controller creates correlated run-scoped contracts. Load only bindings on
|
|
49
|
+
dependency-ready stages. Record each disposition with evidence:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
node "<workflow-disposition.js path from the router>" stage-binding \
|
|
53
|
+
--session-id "<session-id>" --stage-id "<stage-id>" \
|
|
54
|
+
--binding-id "<binding-id>" --disposition loaded \
|
|
55
|
+
--evidence "Read the resolved required reference for this stage."
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Run the exact `checkCommand`; the post-tool `contract-test.js` records the
|
|
59
|
+
session, run, stage, worker identity, numeric exit code, and check evidence. If
|
|
60
|
+
bindings are unresolved, resolve them and rerun the exact check before passing
|
|
61
|
+
the stage. Keep results under the run's `contracts/<stageId>.json` and
|
|
62
|
+
`evidence/<stageId>.json` records. Stage checks, required bindings, and selected
|
|
63
|
+
independent verification remain semantic MUSTs. The controller and lifecycle
|
|
64
|
+
hooks are reminder-only: unresolved evidence stays visible without locking
|
|
65
|
+
ordinary tools or Stop. See [`../CONTRACT-FORMAT.md`](../CONTRACT-FORMAT.md) for
|
|
66
|
+
the schema and correlation rules.
|
|
67
|
+
|
|
68
|
+
## Blocked recovery
|
|
31
69
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
70
|
+
If `start` is called while the workflow is running, it exits 2 with
|
|
71
|
+
`workflow already running; record a blocker before replanning`. From that
|
|
72
|
+
running state, record evidence with `block`:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
node "<workflow-disposition.js path from the router>" block \
|
|
76
|
+
--session-id "<session-id>" \
|
|
77
|
+
--evidence "The current stage map needs a bounded recovery update."
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Update the same session's `workflow-stages.json`, retaining the approved
|
|
81
|
+
requirements, workflow selection, dependencies, and required bindings. Then
|
|
82
|
+
start the revised stage map:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
node "<workflow-disposition.js path from the router>" start --session-id "<session-id>"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This starts a new run and clears the recorded block reason. If the session is
|
|
89
|
+
already `blocked`, update its stage map and run `start` directly. Do not call
|
|
90
|
+
`plan` from `blocked`: planning is accepted only while the workflow is pending
|
|
91
|
+
or active. When an explicitly authorized scope change requires new requirement
|
|
92
|
+
composition, route a new session instead of replacing approved requirements.
|
|
93
|
+
|
|
94
|
+
## Legacy/manual fallback
|
|
95
|
+
|
|
96
|
+
The path `.claude/harness-everything/state/contracts/<stage>.json` belongs only
|
|
97
|
+
to an explicitly selected legacy/manual workflow without an active mandatory
|
|
98
|
+
run. It does not register stages or correlated evidence for the current
|
|
99
|
+
workflow controller. Do not use it for an active Fable workflow.
|
|
100
|
+
|
|
101
|
+
## Verification and handoff
|
|
37
102
|
|
|
38
|
-
|
|
103
|
+
Run each named check and review scope-guard evidence before delivery. When the
|
|
104
|
+
selected plan requires independent verification, the verifier is read-only and
|
|
105
|
+
uses a distinct worker identity after all other stages pass. Record a blocker
|
|
106
|
+
or an evidence-backed result; do not discard unresolved requirements.
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
* their results must not be confused with a local tracker simulation.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
const { spawnSync } = require('child_process');
|
|
10
9
|
const path = require('path');
|
|
11
10
|
const fs = require('fs');
|
|
12
11
|
|
|
@@ -22,12 +21,15 @@ if (pkgName !== 'harness-everything') {
|
|
|
22
21
|
process.exit(0);
|
|
23
22
|
}
|
|
24
23
|
|
|
24
|
+
// This development-only helper is absent from installed skill packages.
|
|
25
|
+
const { spawnTestNode } = require('../../ci/lib/isolated-test-process');
|
|
26
|
+
|
|
25
27
|
console.log('=================================================');
|
|
26
28
|
console.log(' Harness OS - Self-Regression Test Suite ');
|
|
27
29
|
console.log('=================================================');
|
|
28
30
|
|
|
29
31
|
function runNode(label, script, args = [], options = {}) {
|
|
30
|
-
const result =
|
|
32
|
+
const result = spawnTestNode([script, ...args], {
|
|
31
33
|
cwd: projectRoot,
|
|
32
34
|
stdio: 'inherit',
|
|
33
35
|
...options,
|
|
@@ -54,7 +56,7 @@ function walkDir(dir) {
|
|
|
54
56
|
}
|
|
55
57
|
for (const folder of foldersToScan) walkDir(path.join(projectRoot, folder));
|
|
56
58
|
for (const file of jsFiles) {
|
|
57
|
-
const check =
|
|
59
|
+
const check = spawnTestNode(['--check', file]);
|
|
58
60
|
if (check.status !== 0) {
|
|
59
61
|
console.error(` FAIL syntax: ${path.relative(projectRoot, file)}`);
|
|
60
62
|
console.error(check.stderr.toString().trim());
|
|
@@ -65,7 +67,7 @@ console.log(` PASS syntax: ${jsFiles.length} JavaScript file(s)`);
|
|
|
65
67
|
|
|
66
68
|
console.log('\n[Phase 1b] CLI Command Smoke Test...');
|
|
67
69
|
const cliPath = path.join(projectRoot, 'bin', 'cli.js');
|
|
68
|
-
const nextCheck =
|
|
70
|
+
const nextCheck = spawnTestNode([cliPath, 'next', 'add a new login endpoint with tests'], { cwd: projectRoot });
|
|
69
71
|
if (nextCheck.status !== 0 || !nextCheck.stdout.toString().includes('RECOMMENDED TIER')) {
|
|
70
72
|
console.error(' FAIL `harness next` did not produce a routing recommendation.');
|
|
71
73
|
hasErrors = true;
|
|
@@ -73,7 +75,7 @@ if (nextCheck.status !== 0 || !nextCheck.stdout.toString().includes('RECOMMENDED
|
|
|
73
75
|
console.error(' FAIL `harness next` did not establish the invariant-first kernel contract.');
|
|
74
76
|
hasErrors = true;
|
|
75
77
|
} else console.log(' PASS `harness next` produced routing + invariant contract.');
|
|
76
|
-
const verifyCheck =
|
|
78
|
+
const verifyCheck = spawnTestNode([cliPath, 'verify'], {
|
|
77
79
|
cwd: projectRoot,
|
|
78
80
|
env: { ...process.env, HARNESS_SKIP_PROJECT_CHECKS: '1' },
|
|
79
81
|
});
|
|
@@ -105,7 +107,7 @@ runNode('behavioral case validation', path.join(projectRoot, 'behavioral-evals',
|
|
|
105
107
|
console.log('\n[Phase 3b] Fable Model Mode Contract Tests...');
|
|
106
108
|
const fableModeTestPath = path.join(projectRoot, 'ci', 'fable-mode-test.js');
|
|
107
109
|
if (fs.existsSync(fableModeTestPath)) {
|
|
108
|
-
const fableModeCheck =
|
|
110
|
+
const fableModeCheck = spawnTestNode([fableModeTestPath], { stdio: 'inherit', cwd: projectRoot });
|
|
109
111
|
if (fableModeCheck.status !== 0) {
|
|
110
112
|
console.error("\n ❌ Fable model mode contract suite failed!");
|
|
111
113
|
hasErrors = true;
|
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:8fcaff79-dd3a-5e6d-8ae9-f34d935267de",
|
|
6
6
|
"version": 1,
|
|
7
7
|
"metadata": {
|
|
8
|
-
"timestamp": "2026-10-
|
|
8
|
+
"timestamp": "2026-10-16T05:41:55.836Z",
|
|
9
9
|
"tools": [
|
|
10
10
|
{
|
|
11
11
|
"vendor": "Harness Everything",
|
|
12
12
|
"name": "generate-sbom.js",
|
|
13
|
-
"version": "0.31.
|
|
13
|
+
"version": "0.31.3"
|
|
14
14
|
}
|
|
15
15
|
],
|
|
16
16
|
"component": {
|
|
17
17
|
"type": "application",
|
|
18
|
-
"bom-ref": "pkg:npm/harness-everything@0.31.
|
|
18
|
+
"bom-ref": "pkg:npm/harness-everything@0.31.3",
|
|
19
19
|
"name": "harness-everything",
|
|
20
|
-
"version": "0.31.
|
|
21
|
-
"purl": "pkg:npm/harness-everything@0.31.
|
|
20
|
+
"version": "0.31.3",
|
|
21
|
+
"purl": "pkg:npm/harness-everything@0.31.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.31.
|
|
2002
|
+
"ref": "pkg:npm/harness-everything@0.31.3",
|
|
2003
2003
|
"dependsOn": [
|
|
2004
2004
|
"pkg:npm/%40commitlint/cli@19.8.1",
|
|
2005
2005
|
"pkg:npm/%40commitlint/config-conventional@19.8.1",
|