deadbyte-mcp 0.15.24 → 0.15.25

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 CHANGED
@@ -1336,12 +1336,12 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
1336
1336
  f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
1337
1337
  51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
1338
1338
  3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
1339
- 5ad33f4f7935d2138645ad2a09d0dc250ed1f37636cea85b5e649f092e9c2d87 package.json
1339
+ 031ffd3142b95fb18a6e21ee49c6369057aa7cdf0fb7067bda70de9d2bc9e91c package.json
1340
1340
  872947dffd89755b03558b217129f009dc9f4fd1ce55e93c602fc6ea97ba8b48 proof/commander-closure-20260927/CONTINUATION.json
1341
1341
  2959980d295814aaa0df71fdb358d2cbfd01c1357ee36ef6b10c149875bdb262 proof/commander-closure-20260927/RESULT.json
1342
1342
  2c2866309ca3a6fc8de5b03d445f1dcf0778474fa25cefb822b2ab729bc91c62 proof/commander-closure-20260927/SEARCH-CONTINUATION.json
1343
1343
  c897727b13b10041067cd061f552dc8933e20cb085a7d8df7fe8ed2e5972fac7 proof/commander-closure-20260927/XLS-REFERENCE-PROBE.json
1344
- a72384b279c7fceec700c93f3d95a7ec66ec053dd49480b244c8e9b09a8de8a4 proof/commander-closure-20260928/DIFFERENTIAL-CHECKPOINT.json
1344
+ db86fe94947fa02a19b15426507fbac7d9df6092170416efe5e7bce0d3d28607 proof/commander-closure-20260928/DIFFERENTIAL-CHECKPOINT.json
1345
1345
  8177e3a354721a73df889f386a97e7744a2e017d150aecf4bf309f5177d18690 proof/CONTAINMENT-BUILD.txt
1346
1346
  a8efa13e44ff50902aee64cfca542d19605a1ae23db95280ad2d44b324f3eae7 proof/MCP-SMOKE-STATUS.txt
1347
1347
  7c115069cc4a343ca21b0ebdee74bd8f544b02d4aa906ffa13308725825d891a proof/NODE-SYNTAX.txt
@@ -1401,7 +1401,7 @@ d433aaea5cccd1e184775ac4d915f34e0b39c6c99916dddd009731ad5fd6443f proof/V073-WIN
1401
1401
  bd0773a9e02e8ab11475c9cc5a7db29a8313233b7eab7f837922737e75ec5938 proof/VERIFY.txt
1402
1402
  2c821808d4596965c577f40191daee224d3aea81989778c4af97f53a83b487db proof/WINDOWS-CONTAINED-STATUS.txt
1403
1403
  f8bc839c7b4fcb0ea7b7e7ad9448847c3beae6f95f2eb4d407d1b284aaa4ff68 proof/WINDOWS-CONTAINMENT-STATUS.txt
1404
- 2975f3e84672f90601fb6048cb92d2fb5a7b294427e469a7d948c84df1a418c6 PROVENANCE.json
1404
+ 5aec9f09e147d8d815bb099285b66380bae1a999e65cb827261f2c6301901af1 PROVENANCE.json
1405
1405
  27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
1406
1406
  0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
1407
1407
  bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
@@ -1409,8 +1409,8 @@ bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.jso
1409
1409
  f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.json
1410
1410
  731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
1411
1411
  d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
1412
- 4651b8555736feec78f88f3b2ee5f118af0a8cad979d1b9552405f341a73c802 README.txt
1413
- b06add84caa714fa0d2d4828fed9098fc7fc60ff49420aa9f75057e6aaafc13e RELEASE.json
1412
+ e236c6159a69ea654897e23987434f9c15c2a3b062f50632f177f22bf775b9cc README.txt
1413
+ 22941f9c86ae48570209218de5d34f6e95fa8b6e3d6bd9f1a87337d3b8ee6674 RELEASE.json
1414
1414
  d3f8aee77f036e59951d56ab95fda98a050017fba7be8cf178761eb3236383a4 SBOM.cdx.json
1415
1415
  7c86062c4f69db3179a129d65945ccfab1b1c1c5bcc29b91383eac097d50f2aa scripts/activate-skill-creator-1.1.1.mjs
1416
1416
  bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
@@ -1432,7 +1432,7 @@ fc2cedd94892b0639075e03e8d0fe92cdd3bc964ab88f70b2c6474202d31a6d3 scripts/check-
1432
1432
  d67037522c81ff1946cac4a33b2ffc1fc7792be8aeb8bae768f4b71665511233 scripts/check-process-deadline-r46.mjs
1433
1433
  8dacedabbf6e698bcbe87fb92f210245e71bd959542843042cfc953d65923f63 scripts/check-r46-background.mjs
1434
1434
  7d3c741de2b1c29f82efa96ab81fc819d8520f97413ce5ab0d4a1b1efd0e8b42 scripts/coding-live-smoke.mjs
1435
- 13dff10a4c75eb829fb98ce6a182eba69ce45dc3c87c38270365cdc1b161803b scripts/commander-hardening-gate-r47.mjs
1435
+ 6d6e18b2a17448dad569dfbf60ac103c6c8bcfe73c49af93506816c3c0b7fe73 scripts/commander-hardening-gate-r47.mjs
1436
1436
  51ab687334db36641cd3a73e58ea6dbbbe9914c79ea98c65f0b91e157563c4fe scripts/commander-parity-benchmark.mjs
1437
1437
  d7806aa408dc7ca74f05feec535ad6cc545f8c61892c51f0fe388bb13d975290 scripts/commander-real-performance-benchmark-r47.mjs
1438
1438
  254872f5f1f2fa662b1061aad4c3da59b21d882e45f7f0ceefff2f688ea493a1 scripts/deferred-slot-operation-r37-0110.mjs
@@ -1501,16 +1501,17 @@ a0ad824eed1d8be051d5f731579f9bf4115b311f202b75ea0d03aa257b13a671 scripts/gate-w
1501
1501
  7489fd39491c8ee496bfae08819b2502dbbefd6c47b19a0146d08d203170c07b scripts/gate-windows-r44.ps1
1502
1502
  500b330c6d14afb1162d28efb9b99e75cec9f702a67b6b936449943c908177a9 scripts/gate-windows-r45.ps1
1503
1503
  00a3fc5aa75763c40ff0e09173091168903eb7fcae0ce164e51876569a4e2ff1 scripts/gate-windows-r46.ps1
1504
+ e2d555bfcdc1464834cd6541753a7edc9845fc4a72761c2ec9f2d75991616b2d scripts/gate-windows-r48.ps1
1504
1505
  9a085b34b9e54023eb0efadcea1e74a1bef44b984105d064768d66910999173e scripts/gate-windows.ps1
1505
1506
  9e625bdc701298c05eb2a63c208d023a487a1baf306c05940eb29c19fb1d6544 scripts/init-desktop-policy-r40.ps1
1506
- c5cfa5ac5b45f028aedb07ad0bd65d9247d1618003ca729142c230ea506fb2b5 scripts/init-host-policy.ps1
1507
+ 01451045bff624a157e7eea79afd7edfa8cb8212ea0256c8ec744fe1e1b269ff scripts/init-host-policy.ps1
1507
1508
  1a771b5b8a62d57f26762d53472ed68a3e733674b1c91e08becf0dc2e4325039 scripts/inspect-active-release-r45.mjs
1508
1509
  de6142bd5693cf4edb8725c9c43fc77e9bdc12f5b398a757006d778d3ee3f8ed scripts/inspect-r46-active.mjs
1509
1510
  06425d2a4004cb0ad66383c10c30aaa91bb020be2926bc76f9681a8f0827ddfc scripts/inventory-reference-dist.mjs
1510
1511
  7ea8cf6bf094a1612603bc716228a3753e5f06fca8a0684d2da15a04d0710c64 scripts/list-source-zips.mjs
1511
1512
  9d12d15f7c83ddf272834072ed37d618a232bd8a3fd36c339761fe08bb9380d8 scripts/npm-publish-r47.ps1
1512
1513
  4f1a6e0f8d23bd24b066b3a2df0cae1d47822c16c754122fde78dc509d0752f8 scripts/npm-release-r47.mjs
1513
- 53f6a7ff102ea1252cd1f855bfe4649f1b55f693b69ebe7429b1c466ceca4927 scripts/npm-release-r48.mjs
1514
+ b080c89e1a842808ec9c835dc0033ea6cf068931e8e3a9fd802d6525ca20570c scripts/npm-release-r48.mjs
1514
1515
  31bc0af20f7eecddda5f845da023f1d1750c70627ce872a885a3b06596c0c07f scripts/pcb-skill-src-bringup-evidence.md.txt
1515
1516
  75d59f8e8d25fefb1f3afa7bd37f17287f277a7bcd09a04813daa9dea9d629fd scripts/pcb-skill-src-constraint-model.md.txt
1516
1517
  eb350a6f70b822afaeedbf944ce017b4cc351edac599173b352d8b685207686e scripts/pcb-skill-src-emc-mechanical-dfm.md.txt
@@ -1586,6 +1587,7 @@ d05fd67d62005aebf3cd2daf1e67f0550d124a2068baf9aa0550afb7de26f440 scripts/window
1586
1587
  7bf69fa83b1107171369a76844786eb3930a633f5ef6ad77285fbe276c1e79ae scripts/windows-gate-evidence-r44.mjs
1587
1588
  65a259259bb33755ee4873c57ae1588665e5af3a40dd4cc83b5bccdfed228ea1 scripts/windows-gate-evidence-r45.mjs
1588
1589
  536f36b6d4cd86b9f874f6b8c0599d752d9efa69a2691f8971ee4b0d317c9739 scripts/windows-gate-evidence-r46.mjs
1590
+ f344639080f68b7da5cda765b518e0fb91bc8818229b6f460e82b173018ad30c scripts/windows-gate-evidence-r48.mjs
1589
1591
  2255b8eb78ca61267df54448560a671357f04893b6bb1df27b8b9fc8a944d255 scripts/windows-gate-evidence.mjs
1590
1592
  105a5c6dcd54e4fabb416df9eaac093654f3ea39c4233a56e0bc6d53371b2128 scripts/workload-contract-regression-r47.mjs
1591
1593
  c32cb9054a1b9641ae071c00622c0054272bdb0b519ea22c4ff926a1600a2b46 scripts/workload-stream-regression.mjs
@@ -1641,7 +1643,7 @@ ad575fc45fdf02fd0f680a9f5a1d0a0fc8509922fd1832b2a80f72b2fa8c319c src/commander-
1641
1643
  1d292ce65a6c01dc272c7da2d13264f80552f79d2ee9c485ee0584a9cee7fb9a src/commander-remote-relay-r47.mjs
1642
1644
  fe74274c8de996839c4cc95782f8caf746679b414fbf0390880b1c2ff732d5a8 src/commander-ui-resources.mjs
1643
1645
  b95c6c118ba81cea6671b8959723729094b4cb5736b42b470e1e1e400b55f4f8 src/commander-url-reader-r48.mjs
1644
- 2ac8421b3dcdd52431001ac16ee1be8cc54a5483d6aab9700b118172ce0d44bd src/commander-wire-adapter-r47.mjs
1646
+ a32226e302669553d39565176fc7ef9a0ace24834d2c19d3558ba33f13016ba0 src/commander-wire-adapter-r47.mjs
1645
1647
  46664a086a1931aac6c432786764c118341ac8d33c8a75a7552a80cd9e0502f9 src/compact-gateway-mcp-tools.mjs
1646
1648
  4218d1d1478d9e9a044d9b61c5ae205cd2ca0651a314900fad03992d0b12d286 src/compact-gateway-output-contracts.mjs
1647
1649
  40ac70ece531de7709d3c51686b36b48e0ae60283d1fb18d0adc037bfe6f9063 src/contained-cli.mjs
@@ -1684,15 +1686,15 @@ e1afae872e4252a4002032f1610033d41f5224896b0b06be077f54b267ed4f4f src/invocation
1684
1686
  5413fea537f9d72f73e89137b4c750530fbca41598b16bd9ede0e1c272111488 src/machine-fs-mcp-tools.mjs
1685
1687
  d94e4478b7e465fa559065e508f65b9ef3eff815a8f2d7b2481bf2a0b05224c9 src/machine-fs-output-contracts.mjs
1686
1688
  7f68488f9e48ada11b1f1ea64032efa82a68dc6b632fffcf37fbe9bd95237e26 src/machine-fs-read-worker.mjs
1687
- 4b46fca90489cc314c5dd884d4d0968f7702c512f87a3166d2bc12023767caf8 src/machine-fs-smoke-client.mjs
1689
+ 0e9f04f090fd227656c0ea579b53541fbf544212544d2a6944f1598e67bae95c src/machine-fs-smoke-client.mjs
1688
1690
  5498b87a1ffd83ac25d86f92ee939a88f534307c7f63878481c11fbff0d8733c src/machine-fs.mjs
1689
1691
  14c072f1eefac6e9a7b91e50a0eb4669b972212c1e4bab03c8141fef86933cc8 src/machine-identity.mjs
1690
1692
  ad4ca3635cb228b57b5b98e9518f379380ee1a03ad07ab4d12f8b7f324be2517 src/machine-mcp-tools.mjs
1691
1693
  e81b3ac2955e5dfafe308c82da24356a14da396230cb9fc47b231ab672d5be48 src/machine-output-contracts.mjs
1692
1694
  ed85d41c494a334117661ddec8191d34974fe28cb2a3378f3c04ee0e4c5d3ccc src/mcp-contained-smoke-client.mjs
1693
- b705345aa432b6a6ebbf62aabce1f78ba7e392bdfe998e79217eba8289ed0a7e src/mcp-host-smoke-client.mjs
1695
+ 1ba02360e81bd5419caccbecf254408a089e73c450ca1f4b9c6085d1cb041b19 src/mcp-host-smoke-client.mjs
1694
1696
  083c780f35bd6cccd16cdf506f7c73adf4f3228d4036031df7e5d47e8dbdf319 src/mcp-server.mjs
1695
- b490c4152b16adae658b3af20a4827847866cec352e1b0c9eb6b36094116b83b src/mcp-smoke-client.mjs
1697
+ 8eb24a5ecf19c1b4fe98ae483f0604aa733db1f6ff0fa538587f8cb281654386 src/mcp-smoke-client.mjs
1696
1698
  cde7c813f5a2e9a69f09849455d1504e766963845a1f4b201ecc84090fa260d5 src/memory-r41.mjs
1697
1699
  9525aee66944023603f6d1ebb0768b8e8ab8bb93582a10dd7f9cd4459ee07454 src/native-diff-v2.mjs
1698
1700
  2b2293a90db419dd1b548d766475c7e9e1bf243d3e9b0011969f1622ba803e74 src/native-diff.mjs
@@ -1700,7 +1702,7 @@ cde7c813f5a2e9a69f09849455d1504e766963845a1f4b201ecc84090fa260d5 src/memory-r41
1700
1702
  69773eaa6447632497f2668e376e9fa395fb398c922cb883cb157fa4cdf33c5c src/observation-mcp-tools.mjs
1701
1703
  47f58ddf5e5681fdf01f362b591ea3193bfcdfe02ffcc0bb03f1625123ad60fd src/observation-output-contracts.mjs
1702
1704
  3cfef96336b5bda9956a1efb1c55910037f56a3b47f65d50aeb64979fb464179 src/observation-runtime.mjs
1703
- e7d6f2f9b783df009ee64b99197821f783b1cb2488e58ec605398a1fa1a83cb8 src/observation-smoke-client.mjs
1705
+ 2ce4111839427cbc0d053b24982cbbd47cde3d668d24ea93651ff2f5fa3f2fb9 src/observation-smoke-client.mjs
1704
1706
  7d215399327b7e5a8b5e3c89bbe304c086c9b733dd5c7526b31f101afe97b783 src/operation-history.mjs
1705
1707
  65dc466392ab317dad527e7f08004cc975b4a77f66509e10d786c691fed7bfbb src/operation-lifecycle.mjs
1706
1708
  96c29ce8f90a717ebc311155acfa075c7ea8f6f63401a37269586fbe1419376f src/operation-policy.mjs
@@ -1712,7 +1714,7 @@ e541a1dba48034b914dc15eb789a6fa0bc43f60439dda61d31a7a99de9ff1a9f src/operator-s
1712
1714
  f5322664c669bc193214a803f9723e3728053f60bc008530db39a9af7f7bab75 src/process-policy.mjs
1713
1715
  ba3eafd91b69e75700824c1a6103ff0e2f6a6cad162a607e1b12250d6bc52142 src/process-readiness.mjs
1714
1716
  f364076cad1cead310c7d43312a2c92d18f8ffc966bf50781436f37347cc0b1d src/process-runtime.mjs
1715
- 65d81b6cbdf4f4ce34ccef11793e79cfed6883288288915d077c11674f0873bb src/process-smoke-client.mjs
1717
+ 0fd4eb9716e06929a3b236ddcd3bfd570b206ef442af28f04b8db0190e8fe58a src/process-smoke-client.mjs
1716
1718
  bb4d1532684b8f81a42377c4b0a9d4c61207856edfff496e878ffbb885b52442 src/proof-cli.mjs
1717
1719
  be4a4f7f16e473ac842559a5a18eccb59e3693bded59a1abc71e75ff448cc755 src/proof-worker.mjs
1718
1720
  4a8c2b9a8487fd7d2a27b0cbff54ec7ef240e446df002791968b836c9443a10d src/provider-circuit.mjs
@@ -1747,6 +1749,7 @@ da7a51640bee04dff80e24c2ad6241ef87d160866df1fd9b8ef02c8beda6cee5 src/remote-mcp
1747
1749
  c8fd6fd3e49e866f2c3be326ab07222b36a44528ee0fc3f7b371c34a60e3c45b src/remote-session-guardian.mjs
1748
1750
  827b156eac01cc9ec6f5ca9a49219612f0da511fde770a9eb1235aa913b5e514 src/request-identity.mjs
1749
1751
  39251ab165bb0a0b8ea9b4c533aa0cd674934c0fa2c7f63145eac680d1d67be9 src/resource-identity.mjs
1752
+ 320b162944953b3aca58d4a48e6c9507f37a84ad1a9aaebe0aeb02a497cf80cb src/runtime-catalog-expectation.mjs
1750
1753
  ce2223bf6075e96cc02505c1439acce18bb1f204c5e86cf9152bb7194daf3cd2 src/runtime-identity.mjs
1751
1754
  f2f09e79fd56c7f9005af526b12afbb5b7a64367d0556ad38ba5e6a22bca9524 src/runtime-update.mjs
1752
1755
  c61335adb38bfc415fe1cdabfe2c0a87e61579dfd1e52cce91c44d6993479457 src/search-cursor.mjs
@@ -1763,15 +1766,15 @@ fbc50dcd21c87814191ddc235da7d425ffbb1bcfe4446dda1a7fae1d5ae9ce14 src/tool-audit
1763
1766
  ac7394cf2c353dfab645937ab7bfb6eed7e42f345c1d46185f37f9d65772104c src/tool-surface-ledger.mjs
1764
1767
  bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init.mjs
1765
1768
  1325b75abd94c44ea53278e2763448d3065d7cce979581f223dd186e05e3234e src/trust.mjs
1766
- 1c8c31ced3b6d020199782b7bc7c8ed5c010b355285f4f2675b359f65e8e8efc src/tunnel-stdio-compat-smoke.mjs
1769
+ 2a91fcd0311f80fdaabc353174cdbdae7f8f0915cce7ca2938343c0be00f652d src/tunnel-stdio-compat-smoke.mjs
1767
1770
  aa765e9a28c69ff58a5b5a0d29b49ea181af4db9076633b102dbca25861e708e src/tunnel-stdio-compat.mjs
1768
1771
  642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
1769
1772
  8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
1770
- 84615ff1546c53362f0192fb4688b7e81543c3dc936cf851e2b7e64306f62e60 src/version.mjs
1773
+ 6934452f55187f49f689151e1d6d3a76533ee6c6650aee63d0261069a502e917 src/version.mjs
1771
1774
  7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
1772
1775
  76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
1773
1776
  4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
1774
- de2b9899e2e9d2f7b0007578de96f619db0ebe9e511d59cd26b3e9142eab52bb TEST-MATRIX.json
1777
+ bef1c8833390e77cff9be1b8ee363ed4a74bc5c677545f85806543134bd5d7f4 TEST-MATRIX.json
1775
1778
  e4f1fb97545f23772ddff28ad3f9954a4714f9854062fca62e0e12c1cb2ec4ae test/agent-backend-r44.test.mjs
1776
1779
  2a78c818058b25efdc143a3a97c832da231ccd6ff9d90c7796d681a0251b85c4 test/agent-crash-child.mjs
1777
1780
  d9461ab7c118ee75d37a2d6f5e637d7e43505af6a9ad8c7ddafffc8ace185a5b test/agent-crash-worker.mjs
@@ -1813,7 +1816,7 @@ aec98dc7d09acf39916425d055d5e76f45713ef4d3d73f9aedb7ec1ea037bed4 test/capabilit
1813
1816
  84eefe1a43474927fdc6fb7ef269309c662cefb229d6af2c91d9e2f0b9ba5c23 test/cli-entrypoint.test.mjs
1814
1817
  bec565ffa8550d56a5bb21927177c37d9d05f8353e3bc2541fc156886fe23688 test/codex-app-server-r44.test.mjs
1815
1818
  c43105a78ee4c93417d720ee660cfebc75b17f142a6484568e3cbaa583457f8c test/codex-autonomous-r44.test.mjs
1816
- 350e151dbd8cc2723b141c5cf5f90bdf11289577c9b9347330e3ad815d948e98 test/coding-catalog-consistency.test.mjs
1819
+ dda317c3fe46f92512c2ee05eb91615ec60f88a00a7fa9c3d43f7121c2438e9f test/coding-catalog-consistency.test.mjs
1817
1820
  604605e1992ea62e1eca6880d7b0bae36d43b16d17573a663cd9b3ff089575c7 test/coding-crash.test.mjs
1818
1821
  f37e260c2def4c48434b3f251a4cb756a1852843784c08cf6c39dba9045dfb69 test/coding-mcp-unknown-effect.test.mjs
1819
1822
  0fad3c669e48d60bbae7f4b847472677bf3bf8bcc9db0c798d76814b8f907e17 test/coding-observation.test.mjs
@@ -1834,7 +1837,7 @@ fc014858b70428735c5311efdc07ff814e63db9330f89426d697077f2509c264 test/commander
1834
1837
  bfc2e6d7e1aa5332c1c81687001cdb5f923a45c5ce64925097fe11fd850e9214 test/commander-pdf-r48.test.mjs
1835
1838
  bacb96828ea0431cd5f3a8ecb637894f0bdf80b5f52e9308ba0cbb982f50bd2a test/commander-protocol-adversarial-r48.test.mjs
1836
1839
  7b31f1db99ede6837ce491cc670b73d68ab0cdd7ee96ab5d3be713dc19288fc0 test/commander-protocol-r47.test.mjs
1837
- cad9a9fc42c50e450a3b019e9ed066e7313631015179be7edbbdd094fea00a81 test/commander-real-parity-r47.test.mjs
1840
+ 5709ea1cf4e65c4f1759206123216cac6cb66d8a383c0b0a6c00f4a551d9c727 test/commander-real-parity-r47.test.mjs
1838
1841
  5a7938243a5dbab4dd218fe2d8a34dbaf4eb76b4e9261bd2f15a34c01aa1e520 test/commander-reference-contract-r48.test.mjs
1839
1842
  b91717e90c678a07dab88f51285717f4e986b02fa65555f00e01e164d476a3a0 test/commander-remote-bridge-r47.test.mjs
1840
1843
  7bd183f57b33e4cd8c981fc906c80a6855cb856baace0bcb3f145dadf9d62127 test/commander-remote-plane-r47.test.mjs
@@ -1847,7 +1850,7 @@ d8e884e241c705b12797f911fb967a4a33b1ec6f3e15b433735882b3de4a34e5 test/commander
1847
1850
  3b5133e8cc7a8c2c5e66a7c34ac5e4f9bf2cf14b5897a7e871fb41ba82b629e5 test/compact-max-catalog-r40.test.mjs
1848
1851
  22e3cc9a6f9e2da776e3c737b964e2a8889c1363c244474de552d8e17dac8ffc test/compact-max-catalog-r44.test.mjs
1849
1852
  d05c22af0c714fd98ee7454668e8b2968e6349f006b5e7d8ead2b6669e68714c test/compact-max-catalog-r45.test.mjs
1850
- 887df1e1627747444baf7e4e4179015e5b15c8e236c14674ddf36e3a83766bba test/contained.test.mjs
1853
+ 4ea8081def2890ce0116701257410f387132e20c9b41363801ee74f38ce2be45 test/contained.test.mjs
1851
1854
  48a3b64ed40311fb017217cd85f3102c77a2cd72490b5edd41aac01247a1882c test/containment.test.mjs
1852
1855
  599eba90e0e4e1222518f7c268e0d5598dcbc9121a13fe6ede909645e72ec24b test/context-provenance.test.mjs
1853
1856
  7ce34ff30b9cac5fdbbd7fc4dbced1a19322a1fb2b9e7ec28f2c7135d935f395 test/controller-desktop-r40.test.mjs
@@ -1859,7 +1862,7 @@ a972bd20fa927427e6d8e4181699a27e792e916b02dcf8a1ac3e2b44afd238c1 test/controlle
1859
1862
  41959e534e2283bf55ced245a58b6ea8d4d0d91d79820d87a3325adc2051560a test/controller-r27.test.mjs
1860
1863
  ceba7d1a09ccdcb20f33fe4e6de7667ffe0f0170d1bc9fefadfdba4d7f228090 test/controller-r29.test.mjs
1861
1864
  4d0dc810d9af13907f31c834a13acfb7e01ffbbe65575b69649fe52741e42175 test/controller-r30.test.mjs
1862
- cceba415584a641291ad08814a666c08c902c6614579611a082334cbad2b5b34 test/controller.test.mjs
1865
+ 08c3075ee0b7301160cad1b00cc5ad865bea87a700203e76339aedc927becd27 test/controller.test.mjs
1863
1866
  ca977f49ca8096c37e1db1d10066f6526c33f06df6d952d29b0b4958a9d9f9dc test/core.test.mjs
1864
1867
  7ba4b06a1c4141ba87b5b371157fb59940d15a1016b4c599a13753d63ad0d3d3 test/DEADBYTE-MCP-WRITE-PROBE.txt
1865
1868
  c526724a6d10648fdd5152af917ba2fe51836dc5877daaac554bbd9e52fcd47e test/deferred-slot-operation-behavior.test.mjs
@@ -2013,7 +2016,7 @@ d8f544bbcdfff61f7abb7705ad7e5e1f17998f5fde3c114fb33915fc66d1408f test/r41-final
2013
2016
  2c5f2093b945c267c8d09cd2da0875c7f45911a7c01aa02a50cd64c2c1a7ccdc test/r45-autonomous-quick-test.test.mjs
2014
2017
  532075c86893caf68a2d0ea09171bee4c7d60892c1892011285376a2c186ed92 test/r45-finalization.test.mjs
2015
2018
  25a21ccffcf566b020b8f3c6c0a5a3b7ff06b243fff84e405207e458640ba487 test/r47-release-contract.test.mjs
2016
- fc355632724de1f99a76215369a1e9c668f79a9cdc96c28557180adeb2259021 test/r48-release-contract.test.mjs
2019
+ 48b0be4d9c422e5368718e12541be73e9879326d43218fd16ded703b76228269 test/r48-release-contract.test.mjs
2017
2020
  e45a6cd299d8d65bdeb9bc0117ce1eb2b47fdebad89a02413ee979c9d0ae3a5c test/release-activation-gate.test.mjs
2018
2021
  85f6dc2059fd19d03452309ffe67bed5b87da8e6f0ce3a85cab58cba8b197ceb test/release-generation.test.mjs
2019
2022
  bb58887a2c393cd5aac3fa3bb3a04de2704bd2a30dd2083ea638543485fa7e60 test/release-manifest-windows.test.mjs
@@ -2049,7 +2052,7 @@ a98537d1136988251572f424b29ff8f798356dcfd9a7a1d4238a9c7e943e6a52 test/standing-
2049
2052
  1ffc13c7ae2010d5c29b02fcb6b2226f52152ce3dd8064fce6d321701f919952 test/tool-surface-ledger.test.mjs
2050
2053
  be2f1dcbcba6cadc6bcfcb9e2ad94c078a1ac285e93295991fbfbdcf98eee65e test/tool-surface-snapshot.test.mjs
2051
2054
  197bd6664f4a8e8d3769c058d693b363ed5a9ad2e69aec8ee37ffb289c6d03c4 test/tracer-bullet.test.mjs
2052
- bffec1e61dbec3d891e96df6d47fc8b0c92b001f7941738970e16e2710e3ec61 test/tunnel-stdio-compat.test.mjs
2055
+ 86b5f6cbe94f3a8a962394134add820438fe934e609e44067ace3896b0a84a1b test/tunnel-stdio-compat.test.mjs
2053
2056
  bdb8ebea2ec1252fdcb703ce8aab773012c471a8feda4efdd1f41b5101b63824 test/windows-observation-r48.test.mjs
2054
2057
  239d665f36dd7582e8148649ef7979835fe90f2e640585e28d0152397762e282 test/windows-observation-surface-r48.test.mjs
2055
2058
  29017f917b1775a1c2c184aef26c61e5bf4093d64441052e2da0824b582f669c test/workload-substrate.test.mjs
package/PROVENANCE.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "schema": "deadbyte.provenance.v1",
3
- "version": "0.15.24",
3
+ "version": "0.15.25",
4
4
  "builder": "deadbyte-r48-commander-differential-protocol-hardening",
5
5
  "source_model": "development-root -> pinned Commander 0.2.51 differential oracle -> incremental PDF revision fix + explicit unknown-effect mutation semantics + directory/binary compatibility + DOCX drawing/header/footer search + raw MCP adversarial protocol proof -> bounded R48 regression -> MANIFEST.SHA256 -> immutable release slot -> generation bundle -> signed machine truth",
6
6
  "signing": "ed25519",
7
- "parent_release_id": "v0.15.23-c97e3d21e792420e",
8
- "parent_manifest_sha256": "c97e3d21e792420ea90dada3c1360cd56e4c1f221daa86596d611b0d1ac351ec",
9
- "parent_generation_manifest_sha256": "4d2d3a4dc103576c39171c52db3436366e62d8b872bcafa4c55f2adb6d3a1126",
10
- "source_predecessor_version": "0.15.23",
11
- "source_predecessor_tarball_sha256": "8c8711805bd05b9d4f61a7c9e123d888eb65121a10c85247807a723154416af4",
12
- "source_predecessor_manifest_file_sha256": "c97e3d21e792420ea90dada3c1360cd56e4c1f221daa86596d611b0d1ac351ec",
7
+ "parent_release_id": "v0.15.24-c33fcbc449562285",
8
+ "parent_manifest_sha256": "c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e",
9
+ "parent_generation_manifest_sha256": "6b81c4a5b940a6ef525b7d0ce8e7ff5e6b9fc9b8048d9522ea8852fa29b85395",
10
+ "source_predecessor_version": "0.15.24",
11
+ "source_predecessor_tarball_sha256": "23ea53fb4f331873c742c810f815d5ad18291f74c1bda1fd1d8c08475dbbd4ad",
12
+ "source_predecessor_manifest_file_sha256": "c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e",
13
13
  "commander_reference_version": "0.2.51",
14
14
  "commander_reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
15
15
  "commander_reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140",
16
16
  "full_regression_task_receipt_sha256": "7711039e4807f6c2af02bbda897d0032b067e0a6631f789fd3bf801258160d3f",
17
- "reproducibility": "manifest-bound package bytes; exact 0.15.23 registry predecessor SHA-256; reference server/schema byte pins; signed full-regression task receipt; raw MCP protocol adversarial proof; npm production audit zero vulnerabilities; signed machine truth required after activation"
17
+ "reproducibility": "manifest-bound package bytes; exact immutable 0.15.24 registry and active runtime predecessor; reference server/schema byte pins; signed full-regression task receipt; raw MCP protocol adversarial proof; npm production audit zero vulnerabilities; signed machine truth required after activation"
18
18
  }
package/README.txt CHANGED
@@ -1,4 +1,4 @@
1
- DEADBYTE MCP V0.15.24 / R48 COMMANDER DIFFERENTIAL + PROTOCOL HARDENING BASELINE
1
+ DEADBYTE MCP V0.15.25 / R48 COMMANDER DIFFERENTIAL + PROTOCOL HARDENING BASELINE
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.24 mcp
11
- npx -y deadbyte-mcp@0.15.24 remote
12
- npx -y deadbyte-mcp@0.15.24 remote status
13
- npx -y deadbyte-mcp@0.15.24 remote restart
14
- npx -y deadbyte-mcp@0.15.24 audit status
15
- npx -y deadbyte-mcp@0.15.24 audit verify
10
+ npx -y deadbyte-mcp@0.15.25 mcp
11
+ npx -y deadbyte-mcp@0.15.25 remote
12
+ npx -y deadbyte-mcp@0.15.25 remote status
13
+ npx -y deadbyte-mcp@0.15.25 remote restart
14
+ npx -y deadbyte-mcp@0.15.25 audit status
15
+ npx -y deadbyte-mcp@0.15.25 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.
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.24",
4
+ "version": "0.15.25",
5
5
  "train": "R48",
6
6
  "label": "COMMANDER DIFFERENTIAL + PROTOCOL HARDENING BASELINE",
7
7
  "protocol_revision": "2026-07-28",
8
8
  "parent": {
9
- "release_id": "v0.15.23-c97e3d21e792420e",
10
- "manifest_sha256": "c97e3d21e792420ea90dada3c1360cd56e4c1f221daa86596d611b0d1ac351ec",
11
- "generation_manifest_sha256": "4d2d3a4dc103576c39171c52db3436366e62d8b872bcafa4c55f2adb6d3a1126"
9
+ "release_id": "v0.15.24-c33fcbc449562285",
10
+ "manifest_sha256": "c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e",
11
+ "generation_manifest_sha256": "6b81c4a5b940a6ef525b7d0ce8e7ff5e6b9fc9b8048d9522ea8852fa29b85395"
12
12
  },
13
13
  "source_predecessor": {
14
- "version": "0.15.23",
15
- "tarball_sha256": "8c8711805bd05b9d4f61a7c9e123d888eb65121a10c85247807a723154416af4",
16
- "manifest_file_sha256": "c97e3d21e792420ea90dada3c1360cd56e4c1f221daa86596d611b0d1ac351ec",
14
+ "version": "0.15.24",
15
+ "tarball_sha256": "23ea53fb4f331873c742c810f815d5ad18291f74c1bda1fd1d8c08475dbbd4ad",
16
+ "manifest_file_sha256": "c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e",
17
17
  "reference_package": "@wonderwhy-er/desktop-commander@0.2.51",
18
18
  "reference_server_sha256": "dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305",
19
19
  "reference_schemas_sha256": "f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140"
package/TEST-MATRIX.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": "deadbyte.test-matrix.v1",
3
- "version": "0.15.24",
3
+ "version": "0.15.25",
4
4
  "train": "R48",
5
5
  "primary_platform": "win32-x64",
6
6
  "reference": {
@@ -22,13 +22,13 @@
22
22
  {"id":"release-smoke","command":"node --test test/release-smoke-isolation.test.mjs","expected":"PASS"},
23
23
  {"id":"runtime-update","command":"node --test test/runtime-self-update.test.mjs","expected":"PASS"},
24
24
  {"id":"audit","command":"npm audit --omit=dev","expected":"0 vulnerabilities"},
25
- {"id":"activation","command":"npx -y deadbyte-mcp@0.15.24 remote status","expected":"active runtime 0.15.24 with no VERSION SKEW"},
26
- {"id":"machine-truth","command":"signed machine_ping","expected":"release_id and manifests bind activated 0.15.24 generation"},
27
- {"id":"rollback-restore","command":"immutable slot rollback/restore","expected":"0.15.24 -> exact 0.15.23 -> exact 0.15.24"}
25
+ {"id":"activation","command":"npx -y deadbyte-mcp@0.15.25 remote status","expected":"active runtime 0.15.25 with no VERSION SKEW"},
26
+ {"id":"machine-truth","command":"signed machine_ping","expected":"release_id and manifests bind activated 0.15.25 generation"},
27
+ {"id":"rollback-restore","command":"immutable slot rollback/restore","expected":"0.15.25 -> exact 0.15.24 -> exact 0.15.25"}
28
28
  ],
29
29
  "focused_proof": {
30
30
  "raw_mcp_protocol": {"tests":3,"pass":3,"fail":0},
31
- "commander_hardening": {"tests":101,"pass":101,"fail":0,"skip":0},
31
+ "commander_hardening": {"tests":139,"pass":139,"fail":0,"skip":0},
32
32
  "npm_audit_production_vulnerabilities": 0
33
33
  },
34
34
  "full_regression_partition_proof": {
@@ -41,9 +41,9 @@
41
41
  "action_receipt_sha256": "095c5eb4d959b9105a769649aa196a1d33f5097b899031dd16997e5ba1b352e6"
42
42
  },
43
43
  "performance": {
44
- "fresh_cross_reference_status": "BLOCKED_REFERENCE_RUNTIME_DEPS",
45
- "reason": "Pinned Desktop Commander reference lacks package-lock.json and its staged node_modules is missing cross-fetch; no floating dependency install was used.",
46
- "historical_sample_only": true
44
+ "fresh_cross_reference_status": "PASS_PINNED_REFERENCE_RUNTIME",
45
+ "reason": "A test-only copy of the byte-pinned 0.2.51 reference was installed with scripts, audit, and dev dependencies disabled; production has no reference dependency.",
46
+ "historical_sample_only": false
47
47
  },
48
48
  "non_win32": {
49
49
  "portable_tests": "supported where platform-independent",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deadbyte-mcp",
3
- "version": "0.15.24",
3
+ "version": "0.15.25",
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-r46.ps1",
45
+ "gate:windows": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r48.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",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "schema": "deadbyte.commander-differential-checkpoint.v1",
3
3
  "status": "INCOMPLETE",
4
- "observed_at_utc": "2026-09-28T15:19:36.8198652Z",
4
+ "observed_at_utc": "2026-09-29T13:36:00.000Z",
5
5
  "source": {
6
6
  "requested_path": "D:\\Projects\\deadbyte-mcp-r36-dev",
7
7
  "requested_path_version": "0.12.0",
8
8
  "actual_successor_workspace": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-r42-agentic-dev",
9
- "version": "0.15.24",
9
+ "version": "0.15.25",
10
10
  "git_head": "f9037d4847a7204ce4e1f808758ee3f0e9e7a738",
11
11
  "path_drift_classification": "requested source path is a historical snapshot and cannot produce a successor of active 0.15.23"
12
12
  },
@@ -62,6 +62,12 @@
62
62
  "classification": "REAL_DEADBYTE_DEFECT_FIXED_IN_SOURCE",
63
63
  "red": "reference exposes drawing markers, header/footer text, and literal DOCX part search while DEADBYTE omitted those document parts and searched ZIP bytes",
64
64
  "green": "native bounded DOCX parsing now exposes drawing/header/footer evidence and searches document/header/footer w:t parts through deterministic compatibility sessions"
65
+ },
66
+ {
67
+ "id": "interactive-output-quiescence",
68
+ "classification": "REAL_DEADBYTE_DEFECT_FIXED_IN_SOURCE",
69
+ "red": "interact_with_process returned after the first stream advance and could omit the final END marker from a 1.1 MiB response",
70
+ "green": "bounded stream-quiescence waiting plus unconditional test cleanup passed 20 consecutive real PowerShell repetitions and the expanded 139-test hardening gate"
65
71
  }
66
72
  ],
67
73
  "focused_evidence": [
@@ -73,6 +79,8 @@
73
79
  {"scope": "mcp-protocol-adversarial", "tests": 3, "pass": 3, "fail": 0, "skip": 0},
74
80
  {"scope": "atomic-mutation-public-boundaries", "tests": 15, "pass": 14, "fail": 0, "skip": 1},
75
81
  {"scope": "full-regression-r48", "files": 211, "batches": 8, "fail": 0, "task_receipt_sha256": "7711039e4807f6c2af02bbda897d0032b067e0a6631f789fd3bf801258160d3f"},
82
+ {"scope": "expanded-commander-hardening", "tests": 139, "pass": 139, "fail": 0, "skip": 0},
83
+ {"scope": "powershell-large-output-repeat", "runs": 20, "pass": 20, "fail": 0},
76
84
  {"scope": "npm-audit-production", "vulnerabilities": 0},
77
85
  {"scope": "real-performance-sample", "iterations_per_workload": 50, "reference_byte_pins_verified": true, "status": "HISTORICAL_ONLY_FRESH_RUN_BLOCKED_REFERENCE_RUNTIME_DEPS",
78
86
  "results": {"read_file": {"reference_ops_per_sec": 55, "deadbyte_ops_per_sec": 1058}, "list_directory": {"reference_ops_per_sec": 3818, "deadbyte_ops_per_sec": 1959}, "get_file_info": {"reference_ops_per_sec": 1805, "deadbyte_ops_per_sec": 2231}, "read_multiple_files": {"reference_ops_per_sec": 30, "deadbyte_ops_per_sec": 562}}}
@@ -81,12 +89,12 @@
81
89
  "changed_file_sha256": {
82
90
  "src/commander-pdf-r48.mjs": "23cda18e86daa4163003fb5a80e0069bc19541d454f32a9a38b1d901ee39f26b",
83
91
  "src/coding-search.mjs": "7f15b59bc240d896beddc2057354f8c72f296fe189db30c200d2c84a67d65773",
84
- "src/commander-wire-adapter-r47.mjs": "2ac8421b3dcdd52431001ac16ee1be8cc54a5483d6aab9700b118172ce0d44bd",
92
+ "src/commander-wire-adapter-r47.mjs": "a32226e302669553d39565176fc7ef9a0ace24834d2c19d3558ba33f13016ba0",
85
93
  "src/commander-office-reader-r48.mjs": "7379825118da8fae16d63fe7c4d89b0ddb03e7649f3754adae58a4480f8b317f",
86
94
  "test/commander-pdf-r48.test.mjs": "bfc2e6d7e1aa5332c1c81687001cdb5f923a45c5ce64925097fe11fd850e9214",
87
95
  "test/commander-biff-reference-r48.test.mjs": "8e8b20604062a0398214e159729b10bedff334cb44bddfa4b4046b1ae396520f",
88
96
  "test/commander-schema-differential-r48.test.mjs": "fb82a21e8752ccb82cbd6b631f3366bfe5af9a4c5a433db5a128c0a1fe703c66",
89
- "test/commander-real-parity-r47.test.mjs": "cad9a9fc42c50e450a3b019e9ed066e7313631015179be7edbbdd094fea00a81"
97
+ "test/commander-real-parity-r47.test.mjs": "5709ea1cf4e65c4f1759206123216cac6cb66d8a383c0b0a6c00f4a551d9c727"
90
98
  ,"test/commander-wire-contract-r47.test.mjs": "d8e884e241c705b12797f911fb967a4a33b1ec6f3e15b433735882b3de4a34e5"
91
99
  ,"test/commander-office-reader-r48.test.mjs": "abf1eb0977a064101420a0e908a4c2adbf9d606e9873433709910efafa2b4453"
92
100
  ,"test/commander-core-bridge-r47.test.mjs": "16092ed097420b9da99573c1e84f62d011fcb5db069242d70ffd1649c704fd35"
@@ -101,10 +109,13 @@
101
109
  ,"test/atomic-mutation.test.mjs": "98de1fc43092c27e0fa85f391607494b11e6cc0d53eaf47b6db1ab457c6d6a4b"
102
110
  ,"test/coding-mcp-unknown-effect.test.mjs": "f37e260c2def4c48434b3f251a4cb756a1852843784c08cf6c39dba9045dfb69"
103
111
  ,"scripts/commander-real-performance-benchmark-r47.mjs": "d7806aa408dc7ca74f05feec535ad6cc545f8c61892c51f0fe388bb13d975290"
112
+ ,"scripts/commander-hardening-gate-r47.mjs": "6d6e18b2a17448dad569dfbf60ac103c6c8bcfe73c49af93506816c3c0b7fe73"
113
+ ,"src/stdio-protocol-guard.mjs": "71e0ddc5e7abaedbb4659bdfb91b6e2db43a642cbec83eee62c16fb069a3c202"
114
+ ,"test/commander-protocol-adversarial-r48.test.mjs": "bacb96828ea0431cd5f3a8ecb637894f0bdf80b5f52e9308ba0cbb982f50bd2a"
104
115
  },
105
116
  "release_created": true,
106
- "candidate_version": "0.15.24",
107
- "publish_attempt": {"status":"BLOCKED_NPM_AUTH","npm_whoami":"E401 Unauthorized","registry_maintainer":"deadbytes <termay10000@gmail.com>","publish_error":"E404 package not found or no permission"},
117
+ "candidate_version": "0.15.25",
118
+ "publish_attempt": {"status":"PENDING_AUTH","npm_whoami":"E401 Unauthorized","registry_predecessor_version":"0.15.24","registry_predecessor_tarball_sha256":"23ea53fb4f331873c742c810f815d5ad18291f74c1bda1fd1d8c08475dbbd4ad"},
108
119
  "published": false,
109
120
  "activated": false,
110
121
  "remaining_scope": "restore npm authentication, registry round-trip, successor activation, exact 0.15.23 rollback, exact successor restore and independent final closure"
@@ -13,7 +13,16 @@ const suites = [
13
13
  'test/commander-exhaustive-surface-r47.test.mjs',
14
14
  'test/commander-core-bridge-r47.test.mjs',
15
15
  'test/commander-wire-contract-r47.test.mjs',
16
- 'test/commander-protocol-r47.test.mjs'
16
+ 'test/commander-reference-contract-r48.test.mjs',
17
+ 'test/commander-schema-differential-r48.test.mjs',
18
+ 'test/commander-biff-reference-r48.test.mjs',
19
+ 'test/commander-office-reader-r48.test.mjs',
20
+ 'test/commander-pdf-r48.test.mjs',
21
+ 'test/commander-url-reader-r48.test.mjs',
22
+ 'test/commander-external-process-r48.test.mjs',
23
+ 'test/commander-protocol-r47.test.mjs',
24
+ 'test/commander-protocol-adversarial-r48.test.mjs',
25
+ 'test/prompts-resources.test.mjs'
17
26
  ];
18
27
 
19
28
  const startedAt = new Date().toISOString();
@@ -0,0 +1,45 @@
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.25 / R48 gate failed at $Name with exit code $LASTEXITCODE" }
9
+ }
10
+
11
+ Invoke-GateStep 'containment-build' @('run','containment:build')
12
+ Invoke-GateStep 'process-policy-refresh' @('run','process:policy:refresh')
13
+ Invoke-GateStep 'desktop-policy-refresh' @('run','desktop:policy:refresh')
14
+ Invoke-GateStep 'hardware-build' @('run','hardware:build')
15
+
16
+ $hostPolicy = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..\controller\deadbyte-host-policy.json'))
17
+ Remove-Item -LiteralPath $hostPolicy -Force -ErrorAction SilentlyContinue
18
+ if (Test-Path -LiteralPath $hostPolicy) { throw 'could not establish hermetic Host policy absence' }
19
+
20
+ Invoke-GateStep 'r48-release-focused' @('run','r48:release:test')
21
+ Invoke-GateStep 'r48-catalog' @('run','r48:catalog:test')
22
+ Invoke-GateStep 'commander-hardening' @('run','r47:hardening:test')
23
+ Invoke-GateStep 'full-regression' @('run','r48:full:test')
24
+ Invoke-GateStep 'mcp-smoke' @('run','mcp:smoke')
25
+ Invoke-GateStep 'mcp-agent-smoke' @('run','mcp:agent:smoke')
26
+ Invoke-GateStep 'mcp-coding-smoke' @('run','mcp:coding:smoke')
27
+ Invoke-GateStep 'mcp-machine-fs-smoke' @('run','mcp:machine-fs:smoke')
28
+ Invoke-GateStep 'mcp-observation-smoke' @('run','mcp:observation:smoke')
29
+ Invoke-GateStep 'mcp-process-smoke' @('run','mcp:process:smoke')
30
+ Invoke-GateStep 'mcp-autonomous-smoke' @('run','mcp:autonomous:smoke')
31
+ Invoke-GateStep 'tunnel-stdio-compat-smoke' @('run','mcp:tunnel-compat:smoke')
32
+ Invoke-GateStep 'containment-smoke' @('run','containment:smoke')
33
+ Invoke-GateStep 'contained-smoke' @('run','contained:smoke')
34
+ Invoke-GateStep 'mcp-contained-smoke' @('run','mcp:contained:smoke')
35
+ Invoke-GateStep 'host-policy-refresh' @('run','host:policy:init')
36
+ Invoke-GateStep 'manifest-write' @('run','manifest:write')
37
+ Invoke-GateStep 'manifest-verify' @('run','manifest:verify')
38
+ Invoke-GateStep 'doctor' @('run','doctor')
39
+ Invoke-GateStep 'mcp-host-smoke' @('run','mcp:host:smoke')
40
+ Invoke-GateStep 'authority-smoke' @('run','authority:smoke')
41
+ Invoke-GateStep 'manifest-final-verify' @('run','manifest:verify')
42
+
43
+ & node.exe (Join-Path $PSScriptRoot 'windows-gate-evidence-r48.mjs')
44
+ if ($LASTEXITCODE -ne 0) { throw "R48 evidence writer failed with exit code $LASTEXITCODE" }
45
+ Write-Host '==== DEADBYTE 0.15.25 / R48 WINDOWS GATE: PASS ===='
@@ -10,7 +10,15 @@ Set-StrictMode -Version 3.0
10
10
  $ErrorActionPreference = 'Stop'
11
11
 
12
12
  function Get-Sha256Lower([string]$Path) {
13
- (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()
13
+ $stream = [System.IO.File]::OpenRead($Path)
14
+ try {
15
+ $sha = [System.Security.Cryptography.SHA256]::Create()
16
+ try {
17
+ ([System.BitConverter]::ToString($sha.ComputeHash($stream))).Replace('-', '').ToLowerInvariant()
18
+ }
19
+ finally { $sha.Dispose() }
20
+ }
21
+ finally { $stream.Dispose() }
14
22
  }
15
23
 
16
24
  if ([string]::IsNullOrWhiteSpace($CoreRoot)) {
@@ -105,7 +105,8 @@ async function main() {
105
105
 
106
106
  console.log('[3/7] Packing artifact with npm pack...');
107
107
  const packed = parseJson(runNpm(['pack', '--json'], { timeout: 180000 }));
108
- const filename = packed?.[0]?.filename;
108
+ const packRecord = Array.isArray(packed) ? packed[0] : packed?.[pkg.name];
109
+ const filename = packRecord?.filename;
109
110
  if (!filename) throw new Error('npm pack did not return a tarball filename');
110
111
  const tarball = path.join(root, filename);
111
112
  let releaseSucceeded = false;
@@ -0,0 +1,27 @@
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
+ insist(pkg.version==='0.15.25'&&release.version===pkg.version&&release.train==='R48','R48 candidate identity mismatch');
17
+ insist(active.release_id===release.parent.release_id&&active.manifest_sha256===release.parent.manifest_sha256&&active.generation_manifest_sha256===release.parent.generation_manifest_sha256,'active runtime is not the exact sealed R48 parent');
18
+ const health=await doctor();
19
+ insist(health.status==='ok'&&health.package_version===pkg.version&&health.manifest?.verified===true,'R48 doctor evidence invalid');
20
+ insist(health.policy?.host_v2_ready===true,'R48 Host policy v2 is not ready');
21
+ const evidence={schema:'deadbyte.r48-windows-gate.v1',status:'passed',exit_code:0,version:pkg.version,train:'R48',completed_at_utc:new Date().toISOString(),manifest_sha256:manifestSha256,parent:release.parent,active_predecessor:{release_id:active.release_id,version:active.version,manifest_sha256:active.manifest_sha256,generation_manifest_sha256:active.generation_manifest_sha256},doctor:{verified_entries:health.manifest.verified_entries,host_v2_ready:true},gates:{full_regression:true,commander_hardening:true,exact_catalog:true,stdio_smokes:true,manifest_final_verify:true}};
22
+ const bytes=Buffer.from(`${JSON.stringify(evidence,null,2)}\n`);
23
+ const dir=path.join(stateRoot,'evidence','release'); await mkdir(dir,{recursive:true});
24
+ const target=path.join(dir,`r48-windows-gate-${manifestSha256.slice(0,16)}.json`);
25
+ try{const handle=await open(target,'wx',0o600);try{await handle.writeFile(bytes);await handle.sync();}finally{await handle.close();}}
26
+ catch(error){if(error?.code!=='EEXIST')throw error;const prior=JSON.parse(await readFile(target,'utf8'));insist(prior.schema===evidence.schema&&prior.status==='passed'&&prior.version===evidence.version&&prior.manifest_sha256===manifestSha256&&prior.parent?.release_id===release.parent.release_id,'conflicting R48 gate evidence identity');}
27
+ console.log(JSON.stringify({status:'passed',path:target,sha256:sha256(bytes),manifest_sha256:manifestSha256}));
@@ -581,6 +581,19 @@ export function createCommanderWireAdapter({machineFsRuntime=null,processRuntime
581
581
  }
582
582
  return null;
583
583
  }
584
+ async function waitForStreamQuiescence(sessionId,observed,timeoutMs,settleMs=100){
585
+ const deadline=Date.now()+timeoutMs;
586
+ let current=observed;
587
+ while(current.state==='running'&&Date.now()<deadline){
588
+ const baseline=current.stream_head;
589
+ const waitMs=Math.min(settleMs,Math.max(1,deadline-Date.now()));
590
+ const next=await processRuntime.read({sessionId,offset:baseline,maxBytes:1,waitMs});
591
+ if(next.state!=='running') return next;
592
+ if(next.stream_head>baseline){ current=next; continue; }
593
+ return next;
594
+ }
595
+ return current;
596
+ }
584
597
  async function readProcessRange(sessionId,start,end){
585
598
  if(!Number.isInteger(start)||!Number.isInteger(end)||start<0||end<start) throw new Error('native process range invalid');
586
599
  if(end-start>RDC_PROCESS_SNAPSHOT_MAX) throw new Error(`RDC process response exceeds ${RDC_PROCESS_SNAPSHOT_MAX} byte compatibility bound`);
@@ -710,6 +723,9 @@ export function createCommanderWireAdapter({machineFsRuntime=null,processRuntime
710
723
  if((observed.stream_head??before.stream_head)<=before.stream_head&&observed.state==='running'&&waitMs>0){
711
724
  observed=await waitForStreamAdvance(sessionId,before.stream_head,waitMs)??observed;
712
725
  }
726
+ if((observed.stream_head??before.stream_head)>before.stream_head&&observed.state==='running'&&waitMs>0){
727
+ observed=await waitForStreamQuiescence(sessionId,observed,waitMs);
728
+ }
713
729
  const streamHead=Number.isInteger(observed.stream_head)?observed.stream_head:before.stream_head;
714
730
  const earliest=Number.isInteger(observed.earliest_offset)?observed.earliest_offset:observed.offset;
715
731
  const start=Math.max(before.stream_head,earliest);
@@ -8,6 +8,7 @@ import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotoc
8
8
  import { CODING_GRANT_SCHEMA, loadCodingPolicy } from './coding-plane.mjs';
9
9
  import { verifyMachineFsReceiptFile } from './machine-fs.mjs';
10
10
  import { generateTrustKeypair } from './trust.mjs';
11
+ import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
11
12
 
12
13
  const here = path.dirname(fileURLToPath(import.meta.url));
13
14
  const repoRoot = path.resolve(here, '..');
@@ -51,24 +52,13 @@ const client = new Client({ name: 'deadbyte-machine-fs-smoke', version: '0.8.0'
51
52
  const transport = new StdioClientTransport({
52
53
  command: process.execPath, args: [serverPath], cwd: repoRoot,
53
54
  env: { ...getDefaultEnvironment(), DEADBYTE_CODING_RUNTIME: '1', DEADBYTE_MACHINE_FS_RUNTIME: '1',
55
+ DEADBYTE_PRIVILEGED_POLICY: '',
54
56
  DEADBYTE_CODING_POLICY: policyPath, DEADBYTE_SIGNING_KEY: keys.privateKeyPath,
55
57
  DEADBYTE_VERIFY_KEY: keys.publicKeyPath }, stderr: 'pipe'
56
58
  });
57
59
  const stderrChunks = [];
58
60
  transport.stderr?.on('data', chunk => stderrChunks.push(Buffer.from(chunk)));
59
- const baseTools = ['contained_transform','evidence_verify','file_read','host_exec','host_file_read','host_file_write','proof_execute','skill_catalog','workspace_open'];
60
- const codingTools = [
61
- 'coding_benchmark_run','coding_command_run','coding_file_read','coding_file_write','coding_files_read',
62
- 'coding_receipt_verify','coding_search','coding_session_status','coding_stat',
63
- 'coding_symbol_definition','coding_symbol_diagnostics','coding_symbol_implementations','coding_symbol_outline','coding_symbol_references','coding_symbol_rename_preview','coding_symbol_replace',
64
- 'coding_task_approve','coding_task_cancel','coding_task_events','coding_task_run',
65
- 'coding_task_status','coding_task_submit','coding_task_verify','coding_text_replace','coding_tree'
66
- ];
67
- const machineFsTools = [
68
- 'machine_fs_delete','machine_fs_edit_exact','machine_fs_list','machine_fs_mkdir',
69
- 'machine_fs_move','machine_fs_read','machine_fs_stat','machine_fs_write'
70
- ];
71
- const expectedCatalog = [...baseTools, ...codingTools, ...machineFsTools].sort();
61
+ const expectedCatalog = await expectedFullCatalogForEnv({DEADBYTE_CODING_RUNTIME:'1',DEADBYTE_MACHINE_FS_RUNTIME:'1'});
72
62
  const receipts = [];
73
63
  const remember = (operation, result) => {
74
64
  if (result.status !== 'committed' || !/^[0-9a-f]{24}$/.test(result.receipt_id ?? '')) throw new Error(`${operation} missing committed receipt`);
@@ -79,10 +69,9 @@ try {
79
69
  await client.connect(transport);
80
70
  const listed = await client.listTools();
81
71
  const names = listed.tools.map(tool => tool.name).sort();
82
- if (JSON.stringify(names) !== JSON.stringify(expectedCatalog)) throw new Error(`machine fs smoke catalog mismatch: ${JSON.stringify(names)}`);
83
- for (const tool of listed.tools) {
84
- if (tool.outputSchema?.type !== 'object' || tool.outputSchema?.additionalProperties !== false) throw new Error(`tool ${tool.name} missing strict output schema`);
85
- }
72
+ assertExactCatalog(names,expectedCatalog,'machine fs smoke');
73
+ for (const tool of listed.tools) if (tool.outputSchema !== undefined &&
74
+ (tool.outputSchema?.type !== 'object' || tool.outputSchema?.additionalProperties !== false)) throw new Error(`tool ${tool.name} has non-strict output schema`);
86
75
  const rootStat = structured(await client.callTool({ name:'machine_fs_stat', arguments:{ root_id:'core', path:'.', hash:false } }), 'machine_fs_stat(root)');
87
76
  if (rootStat.status !== 'ok' || rootStat.kind !== 'directory') throw new Error('machine fs root stat malformed');
88
77
  const made = remember('machine_fs_mkdir', structured(await client.callTool({
@@ -6,6 +6,7 @@ import { fileURLToPath } from 'node:url';
6
6
  import { Client } from '@modelcontextprotocol/client';
7
7
  import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotocol/client/stdio';
8
8
  import { generateTrustKeypair } from './trust.mjs';
9
+ import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
9
10
 
10
11
  const sha256 = bytes => createHash('sha256').update(bytes).digest('hex');
11
12
  const here = path.dirname(fileURLToPath(import.meta.url));
@@ -84,8 +85,8 @@ function structured(result, label) {
84
85
  try {
85
86
  await client.connect(transport);
86
87
  const names = (await client.listTools()).tools.map(t => t.name).sort();
87
- const expected = ['contained_transform', 'evidence_verify', 'file_read', 'host_exec', 'host_file_read', 'host_file_write', 'proof_execute', 'skill_catalog', 'workspace_open'];
88
- if (JSON.stringify(names) !== JSON.stringify(expected)) throw new Error(`privileged catalog mismatch: ${JSON.stringify(names)}`);
88
+ const expected = await expectedFullCatalogForEnv({DEADBYTE_PRIVILEGED_POLICY:policyPath});
89
+ assertExactCatalog(names,expected,'privileged smoke');
89
90
 
90
91
  const writeText = structured(await client.callTool({
91
92
  name: 'host_file_write',
@@ -6,6 +6,7 @@ import { fileURLToPath } from 'node:url';
6
6
  import { Client } from '@modelcontextprotocol/client';
7
7
  import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotocol/client/stdio';
8
8
  import { generateTrustKeypair } from './trust.mjs';
9
+ import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
9
10
 
10
11
  const here = path.dirname(fileURLToPath(import.meta.url));
11
12
  const repoRoot = path.resolve(here, '..');
@@ -39,6 +40,7 @@ const transport = new StdioClientTransport({
39
40
  DEADBYTE_WORKSPACE_ROOT: workspaceRoot,
40
41
  DEADBYTE_SIGNING_KEY: keys.privateKeyPath,
41
42
  DEADBYTE_VERIFY_KEY: keys.publicKeyPath,
43
+ DEADBYTE_PRIVILEGED_POLICY: '',
42
44
  DEADBYTE_STDIO_CONSOLE_GUARD_PROBE: '1'
43
45
  },
44
46
  stderr: 'pipe'
@@ -67,15 +69,8 @@ try {
67
69
  const names = listed.tools.map(tool => tool.name).sort();
68
70
  const guardStderr = Buffer.concat(serverStderr).toString('utf8');
69
71
  if (!guardStderr.includes('DEADBYTE MCP LOG DEADBYTE_STDIO_CONSOLE_GUARD_PROBE')) throw new Error('stdio console guard probe did not reach stderr');
70
- const baseTools = ['contained_transform', 'evidence_verify', 'file_read', 'proof_execute', 'skill_catalog', 'workspace_open'];
71
- const privilegedTools = ['host_exec', 'host_file_read', 'host_file_write'];
72
- const allowedCatalogs = [
73
- baseTools,
74
- [...baseTools, ...privilegedTools]
75
- ].map(items => [...items].sort());
76
- if (!allowedCatalogs.some(expected => JSON.stringify(names) === JSON.stringify(expected))) {
77
- throw new Error(`tool catalog mismatch: ${JSON.stringify(names)}`);
78
- }
72
+ const expected=await expectedFullCatalogForEnv({});
73
+ assertExactCatalog(names,expected,'MCP smoke');
79
74
 
80
75
  const opened = structured(await client.callTool({
81
76
  name: 'workspace_open',
@@ -8,6 +8,7 @@ import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotoc
8
8
  import { loadCodingPolicy } from './coding-plane.mjs';
9
9
  import { verifyObservationReceiptFile } from './observation-runtime.mjs';
10
10
  import { generateTrustKeypair } from './trust.mjs';
11
+ import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
11
12
 
12
13
  const here=path.dirname(fileURLToPath(import.meta.url));
13
14
  const repoRoot=path.resolve(here,'..');
@@ -49,21 +50,15 @@ const client=new Client({name:'deadbyte-observation-smoke',version:'0.8.0'},
49
50
  {versionNegotiation:{mode:{pin:'2026-07-28'}}});
50
51
  const transport=new StdioClientTransport({command:process.execPath,args:[serverPath],cwd:repoRoot,
51
52
  env:{...getDefaultEnvironment(),DEADBYTE_MACHINE_RUNTIME:'1',DEADBYTE_CODING_RUNTIME:'1',DEADBYTE_OBSERVATION_RUNTIME:'1',
53
+ DEADBYTE_PRIVILEGED_POLICY:'',
52
54
  DEADBYTE_CODING_POLICY:policyPath,DEADBYTE_STATE_ROOT:state,DEADBYTE_SIGNING_KEY:keys.privateKeyPath,DEADBYTE_VERIFY_KEY:keys.publicKeyPath},stderr:'pipe'});
53
55
  const stderr=[]; transport.stderr?.on('data',chunk=>stderr.push(Buffer.from(chunk)));
54
- const base=['contained_transform','evidence_verify','file_read','host_exec','host_file_read','host_file_write','proof_execute','skill_catalog','workspace_open'];
55
- const machine=['machine_list','machine_ping','machine_revoke','machine_status'];
56
- const coding=['coding_benchmark_run','coding_command_run','coding_file_read','coding_file_write','coding_files_read','coding_receipt_verify','coding_search',
57
- 'coding_session_status','coding_stat','coding_symbol_definition','coding_symbol_diagnostics','coding_symbol_implementations','coding_symbol_outline','coding_symbol_references','coding_symbol_rename_preview','coding_symbol_replace',
58
- 'coding_task_approve','coding_task_cancel','coding_task_events','coding_task_run','coding_task_status',
59
- 'coding_task_submit','coding_task_verify','coding_text_replace','coding_tree'];
60
- const observation=['machine_hardware_query','machine_process_list','machine_search_cancel','machine_search_page','machine_search_start','machine_search_status','machine_system_status'];
61
- const expected=[...base,...machine,...coding,...observation].sort();
56
+ const expected=await expectedFullCatalogForEnv({DEADBYTE_MACHINE_RUNTIME:'1',DEADBYTE_CODING_RUNTIME:'1',DEADBYTE_OBSERVATION_RUNTIME:'1'});
62
57
  try{
63
58
  await client.connect(transport);
64
59
  const listed=await client.listTools(); const names=listed.tools.map(tool=>tool.name).sort();
65
- if(JSON.stringify(names)!==JSON.stringify(expected)) throw new Error(`observation smoke catalog mismatch: ${JSON.stringify(names)}`);
66
- for(const tool of listed.tools) if(tool.outputSchema?.type!=='object'||tool.outputSchema?.additionalProperties!==false) throw new Error(`tool ${tool.name} missing strict output schema`);
60
+ assertExactCatalog(names,expected,'observation smoke');
61
+ for(const tool of listed.tools) if(tool.outputSchema!==undefined&&(tool.outputSchema?.type!=='object'||tool.outputSchema?.additionalProperties!==false)) throw new Error(`tool ${tool.name} has non-strict output schema`);
67
62
  const codingStatus=structured(await client.callTool({name:'coding_session_status',arguments:{}}),'coding_session_status');
68
63
  if(codingStatus.status!=='ok'||codingStatus.armed!==false) throw new Error('observation smoke requires coding mutation authority disarmed');
69
64
  const system=structured(await client.callTool({name:'machine_system_status',arguments:{}}),'machine_system_status');
@@ -8,6 +8,7 @@ import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotoc
8
8
  import { canonicalJson } from './canonical-json.mjs';
9
9
  import { loadProcessPolicy, PROCESS_GRANT_SCHEMA } from './process-policy.mjs';
10
10
  import { generateTrustKeypair, loadPublicVerifyKey } from './trust.mjs';
11
+ import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
11
12
 
12
13
  const EVENT_DOMAIN = Buffer.from('DEADBYTE-PROCESS-EVENT-V1\0', 'utf8');
13
14
  const ZERO_SHA256 = '0'.repeat(64);
@@ -58,9 +59,8 @@ try {
58
59
  await client.connect(transport);
59
60
  const listed = await client.listTools();
60
61
  const names = listed.tools.map(tool => tool.name).sort();
61
- const expected = ['contained_transform','evidence_verify','file_read','proof_execute','skill_catalog','workspace_open',
62
- 'process_session_action','process_session_cancel','process_session_list','process_session_read','process_session_start','process_session_status','process_session_terminate','process_session_write'].sort();
63
- if (JSON.stringify(names) !== JSON.stringify(expected)) throw new Error(`process smoke catalog mismatch: ${JSON.stringify(names)}`);
62
+ const expected = await expectedFullCatalogForEnv({DEADBYTE_PROCESS_RUNTIME:'1'});
63
+ assertExactCatalog(names,expected,'process smoke');
64
64
  const started = structured(await client.callTool({ name: 'process_session_start', arguments: {
65
65
  profile_id: 'ping_hold', root_id: 'core', cwd: '.', args: []
66
66
  } }), 'process_session_start');
@@ -0,0 +1,37 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { R36_CAPABILITY_LEDGER } from './capability-ledger.mjs';
5
+
6
+ const packageRoot=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
7
+ const catalogPath=path.join(packageRoot,'docs','R48-FULL-TOOL-CATALOG.json');
8
+ const AGENT_TOOLS=new Set(['agent_task_approve','agent_task_cancel','agent_task_events','agent_task_run','agent_task_status','agent_task_submit','agent_task_verify']);
9
+
10
+ export async function expectedFullCatalogForEnv(env){
11
+ const canonical=JSON.parse(await readFile(catalogPath,'utf8'));
12
+ if(canonical.schema!=='deadbyte.r48-full-catalog.v1'||canonical.tool_count!==canonical.tools?.length) throw new Error('canonical R48 full catalog is invalid');
13
+ const disabled=new Set();
14
+ for(const capability of R36_CAPABILITY_LEDGER.entries){
15
+ const flag=capability.runtime_flag;
16
+ const enabled=flag===null||(flag==='DEADBYTE_PRIVILEGED_POLICY'?Boolean(env[flag]):env[flag]==='1');
17
+ if(!enabled) disabled.add(capability.full_tool);
18
+ }
19
+ // The rename preview tool is registered by the coding surface even when its
20
+ // optional Native Diff backend is absent; only the apply path needs Autonomous.
21
+ if(env.DEADBYTE_CODING_RUNTIME==='1') disabled.delete('coding_symbol_rename_preview');
22
+ if(env.DEADBYTE_AGENT_RUNTIME!=='1') for(const name of AGENT_TOOLS) disabled.add(name);
23
+ if(env.DEADBYTE_PROCESS_RUNTIME!=='1') disabled.add('process_session_cancel');
24
+ return canonical.tools.filter(name=>!disabled.has(name));
25
+ }
26
+
27
+ export function assertExactCatalog(actual,expected,label='MCP'){
28
+ const names=[...actual].sort((a,b)=>a.localeCompare(b,'en'));
29
+ const wanted=[...expected].sort((a,b)=>a.localeCompare(b,'en'));
30
+ if(JSON.stringify(names)!==JSON.stringify(wanted)){
31
+ const actualSet=new Set(names); const expectedSet=new Set(wanted);
32
+ const missing=wanted.filter(name=>!actualSet.has(name));
33
+ const unexpected=names.filter(name=>!expectedSet.has(name));
34
+ throw new Error(`${label} catalog mismatch: missing=${JSON.stringify(missing)} unexpected=${JSON.stringify(unexpected)}`);
35
+ }
36
+ return names;
37
+ }
@@ -3,6 +3,7 @@ import path from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { Client } from '@modelcontextprotocol/client';
5
5
  import { StdioClientTransport, getDefaultEnvironment } from '@modelcontextprotocol/client/stdio';
6
+ import { assertExactCatalog, expectedFullCatalogForEnv } from './runtime-catalog-expectation.mjs';
6
7
 
7
8
  const here = path.dirname(fileURLToPath(import.meta.url));
8
9
  const repoRoot = path.resolve(here, '..');
@@ -11,6 +12,7 @@ const workspaceRoot = path.join(repoRoot, 'workspaces');
11
12
  const baseEnv = {
12
13
  ...process.env,
13
14
  DEADBYTE_WORKSPACE_ROOT: workspaceRoot,
15
+ DEADBYTE_PRIVILEGED_POLICY: '',
14
16
  DEADBYTE_TUNNEL_STDIO_PROBE_COMPAT: '1'
15
17
  };
16
18
 
@@ -100,6 +102,7 @@ async function modernPassThrough() {
100
102
  env: {
101
103
  ...getDefaultEnvironment(),
102
104
  DEADBYTE_WORKSPACE_ROOT: workspaceRoot,
105
+ DEADBYTE_PRIVILEGED_POLICY: '',
103
106
  DEADBYTE_TUNNEL_STDIO_PROBE_COMPAT: '1'
104
107
  },
105
108
  stderr: 'pipe'
@@ -112,15 +115,8 @@ async function modernPassThrough() {
112
115
  if (era !== 'modern') throw new Error(`expected modern era through compat prefilter, got ${String(era)}`);
113
116
  const listed = await client.listTools();
114
117
  const names = listed.tools.map(tool => tool.name).sort();
115
- const baseTools = ['contained_transform', 'evidence_verify', 'file_read', 'proof_execute', 'skill_catalog', 'workspace_open'];
116
- const privilegedTools = ['host_exec', 'host_file_read', 'host_file_write'];
117
- const allowedCatalogs = [
118
- baseTools,
119
- [...baseTools, ...privilegedTools]
120
- ].map(items => [...items].sort());
121
- if (!allowedCatalogs.some(expected => JSON.stringify(names) === JSON.stringify(expected))) {
122
- throw new Error(`modern catalog changed through compat prefilter: ${JSON.stringify(names)}`);
123
- }
118
+ const expected=await expectedFullCatalogForEnv({});
119
+ assertExactCatalog(names,expected,'modern tunnel compatibility');
124
120
  return { protocol_revision: '2026-07-28', protocol_era: era, tools: names };
125
121
  } catch (error) {
126
122
  const stderr = Buffer.concat(serverStderr).toString('utf8').trim();
package/src/version.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export const DEADBYTE_VERSION = '0.15.24';
1
+ export const DEADBYTE_VERSION = '0.15.25';
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';
@@ -16,9 +16,17 @@ function extract(source){
16
16
  assert.ok(m,'coding catalog array missing');
17
17
  return [...m[1].matchAll(/'([^']+)'/g)].map(x=>x[1]).sort();
18
18
  }
19
- for(const rel of ['src/machine-fs-smoke-client.mjs','src/observation-smoke-client.mjs','src/remote-mcp-coding-smoke-client.mjs','src/remote-mcp-smoke-client.mjs']){
19
+ for(const rel of ['src/remote-mcp-coding-smoke-client.mjs','src/remote-mcp-smoke-client.mjs']){
20
20
  test(`${rel} uses the exact R36 25-tool coding catalog`,async()=>{
21
21
  const source=await readFile(path.join(root,...rel.split('/')),'utf8');
22
22
  assert.deepEqual(extract(source),expected);
23
23
  });
24
24
  }
25
+ for(const rel of ['src/machine-fs-smoke-client.mjs','src/observation-smoke-client.mjs']){
26
+ test(`${rel} derives its exact R48 catalog from the canonical runtime catalog`,async()=>{
27
+ const source=await readFile(path.join(root,...rel.split('/')),'utf8');
28
+ assert.match(source,/expectedFullCatalogForEnv/);
29
+ assert.match(source,/assertExactCatalog/);
30
+ assert.doesNotMatch(source,/const (?:codingTools|coding)\s*=\s*\[/);
31
+ });
32
+ }
@@ -73,13 +73,14 @@ test('real Commander-parity filesystem lifecycle is transactional and signed',as
73
73
 
74
74
  test('real Commander adapter preserves PowerShell command bytes through the bounded REPL', {skip:process.platform!=='win32'}, async()=>{
75
75
  const f=await processFixture();
76
+ let adapter=null,pid=null;
76
77
  try{
77
- const adapter=createCommanderWireAdapter({processRuntime:f.runtime});
78
+ adapter=createCommanderWireAdapter({processRuntime:f.runtime});
78
79
  const command=`[Console]::OutputEncoding=[Text.UTF8Encoding]::new(); $x='a b'; "DB:$x"; 'pipe' | ForEach-Object { "P:$_" }; "U:สวัสดี"`;
79
80
  const started=await adapter.handlers.start_process({command,timeout_ms:10000});
80
- const pid=started.structuredContent.pid;
81
+ pid=started.structuredContent.pid;
81
82
  let output='';
82
- for(let i=0;i<50&&!output.includes('P:pipe');i++){
83
+ for(let i=0;i<50&&!(output.includes('DB:a b')&&output.includes('P:pipe')&&output.includes('U:สวัสดี'));i++){
83
84
  const page=await adapter.handlers.read_process_output({pid,offset:0,length:100,timeout_ms:100});
84
85
  output+=page.content[0].text;
85
86
  }
@@ -94,7 +95,10 @@ test('real Commander adapter preserves PowerShell command bytes through the boun
94
95
  assert.match(largeText,/END/);
95
96
  const ended=await adapter.handlers.force_terminate({pid});
96
97
  assert.equal(ended.structuredContent.termination.verified,true);
97
- }finally{await rm(f.root,{recursive:true,force:true});}
98
+ }finally{
99
+ if(adapter&&pid!==null) await adapter.handlers.force_terminate({pid}).catch(()=>{});
100
+ await rm(f.root,{recursive:true,force:true});
101
+ }
98
102
  });
99
103
 
100
104
  test('real stale mutation is rejected before commit and leaves source intact',async()=>{
@@ -456,13 +456,11 @@ test('receipt and verifier bind contained worker, launcher and independent trans
456
456
  assert.match(verifier, /contained transform semantic mismatch/);
457
457
  });
458
458
 
459
- test('MCP protocol smoke accepts only the base or base-plus-host catalog and excludes agent tools', async () => {
459
+ test('MCP protocol smoke derives the exact full catalog and explicitly disables Host', async () => {
460
460
  const smoke = await readFile(fileURLToPath(new URL('../src/mcp-smoke-client.mjs', import.meta.url)), 'utf8');
461
- for (const name of ['contained_transform', 'evidence_verify', 'file_read', 'proof_execute', 'workspace_open']) assert.match(smoke, new RegExp(name));
462
- for (const name of ['host_exec', 'host_file_read', 'host_file_write']) assert.match(smoke, new RegExp(name));
463
- assert.match(smoke, /allowedCatalogs/);
464
- assert.match(smoke, /baseTools/);
465
- assert.match(smoke, /privilegedTools/);
461
+ assert.match(smoke, /expectedFullCatalogForEnv/);
462
+ assert.match(smoke, /assertExactCatalog/);
463
+ assert.match(smoke, /DEADBYTE_PRIVILEGED_POLICY: ''/);
466
464
  assert.doesNotMatch(smoke, /agent_task_/);
467
465
  });
468
466
 
@@ -83,7 +83,8 @@ test('controller keeps privileged policy optional and propagates it only to the
83
83
  test('Windows host policy bootstrap pins executables and creates only explicit local roots', async () => {
84
84
  const init = await readFile(fileURLToPath(new URL('../scripts/init-host-policy.ps1', import.meta.url)), 'utf8');
85
85
  assert.match(init, /deadbyte\.host-policy\.v2/);
86
- assert.match(init, /Get-FileHash/);
86
+ assert.match(init, /System\.Security\.Cryptography\.SHA256/);
87
+ assert.match(init, /System\.IO\.File.*OpenRead/);
87
88
  assert.match(init, /powershell_script/);
88
89
  assert.match(init, /cmd_script/);
89
90
  assert.match(init, /node_script/);
@@ -6,7 +6,7 @@ import { DEADBYTE_VERSION } from '../src/version.mjs';
6
6
  const root=new URL('../',import.meta.url);
7
7
  const read=rel=>readFile(new URL(rel,root),'utf8');
8
8
 
9
- test('R48 0.15.24 successor binds exact active 0.15.23 parent and Commander differential evidence',async()=>{
9
+ test('R48 0.15.25 successor binds exact active immutable 0.15.24 parent',async()=>{
10
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),
@@ -14,21 +14,21 @@ test('R48 0.15.24 successor binds exact active 0.15.23 parent and Commander diff
14
14
  read('PROVENANCE.json').then(JSON.parse),
15
15
  read('TEST-MATRIX.json').then(JSON.parse)
16
16
  ]);
17
- assert.equal(pkg.version,'0.15.24');
18
- assert.equal(lock.version,'0.15.24');
19
- assert.equal(lock.packages[''].version,'0.15.24');
20
- assert.equal(DEADBYTE_VERSION,'0.15.24');
21
- assert.equal(release.version,'0.15.24');
22
- assert.equal(provenance.version,'0.15.24');
23
- assert.equal(matrix.version,'0.15.24');
17
+ assert.equal(pkg.version,'0.15.25');
18
+ assert.equal(lock.version,'0.15.25');
19
+ assert.equal(lock.packages[''].version,'0.15.25');
20
+ assert.equal(DEADBYTE_VERSION,'0.15.25');
21
+ assert.equal(release.version,'0.15.25');
22
+ assert.equal(provenance.version,'0.15.25');
23
+ assert.equal(matrix.version,'0.15.25');
24
24
  assert.equal(release.train,'R48');
25
25
  assert.equal(release.label,'COMMANDER DIFFERENTIAL + PROTOCOL HARDENING BASELINE');
26
- assert.equal(release.parent.release_id,'v0.15.23-c97e3d21e792420e');
27
- assert.equal(release.parent.manifest_sha256,'c97e3d21e792420ea90dada3c1360cd56e4c1f221daa86596d611b0d1ac351ec');
28
- assert.equal(release.parent.generation_manifest_sha256,'4d2d3a4dc103576c39171c52db3436366e62d8b872bcafa4c55f2adb6d3a1126');
29
- assert.equal(release.source_predecessor.version,'0.15.23');
30
- assert.equal(release.source_predecessor.tarball_sha256,'8c8711805bd05b9d4f61a7c9e123d888eb65121a10c85247807a723154416af4');
31
- assert.equal(release.source_predecessor.manifest_file_sha256,'c97e3d21e792420ea90dada3c1360cd56e4c1f221daa86596d611b0d1ac351ec');
26
+ assert.equal(release.parent.release_id,'v0.15.24-c33fcbc449562285');
27
+ assert.equal(release.parent.manifest_sha256,'c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e');
28
+ assert.equal(release.parent.generation_manifest_sha256,'6b81c4a5b940a6ef525b7d0ce8e7ff5e6b9fc9b8048d9522ea8852fa29b85395');
29
+ assert.equal(release.source_predecessor.version,'0.15.24');
30
+ assert.equal(release.source_predecessor.tarball_sha256,'23ea53fb4f331873c742c810f815d5ad18291f74c1bda1fd1d8c08475dbbd4ad');
31
+ assert.equal(release.source_predecessor.manifest_file_sha256,'c33fcbc449562285b4a03e95a6d282d359859f266773043b34db35723dfad54e');
32
32
  assert.equal(release.source_predecessor.reference_server_sha256,'dfc303bb7dd2e8d01debac50fc43bb8644d00089bffdf2887e149497cff8b305');
33
33
  assert.equal(release.source_predecessor.reference_schemas_sha256,'f342345e34e48769dabaefe1b932f09d41e2e207b422f7794a15ee50ffa8f140');
34
34
  assert.equal(release.capabilities.full_tool_count,116);
@@ -145,13 +145,11 @@ test('installed stdio prefilter answers legacy startup probe and forwards split
145
145
  assert.deepEqual(hexLines, ['HEX:' + modern.toString('hex')]);
146
146
  });
147
147
 
148
- test('tunnel compatibility smoke preserves only base or base-plus-host modern catalogs', async () => {
148
+ test('tunnel compatibility smoke derives exact modern catalog and explicitly disables Host', async () => {
149
149
  const smoke = await readFile(fileURLToPath(new URL('../src/tunnel-stdio-compat-smoke.mjs', import.meta.url)), 'utf8');
150
- for (const name of ['contained_transform', 'evidence_verify', 'file_read', 'proof_execute', 'workspace_open']) assert.match(smoke, new RegExp(name));
151
- for (const name of ['host_exec', 'host_file_read', 'host_file_write']) assert.match(smoke, new RegExp(name));
152
- assert.match(smoke, /allowedCatalogs/);
153
- assert.match(smoke, /baseTools/);
154
- assert.match(smoke, /privilegedTools/);
150
+ assert.match(smoke, /expectedFullCatalogForEnv/);
151
+ assert.match(smoke, /assertExactCatalog/);
152
+ assert.match(smoke, /DEADBYTE_PRIVILEGED_POLICY: ''/);
155
153
  assert.doesNotMatch(smoke, /agent_task_/);
156
154
  });
157
155