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.
- package/MANIFEST.SHA256 +64 -48
- package/PROVENANCE.json +28 -18
- package/README.txt +18 -14
- package/RELEASE.json +35 -17
- package/SBOM.cdx.json +3 -3
- package/STABILIZATION-PROGRESS.md +60 -0
- package/TEST-MATRIX.json +52 -118
- package/bin/appcontainer-stage.obj +0 -0
- package/bin/bootstrap-advapi32.obj +0 -0
- package/bin/bootstrap-exitcode.obj +0 -0
- package/bin/bootstrap-kernel32.obj +0 -0
- package/bin/child-control-probe.obj +0 -0
- package/bin/child-control-stage.obj +0 -0
- package/bin/contained-reverse-worker.obj +0 -0
- package/bin/contained-transform-worker.obj +0 -0
- package/bin/containment-probe.obj +0 -0
- package/bin/deadbyte-contain.obj +0 -0
- package/bin/deadbyte-exec.obj +0 -0
- package/bin/deadbyte-hardware-observer-r45.obj +0 -0
- package/bin/deadbyte-process-host.obj +0 -0
- package/bin/deadbyte-tunnel-host.obj +0 -0
- package/controller/deadbyte-desktop-policy.json +5 -5
- package/controller/deadbyte-process-policy.json +4 -4
- package/package.json +5 -3
- package/proof/CONTAINMENT-BUILD.txt +6 -6
- package/scripts/gate-windows-r53.ps1 +58 -0
- package/scripts/gate-windows-r54.ps1 +26 -0
- package/scripts/verify-r42-parent.mjs +1 -1
- package/scripts/verify-r43-parent.mjs +1 -1
- package/scripts/verify-r44-parent.mjs +1 -1
- package/scripts/verify-r45-parent.mjs +1 -1
- package/scripts/windows-gate-evidence-r53.mjs +102 -0
- package/scripts/windows-gate-evidence-r54.mjs +76 -0
- package/src/authority-smoke.mjs +1 -0
- package/src/deadbyte-cli.mjs +4 -2
- package/src/doctor-r45.mjs +2 -1
- package/src/machine-fs-smoke-client.mjs +1 -0
- package/src/mcp-contained-smoke-client.mjs +1 -0
- package/src/mcp-host-smoke-client.mjs +1 -0
- package/src/mcp-smoke-client.mjs +1 -0
- package/src/process-smoke-client.mjs +1 -0
- package/src/release-slot.mjs +5 -2
- package/src/remote-session-guardian.mjs +12 -4
- package/src/runtime-coherence.mjs +13 -4
- package/src/runtime-update.mjs +51 -13
- package/src/state-root.mjs +8 -0
- package/src/trust.mjs +2 -1
- package/src/tunnel-stdio-compat-smoke.mjs +1 -0
- package/src/version.mjs +1 -1
- package/test/commander-biff-reference-r48.test.mjs +1 -1
- package/test/r44-finalizer.test.mjs +4 -3
- package/test/r49-windows-gate.test.mjs +36 -27
- package/test/r52-release-contract.test.mjs +9 -3
- package/test/r53-release-contract.test.mjs +68 -0
- package/test/r54-offline-predecessor-self-exclusion.test.mjs +56 -0
- package/test/r54-release-contract.test.mjs +59 -0
- package/test/release-slot.test.mjs +2 -1
- package/test/skill-mcp-r44.test.mjs +3 -0
- package/test/stabilization-guardian.test.mjs +25 -0
- package/test/stabilization-parent-context.test.mjs +18 -0
- package/test/stabilization-powershell.test.mjs +26 -0
- package/test/stabilization-semver.test.mjs +23 -0
- package/test/stabilization-smoke-root.test.mjs +23 -0
- package/test/stabilization-state-root.test.mjs +60 -0
- 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.
|
|
4
|
-
"train": "
|
|
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": "
|
|
15
|
-
"command": "npm run
|
|
16
|
-
"expected": "PASS
|
|
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": "
|
|
20
|
-
"command": "
|
|
21
|
-
"expected": "PASS
|
|
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": "
|
|
35
|
-
"command": "
|
|
36
|
-
"expected": "PASS
|
|
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": "
|
|
60
|
-
"command": "npm
|
|
61
|
-
"expected": "PASS
|
|
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
|
|
96
|
-
"expected": "
|
|
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": "
|
|
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.
|
|
51
|
+
"expected": "0.15.31 -> exact 0.15.29 -> same exact 0.15.31"
|
|
107
52
|
}
|
|
108
53
|
],
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
"
|
|
145
|
-
"
|
|
146
|
-
"
|
|
147
|
-
"
|
|
148
|
-
"
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
"
|
|
152
|
-
"
|
|
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
|
package/bin/deadbyte-contain.obj
CHANGED
|
Binary file
|
package/bin/deadbyte-exec.obj
CHANGED
|
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-
|
|
5
|
-
"evidence_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
"state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-
|
|
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-
|
|
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-
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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 }));
|