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.
@@ -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.1",
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.1",
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
- const loaded = plan && runtimeModule('workflow-obligations').loadObligationSet(context, plan);
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
  "name": "harness-enforcement",
3
3
  "description": "Repository inventory for the opencode enforcement plugin and its standalone helper",
4
- "version": "0.46.1",
4
+ "version": "0.46.2",
5
5
  "runtime": "index.mjs",
6
6
  "hooks": {
7
7
  "verify": "hooks/verify.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harness-everything",
3
- "version": "0.46.1",
3
+ "version": "0.46.2",
4
4
  "description": "Harness OS: An Orchestrated Agent Operating System for AI-driven Development",
5
5
  "main": "harness-everything/scripts/bootstrap.js",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harness-everything",
3
- "version": "0.46.1",
3
+ "version": "0.46.2",
4
4
  "description": "Invariant-first engineering harness for routing, verification, and failure recovery while preserving agent autonomy.",
5
5
  "author": {
6
6
  "name": "Miya Daniel",
@@ -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
- const loaded = plan && runtimeModule('workflow-obligations').loadObligationSet(context, plan);
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.1",
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:e14b39ac-6cf4-5711-b0c8-03de1649a568",
5
+ "serialNumber": "urn:uuid:8b8908cf-420b-56c4-87b3-31c2359222df",
6
6
  "version": 1,
7
7
  "metadata": {
8
- "timestamp": "2026-10-28T02:23:43.789Z",
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.1"
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.1",
18
+ "bom-ref": "pkg:npm/harness-everything@0.46.2",
19
19
  "name": "harness-everything",
20
- "version": "0.46.1",
21
- "purl": "pkg:npm/harness-everything@0.46.1"
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.1",
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",