deadbyte-mcp 0.15.30 → 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 +15 -11
- package/PROVENANCE.json +20 -15
- package/README.txt +18 -14
- package/RELEASE.json +22 -16
- package/SBOM.cdx.json +3 -3
- package/TEST-MATRIX.json +40 -51
- package/controller/deadbyte-process-policy.json +4 -4
- package/package.json +4 -3
- package/scripts/gate-windows-r54.ps1 +26 -0
- package/scripts/windows-gate-evidence-r54.mjs +76 -0
- package/src/runtime-update.mjs +31 -8
- package/src/version.mjs +1 -1
- package/test/r49-windows-gate.test.mjs +34 -30
- package/test/r53-release-contract.test.mjs +5 -3
- package/test/r54-offline-predecessor-self-exclusion.test.mjs +56 -0
- package/test/r54-release-contract.test.mjs +59 -0
- package/controller/deadbyte-host-policy.json +0 -170
package/MANIFEST.SHA256
CHANGED
|
@@ -49,7 +49,7 @@ ad9821d027ac70612820617ed3c197d465c98e42a9e2a5bbb40f571fb2314894 controller/dea
|
|
|
49
49
|
8c70a873fd77e5b1579512ec218220182c2bddba63dc50c56ec70a7b449c52d9 controller/deadbyte-desktop-policy.json
|
|
50
50
|
5e8ef223b0dbc52173aaf044a075837eef8964ff0e7e16f83a595e0d17695625 controller/deadbyte-host-policy.json.example
|
|
51
51
|
6f0cc469f51444dd18211fa3346c826abeea4d2ec7a8945f0200dc5c622031ef controller/DEADBYTE-MCP.cmd
|
|
52
|
-
|
|
52
|
+
adefb04b969613ff844fae45845f5847e8eb4b076211fc98c9848779f37cb37e controller/deadbyte-process-policy.json
|
|
53
53
|
d274b099a298c1033fea8f1e8849751693bbc0448778d619400acb82d4f53a3b controller/deadbyte-semantic-lsp-config.json
|
|
54
54
|
3023d2985f5b6e5cc7c0d08cb8b342b362c93dce7ebd4224635362194be40cf2 controller/README.TXT
|
|
55
55
|
101e613518c73c6aa31c725fe1b5f9a24c995dc9876b7b28e1f3e97ac9f8d362 DEADBYTE-MCP-R27-FINAL/R27-ADMIN-CLOSURE.json
|
|
@@ -1343,7 +1343,7 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
|
|
|
1343
1343
|
f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
|
|
1344
1344
|
51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
|
|
1345
1345
|
3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
|
|
1346
|
-
|
|
1346
|
+
5e0a860a72317cc63f2e278d834d9873abfac284c8eef07f385f3315827d3e41 package.json
|
|
1347
1347
|
872947dffd89755b03558b217129f009dc9f4fd1ce55e93c602fc6ea97ba8b48 proof/commander-closure-20260927/CONTINUATION.json
|
|
1348
1348
|
2959980d295814aaa0df71fdb358d2cbfd01c1357ee36ef6b10c149875bdb262 proof/commander-closure-20260927/RESULT.json
|
|
1349
1349
|
2c2866309ca3a6fc8de5b03d445f1dcf0778474fa25cefb822b2ab729bc91c62 proof/commander-closure-20260927/SEARCH-CONTINUATION.json
|
|
@@ -1408,7 +1408,7 @@ d433aaea5cccd1e184775ac4d915f34e0b39c6c99916dddd009731ad5fd6443f proof/V073-WIN
|
|
|
1408
1408
|
bd0773a9e02e8ab11475c9cc5a7db29a8313233b7eab7f837922737e75ec5938 proof/VERIFY.txt
|
|
1409
1409
|
2c821808d4596965c577f40191daee224d3aea81989778c4af97f53a83b487db proof/WINDOWS-CONTAINED-STATUS.txt
|
|
1410
1410
|
f8bc839c7b4fcb0ea7b7e7ad9448847c3beae6f95f2eb4d407d1b284aaa4ff68 proof/WINDOWS-CONTAINMENT-STATUS.txt
|
|
1411
|
-
|
|
1411
|
+
bb26c46cc3847be6ebced830b7baad2041459e370cca044be342048a94370b25 PROVENANCE.json
|
|
1412
1412
|
27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
|
|
1413
1413
|
0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
|
|
1414
1414
|
bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
|
|
@@ -1417,9 +1417,9 @@ f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.jso
|
|
|
1417
1417
|
731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
|
|
1418
1418
|
d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
|
|
1419
1419
|
3dc607603fea511e2f428e9546a875ab7e38b6a0bbd5e803e4510de082f30804 R49-PARENT.json
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1420
|
+
faa48ce6e84b6e14265de3e3a720979823e4a1a25e894a31e651979fdcab9e1c README.txt
|
|
1421
|
+
6a64fdaf80f010ef335f35c3a669e29ac2a4ad63be83abd122a0a553a88f6db7 RELEASE.json
|
|
1422
|
+
8867f7263a2b975788973b57e774dcc99857c2284a30d4f616ebc5c07c3dfe4b SBOM.cdx.json
|
|
1423
1423
|
7c86062c4f69db3179a129d65945ccfab1b1c1c5bcc29b91383eac097d50f2aa scripts/activate-skill-creator-1.1.1.mjs
|
|
1424
1424
|
bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
|
|
1425
1425
|
8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
|
|
@@ -1515,6 +1515,7 @@ a62d69eea0c9db8778cd1551185ff6721ee6390d91afcb6863aecb75f9f422d1 scripts/gate-w
|
|
|
1515
1515
|
9d54cf1d884f49a642a39da863d78a5dda6f9673d9b78716ac6dc9dcf545f23e scripts/gate-windows-r51.ps1
|
|
1516
1516
|
612ec086c3c9ce6954711736b8590719cb66633ebbeafd6b9781b6b5b8169134 scripts/gate-windows-r52.ps1
|
|
1517
1517
|
2df3dfb98aabef25e25a61035d9f17d644aecb52257047230142783b3ce5a1a3 scripts/gate-windows-r53.ps1
|
|
1518
|
+
89f930eb3d3b9d8972d777a327f16bcfebcf12576a6ada48e53f64d1142adb2d scripts/gate-windows-r54.ps1
|
|
1518
1519
|
9a085b34b9e54023eb0efadcea1e74a1bef44b984105d064768d66910999173e scripts/gate-windows.ps1
|
|
1519
1520
|
9e625bdc701298c05eb2a63c208d023a487a1baf306c05940eb29c19fb1d6544 scripts/init-desktop-policy-r40.ps1
|
|
1520
1521
|
01451045bff624a157e7eea79afd7edfa8cb8212ea0256c8ec744fe1e1b269ff scripts/init-host-policy.ps1
|
|
@@ -1606,6 +1607,7 @@ f344639080f68b7da5cda765b518e0fb91bc8818229b6f460e82b173018ad30c scripts/window
|
|
|
1606
1607
|
4d99eb10183657854b88e493a5b5ff8b69a42aa911bbaa5fa7a43ccb5c6893e6 scripts/windows-gate-evidence-r51.mjs
|
|
1607
1608
|
95b2de777a8ddc02469ea2b64af13c3f6b9905f62fca7622a62bb4cdcc680e32 scripts/windows-gate-evidence-r52.mjs
|
|
1608
1609
|
2eb7373875a9a6b6eab62dfb10136ec0f3525836015c80f097d9ae2714356b68 scripts/windows-gate-evidence-r53.mjs
|
|
1610
|
+
127497b8ac8701da6a1211efb9f311aab3a67c4995430588617210d681139cf2 scripts/windows-gate-evidence-r54.mjs
|
|
1609
1611
|
2255b8eb78ca61267df54448560a671357f04893b6bb1df27b8b9fc8a944d255 scripts/windows-gate-evidence.mjs
|
|
1610
1612
|
105a5c6dcd54e4fabb416df9eaac093654f3ea39c4233a56e0bc6d53371b2128 scripts/workload-contract-regression-r47.mjs
|
|
1611
1613
|
c32cb9054a1b9641ae071c00622c0054272bdb0b519ea22c4ff926a1600a2b46 scripts/workload-stream-regression.mjs
|
|
@@ -1770,7 +1772,7 @@ fafeb0ec6e31762f14de46a5f021582b9a54de8af4c73c3ecc92ac71020cc8b7 src/remote-ses
|
|
|
1770
1772
|
45fcd7e9447545785e851fbeec439551c10a85c93f60a19437729870222c697c src/runtime-catalog-expectation.mjs
|
|
1771
1773
|
066c97427989298ff3d7db06e40572f4d634269ea7dfd5836575ea98c52d92bc src/runtime-coherence.mjs
|
|
1772
1774
|
ce2223bf6075e96cc02505c1439acce18bb1f204c5e86cf9152bb7194daf3cd2 src/runtime-identity.mjs
|
|
1773
|
-
|
|
1775
|
+
1f8aaf0cdb7079665d72a2b5abab505fac25eb2ade9531ad5b0320be93cc44da src/runtime-update.mjs
|
|
1774
1776
|
c61335adb38bfc415fe1cdabfe2c0a87e61579dfd1e52cce91c44d6993479457 src/search-cursor.mjs
|
|
1775
1777
|
fc5407ef8338ebeeede16225b3249166dc4d45e903d873eb46c15c3df07dc9ad src/semantic-backend-registry.mjs
|
|
1776
1778
|
686e9b55b9f4352b941579f186a9b9d348d86af53d052cbd5da953e7d15470ff src/semantic-code.mjs
|
|
@@ -1790,12 +1792,12 @@ c99c2402fb0df4f68634fa906eb198c551c55dad9f0921a7b8ed6e33d503884e src/tunnel-std
|
|
|
1790
1792
|
aa765e9a28c69ff58a5b5a0d29b49ea181af4db9076633b102dbca25861e708e src/tunnel-stdio-compat.mjs
|
|
1791
1793
|
642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
|
|
1792
1794
|
8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
|
|
1793
|
-
|
|
1795
|
+
b2d01b3b74ee19fd1640672f42edc25b918673c13e9119647485df7279af4be9 src/version.mjs
|
|
1794
1796
|
7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
|
|
1795
1797
|
76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
|
|
1796
1798
|
4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
|
|
1797
1799
|
1bd637e7634ca0259791c5108fcf324554f70b1db49e5eac3505287c04bbc3be STABILIZATION-PROGRESS.md
|
|
1798
|
-
|
|
1800
|
+
c743893b478a8150c96c8c927916e2477fdfd128c5cd316cd6c012e58164b5d8 TEST-MATRIX.json
|
|
1799
1801
|
e4f1fb97545f23772ddff28ad3f9954a4714f9854062fca62e0e12c1cb2ec4ae test/agent-backend-r44.test.mjs
|
|
1800
1802
|
2a78c818058b25efdc143a3a97c832da231ccd6ff9d90c7796d681a0251b85c4 test/agent-crash-child.mjs
|
|
1801
1803
|
d9461ab7c118ee75d37a2d6f5e637d7e43505af6a9ad8c7ddafffc8ace185a5b test/agent-crash-worker.mjs
|
|
@@ -2040,14 +2042,16 @@ eaaf2547cf06fad4c16db72413ea137143c280a9bc641b3230ee2d85a0b65b5a test/r44-final
|
|
|
2040
2042
|
25a21ccffcf566b020b8f3c6c0a5a3b7ff06b243fff84e405207e458640ba487 test/r47-release-contract.test.mjs
|
|
2041
2043
|
2871a825520cca851a10f65f42a6033c4c17d7446c1930d7a64316a76aacf681 test/r48-release-contract.test.mjs
|
|
2042
2044
|
ec6fc253774c318b048dc943c83b496f942d8dd034f6db9439a99a46ae3a6158 test/r49-remote-control-donors.test.mjs
|
|
2043
|
-
|
|
2045
|
+
34c8185b3e0f5933d6b414c499bfddfb555220784b54a6789effd4afde897353 test/r49-windows-gate.test.mjs
|
|
2044
2046
|
c3f0a8b6ced2c15ed8580fcb261ad65bf3b885e6593d70de7394be63aba8dd1c test/r51-live-log-polling.test.mjs
|
|
2045
2047
|
3821085180a09707110e4c1a10e711343e9fb2fcf871c7c1e34149a77c7fba50 test/r51-release-contract.test.mjs
|
|
2046
2048
|
cc1ca8fe9514ca047ace52cd688f3f4fa5b7680a280d7a31cc2196ce915b91c9 test/r51-runtime-coherence.test.mjs
|
|
2047
2049
|
12a770e09f54c567be3dd87c85faacb0c9711ea3b54a0346a37d9cdb8d8401a3 test/r52-host-revocation.test.mjs
|
|
2048
2050
|
0f8d01f1cdaa550953726b038dde46da8bd074dd1de6ff227a20774516342a5b test/r52-offline-predecessor-recovery.test.mjs
|
|
2049
2051
|
7771030283b84fd3fec506287ff3083be3a83167c66a1c0d6bcdff8dda55f873 test/r52-release-contract.test.mjs
|
|
2050
|
-
|
|
2052
|
+
b0a9cca4f2c5dcf1a24d6e7675b42c72e88339b29ddc9220aa679316ae1467f5 test/r53-release-contract.test.mjs
|
|
2053
|
+
04fe09cdd94ae23cff6a9acebb64d5a09391fd5e7f5fc778dd8dd8e10a3dd3e2 test/r54-offline-predecessor-self-exclusion.test.mjs
|
|
2054
|
+
e27beaa129a85c22170b0028c07177613577580e474d5dd2823c47f4caaa1151 test/r54-release-contract.test.mjs
|
|
2051
2055
|
e45a6cd299d8d65bdeb9bc0117ce1eb2b47fdebad89a02413ee979c9d0ae3a5c test/release-activation-gate.test.mjs
|
|
2052
2056
|
85f6dc2059fd19d03452309ffe67bed5b87da8e6f0ce3a85cab58cba8b197ceb test/release-generation.test.mjs
|
|
2053
2057
|
bb58887a2c393cd5aac3fa3bb3a04de2704bd2a30dd2083ea638543485fa7e60 test/release-manifest-windows.test.mjs
|
package/PROVENANCE.json
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.provenance.v1",
|
|
3
|
-
"version": "0.15.
|
|
4
|
-
"builder": "deadbyte-
|
|
5
|
-
"source_model": "exact published 0.15.
|
|
3
|
+
"version": "0.15.31",
|
|
4
|
+
"builder": "deadbyte-r54-activation-recovery-hotfix",
|
|
5
|
+
"source_model": "exact published 0.15.30 artifact -> reproduced offline-recovery self-process exclusion defect -> surgical activation-ancestry exclusion -> stale-runtime negative control -> focused regression -> current full regression -> manifest/package verification -> npm registry round-trip -> activation/rollback/restore",
|
|
6
6
|
"signing": "ed25519",
|
|
7
|
-
"parent_release_id": "v0.15.
|
|
8
|
-
"parent_manifest_sha256": "
|
|
9
|
-
"
|
|
10
|
-
"
|
|
7
|
+
"parent_release_id": "v0.15.30-ddf7c7338d9a371f",
|
|
8
|
+
"parent_manifest_sha256": "ddf7c7338d9a371f5667d7b138695e7f9cfced553d14073ac5a44fd2fe0a0399",
|
|
9
|
+
"parent_tarball_sha256": "72881981bf76eb45527946b310caed8387943e2ca8e37ea6e606c32189dd5a70",
|
|
10
|
+
"parent_activation_status": "PUBLISHED_NOT_ACTIVATED",
|
|
11
11
|
"runtime_predecessor": {
|
|
12
12
|
"release_id": "v0.15.29-f74eaa1b3d00e6fb",
|
|
13
13
|
"manifest_sha256": "f74eaa1b3d00e6fb5a36b2358efb815e3686c9fe9dbd3b84d25a713ef957748c",
|
|
14
14
|
"generation_manifest_sha256": "289b4fc065de0681da6864cc1bbe09aab198ca804945ffc27c786438dad13f5a"
|
|
15
15
|
},
|
|
16
|
-
"source_predecessor_version": "0.15.
|
|
17
|
-
"source_predecessor_tarball_sha256": "
|
|
18
|
-
"source_predecessor_manifest_file_sha256": "
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
"source_predecessor_version": "0.15.30",
|
|
17
|
+
"source_predecessor_tarball_sha256": "72881981bf76eb45527946b310caed8387943e2ca8e37ea6e606c32189dd5a70",
|
|
18
|
+
"source_predecessor_manifest_file_sha256": "ddf7c7338d9a371f5667d7b138695e7f9cfced553d14073ac5a44fd2fe0a0399",
|
|
19
|
+
"r54_hotfix": {
|
|
20
|
+
"defect": "offline predecessor recovery self-process exclusion defect",
|
|
21
|
+
"activation_ancestry_excluded": true,
|
|
22
|
+
"unrelated_stale_runtime_fail_closed": true,
|
|
23
|
+
"red_parent_0_15_30": "FAIL_5_OF_5",
|
|
24
|
+
"green_r54_candidate": "PASS_5_OF_5",
|
|
25
|
+
"full_regression": "PENDING",
|
|
26
|
+
"stable_final_claim": false
|
|
27
|
+
},
|
|
28
|
+
"reproducibility": "0.15.30 remains immutable; R54 changes only successor source/metadata/tests and preserves fail-closed stale-runtime detection outside the verified current activation ancestry",
|
|
24
29
|
"operator_override": {
|
|
25
30
|
"four_hour_soak": "NOT_COMPLETED",
|
|
26
31
|
"reason": "owner explicitly directed deploy before the 4-hour hard soak completed",
|
package/README.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
DEADBYTE MCP V0.15.
|
|
1
|
+
DEADBYTE MCP V0.15.31 / R54 ACTIVATION RECOVERY HOTFIX
|
|
2
2
|
=========================
|
|
3
3
|
|
|
4
4
|
AUTHENTICATED MACHINE TRUTH + DURABLE AGENT + CODING + AUTONOMOUS PRODUCTION ENGINE
|
|
@@ -7,12 +7,12 @@ NPX PRIMARY OPERATOR UX
|
|
|
7
7
|
------------------------
|
|
8
8
|
Use the npm CLI entry point instead of the legacy CMD convenience wrapper:
|
|
9
9
|
|
|
10
|
-
npx -y deadbyte-mcp@0.15.
|
|
11
|
-
npx -y deadbyte-mcp@0.15.
|
|
12
|
-
npx -y deadbyte-mcp@0.15.
|
|
13
|
-
npx -y deadbyte-mcp@0.15.
|
|
14
|
-
npx -y deadbyte-mcp@0.15.
|
|
15
|
-
npx -y deadbyte-mcp@0.15.
|
|
10
|
+
npx -y deadbyte-mcp@0.15.31 mcp
|
|
11
|
+
npx -y deadbyte-mcp@0.15.31 remote
|
|
12
|
+
npx -y deadbyte-mcp@0.15.31 remote status
|
|
13
|
+
npx -y deadbyte-mcp@0.15.31 remote restart
|
|
14
|
+
npx -y deadbyte-mcp@0.15.31 audit status
|
|
15
|
+
npx -y deadbyte-mcp@0.15.31 audit verify
|
|
16
16
|
|
|
17
17
|
The `mcp` command is the quiet stdio server entry for local MCP clients; stdout is reserved for MCP.
|
|
18
18
|
The remote CLI invokes the stable active-release PowerShell launcher directly with shell=false.
|
|
@@ -29,6 +29,10 @@ and a random 256-bit session nonce, prevents concurrent foreground sessions, and
|
|
|
29
29
|
recover only a dead, unguarded stale owner. Explicit subcommands such as `remote status` remain
|
|
30
30
|
one-shot controller operations.
|
|
31
31
|
|
|
32
|
+
R54 ACTIVATION RECOVERY HOTFIX
|
|
33
|
+
---------------------------------
|
|
34
|
+
0.15.31 fixes the published 0.15.30 offline-predecessor activation defect. The detached update supervisor now excludes only its verified current process ancestry when scanning for DEADBYTE runtime blockers. Unrelated stale DEADBYTE runtime processes, including sibling Node runtimes, guardians, tunnel hosts, and cloud processes, still fail closed. The 0.15.30 package remains immutable and is retained as the exact published source predecessor; production runtime predecessor remains exact 0.15.29 until R54 activation completes.
|
|
35
|
+
|
|
32
36
|
R51 RUNTIME COHERENCE + SINGLE-FLIGHT + LIVELOG HARDENING
|
|
33
37
|
----------------------------------------------------------
|
|
34
38
|
0.15.29 closes the offline predecessor activation defect observed in 0.15.28: when recovery sees an OFFLINE predecessor with a stale Host standing grant, the updater now revokes Host authority itself, re-reads controller state, and fails closed unless Host is confirmed DISARMED before capture.
|
|
@@ -272,7 +276,7 @@ CONTROLLER
|
|
|
272
276
|
----------
|
|
273
277
|
Primary operator entry point:
|
|
274
278
|
|
|
275
|
-
npx -y deadbyte-mcp@0.15.
|
|
279
|
+
npx -y deadbyte-mcp@0.15.31 remote
|
|
276
280
|
|
|
277
281
|
The legacy CMD entry remains compatibility-only for R33 rollback safety.
|
|
278
282
|
|
|
@@ -333,7 +337,7 @@ MCP CLIENT CONFIGURATION
|
|
|
333
337
|
------------------------
|
|
334
338
|
The local stdio entry point is quiet and suitable for MCP hosts:
|
|
335
339
|
|
|
336
|
-
npx -y deadbyte-mcp@0.15.
|
|
340
|
+
npx -y deadbyte-mcp@0.15.31 mcp
|
|
337
341
|
|
|
338
342
|
CLAUDE DESKTOP
|
|
339
343
|
Use the standard local-server entry in claude_desktop_config.json:
|
|
@@ -342,7 +346,7 @@ Use the standard local-server entry in claude_desktop_config.json:
|
|
|
342
346
|
"mcpServers": {
|
|
343
347
|
"deadbyte": {
|
|
344
348
|
"command": "npx",
|
|
345
|
-
"args": ["-y", "deadbyte-mcp@0.15.
|
|
349
|
+
"args": ["-y", "deadbyte-mcp@0.15.31", "mcp"]
|
|
346
350
|
}
|
|
347
351
|
}
|
|
348
352
|
}
|
|
@@ -355,7 +359,7 @@ Create .cursor/mcp.json:
|
|
|
355
359
|
"deadbyte": {
|
|
356
360
|
"type": "stdio",
|
|
357
361
|
"command": "npx",
|
|
358
|
-
"args": ["-y", "deadbyte-mcp@0.15.
|
|
362
|
+
"args": ["-y", "deadbyte-mcp@0.15.31", "mcp"]
|
|
359
363
|
}
|
|
360
364
|
}
|
|
361
365
|
}
|
|
@@ -368,7 +372,7 @@ Create .vscode/mcp.json:
|
|
|
368
372
|
"deadbyte": {
|
|
369
373
|
"type": "stdio",
|
|
370
374
|
"command": "npx",
|
|
371
|
-
"args": ["-y", "deadbyte-mcp@0.15.
|
|
375
|
+
"args": ["-y", "deadbyte-mcp@0.15.31", "mcp"]
|
|
372
376
|
}
|
|
373
377
|
}
|
|
374
378
|
}
|
|
@@ -378,9 +382,9 @@ Add this to ~/.codex/config.toml:
|
|
|
378
382
|
|
|
379
383
|
[mcp_servers.deadbyte]
|
|
380
384
|
command = "npx"
|
|
381
|
-
args = ["-y", "deadbyte-mcp@0.15.
|
|
385
|
+
args = ["-y", "deadbyte-mcp@0.15.31", "mcp"]
|
|
382
386
|
|
|
383
|
-
The remote device path remains `npx -y deadbyte-mcp@0.15.
|
|
387
|
+
The remote device path remains `npx -y deadbyte-mcp@0.15.31 remote`. Remote public MCP uses the
|
|
384
388
|
verified HTTPS named-tunnel URL selected by the active generation; do not commit a private device
|
|
385
389
|
URL or tunnel token into a repository.
|
|
386
390
|
|
package/RELEASE.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "deadbyte.release.v1",
|
|
3
3
|
"name": "deadbyte-mcp",
|
|
4
|
-
"version": "0.15.
|
|
5
|
-
"train": "
|
|
6
|
-
"label": "
|
|
4
|
+
"version": "0.15.31",
|
|
5
|
+
"train": "R54",
|
|
6
|
+
"label": "ACTIVATION RECOVERY HOTFIX",
|
|
7
7
|
"protocol_revision": "2026-07-28",
|
|
8
8
|
"parent": {
|
|
9
|
-
"version": "0.15.
|
|
10
|
-
"release_id": "v0.15.
|
|
11
|
-
"manifest_sha256": "
|
|
12
|
-
"
|
|
13
|
-
"
|
|
9
|
+
"version": "0.15.30",
|
|
10
|
+
"release_id": "v0.15.30-ddf7c7338d9a371f",
|
|
11
|
+
"manifest_sha256": "ddf7c7338d9a371f5667d7b138695e7f9cfced553d14073ac5a44fd2fe0a0399",
|
|
12
|
+
"tarball_sha256": "72881981bf76eb45527946b310caed8387943e2ca8e37ea6e606c32189dd5a70",
|
|
13
|
+
"activation_status": "PUBLISHED_NOT_ACTIVATED"
|
|
14
14
|
},
|
|
15
15
|
"runtime_predecessor": {
|
|
16
16
|
"release_id": "v0.15.29-f74eaa1b3d00e6fb",
|
|
@@ -18,13 +18,18 @@
|
|
|
18
18
|
"generation_manifest_sha256": "289b4fc065de0681da6864cc1bbe09aab198ca804945ffc27c786438dad13f5a"
|
|
19
19
|
},
|
|
20
20
|
"source_predecessor": {
|
|
21
|
-
"version": "0.15.
|
|
22
|
-
"tarball_sha256": "
|
|
23
|
-
"manifest_file_sha256": "
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
21
|
+
"version": "0.15.30",
|
|
22
|
+
"tarball_sha256": "72881981bf76eb45527946b310caed8387943e2ca8e37ea6e606c32189dd5a70",
|
|
23
|
+
"manifest_file_sha256": "ddf7c7338d9a371f5667d7b138695e7f9cfced553d14073ac5a44fd2fe0a0399"
|
|
24
|
+
},
|
|
25
|
+
"hotfix": {
|
|
26
|
+
"defect": "offline predecessor recovery self-process exclusion defect",
|
|
27
|
+
"activation_ancestry_excluded": true,
|
|
28
|
+
"unrelated_stale_runtime_fail_closed": true,
|
|
29
|
+
"red_parent_0_15_30": "FAIL_5_OF_5",
|
|
30
|
+
"green_r54_candidate": "PASS_5_OF_5",
|
|
31
|
+
"full_regression": "PASS",
|
|
32
|
+
"stable_final_claim": false
|
|
28
33
|
},
|
|
29
34
|
"stabilization": {
|
|
30
35
|
"semver_strict_validation": true,
|
|
@@ -129,6 +134,7 @@
|
|
|
129
134
|
"human_livelog_peak_inflight": true,
|
|
130
135
|
"human_livelog_bounded_discovery": true,
|
|
131
136
|
"human_livelog_single_parse": true,
|
|
132
|
-
"offline_predecessor_host_revoke_before_capture": true
|
|
137
|
+
"offline_predecessor_host_revoke_before_capture": true,
|
|
138
|
+
"offline_recovery_self_process_exclusion": true
|
|
133
139
|
}
|
|
134
140
|
}
|
package/SBOM.cdx.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bomFormat": "CycloneDX",
|
|
3
3
|
"specVersion": "1.6",
|
|
4
|
-
"serialNumber": "urn:cdx:deadbyte-mcp:
|
|
4
|
+
"serialNumber": "urn:cdx:deadbyte-mcp:r54:0.15.31",
|
|
5
5
|
"version": 1,
|
|
6
6
|
"metadata": {
|
|
7
7
|
"component": {
|
|
8
8
|
"type": "application",
|
|
9
9
|
"name": "deadbyte-mcp",
|
|
10
|
-
"version": "0.15.
|
|
10
|
+
"version": "0.15.31"
|
|
11
11
|
}
|
|
12
12
|
},
|
|
13
13
|
"components": [
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
{
|
|
35
35
|
"type": "file",
|
|
36
36
|
"name": "deadbyte-hardware-observer-r45.exe",
|
|
37
|
-
"version": "0.15.
|
|
37
|
+
"version": "0.15.31",
|
|
38
38
|
"hashes": [
|
|
39
39
|
{
|
|
40
40
|
"alg": "SHA-256",
|
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,90 +11,75 @@
|
|
|
11
11
|
},
|
|
12
12
|
"required": [
|
|
13
13
|
{
|
|
14
|
-
"id": "
|
|
15
|
-
"command": "npm run
|
|
16
|
-
"expected": "PASS
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"id": "package-boundary",
|
|
20
|
-
"command": "node --test test/package-boundary.test.mjs",
|
|
21
|
-
"expected": "PASS canonical top-level DEADBYTE-MCP.cmd included; local/shadow wrappers excluded"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"id": "release-smoke",
|
|
25
|
-
"command": "node --test test/release-smoke-isolation.test.mjs",
|
|
26
|
-
"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"
|
|
27
17
|
},
|
|
28
18
|
{
|
|
29
19
|
"id": "full-regression",
|
|
30
20
|
"command": "npm run r48:full:test",
|
|
31
|
-
"expected": "PASS"
|
|
21
|
+
"expected": "PASS current R54 successor"
|
|
32
22
|
},
|
|
33
23
|
{
|
|
34
|
-
"id": "
|
|
35
|
-
"command": "node --test test/
|
|
24
|
+
"id": "package-boundary",
|
|
25
|
+
"command": "node --test test/package-boundary.test.mjs",
|
|
36
26
|
"expected": "PASS"
|
|
37
27
|
},
|
|
38
28
|
{
|
|
39
29
|
"id": "windows-gate",
|
|
40
30
|
"command": "npm run gate:windows",
|
|
41
|
-
"expected": "PASS
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
"id": "local-isolated-state-acceptance",
|
|
45
|
-
"command": "powershell -NoProfile -ExecutionPolicy Bypass -File D:/Projects/deadbyte-mcp/testing/0.15.30/local-isolated-acceptance.ps1",
|
|
46
|
-
"expected": "PASS with production sentinel unchanged"
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"id": "four-hour-soak",
|
|
50
|
-
"command": "owner override",
|
|
51
|
-
"expected": "NOT_COMPLETED_OPERATOR_BYPASS"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"id": "audit",
|
|
55
|
-
"command": "npm audit --omit=dev",
|
|
56
|
-
"expected": "0 vulnerabilities"
|
|
31
|
+
"expected": "PASS R54 focused + full regression + manifest/doctor evidence"
|
|
57
32
|
},
|
|
58
33
|
{
|
|
59
34
|
"id": "package-verify",
|
|
60
35
|
"command": "node scripts/npm-release-r48.mjs --verify-only",
|
|
61
|
-
"expected": "PASS
|
|
36
|
+
"expected": "PASS exact packaged surface and isolated doctor"
|
|
62
37
|
},
|
|
63
38
|
{
|
|
64
39
|
"id": "activation",
|
|
65
|
-
"command": "npx --yes deadbyte-mcp@0.15.
|
|
66
|
-
"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"
|
|
67
42
|
},
|
|
68
43
|
{
|
|
69
44
|
"id": "machine-truth",
|
|
70
45
|
"command": "signed machine_ping",
|
|
71
|
-
"expected": "
|
|
46
|
+
"expected": "active release/generation bind exact R54"
|
|
72
47
|
},
|
|
73
48
|
{
|
|
74
49
|
"id": "rollback-restore",
|
|
75
50
|
"command": "immutable slot rollback/restore",
|
|
76
|
-
"expected": "0.15.
|
|
51
|
+
"expected": "0.15.31 -> exact 0.15.29 -> same exact 0.15.31"
|
|
77
52
|
}
|
|
78
53
|
],
|
|
79
54
|
"observed_pre_release_evidence": {
|
|
80
|
-
"
|
|
81
|
-
"status": "
|
|
82
|
-
"
|
|
55
|
+
"red_parent_0_15_30": {
|
|
56
|
+
"status": "FAIL_EXPECTED",
|
|
57
|
+
"tests": 5,
|
|
58
|
+
"failed": 5,
|
|
59
|
+
"receipt_sha256": "116070d3bf860c0a13624e3d017f079655d3b4a4ccac2c7907369066c9833432"
|
|
83
60
|
},
|
|
84
|
-
"
|
|
61
|
+
"green_r54_candidate": {
|
|
85
62
|
"status": "PASS",
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
63
|
+
"tests": 5,
|
|
64
|
+
"failed": 0,
|
|
65
|
+
"receipt_sha256": "93889c4829e9b1690f4e8473a632b27b9be8d6a74c62ec54de05bec55524d934"
|
|
89
66
|
},
|
|
90
|
-
"
|
|
67
|
+
"full_regression": {
|
|
91
68
|
"status": "PASS",
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
69
|
+
"files": 229,
|
|
70
|
+
"batches": 8,
|
|
71
|
+
"elapsed_ms": 238406.738,
|
|
72
|
+
"receipt_id": "fafd5d1b2a543bb347ca6617",
|
|
73
|
+
"receipt_sha256": "ab8d0c1242570fc89cf8b87850ab168ad04147b3ca6535ea58178e6461059225",
|
|
74
|
+
"request_sha256": "24e963d6016e20d0527dd8825e0ba40b49009347d01faf6e45285f9c9412451a"
|
|
96
75
|
}
|
|
97
76
|
},
|
|
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
|
+
},
|
|
98
83
|
"operator_override": {
|
|
99
84
|
"four_hour_soak": "NOT_COMPLETED",
|
|
100
85
|
"stable_final_claim": false
|
|
@@ -115,6 +100,10 @@
|
|
|
115
100
|
"offline_predecessor_host_revoke_before_capture": true,
|
|
116
101
|
"status_reread_required": true,
|
|
117
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
|
|
118
107
|
}
|
|
119
108
|
},
|
|
120
109
|
"non_win32": {
|
|
@@ -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-0.15.
|
|
5
|
-
"state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.
|
|
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-0.15.
|
|
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-0.15.
|
|
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",
|
|
@@ -75,7 +75,8 @@
|
|
|
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
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"
|
|
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"
|
|
79
80
|
},
|
|
80
81
|
"bundleDependencies": [
|
|
81
82
|
"@modelcontextprotocol/server",
|
|
@@ -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 ===='
|
|
@@ -0,0 +1,76 @@
|
|
|
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.31'&&release.version===pkg.version&&release.train==='R54','R54 candidate identity mismatch');
|
|
20
|
+
insist(release.parent.version==='0.15.30','R54 source parent mismatch');
|
|
21
|
+
insist(release.parent.manifest_sha256==='ddf7c7338d9a371f5667d7b138695e7f9cfced553d14073ac5a44fd2fe0a0399','R54 source parent manifest mismatch');
|
|
22
|
+
insist(release.parent.tarball_sha256==='72881981bf76eb45527946b310caed8387943e2ca8e37ea6e606c32189dd5a70','R54 source parent tarball mismatch');
|
|
23
|
+
insist(
|
|
24
|
+
active.release_id===release.runtime_predecessor.release_id&&
|
|
25
|
+
active.manifest_sha256===release.runtime_predecessor.manifest_sha256&&
|
|
26
|
+
active.generation_manifest_sha256===release.runtime_predecessor.generation_manifest_sha256,
|
|
27
|
+
'active runtime is not exact sealed 0.15.29 predecessor'
|
|
28
|
+
);
|
|
29
|
+
insist(release.hotfix?.activation_ancestry_excluded===true,'R54 activation ancestry fix missing');
|
|
30
|
+
insist(release.hotfix?.unrelated_stale_runtime_fail_closed===true,'R54 stale-runtime negative control missing');
|
|
31
|
+
insist(provenance.operator_override?.stable_final_claim===false,'R54 must not claim stable/final');
|
|
32
|
+
insist(matrix.operator_override?.four_hour_soak==='NOT_COMPLETED','R54 matrix must preserve soak bypass');
|
|
33
|
+
|
|
34
|
+
const health=await doctor();
|
|
35
|
+
insist(health.status==='ok'&&health.package_version===pkg.version&&health.manifest?.verified===true,'R54 doctor evidence invalid');
|
|
36
|
+
|
|
37
|
+
const evidence={
|
|
38
|
+
schema:'deadbyte.r54-windows-gate.v1',
|
|
39
|
+
status:'passed',
|
|
40
|
+
exit_code:0,
|
|
41
|
+
version:pkg.version,
|
|
42
|
+
train:'R54',
|
|
43
|
+
completed_at_utc:new Date().toISOString(),
|
|
44
|
+
manifest_sha256:manifestSha256,
|
|
45
|
+
parent:release.parent,
|
|
46
|
+
runtime_predecessor:release.runtime_predecessor,
|
|
47
|
+
hotfix:release.hotfix,
|
|
48
|
+
operator_override:provenance.operator_override,
|
|
49
|
+
active_predecessor:{
|
|
50
|
+
release_id:active.release_id,
|
|
51
|
+
version:active.version,
|
|
52
|
+
manifest_sha256:active.manifest_sha256,
|
|
53
|
+
generation_manifest_sha256:active.generation_manifest_sha256
|
|
54
|
+
},
|
|
55
|
+
doctor:{verified_entries:health.manifest.verified_entries},
|
|
56
|
+
gates:{
|
|
57
|
+
r54_focused:true,
|
|
58
|
+
package_boundary:true,
|
|
59
|
+
full_regression:true,
|
|
60
|
+
manifest_final_verify:true,
|
|
61
|
+
four_hour_soak_completed:false
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const bytes=Buffer.from(JSON.stringify(evidence,null,2)+'\n');
|
|
65
|
+
const dir=path.join(stateRoot,'evidence','release');
|
|
66
|
+
await mkdir(dir,{recursive:true});
|
|
67
|
+
const target=path.join(dir,`r54-windows-gate-${manifestSha256.slice(0,16)}.json`);
|
|
68
|
+
try{
|
|
69
|
+
const handle=await open(target,'wx',0o600);
|
|
70
|
+
try{await handle.writeFile(bytes);await handle.sync();}finally{await handle.close();}
|
|
71
|
+
}catch(error){
|
|
72
|
+
if(error?.code!=='EEXIST')throw error;
|
|
73
|
+
const prior=JSON.parse(await readFile(target,'utf8'));
|
|
74
|
+
insist(prior.schema===evidence.schema&&prior.status==='passed'&&prior.version===evidence.version&&prior.manifest_sha256===manifestSha256,'conflicting R54 gate evidence identity');
|
|
75
|
+
}
|
|
76
|
+
console.log(JSON.stringify({status:'passed',path:target,sha256:sha256(bytes),manifest_sha256:manifestSha256}));
|
package/src/runtime-update.mjs
CHANGED
|
@@ -647,6 +647,35 @@ async function readLedger(ctx,name){
|
|
|
647
647
|
function sameGeneration(a,b){
|
|
648
648
|
return a.pid===b.pid&&a.instance_nonce===b.instance_nonce&&a.creation_time_utc===b.creation_time_utc&&a.image_sha256===b.image_sha256;
|
|
649
649
|
}
|
|
650
|
+
export function selectOfflineRecoveryBlockers(processes,currentPid=process.pid){
|
|
651
|
+
const list=(Array.isArray(processes)?processes:[processes]).filter(Boolean);
|
|
652
|
+
const byPid=new Map();
|
|
653
|
+
for(const item of list){
|
|
654
|
+
const pid=Number(item?.ProcessId);
|
|
655
|
+
if(Number.isInteger(pid)&&pid>0) byPid.set(pid,item);
|
|
656
|
+
}
|
|
657
|
+
const selfLineage=new Set();
|
|
658
|
+
let cursor=Number(currentPid);
|
|
659
|
+
while(Number.isInteger(cursor)&&cursor>0&&!selfLineage.has(cursor)){
|
|
660
|
+
selfLineage.add(cursor);
|
|
661
|
+
const item=byPid.get(cursor);
|
|
662
|
+
if(!item) break;
|
|
663
|
+
const parent=Number(item?.ParentProcessId);
|
|
664
|
+
if(!Number.isInteger(parent)||parent<1||parent===cursor) break;
|
|
665
|
+
cursor=parent;
|
|
666
|
+
}
|
|
667
|
+
const runtimeNames=new Set(['node.exe','cloudflared.exe','deadbyte-tunnel-host.exe']);
|
|
668
|
+
return list.filter(item=>{
|
|
669
|
+
const pid=Number(item?.ProcessId);
|
|
670
|
+
if(selfLineage.has(pid)) return false;
|
|
671
|
+
const name=String(item?.Name??'').toLowerCase();
|
|
672
|
+
if(!runtimeNames.has(name)) return false;
|
|
673
|
+
const commandLine=String(item?.CommandLine??'').toLowerCase();
|
|
674
|
+
return commandLine.includes('deadbyte-mcp')||commandLine.includes('mcp-server.mjs')||
|
|
675
|
+
commandLine.includes('runtime-self-update.mjs')||commandLine.includes('remote-session-guardian.mjs')||
|
|
676
|
+
commandLine.includes('deadbyte-tunnel-host.exe');
|
|
677
|
+
});
|
|
678
|
+
}
|
|
650
679
|
function cleanOfflinePredecessor(ctx){
|
|
651
680
|
const runtimeRoot=path.resolve(ctx.runtime_root);
|
|
652
681
|
const blockers=[
|
|
@@ -656,19 +685,13 @@ function cleanOfflinePredecessor(ctx){
|
|
|
656
685
|
].filter(name=>existsSync(path.join(runtimeRoot,name)));
|
|
657
686
|
if(blockers.length) throw new Error('offline predecessor recovery blocked by runtime state: '+blockers.join(','));
|
|
658
687
|
|
|
659
|
-
const command="Get-CimInstance Win32_Process |
|
|
688
|
+
const command="Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,ExecutablePath,CommandLine | ConvertTo-Json -Compress";
|
|
660
689
|
const result=runCaptured(powershellPath(),['-NoLogo','-NoProfile','-Command',command],{timeoutMs:15000});
|
|
661
690
|
const text=assertRun(result,'runtime process query').trim();
|
|
662
691
|
if(text){
|
|
663
692
|
let parsed;
|
|
664
693
|
try { parsed=JSON.parse(text); } catch(error){ throw new Error('runtime process query JSON invalid: '+error.message); }
|
|
665
|
-
const
|
|
666
|
-
const relevant=processes.filter(item=>{
|
|
667
|
-
const commandLine=String(item?.CommandLine??'').toLowerCase();
|
|
668
|
-
return commandLine.includes('deadbyte-mcp')||commandLine.includes('mcp-server.mjs')||
|
|
669
|
-
commandLine.includes('runtime-self-update.mjs')||commandLine.includes('remote-session-guardian.mjs')||
|
|
670
|
-
commandLine.includes('deadbyte-tunnel-host.exe');
|
|
671
|
-
});
|
|
694
|
+
const relevant=selectOfflineRecoveryBlockers(Array.isArray(parsed)?parsed:[parsed],process.pid);
|
|
672
695
|
if(relevant.length) throw new Error('offline predecessor recovery blocked by DEADBYTE runtime processes: '+relevant.map(item=>String(item?.Name??'unknown')+'#'+String(item?.ProcessId??'?')).join(','));
|
|
673
696
|
}
|
|
674
697
|
return {
|
package/src/version.mjs
CHANGED
|
@@ -2,11 +2,13 @@ import assert from 'node:assert/strict';
|
|
|
2
2
|
import { readFile } from 'node:fs/promises';
|
|
3
3
|
import test from 'node:test';
|
|
4
4
|
|
|
5
|
-
const read
|
|
5
|
+
const read=path=>readFile(new URL(`../${path}`,import.meta.url),'utf8');
|
|
6
6
|
|
|
7
|
-
test('
|
|
8
|
-
const [pkgText,
|
|
7
|
+
test('R54 canonical Windows gate is successor-bound and preserves R53/R52/R51/R50/R49 historical gates',async()=>{
|
|
8
|
+
const [pkgText,gate,evidence,historicalR53,historicalEvidenceR53,historicalR52,historicalEvidenceR52,historicalR51,historicalEvidenceR51,historicalR50,historicalR49,deferred]=await Promise.all([
|
|
9
9
|
read('package.json'),
|
|
10
|
+
read('scripts/gate-windows-r54.ps1'),
|
|
11
|
+
read('scripts/windows-gate-evidence-r54.mjs'),
|
|
10
12
|
read('scripts/gate-windows-r53.ps1'),
|
|
11
13
|
read('scripts/windows-gate-evidence-r53.mjs'),
|
|
12
14
|
read('scripts/gate-windows-r52.ps1'),
|
|
@@ -17,31 +19,33 @@ test('R53 canonical Windows gate is successor-bound and preserves R52/R51/R50/R4
|
|
|
17
19
|
read('scripts/gate-windows-r49.ps1'),
|
|
18
20
|
read('scripts/deferred-slot-operation-r46.mjs')
|
|
19
21
|
]);
|
|
20
|
-
const pkg
|
|
21
|
-
assert.match(pkg.scripts['gate:windows']
|
|
22
|
-
assert.match(gate
|
|
23
|
-
assert.match(gate
|
|
24
|
-
assert.match(gate
|
|
25
|
-
assert.match(gate
|
|
26
|
-
assert.match(gate
|
|
27
|
-
assert.match(gate
|
|
28
|
-
assert.match(evidence
|
|
29
|
-
assert.match(evidence
|
|
30
|
-
assert.match(evidence
|
|
31
|
-
assert.match(evidence
|
|
32
|
-
assert.match(evidence
|
|
33
|
-
assert.match(
|
|
34
|
-
assert.match(
|
|
35
|
-
assert.match(
|
|
36
|
-
assert.match(
|
|
37
|
-
assert.match(
|
|
38
|
-
assert.match(
|
|
39
|
-
assert.match(
|
|
40
|
-
assert.match(
|
|
41
|
-
assert.match(deferred
|
|
42
|
-
assert.match(deferred,
|
|
43
|
-
assert.match(deferred
|
|
44
|
-
assert.match(deferred,
|
|
45
|
-
assert.match(deferred
|
|
46
|
-
assert.
|
|
22
|
+
const pkg=JSON.parse(pkgText);
|
|
23
|
+
assert.match(pkg.scripts['gate:windows'],/gate-windows-r54\.ps1$/);
|
|
24
|
+
assert.match(gate,/DEADBYTE 0\.15\.31 \/ R54 WINDOWS GATE: PASS/);
|
|
25
|
+
assert.match(gate,/r54-package-boundary/);
|
|
26
|
+
assert.match(gate,/r54-focused-contracts/);
|
|
27
|
+
assert.match(gate,/full-regression/);
|
|
28
|
+
assert.match(gate,/manifest-verify/);
|
|
29
|
+
assert.match(gate,/doctor/);
|
|
30
|
+
assert.match(evidence,/deadbyte\.r54-windows-gate\.v1/);
|
|
31
|
+
assert.match(evidence,/pkg\.version==='0\.15\.31'/);
|
|
32
|
+
assert.match(evidence,/release\.train==='R54'/);
|
|
33
|
+
assert.match(evidence,/release\.parent\.version==='0\.15\.30'/);
|
|
34
|
+
assert.match(evidence,/four_hour_soak_completed:false/);
|
|
35
|
+
assert.match(historicalR53,/DEADBYTE 0\.15\.30 \/ R53 WINDOWS GATE: PASS/);
|
|
36
|
+
assert.match(historicalEvidenceR53,/deadbyte\.r53-windows-gate\.v1/);
|
|
37
|
+
assert.match(historicalR52,/DEADBYTE 0\.15\.29 \/ R52 WINDOWS GATE: PASS/);
|
|
38
|
+
assert.match(historicalEvidenceR52,/deadbyte\.r52-windows-gate\.v1/);
|
|
39
|
+
assert.match(historicalR51,/DEADBYTE 0\.15\.28 \/ R51 WINDOWS GATE: PASS/);
|
|
40
|
+
assert.match(historicalEvidenceR51,/deadbyte\.r51-windows-gate\.v1/);
|
|
41
|
+
assert.match(historicalR50,/DEADBYTE 0\.15\.27 \/ R50 WINDOWS GATE: PASS/);
|
|
42
|
+
assert.match(historicalR49,/DEADBYTE 0\.15\.26 \/ R49 WINDOWS GATE: PASS/);
|
|
43
|
+
assert.match(deferred,/const expectedVersion=packageIdentity\.version/);
|
|
44
|
+
assert.match(deferred,/'--expected-version',expectedVersion/);
|
|
45
|
+
assert.match(deferred,/async function awaitHandoffCompletion/);
|
|
46
|
+
assert.match(deferred,/verifySlotUpdateEnvelope\(envelope,publicKey\)/);
|
|
47
|
+
assert.match(deferred,/active pointer does not match signed activation receipt/);
|
|
48
|
+
assert.match(deferred,/failure-receipt\.json/);
|
|
49
|
+
assert.match(deferred,/await awaitHandoffCompletion\(await runSlotUpdateCli/);
|
|
50
|
+
assert.doesNotMatch(deferred,/'--expected-version','0\.15\.5'/);
|
|
47
51
|
});
|
|
@@ -5,8 +5,10 @@ import { readFile } from 'node:fs/promises';
|
|
|
5
5
|
const root=new URL('../',import.meta.url);
|
|
6
6
|
const read=rel=>readFile(new URL(rel,root),'utf8');
|
|
7
7
|
const json=rel=>read(rel).then(JSON.parse);
|
|
8
|
+
const currentPackage=await json('package.json');
|
|
9
|
+
const r53test=currentPackage.version==='0.15.30'?test:test.skip;
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
r53test('R53 current release identity is coherent across package lock source metadata SBOM and gate',async()=>{
|
|
10
12
|
const [pkg,lock,release,provenance,matrix,sbom,versionSource]=await Promise.all([
|
|
11
13
|
json('package.json'),json('package-lock.json'),json('RELEASE.json'),json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json'),read('src/version.mjs')
|
|
12
14
|
]);
|
|
@@ -25,7 +27,7 @@ test('R53 current release identity is coherent across package lock source metada
|
|
|
25
27
|
assert.match(pkg.scripts['r53:focused:test'],/stabilization-semver\.test\.mjs/);
|
|
26
28
|
});
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
r53test('R53 lineage binds exact published 0.15.29 as parent and runtime predecessor',async()=>{
|
|
29
31
|
const [release,provenance]=await Promise.all([json('RELEASE.json'),json('PROVENANCE.json')]);
|
|
30
32
|
const parent={
|
|
31
33
|
release_id:'v0.15.29-f74eaa1b3d00e6fb',
|
|
@@ -49,7 +51,7 @@ test('R53 lineage binds exact published 0.15.29 as parent and runtime predecesso
|
|
|
49
51
|
assert.deepEqual(provenance.runtime_predecessor,parent);
|
|
50
52
|
});
|
|
51
53
|
|
|
52
|
-
|
|
54
|
+
r53test('R53 records stabilization evidence and explicit soak bypass without STABLE/FINAL claim',async()=>{
|
|
53
55
|
const [release,provenance,matrix]=await Promise.all([json('RELEASE.json'),json('PROVENANCE.json'),json('TEST-MATRIX.json')]);
|
|
54
56
|
assert.equal(release.stabilization.semver_strict_validation,true);
|
|
55
57
|
assert.equal(release.stabilization.powershell_child_environment_normalized,true);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
|
|
6
|
+
const target=process.env.R54_RUNTIME_UPDATE_PATH
|
|
7
|
+
? path.resolve(process.env.R54_RUNTIME_UPDATE_PATH)
|
|
8
|
+
: path.resolve(new URL('../src/runtime-update.mjs',import.meta.url).pathname.replace(/^\/(?:[A-Za-z]:)/,m=>m.slice(1)));
|
|
9
|
+
const runtimeUpdate=await import(pathToFileURL(target).href+'?r54='+Date.now());
|
|
10
|
+
|
|
11
|
+
test('R54 exposes behavior-testable offline recovery blocker selection',()=>{
|
|
12
|
+
assert.equal(typeof runtimeUpdate.selectOfflineRecoveryBlockers,'function');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test('R54 excludes only the current activation ancestry across non-Node wrapper processes',()=>{
|
|
16
|
+
const processes=[
|
|
17
|
+
{ProcessId:100,ParentProcessId:50,Name:'node.exe',CommandLine:'node npm-cli.js exec -- deadbyte-mcp@latest remote'},
|
|
18
|
+
{ProcessId:200,ParentProcessId:100,Name:'cmd.exe',CommandLine:'cmd /d /s /c deadbyte-mcp remote'},
|
|
19
|
+
{ProcessId:300,ParentProcessId:200,Name:'node.exe',CommandLine:'node C:\\cache\\deadbyte-mcp\\src\\deadbyte-cli.mjs remote'},
|
|
20
|
+
{ProcessId:400,ParentProcessId:300,Name:'node.exe',CommandLine:'node C:\\slot\\deadbyte-mcp\\scripts\\runtime-self-update.mjs --resume-handoff x'},
|
|
21
|
+
{ProcessId:900,ParentProcessId:1,Name:'node.exe',CommandLine:'node C:\\stale\\deadbyte-mcp\\src\\mcp-server.mjs'}
|
|
22
|
+
];
|
|
23
|
+
const blockers=runtimeUpdate.selectOfflineRecoveryBlockers(processes,400);
|
|
24
|
+
assert.deepEqual(blockers.map(item=>item.ProcessId),[900]);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('R54 does not exempt a sibling stale DEADBYTE runtime',()=>{
|
|
28
|
+
const processes=[
|
|
29
|
+
{ProcessId:100,ParentProcessId:50,Name:'node.exe',CommandLine:'node npm-cli.js exec -- deadbyte-mcp@latest remote'},
|
|
30
|
+
{ProcessId:200,ParentProcessId:100,Name:'cmd.exe',CommandLine:'cmd /d /s /c deadbyte-mcp remote'},
|
|
31
|
+
{ProcessId:300,ParentProcessId:200,Name:'node.exe',CommandLine:'node C:\\cache\\deadbyte-mcp\\src\\deadbyte-cli.mjs remote'},
|
|
32
|
+
{ProcessId:400,ParentProcessId:300,Name:'node.exe',CommandLine:'node C:\\slot\\deadbyte-mcp\\scripts\\runtime-self-update.mjs --resume-handoff x'},
|
|
33
|
+
{ProcessId:700,ParentProcessId:300,Name:'node.exe',CommandLine:'node C:\\stale\\deadbyte-mcp\\src\\mcp-server.mjs'}
|
|
34
|
+
];
|
|
35
|
+
const blockers=runtimeUpdate.selectOfflineRecoveryBlockers(processes,400);
|
|
36
|
+
assert.deepEqual(blockers.map(item=>item.ProcessId),[700]);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('R54 still blocks unrelated stale guardian, tunnel, and cloud DEADBYTE processes',()=>{
|
|
40
|
+
const processes=[
|
|
41
|
+
{ProcessId:400,ParentProcessId:300,Name:'node.exe',CommandLine:'node C:\\slot\\deadbyte-mcp\\scripts\\runtime-self-update.mjs --resume-handoff x'},
|
|
42
|
+
{ProcessId:910,ParentProcessId:1,Name:'node.exe',CommandLine:'node C:\\stale\\deadbyte-mcp\\src\\remote-session-guardian.mjs'},
|
|
43
|
+
{ProcessId:920,ParentProcessId:1,Name:'deadbyte-tunnel-host.exe',CommandLine:'C:\\stale\\deadbyte-tunnel-host.exe'},
|
|
44
|
+
{ProcessId:930,ParentProcessId:1,Name:'cloudflared.exe',CommandLine:'cloudflared tunnel --config C:\\deadbyte-mcp\\cloud.yml run'}
|
|
45
|
+
];
|
|
46
|
+
const blockers=runtimeUpdate.selectOfflineRecoveryBlockers(processes,400);
|
|
47
|
+
assert.deepEqual(blockers.map(item=>item.ProcessId),[910,920,930]);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('R54 ignores unrelated Node processes without DEADBYTE runtime identity',()=>{
|
|
51
|
+
const processes=[
|
|
52
|
+
{ProcessId:400,ParentProcessId:300,Name:'node.exe',CommandLine:'node C:\\slot\\deadbyte-mcp\\scripts\\runtime-self-update.mjs --resume-handoff x'},
|
|
53
|
+
{ProcessId:950,ParentProcessId:1,Name:'node.exe',CommandLine:'node C:\\work\\unrelated-app\\server.js'}
|
|
54
|
+
];
|
|
55
|
+
assert.deepEqual(runtimeUpdate.selectOfflineRecoveryBlockers(processes,400),[]);
|
|
56
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { readFile } from 'node:fs/promises';
|
|
4
|
+
|
|
5
|
+
const root=new URL('../',import.meta.url);
|
|
6
|
+
const read=rel=>readFile(new URL(rel,root),'utf8');
|
|
7
|
+
const json=rel=>read(rel).then(JSON.parse);
|
|
8
|
+
|
|
9
|
+
test('R54 release identity is coherent across package lock source metadata SBOM and gate',async()=>{
|
|
10
|
+
const [pkg,lock,release,provenance,matrix,sbom,versionSource]=await Promise.all([
|
|
11
|
+
json('package.json'),json('package-lock.json'),json('RELEASE.json'),json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json'),read('src/version.mjs')
|
|
12
|
+
]);
|
|
13
|
+
assert.equal(pkg.version,'0.15.31');
|
|
14
|
+
assert.equal(lock.version,pkg.version);
|
|
15
|
+
assert.equal(lock.packages[''].version,pkg.version);
|
|
16
|
+
assert.match(versionSource,/DEADBYTE_VERSION = '0\.15\.31'/);
|
|
17
|
+
assert.equal(release.version,pkg.version);
|
|
18
|
+
assert.equal(release.train,'R54');
|
|
19
|
+
assert.equal(provenance.version,pkg.version);
|
|
20
|
+
assert.equal(matrix.version,pkg.version);
|
|
21
|
+
assert.equal(matrix.train,'R54');
|
|
22
|
+
assert.equal(sbom.metadata.component.version,pkg.version);
|
|
23
|
+
assert.equal(sbom.serialNumber,'urn:cdx:deadbyte-mcp:r54:0.15.31');
|
|
24
|
+
assert.match(pkg.scripts['gate:windows'],/gate-windows-r54\.ps1/);
|
|
25
|
+
assert.match(pkg.scripts['r54:focused:test'],/r54-offline-predecessor-self-exclusion\.test\.mjs/);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('R54 source predecessor is exact immutable published 0.15.30 while runtime predecessor remains exact 0.15.29',async()=>{
|
|
29
|
+
const [release,provenance]=await Promise.all([json('RELEASE.json'),json('PROVENANCE.json')]);
|
|
30
|
+
assert.equal(release.parent.version,'0.15.30');
|
|
31
|
+
assert.equal(release.parent.release_id,'v0.15.30-ddf7c7338d9a371f');
|
|
32
|
+
assert.equal(release.parent.manifest_sha256,'ddf7c7338d9a371f5667d7b138695e7f9cfced553d14073ac5a44fd2fe0a0399');
|
|
33
|
+
assert.equal(release.parent.tarball_sha256,'72881981bf76eb45527946b310caed8387943e2ca8e37ea6e606c32189dd5a70');
|
|
34
|
+
assert.equal(release.parent.activation_status,'PUBLISHED_NOT_ACTIVATED');
|
|
35
|
+
assert.equal(release.source_predecessor.version,'0.15.30');
|
|
36
|
+
assert.equal(release.source_predecessor.tarball_sha256,release.parent.tarball_sha256);
|
|
37
|
+
assert.equal(release.source_predecessor.manifest_file_sha256,release.parent.manifest_sha256);
|
|
38
|
+
assert.deepEqual(release.runtime_predecessor,{
|
|
39
|
+
release_id:'v0.15.29-f74eaa1b3d00e6fb',
|
|
40
|
+
manifest_sha256:'f74eaa1b3d00e6fb5a36b2358efb815e3686c9fe9dbd3b84d25a713ef957748c',
|
|
41
|
+
generation_manifest_sha256:'289b4fc065de0681da6864cc1bbe09aab198ca804945ffc27c786438dad13f5a'
|
|
42
|
+
});
|
|
43
|
+
assert.equal(provenance.parent_manifest_sha256,release.parent.manifest_sha256);
|
|
44
|
+
assert.deepEqual(provenance.runtime_predecessor,release.runtime_predecessor);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('R54 records surgical activation recovery fix and preserves explicit non-final claim',async()=>{
|
|
48
|
+
const [release,provenance,matrix]=await Promise.all([json('RELEASE.json'),json('PROVENANCE.json'),json('TEST-MATRIX.json')]);
|
|
49
|
+
assert.equal(release.hotfix.activation_ancestry_excluded,true);
|
|
50
|
+
assert.equal(release.hotfix.unrelated_stale_runtime_fail_closed,true);
|
|
51
|
+
assert.equal(release.hotfix.red_parent_0_15_30,'FAIL_5_OF_5');
|
|
52
|
+
assert.equal(release.hotfix.green_r54_candidate,'PASS_5_OF_5');
|
|
53
|
+
assert.equal(release.hotfix.stable_final_claim,false);
|
|
54
|
+
assert.equal(release.stabilization.four_hour_soak,'NOT_COMPLETED_OPERATOR_BYPASS');
|
|
55
|
+
assert.equal(provenance.operator_override.four_hour_soak,'NOT_COMPLETED');
|
|
56
|
+
assert.equal(provenance.operator_override.stable_final_claim,false);
|
|
57
|
+
assert.equal(matrix.operator_override.four_hour_soak,'NOT_COMPLETED');
|
|
58
|
+
assert.equal(matrix.operator_override.stable_final_claim,false);
|
|
59
|
+
});
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schema": "deadbyte.host-policy.v2",
|
|
3
|
-
"enabled": true,
|
|
4
|
-
"arm_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.30-stabilization\\controller\\runtime\\host-arm.json",
|
|
5
|
-
"max_read_bytes": 262144,
|
|
6
|
-
"max_write_bytes": 1048576,
|
|
7
|
-
"roots": {
|
|
8
|
-
"core": {
|
|
9
|
-
"path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.30-stabilization",
|
|
10
|
-
"read": true,
|
|
11
|
-
"write": true,
|
|
12
|
-
"exec": true
|
|
13
|
-
},
|
|
14
|
-
"bridge": {
|
|
15
|
-
"path": "C:\\Users\\DEADBYTE\\Downloads\\deadbyte-chatgpt-bridge",
|
|
16
|
-
"read": true,
|
|
17
|
-
"write": true,
|
|
18
|
-
"exec": true
|
|
19
|
-
},
|
|
20
|
-
"downloads": {
|
|
21
|
-
"path": "C:\\Users\\DEADBYTE\\Downloads",
|
|
22
|
-
"read": true,
|
|
23
|
-
"write": true,
|
|
24
|
-
"exec": true
|
|
25
|
-
},
|
|
26
|
-
"projects": {
|
|
27
|
-
"path": "D:\\Projects",
|
|
28
|
-
"read": true,
|
|
29
|
-
"write": true,
|
|
30
|
-
"exec": true
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"commands": {
|
|
34
|
-
"powershell_script": {
|
|
35
|
-
"kind": "script",
|
|
36
|
-
"executable": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
|
|
37
|
-
"executable_sha256": "8bb6fa8c283b4d92120b1ef249a9b311b0f804d4cabbe9981159976c8be76a5e",
|
|
38
|
-
"root_ids": [
|
|
39
|
-
"core",
|
|
40
|
-
"bridge",
|
|
41
|
-
"downloads",
|
|
42
|
-
"projects"
|
|
43
|
-
],
|
|
44
|
-
"prefix_args": [
|
|
45
|
-
"-NoLogo",
|
|
46
|
-
"-NoProfile",
|
|
47
|
-
"-ExecutionPolicy",
|
|
48
|
-
"Bypass",
|
|
49
|
-
"-File"
|
|
50
|
-
],
|
|
51
|
-
"extensions": [
|
|
52
|
-
".ps1"
|
|
53
|
-
],
|
|
54
|
-
"timeout_ms": 120000,
|
|
55
|
-
"max_output_bytes": 1048576
|
|
56
|
-
},
|
|
57
|
-
"cmd_script": {
|
|
58
|
-
"kind": "script",
|
|
59
|
-
"executable": "C:\\WINDOWS\\system32\\cmd.exe",
|
|
60
|
-
"executable_sha256": "97ac98b1a92c286054cce55239cfccdfc23a5517bd07fe693072c9ca96c7dabb",
|
|
61
|
-
"root_ids": [
|
|
62
|
-
"core",
|
|
63
|
-
"bridge",
|
|
64
|
-
"downloads",
|
|
65
|
-
"projects"
|
|
66
|
-
],
|
|
67
|
-
"prefix_args": [
|
|
68
|
-
"/D",
|
|
69
|
-
"/S",
|
|
70
|
-
"/C"
|
|
71
|
-
],
|
|
72
|
-
"extensions": [
|
|
73
|
-
".cmd",
|
|
74
|
-
".bat"
|
|
75
|
-
],
|
|
76
|
-
"timeout_ms": 120000,
|
|
77
|
-
"max_output_bytes": 1048576
|
|
78
|
-
},
|
|
79
|
-
"node_script": {
|
|
80
|
-
"kind": "script",
|
|
81
|
-
"executable": "C:\\Program Files\\nodejs\\node.exe",
|
|
82
|
-
"executable_sha256": "9a4eb5f1c29c6a2e93852ead46b999e284a6a5ca8bab4d4e241d587d025a52de",
|
|
83
|
-
"root_ids": [
|
|
84
|
-
"core",
|
|
85
|
-
"bridge",
|
|
86
|
-
"downloads",
|
|
87
|
-
"projects"
|
|
88
|
-
],
|
|
89
|
-
"prefix_args": [
|
|
90
|
-
|
|
91
|
-
],
|
|
92
|
-
"extensions": [
|
|
93
|
-
".mjs",
|
|
94
|
-
".js"
|
|
95
|
-
],
|
|
96
|
-
"timeout_ms": 120000,
|
|
97
|
-
"max_output_bytes": 1048576
|
|
98
|
-
},
|
|
99
|
-
"powershell_inline": {
|
|
100
|
-
"kind": "inline",
|
|
101
|
-
"executable": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
|
|
102
|
-
"executable_sha256": "8bb6fa8c283b4d92120b1ef249a9b311b0f804d4cabbe9981159976c8be76a5e",
|
|
103
|
-
"root_ids": [
|
|
104
|
-
"core",
|
|
105
|
-
"bridge",
|
|
106
|
-
"downloads",
|
|
107
|
-
"projects"
|
|
108
|
-
],
|
|
109
|
-
"prefix_args": [
|
|
110
|
-
"-NoLogo",
|
|
111
|
-
"-NoProfile",
|
|
112
|
-
"-ExecutionPolicy",
|
|
113
|
-
"Bypass",
|
|
114
|
-
"-Command"
|
|
115
|
-
],
|
|
116
|
-
"timeout_ms": 120000,
|
|
117
|
-
"max_output_bytes": 1048576,
|
|
118
|
-
"max_command_chars": 32768
|
|
119
|
-
},
|
|
120
|
-
"cmd_inline": {
|
|
121
|
-
"kind": "inline",
|
|
122
|
-
"executable": "C:\\WINDOWS\\system32\\cmd.exe",
|
|
123
|
-
"executable_sha256": "97ac98b1a92c286054cce55239cfccdfc23a5517bd07fe693072c9ca96c7dabb",
|
|
124
|
-
"root_ids": [
|
|
125
|
-
"core",
|
|
126
|
-
"bridge",
|
|
127
|
-
"downloads",
|
|
128
|
-
"projects"
|
|
129
|
-
],
|
|
130
|
-
"prefix_args": [
|
|
131
|
-
"/D",
|
|
132
|
-
"/S",
|
|
133
|
-
"/C"
|
|
134
|
-
],
|
|
135
|
-
"timeout_ms": 120000,
|
|
136
|
-
"max_output_bytes": 1048576,
|
|
137
|
-
"max_command_chars": 32768
|
|
138
|
-
},
|
|
139
|
-
"node_inline": {
|
|
140
|
-
"kind": "inline",
|
|
141
|
-
"executable": "C:\\Program Files\\nodejs\\node.exe",
|
|
142
|
-
"executable_sha256": "9a4eb5f1c29c6a2e93852ead46b999e284a6a5ca8bab4d4e241d587d025a52de",
|
|
143
|
-
"root_ids": [
|
|
144
|
-
"core",
|
|
145
|
-
"bridge",
|
|
146
|
-
"downloads",
|
|
147
|
-
"projects"
|
|
148
|
-
],
|
|
149
|
-
"prefix_args": [
|
|
150
|
-
"-e"
|
|
151
|
-
],
|
|
152
|
-
"timeout_ms": 120000,
|
|
153
|
-
"max_output_bytes": 1048576,
|
|
154
|
-
"max_command_chars": 32768
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
"native_exec": {
|
|
158
|
-
"enabled": true,
|
|
159
|
-
"root_ids": [
|
|
160
|
-
"core",
|
|
161
|
-
"bridge",
|
|
162
|
-
"downloads",
|
|
163
|
-
"projects"
|
|
164
|
-
],
|
|
165
|
-
"timeout_ms": 120000,
|
|
166
|
-
"max_output_bytes": 1048576,
|
|
167
|
-
"max_args": 64,
|
|
168
|
-
"max_arg_chars": 8192
|
|
169
|
-
}
|
|
170
|
-
}
|