harness-everything 0.46.1 → 0.46.2
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 +6 -0
- package/ci/mechanism-prb-outline-review.test.js +40 -0
- package/hooks/scripts/lib/doc-reconciliation-pilot.js +2 -1
- 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/hooks/scripts/lib/doc-reconciliation-pilot.js +2 -1
- package/plugins/harness-everything/plugin.json +1 -1
- package/sbom.cdx.json +7 -7
|
@@ -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.46.
|
|
13
|
+
"version": "0.46.2",
|
|
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.46.
|
|
4
|
+
"version": "0.46.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Miya Daniel"
|
|
7
7
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.46.2](https://github.com/dyphn1/Harness-everything/compare/v0.46.1...v0.46.2) (2026-10-28)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* **doc-reconciliation:** pin the outline task binding at plan/start ([5823c48](https://github.com/dyphn1/Harness-everything/commit/5823c4881ccd6647c1af58e8d295f878e4f1020e))
|
|
10
|
+
|
|
5
11
|
## [0.46.1](https://github.com/dyphn1/Harness-everything/compare/v0.46.0...v0.46.1) (2026-10-28)
|
|
6
12
|
|
|
7
13
|
### Bug Fixes
|
|
@@ -770,6 +770,46 @@ test('pilot exposes a real-capture-only outline reference resolver', () => {
|
|
|
770
770
|
assert.deepStrictEqual(resolve([], 'task-prb'), [], 'hand-authored JSON with no host capture creates no event ref');
|
|
771
771
|
});
|
|
772
772
|
|
|
773
|
+
test('shipped route + plan/start CLI pins the outline task binding in canonical and packaged layouts', () => {
|
|
774
|
+
// Live run 2026-10-28: the pilot's module lookup missed workflow-obligations, so no task pin was ever written.
|
|
775
|
+
for (const [layout, base] of [['canonical', ROOT], ['packaged', path.join(ROOT, 'plugins/harness-everything')]]) {
|
|
776
|
+
const root = canonical(fs.mkdtempSync(path.join(os.tmpdir(), 'prb-task-pin-')));
|
|
777
|
+
const stateHome = fs.mkdtempSync(path.join(os.tmpdir(), 'prb-task-pin-state-'));
|
|
778
|
+
try {
|
|
779
|
+
fixtureGit(root, ['init', '-q']);
|
|
780
|
+
fs.writeFileSync(path.join(root, 'README.md'), 'B\n');
|
|
781
|
+
fixtureGit(root, ['add', '-A']);
|
|
782
|
+
fixtureGit(root, ['commit', '-q', '-m', 'B baseline']);
|
|
783
|
+
const sessionId = `task-pin-${layout}`;
|
|
784
|
+
const env = { ...process.env, HARNESS_STATE_HOME: stateHome, HARNESS_WORKSPACE_ROOT: root, HARNESS_DOC_RECONCILIATION_PILOT: '1' };
|
|
785
|
+
const kernel = layout === 'canonical' ? path.join(base, 'harness-everything/scripts/kernel-router.js')
|
|
786
|
+
: path.join(base, 'skills/harness-everything/scripts/kernel-router.js');
|
|
787
|
+
const run = (script, args, input) => {
|
|
788
|
+
const child = spawnSync(process.execPath, [script, ...args], { cwd: root, env, encoding: 'utf8', input });
|
|
789
|
+
assert.strictEqual(child.status, 0, `${layout} ${path.basename(script)} ${args[0] || ''}: ${child.stderr || child.stdout}`);
|
|
790
|
+
};
|
|
791
|
+
run(kernel, [], JSON.stringify({ session_id: sessionId, cwd: root, prompt: 'Draft an ADR from the reviewed outline and verify it' }));
|
|
792
|
+
const controller = path.join(base, 'hooks/scripts/workflow-disposition.js');
|
|
793
|
+
run(controller, ['plan', '--session-id', sessionId, '--strategy', 'iterative-single', '--evidence', 'task pin fixture',
|
|
794
|
+
'--requirements-json', JSON.stringify([
|
|
795
|
+
{ id: 'adr', stepType: 'doc-change', summary: 'draft ADR', acceptance: 'outline review precedes drafting' },
|
|
796
|
+
{ id: 'verify', stepType: 'verification', summary: 'verify', acceptance: 'checker runs' }])]);
|
|
797
|
+
run(controller, ['start', '--session-id', sessionId]);
|
|
798
|
+
const prior = process.env.HARNESS_STATE_HOME;
|
|
799
|
+
process.env.HARNESS_STATE_HOME = stateHome;
|
|
800
|
+
let sessionDir;
|
|
801
|
+
try { sessionDir = require(path.join(ROOT, 'hooks/scripts/lib/harness-state.js')).getSessionDir(root, sessionId); }
|
|
802
|
+
finally { if (prior === undefined) delete process.env.HARNESS_STATE_HOME; else process.env.HARNESS_STATE_HOME = prior; }
|
|
803
|
+
const workflow = JSON.parse(fs.readFileSync(path.join(sessionDir, 'workflow-run.json'), 'utf8'));
|
|
804
|
+
assert.ok(workflow.docReconciliationBaseline, `${layout}: baseline pin is captured`);
|
|
805
|
+
assert.strictEqual(workflow.docReconciliationTask?.taskId, 'task-adr+verify', `${layout}: task pin is captured at plan/start`);
|
|
806
|
+
} finally {
|
|
807
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
808
|
+
fs.rmSync(stateHome, { recursive: true, force: true });
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
});
|
|
812
|
+
|
|
773
813
|
test('pre-dispatch seam requires review, exact worker root, clean O tree, lease, pin, and immutable handoff', () => {
|
|
774
814
|
assert.strictEqual(typeof internals.captureOutlineDispatch, 'function', 'missing synchronous pre-dispatch seam');
|
|
775
815
|
const differentWorkerRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'prb-outline-different-worker-'));
|
|
@@ -45,7 +45,8 @@ function captureBaseline(context) {
|
|
|
45
45
|
}
|
|
46
46
|
if (!context.workflow.docReconciliationTask) {
|
|
47
47
|
const plan = context.workflow.pendingPlan || context.workflow.workflowPlan;
|
|
48
|
-
|
|
48
|
+
// workflow-obligations is a hook-lib sibling in every layout, not a skill runtime script.
|
|
49
|
+
const loaded = plan && require('./workflow-obligations').loadObligationSet(context, plan);
|
|
49
50
|
const requirementIds = loaded?.set?.requirements?.map(item => item.id);
|
|
50
51
|
if (Array.isArray(requirementIds) && requirementIds.length && requirementIds.every(id => typeof id === 'string' && id)) {
|
|
51
52
|
const baseline = context.workflow.docReconciliationBaseline;
|
package/package.json
CHANGED
|
@@ -45,7 +45,8 @@ function captureBaseline(context) {
|
|
|
45
45
|
}
|
|
46
46
|
if (!context.workflow.docReconciliationTask) {
|
|
47
47
|
const plan = context.workflow.pendingPlan || context.workflow.workflowPlan;
|
|
48
|
-
|
|
48
|
+
// workflow-obligations is a hook-lib sibling in every layout, not a skill runtime script.
|
|
49
|
+
const loaded = plan && require('./workflow-obligations').loadObligationSet(context, plan);
|
|
49
50
|
const requirementIds = loaded?.set?.requirements?.map(item => item.id);
|
|
50
51
|
if (Array.isArray(requirementIds) && requirementIds.length && requirementIds.every(id => typeof id === 'string' && id)) {
|
|
51
52
|
const baseline = context.workflow.docReconciliationBaseline;
|
|
@@ -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.46.
|
|
4
|
+
"version": "0.46.2",
|
|
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",
|
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:8b8908cf-420b-56c4-87b3-31c2359222df",
|
|
6
6
|
"version": 1,
|
|
7
7
|
"metadata": {
|
|
8
|
-
"timestamp": "2026-10-
|
|
8
|
+
"timestamp": "2026-10-28T04:07:58.196Z",
|
|
9
9
|
"tools": [
|
|
10
10
|
{
|
|
11
11
|
"vendor": "Harness Everything",
|
|
12
12
|
"name": "generate-sbom.js",
|
|
13
|
-
"version": "0.46.
|
|
13
|
+
"version": "0.46.2"
|
|
14
14
|
}
|
|
15
15
|
],
|
|
16
16
|
"component": {
|
|
17
17
|
"type": "application",
|
|
18
|
-
"bom-ref": "pkg:npm/harness-everything@0.46.
|
|
18
|
+
"bom-ref": "pkg:npm/harness-everything@0.46.2",
|
|
19
19
|
"name": "harness-everything",
|
|
20
|
-
"version": "0.46.
|
|
21
|
-
"purl": "pkg:npm/harness-everything@0.46.
|
|
20
|
+
"version": "0.46.2",
|
|
21
|
+
"purl": "pkg:npm/harness-everything@0.46.2"
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"components": [
|
|
@@ -2033,7 +2033,7 @@
|
|
|
2033
2033
|
]
|
|
2034
2034
|
},
|
|
2035
2035
|
{
|
|
2036
|
-
"ref": "pkg:npm/harness-everything@0.46.
|
|
2036
|
+
"ref": "pkg:npm/harness-everything@0.46.2",
|
|
2037
2037
|
"dependsOn": [
|
|
2038
2038
|
"pkg:npm/%40commitlint/cli@19.8.1",
|
|
2039
2039
|
"pkg:npm/%40commitlint/config-conventional@19.8.1",
|