deadbyte-mcp 0.15.29 → 0.15.31

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.
Files changed (65) hide show
  1. package/MANIFEST.SHA256 +64 -48
  2. package/PROVENANCE.json +28 -18
  3. package/README.txt +18 -14
  4. package/RELEASE.json +35 -17
  5. package/SBOM.cdx.json +3 -3
  6. package/STABILIZATION-PROGRESS.md +60 -0
  7. package/TEST-MATRIX.json +52 -118
  8. package/bin/appcontainer-stage.obj +0 -0
  9. package/bin/bootstrap-advapi32.obj +0 -0
  10. package/bin/bootstrap-exitcode.obj +0 -0
  11. package/bin/bootstrap-kernel32.obj +0 -0
  12. package/bin/child-control-probe.obj +0 -0
  13. package/bin/child-control-stage.obj +0 -0
  14. package/bin/contained-reverse-worker.obj +0 -0
  15. package/bin/contained-transform-worker.obj +0 -0
  16. package/bin/containment-probe.obj +0 -0
  17. package/bin/deadbyte-contain.obj +0 -0
  18. package/bin/deadbyte-exec.obj +0 -0
  19. package/bin/deadbyte-hardware-observer-r45.obj +0 -0
  20. package/bin/deadbyte-process-host.obj +0 -0
  21. package/bin/deadbyte-tunnel-host.obj +0 -0
  22. package/controller/deadbyte-desktop-policy.json +5 -5
  23. package/controller/deadbyte-process-policy.json +4 -4
  24. package/package.json +5 -3
  25. package/proof/CONTAINMENT-BUILD.txt +6 -6
  26. package/scripts/gate-windows-r53.ps1 +58 -0
  27. package/scripts/gate-windows-r54.ps1 +26 -0
  28. package/scripts/verify-r42-parent.mjs +1 -1
  29. package/scripts/verify-r43-parent.mjs +1 -1
  30. package/scripts/verify-r44-parent.mjs +1 -1
  31. package/scripts/verify-r45-parent.mjs +1 -1
  32. package/scripts/windows-gate-evidence-r53.mjs +102 -0
  33. package/scripts/windows-gate-evidence-r54.mjs +76 -0
  34. package/src/authority-smoke.mjs +1 -0
  35. package/src/deadbyte-cli.mjs +4 -2
  36. package/src/doctor-r45.mjs +2 -1
  37. package/src/machine-fs-smoke-client.mjs +1 -0
  38. package/src/mcp-contained-smoke-client.mjs +1 -0
  39. package/src/mcp-host-smoke-client.mjs +1 -0
  40. package/src/mcp-smoke-client.mjs +1 -0
  41. package/src/process-smoke-client.mjs +1 -0
  42. package/src/release-slot.mjs +5 -2
  43. package/src/remote-session-guardian.mjs +12 -4
  44. package/src/runtime-coherence.mjs +13 -4
  45. package/src/runtime-update.mjs +51 -13
  46. package/src/state-root.mjs +8 -0
  47. package/src/trust.mjs +2 -1
  48. package/src/tunnel-stdio-compat-smoke.mjs +1 -0
  49. package/src/version.mjs +1 -1
  50. package/test/commander-biff-reference-r48.test.mjs +1 -1
  51. package/test/r44-finalizer.test.mjs +4 -3
  52. package/test/r49-windows-gate.test.mjs +36 -27
  53. package/test/r52-release-contract.test.mjs +9 -3
  54. package/test/r53-release-contract.test.mjs +68 -0
  55. package/test/r54-offline-predecessor-self-exclusion.test.mjs +56 -0
  56. package/test/r54-release-contract.test.mjs +59 -0
  57. package/test/release-slot.test.mjs +2 -1
  58. package/test/skill-mcp-r44.test.mjs +3 -0
  59. package/test/stabilization-guardian.test.mjs +25 -0
  60. package/test/stabilization-parent-context.test.mjs +18 -0
  61. package/test/stabilization-powershell.test.mjs +26 -0
  62. package/test/stabilization-semver.test.mjs +23 -0
  63. package/test/stabilization-smoke-root.test.mjs +23 -0
  64. package/test/stabilization-state-root.test.mjs +60 -0
  65. package/test/stabilization-update-child-root.test.mjs +20 -0
package/TEST-MATRIX.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema": "deadbyte.test-matrix.v1",
3
- "version": "0.15.29",
4
- "train": "R52",
3
+ "version": "0.15.31",
4
+ "train": "R54",
5
5
  "primary_platform": "win32-x64",
6
6
  "reference": {
7
7
  "package": "@wonderwhy-er/desktop-commander",
@@ -11,150 +11,80 @@
11
11
  },
12
12
  "required": [
13
13
  {
14
- "id": "r52-focused",
15
- "command": "npm run r52:focused:test",
16
- "expected": "PASS offline predecessor stale Host grant is revoked before capture; R51 coherence/single-flight/livelog and runtime-update contracts remain green"
14
+ "id": "r54-focused",
15
+ "command": "npm run r54:focused:test",
16
+ "expected": "PASS R54 release identity, activation ancestry exclusion, stale-runtime negative controls, runtime update/coherence"
17
17
  },
18
18
  {
19
- "id": "r51-remote-session",
20
- "command": "node --test test/remote-session-cli.test.mjs",
21
- "expected": "PASS foreground lifecycle, Desktop/Host fail-closed cleanup, guardian and live timeline"
19
+ "id": "full-regression",
20
+ "command": "npm run r48:full:test",
21
+ "expected": "PASS current R54 successor"
22
22
  },
23
23
  {
24
24
  "id": "package-boundary",
25
25
  "command": "node --test test/package-boundary.test.mjs",
26
- "expected": "PASS canonical top-level DEADBYTE-MCP.cmd included; local/shadow wrappers excluded"
27
- },
28
- {
29
- "id": "release-smoke",
30
- "command": "node --test test/release-smoke-isolation.test.mjs",
31
26
  "expected": "PASS"
32
27
  },
33
28
  {
34
- "id": "capability-authority-truth",
35
- "command": "node --test test/capability-resolver.test.mjs",
36
- "expected": "PASS authority-state manifest truth"
37
- },
38
- {
39
- "id": "compact-authority-truth",
40
- "command": "node --test test/compact-max-catalog-r45.test.mjs",
41
- "expected": "PASS real compact stdio authority-state manifest truth"
42
- },
43
- {
44
- "id": "native-windows-observation",
45
- "command": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-hardware-r45.ps1",
46
- "expected": "PASS native Windows observation build/query gate"
47
- },
48
- {
49
- "id": "r49-donor-proof",
50
- "command": "node --test test/r49-remote-control-donors.test.mjs",
51
- "expected": "PASS six pinned donor decisions"
52
- },
53
- {
54
- "id": "r49-desktop-wait",
55
- "command": "node --test test/desktop-runtime-r40.test.mjs test/desktop-mcp-tools-r40.test.mjs test/autonomous-desktop-r40.test.mjs",
56
- "expected": "PASS bounded semantic wait and signed evidence"
29
+ "id": "windows-gate",
30
+ "command": "npm run gate:windows",
31
+ "expected": "PASS R54 focused + full regression + manifest/doctor evidence"
57
32
  },
58
33
  {
59
- "id": "r49-catalog",
60
- "command": "npm run r48:catalog:test",
61
- "expected": "PASS 117-tool full catalog; compact remains 43"
62
- },
63
- {
64
- "id": "commander-hardening",
65
- "command": "npm run r47:hardening:test",
66
- "expected": "PASS"
67
- },
68
- {
69
- "id": "commander-protocol-adversarial",
70
- "command": "node --test test/commander-protocol-adversarial-r48.test.mjs",
71
- "expected": "PASS malformed JSON, invalid request, unknown method/tool, duplicate IDs and concurrent correlation"
72
- },
73
- {
74
- "id": "r48-release",
75
- "command": "npm run r48:release:test",
76
- "expected": "PASS"
77
- },
78
- {
79
- "id": "full-regression",
80
- "command": "npm run r48:full:test",
81
- "expected": "PASS"
82
- },
83
- {
84
- "id": "runtime-update",
85
- "command": "node --test test/runtime-self-update.test.mjs",
86
- "expected": "PASS"
87
- },
88
- {
89
- "id": "audit",
90
- "command": "npm audit --omit=dev",
91
- "expected": "0 vulnerabilities"
34
+ "id": "package-verify",
35
+ "command": "node scripts/npm-release-r48.mjs --verify-only",
36
+ "expected": "PASS exact packaged surface and isolated doctor"
92
37
  },
93
38
  {
94
39
  "id": "activation",
95
- "command": "npx -y deadbyte-mcp@0.15.29 remote",
96
- "expected": "active runtime auto-synchronizes from exact 0.15.27 runtime rollback target to exact 0.15.29 package manifest; published lineage parent is exact 0.15.28; offline predecessor Host authority is revoked before capture"
40
+ "command": "npx --yes deadbyte-mcp@0.15.31 remote",
41
+ "expected": "clean OFFLINE recovery must not self-block and must activate exact R54 manifest"
97
42
  },
98
43
  {
99
44
  "id": "machine-truth",
100
45
  "command": "signed machine_ping",
101
- "expected": "release_id and manifests bind activated 0.15.29 generation"
46
+ "expected": "active release/generation bind exact R54"
102
47
  },
103
48
  {
104
49
  "id": "rollback-restore",
105
50
  "command": "immutable slot rollback/restore",
106
- "expected": "0.15.29 -> exact 0.15.27 -> exact 0.15.29"
51
+ "expected": "0.15.31 -> exact 0.15.29 -> same exact 0.15.31"
107
52
  }
108
53
  ],
109
- "focused_proof": {
110
- "raw_mcp_protocol": {
111
- "tests": 3,
112
- "pass": 3,
113
- "fail": 0
114
- },
115
- "commander_hardening": {
116
- "tests": 139,
117
- "pass": 139,
118
- "fail": 0,
119
- "skip": 0
120
- },
121
- "npm_audit_production_vulnerabilities": 0,
122
- "r51_behavioral": {
123
- "tests": 56,
124
- "pass": 56,
125
- "fail": 0,
126
- "components": [
127
- "release-contract",
128
- "runtime-coherence",
129
- "live-log-polling",
130
- "coding-runtime",
131
- "remote-live-log",
132
- "remote-session-cli"
133
- ]
134
- },
135
- "r52_behavioral": {
136
- "tests": 1,
137
- "pass": 1,
138
- "fail": 0,
139
- "components": [
140
- "offline-predecessor-host-revocation"
141
- ]
54
+ "observed_pre_release_evidence": {
55
+ "red_parent_0_15_30": {
56
+ "status": "FAIL_EXPECTED",
57
+ "tests": 5,
58
+ "failed": 5,
59
+ "receipt_sha256": "116070d3bf860c0a13624e3d017f079655d3b4a4ccac2c7907369066c9833432"
60
+ },
61
+ "green_r54_candidate": {
62
+ "status": "PASS",
63
+ "tests": 5,
64
+ "failed": 0,
65
+ "receipt_sha256": "93889c4829e9b1690f4e8473a632b27b9be8d6a74c62ec54de05bec55524d934"
66
+ },
67
+ "full_regression": {
68
+ "status": "PASS",
69
+ "files": 229,
70
+ "batches": 8,
71
+ "elapsed_ms": 238406.738,
72
+ "receipt_id": "fafd5d1b2a543bb347ca6617",
73
+ "receipt_sha256": "ab8d0c1242570fc89cf8b87850ab168ad04147b3ca6535ea58178e6461059225",
74
+ "request_sha256": "24e963d6016e20d0527dd8825e0ba40b49009347d01faf6e45285f9c9412451a"
142
75
  }
143
76
  },
144
- "predecessor_r48_full_regression_partition_proof": {
145
- "files": 211,
146
- "batches": 8,
147
- "fail": 0,
148
- "elapsed_ms": 196997.218,
149
- "coding_task_id": "a1a10fff1520b37ac674f1861cd9e53e64e350d5a0766639036aefe5e096e235",
150
- "task_receipt_sha256": "7711039e4807f6c2af02bbda897d0032b067e0a6631f789fd3bf801258160d3f",
151
- "action_receipt_sha256": "095c5eb4d959b9105a769649aa196a1d33f5097b899031dd16997e5ba1b352e6",
152
- "not_valid_as_r50_proof": true
77
+ "inherited_parent_evidence": {
78
+ "version": "0.15.30",
79
+ "r53_full_regression": "PASS",
80
+ "local_isolated_state_acceptance": "PASS",
81
+ "four_hour_soak": "NOT_COMPLETED_OPERATOR_BYPASS"
82
+ },
83
+ "operator_override": {
84
+ "four_hour_soak": "NOT_COMPLETED",
85
+ "stable_final_claim": false
153
86
  },
154
87
  "performance": {
155
- "fresh_cross_reference_status": "PASS_PINNED_REFERENCE_RUNTIME",
156
- "reason": "A test-only copy of the byte-pinned 0.2.51 reference was installed with scripts, audit, and dev dependencies disabled; production has no reference dependency.",
157
- "historical_sample_only": false,
158
88
  "r51": {
159
89
  "coding_command_singleflight": true,
160
90
  "completed_result_cache": {
@@ -170,6 +100,10 @@
170
100
  "offline_predecessor_host_revoke_before_capture": true,
171
101
  "status_reread_required": true,
172
102
  "fail_closed_if_host_remains_armed": true
103
+ },
104
+ "r54": {
105
+ "offline_recovery_activation_ancestry_exclusion": true,
106
+ "unrelated_stale_runtime_fail_closed": true
173
107
  }
174
108
  },
175
109
  "non_win32": {
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "schema": "deadbyte.desktop-policy.v1",
3
3
  "enabled": true,
4
- "grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev\\controller\\runtime\\desktop-grant.json",
5
- "evidence_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev\\controller\\runtime\\desktop-evidence",
4
+ "grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.30-stabilization\\controller\\runtime\\desktop-grant.json",
5
+ "evidence_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.30-stabilization\\controller\\runtime\\desktop-evidence",
6
6
  "observer": {
7
- "executable": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev\\bin\\deadbyte-desktop-observer-r40.exe",
7
+ "executable": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.30-stabilization\\bin\\deadbyte-desktop-observer-r40.exe",
8
8
  "sha256": "32671ef2b7decd68c25fcabfe064086e4b3f83a8e9d3558b9d6de3a2510c6dab",
9
9
  "backend": "gdi-bitblt-fallback"
10
10
  },
11
11
  "input": {
12
- "executable": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev\\bin\\deadbyte-desktop-input-r40.exe",
12
+ "executable": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.30-stabilization\\bin\\deadbyte-desktop-input-r40.exe",
13
13
  "sha256": "0b967fd0ef599cbb9882b96ea16db7261f086dbcccae631b56f1bc2445a8ab5b"
14
14
  },
15
15
  "grounder": {
16
- "executable": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev\\bin\\deadbyte-desktop-uia-r40.exe",
16
+ "executable": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.30-stabilization\\bin\\deadbyte-desktop-uia-r40.exe",
17
17
  "sha256": "19ff558218fe8437dc04f50a8848756a8a83a84f73f464057562d77c7e19fb75"
18
18
  },
19
19
  "allowed_input_desktops": [
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "schema": "deadbyte.process-policy.v1",
3
3
  "enabled": true,
4
- "grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev\\controller\\runtime\\process-grant.json",
5
- "state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev\\controller\\runtime\\process-state",
4
+ "grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.31-r54\\controller\\runtime\\process-grant.json",
5
+ "state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.31-r54\\controller\\runtime\\process-state",
6
6
  "native_host": {
7
- "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev\\bin\\deadbyte-process-host.exe",
7
+ "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.31-r54\\bin\\deadbyte-process-host.exe",
8
8
  "sha256": "daf9cfb371bee88cafbf5597eaa507fec504dbe0b0ddd40d0c3c2e02817f49e4"
9
9
  },
10
10
  "roots": {
11
11
  "core": {
12
- "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev",
12
+ "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.31-r54",
13
13
  "deny_paths": [
14
14
  "node_modules",
15
15
  "controller/runtime",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deadbyte-mcp",
3
- "version": "0.15.29",
3
+ "version": "0.15.31",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Authenticated MCP agentic runtime with signed skills, persistent model backends, identity-bound remote devices, durable job supervision, immutable release slots, and separately revocable machine authority.",
@@ -42,7 +42,7 @@
42
42
  "contained:run": "node src/contained-cli.mjs workspaces/demo input.txt",
43
43
  "contained:smoke": "node src/contained-smoke.mjs",
44
44
  "mcp:contained:smoke": "node src/mcp-contained-smoke-client.mjs",
45
- "gate:windows": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r52.ps1",
45
+ "gate:windows": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r54.ps1",
46
46
  "authority:smoke": "node src/authority-smoke.mjs",
47
47
  "mcp:remote:smoke": "node src/remote-mcp-smoke-client.mjs",
48
48
  "mcp:host:smoke": "node src/mcp-host-smoke-client.mjs",
@@ -74,7 +74,9 @@
74
74
  "r48:catalog:test": "node --test --test-concurrency=1 test/full-max-catalog-r48.test.mjs",
75
75
  "release:npm": "node scripts/npm-release-r48.mjs",
76
76
  "r51:focused:test": "node --test --test-concurrency=1 test/r51-release-contract.test.mjs test/r51-runtime-coherence.test.mjs test/r51-live-log-polling.test.mjs test/coding-runtime.test.mjs test/remote-live-log-r37.test.mjs",
77
- "r52:focused:test": "node --test --test-concurrency=1 test/r52-release-contract.test.mjs test/r52-offline-predecessor-recovery.test.mjs test/r52-host-revocation.test.mjs test/r51-runtime-coherence.test.mjs test/r51-live-log-polling.test.mjs test/coding-runtime.test.mjs test/remote-live-log-r37.test.mjs test/runtime-self-update.test.mjs"
77
+ "r52:focused:test": "node --test --test-concurrency=1 test/r52-release-contract.test.mjs test/r52-offline-predecessor-recovery.test.mjs test/r52-host-revocation.test.mjs test/r51-runtime-coherence.test.mjs test/r51-live-log-polling.test.mjs test/coding-runtime.test.mjs test/remote-live-log-r37.test.mjs test/runtime-self-update.test.mjs",
78
+ "r53:focused:test": "node --test --test-concurrency=1 test/r53-release-contract.test.mjs test/stabilization-update-child-root.test.mjs test/stabilization-state-root.test.mjs test/stabilization-guardian.test.mjs test/stabilization-semver.test.mjs test/stabilization-powershell.test.mjs test/release-slot.test.mjs test/runtime-self-update.test.mjs test/r51-runtime-coherence.test.mjs test/remote-session-cli.test.mjs test/r52-offline-predecessor-recovery.test.mjs test/r52-host-revocation.test.mjs",
79
+ "r54:focused:test": "node --test --test-concurrency=1 test/r54-release-contract.test.mjs test/r54-offline-predecessor-self-exclusion.test.mjs test/r52-offline-predecessor-recovery.test.mjs test/runtime-self-update.test.mjs test/r51-runtime-coherence.test.mjs test/remote-session-cli.test.mjs"
78
80
  },
79
81
  "bundleDependencies": [
80
82
  "@modelcontextprotocol/server",
@@ -39,7 +39,7 @@ deadbyte-process-host.cpp
39
39
  exit_code=0
40
40
  ==== probe-dependencies ====
41
41
 
42
- Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-r42-agentic-dev\bin\containment-probe.exe
42
+ Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-0.15.30-stabilization\bin\containment-probe.exe
43
43
 
44
44
  File Type: EXECUTABLE IMAGE
45
45
 
@@ -59,7 +59,7 @@ File Type: EXECUTABLE IMAGE
59
59
  exit_code=0
60
60
  ==== contained-launcher-dependencies ====
61
61
 
62
- Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-r42-agentic-dev\bin\deadbyte-exec.exe
62
+ Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-0.15.30-stabilization\bin\deadbyte-exec.exe
63
63
 
64
64
  File Type: EXECUTABLE IMAGE
65
65
 
@@ -83,7 +83,7 @@ File Type: EXECUTABLE IMAGE
83
83
  exit_code=0
84
84
  ==== contained-worker-dependencies ====
85
85
 
86
- Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-r42-agentic-dev\bin\contained-transform-worker.exe
86
+ Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-0.15.30-stabilization\bin\contained-transform-worker.exe
87
87
 
88
88
  File Type: EXECUTABLE IMAGE
89
89
 
@@ -104,7 +104,7 @@ File Type: EXECUTABLE IMAGE
104
104
  exit_code=0
105
105
  ==== contained-reverse-worker-dependencies ====
106
106
 
107
- Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-r42-agentic-dev\bin\contained-reverse-worker.exe
107
+ Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-0.15.30-stabilization\bin\contained-reverse-worker.exe
108
108
 
109
109
  File Type: EXECUTABLE IMAGE
110
110
 
@@ -125,7 +125,7 @@ File Type: EXECUTABLE IMAGE
125
125
  exit_code=0
126
126
  ==== named-tunnel-host-dependencies ====
127
127
 
128
- Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-r42-agentic-dev\bin\deadbyte-tunnel-host.exe
128
+ Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-0.15.30-stabilization\bin\deadbyte-tunnel-host.exe
129
129
 
130
130
  File Type: EXECUTABLE IMAGE
131
131
 
@@ -144,7 +144,7 @@ File Type: EXECUTABLE IMAGE
144
144
  exit_code=0
145
145
  ==== process-host-dependencies ====
146
146
 
147
- Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-r42-agentic-dev\bin\deadbyte-process-host.exe
147
+ Dump of file D:\Projects\deadbyte-mcp\development\deadbyte-mcp-0.15.30-stabilization\bin\deadbyte-process-host.exe
148
148
 
149
149
  File Type: EXECUTABLE IMAGE
150
150
 
@@ -0,0 +1,58 @@
1
+ $ErrorActionPreference = 'Stop'
2
+ Set-StrictMode -Version 3.0
3
+
4
+ function Invoke-GateStep {
5
+ param([Parameter(Mandatory)][string]$Name,[Parameter(Mandatory)][string[]]$NpmArgs)
6
+ Write-Host "==== $Name ===="
7
+ & npm.cmd @NpmArgs
8
+ if ($LASTEXITCODE -ne 0) { throw "DEADBYTE 0.15.30 / R53 gate failed at $Name with exit code $LASTEXITCODE" }
9
+ }
10
+
11
+ function Invoke-NodeTest {
12
+ param([Parameter(Mandatory)][string]$Name,[Parameter(Mandatory)][string[]]$TestFiles)
13
+ Write-Host "==== $Name ===="
14
+ & node.exe --test --test-concurrency=1 @TestFiles
15
+ if ($LASTEXITCODE -ne 0) { throw "DEADBYTE 0.15.30 / R53 gate failed at $Name with exit code $LASTEXITCODE" }
16
+ }
17
+
18
+ Invoke-NodeTest 'r53-package-boundary' @('test/package-boundary.test.mjs')
19
+ Invoke-NodeTest 'r53-release-smoke-isolation' @('test/release-smoke-isolation.test.mjs')
20
+ Invoke-GateStep 'r53-focused-contracts' @('run','r53:focused:test')
21
+ Invoke-GateStep 'containment-build' @('run','containment:build')
22
+ Invoke-GateStep 'process-policy-refresh' @('run','process:policy:refresh')
23
+ Write-Host "==== desktop-policy-refresh ===="
24
+ & (Join-Path $PSScriptRoot 'init-desktop-policy-r40.ps1')
25
+ Invoke-GateStep 'hardware-build' @('run','hardware:build')
26
+
27
+ $hostPolicy = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..\controller\deadbyte-host-policy.json'))
28
+ Remove-Item -LiteralPath $hostPolicy -Force -ErrorAction SilentlyContinue
29
+ if (Test-Path -LiteralPath $hostPolicy) { throw 'could not establish hermetic Host policy absence' }
30
+
31
+ Invoke-GateStep 'r53-release-focused' @('run','r48:release:test')
32
+ Invoke-NodeTest 'r49-donor-proof' @('test/r49-remote-control-donors.test.mjs')
33
+ Invoke-NodeTest 'r49-desktop-wait' @('test/desktop-runtime-r40.test.mjs','test/desktop-mcp-tools-r40.test.mjs','test/autonomous-desktop-r40.test.mjs')
34
+ Invoke-GateStep 'r49-catalog' @('run','r48:catalog:test')
35
+ Invoke-GateStep 'commander-hardening' @('run','r47:hardening:test')
36
+ Invoke-GateStep 'full-regression' @('run','r48:full:test')
37
+ Invoke-GateStep 'mcp-smoke' @('run','mcp:smoke')
38
+ Invoke-GateStep 'mcp-agent-smoke' @('run','mcp:agent:smoke')
39
+ Invoke-GateStep 'mcp-coding-smoke' @('run','mcp:coding:smoke')
40
+ Invoke-GateStep 'mcp-machine-fs-smoke' @('run','mcp:machine-fs:smoke')
41
+ Invoke-GateStep 'mcp-observation-smoke' @('run','mcp:observation:smoke')
42
+ Invoke-GateStep 'mcp-process-smoke' @('run','mcp:process:smoke')
43
+ Invoke-GateStep 'mcp-autonomous-smoke' @('run','mcp:autonomous:smoke')
44
+ Invoke-GateStep 'tunnel-stdio-compat-smoke' @('run','mcp:tunnel-compat:smoke')
45
+ Invoke-GateStep 'containment-smoke' @('run','containment:smoke')
46
+ Invoke-GateStep 'contained-smoke' @('run','contained:smoke')
47
+ Invoke-GateStep 'mcp-contained-smoke' @('run','mcp:contained:smoke')
48
+ Invoke-GateStep 'host-policy-refresh' @('run','host:policy:init')
49
+ Invoke-GateStep 'manifest-write' @('run','manifest:write')
50
+ Invoke-GateStep 'manifest-verify' @('run','manifest:verify')
51
+ Invoke-GateStep 'doctor' @('run','doctor')
52
+ Invoke-GateStep 'mcp-host-smoke' @('run','mcp:host:smoke')
53
+ Invoke-GateStep 'authority-smoke' @('run','authority:smoke')
54
+ Invoke-GateStep 'manifest-final-verify' @('run','manifest:verify')
55
+
56
+ & node.exe (Join-Path $PSScriptRoot 'windows-gate-evidence-r53.mjs')
57
+ if ($LASTEXITCODE -ne 0) { throw "R53 evidence writer failed with exit code $LASTEXITCODE" }
58
+ Write-Host '==== DEADBYTE 0.15.30 / R53 WINDOWS GATE: PASS ===='
@@ -0,0 +1,26 @@
1
+ $ErrorActionPreference = 'Stop'
2
+ Set-StrictMode -Version 3.0
3
+
4
+ function Invoke-GateStep {
5
+ param([Parameter(Mandatory)][string]$Name,[Parameter(Mandatory)][string[]]$NpmArgs)
6
+ Write-Host "==== $Name ===="
7
+ & npm.cmd @NpmArgs
8
+ if ($LASTEXITCODE -ne 0) { throw "DEADBYTE 0.15.31 / R54 gate failed at $Name with exit code $LASTEXITCODE" }
9
+ }
10
+
11
+ function Invoke-NodeTest {
12
+ param([Parameter(Mandatory)][string]$Name,[Parameter(Mandatory)][string[]]$TestFiles)
13
+ Write-Host "==== $Name ===="
14
+ & node.exe --test --test-concurrency=1 @TestFiles
15
+ if ($LASTEXITCODE -ne 0) { throw "DEADBYTE 0.15.31 / R54 gate failed at $Name with exit code $LASTEXITCODE" }
16
+ }
17
+
18
+ Invoke-NodeTest 'r54-package-boundary' @('test/package-boundary.test.mjs')
19
+ Invoke-GateStep 'r54-focused-contracts' @('run','r54:focused:test')
20
+ Invoke-GateStep 'full-regression' @('run','r48:full:test')
21
+ Invoke-GateStep 'manifest-write' @('run','manifest:write')
22
+ Invoke-GateStep 'manifest-verify' @('run','manifest:verify')
23
+ Invoke-GateStep 'doctor' @('run','doctor')
24
+ & node.exe (Join-Path $PSScriptRoot 'windows-gate-evidence-r54.mjs')
25
+ if ($LASTEXITCODE -ne 0) { throw "R54 evidence writer failed with exit code $LASTEXITCODE" }
26
+ Write-Host '==== DEADBYTE 0.15.31 / R54 WINDOWS GATE: PASS ===='
@@ -82,7 +82,7 @@ export async function verifyR42Parent(file=path.join(root,'R42-PARENT.json')){
82
82
  const closureBytes=await readFile(path.resolve(record.parent_final_closure_path));
83
83
  insist(sha256(closureBytes)===record.parent_final_closure_sha256,'R41 parent final closure raw hash mismatch');
84
84
  const closure=JSON.parse(closureBytes.toString('utf8').replace(/^\uFEFF/,''));
85
- const pointer=verifySignedClosure(closure,record,await readFile(path.join(stateRoot,'trust','ed25519-public.pem')));
85
+ const pointer=verifySignedClosure(closure,record,await readFile(path.resolve(process.env.DEADBYTE_PARENT_VERIFY_KEY||path.join(stateRoot,'trust','ed25519-public.pem'))));
86
86
  const generationFiles=await verifyTree(path.resolve(pointer.generation_root),'GENERATION.SHA256',record.parent_generation_manifest_sha256,{exact:true});
87
87
 
88
88
  const tarball=await readFile(path.resolve(record.parent_public_tarball_path));
@@ -107,7 +107,7 @@ export async function verifyR43Parent(file=path.join(root,'R43-PARENT.json')){
107
107
  const activationBytes=await readFile(path.resolve(record.parent_activation_receipt_path));
108
108
  insist(sha256(activationBytes)===record.parent_activation_receipt_file_sha256,'R42 activation raw file hash mismatch');
109
109
  const activation=JSON.parse(activationBytes.toString('utf8').replace(/^\uFEFF/,''));
110
- const keyInfo=publicKeyInfo(await readFile(path.join(stateRoot,'trust','ed25519-public.pem')));
110
+ const keyInfo=publicKeyInfo(await readFile(path.resolve(process.env.DEADBYTE_PARENT_VERIFY_KEY||path.join(stateRoot,'trust','ed25519-public.pem'))));
111
111
  verifyActivationEnvelope(activation,keyInfo,record);
112
112
 
113
113
  return {
@@ -76,7 +76,7 @@ export async function verifyR44Parent(parentFile,{stateRoot=path.join(os.homedir
76
76
  insist(envelope.body.version===parent.parent_version,'R44 parent closure version mismatch');
77
77
  insist(envelope.body.release_label==='R43 AUTHORITY HARDENING PATCH','R44 parent closure label mismatch');
78
78
 
79
- const publicKey=createPublicKey(await readFile(path.join(path.resolve(stateRoot),'trust','ed25519-public.pem')));
79
+ const publicKey=createPublicKey(await readFile(path.resolve(process.env.DEADBYTE_PARENT_VERIFY_KEY||path.join(path.resolve(stateRoot),'trust','ed25519-public.pem'))));
80
80
  insist(publicKey.asymmetricKeyType==='ed25519','R44 parent trust key must be Ed25519');
81
81
  const keyId=sha256(Buffer.from(publicKey.export({type:'spki',format:'der'})));
82
82
  insist(keyId===parent.parent_final_closure_signer_key_id,'R44 parent trust key id mismatch');
@@ -76,7 +76,7 @@ export async function verifyR45Parent(parentFile,{stateRoot=path.join(os.homedir
76
76
  insist(envelope.body.version===parent.parent_version,'R45 parent closure version mismatch');
77
77
  insist(envelope.body.release_label==='R44 REMOTE AGENT SKILL BASELINE','R45 parent closure label mismatch');
78
78
 
79
- const publicKey=createPublicKey(await readFile(path.join(path.resolve(stateRoot),'trust','ed25519-public.pem')));
79
+ const publicKey=createPublicKey(await readFile(path.resolve(process.env.DEADBYTE_PARENT_VERIFY_KEY||path.join(path.resolve(stateRoot),'trust','ed25519-public.pem'))));
80
80
  insist(publicKey.asymmetricKeyType==='ed25519','R45 parent trust key must be Ed25519');
81
81
  const keyId=sha256(Buffer.from(publicKey.export({type:'spki',format:'der'})));
82
82
  insist(keyId===parent.parent_final_closure_signer_key_id,'R45 parent trust key id mismatch');
@@ -0,0 +1,102 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { mkdir, open, readFile } from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { doctor } from '../src/doctor-r45.mjs';
7
+
8
+ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
9
+ const stateRoot = path.resolve(process.env.DEADBYTE_STATE_ROOT || path.join(os.homedir(), '.deadbyte-mcp'));
10
+ const sha256 = bytes => createHash('sha256').update(bytes).digest('hex');
11
+ const insist = (ok, message) => { if (!ok) throw new Error(message); };
12
+ const pkg = JSON.parse(await readFile(path.join(root, 'package.json'), 'utf8'));
13
+ const release = JSON.parse(await readFile(path.join(root, 'RELEASE.json'), 'utf8'));
14
+ const provenance = JSON.parse(await readFile(path.join(root, 'PROVENANCE.json'), 'utf8'));
15
+ const matrix = JSON.parse(await readFile(path.join(root, 'TEST-MATRIX.json'), 'utf8'));
16
+ const active = JSON.parse(await readFile(path.join(stateRoot, 'active-release.json'), 'utf8'));
17
+ const manifestSha256 = sha256(await readFile(path.join(root, 'MANIFEST.SHA256')));
18
+
19
+ insist(pkg.version === '0.15.30' && release.version === pkg.version && release.train === 'R53', 'R53 candidate identity mismatch');
20
+ insist(
21
+ active.release_id === release.runtime_predecessor.release_id &&
22
+ active.manifest_sha256 === release.runtime_predecessor.manifest_sha256 &&
23
+ active.generation_manifest_sha256 === release.runtime_predecessor.generation_manifest_sha256,
24
+ 'active runtime is not exact sealed 0.15.29 predecessor'
25
+ );
26
+ insist(release.parent.version === '0.15.29', 'R53 parent version mismatch');
27
+ insist(release.parent.release_id === 'v0.15.29-f74eaa1b3d00e6fb', 'R53 parent release id mismatch');
28
+ insist(release.parent.manifest_sha256 === 'f74eaa1b3d00e6fb5a36b2358efb815e3686c9fe9dbd3b84d25a713ef957748c', 'R53 parent manifest mismatch');
29
+ insist(release.parent.generation_manifest_sha256 === '289b4fc065de0681da6864cc1bbe09aab198ca804945ffc27c786438dad13f5a', 'R53 parent generation mismatch');
30
+ insist(release.parent.tarball_sha256 === 'f535d7121a384bed106d34bc7525afa9d4048c7e290f270699e25136d1e82eeb', 'R53 parent tarball mismatch');
31
+ insist(provenance.parent_release_id === release.parent.release_id, 'R53 provenance parent release mismatch');
32
+ insist(provenance.parent_manifest_sha256 === release.parent.manifest_sha256, 'R53 provenance parent manifest mismatch');
33
+ insist(provenance.parent_generation_manifest_sha256 === release.parent.generation_manifest_sha256, 'R53 provenance parent generation mismatch');
34
+ insist(provenance.operator_override?.four_hour_soak === 'NOT_COMPLETED', 'R53 soak bypass missing');
35
+ insist(provenance.operator_override?.stable_final_claim === false, 'R53 must not claim stable/final');
36
+ insist(matrix.operator_override?.four_hour_soak === 'NOT_COMPLETED', 'R53 matrix soak bypass missing');
37
+
38
+ const health = await doctor();
39
+ insist(health.status === 'ok' && health.package_version === pkg.version && health.manifest?.verified === true, 'R53 doctor evidence invalid');
40
+ insist(health.policy?.host_v2_ready === true, 'R53 Host policy v2 is not ready');
41
+
42
+ const evidence = {
43
+ schema: 'deadbyte.r53-windows-gate.v1',
44
+ status: 'passed',
45
+ exit_code: 0,
46
+ version: pkg.version,
47
+ train: 'R53',
48
+ completed_at_utc: new Date().toISOString(),
49
+ manifest_sha256: manifestSha256,
50
+ parent: release.parent,
51
+ runtime_predecessor: release.runtime_predecessor,
52
+ stabilization: release.stabilization,
53
+ operator_override: provenance.operator_override,
54
+ active_predecessor: {
55
+ release_id: active.release_id,
56
+ version: active.version,
57
+ manifest_sha256: active.manifest_sha256,
58
+ generation_manifest_sha256: active.generation_manifest_sha256
59
+ },
60
+ doctor: { verified_entries: health.manifest.verified_entries, host_v2_ready: true },
61
+ gates: {
62
+ r53_focused: true,
63
+ package_boundary: true,
64
+ release_smoke_isolation: true,
65
+ runtime_coherence: true,
66
+ coding_command_singleflight: true,
67
+ foreground_desktop_host_fail_closed: true,
68
+ full_regression: true,
69
+ commander_hardening: true,
70
+ donor_proof: true,
71
+ desktop_wait: true,
72
+ exact_catalog: true,
73
+ stdio_smokes: true,
74
+ manifest_final_verify: true,
75
+ four_hour_soak_completed: false
76
+ }
77
+ };
78
+
79
+ const bytes = Buffer.from(`${JSON.stringify(evidence, null, 2)}\n`);
80
+ const dir = path.join(stateRoot, 'evidence', 'release');
81
+ await mkdir(dir, { recursive: true });
82
+ const target = path.join(dir, `r53-windows-gate-${manifestSha256.slice(0, 16)}.json`);
83
+
84
+ try {
85
+ const handle = await open(target, 'wx', 0o600);
86
+ try { await handle.writeFile(bytes); await handle.sync(); }
87
+ finally { await handle.close(); }
88
+ } catch (error) {
89
+ if (error?.code !== 'EEXIST') throw error;
90
+ const prior = JSON.parse(await readFile(target, 'utf8'));
91
+ insist(
92
+ prior.schema === evidence.schema &&
93
+ prior.status === 'passed' &&
94
+ prior.version === evidence.version &&
95
+ prior.manifest_sha256 === manifestSha256 &&
96
+ prior.parent?.release_id === release.parent.release_id &&
97
+ prior.operator_override?.four_hour_soak === 'NOT_COMPLETED',
98
+ 'conflicting R53 gate evidence identity'
99
+ );
100
+ }
101
+
102
+ console.log(JSON.stringify({ status: 'passed', path: target, sha256: sha256(bytes), manifest_sha256: manifestSha256 }));