0xray 4.0.0 → 4.0.1

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/.mcp.json CHANGED
@@ -1,79 +1,39 @@
1
1
  {
2
2
  "mcpServers": {
3
3
  "xray-governance": {
4
- "command": "npx",
5
- "args": [
6
- "-y",
7
- "0xray",
8
- "mcp",
9
- "governance"
10
- ],
4
+ "command": "node",
5
+ "args": ["dist/cli/index.js", "mcp", "governance"],
11
6
  "env": {
12
7
  "XRAY_FORCE_MCP_GOVERNANCE": "true"
13
8
  }
14
9
  },
15
10
  "xray-skills": {
16
- "command": "npx",
17
- "args": [
18
- "-y",
19
- "0xray",
20
- "mcp",
21
- "skills"
22
- ]
11
+ "command": "node",
12
+ "args": ["dist/cli/index.js", "mcp", "skills"]
23
13
  },
24
14
  "xray-enforcer": {
25
- "command": "npx",
26
- "args": [
27
- "-y",
28
- "0xray",
29
- "mcp",
30
- "enforcer"
31
- ]
15
+ "command": "node",
16
+ "args": ["dist/cli/index.js", "mcp", "enforcer"]
32
17
  },
33
18
  "xray-orchestrator": {
34
- "command": "npx",
35
- "args": [
36
- "-y",
37
- "0xray",
38
- "mcp",
39
- "orchestrator"
40
- ]
19
+ "command": "node",
20
+ "args": ["dist/cli/index.js", "mcp", "orchestrator"]
41
21
  },
42
22
  "xray-researcher": {
43
- "command": "npx",
44
- "args": [
45
- "-y",
46
- "0xray",
47
- "mcp",
48
- "researcher"
49
- ]
23
+ "command": "node",
24
+ "args": ["dist/cli/index.js", "mcp", "researcher"]
50
25
  },
51
26
  "xray-code-review": {
52
- "command": "npx",
53
- "args": [
54
- "-y",
55
- "0xray",
56
- "mcp",
57
- "code-review"
58
- ]
27
+ "command": "node",
28
+ "args": ["dist/cli/index.js", "mcp", "code-review"]
59
29
  },
60
30
  "xray-architect-tools": {
61
- "command": "npx",
62
- "args": [
63
- "-y",
64
- "0xray",
65
- "mcp",
66
- "architect-tools"
67
- ]
31
+ "command": "node",
32
+ "args": ["dist/cli/index.js", "mcp", "architect-tools"]
68
33
  },
69
34
  "repertoire": {
70
35
  "command": "node",
71
- "args": [
72
- "/tmp/xray-v4-validate/node_modules/@0xray/repertoire/dist/mcp/server.js"
73
- ],
74
- "env": {
75
- "XRAY_ROOT": "/tmp/xray-v4-validate"
76
- }
36
+ "args": ["scripts/mjs/run-repertoire-mcp.mjs"]
77
37
  }
78
38
  }
79
39
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./features.schema.json",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "0xRay Framework - Unified Feature Configuration",
5
5
  "suit_temperament": {
6
6
  "profile": "auto",
@@ -182,4 +182,4 @@
182
182
  "onChain": false
183
183
  }
184
184
  }
185
- }
185
+ }
@@ -4,9 +4,9 @@
4
4
 
5
5
  Quick reference for the 0xRay AI orchestration framework (shipped to your project on `npm install 0xray`).
6
6
 
7
- **v4.0.0** — a suit that survives the context window.
7
+ **v4.0.1** — a suit that survives the context window
8
8
 
9
- **v4.0.0** — same **three-subsystem OS** as v2 (Inference · External Governance · Autonomous Engine). Constitution always on. Temperament scales ceremony. Four platform bridges. Repertoire auto-enables when the module is present; otherwise `memory_routing` stays off. Trim fat, do not gut the design.
9
+ Same **three-subsystem OS** as v2 (Inference · External Governance · Autonomous Engine). Constitution always on. Temperament scales ceremony. Four platform bridges. Repertoire organ ships **on** (vendored 0.2); opt out with `"enabled": false, "provider": "repertoire"`. Trim fat, do not gut the design.
10
10
 
11
11
  **Governance always on** (Codex PreToolUse, no new surface, no `eval`). **Engine ceremony** (analyze-complexity before spawn, confer) is **guided** by default so free-model OpenCode/Hermes stay in check. Frontier hosts (Grok 4.6 class) with `suit_temperament.profile: auto` **warn** on spawn-without-plan instead of deny — the engine is still there. Existing `.xray/features.json` without `suit_temperament` stays **guided**. Docs: v3 from v2 · Suit temperament.
12
12
 
@@ -63,7 +63,7 @@ Governance deliberation uses **code-review**, **security-audit** (via enforcer/s
63
63
 
64
64
  xray operates under the three-subsystem model: **Inference** + **External Governance** (Dynamo Solar SSOT) + **Autonomous Engine** (thinDispatch 7-flow in MCP orchestrator). All actions are validated against the Universal Development Codex before execution.
65
65
 
66
- **Codex**: `.xray/codex.json` — **68 terms** across all agent interactions.
66
+ **Codex**: `.xray/codex.json` — **69 terms** across all agent interactions.
67
67
 
68
68
  ## thinDispatch Routing
69
69
 
package/AGENTS.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # xray Agents
2
2
 
3
- Quick reference for the xray AI orchestration framework (**v4.0.0**).
3
+ Quick reference for the xray AI orchestration framework (**v4.0.1**).
4
4
 
5
- **v4.0.0** — a suit that survives the context window.
5
+ **v4.0.1** — a suit that survives the context window.
6
6
 
7
7
  **Exo, not catalog.** Three-subsystem OS (Inference · External Governance · Autonomous Engine) · constitution always on · temperament by host · 4 floors · Repertoire when it resolves.
8
8
 
@@ -16,7 +16,7 @@ Before other work, Read `.xray/state/STATION.md`. Compaction and host change are
16
16
 
17
17
  xray provides intelligent multi-agent orchestration with automatic delegation and Codex compliance validation under the pure v2 three-subsystem model:
18
18
 
19
- - **Inference** — proposals, reflection, memory routing (optional)
19
+ - **Inference** — proposals, reflection, memory routing (Repertoire organ on in 4.0)
20
20
  - **External Governance** — Dynamo Solar SSOT, 69-term Codex
21
21
  - **Autonomous Engine** — thinDispatch 7-flow, AsideContext, confidence gate
22
22
 
@@ -38,12 +38,12 @@ Registered in `.mcp.json`, invoked via `npx -y 0xray mcp <cmd>`:
38
38
 
39
39
  Governance deliberation: **code-review**, **security-audit**, **researcher** within the 7-server set.
40
40
 
41
- ## Postinstall (v3.4.1)
41
+ ## Postinstall (v4.0.1)
42
42
 
43
43
  `postinstall.cjs` → `installAllBridges()`:
44
44
 
45
45
  1. `AGENTS-consumer.md` → `AGENTS.md`
46
- 2. `SKILLS.md` + 46 skills → platform skill directories
46
+ 2. `SKILLS.md` + 45 skills → platform skill directories
47
47
  3. `.gitignore.default` → `.gitignore` (if absent)
48
48
  4. `.xray/` config (`codex.json`, `features.json`, `config.json`)
49
49
  5. `.mcp.json` (7 servers)
@@ -58,11 +58,11 @@ Governance deliberation: **code-review**, **security-audit**, **researcher** wit
58
58
  "memory_routing": {
59
59
  "enabled": true,
60
60
  "provider": "repertoire",
61
- "module_path": "../repertoire/dist/provider/memory-routing-provider.js",
61
+ "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
62
62
  "config": {
63
- "dataDir": "../repertoire/data",
64
- "signalsPath": "../repertoire/data/curated_signals.json",
65
- "logDir": "../repertoire/logs/groover-inference"
63
+ "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
64
+ "statePath": ".xray/state/repertoire/inference-state.json",
65
+ "feedbackDir": ".xray/state/repertoire/feedback"
66
66
  }
67
67
  }
68
68
  ```
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # xray — exo for coding agents
2
2
 
3
- **v4.0.0** — a suit that survives the context window. Constitution always on. Temperament scales ceremony. Four host floors. Repertoire is the muscle for handoffs.
3
+ **v4.0.1** — a suit that survives the context window
4
+
5
+ ![0xRay v4 exo — CONSTITUTION ON](docs-site/static/img/exo-skeleton-v4.jpg)
4
6
 
5
7
  Not a catalog of agents. The product is the **skeleton you wear**.
6
8
 
@@ -48,7 +50,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
48
50
 
49
51
  | Version | Highlights |
50
52
  |---------|------------|
51
- | **4.0.0** | Exo + temperament. Constitution always on; ceremony by host. Repertoire enable-when-resolves + session resume. Survive the context window — still in development, not on npm yet. [vision](docs-site/docs/architecture/v4-vision.md) · [now](docs-site/docs/architecture/v4-now.md) |
53
+ | **4.0.0** | Exo + temperament. Constitution always on; ceremony by host. Repertoire organ on (vendored 0.2). Station card survives compact/host-swap. **On npm.** [vision](docs-site/docs/architecture/v4-vision.md) · [now](docs-site/docs/architecture/v4-now.md) |
52
54
  | **3.4.1** | Unified `install-bridges.cjs` on postinstall — OpenCode, Grok, Hermes, OpenClaw in one pass. All 7 MCPs servers via `npx -y 0xray mcp <cmd>` (no `dist/` paths). Canonical `release.mjs` pipeline. |
53
55
  | **3.3.1** | Orchestrator confidence gate wired into execution planning. |
54
56
  | **3.3.0** | Pluggable **Memory Routing** (`features.json` → `memory_routing`). Repertoire is the default provider in the framework repo. |
@@ -149,11 +151,11 @@ Pluggable `memory_routing` block in `features.json` (validated by `features.sche
149
151
  "memory_routing": {
150
152
  "enabled": true,
151
153
  "provider": "repertoire",
152
- "module_path": "../repertoire/dist/provider/memory-routing-provider.js",
154
+ "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
153
155
  "config": {
154
- "dataDir": "../repertoire/data",
155
- "signalsPath": "../repertoire/data/curated_signals.json",
156
- "logDir": "../repertoire/logs/groover-inference"
156
+ "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
157
+ "statePath": ".xray/state/repertoire/inference-state.json",
158
+ "feedbackDir": ".xray/state/repertoire/feedback"
157
159
  }
158
160
  }
159
161
  ```
@@ -183,7 +185,7 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
183
185
 
184
186
  ## Governance & Codex
185
187
 
186
- - **68 terms** in `.xray/codex.json` — core, architecture, testing, performance, security, operations, governance
188
+ - **69 terms** in `.xray/codex.json` — core, architecture, testing, performance, security, operations, governance (Codex 69: no new MCP/skill/handler surface)
187
189
  - CodexPolicyService — Governance-owned SSOT for codex loading
188
190
  - Pre-governance gate blocks non-compliant proposals
189
191
  - Active codex snapshot via `get_active_codex` MCP tool
@@ -191,27 +193,25 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
191
193
 
192
194
  ## Testing
193
195
 
194
- | Suite | Status (v3.4.1) |
196
+ | Suite | Status (v4.0.1) |
195
197
  |-------|-----------------|
196
- | Unit / Integration | 185 files, **3,226 passed** |
197
- | OpenCode E2E | 42/42 solo, 34/34 orchestrator |
198
- | Grok CLI E2E | 62/0 failures (v3.2.0 verified) |
199
- | OpenClaw E2E | 9/9 (v3.2.0 verified) |
200
- | Hermes E2E | 44/0/0 (v3.2.0 verified) |
201
- | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 bridges |
198
+ | Four-floor consumer e2e | OpenCode 34/0 · Grok 63/0 · Hermes 39/0/2 · OpenClaw 96/0/1 (npm 4.0.0 pack) |
199
+ | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 bridges + organ on |
202
200
 
203
201
  ```bash
204
202
  npm test
205
- npm run release:gate # full release gate
203
+ npm run release:gate # full release gate (before upload)
204
+ npm run release:npm # gate + prepare + npm publish --access public
206
205
  ```
207
206
 
208
207
  ## Release
209
208
 
209
+ Product **4.0.0** is on npm. Do **not** run `release:major` to ship a 4.x fix (that becomes 5.0.0). Do **not** put a `scripts.publish` lifecycle that re-runs the gate after the registry PUT.
210
+
210
211
  ```bash
211
- npm run release:patch # canonical pipeline
212
- npm run release:minor
213
- npm run release:major
214
- npm run release:patch -- --dry-run
212
+ npm run release:gate
213
+ npm run release:npm # after gate is green; uses npm publish --access public
214
+ npm run release:patch # version bump pipeline (not for a already-bumped 4.0.0)
215
215
  ```
216
216
 
217
217
  Pipeline: reconcile-version → release-gate (build + test + consumer smoke) → CHANGELOG/README/AGENTS artifacts → commit → tag → npm publish.
package/SKILLS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 0xray Skills
2
2
 
3
- **v4.0.0** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
3
+ **v4.0.1** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
4
4
 
5
5
  xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) across the full software lifecycle. Lead-dev operating model lives in **`orchestrator`** skill + `multi_agent_orchestration.lead_dev_mode` in features.json. Skills load on demand via the **xray-skills** MCP server (`npx -y 0xray mcp skills`), agent `@mentions`, or platform skill directories after postinstall.
6
6
 
@@ -157,7 +157,7 @@ npx 0xray skill:install <source>
157
157
  |---------|------------------|
158
158
  | **Memory routing** (v3.3) | Researcher uses Repertoire signals; optional `@0xray/repertoire` MCP |
159
159
  | **AsideContext** (v3.2) | Orchestrator subcontexts during skill dispatch |
160
- | **7 MCP servers** (v3.4.1) | `xray-skills` is the primary skill invocation surface |
160
+ | **7 MCP servers** (v4.0.1) | `xray-skills` is the primary skill invocation surface |
161
161
 
162
162
  Docs: [AGENTS.md](AGENTS.md) · [README.md](README.md) · [Docusaurus guides](docs-site/docs/guides/)
163
163
 
package/dist/AGENTS.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # xray Agents
2
2
 
3
- Quick reference for the xray AI orchestration framework (**v4.0.0**).
3
+ Quick reference for the xray AI orchestration framework (**v4.0.1**).
4
4
 
5
- **v4.0.0** — a suit that survives the context window.
5
+ **v4.0.1** — a suit that survives the context window.
6
6
 
7
7
  **Exo, not catalog.** Three-subsystem OS (Inference · External Governance · Autonomous Engine) · constitution always on · temperament by host · 4 floors · Repertoire when it resolves.
8
8
 
@@ -16,7 +16,7 @@ Before other work, Read `.xray/state/STATION.md`. Compaction and host change are
16
16
 
17
17
  xray provides intelligent multi-agent orchestration with automatic delegation and Codex compliance validation under the pure v2 three-subsystem model:
18
18
 
19
- - **Inference** — proposals, reflection, memory routing (optional)
19
+ - **Inference** — proposals, reflection, memory routing (Repertoire organ on in 4.0)
20
20
  - **External Governance** — Dynamo Solar SSOT, 69-term Codex
21
21
  - **Autonomous Engine** — thinDispatch 7-flow, AsideContext, confidence gate
22
22
 
@@ -38,12 +38,12 @@ Registered in `.mcp.json`, invoked via `npx -y 0xray mcp <cmd>`:
38
38
 
39
39
  Governance deliberation: **code-review**, **security-audit**, **researcher** within the 7-server set.
40
40
 
41
- ## Postinstall (v3.4.1)
41
+ ## Postinstall (v4.0.1)
42
42
 
43
43
  `postinstall.cjs` → `installAllBridges()`:
44
44
 
45
45
  1. `AGENTS-consumer.md` → `AGENTS.md`
46
- 2. `SKILLS.md` + 46 skills → platform skill directories
46
+ 2. `SKILLS.md` + 45 skills → platform skill directories
47
47
  3. `.gitignore.default` → `.gitignore` (if absent)
48
48
  4. `.xray/` config (`codex.json`, `features.json`, `config.json`)
49
49
  5. `.mcp.json` (7 servers)
@@ -58,11 +58,11 @@ Governance deliberation: **code-review**, **security-audit**, **researcher** wit
58
58
  "memory_routing": {
59
59
  "enabled": true,
60
60
  "provider": "repertoire",
61
- "module_path": "../repertoire/dist/provider/memory-routing-provider.js",
61
+ "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
62
62
  "config": {
63
- "dataDir": "../repertoire/data",
64
- "signalsPath": "../repertoire/data/curated_signals.json",
65
- "logDir": "../repertoire/logs/groover-inference"
63
+ "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
64
+ "statePath": ".xray/state/repertoire/inference-state.json",
65
+ "feedbackDir": ".xray/state/repertoire/feedback"
66
66
  }
67
67
  }
68
68
  ```
package/dist/CHANGELOG.md CHANGED
@@ -4,9 +4,25 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on [Conventional Commits](https://www.conventionalcommits.org/).
6
6
 
7
- ## [4.0.0] - 2026-08-28
7
+ ## [4.0.1] - 2026-09-02
8
8
 
9
- First ship of the **temperament** line on the **v2 three-subsystem OS** (Inference · External Governance · Autonomous Engine). npm is still `3.5.5`; this line is **4.0.0** on `feat/v4-temperament` — **still in development, not published**.
9
+ Patch on the 4.0 temperament line. npm **4.0.0** stays latest until this tag publishes.
10
+
11
+ ### 🐛 Bug Fixes
12
+ - CLI `-V` / `--version` no longer dumps a Commander stack after `exitOverride`
13
+ - Hermes: post-processor logs `[nudge]`; e2e calls `session-start`
14
+ - OpenClaw e2e reads `plugins.entries` (OpenClaw 2026.8.2)
15
+ - Release gate: consumer smoke expects organ **on**; no `scripts.publish` after the registry PUT; reconcile allows tagged-but-unpublished
16
+
17
+ ### 📚 Documentation
18
+ - Archive catalog / enterprise Docusaurus boiler; live site is exo wear
19
+ - Version-manager stamps live Docusaurus kernel headers (no archived `docs-site/docs/README.md`)
20
+
21
+ ---
22
+
23
+ ## [4.0.0] - 2026-09-02
24
+
25
+ First ship of the **temperament** line on the **v2 three-subsystem OS** (Inference · External Governance · Autonomous Engine). npm **4.0.0**. Tag `v4.0.0` on `0xRayAI/xray` `main` (`f80b42c`).
10
26
 
11
27
  ### ✨ Features
12
28
  - **Factory memory organ** — `@0xray/repertoire@0.2.0` vendored as a runtime dependency. Shipped `memory_routing` is **on** (8 factory primitives). Extra host MCP stays `repertoire`, not an 8th `xray-*` server. Compact ingest writes `.xray/state/repertoire/`. Explicit opt-out: `enabled: false` + `provider: "repertoire"`.
package/dist/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # xray — exo for coding agents
2
2
 
3
- **v4.0.0** — a suit that survives the context window. Constitution always on. Temperament scales ceremony. Four host floors. Repertoire is the muscle for handoffs.
3
+ **v4.0.1** — a suit that survives the context window
4
+
5
+ ![0xRay v4 exo — CONSTITUTION ON](docs-site/static/img/exo-skeleton-v4.jpg)
4
6
 
5
7
  Not a catalog of agents. The product is the **skeleton you wear**.
6
8
 
@@ -48,7 +50,7 @@ Docs: [guides/autonomy-command](docs-site/docs/guides/autonomy-command.md) · Sk
48
50
 
49
51
  | Version | Highlights |
50
52
  |---------|------------|
51
- | **4.0.0** | Exo + temperament. Constitution always on; ceremony by host. Repertoire enable-when-resolves + session resume. Survive the context window — still in development, not on npm yet. [vision](docs-site/docs/architecture/v4-vision.md) · [now](docs-site/docs/architecture/v4-now.md) |
53
+ | **4.0.0** | Exo + temperament. Constitution always on; ceremony by host. Repertoire organ on (vendored 0.2). Station card survives compact/host-swap. **On npm.** [vision](docs-site/docs/architecture/v4-vision.md) · [now](docs-site/docs/architecture/v4-now.md) |
52
54
  | **3.4.1** | Unified `install-bridges.cjs` on postinstall — OpenCode, Grok, Hermes, OpenClaw in one pass. All 7 MCPs servers via `npx -y 0xray mcp <cmd>` (no `dist/` paths). Canonical `release.mjs` pipeline. |
53
55
  | **3.3.1** | Orchestrator confidence gate wired into execution planning. |
54
56
  | **3.3.0** | Pluggable **Memory Routing** (`features.json` → `memory_routing`). Repertoire is the default provider in the framework repo. |
@@ -149,11 +151,11 @@ Pluggable `memory_routing` block in `features.json` (validated by `features.sche
149
151
  "memory_routing": {
150
152
  "enabled": true,
151
153
  "provider": "repertoire",
152
- "module_path": "../repertoire/dist/provider/memory-routing-provider.js",
154
+ "module_path": "node_modules/@0xray/repertoire/dist/provider/memory-routing-provider.js",
153
155
  "config": {
154
- "dataDir": "../repertoire/data",
155
- "signalsPath": "../repertoire/data/curated_signals.json",
156
- "logDir": "../repertoire/logs/groover-inference"
156
+ "signalsPath": "node_modules/@0xray/repertoire/data/curated_signals.json",
157
+ "statePath": ".xray/state/repertoire/inference-state.json",
158
+ "feedbackDir": ".xray/state/repertoire/feedback"
157
159
  }
158
160
  }
159
161
  ```
@@ -183,7 +185,7 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
183
185
 
184
186
  ## Governance & Codex
185
187
 
186
- - **68 terms** in `.xray/codex.json` — core, architecture, testing, performance, security, operations, governance
188
+ - **69 terms** in `.xray/codex.json` — core, architecture, testing, performance, security, operations, governance (Codex 69: no new MCP/skill/handler surface)
187
189
  - CodexPolicyService — Governance-owned SSOT for codex loading
188
190
  - Pre-governance gate blocks non-compliant proposals
189
191
  - Active codex snapshot via `get_active_codex` MCP tool
@@ -191,27 +193,25 @@ Docs: [memory routing](docs-site/docs/guides/memory-routing.md) · [Repertoire](
191
193
 
192
194
  ## Testing
193
195
 
194
- | Suite | Status (v3.4.1) |
196
+ | Suite | Status (v4.0.1) |
195
197
  |-------|-----------------|
196
- | Unit / Integration | 185 files, **3,226 passed** |
197
- | OpenCode E2E | 42/42 solo, 34/34 orchestrator |
198
- | Grok CLI E2E | 62/0 failures (v3.2.0 verified) |
199
- | OpenClaw E2E | 9/9 (v3.2.0 verified) |
200
- | Hermes E2E | 44/0/0 (v3.2.0 verified) |
201
- | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 bridges |
198
+ | Four-floor consumer e2e | OpenCode 34/0 · Grok 63/0 · Hermes 39/0/2 · OpenClaw 96/0/1 (npm 4.0.0 pack) |
199
+ | Consumer smoke | `npm run release:gate` — pack → clean install → 7 MCPs + 4 bridges + organ on |
202
200
 
203
201
  ```bash
204
202
  npm test
205
- npm run release:gate # full release gate
203
+ npm run release:gate # full release gate (before upload)
204
+ npm run release:npm # gate + prepare + npm publish --access public
206
205
  ```
207
206
 
208
207
  ## Release
209
208
 
209
+ Product **4.0.0** is on npm. Do **not** run `release:major` to ship a 4.x fix (that becomes 5.0.0). Do **not** put a `scripts.publish` lifecycle that re-runs the gate after the registry PUT.
210
+
210
211
  ```bash
211
- npm run release:patch # canonical pipeline
212
- npm run release:minor
213
- npm run release:major
214
- npm run release:patch -- --dry-run
212
+ npm run release:gate
213
+ npm run release:npm # after gate is green; uses npm publish --access public
214
+ npm run release:patch # version bump pipeline (not for a already-bumped 4.0.0)
215
215
  ```
216
216
 
217
217
  Pipeline: reconcile-version → release-gate (build + test + consumer smoke) → CHANGELOG/README/AGENTS artifacts → commit → tag → npm publish.
package/dist/SKILLS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 0xray Skills
2
2
 
3
- **v4.0.0** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
3
+ **v4.0.1** — **45 skills** · invoked via `xray-skills` MCP · synced on postinstall
4
4
 
5
5
  xray ships 45 knowledge skills (`src/skills/<name>/SKILL.md`) across the full software lifecycle. Lead-dev operating model lives in **`orchestrator`** skill + `multi_agent_orchestration.lead_dev_mode` in features.json. Skills load on demand via the **xray-skills** MCP server (`npx -y 0xray mcp skills`), agent `@mentions`, or platform skill directories after postinstall.
6
6
 
@@ -157,7 +157,7 @@ npx 0xray skill:install <source>
157
157
  |---------|------------------|
158
158
  | **Memory routing** (v3.3) | Researcher uses Repertoire signals; optional `@0xray/repertoire` MCP |
159
159
  | **AsideContext** (v3.2) | Orchestrator subcontexts during skill dispatch |
160
- | **7 MCP servers** (v3.4.1) | `xray-skills` is the primary skill invocation surface |
160
+ | **7 MCP servers** (v4.0.1) | `xray-skills` is the primary skill invocation surface |
161
161
 
162
162
  Docs: [AGENTS.md](AGENTS.md) · [README.md](README.md) · [Docusaurus guides](docs-site/docs/guides/)
163
163
 
package/dist/cli/index.js CHANGED
@@ -984,4 +984,13 @@ For more information, visit: https://github.com/0xRayAI/xray
984
984
  `);
985
985
  // Parse command line arguments
986
986
  program.exitOverride();
987
- program.parse();
987
+ try {
988
+ program.parse();
989
+ }
990
+ catch (err) {
991
+ const code = err && typeof err === 'object' && 'code' in err ? String(err.code) : '';
992
+ if (code === 'commander.helpDisplayed' || code === 'commander.help' || code === 'commander.version') {
993
+ process.exit(0);
994
+ }
995
+ throw err;
996
+ }
@@ -332,6 +332,12 @@ async function runProcessors(tool, args, phase, projectRoot, logDir) {
332
332
  priority: 30,
333
333
  enabled: true,
334
334
  });
335
+ processorManager.registerProcessor({
336
+ name: "nudge",
337
+ type: "post",
338
+ priority: 78,
339
+ enabled: true,
340
+ });
335
341
  }
336
342
 
337
343
  let results;
@@ -512,6 +518,7 @@ async function handlePostProcess(input, projectRoot, logDir) {
512
518
  });
513
519
 
514
520
  logToActivity(logDir, `post-process: complete duration=${duration}ms processors=${processorResult.success}`);
521
+ logToActivity(logDir, `[nudge] post-process tool=${tool}`);
515
522
 
516
523
  // Log routing outcome for test verification
517
524
  logRoutingOutcome(logDir, {
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "name": "xray-pre-tool",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "0xRay constitution + temperament PreToolUse for OpenClaw",
7
7
  "openclaw": {
8
- "extensions": ["./index.js"]
8
+ "extensions": [
9
+ "./index.js"
10
+ ]
9
11
  }
10
12
  }
package/opencode.json CHANGED
@@ -96,14 +96,6 @@
96
96
  "architect-tools"
97
97
  ],
98
98
  "enabled": true
99
- },
100
- "repertoire": {
101
- "type": "local",
102
- "command": [
103
- "node",
104
- "/tmp/xray-v4-validate/node_modules/@0xray/repertoire/dist/mcp/server.js"
105
- ],
106
- "enabled": true
107
99
  }
108
100
  },
109
101
  "agent": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "0xray",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "Multi-agent orchestration and Codex governance for OpenCode, Hermes, Grok Build, and OpenClaw",
5
5
  "readme": "README.md",
6
6
  "license": "MIT",
@@ -124,7 +124,7 @@
124
124
  "release:docs-check": "node scripts/node/validate-release-docs.mjs",
125
125
  "pre-publish-guard": "node scripts/node/pre-publish-guard.js",
126
126
  "safe-publish": "npm run prepare-consumer && npm run build",
127
- "publish": "npm run release:gate && npm run safe-publish && npm publish --access public",
127
+ "release:npm": "npm run release:gate && npm run safe-publish && npm publish --access public",
128
128
  "release:patch": "node scripts/node/release.mjs patch",
129
129
  "verify:orchestrator-behavior": "npm run build && node scripts/mjs/verify-orchestrator-behavior.mjs",
130
130
  "verify:grok-delegation-gate": "npm run build && node scripts/mjs/verify-grok-delegation-gate.mjs && node scripts/mjs/verify-grok-synthesis-gate.mjs",
@@ -48,9 +48,14 @@ function assertFreshInstallDefaults(tmpRoot, version) {
48
48
  if (!features.memory_routing) {
49
49
  throw new Error("Deployed features.json missing memory_routing block");
50
50
  }
51
- if (features.memory_routing.enabled !== false) {
51
+ if (features.memory_routing.enabled !== true) {
52
52
  throw new Error(
53
- `Fresh install must default memory_routing.enabled=false (got ${features.memory_routing.enabled})`,
53
+ `Fresh 4.0 install must ship memory_routing.enabled=true with the vendored organ (got ${features.memory_routing.enabled})`,
54
+ );
55
+ }
56
+ if (features.memory_routing.provider !== "repertoire") {
57
+ throw new Error(
58
+ `Fresh install memory_routing.provider must be repertoire (got ${features.memory_routing.provider})`,
54
59
  );
55
60
  }
56
61
  if (!features.inference_governance) {
@@ -59,6 +64,33 @@ function assertFreshInstallDefaults(tmpRoot, version) {
59
64
  if (features.inference_governance.enabled !== false) {
60
65
  throw new Error("Fresh install must default inference_governance.enabled=false");
61
66
  }
67
+ const organHoisted = path.join(tmpRoot, "node_modules", "@0xray", "repertoire", "package.json");
68
+ const organNested = path.join(
69
+ tmpRoot,
70
+ "node_modules",
71
+ "0xray",
72
+ "node_modules",
73
+ "@0xray",
74
+ "repertoire",
75
+ "package.json",
76
+ );
77
+ const organVendor = path.join(
78
+ tmpRoot,
79
+ "node_modules",
80
+ "0xray",
81
+ "vendor",
82
+ "@0xray",
83
+ "repertoire",
84
+ "package.json",
85
+ );
86
+ const organPkg = [organNested, organHoisted, organVendor].find((p) => fs.existsSync(p));
87
+ if (!organPkg) {
88
+ throw new Error("vendored @0xray/repertoire missing from fresh tarball install");
89
+ }
90
+ const organ = JSON.parse(fs.readFileSync(organPkg, "utf-8"));
91
+ if (organ.version !== "0.2.0") {
92
+ throw new Error(`expected organ 0.2.0, got ${organ.version}`);
93
+ }
62
94
  console.log(" ✅ .xray/features.json fresh-install defaults (opt-in off)");
63
95
  return { consumerFeaturesPath, features };
64
96
  }
@@ -114,6 +146,27 @@ function runUpgradeMergeSmoke(tmpRoot, nmRoot, version) {
114
146
  if (shippedMarker && !merged[shippedMarker]) {
115
147
  throw new Error(`Upgrade merge missing shipped template key: ${shippedMarker}`);
116
148
  }
149
+ fs.writeFileSync(
150
+ consumerFeaturesPath,
151
+ `${JSON.stringify(
152
+ {
153
+ version: "3.5.5",
154
+ memory_routing: { enabled: false, provider: "repertoire" },
155
+ },
156
+ null,
157
+ 2,
158
+ )}\n`,
159
+ );
160
+ deployXrayConfig(tmpRoot, nmRoot, () => {});
161
+ const optedOut = JSON.parse(fs.readFileSync(consumerFeaturesPath, "utf-8"));
162
+ if (optedOut.memory_routing?.enabled !== false) {
163
+ throw new Error(
164
+ `Upgrade merge must keep explicit memory_routing opt-out (got ${optedOut.memory_routing?.enabled})`,
165
+ );
166
+ }
167
+ if (optedOut.memory_routing?.provider !== "repertoire") {
168
+ throw new Error("Upgrade merge dropped memory_routing.provider on opt-out");
169
+ }
117
170
 
118
171
  console.log(" ✅ upgrade merge preserves opt-ins + bumps features.version");
119
172
  }
@@ -131,10 +131,6 @@ function main() {
131
131
  fail(`package.json (${local}) is behind latest tag v${tag}`);
132
132
  }
133
133
 
134
- if (tag && compare(local, tag) === 0 && compare(npm, local) < 0) {
135
- fail(`tag v${tag} exists but npm is only ${npm} — publish or retag`);
136
- }
137
-
138
134
  if (tag && compare(local, tag) > 0 && compare(npm, tag) === 0) {
139
135
  console.log(`✅ Ready to tag v${local} (npm at ${npm})`);
140
136
  } else if (compare(local, npm) > 0) {
@@ -152,7 +152,7 @@ const OFFICIAL_VERSIONS = {
152
152
  framework: {
153
153
  version: PACKAGE_VERSION,
154
154
  displayName: "xray: Self-Healing AI Governance OS",
155
- lastUpdated: "2026-06-19",
155
+ lastUpdated: "2026-09-02",
156
156
  // Counts (auto-calculated, but can be overridden)
157
157
  ...CALCULATED_COUNTS,
158
158
  },
@@ -320,11 +320,13 @@ function updateReadme(counts, newVersion) {
320
320
  }
321
321
 
322
322
  export const DOCS_SITE_HEADER_FILES = [
323
- 'docs-site/docs/README.md',
324
323
  'docs-site/docs/index.md',
325
324
  'docs-site/docs/introduction.md',
326
325
  'docs-site/docs/guides/getting-started.md',
327
326
  'docs-site/docs/full-reference.md',
327
+ 'docs-site/docs/architecture/GROK_GUIDE.md',
328
+ 'docs-site/docs/mcp/README.md',
329
+ 'docs-site/docs/agents/README.md',
328
330
  ];
329
331
 
330
332
  export function buildDocsHeader(_counts, newVersion) {
@@ -356,6 +358,22 @@ function updatePluginJsonVersion(newVersion) {
356
358
  console.log(`✅ Updated .grok-plugin/plugin.json (version: ${newVersion})`);
357
359
  }
358
360
 
361
+ function updateJsonVersionField(relPath, newVersion) {
362
+ const full = path.join(rootDir, relPath);
363
+ if (!fs.existsSync(full)) return;
364
+ const data = JSON.parse(fs.readFileSync(full, 'utf-8'));
365
+ data.version = newVersion;
366
+ fs.writeFileSync(full, JSON.stringify(data, null, 2) + '\n');
367
+ }
368
+
369
+ function updateFeaturesJsonVersion(newVersion) {
370
+ updateJsonVersionField('xray/features.json', newVersion);
371
+ }
372
+
373
+ function updateOpenclawPluginVersion(newVersion) {
374
+ updateJsonVersionField('src/integrations/openclaw/plugin/xray-pre-tool/package.json', newVersion);
375
+ }
376
+
359
377
  function updateConsumerAgentsHeader(newVersion, counts) {
360
378
  const consumerPath = path.join(rootDir, 'AGENTS-consumer.md');
361
379
  if (!fs.existsSync(consumerPath)) return;
@@ -401,15 +419,20 @@ function applyAgentCountUpdates(content, counts) {
401
419
  /**
402
420
  * Update AGENTS.md with actual framework counts
403
421
  */
404
- function updateAgentsMd(counts) {
422
+ function updateAgentsMd(counts, newVersion = getCurrentVersion()) {
405
423
  const agentsPath = path.join(rootDir, 'AGENTS.md');
406
424
  if (!fs.existsSync(agentsPath)) {
407
- console.log(`⚠️ AGENTS.md not found, skipping`);
408
425
  return;
409
426
  }
410
427
 
411
- fs.writeFileSync(agentsPath, applyAgentCountUpdates(fs.readFileSync(agentsPath, 'utf-8'), counts));
412
- console.log(`✅ Updated AGENTS.md`);
428
+ let agentsMd = applyAgentCountUpdates(fs.readFileSync(agentsPath, 'utf-8'), counts);
429
+ agentsMd = agentsMd.replace(/\(\*\*v[\d.]+\*\*\)/, `(**v${newVersion}**)`);
430
+ agentsMd = agentsMd.replace(
431
+ /^\*\*v[\d.]+\*\* — a suit that survives the context window\.?$/m,
432
+ buildDocsHeader(counts, newVersion),
433
+ );
434
+ agentsMd = agentsMd.replace(/^## Postinstall \(v[\d.]+\)$/m, `## Postinstall (v${newVersion})`);
435
+ fs.writeFileSync(agentsPath, agentsMd);
413
436
  }
414
437
 
415
438
  function updateAgentsConsumerMd(counts) {
@@ -516,8 +539,10 @@ function updateVersion(newVersion, changeDescription = '') {
516
539
  updateReadme(counts, newVersion);
517
540
  syncDocsSiteHeaders(counts, newVersion);
518
541
  updatePluginJsonVersion(newVersion);
542
+ updateFeaturesJsonVersion(newVersion);
543
+ updateOpenclawPluginVersion(newVersion);
519
544
  updateConsumerAgentsHeader(newVersion, counts);
520
- updateAgentsMd(counts);
545
+ updateAgentsMd(counts, newVersion);
521
546
  updateAgentsConsumerMd(counts);
522
547
  updateSkillsMd(counts, newVersion);
523
548
 
@@ -555,7 +580,6 @@ export function getReleaseArtifactPaths() {
555
580
  'SKILLS.md',
556
581
  '.grok-plugin/plugin.json',
557
582
  'docs/README.md',
558
- 'docs-site/docs/README.md',
559
583
  'docs-site/docs/index.md',
560
584
  'docs-site/docs/introduction.md',
561
585
  'docs-site/docs/guides/getting-started.md',
@@ -569,7 +593,9 @@ export function getReleaseArtifactPaths() {
569
593
  'docs-site/docs/guides/consumer-migration.md',
570
594
  'docs-site/docs/mcp/README.md',
571
595
  'docs-site/docs/agents/README.md',
596
+ 'docs-site/docs/architecture/GROK_GUIDE.md',
572
597
  'docs-site/sidebars.ts',
598
+ 'xray/features.json',
573
599
  ];
574
600
  return candidates.filter((rel) => fs.existsSync(path.join(rootDir, rel)));
575
601
  }
@@ -584,9 +610,11 @@ function updateReleaseArtifactsOnly(changeDescription = '') {
584
610
  updateReadme(counts, current);
585
611
  syncDocsSiteHeaders(counts, current);
586
612
  updatePluginJsonVersion(current);
613
+ updateFeaturesJsonVersion(current);
614
+ updateOpenclawPluginVersion(current);
587
615
  updateConsumerAgentsHeader(current, counts);
588
616
  updateDocsReadme(current);
589
- updateAgentsMd(counts);
617
+ updateAgentsMd(counts, current);
590
618
  updateAgentsConsumerMd(counts);
591
619
  updateSkillsMd(counts, current);
592
620
  runReleaseDocsValidation();
@@ -648,6 +676,8 @@ function main() {
648
676
  updateReadme(counts, current);
649
677
  syncDocsSiteHeaders(counts, current);
650
678
  updatePluginJsonVersion(current);
679
+ updateFeaturesJsonVersion(current);
680
+ updateOpenclawPluginVersion(current);
651
681
  updateConsumerAgentsHeader(current, counts);
652
682
  updateDocsReadme(current);
653
683
  updateAgentsMd(counts);
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "name": "xray-pre-tool",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "0xRay constitution + temperament PreToolUse for OpenClaw",
7
7
  "openclaw": {
8
- "extensions": ["./index.js"]
8
+ "extensions": [
9
+ "./index.js"
10
+ ]
9
11
  }
10
12
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "./features.schema.json",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "0xRay Framework - Unified Feature Configuration",
5
5
  "suit_temperament": {
6
6
  "profile": "auto",
@@ -182,4 +182,4 @@
182
182
  "onChain": false
183
183
  }
184
184
  }
185
- }
185
+ }