deadbyte-mcp 0.15.26 → 0.15.27

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.
@@ -0,0 +1,4 @@
1
+ @echo off
2
+ setlocal EnableExtensions DisableDelayedExpansion
3
+ call "%~dp0controller\DEADBYTE-MCP.cmd" %*
4
+ exit /b %ERRORLEVEL%
package/MANIFEST.SHA256 CHANGED
@@ -56,6 +56,7 @@ d274b099a298c1033fea8f1e8849751693bbc0448778d619400acb82d4f53a3b controller/dea
56
56
  e9baf9abf4410ff8bd0f68e6b957dbbf9790fc88d9126311c5c135e943424952 DEADBYTE-MCP-R27-FINAL/R27-CLEANUP-FINAL-RECEIPT.json
57
57
  39cb483c0897af5027bf1790a35a4c3b9a8cd5f6e3a2e0440787615f69cd14b2 DEADBYTE-MCP-R27-FINAL/R27-FINAL-CLOSURE.json
58
58
  9aaf6d07e7511a1f0046ee8cc731d4b9660bbbf47dcea785a9c6b6cec95640bc DEADBYTE-MCP-R27-FINAL/R27-SLOT-UPDATE-RECEIPT.json
59
+ 79d7cf101e6890acd4d36ec8e3773ec8434b67bfe01b8aab7e00b5c80e9a7f87 DEADBYTE-MCP.cmd
59
60
  7994082e4340b5f43272e8cb111ce54043af64dc3a04d5279e251f3dae16f654 docs/ADR-0001-PRODUCTION-BASELINE-SEAMS.md
60
61
  c945b519454c6cb4c89a2b432a3f7ad29a5e7d4bc1db638972104f0093639b18 docs/ARCHITECTURE.md
61
62
  3f455f407933d8e044682f3415bdb51e68d7c4b508411dda7d8ed65b6e1d7e79 docs/AUTHORITY.md
@@ -1338,7 +1339,7 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
1338
1339
  f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
1339
1340
  51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
1340
1341
  3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
1341
- d16f408d918a1c91063956e27c35b0b326fa38fa03a95fecfe9b8fbf3c04ad15 package.json
1342
+ 1b90040b11d1b042656ff077ec2c037bfe0044f252c594cd9cbfb7d7c66d382f package.json
1342
1343
  872947dffd89755b03558b217129f009dc9f4fd1ce55e93c602fc6ea97ba8b48 proof/commander-closure-20260927/CONTINUATION.json
1343
1344
  2959980d295814aaa0df71fdb358d2cbfd01c1357ee36ef6b10c149875bdb262 proof/commander-closure-20260927/RESULT.json
1344
1345
  2c2866309ca3a6fc8de5b03d445f1dcf0778474fa25cefb822b2ab729bc91c62 proof/commander-closure-20260927/SEARCH-CONTINUATION.json
@@ -1403,7 +1404,7 @@ d433aaea5cccd1e184775ac4d915f34e0b39c6c99916dddd009731ad5fd6443f proof/V073-WIN
1403
1404
  bd0773a9e02e8ab11475c9cc5a7db29a8313233b7eab7f837922737e75ec5938 proof/VERIFY.txt
1404
1405
  2c821808d4596965c577f40191daee224d3aea81989778c4af97f53a83b487db proof/WINDOWS-CONTAINED-STATUS.txt
1405
1406
  f8bc839c7b4fcb0ea7b7e7ad9448847c3beae6f95f2eb4d407d1b284aaa4ff68 proof/WINDOWS-CONTAINMENT-STATUS.txt
1406
- 5ddf32cbdbd75da1d79b221673cfd9aaaac02b3b9b643d49bf85504e46cce127 PROVENANCE.json
1407
+ 1002cd1721f3af6c5adef6c64c0e336454f58fa7ea68b6e619e0740e987dd4b7 PROVENANCE.json
1407
1408
  27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
1408
1409
  0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
1409
1410
  bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
@@ -1412,9 +1413,9 @@ f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.jso
1412
1413
  731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
1413
1414
  d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
1414
1415
  3dc607603fea511e2f428e9546a875ab7e38b6a0bbd5e803e4510de082f30804 R49-PARENT.json
1415
- 69e9cccfdc0b5c24bca6a1390bc09abf663868772d954330591b73f37e53e143 README.txt
1416
- a2663c5c15243f5b95daa78e9bbfca47b2d2650b8e57e53ca3e46372a2060cad RELEASE.json
1417
- 80fc11669ca4aa10d51f9cf1afacf03aa558cd30fab4275d77d8a3285d7dfce5 SBOM.cdx.json
1416
+ 335019064f8365f86411f2d4657e96c3f05b18a68d8d966fa928bdadd914be2c README.txt
1417
+ 6651133e13cfee8e24d1faca0fe7302288afb5bd98c0b76126c32af2e2713076 RELEASE.json
1418
+ 4229644f54f475d7486132df06042145a505569370396c6c822da5660e00a021 SBOM.cdx.json
1418
1419
  7c86062c4f69db3179a129d65945ccfab1b1c1c5bcc29b91383eac097d50f2aa scripts/activate-skill-creator-1.1.1.mjs
1419
1420
  bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
1420
1421
  8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
@@ -1506,6 +1507,7 @@ a0ad824eed1d8be051d5f731579f9bf4115b311f202b75ea0d03aa257b13a671 scripts/gate-w
1506
1507
  00a3fc5aa75763c40ff0e09173091168903eb7fcae0ce164e51876569a4e2ff1 scripts/gate-windows-r46.ps1
1507
1508
  e2d555bfcdc1464834cd6541753a7edc9845fc4a72761c2ec9f2d75991616b2d scripts/gate-windows-r48.ps1
1508
1509
  a76505b4a2e7702e7d61a3ae799e5fa297ced7006dc1a1df8b65d5ed1cd7604b scripts/gate-windows-r49.ps1
1510
+ a62d69eea0c9db8778cd1551185ff6721ee6390d91afcb6863aecb75f9f422d1 scripts/gate-windows-r50.ps1
1509
1511
  9a085b34b9e54023eb0efadcea1e74a1bef44b984105d064768d66910999173e scripts/gate-windows.ps1
1510
1512
  9e625bdc701298c05eb2a63c208d023a487a1baf306c05940eb29c19fb1d6544 scripts/init-desktop-policy-r40.ps1
1511
1513
  01451045bff624a157e7eea79afd7edfa8cb8212ea0256c8ec744fe1e1b269ff scripts/init-host-policy.ps1
@@ -1593,6 +1595,7 @@ d05fd67d62005aebf3cd2daf1e67f0550d124a2068baf9aa0550afb7de26f440 scripts/window
1593
1595
  536f36b6d4cd86b9f874f6b8c0599d752d9efa69a2691f8971ee4b0d317c9739 scripts/windows-gate-evidence-r46.mjs
1594
1596
  f344639080f68b7da5cda765b518e0fb91bc8818229b6f460e82b173018ad30c scripts/windows-gate-evidence-r48.mjs
1595
1597
  6fc6c98fe0ccb06891227703196743cd22135934603e600f9c6a0cb86400934b scripts/windows-gate-evidence-r49.mjs
1598
+ 31ddb34208af0ab0d65fbb4a59db43a2428a06720aeb38b040ac211c9e838ed4 scripts/windows-gate-evidence-r50.mjs
1596
1599
  2255b8eb78ca61267df54448560a671357f04893b6bb1df27b8b9fc8a944d255 scripts/windows-gate-evidence.mjs
1597
1600
  105a5c6dcd54e4fabb416df9eaac093654f3ea39c4233a56e0bc6d53371b2128 scripts/workload-contract-regression-r47.mjs
1598
1601
  c32cb9054a1b9641ae071c00622c0054272bdb0b519ea22c4ff926a1600a2b46 scripts/workload-stream-regression.mjs
@@ -1775,11 +1778,11 @@ bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init
1775
1778
  aa765e9a28c69ff58a5b5a0d29b49ea181af4db9076633b102dbca25861e708e src/tunnel-stdio-compat.mjs
1776
1779
  642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
1777
1780
  8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
1778
- f2c7fed24616ee3986a400a9d6695eca62c5fad409cb263293c0c7ebc9cdd9dd src/version.mjs
1781
+ cfbd76b3c1ff33e8686aa0f27beeca8ef84b3752084508eda2ffe81f62f383e7 src/version.mjs
1779
1782
  7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
1780
1783
  76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
1781
1784
  4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
1782
- 3562b159a7bad028d69252a72ee1e8ba33c8158b38e4330821486ae65367e88e TEST-MATRIX.json
1785
+ 588aef615e8e663c9550d1ed36d579bf96c887d2771f96b17bbbcc4e0666a339 TEST-MATRIX.json
1783
1786
  e4f1fb97545f23772ddff28ad3f9954a4714f9854062fca62e0e12c1cb2ec4ae test/agent-backend-r44.test.mjs
1784
1787
  2a78c818058b25efdc143a3a97c832da231ccd6ff9d90c7796d681a0251b85c4 test/agent-crash-child.mjs
1785
1788
  d9461ab7c118ee75d37a2d6f5e637d7e43505af6a9ad8c7ddafffc8ace185a5b test/agent-crash-worker.mjs
@@ -1983,7 +1986,7 @@ a113ee9c06d38c5f674c369a950704ad00a84a45ee56b873143db3ac2154dd0f test/observati
1983
1986
  ea60bf617122536ed10f546dc660491522e79c70a05d827efe5b50f09de5711f test/operation-history.test.mjs
1984
1987
  874924c2d2e4073b1032e3e4a81af809efd2919044e19c0f862535a2d7442392 test/operation-lifecycle.test.mjs
1985
1988
  77ec02d6826e1006aa6dc2f09d46783c22f10ba0a8ee0cfe0238c2b66887ee0e test/output-schema.test.mjs
1986
- b25e37f3224fc63b020a84468b8955a5de68c7f2751c88de23832c23e343fea3 test/package-boundary.test.mjs
1989
+ 3c73352548e7fe83d6c39ccd057fc36aae217f9e0a7808883326528466d7772d test/package-boundary.test.mjs
1987
1990
  8f28e3990b79cc58bf52a646a88f374270396c9bc8738f5eceb156f721ae8a81 test/process-longrun-r36.test.mjs
1988
1991
  ddac61c12ab29be1736885c01c999ca0346ba44c712cc2c8a48a7eea1ed62a53 test/process-mcp-tools.test.mjs
1989
1992
  b84622d07d2ecfe27b55e45f7e89949f29a2d14184d8c6f6f82ed7f1e5fa59be test/process-native.test.mjs
@@ -2021,9 +2024,9 @@ d8f544bbcdfff61f7abb7705ad7e5e1f17998f5fde3c114fb33915fc66d1408f test/r41-final
2021
2024
  2c5f2093b945c267c8d09cd2da0875c7f45911a7c01aa02a50cd64c2c1a7ccdc test/r45-autonomous-quick-test.test.mjs
2022
2025
  532075c86893caf68a2d0ea09171bee4c7d60892c1892011285376a2c186ed92 test/r45-finalization.test.mjs
2023
2026
  25a21ccffcf566b020b8f3c6c0a5a3b7ff06b243fff84e405207e458640ba487 test/r47-release-contract.test.mjs
2024
- 85e15fdc44b80149fe1947b66f4475150b24f1c5bfdb805e1f6341529197b831 test/r48-release-contract.test.mjs
2027
+ 0f5c469d07748cb0b828b2fa4e80380ff780f95617ff18c9fd1bb8de5d747fbd test/r48-release-contract.test.mjs
2025
2028
  ec6fc253774c318b048dc943c83b496f942d8dd034f6db9439a99a46ae3a6158 test/r49-remote-control-donors.test.mjs
2026
- 2a91b31ca8dae3041b112fb260924d528193914b457de186c3803df219d5b8ec test/r49-windows-gate.test.mjs
2029
+ cbff58e466ea8d41c339202532eec341ece481eece2be97cc65f091a7f3c2ca8 test/r49-windows-gate.test.mjs
2027
2030
  e45a6cd299d8d65bdeb9bc0117ce1eb2b47fdebad89a02413ee979c9d0ae3a5c test/release-activation-gate.test.mjs
2028
2031
  85f6dc2059fd19d03452309ffe67bed5b87da8e6f0ce3a85cab58cba8b197ceb test/release-generation.test.mjs
2029
2032
  bb58887a2c393cd5aac3fa3bb3a04de2704bd2a30dd2083ea638543485fa7e60 test/release-manifest-windows.test.mjs
package/PROVENANCE.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "schema": "deadbyte.provenance.v1",
3
- "version": "0.15.26",
4
- "builder": "deadbyte-r49-bounded-semantic-desktop-wait",
5
- "source_model": "immutable published 0.15.25 parent -> six byte-pinned remote-control donor audits -> native bounded semantic Desktop wait -> RED/GREEN focused proof -> full R49 regression -> MANIFEST.SHA256 -> immutable release slot -> generation bundle -> signed machine truth",
3
+ "version": "0.15.27",
4
+ "builder": "deadbyte-r50-public-package-boundary-hotfix",
5
+ "source_model": "immutable published 0.15.26 parent -> registry-artifact RED proof -> canonical Windows launcher pack-boundary fix -> focused GREEN -> full R50 regression -> MANIFEST.SHA256 -> immutable release slot -> generation bundle -> signed machine truth",
6
6
  "signing": "ed25519",
7
- "parent_release_id": "v0.15.25-7ed657b1aa038ee6",
8
- "parent_manifest_sha256": "7ed657b1aa038ee679ff081f1a83c421a5eeb5fc7ea6b746e0f661079b69b319",
9
- "parent_generation_manifest_sha256": "c9763738e27ec39b1180473995f2af088d85293a94f5693abd6a843e09cecec9",
10
- "source_predecessor_version": "0.15.25",
11
- "source_predecessor_tarball_sha256": "0410b41b3c891210262a4db793ee3b339862472ef069f881c9e092c1083ba6d2",
12
- "source_predecessor_manifest_file_sha256": "7ed657b1aa038ee679ff081f1a83c421a5eeb5fc7ea6b746e0f661079b69b319",
7
+ "parent_release_id": "v0.15.26-669ea65d2307ee2c",
8
+ "parent_manifest_sha256": "669ea65d2307ee2cce06be960e0a8c7243dc6135f7f129a88d99f53096433cc8",
9
+ "parent_generation_manifest_sha256": "08364adaf1dab9730c314e29121632c6371ed76fc677e83cb7f6aa6b244eab94",
10
+ "source_predecessor_version": "0.15.26",
11
+ "source_predecessor_tarball_sha256": "3272679e3a18610d47e83dc8d3161e949d75a57da145a43c2ab50c865a83bb86",
12
+ "source_predecessor_manifest_file_sha256": "669ea65d2307ee2cce06be960e0a8c7243dc6135f7f129a88d99f53096433cc8",
13
13
  "commander_reference_version": "0.2.51",
14
14
  "commander_reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
15
15
  "commander_reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140",
16
16
  "predecessor_r48_full_regression_task_receipt_sha256": "7711039e4807f6c2af02bbda897d0032b067e0a6631f789fd3bf801258160d3f",
17
- "reproducibility": "candidate source bound to exact immutable published 0.15.25 predecessor and six donor commits; fresh R49 full-regression, manifest, package, activation, rollback and restore proof remain mandatory before release"
17
+ "reproducibility": "candidate source bound to exact immutable published 0.15.26 predecessor and registry round-trip bytes; fresh R50 full-regression, manifest, package, activation, rollback and restore proof remain mandatory before release"
18
18
  }
package/README.txt CHANGED
@@ -1,4 +1,4 @@
1
- DEADBYTE MCP V0.15.26 / R49 BOUNDED SEMANTIC DESKTOP WAIT CANDIDATE
1
+ DEADBYTE MCP V0.15.27 / R50 PUBLIC PACKAGE BOUNDARY HOTFIX CANDIDATE
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.26 mcp
11
- npx -y deadbyte-mcp@0.15.26 remote
12
- npx -y deadbyte-mcp@0.15.26 remote status
13
- npx -y deadbyte-mcp@0.15.26 remote restart
14
- npx -y deadbyte-mcp@0.15.26 audit status
15
- npx -y deadbyte-mcp@0.15.26 audit verify
10
+ npx -y deadbyte-mcp@0.15.27 mcp
11
+ npx -y deadbyte-mcp@0.15.27 remote
12
+ npx -y deadbyte-mcp@0.15.27 remote status
13
+ npx -y deadbyte-mcp@0.15.27 remote restart
14
+ npx -y deadbyte-mcp@0.15.27 audit status
15
+ npx -y deadbyte-mcp@0.15.27 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,14 @@ 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
+ R50 PUBLIC PACKAGE BOUNDARY HOTFIX
33
+ ----------------------------------
34
+ 0.15.26 is immutable and remains valid as a published historical release, but its npm tarball omitted the
35
+ canonical top-level DEADBYTE-MCP.cmd compatibility launcher because the package-ignore boundary matched all
36
+ top-level DEADBYTE-MCP*.cmd wrappers. R50 narrows that boundary: DEADBYTE-MCP.cmd is shipped, while local and
37
+ shadow wrappers remain excluded. A pack-boundary regression now verifies this exact file surface before publish.
38
+ No R49 runtime semantics are widened by this hotfix.
39
+
32
40
  R49 BOUNDED SEMANTIC DESKTOP WAIT
33
41
  ----------------------------------
34
42
  `desktop_wait` replaces blind fixed sleeps with a bounded, read-only observation loop. It can wait for
package/RELEASE.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "schema": "deadbyte.release.v1",
3
3
  "name": "deadbyte-mcp",
4
- "version": "0.15.26",
5
- "train": "R49",
6
- "label": "BOUNDED SEMANTIC DESKTOP WAIT + REMOTE CONTROL HARDENING",
4
+ "version": "0.15.27",
5
+ "train": "R50",
6
+ "label": "PUBLIC PACKAGE BOUNDARY HOTFIX",
7
7
  "protocol_revision": "2026-07-28",
8
8
  "parent": {
9
- "release_id": "v0.15.25-7ed657b1aa038ee6",
10
- "manifest_sha256": "7ed657b1aa038ee679ff081f1a83c421a5eeb5fc7ea6b746e0f661079b69b319",
11
- "generation_manifest_sha256": "c9763738e27ec39b1180473995f2af088d85293a94f5693abd6a843e09cecec9"
9
+ "release_id": "v0.15.26-669ea65d2307ee2c",
10
+ "manifest_sha256": "669ea65d2307ee2cce06be960e0a8c7243dc6135f7f129a88d99f53096433cc8",
11
+ "generation_manifest_sha256": "08364adaf1dab9730c314e29121632c6371ed76fc677e83cb7f6aa6b244eab94"
12
12
  },
13
13
  "source_predecessor": {
14
- "version": "0.15.25",
15
- "tarball_sha256": "0410b41b3c891210262a4db793ee3b339862472ef069f881c9e092c1083ba6d2",
16
- "manifest_file_sha256": "7ed657b1aa038ee679ff081f1a83c421a5eeb5fc7ea6b746e0f661079b69b319",
14
+ "version": "0.15.26",
15
+ "tarball_sha256": "3272679e3a18610d47e83dc8d3161e949d75a57da145a43c2ab50c865a83bb86",
16
+ "manifest_file_sha256": "669ea65d2307ee2cce06be960e0a8c7243dc6135f7f129a88d99f53096433cc8",
17
17
  "reference_package": "@wonderwhy-er/desktop-commander@0.2.51",
18
18
  "reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
19
19
  "reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
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:r49:0.15.26",
4
+ "serialNumber": "urn:cdx:deadbyte-mcp:r50:0.15.27",
5
5
  "version": 1,
6
6
  "metadata": {
7
7
  "component": {
8
8
  "type": "application",
9
9
  "name": "deadbyte-mcp",
10
- "version": "0.15.26"
10
+ "version": "0.15.27"
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.26",
37
+ "version": "0.15.27",
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.26",
4
- "train": "R49",
3
+ "version": "0.15.27",
4
+ "train": "R50",
5
5
  "primary_platform": "win32-x64",
6
6
  "reference": {
7
7
  "package": "@wonderwhy-er/desktop-commander",
@@ -10,6 +10,8 @@
10
10
  "schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
11
11
  },
12
12
  "required": [
13
+ {"id":"package-boundary","command":"node --test test/package-boundary.test.mjs","expected":"PASS canonical top-level DEADBYTE-MCP.cmd included; local/shadow wrappers excluded"},
14
+ {"id":"release-smoke","command":"node --test test/release-smoke-isolation.test.mjs","expected":"PASS"},
13
15
  {"id":"capability-authority-truth","command":"node --test test/capability-resolver.test.mjs","expected":"PASS authority-state manifest truth"},
14
16
  {"id":"compact-authority-truth","command":"node --test test/compact-max-catalog-r45.test.mjs","expected":"PASS real compact stdio authority-state manifest truth"},
15
17
  {"id":"native-windows-observation","command":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-hardware-r45.ps1","expected":"PASS native Windows observation build/query gate"},
@@ -20,13 +22,11 @@
20
22
  {"id":"commander-protocol-adversarial","command":"node --test test/commander-protocol-adversarial-r48.test.mjs","expected":"PASS malformed JSON, invalid request, unknown method/tool, duplicate IDs and concurrent correlation"},
21
23
  {"id":"r48-release","command":"npm run r48:release:test","expected":"PASS"},
22
24
  {"id":"full-regression","command":"npm run r48:full:test","expected":"PASS"},
23
- {"id":"package-boundary","command":"node --test test/package-boundary.test.mjs","expected":"PASS"},
24
- {"id":"release-smoke","command":"node --test test/release-smoke-isolation.test.mjs","expected":"PASS"},
25
25
  {"id":"runtime-update","command":"node --test test/runtime-self-update.test.mjs","expected":"PASS"},
26
26
  {"id":"audit","command":"npm audit --omit=dev","expected":"0 vulnerabilities"},
27
- {"id":"activation","command":"npx -y deadbyte-mcp@0.15.26 remote status","expected":"active runtime 0.15.26 with no VERSION SKEW"},
28
- {"id":"machine-truth","command":"signed machine_ping","expected":"release_id and manifests bind activated 0.15.26 generation"},
29
- {"id":"rollback-restore","command":"immutable slot rollback/restore","expected":"0.15.26 -> exact 0.15.25 -> exact 0.15.26"}
27
+ {"id":"activation","command":"npx -y deadbyte-mcp@0.15.27 remote status","expected":"active runtime 0.15.27 with no VERSION SKEW"},
28
+ {"id":"machine-truth","command":"signed machine_ping","expected":"release_id and manifests bind activated 0.15.27 generation"},
29
+ {"id":"rollback-restore","command":"immutable slot rollback/restore","expected":"0.15.27 -> exact 0.15.26 -> exact 0.15.27"}
30
30
  ],
31
31
  "focused_proof": {
32
32
  "raw_mcp_protocol": {"tests":3,"pass":3,"fail":0},
@@ -41,7 +41,7 @@
41
41
  "coding_task_id": "a1a10fff1520b37ac674f1861cd9e53e64e350d5a0766639036aefe5e096e235",
42
42
  "task_receipt_sha256": "7711039e4807f6c2af02bbda897d0032b067e0a6631f789fd3bf801258160d3f",
43
43
  "action_receipt_sha256": "095c5eb4d959b9105a769649aa196a1d33f5097b899031dd16997e5ba1b352e6",
44
- "not_valid_as_r49_proof": true
44
+ "not_valid_as_r50_proof": true
45
45
  },
46
46
  "performance": {
47
47
  "fresh_cross_reference_status": "PASS_PINNED_REFERENCE_RUNTIME",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deadbyte-mcp",
3
- "version": "0.15.26",
3
+ "version": "0.15.27",
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-r49.ps1",
45
+ "gate:windows": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r50.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",
@@ -0,0 +1,56 @@
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.27 / R50 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.27 / R50 gate failed at $Name with exit code $LASTEXITCODE" }
16
+ }
17
+
18
+ Invoke-NodeTest 'r50-package-boundary' @('test/package-boundary.test.mjs')
19
+ Invoke-NodeTest 'r50-release-smoke-isolation' @('test/release-smoke-isolation.test.mjs')
20
+ Invoke-GateStep 'containment-build' @('run','containment:build')
21
+ Invoke-GateStep 'process-policy-refresh' @('run','process:policy:refresh')
22
+ Invoke-GateStep 'desktop-policy-refresh' @('run','desktop:policy:refresh')
23
+ Invoke-GateStep 'hardware-build' @('run','hardware:build')
24
+
25
+ $hostPolicy = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..\controller\deadbyte-host-policy.json'))
26
+ Remove-Item -LiteralPath $hostPolicy -Force -ErrorAction SilentlyContinue
27
+ if (Test-Path -LiteralPath $hostPolicy) { throw 'could not establish hermetic Host policy absence' }
28
+
29
+ Invoke-GateStep 'r50-release-focused' @('run','r48:release:test')
30
+ Invoke-NodeTest 'r49-donor-proof' @('test/r49-remote-control-donors.test.mjs')
31
+ Invoke-NodeTest 'r49-desktop-wait' @('test/desktop-runtime-r40.test.mjs','test/desktop-mcp-tools-r40.test.mjs','test/autonomous-desktop-r40.test.mjs')
32
+ Invoke-GateStep 'r49-catalog' @('run','r48:catalog:test')
33
+ Invoke-GateStep 'commander-hardening' @('run','r47:hardening:test')
34
+ Invoke-GateStep 'full-regression' @('run','r48:full:test')
35
+ Invoke-GateStep 'mcp-smoke' @('run','mcp:smoke')
36
+ Invoke-GateStep 'mcp-agent-smoke' @('run','mcp:agent:smoke')
37
+ Invoke-GateStep 'mcp-coding-smoke' @('run','mcp:coding:smoke')
38
+ Invoke-GateStep 'mcp-machine-fs-smoke' @('run','mcp:machine-fs:smoke')
39
+ Invoke-GateStep 'mcp-observation-smoke' @('run','mcp:observation:smoke')
40
+ Invoke-GateStep 'mcp-process-smoke' @('run','mcp:process:smoke')
41
+ Invoke-GateStep 'mcp-autonomous-smoke' @('run','mcp:autonomous:smoke')
42
+ Invoke-GateStep 'tunnel-stdio-compat-smoke' @('run','mcp:tunnel-compat:smoke')
43
+ Invoke-GateStep 'containment-smoke' @('run','containment:smoke')
44
+ Invoke-GateStep 'contained-smoke' @('run','contained:smoke')
45
+ Invoke-GateStep 'mcp-contained-smoke' @('run','mcp:contained:smoke')
46
+ Invoke-GateStep 'host-policy-refresh' @('run','host:policy:init')
47
+ Invoke-GateStep 'manifest-write' @('run','manifest:write')
48
+ Invoke-GateStep 'manifest-verify' @('run','manifest:verify')
49
+ Invoke-GateStep 'doctor' @('run','doctor')
50
+ Invoke-GateStep 'mcp-host-smoke' @('run','mcp:host:smoke')
51
+ Invoke-GateStep 'authority-smoke' @('run','authority:smoke')
52
+ Invoke-GateStep 'manifest-final-verify' @('run','manifest:verify')
53
+
54
+ & node.exe (Join-Path $PSScriptRoot 'windows-gate-evidence-r50.mjs')
55
+ if ($LASTEXITCODE -ne 0) { throw "R50 evidence writer failed with exit code $LASTEXITCODE" }
56
+ Write-Host '==== DEADBYTE 0.15.27 / R50 WINDOWS GATE: PASS ===='
@@ -0,0 +1,80 @@
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 active = JSON.parse(await readFile(path.join(stateRoot, 'active-release.json'), 'utf8'));
15
+ const manifestSha256 = sha256(await readFile(path.join(root, 'MANIFEST.SHA256')));
16
+
17
+ insist(pkg.version === '0.15.27' && release.version === pkg.version && release.train === 'R50', 'R50 candidate identity mismatch');
18
+ insist(
19
+ active.release_id === release.parent.release_id &&
20
+ active.manifest_sha256 === release.parent.manifest_sha256 &&
21
+ active.generation_manifest_sha256 === release.parent.generation_manifest_sha256,
22
+ 'active runtime is not the exact sealed R50 parent'
23
+ );
24
+
25
+ const health = await doctor();
26
+ insist(health.status === 'ok' && health.package_version === pkg.version && health.manifest?.verified === true, 'R50 doctor evidence invalid');
27
+ insist(health.policy?.host_v2_ready === true, 'R50 Host policy v2 is not ready');
28
+
29
+ const evidence = {
30
+ schema: 'deadbyte.r50-windows-gate.v1',
31
+ status: 'passed',
32
+ exit_code: 0,
33
+ version: pkg.version,
34
+ train: 'R50',
35
+ completed_at_utc: new Date().toISOString(),
36
+ manifest_sha256: manifestSha256,
37
+ parent: release.parent,
38
+ active_predecessor: {
39
+ release_id: active.release_id,
40
+ version: active.version,
41
+ manifest_sha256: active.manifest_sha256,
42
+ generation_manifest_sha256: active.generation_manifest_sha256
43
+ },
44
+ doctor: { verified_entries: health.manifest.verified_entries, host_v2_ready: true },
45
+ gates: {
46
+ package_boundary: true,
47
+ release_smoke_isolation: true,
48
+ full_regression: true,
49
+ commander_hardening: true,
50
+ donor_proof: true,
51
+ desktop_wait: true,
52
+ exact_catalog: true,
53
+ stdio_smokes: true,
54
+ manifest_final_verify: true
55
+ }
56
+ };
57
+
58
+ const bytes = Buffer.from(`${JSON.stringify(evidence, null, 2)}\n`);
59
+ const dir = path.join(stateRoot, 'evidence', 'release');
60
+ await mkdir(dir, { recursive: true });
61
+ const target = path.join(dir, `r50-windows-gate-${manifestSha256.slice(0, 16)}.json`);
62
+
63
+ try {
64
+ const handle = await open(target, 'wx', 0o600);
65
+ try { await handle.writeFile(bytes); await handle.sync(); }
66
+ finally { await handle.close(); }
67
+ } catch (error) {
68
+ if (error?.code !== 'EEXIST') throw error;
69
+ const prior = JSON.parse(await readFile(target, 'utf8'));
70
+ insist(
71
+ prior.schema === evidence.schema &&
72
+ prior.status === 'passed' &&
73
+ prior.version === evidence.version &&
74
+ prior.manifest_sha256 === manifestSha256 &&
75
+ prior.parent?.release_id === release.parent.release_id,
76
+ 'conflicting R50 gate evidence identity'
77
+ );
78
+ }
79
+
80
+ console.log(JSON.stringify({ status: 'passed', path: target, sha256: sha256(bytes), manifest_sha256: manifestSha256 }));
package/src/version.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export const DEADBYTE_VERSION = '0.15.26';
1
+ export const DEADBYTE_VERSION = '0.15.27';
2
2
  export const MCP_PROTOCOL_VERSION = '2026-07-28';
3
3
  export const RECEIPT_SCHEMA_V1 = 'deadbyte.receipt.v1';
4
4
  export const RECEIPT_SCHEMA_V2 = 'deadbyte.receipt.v2';
@@ -42,3 +42,9 @@ test('publish boundary excludes live state, private keys, grants and non-example
42
42
  const forbidden=files.filter(rel=>rel.startsWith('tmp/')||rel.startsWith('.deadbyte-machine-fs-recovery/')||/(^|\/)(active-release\.json|runtime\/|audit\/|evidence\/)|\.pem$|(^|\/)deadbyte-controller\.config\.psd1$|(^|\/)deadbyte-host-policy\.json$|(^|\/)[^/]*(?:grant|arm)\.json$/i.test(rel));
43
43
  assert.deepEqual(forbidden,[]);
44
44
  });
45
+
46
+ test('publish boundary includes only the canonical top-level Windows launcher',()=>{
47
+ const files=packFiles();
48
+ const launchers=files.filter(rel=>/^DEADBYTE-MCP.*\.cmd$/i.test(rel));
49
+ assert.deepEqual(launchers,['DEADBYTE-MCP.cmd']);
50
+ });
@@ -3,40 +3,55 @@ import assert from 'node:assert/strict';
3
3
  import { readFile } from 'node:fs/promises';
4
4
  import { DEADBYTE_VERSION } from '../src/version.mjs';
5
5
 
6
- const root=new URL('../',import.meta.url);
7
- const read=rel=>readFile(new URL(rel,root),'utf8');
6
+ const root = new URL('../', import.meta.url);
7
+ const read = rel => readFile(new URL(rel, root), 'utf8');
8
8
 
9
- test('R49 0.15.26 successor binds exact published immutable 0.15.25 parent',async()=>{
10
- const [pkg,lock,release,provenance,matrix]=await Promise.all([
9
+ test('R50 0.15.27 successor binds exact published immutable 0.15.26 parent', async () => {
10
+ const [pkg, lock, release, provenance, matrix] = await Promise.all([
11
11
  read('package.json').then(JSON.parse),
12
12
  read('package-lock.json').then(JSON.parse),
13
13
  read('RELEASE.json').then(JSON.parse),
14
14
  read('PROVENANCE.json').then(JSON.parse),
15
15
  read('TEST-MATRIX.json').then(JSON.parse)
16
16
  ]);
17
- for(const value of [pkg.version,lock.version,lock.packages[''].version,DEADBYTE_VERSION,release.version,provenance.version,matrix.version])assert.equal(value,'0.15.26');
18
- assert.equal(release.train,'R49');
19
- assert.equal(release.label,'BOUNDED SEMANTIC DESKTOP WAIT + REMOTE CONTROL HARDENING');
20
- assert.equal(release.parent.release_id,'v0.15.25-7ed657b1aa038ee6');
21
- assert.equal(release.parent.manifest_sha256,'7ed657b1aa038ee679ff081f1a83c421a5eeb5fc7ea6b746e0f661079b69b319');
22
- assert.equal(release.parent.generation_manifest_sha256,'c9763738e27ec39b1180473995f2af088d85293a94f5693abd6a843e09cecec9');
23
- assert.equal(release.source_predecessor.version,'0.15.25');
24
- assert.equal(release.source_predecessor.tarball_sha256,'0410b41b3c891210262a4db793ee3b339862472ef069f881c9e092c1083ba6d2');
25
- assert.equal(release.source_predecessor.manifest_file_sha256,'7ed657b1aa038ee679ff081f1a83c421a5eeb5fc7ea6b746e0f661079b69b319');
26
- assert.equal(release.source_predecessor.reference_server_sha256,'dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305');
27
- assert.equal(release.source_predecessor.reference_schemas_sha256,'f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140');
28
- assert.equal(release.capabilities.full_tool_count,117);
29
- assert.equal(release.capabilities.desktop_bounded_semantic_wait,true);
30
- assert.equal(release.capabilities.commander_incremental_pdf_revisions,true);
31
- assert.equal(release.capabilities.commander_docx_header_footer_search,true);
32
- assert.equal(release.capabilities.commander_directory_read_fallback,true);
33
- assert.equal(release.capabilities.commander_binary_detection,true);
34
- assert.equal(release.capabilities.commander_protocol_adversarial,true);
35
- assert.equal(release.capabilities.atomic_mutation_unknown_effect,true);
36
- assert.equal(provenance.parent_release_id,release.parent.release_id);
37
- assert.equal(provenance.parent_manifest_sha256,release.parent.manifest_sha256);
38
- assert.equal(provenance.parent_generation_manifest_sha256,release.parent.generation_manifest_sha256);
39
- assert.equal(provenance.source_predecessor_tarball_sha256,release.source_predecessor.tarball_sha256);
40
- assert.equal(matrix.predecessor_r48_full_regression_partition_proof.files,211);
41
- assert.equal(matrix.predecessor_r48_full_regression_partition_proof.not_valid_as_r49_proof,true);
17
+
18
+ for (const value of [
19
+ pkg.version,
20
+ lock.version,
21
+ lock.packages[''].version,
22
+ DEADBYTE_VERSION,
23
+ release.version,
24
+ provenance.version,
25
+ matrix.version
26
+ ]) assert.equal(value, '0.15.27');
27
+
28
+ assert.equal(release.train, 'R50');
29
+ assert.equal(release.label, 'PUBLIC PACKAGE BOUNDARY HOTFIX');
30
+ assert.equal(release.parent.release_id, 'v0.15.26-669ea65d2307ee2c');
31
+ assert.equal(release.parent.manifest_sha256, '669ea65d2307ee2cce06be960e0a8c7243dc6135f7f129a88d99f53096433cc8');
32
+ assert.equal(release.parent.generation_manifest_sha256, '08364adaf1dab9730c314e29121632c6371ed76fc677e83cb7f6aa6b244eab94');
33
+
34
+ assert.equal(release.source_predecessor.version, '0.15.26');
35
+ assert.equal(release.source_predecessor.tarball_sha256, '3272679e3a18610d47e83dc8d3161e949d75a57da145a43c2ab50c865a83bb86');
36
+ assert.equal(release.source_predecessor.manifest_file_sha256, '669ea65d2307ee2cce06be960e0a8c7243dc6135f7f129a88d99f53096433cc8');
37
+ assert.equal(release.source_predecessor.reference_server_sha256, 'dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305');
38
+ assert.equal(release.source_predecessor.reference_schemas_sha256, 'f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140');
39
+
40
+ assert.equal(release.capabilities.full_tool_count, 117);
41
+ assert.equal(release.capabilities.desktop_bounded_semantic_wait, true);
42
+ assert.equal(release.capabilities.commander_incremental_pdf_revisions, true);
43
+ assert.equal(release.capabilities.commander_docx_header_footer_search, true);
44
+ assert.equal(release.capabilities.commander_directory_read_fallback, true);
45
+ assert.equal(release.capabilities.commander_binary_detection, true);
46
+ assert.equal(release.capabilities.commander_protocol_adversarial, true);
47
+ assert.equal(release.capabilities.atomic_mutation_unknown_effect, true);
48
+
49
+ assert.equal(provenance.parent_release_id, release.parent.release_id);
50
+ assert.equal(provenance.parent_manifest_sha256, release.parent.manifest_sha256);
51
+ assert.equal(provenance.parent_generation_manifest_sha256, release.parent.generation_manifest_sha256);
52
+ assert.equal(provenance.source_predecessor_tarball_sha256, release.source_predecessor.tarball_sha256);
53
+
54
+ assert.equal(matrix.train, 'R50');
55
+ assert.equal(matrix.predecessor_r48_full_regression_partition_proof.files, 211);
56
+ assert.equal(matrix.predecessor_r48_full_regression_partition_proof.not_valid_as_r50_proof, true);
42
57
  });
@@ -1,27 +1,30 @@
1
1
  import assert from 'node:assert/strict';
2
- import {readFile} from 'node:fs/promises';
2
+ import { readFile } from 'node:fs/promises';
3
3
  import test from 'node:test';
4
4
 
5
5
  const read = path => readFile(new URL(`../${path}`, import.meta.url), 'utf8');
6
6
 
7
- test('R49 canonical Windows gate is successor-bound and preserves the R48 historical gate', async () => {
8
- const [pkgText, gate, evidence, historical, deferred] = await Promise.all([
7
+ test('R50 canonical Windows gate is successor-bound and preserves R49/R48 historical gates', async () => {
8
+ const [pkgText, gate, evidence, historicalR49, historicalR48, deferred] = await Promise.all([
9
9
  read('package.json'),
10
+ read('scripts/gate-windows-r50.ps1'),
11
+ read('scripts/windows-gate-evidence-r50.mjs'),
10
12
  read('scripts/gate-windows-r49.ps1'),
11
- read('scripts/windows-gate-evidence-r49.mjs'),
12
13
  read('scripts/gate-windows-r48.ps1'),
13
14
  read('scripts/deferred-slot-operation-r46.mjs')
14
15
  ]);
15
16
  const pkg = JSON.parse(pkgText);
16
- assert.match(pkg.scripts['gate:windows'], /gate-windows-r49\.ps1$/);
17
- assert.match(gate, /DEADBYTE 0\.15\.26 \/ R49 WINDOWS GATE: PASS/);
17
+ assert.match(pkg.scripts['gate:windows'], /gate-windows-r50\.ps1$/);
18
+ assert.match(gate, /DEADBYTE 0\.15\.27 \/ R50 WINDOWS GATE: PASS/);
19
+ assert.match(gate, /r50-package-boundary/);
18
20
  assert.match(gate, /r49-remote-control-donors\.test\.mjs/);
19
21
  assert.match(gate, /desktop-runtime-r40\.test\.mjs/);
20
22
  assert.match(gate, /manifest-final-verify/);
21
- assert.match(evidence, /deadbyte\.r49-windows-gate\.v1/);
22
- assert.match(evidence, /pkg\.version==='0\.15\.26'/);
23
- assert.match(evidence, /release\.train==='R49'/);
24
- assert.match(historical, /DEADBYTE 0\.15\.25 \/ R48 WINDOWS GATE: PASS/);
23
+ assert.match(evidence, /deadbyte\.r50-windows-gate\.v1/);
24
+ assert.match(evidence, /pkg\.version === '0\.15\.27'/);
25
+ assert.match(evidence, /release\.train === 'R50'/);
26
+ assert.match(historicalR49, /DEADBYTE 0\.15\.26 \/ R49 WINDOWS GATE: PASS/);
27
+ assert.match(historicalR48, /DEADBYTE 0\.15\.25 \/ R48 WINDOWS GATE: PASS/);
25
28
  assert.match(deferred, /const expectedVersion=packageIdentity\.version/);
26
29
  assert.match(deferred, /'--expected-version',expectedVersion/);
27
30
  assert.match(deferred, /async function awaitHandoffCompletion/);