deadbyte-mcp 0.15.59 → 0.15.60

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
@@ -30,7 +30,7 @@ c814771dddac8bfb184250b868ddb6ab9f5e0e43613c04c3ed8abe09324ec4db bin/deadbyte-n
30
30
  daf9cfb371bee88cafbf5597eaa507fec504dbe0b0ddd40d0c3c2e02817f49e4 bin/deadbyte-process-host.exe
31
31
  b55d2c4490dfb875d40f29a69df2addc5d579991cb7d094674c04d369dfcfac3 bin/deadbyte-tunnel-host.exe
32
32
  f0ce7acb1e41325cef8b6789f95bd78b6a6107423773eace57a12b49faa55095 bin/WORKER-REGISTRY.txt
33
- 8ea4e87d8cea0dba53c13dd30077936155d437e45cf593f71cd4f3610f9b8516 bridge/package.json
33
+ f5ccdaca2662a03dbf2aca4e00e3ba3ee6866f3db93371936115f85d6ad5c754 bridge/package.json
34
34
  f99413d82f84c808f52d5b8696c190a9142dd08f517f5ec3e442f0769402d189 bridge/src/bridge-health-r59.mjs
35
35
  fa0dcc4cde9c03e978c9f9dd24b62afa83f49bdada1f42ead544a9a17edd332f bridge/src/bridge.mjs
36
36
  471f41c84c5b339cd81a708a4f36d4470e614946817ad2f9fca295dde2c83fb6 bridge/src/canonical-json-r60.mjs
@@ -1393,8 +1393,8 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
1393
1393
  f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
1394
1394
  51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
1395
1395
  3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
1396
- ece225d6a1c9a60ab260762428a5d06c77e38b431dad95c90e5fb0aa349a9699 package.json
1397
- 08ad6734ec8cbcda2c1d98957201553f6252902f454f0b5b577bb4ce8dbff8ec PROVENANCE.json
1396
+ 7ce943961080ef5036c7bacd0561ee6bfd5e4d1e7f31aef68cd8fb631e0c4fac package.json
1397
+ 57d2619e30cc63924ad3b433d4760e16323de898fdcccbbb336009ce0c1482c9 PROVENANCE.json
1398
1398
  27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
1399
1399
  0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
1400
1400
  bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
@@ -1403,9 +1403,9 @@ f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.jso
1403
1403
  731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
1404
1404
  d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
1405
1405
  3dc607603fea511e2f428e9546a875ab7e38b6a0bbd5e803e4510de082f30804 R49-PARENT.json
1406
- 2f5d490e1c17b2c2cd1cd3d2ab7842e772c145ea570cf640af728ee4f269d7c9 README.txt
1407
- f54e1bd692def7c884ca276dc2a954ca7a7acc752f64b9bbb2c99ed1ca00580b RELEASE.json
1408
- bb45b4a1b2e2784388be32b334c519c535902312c2a13b3856254e6632652208 SBOM.cdx.json
1406
+ 218348214070c7c04f7b462b4e71824248c75ee09602a97026c550552eb36341 README.txt
1407
+ 27668a6a9e578af5d64232bd6e599f89d18fabbe1290c7125d75b11b71651bbd RELEASE.json
1408
+ 0df08a9ad4f7c294379f91c50e4dc788cd6208e13cd5484bf4d527dd162e5a27 SBOM.cdx.json
1409
1409
  7c86062c4f69db3179a129d65945ccfab1b1c1c5bcc29b91383eac097d50f2aa scripts/activate-skill-creator-1.1.1.mjs
1410
1410
  bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
1411
1411
  8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
@@ -1413,7 +1413,7 @@ bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-
1413
1413
  34f9318b6f4afb29948fdc5ab973edca4dfc4fbd63c9a5105478b5e95812dabf scripts/autonomous-build.ps1
1414
1414
  075acd7616740135973497d676dcd0431f0437bdba87e4eedba4751cb148ff02 scripts/autonomous-tests.ps1
1415
1415
  f43c5e5064fb5863ce51aca156434d8b7c493ee954b8846f41625cd7130936d8 scripts/benchmark-l0-r71.mjs
1416
- deb0a47edfa72a17036c1a0a45b88f63405e009452120d673bfe008dc1b6d835 scripts/bootstrap-uac-migration-r153.ps1
1416
+ 8d2ca9595df68fc2947c5f501e1c55da7853d9f97a1f37732b011cf807f0b45f scripts/bootstrap-uac-migration-r153.ps1
1417
1417
  5d8ce87ffbe55f4737ba1ee2fa6772a8157bfa92afec9101909c0f9bead27fcb scripts/bridge-benchmark-r58.mjs
1418
1418
  7c3f2a157f64aef9e605b5fe84d75fbdd88312f09d0ad89effb33de82aa39ab8 scripts/build-advanced-pcb-skill.mjs
1419
1419
  70bccc3572de7e26ac91154b9d87185feab0c2dbfc4cbd40f89660e5769f53b0 scripts/build-combined-skill.mjs
@@ -1447,7 +1447,7 @@ a64b6779eff80d68d90d238dee7f2feda5ada3c5c59bcaeae2ab7812bd28404e scripts/deferr
1447
1447
  5af5953d67a5c494980feeb36bfc6df7d1cc8a6246f259c31cd3c64885d7e60a scripts/deferred-slot-operation-r46.mjs
1448
1448
  34116370895aeff9a424475558f4aca3b05460146455d9bb0bafcacd1a270910 scripts/deferred-slot-operation.mjs
1449
1449
  1cee04ab67a1e9a06f42cb5fde7073298ca501a059c961d11659a578aaef5e90 scripts/deploy-r47.mjs
1450
- 2cd369f37d0b4e357eb44c50b09981898e0035eb97abe019d6aafcb689125246 scripts/deploy-r48.mjs
1450
+ 1be4983bf63172064a1ef5ba0cbcc727f68f17fe1b0de1c248cd79aac89a53aa scripts/deploy-r48.mjs
1451
1451
  2cc7a37231f8836a48c3bf4024887f38c10bfc89296ac483e4b98b3f18281933 scripts/derive-r45-parent.mjs
1452
1452
  67221c5619019a9d19611432d4361c99c365f14e89483e4c8f78451839960176 scripts/derive-r45-release.mjs
1453
1453
  87c6acc0df96a6e8bb6692bc7b12e8b386196a80cba554d9b214ff8bb12147fe scripts/derive-r45-tests.mjs
@@ -1530,7 +1530,7 @@ a9d10a04324cceafafa7edc1501e8e1f8a1ae4a094d0985c8309472512529d30 scripts/gate-w
1530
1530
  1a771b5b8a62d57f26762d53472ed68a3e733674b1c91e08becf0dc2e4325039 scripts/inspect-active-release-r45.mjs
1531
1531
  de6142bd5693cf4edb8725c9c43fc77e9bdc12f5b398a757006d778d3ee3f8ed scripts/inspect-r46-active.mjs
1532
1532
  06425d2a4004cb0ad66383c10c30aaa91bb020be2926bc76f9681a8f0827ddfc scripts/inventory-reference-dist.mjs
1533
- 4b1ce879a1c3076629d2d13cd0d30764f58b9701c57104020d7a52aa99a1481d scripts/issue-uac-migration-r153.mjs
1533
+ d952ca5bb1d315f37c2d15625756c366b100e8c015f11fedfd22919fadefbea1 scripts/issue-uac-migration-r153.mjs
1534
1534
  7ea8cf6bf094a1612603bc716228a3753e5f06fca8a0684d2da15a04d0710c64 scripts/list-source-zips.mjs
1535
1535
  4326526cbff265bb8ec2d38af1825b0bac227e3506437fff6e13f9cdb20dab33 scripts/npm-artifact-identity-r61.mjs
1536
1536
  2598a67b08caaef2ff75fc52eca1e268c83b79c50048202e318904952379aa4a scripts/npm-prepublish-contract-r74.mjs
@@ -1561,7 +1561,7 @@ f682cb041e9dec3e4e99c87e9650e35c9f10d51cba458ec7040bbedc8b22f987 scripts/perfor
1561
1561
  6767992de09ed6f95f74a14b743bb5e5660fa63cbd2d5a6cdc2a14be3531c8cc scripts/promote-local-d-generation.ps1
1562
1562
  c4e081f95bc82e45a06993c34d47f10083640e794e2e3ccc26933fcf597b0c50 scripts/public-baseline-r58.mjs
1563
1563
  615c670581ee3e8a30095c0af63c24edbec01db74c7370069e1a486c53989968 scripts/public-surface-r58.mjs
1564
- 1f1bf8d98f7ab270cf390e21b2fce199fcb157ceb436755273241d436de0596e scripts/r153-prepublish-identity.mjs
1564
+ 3af9ef85417e0b55e00df060e345dde2b609b744b065549216c5ffa87130befa scripts/r153-prepublish-identity.mjs
1565
1565
  e19a1d591ccd07af2e87d930ce23b0cc9b814bc2a395408045543847154097d7 scripts/r40-compact-ledger-probe.mjs
1566
1566
  68b9a60aca3f3e3e9ec239710f8368594ef3c8a98fff0816d2e9a7950df48287 scripts/r47-core-failures.mjs
1567
1567
  75f821cc44f8c31f67de0b28b64021d9fb160984a597e704b29c33f9f3a41dde scripts/r47-syntax-check.mjs
@@ -1622,7 +1622,7 @@ d42efb6dd8e6abc79c66e768f8c0feb10fa3341bcce0888750461f56612f0fd3 scripts/releas
1622
1622
  1b83f49d9798188533c8cfca0030a98af34560fe181b3e593db790319e1b7bc5 scripts/release-parity.mjs
1623
1623
  21ddee002ddfc1d7c34bf92a4cc02abac38630c4814366216efda66217db6baa scripts/remove-source-archives-r47.mjs
1624
1624
  817c2f5ce7f2c935a268e16f4a2d8b8611ddf89df8776682082baafb63a84921 scripts/repair-builder-template.mjs
1625
- 68cee3df1e65efb81b283fc55a4e1aebc7d68defae2e22c4bf3eb414574985de scripts/request-uac-migration-r153.ps1
1625
+ bb06a46f53222181618569633c177e62274bcb11b440fcfea63826b0bb22edd4 scripts/request-uac-migration-r153.ps1
1626
1626
  fb6e47bf46f86887bcbde703b2618ead594ba430a6faf298be6b34432a87e030 scripts/run-r46-full-regression-background.mjs
1627
1627
  46751fc8c4f25329c235e1946c662f33c23c46428d4075a2f7c9543c801c5cfd scripts/run-r46-windows-gate-background.mjs
1628
1628
  cabfa63d5edb83f32b3e6e5ce22e76223644d81a3361d52a28de2dbc07e59a54 scripts/run-r46-windows-gate-background.ps1
@@ -1675,7 +1675,7 @@ c32cb9054a1b9641ae071c00622c0054272bdb0b519ea22c4ff926a1600a2b46 scripts/worklo
1675
1675
  1ee9251c743d817245e858229e1e1db4f7bebb7e5411d370d33c4777528e53e0 scripts/workload-substrate-r47-regression.mjs
1676
1676
  546947775fac8075f48c689ea0f7bed5ea14424efd12587daead4a7df6e796df src/activation-authority-proof-r75.mjs
1677
1677
  0fca861bfb959b6d84c4767b2f60a4e0ec2403291a6050ee7598f75d2c4c18e0 src/activation-continuity-engine-r65.mjs
1678
- ef15933f6d77fdbbddafef4e46352a12ecd4ed8e2d4c6dd515059ad5fa547e65 src/activation-lock-r65.mjs
1678
+ 64ff84efd679a4f2a7e7aefcca70c3199ad47ff069e18ea9c08a4305ddee2d50 src/activation-lock-r65.mjs
1679
1679
  fc05a48ac13961c2f1dee444946531ff80100a00750fb9f8e456a6d69f6e1310 src/activation-preflight-r65.mjs
1680
1680
  9dc1154b3857446d0412002e1f0b0031c23d1768350dc9395749a7f82be337e5 src/agent-backend-r44.mjs
1681
1681
  4e8e442497a15bce43b7d02ade497403d80b86e307473d26c172a0fba3a6d4ea src/agent-eval-r42.mjs
@@ -1713,7 +1713,7 @@ da5181cec30034ddf089baa5358becb5651da238a2e7cf0888007a4c60b4ea6b src/capability
1713
1713
  8348e01ec8dcd3171dab02399a2aa48cf09db2d283da25bfdde721a5c3f44b03 src/capability-ledger.mjs
1714
1714
  dd84aab65c73906037390b07f1d9e3e118511b21145e8ba914f98d6f2a153baf src/capability-resolver.mjs
1715
1715
  b3a669da30bf2d99cd5a912bdacb234b66c90215183a2aeeb3c01c91f1a55c64 src/capability-snapshot.mjs
1716
- 2c065a1d1d6b9e720073250e3e51db4d4b5b43b7e7276de370f04795a1fffb47 src/clean-activation-recovery-r153.mjs
1716
+ 3e2818046625828107e2fcb6723eaf9f227648f781293b1abac475cf03ee7565 src/clean-activation-recovery-r153.mjs
1717
1717
  94e5aeff2453cdc0239aee4d547dbbefee183c71933cb84e5e8a418fa99bc1e8 src/codex-app-server-r44.mjs
1718
1718
  c4e07aa6818cd989c43ce8d027dc7d467e05c8e2fe96b5548eea291285d3bbb1 src/coding-mcp-tools.mjs
1719
1719
  059b4bef2ae6a6c2d7a706c463bea6e49d364faeb619372a429ba36c53004ab7 src/coding-output-contracts.mjs
@@ -1748,7 +1748,7 @@ dcd4c9784e88e253e91ddad3c24b38cb0b36906ed737f6d7bee7712360f66f7a src/containmen
1748
1748
  fe1761b98738e1aea1d25ddf3a0ba56ccad95a43d45104a89b8665197c7c9e18 src/containment-result.mjs
1749
1749
  705a89cb12fedb993d55dfed32a5870d33e10db26422c944d1e52223566c096c src/containment-smoke.mjs
1750
1750
  63a1d4d6a53f9eb7e02197b4e42158b867da8c042c2e61848d8a36cd398b8bd8 src/context-provenance.mjs
1751
- 0d6c6534d41cd4ef8568d2dc52a5ed39aab53c9a4e09bfe266ac129aa034bb46 src/deadbyte-cli.mjs
1751
+ d766b4643e1e6e7f03f51c9033b99248612ede1a995cd826923febd556563954 src/deadbyte-cli.mjs
1752
1752
  9e9766d64dcc9e2c8d23c2c0a5e9dcb87b7213e8de668f79f593ad48daf15acd src/deadline-cancellation.mjs
1753
1753
  fe7a8f8611c33552b3da466a9b866ce79a737bfd5b9a78a953269b30cce16274 src/desktop-contract.mjs
1754
1754
  f97352e510c659910c2d4a874d15be028e1291d685c6c1a7be53bdf1a335c2d8 src/desktop-input-r40.mjs
@@ -1890,16 +1890,16 @@ bac271c6f5218752ac5ff4decf5249e3893ddb35c63c092ce17238c27fc4d35b src/trust-init
1890
1890
  4d934281a72922fabde7d6e988655a6d095eb3a89abf12e9b99fecc3046e3d62 src/trust.mjs
1891
1891
  c99c2402fb0df4f68634fa906eb198c551c55dad9f0921a7b8ed6e33d503884e src/tunnel-stdio-compat-smoke.mjs
1892
1892
  aa765e9a28c69ff58a5b5a0d29b49ea181af4db9076633b102dbca25861e708e src/tunnel-stdio-compat.mjs
1893
- 866f61da7296f9a97e0cd6361c3d0cd19213ac5e3cd55c450047f35695074f86 src/uac-approval-contract-r153.mjs
1893
+ e241728ead29da4336c66011464c1204874741c92667a1bc2cd92d0b29cc04e2 src/uac-approval-contract-r153.mjs
1894
1894
  642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
1895
1895
  8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
1896
- d3a013dc7456463ba443661428c8d09ba099d2a40501b0478fc3f3fbcf905527 src/version.mjs
1896
+ b2a6b4f53b8c7b729995a2cd87c616492c9dac01d7b6de2e2c8f0b0c487ff63a src/version.mjs
1897
1897
  acf5f5a57779bc0529f9db3d821f0ef1b53d22063aa237041348c1ca444ea677 src/windows-powershell-environment.mjs
1898
1898
  7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
1899
1899
  76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
1900
1900
  4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
1901
1901
  1bd637e7634ca0259791c5108fcf324554f70b1db49e5eac3505287c04bbc3be STABILIZATION-PROGRESS.md
1902
- b5449638038a56ca4e34963ca526439a6308cc6e4f2834ef016a2de2116ec422 TEST-MATRIX.json
1902
+ 908286ccfafec104fe2b1cf50253c579fedc3acf0275d4ebd5ed2f706b001a20 TEST-MATRIX.json
1903
1903
  e4f1fb97545f23772ddff28ad3f9954a4714f9854062fca62e0e12c1cb2ec4ae test/agent-backend-r44.test.mjs
1904
1904
  2a78c818058b25efdc143a3a97c832da231ccd6ff9d90c7796d681a0251b85c4 test/agent-crash-child.mjs
1905
1905
  d9461ab7c118ee75d37a2d6f5e637d7e43505af6a9ad8c7ddafffc8ace185a5b test/agent-crash-worker.mjs
@@ -2153,9 +2153,9 @@ ce163ee9f288e30a213636e2267b8630016ef8a170f12286e8cdd44219bdab32 test/r124-live
2153
2153
  17475b51e416ae678f959f8975fab8497eb7c57d13e36cac8656c0e1f7424c0c test/r126-restore-policy-envelope.test.mjs
2154
2154
  1721d4bd3bb58c10ad9d86b69ad1d993ec5a1e6315c95b28fa50ab67d4ca302a test/r127-restore-append-policy-boundary.test.mjs
2155
2155
  b3d3dda398c94d18e2e156bde65d1338000233407b435134ba0c16175d96620b test/r129-sdk-security-baseline.test.mjs
2156
- 772b9c88cd1d2bbcdbbe3e4f671526315edbeb889f67981d9ec158ce9162124d test/r130-release-security-contract.test.mjs
2156
+ 593ea4cc04fa6f09188774cedc39978a8279f1201c3222184eb1433ebcc258b0 test/r130-release-security-contract.test.mjs
2157
2157
  bb7963baf412ec0f5aca183f6dd98eda9026fe763017f9af595581b521ae6cb7 test/r131-installed-manifest-boundary.test.mjs
2158
- fed899734017d1ff871c43b4ece957422bbfb94b4aeabbebc6548cf6f17e1345 test/r132-release-identity.test.mjs
2158
+ f3571a18beeeecb4073e3169acd7ffb5a7dda169406170ad40ba4867572621c4 test/r132-release-identity.test.mjs
2159
2159
  acd236a4d8ba035007bde4166a521b8d4e6044f58c52c0bae9cb42fa75338533 test/r135-autonomous-scope.test.mjs
2160
2160
  3fcf657aae1f8466abc5ab82bb5a619966ea9b8a33d4a95a5a5246df5bf3afa1 test/r136-scoped-command-rights.test.mjs
2161
2161
  e0c466f25b35eb894166df792b71b23924610d32363756c75ff437dfdaa12a4c test/r136-scoped-observer.test.mjs
@@ -2178,13 +2178,15 @@ ef0665adaab2a2b2d6ca8611a6335ded96b8e65a9661840acd139d3c86710e62 test/r144-cont
2178
2178
  b92f914455cac010b1468cd37a31651e7d423571d0edfeb29829d2281073e1e3 test/r146-legacy-offline-policy-proof.test.mjs
2179
2179
  32f40b649033172384267bbe8f6009dededcba81afff1e3ca51331407197fe3b test/r146-livelog-backpressure.test.mjs
2180
2180
  77b3bfcd6fa04e21c7a04206181f7b4cbd5321f799a145859d8e84d0b984d174 test/r147-remote-request-hash.test.mjs
2181
- ef36f10e2da43b720b8681550f95f5f1af4f1059d233122ed04861ecb3194d1a test/r153-clean-activation-recovery.test.mjs
2181
+ 48157c509b03fe5661a67a5c68d931c455a71494fb1d52ef0070effb764873f3 test/r153-clean-activation-recovery.test.mjs
2182
2182
  b1c9d788a607e579d18a1be36e0837dcc34b343bb53d55f9fb51c202af13bacd test/r153-prepublish-identity.test.mjs
2183
+ 377b03dbb1d82ed0ddeee261a060b8173d5591dfc20a60d9ea991390a03039b4 test/r153-r60-host-repin-e2e-contract.test.mjs
2184
+ 658a839860ca6bfc7a26cf8f793c58f6cdeb2a8d425744ee7872f2eca3ff4ef6 test/r153-r65-signed-precondition-recovery.test.mjs
2183
2185
  ce37fc59761ceddf43fd3844b34d57f64f1c8d191ca1d6cba13b643a5e2c02ce test/r153-restricted-reused-pid.test.mjs
2184
2186
  3c8d2110e869d4a6f125c9a4978c049f54424893f2317312448813ba0f19860f test/r153-staging-leaf-acl.test.mjs
2185
- 4a77ad57c5f06f9740fe42dcceda49047c39466d040dc1965cc311996e4c54d3 test/r153-uac-approval-contract.test.mjs
2187
+ b3e9fb4452b3a96ddc5af1a7873eb487bd273e042aa7eb91bbd03f8f7d8f46a9 test/r153-uac-approval-contract.test.mjs
2186
2188
  3d6a76df732eaa52b7409aa26c933f9e4d8316b64ded5cfad4202fea51b74fcd test/r153-uac-installed-manifest-contract.test.mjs
2187
- f75d97eaa6c7b83550eab4f1278958942b53ae25706156fe4f3cc67c242bf77b test/r153-uac-launch-parameter-contract.test.mjs
2189
+ 7d4ac1735e2c8760a4fe424aec6ceef8def6680c882c2cde32a59bedccb5edff test/r153-uac-launch-parameter-contract.test.mjs
2188
2190
  3c5c3724bce89aa1fa59fe97cc346c40a5674bb5cd6dc3e2f31b86f2d62e75e4 test/r33-closeout-regression.test.mjs
2189
2191
  5e3700ee610442dfd7b7ae5e380263f231438be0e32790597142c41362a53c9a test/r33-finalization.test.mjs
2190
2192
  7e419d3c1caf79bfc7407207f50e5645298f9b19d91a7d6f595af185b92cd55e test/r36-finalization.test.mjs
@@ -2250,7 +2252,7 @@ ca8e23abc89f3eadeceb4b6fdad2cb4db5a7933029ece8e8beae2c6a158876b7 test/r58-owner
2250
2252
  8fc5ed1d3088facf45f9578d9ff8514c3a633f7f342d15eec316e129e7a916c0 test/r58-stale-owner.test.mjs
2251
2253
  84be7ee7d167eb06c9f9fc178930daaa81e53a91de40bad6d7df2060bd3dd165 test/r58-windows-gate.test.mjs
2252
2254
  76db2a4009d76b86e1da57b91a96b0d6bfeb4063bec3301ede736e2fd5832f39 test/r59-release-contract.test.mjs
2253
- 4547f13cc32fa1316fdce26086783e0c91dd48d8170fbe956cb5352a0fd2f3ad test/r59-tool-surface-compat.test.mjs
2255
+ 65c50d4be2fa29851a2f908da569bdd3c4f8e1b970bddfdc7fda15a153edde13 test/r59-tool-surface-compat.test.mjs
2254
2256
  3befd5d4dc4d8ca9e1f6cbeb9c430671e676c5696d6ee5931c2cbe3244c558a4 test/r60-authority-coherence.test.mjs
2255
2257
  60577e231c7d164f57a3960c574d3e369ca140d9dbc477b2444fa62dbf224e51 test/r60-authority-enforcement.test.mjs
2256
2258
  a1fa0b1e529da05f3659a33be6d36dab02f93808638cf0f458d057e9c6d1e35b test/r60-bridge-dispatch.test.mjs
package/PROVENANCE.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "schema": "deadbyte.provenance.v1",
3
- "version": "0.15.59",
4
- "source_model": "published 0.15.58 tarball -> isolated R153 clean activation recovery successor",
3
+ "version": "0.15.60",
4
+ "source_model": "published 0.15.59 tarball -> isolated R153 clean activation recovery successor",
5
5
  "signing": "ed25519",
6
- "parent_tarball_sha256": "4bc53cfa6b3890b5749066cb507e8773b36d6c255192a8973dadb8546a39822e",
6
+ "parent_tarball_sha256": "0c20152b8ee553f06f05dfe017f4bd823d30cd50710722e9e0874f0bd6c66c75",
7
7
  "parent_activation_status": "PRODUCTION_ACTIVE",
8
8
  "parent_rollback_receipt_sha256": null,
9
9
  "runtime_predecessor": {
@@ -11,8 +11,8 @@
11
11
  "manifest_sha256": "34aa8d1241cfb8bf0b5ba303bf3c06e0e9e1bf01f64457bca659d6dd4d634fdc",
12
12
  "generation_manifest_sha256": "ff2b73410062688651abd7bc2dd7b2b8c87810a28e3808bfe1f4352a25b0e6e4"
13
13
  },
14
- "source_predecessor_manifest_file_sha256": "ec621a8a16f264f8824aa4644c914aca8f6ce57cb3578f5bce8acf2ac77fcc18",
15
- "reproducibility": "R153 isolated successor of published 0.15.58 tarball SHA-256 4bc53cfa6b3890b5749066cb507e8773b36d6c255192a8973dadb8546a39822e; production runtime 0.15.45 remains immutable until exact candidate gates pass; legacy migration is one-time Windows UAC, marker-bound, and may only narrow policy while retaining all authority disarmed",
14
+ "source_predecessor_manifest_file_sha256": "f727be4a63220f4215f18282a1fd89963924a64adcd07747ca3c12d8fb166d86",
15
+ "reproducibility": "R153 isolated successor of published 0.15.59 tarball SHA-256 0c20152b8ee553f06f05dfe017f4bd823d30cd50710722e9e0874f0bd6c66c75; production runtime 0.15.45 remains immutable until exact candidate gates pass; legacy migration is one-time Windows UAC, marker-bound, and may only narrow policy while retaining all authority disarmed",
16
16
  "public_surface_evidence": {
17
17
  "status": "PASS",
18
18
  "baseline_release": "v0.15.35-1b5715b276facbc0",
@@ -80,8 +80,8 @@
80
80
  "parent_release_id": "v0.15.45-34aa8d1241cfb8bf",
81
81
  "parent_manifest_sha256": "34aa8d1241cfb8bf0b5ba303bf3c06e0e9e1bf01f64457bca659d6dd4d634fdc",
82
82
  "parent_generation_manifest_sha256": "ff2b73410062688651abd7bc2dd7b2b8c87810a28e3808bfe1f4352a25b0e6e4",
83
- "source_predecessor_version": "0.15.58",
84
- "source_predecessor_tarball_sha256": "4bc53cfa6b3890b5749066cb507e8773b36d6c255192a8973dadb8546a39822e",
83
+ "source_predecessor_version": "0.15.59",
84
+ "source_predecessor_tarball_sha256": "0c20152b8ee553f06f05dfe017f4bd823d30cd50710722e9e0874f0bd6c66c75",
85
85
  "operator_override": {
86
86
  "four_hour_soak": "WAIVED_BY_OPERATOR",
87
87
  "clean_machine": "WAIVED_BY_OPERATOR",
package/README.txt CHANGED
@@ -1,4 +1,4 @@
1
- DEADBYTE MCP V0.15.59 / R153 CLEAN ACTIVATION RECOVERY
1
+ DEADBYTE MCP V0.15.60 / R153 CLEAN ACTIVATION RECOVERY
2
2
  =========================
3
3
 
4
4
  AUTHENTICATED MACHINE TRUTH + DURABLE AGENT + CODING + AUTONOMOUS PRODUCTION ENGINE
@@ -16,12 +16,12 @@ check `--version` before issuing a stateful command. The compatibility CMD
16
16
  fails with an explanation when npm is detected rather than forwarding the
17
17
  wrong command to the controller.
18
18
 
19
- npx -y deadbyte-mcp@0.15.59 mcp
20
- npx -y deadbyte-mcp@0.15.59 remote
21
- npx -y deadbyte-mcp@0.15.59 remote status
22
- npx -y deadbyte-mcp@0.15.59 remote restart
23
- npx -y deadbyte-mcp@0.15.59 audit status
24
- npx -y deadbyte-mcp@0.15.59 audit verify
19
+ npx -y deadbyte-mcp@0.15.60 mcp
20
+ npx -y deadbyte-mcp@0.15.60 remote
21
+ npx -y deadbyte-mcp@0.15.60 remote status
22
+ npx -y deadbyte-mcp@0.15.60 remote restart
23
+ npx -y deadbyte-mcp@0.15.60 audit status
24
+ npx -y deadbyte-mcp@0.15.60 audit verify
25
25
 
26
26
  MAJOR MCP CLIENT STDIO CONFIGS
27
27
  -------------------------------
@@ -32,7 +32,7 @@ CLAUDE DESKTOP
32
32
  "mcpServers": {
33
33
  "deadbyte": {
34
34
  "command": "npx",
35
- "args": ["-y", "deadbyte-mcp@0.15.59", "mcp"]
35
+ "args": ["-y", "deadbyte-mcp@0.15.60", "mcp"]
36
36
  }
37
37
  }
38
38
  }
@@ -44,7 +44,7 @@ Save as .cursor/mcp.json:
44
44
  "mcpServers": {
45
45
  "deadbyte": {
46
46
  "command": "npx",
47
- "args": ["-y", "deadbyte-mcp@0.15.59", "mcp"]
47
+ "args": ["-y", "deadbyte-mcp@0.15.60", "mcp"]
48
48
  }
49
49
  }
50
50
  }
@@ -57,7 +57,7 @@ Save as .vscode/mcp.json:
57
57
  "deadbyte": {
58
58
  "type": "stdio",
59
59
  "command": "npx",
60
- "args": ["-y", "deadbyte-mcp@0.15.59", "mcp"]
60
+ "args": ["-y", "deadbyte-mcp@0.15.60", "mcp"]
61
61
  }
62
62
  }
63
63
  }
@@ -67,7 +67,7 @@ Add to the Codex MCP configuration:
67
67
 
68
68
  [mcp_servers.deadbyte]
69
69
  command = "npx"
70
- args = ["-y", "deadbyte-mcp@0.15.59", "mcp"]
70
+ args = ["-y", "deadbyte-mcp@0.15.60", "mcp"]
71
71
 
72
72
  The `mcp` command is the quiet stdio server entry for local MCP clients; stdout is reserved for MCP.
73
73
  The remote CLI invokes the stable active-release PowerShell launcher directly with shell=false.
@@ -356,7 +356,7 @@ CONTROLLER
356
356
  ----------
357
357
  Primary operator entry point:
358
358
 
359
- npx -y deadbyte-mcp@0.15.59 remote
359
+ npx -y deadbyte-mcp@0.15.60 remote
360
360
 
361
361
  The legacy CMD entry remains compatibility-only for R33 rollback safety.
362
362
 
@@ -417,7 +417,7 @@ MCP CLIENT CONFIGURATION
417
417
  ------------------------
418
418
  The local stdio entry point is quiet and suitable for MCP hosts:
419
419
 
420
- npx -y deadbyte-mcp@0.15.59 mcp
420
+ npx -y deadbyte-mcp@0.15.60 mcp
421
421
 
422
422
  CLAUDE DESKTOP
423
423
  Use the standard local-server entry in claude_desktop_config.json:
@@ -426,7 +426,7 @@ Use the standard local-server entry in claude_desktop_config.json:
426
426
  "mcpServers": {
427
427
  "deadbyte": {
428
428
  "command": "npx",
429
- "args": ["-y", "deadbyte-mcp@0.15.59", "mcp"]
429
+ "args": ["-y", "deadbyte-mcp@0.15.60", "mcp"]
430
430
  }
431
431
  }
432
432
  }
@@ -439,7 +439,7 @@ Create .cursor/mcp.json:
439
439
  "deadbyte": {
440
440
  "type": "stdio",
441
441
  "command": "npx",
442
- "args": ["-y", "deadbyte-mcp@0.15.59", "mcp"]
442
+ "args": ["-y", "deadbyte-mcp@0.15.60", "mcp"]
443
443
  }
444
444
  }
445
445
  }
@@ -452,7 +452,7 @@ Create .vscode/mcp.json:
452
452
  "deadbyte": {
453
453
  "type": "stdio",
454
454
  "command": "npx",
455
- "args": ["-y", "deadbyte-mcp@0.15.59", "mcp"]
455
+ "args": ["-y", "deadbyte-mcp@0.15.60", "mcp"]
456
456
  }
457
457
  }
458
458
  }
@@ -462,9 +462,9 @@ Add this to ~/.codex/config.toml:
462
462
 
463
463
  [mcp_servers.deadbyte]
464
464
  command = "npx"
465
- args = ["-y", "deadbyte-mcp@0.15.59", "mcp"]
465
+ args = ["-y", "deadbyte-mcp@0.15.60", "mcp"]
466
466
 
467
- The remote device path remains `npx -y deadbyte-mcp@0.15.59 remote`. Remote public MCP uses the
467
+ The remote device path remains `npx -y deadbyte-mcp@0.15.60 remote`. Remote public MCP uses the
468
468
  verified HTTPS named-tunnel URL selected by the active generation; do not commit a private device
469
469
  URL or tunnel token into a repository.
470
470
 
package/RELEASE.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema": "deadbyte.release.v1",
3
3
  "name": "deadbyte-mcp",
4
- "version": "0.15.59",
4
+ "version": "0.15.60",
5
5
  "train": "R153",
6
6
  "label": "R153 CLEAN ACTIVATION RECOVERY",
7
7
  "protocol_revision": "2026-07-28",
@@ -19,10 +19,10 @@
19
19
  "generation_manifest_sha256": "ff2b73410062688651abd7bc2dd7b2b8c87810a28e3808bfe1f4352a25b0e6e4"
20
20
  },
21
21
  "source_predecessor": {
22
- "version": "0.15.58",
23
- "source_path": "C:\\Users\\DEADBYTE\\.deadbyte-mcp\\evidence\\npm-publication\\0.15.58\\deadbyte-mcp-0.15.58.tgz",
22
+ "version": "0.15.59",
23
+ "source_path": "C:\\Users\\DEADBYTE\\.deadbyte-mcp\\evidence\\npm-publication\\0.15.59\\deadbyte-mcp-0.15.59.tgz",
24
24
  "release_status": "REGISTRY_PUBLISHED",
25
- "tarball_sha256": "4bc53cfa6b3890b5749066cb507e8773b36d6c255192a8973dadb8546a39822e"
25
+ "tarball_sha256": "0c20152b8ee553f06f05dfe017f4bd823d30cd50710722e9e0874f0bd6c66c75"
26
26
  },
27
27
  "consolidation": {
28
28
  "frontend_status_vocabulary": true,
@@ -417,9 +417,9 @@
417
417
  "stable_final_claim": false
418
418
  },
419
419
  "r153": {
420
- "release_candidate_version": "0.15.59",
421
- "source_predecessor_version": "0.15.58",
422
- "source_predecessor_tarball_sha256": "4bc53cfa6b3890b5749066cb507e8773b36d6c255192a8973dadb8546a39822e",
420
+ "release_candidate_version": "0.15.60",
421
+ "source_predecessor_version": "0.15.59",
422
+ "source_predecessor_tarball_sha256": "0c20152b8ee553f06f05dfe017f4bd823d30cd50710722e9e0874f0bd6c66c75",
423
423
  "production_predecessor_version": "0.15.45",
424
424
  "startup_order": "LOCK_MARKER_RECONCILE_ACTIVATE_CLAIM_START",
425
425
  "stale_marker_reconciliation": "PASS_FOCUSED_CONTENT_CAS",
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:r153:0.15.59",
4
+ "serialNumber": "urn:cdx:deadbyte-mcp:r153:0.15.60",
5
5
  "version": 1,
6
6
  "metadata": {
7
7
  "component": {
8
8
  "type": "application",
9
9
  "name": "deadbyte-mcp",
10
- "version": "0.15.59"
10
+ "version": "0.15.60"
11
11
  }
12
12
  },
13
13
  "components": [
package/TEST-MATRIX.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema": "deadbyte.test-matrix.v1",
3
- "version": "0.15.59",
3
+ "version": "0.15.60",
4
4
  "train": "R153",
5
5
  "primary_platform": "win32-x64",
6
6
  "reference": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deadbyte-chatgpt-bridge",
3
- "version": "0.15.59",
3
+ "version": "0.15.60",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "engines": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deadbyte-mcp",
3
- "version": "0.15.59",
3
+ "version": "0.15.60",
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.",
@@ -1,5 +1,5 @@
1
1
  param(
2
- [Parameter(Mandatory=$true)][ValidateSet('0.15.59')][string]$ExpectedVersion,
2
+ [Parameter(Mandatory=$true)][ValidateSet('0.15.60')][string]$ExpectedVersion,
3
3
  [Parameter(Mandatory=$true)][string]$StateRoot,
4
4
  [Parameter(Mandatory=$true)][string]$TarballPath,
5
5
  [Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$ExpectedTarballSha256,
@@ -9,6 +9,7 @@ param(
9
9
  [Parameter(Mandatory=$true)][string]$StderrPath,
10
10
  [Parameter(Mandatory=$true)][string]$MarkerReceiptPath,
11
11
  [Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$MarkerReceiptSha256,
12
+ [ValidatePattern('^powershell_script=[0-9a-f]{64}$')][string]$HostCommandPin,
12
13
  [switch]$Bootstrap
13
14
  )
14
15
  $ErrorActionPreference = 'Stop'
@@ -65,6 +66,7 @@ if (-not $Bootstrap) {
65
66
  '-ExpectedManifestSha256',$ExpectedManifestSha256,'-ExpectedBootstrapSha256',$ExpectedBootstrapSha256,
66
67
  '-StdoutPath',(Quote $StdoutPath),'-StderrPath',(Quote $StderrPath),
67
68
  '-MarkerReceiptPath',(Quote $MarkerReceiptPath),'-MarkerReceiptSha256',$MarkerReceiptSha256)
69
+ if ($HostCommandPin) { $arguments += @('-HostCommandPin',$HostCommandPin) }
68
70
  $child = Start-Process -FilePath $powershell -ArgumentList $arguments -Verb RunAs -Wait -PassThru -WindowStyle Hidden
69
71
  if (Test-Path -LiteralPath $StdoutPath) { [Console]::Out.Write([IO.File]::ReadAllText($StdoutPath)) }
70
72
  if (Test-Path -LiteralPath $StderrPath) { [Console]::Error.Write([IO.File]::ReadAllText($StderrPath)) }
@@ -99,7 +101,7 @@ if ($LASTEXITCODE -ne 0) { throw 'R153 protected staging initial ACL normalizati
99
101
  & $icacls $prefix '/setowner' '*S-1-5-32-544' '/T' '/C' | Out-Null
100
102
  if ($LASTEXITCODE -ne 0) { throw 'R153 protected staging initial owner normalization failed' }
101
103
 
102
- $metadataUri = 'https://registry.npmjs.org/deadbyte-mcp/0.15.59'
104
+ $metadataUri = 'https://registry.npmjs.org/deadbyte-mcp/0.15.60'
103
105
  $tagsUri = 'https://registry.npmjs.org/-/package/deadbyte-mcp/dist-tags'
104
106
  [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
105
107
  $metadata = Invoke-RestMethod -UseBasicParsing -Uri $metadataUri -Method Get -TimeoutSec 30
@@ -223,9 +225,11 @@ $preflight = ($preflightOutput -join "`n") | ConvertFrom-Json
223
225
  if ($preflight.state -ne 'AUTHORITY_UNVERIFIED' -or $preflight.subject_sha256 -notmatch '^[0-9a-f]{64}$') {
224
226
  throw "R153 protected migration not applicable: $($preflight.state)"
225
227
  }
226
- & $helper -Elevated -NodePath $node -DeployScript $deploy -StateRoot $StateRoot `
227
- -StdoutPath $StdoutPath -StderrPath $StderrPath -MarkerReceiptPath $MarkerReceiptPath `
228
- -MarkerReceiptSha256 $MarkerReceiptSha256 -PreflightSubjectSha256 $preflight.subject_sha256
228
+ $helperArgs = @('-Elevated','-NodePath',$node,'-DeployScript',$deploy,'-StateRoot',$StateRoot,
229
+ '-StdoutPath',$StdoutPath,'-StderrPath',$StderrPath,'-MarkerReceiptPath',$MarkerReceiptPath,
230
+ '-MarkerReceiptSha256',$MarkerReceiptSha256,'-PreflightSubjectSha256',$preflight.subject_sha256)
231
+ if ($HostCommandPin) { $helperArgs += @('-HostCommandPin',$HostCommandPin) }
232
+ & $helper @helperArgs
229
233
  $helperExit = $LASTEXITCODE
230
234
  try { Remove-Item -LiteralPath $prefix -Recurse -Force -ErrorAction Stop }
231
235
  catch { [Console]::Error.WriteLine('R153_STAGE_CLEANUP_WARNING: protected stage retained for operator reconciliation') }
@@ -24,11 +24,17 @@ const sleep=ms=>new Promise(resolve=>setTimeout(resolve,ms));
24
24
  function parseDeployArgs(argv){
25
25
  const out={preflight:false,approvalPath:null,approvalSha256:null,uacLegacyMigration:false,
26
26
  markerReceiptPath:null,markerReceiptSha256:null,migrationNonce:null,migrationIssuedAt:null,
27
- migrationExpiresAt:null,uacApprovalPath:null,uacApprovalSha256:null};
27
+ migrationExpiresAt:null,uacApprovalPath:null,uacApprovalSha256:null,hostCommandPin:null};
28
28
  for(let index=0;index<argv.length;index++){
29
29
  const arg=argv[index];
30
30
  if(arg==='--preflight'){if(out.preflight)throw new Error('duplicate --preflight');out.preflight=true;continue;}
31
31
  if(arg==='--uac-legacy-migration'){if(out.uacLegacyMigration)throw new Error('duplicate --uac-legacy-migration');out.uacLegacyMigration=true;continue;}
32
+ if(arg==='--host-command-pin'){
33
+ if(out.hostCommandPin!==null)throw new Error('duplicate --host-command-pin');
34
+ const value=String(argv[++index]??'');
35
+ if(!/^powershell_script=[0-9a-f]{64}$/.test(value))throw new Error('--host-command-pin requires powershell_script=lowercase_sha256');
36
+ out.hostCommandPin=value;continue;
37
+ }
32
38
  if(arg==='--marker-reconciliation-receipt'){
33
39
  if(out.markerReceiptPath)throw new Error('duplicate --marker-reconciliation-receipt');
34
40
  const value=argv[++index];if(!value)throw new Error('--marker-reconciliation-receipt requires a path');
@@ -70,6 +76,7 @@ function parseDeployArgs(argv){
70
76
  const uacFields=[out.migrationNonce,out.migrationIssuedAt,out.migrationExpiresAt,out.uacApprovalPath,out.uacApprovalSha256];
71
77
  if(out.uacLegacyMigration&&uacFields.some(value=>!value))throw new Error('UAC migration requires nonce, lifetime, and approval receipt');
72
78
  if(!out.uacLegacyMigration&&uacFields.some(value=>value))throw new Error('UAC migration arguments require --uac-legacy-migration');
79
+ if(out.hostCommandPin!==null&&(!out.uacLegacyMigration||out.preflight))throw new Error('explicit host repin requires the elevated UAC migration');
73
80
  return out;
74
81
  }
75
82
  const deployArgs=parseDeployArgs(process.argv.slice(2));
@@ -313,6 +320,7 @@ const args=[
313
320
  '--bridge-root',bridgeRoot,'--bridge-script-sha256',await sha(bridgeScript),
314
321
  '--enable-machine-fs','--enable-observation','--enable-desktop','--enable-autonomous-supervisor','--recover-offline-predecessor'
315
322
  ];
323
+ if(deployArgs.hostCommandPin!==null)args.push('--host-command-pin',deployArgs.hostCommandPin);
316
324
  let result=null,verification=null,activationOutcomePath=null;
317
325
  let continuityEngine=null,continuityUpdateId=null;
318
326
 
@@ -45,7 +45,7 @@ async function main(){
45
45
  if(trust.trusted!==true)fail('candidate not R89 protected');
46
46
  const pkg=JSON.parse((await read(path.join(root,'package.json'))).toString('utf8'));
47
47
  const rel=JSON.parse((await read(path.join(root,'RELEASE.json'))).toString('utf8'));
48
- if(pkg.version!=='0.15.59'||rel.version!==pkg.version)fail('candidate release identity mismatch');
48
+ if(pkg.version!=='0.15.60'||rel.version!==pkg.version)fail('candidate release identity mismatch');
49
49
  const pointer=parseActivePointer((await read(path.join(state,'active-release.json'))).toString('utf8'));
50
50
  if(pointer.version!=='0.15.45'||rel.parent?.release_id!==pointer.release_id||
51
51
  rel.parent?.manifest_sha256!==pointer.manifest_sha256||
@@ -6,9 +6,9 @@ import {fileURLToPath} from 'node:url';
6
6
  const defaultRoot=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
7
7
  const hex64=/^[0-9a-f]{64}$/;
8
8
  const EXPECTED=Object.freeze({
9
- candidateVersion:'0.15.59', train:'R153',
10
- sourceVersion:'0.15.58',
11
- sourceSha256:'4bc53cfa6b3890b5749066cb507e8773b36d6c255192a8973dadb8546a39822e',
9
+ candidateVersion:'0.15.60', train:'R153',
10
+ sourceVersion:'0.15.59',
11
+ sourceSha256:'0c20152b8ee553f06f05dfe017f4bd823d30cd50710722e9e0874f0bd6c66c75',
12
12
  runtimeVersion:'0.15.45',
13
13
  runtimeReleaseId:'v0.15.45-34aa8d1241cfb8bf',
14
14
  runtimeManifest:'34aa8d1241cfb8bf0b5ba303bf3c06e0e9e1bf01f64457bca659d6dd4d634fdc',
@@ -7,6 +7,7 @@ param(
7
7
  [Parameter(Mandatory=$true)][string]$MarkerReceiptPath,
8
8
  [Parameter(Mandatory=$true)][ValidatePattern('^[0-9a-f]{64}$')][string]$MarkerReceiptSha256,
9
9
  [ValidatePattern('^[0-9a-f]{64}$')][string]$PreflightSubjectSha256,
10
+ [ValidatePattern('^powershell_script=[0-9a-f]{64}$')][string]$HostCommandPin,
10
11
  [switch]$Elevated
11
12
  )
12
13
  $ErrorActionPreference = 'Stop'
@@ -99,6 +100,7 @@ if (-not $Elevated) {
99
100
  # -Verb RunAs is the UseShellExecute parameter set. PowerShell 5.1 rejects
100
101
  # -RedirectStandardOutput/-RedirectStandardError in that same Start-Process.
101
102
  # The elevated child writes bounded, no-clobber evidence instead.
103
+ if ($HostCommandPin) { $arguments += @('-HostCommandPin',$HostCommandPin) }
102
104
  $child = Start-Process -FilePath $powershell -ArgumentList $arguments -Verb RunAs -Wait -PassThru -WindowStyle Hidden
103
105
  if (Test-Path -LiteralPath $StdoutPath) { [Console]::Out.Write([IO.File]::ReadAllText($StdoutPath)) }
104
106
  if (Test-Path -LiteralPath $StderrPath) { [Console]::Error.Write([IO.File]::ReadAllText($StderrPath)) }
@@ -135,14 +137,16 @@ try {
135
137
  $priorErrorAction = $ErrorActionPreference
136
138
  $ErrorActionPreference = 'Continue'
137
139
  try {
138
- $deployOutput = @(& $NodePath $DeployScript '--uac-legacy-migration' `
139
- '--marker-reconciliation-receipt' $MarkerReceiptPath `
140
- '--marker-reconciliation-receipt-sha256' $MarkerReceiptSha256 `
141
- '--migration-nonce' $issued.nonce `
142
- '--migration-issued-at' $issued.issued_at_utc `
143
- '--migration-expires-at' $issued.expires_at_utc `
144
- '--uac-approval-receipt' $issued.receipt_path `
145
- '--uac-approval-receipt-sha256' $issued.receipt_sha256 2>&1)
140
+ $deployArgs = @('--uac-legacy-migration',
141
+ '--marker-reconciliation-receipt',$MarkerReceiptPath,
142
+ '--marker-reconciliation-receipt-sha256',$MarkerReceiptSha256,
143
+ '--migration-nonce',$issued.nonce,
144
+ '--migration-issued-at',$issued.issued_at_utc,
145
+ '--migration-expires-at',$issued.expires_at_utc,
146
+ '--uac-approval-receipt',$issued.receipt_path,
147
+ '--uac-approval-receipt-sha256',$issued.receipt_sha256)
148
+ if ($HostCommandPin) { $deployArgs += @('--host-command-pin',$HostCommandPin) }
149
+ $deployOutput = @(& $NodePath $DeployScript @deployArgs 2>&1)
146
150
  $deployExit = $LASTEXITCODE
147
151
  } finally { $ErrorActionPreference = $priorErrorAction }
148
152
  $deployText = (@($deployOutput) | ForEach-Object { [string]$_ }) -join "`n"
@@ -85,6 +85,41 @@ async function isSafeTerminalActivation(outcome,lock,stateRoot){
85
85
  return true;
86
86
  }
87
87
 
88
+ async function isSafeSignedPreconditionReject(outcome,lock,stateRoot){
89
+ if(!outcomeMatchesLock(outcome,lock)||outcome?.outcome?.state!=='ACTIVATION_OUTCOME_UNKNOWN'||
90
+ outcome.update_id!==null||outcome.state_path!==null||outcome.continuity_update_id!==null||
91
+ typeof outcome.candidate_version!=='string'||!HEX64.test(String(outcome.candidate_manifest_sha256??''))||
92
+ typeof outcome.predecessor_release_id!=='string')return false;
93
+ const lockTime=Date.parse(lock.created_at_utc),observedTime=Date.parse(outcome.observed_at_utc);
94
+ if(!Number.isFinite(observedTime)||observedTime<lockTime||observedTime-lockTime>120000)return false;
95
+ const updatesDir=path.join(path.resolve(stateRoot),'evidence','updates');
96
+ let current,publicKey,files;
97
+ try{
98
+ current=JSON.parse(await readFile(path.join(stateRoot,'active-release.json'),'utf8'));
99
+ publicKey=createPublicKey(await readFile(path.join(stateRoot,'trust','ed25519-public.pem')));
100
+ files=await readdir(updatesDir,{withFileTypes:true});
101
+ }catch{return false;}
102
+ if(publicKey.asymmetricKeyType!=='ed25519'||current?.release_id!==outcome.predecessor_release_id)return false;
103
+ const prefix='r27-'+outcome.candidate_manifest_sha256.slice(0,16)+'-';
104
+ const candidates=files.filter(f=>f.name.startsWith(prefix)&&/^r27-[a-f0-9]{16}-[a-z0-9-]+$/.test(f.name));
105
+ if(candidates.length!==1||!candidates[0].isDirectory()||candidates[0].isSymbolicLink())return false;
106
+ let signed;
107
+ try{signed=JSON.parse(await readFile(path.join(updatesDir,candidates[0].name,'failure-receipt.json'),'utf8'));}
108
+ catch{return false;}
109
+ if(!verifySlotUpdateEnvelope(signed,publicKey))return false;
110
+ const body=signed.body,failedTime=Date.parse(body?.failed_at_utc??'');
111
+ if(body?.schema!=='deadbyte.r27-slot-update-failure.v1'||
112
+ body.update_id!==candidates[0].name||body.release_version!==outcome.candidate_version||
113
+ body.candidate_manifest_sha256!==outcome.candidate_manifest_sha256||
114
+ body.result!=='PRECONDITION_REJECTED'||body.phase!=='initial'||
115
+ body.attempted_pointer!==null||body.rollback?.attempted!==false||
116
+ !Array.isArray(body.rollback?.errors)||body.rollback.errors.length!==0||
117
+ !/^host command 'powershell_script' executable pin drift detected;/.test(String(body.error?.message??''))||
118
+ !Number.isFinite(failedTime)||failedTime<lockTime||failedTime>observedTime||
119
+ !samePointerIdentity(body.prior_pointer,current))return false;
120
+ return true;
121
+ }
122
+
88
123
  async function findTerminalOutcome(updatesDir,lock,stateRoot){
89
124
  const names=(await readdir(updatesDir)).filter(name=>/^r65-activation-outcome-.*\.json$/.test(name)).sort();
90
125
  if(names.length>MAX_OUTCOME_SCAN)throw new Error('activation outcome inventory exceeds safe scan budget');
@@ -95,7 +130,8 @@ async function findTerminalOutcome(updatesDir,lock,stateRoot){
95
130
  catch{continue;}
96
131
  if(value?.claim_operation_id!==lock.operation_id)continue;
97
132
  if(value?.preflight_subject_sha256!==lock.subject_sha256){foreign=true;continue;}
98
- if(isSafePreMutationReject(value,lock)||await isSafeTerminalActivation(value,lock,stateRoot))matched=true;
133
+ if(isSafePreMutationReject(value,lock)||await isSafeTerminalActivation(value,lock,stateRoot)||
134
+ await isSafeSignedPreconditionReject(value,lock,stateRoot))matched=true;
99
135
  else unknown=true;
100
136
  }
101
137
  return {matched,foreign,unknown};
@@ -32,7 +32,7 @@ export function classifyLegacyMigration(input){
32
32
  if(!input.pointer||input.pointer.version!=='0.15.45'||
33
33
  !HEX64.test(String(input.pointer.manifest_sha256??''))||!HEX64.test(String(input.pointer.generation_manifest_sha256??'')))
34
34
  return reject('predecessor identity invalid',subject);
35
- if(!input.candidate||input.candidate.version!=='0.15.59'||
35
+ if(!input.candidate||input.candidate.version!=='0.15.60'||
36
36
  !HEX64.test(String(input.candidate.manifest_sha256??''))||!HEX64.test(String(input.candidate.tarball_sha256??'')))
37
37
  return reject('candidate identity invalid',subject);
38
38
  if(PLANES.some(plane=>!HEX64.test(String(input.policySha256?.[plane]??''))))
@@ -114,7 +114,7 @@ async function reportVersionCoherence(root,{displayMode='ascii'}={}){
114
114
  writeRemote(process.stderr,`${remoteTag('warn',displayMode)} VERSION SKEW: CLI package ${DEADBYTE_VERSION}; active runtime ${active.version} (${active.release_id})\n`,displayMode);
115
115
  return active;
116
116
  }
117
- async function synchronizeForegroundRuntime(ctx,{displayMode='unicode',migrationContext=null}={}){
117
+ async function synchronizeForegroundRuntime(ctx,{displayMode='unicode',migrationContext=null,hostCommandPin=null}={}){
118
118
  const packageManifestSha256=createHash('sha256').update(await readFile(path.join(CURRENT_PACKAGE_ROOT,'MANIFEST.SHA256'))).digest('hex');
119
119
  return ensureRuntimeCoherence({
120
120
  cliVersion:DEADBYTE_VERSION,
@@ -181,7 +181,8 @@ async function synchronizeForegroundRuntime(ctx,{displayMode='unicode',migration
181
181
  '-ExpectedTarballSha256',artifactSha256,'-ExpectedManifestSha256',packagedManifestSha256,
182
182
  '-ExpectedBootstrapSha256',bootstrapMatch[1],
183
183
  '-StdoutPath',stdoutPath,'-StderrPath',stderrPath,
184
- '-MarkerReceiptPath',migrationContext.receipt_path,'-MarkerReceiptSha256',migrationContext.receipt_sha256],{
184
+ '-MarkerReceiptPath',migrationContext.receipt_path,'-MarkerReceiptSha256',migrationContext.receipt_sha256,
185
+ ...(hostCommandPin?['-HostCommandPin',hostCommandPin]:[])],{
185
186
  cwd:CURRENT_PACKAGE_ROOT,env:windowsPowerShellEnvironment(process.env),encoding:'utf8',windowsHide:true,shell:false,
186
187
  timeout:REMOTE_UPDATE_TIMEOUT_MS,maxBuffer:16*1024*1024
187
188
  });
@@ -743,7 +744,7 @@ async function releaseRemoteSession(ctx,marker,{displayMode='unicode'}={}){
743
744
  if(deletePinnedRemoteMarker(remoteSessionMarker(ctx.root),snapshot.sha256)!=='REMOVED')
744
745
  throw new Error('remote session ownership marker replaced before native deletion; marker retained');
745
746
  }
746
- async function runRemoteSession({resumeCursor=null,verbose=false,trace=false,filterExpression='',mode='default'}={}){
747
+ async function runRemoteSession({resumeCursor=null,verbose=false,trace=false,filterExpression='',mode='default',hostCommandPin=null}={}){
747
748
  const display=prepareRemoteConsole();
748
749
  const displayMode=display.mode;
749
750
  const ctx=await remoteContext();
@@ -755,7 +756,7 @@ async function runRemoteSession({resumeCursor=null,verbose=false,trace=false,fil
755
756
  startupLock.assertHeld();
756
757
  const migrationContext=await recoverRemoteSession(ctx,{displayMode});
757
758
  startupLock.assertHeld();
758
- await synchronizeForegroundRuntime(ctx,{displayMode,migrationContext});
759
+ await synchronizeForegroundRuntime(ctx,{displayMode,migrationContext,hostCommandPin});
759
760
  startupLock.assertHeld();
760
761
  marker=await claimRemoteSession(ctx);
761
762
  startupLock.assertHeld();
@@ -868,12 +869,18 @@ async function runRemoteSession({resumeCursor=null,verbose=false,trace=false,fil
868
869
  }
869
870
  }
870
871
  async function runRemote(args){
871
- let verbose=false,trace=false,filterExpression='',resumeCursor=null,mode='default';
872
+ let verbose=false,trace=false,filterExpression='',resumeCursor=null,mode='default',hostCommandPin=null;
872
873
  const positional=[];
873
874
  for(let index=0;index<args.length;index++){
874
875
  const arg=args[index];
875
876
  if(arg==='--verbose'||arg==='-v'){verbose=true;continue;}
876
877
  if(arg==='--trace'){trace=true;continue;}
878
+ if(arg==='--host-command-pin'){
879
+ if(hostCommandPin!==null)throw new Error('remote --host-command-pin may be specified once');
880
+ const value=String(args[++index]??'');
881
+ if(!/^powershell_script=[0-9a-f]{64}$/.test(value))throw new Error('remote --host-command-pin requires powershell_script=lowercase_sha256');
882
+ hostCommandPin=value;continue;
883
+ }
877
884
  if(['--operator','--desktop','--host','--full'].includes(arg)){
878
885
  if(mode!=='default') throw new Error('remote authority modes are mutually exclusive');
879
886
  mode=arg.slice(2);continue;
@@ -890,8 +897,8 @@ async function runRemote(args){
890
897
  }
891
898
  positional.push(arg);
892
899
  }
893
- const presentation=verbose||trace||Boolean(filterExpression)||resumeCursor!==null||mode!=='default';
894
- if(positional.length===0){await runRemoteSession({resumeCursor,verbose,trace,filterExpression,mode});return;}
900
+ const presentation=verbose||trace||Boolean(filterExpression)||resumeCursor!==null||mode!=='default'||hostCommandPin!==null;
901
+ if(positional.length===0){await runRemoteSession({resumeCursor,verbose,trace,filterExpression,mode,hostCommandPin});return;}
895
902
  if(presentation) throw new Error('remote presentation flags are valid only for foreground session');
896
903
  if(positional.length>1) throw new Error('remote accepts one controller command');
897
904
  const command=positional[0];if(!REMOTE_COMMANDS.has(command)) throw new Error(`unsupported remote command '${command}'`);
@@ -58,7 +58,7 @@ export function uacReceiptSubject(input){
58
58
  const candidate=windowsAbsolute(input.candidateRoot,'candidate root');
59
59
  if(!candidate.startsWith('c:\\program files\\')||candidate==='c:\\program files\\')
60
60
  throw new Error('UAC migration requires a protected candidate installation');
61
- if(input.candidateVersion!=='0.15.59')throw new Error('UAC migration candidate identity unsupported');
61
+ if(input.candidateVersion!=='0.15.60')throw new Error('UAC migration candidate identity unsupported');
62
62
  const hashes=['candidateManifestSha256','tarballSha256','markerReceiptSha256','predecessorPointerSha256',
63
63
  'preflightSubjectSha256','nodeSha256','deployScriptSha256','nonce'];
64
64
  for(const key of hashes)if(!HEX64.test(String(input[key]??'')))throw new Error('UAC approval hash/nonce invalid: '+key);
package/src/version.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export const DEADBYTE_VERSION = '0.15.59';
1
+ export const DEADBYTE_VERSION = '0.15.60';
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';
@@ -13,15 +13,15 @@ test('R130 security patch has a new immutable package identity and truthful sour
13
13
  read('SBOM.cdx.json'),read('package-lock.json'),read('TEST-MATRIX.json')]);
14
14
  assert.equal(pkg.name,'deadbyte-mcp');
15
15
  for(const actual of [pkg.version,release.version,provenance.version,matrix.version,bom.metadata.component.version,lock.version,lock.packages[''].version,DEADBYTE_VERSION])
16
- assert.equal(actual,'0.15.59');
16
+ assert.equal(actual,'0.15.60');
17
17
  assert.equal(release.train,'R153');
18
18
  assert.equal(matrix.train,'R153');
19
- assert.equal(release.source_predecessor.version,'0.15.58');
20
- assert.match(release.source_predecessor.source_path,/0\.15\.58/);
19
+ assert.equal(release.source_predecessor.version,'0.15.59');
20
+ assert.match(release.source_predecessor.source_path,/0\.15\.59/);
21
21
  assert.equal(release.runtime_predecessor.version,'0.15.45');
22
- assert.equal(provenance.source_predecessor_tarball_sha256,'4bc53cfa6b3890b5749066cb507e8773b36d6c255192a8973dadb8546a39822e');
23
- assert.equal(provenance.source_predecessor_version,'0.15.58');
24
- assert.equal(provenance.source_predecessor_manifest_file_sha256,'ec621a8a16f264f8824aa4644c914aca8f6ce57cb3578f5bce8acf2ac77fcc18');
22
+ assert.equal(provenance.source_predecessor_tarball_sha256,'0c20152b8ee553f06f05dfe017f4bd823d30cd50710722e9e0874f0bd6c66c75');
23
+ assert.equal(provenance.source_predecessor_version,'0.15.59');
24
+ assert.equal(provenance.source_predecessor_manifest_file_sha256,'f727be4a63220f4215f18282a1fd89963924a64adcd07747ca3c12d8fb166d86');
25
25
  assert.equal(pkg.dependencies['@modelcontextprotocol/client'],'2.3.1');
26
26
  assert.equal(pkg.dependencies['@modelcontextprotocol/server'],'2.3.1');
27
27
  for(const dep of ['@modelcontextprotocol/client','@modelcontextprotocol/server'])
@@ -17,11 +17,11 @@ test('R144 package identities, R132 historic evidence and published predecessor
17
17
  }
18
18
  assert.equal(release.train,'R153');
19
19
  assert.equal(matrix.train,'R153');
20
- assert.equal(release.source_predecessor.version,'0.15.58');
21
- assert.match(release.source_predecessor.source_path,/0\.15\.58/);
22
- assert.equal(prov.source_predecessor_version,'0.15.58');
23
- assert.equal(prov.source_predecessor_manifest_file_sha256,'ec621a8a16f264f8824aa4644c914aca8f6ce57cb3578f5bce8acf2ac77fcc18');
24
- assert.equal(prov.parent_tarball_sha256,'4bc53cfa6b3890b5749066cb507e8773b36d6c255192a8973dadb8546a39822e');
20
+ assert.equal(release.source_predecessor.version,'0.15.59');
21
+ assert.match(release.source_predecessor.source_path,/0\.15\.59/);
22
+ assert.equal(prov.source_predecessor_version,'0.15.59');
23
+ assert.equal(prov.source_predecessor_manifest_file_sha256,'f727be4a63220f4215f18282a1fd89963924a64adcd07747ca3c12d8fb166d86');
24
+ assert.equal(prov.parent_tarball_sha256,'0c20152b8ee553f06f05dfe017f4bd823d30cd50710722e9e0874f0bd6c66c75');
25
25
  assert.equal(prov.parent_registry_tarball_sha1,'04cc1a1e80bcb7062ac39eee6b7bab70edd5d8c3');
26
26
  assert.equal(release.runtime_predecessor.version,'0.15.45');
27
27
  assert.equal(prov.runtime_predecessor.release_id,release.runtime_predecessor.release_id);
@@ -22,7 +22,7 @@ const planes=['process','coding','autonomous','desktop','host'];
22
22
  const base=()=>({
23
23
  stateRoot:'C:\\Users\\owner\\.deadbyte-mcp',
24
24
  pointer:{release_id:'v0.15.45-parent',version:'0.15.45',manifest_sha256:'1'.repeat(64),generation_manifest_sha256:'2'.repeat(64)},
25
- candidate:{version:'0.15.59',manifest_sha256:'3'.repeat(64),tarball_sha256:'4'.repeat(64)},
25
+ candidate:{version:'0.15.60',manifest_sha256:'3'.repeat(64),tarball_sha256:'4'.repeat(64)},
26
26
  observation:{state:'OFFLINE',local_ready:false,bridge:{alive:false},core:{alive:false},cloud:{alive:false},supervisor:{running:false},
27
27
  authority:Object.fromEntries(planes.map(plane=>[plane,{configured:true,armed:false,reason:plane==='autonomous'?'unverified':'disarmed'}]))},
28
28
  policySha256:Object.fromEntries(planes.map((plane,index)=>[plane,String(index+5).repeat(64)])),
@@ -55,7 +55,7 @@ test('R153 RED: UAC subject binds candidate, predecessor, policy, marker, state
55
55
  issuedAt:'2026-10-23T16:00:00.000Z',expiresAt:'2026-10-23T16:10:00.000Z'});
56
56
  assert.equal(subject.action,'narrow_legacy_policy_and_activate');
57
57
  assert.equal(subject.marker_sha256,HEX);
58
- assert.equal(subject.candidate.version,'0.15.59');
58
+ assert.equal(subject.candidate.version,'0.15.60');
59
59
  assert.equal(subject.nonce,'b'.repeat(64));
60
60
  assert.deepEqual(subject.allowed_authority_after,Object.fromEntries(planes.map(plane=>[plane,false])));
61
61
  });
@@ -0,0 +1,30 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {readFile} from 'node:fs/promises';
4
+ import {spawnSync} from 'node:child_process';
5
+ import {fileURLToPath} from 'node:url';
6
+ const root=new URL('../',import.meta.url);
7
+ const source=async path=>readFile(new URL(path,root),'utf8');
8
+
9
+ test('R60 explicit host-command pin is owner supplied and forwarded end to end',async()=>{
10
+ const [cli,bootstrap,helper,deploy]=await Promise.all([
11
+ source('src/deadbyte-cli.mjs'),source('scripts/bootstrap-uac-migration-r153.ps1'),
12
+ source('scripts/request-uac-migration-r153.ps1'),source('scripts/deploy-r48.mjs')]);
13
+ assert.match(cli,/arg===['"]--host-command-pin['"]/, 'remote CLI must parse a bounded owner-supplied pin');
14
+ assert.match(cli,/hostCommandPin/, 'remote must preserve the parsed pin');
15
+ assert.match(bootstrap,/HostCommandPin/, 'protected UAC bootstrap must receive the owner pin');
16
+ assert.match(helper,/HostCommandPin/, 'protected helper must carry the pin without shell injection');
17
+ assert.match(deploy,/hostCommandPin/, 'deploy must pass pin to R27 before activation');
18
+ assert.match(deploy,/explicit host repin requires the elevated UAC migration/);
19
+ });
20
+
21
+ test('R60 malformed, unrelated, and duplicate pins fail before remote context or activation',()=>{
22
+ const cli=fileURLToPath(new URL('../src/deadbyte-cli.mjs',import.meta.url));
23
+ const cases=[['powershell_script=notahash'],['other_command='+'a'.repeat(64)],
24
+ ['powershell_script='+'a'.repeat(64),'--host-command-pin','powershell_script='+'b'.repeat(64)]];
25
+ for(const args of cases){
26
+ const p=spawnSync(process.execPath,[cli,'remote','--host-command-pin',...args],{encoding:'utf8',timeout:8000});
27
+ assert.equal(p.status,1,JSON.stringify(args));
28
+ assert.match(p.stderr,/remote --host-command-pin/);
29
+ }
30
+ });
@@ -0,0 +1,58 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {createHash,generateKeyPairSync,sign as signBytes} from 'node:crypto';
4
+ import {mkdtemp,mkdir,writeFile,rm} from 'node:fs/promises';
5
+ import os from 'node:os';
6
+ import path from 'node:path';
7
+ import {canonicalJson} from '../src/canonical-json.mjs';
8
+ import {createActivationClaimManager} from '../src/activation-lock-r65.mjs';
9
+
10
+ const sha=buffer=>createHash('sha256').update(buffer).digest('hex');
11
+ const domain=Buffer.from('DEADBYTE-R27-SLOT-UPDATE-V1\0','utf8');
12
+ const now=()=>new Date().toISOString();
13
+ function seal(body,key,pub){
14
+ const payload=Buffer.from(canonicalJson(body));
15
+ const signature=signBytes(null,Buffer.concat([domain,payload]),key).toString('base64');
16
+ const e={body,body_sha256:sha(payload),attestation:{algorithm:'ed25519',domain:'DEADBYTE-R27-SLOT-UPDATE-V1',
17
+ key_id:sha(pub.export({type:'spki',format:'der'})),signature_base64:signature}};
18
+ return {...e,receipt_sha256:sha(Buffer.from(canonicalJson(e)))};
19
+ }
20
+
21
+ test('signed R27 initial precondition reject safely reconciles R65 unknown claim',async()=>{
22
+ const root=await mkdtemp(path.join(os.tmpdir(),'deadbyte-r153-precondition-'));
23
+ try{
24
+ const updates=path.join(root,'evidence','updates');
25
+ await mkdir(updates,{recursive:true});await mkdir(path.join(root,'trust'),{recursive:true});
26
+ const {privateKey,publicKey}=generateKeyPairSync('ed25519');
27
+ await writeFile(path.join(root,'trust','ed25519-public.pem'),publicKey.export({type:'spki',format:'pem'}));
28
+ const manager=createActivationClaimManager({stateRoot:root}),claim=await manager.claim('a'.repeat(64));
29
+ const pointer={schema:'deadbyte.active-release.v1',release_id:'predecessor-r153',version:'0.15.45',
30
+ manifest_sha256:'b'.repeat(64),generation_manifest_sha256:'c'.repeat(64)};
31
+ await writeFile(path.join(root,'active-release.json'),JSON.stringify(pointer));
32
+ const dir=path.join(updates,'r27-'+'d'.repeat(16)+'-synthetic');
33
+ await mkdir(dir);
34
+ const failure=seal({schema:'deadbyte.r27-slot-update-failure.v1',update_id:path.basename(dir),
35
+ release_version:'0.15.60',candidate_manifest_sha256:'d'.repeat(64),failed_at_utc:now(),
36
+ result:'PRECONDITION_REJECTED',phase:'initial',error:{name:'Error',message:"host command 'powershell_script' executable pin drift detected; explicit approval required"},
37
+ prior_pointer:pointer,attempted_pointer:null,rollback:{attempted:false,errors:[]}},privateKey,publicKey);
38
+ await writeFile(path.join(dir,'failure-receipt.json'),JSON.stringify(failure));
39
+ await writeFile(path.join(updates,'r65-activation-outcome-test.json'),JSON.stringify({
40
+ schema:'deadbyte.r65-activation-outcome.v1',claim_operation_id:claim.operation_id,
41
+ preflight_subject_sha256:claim.subject_sha256,candidate_version:'0.15.60',
42
+ candidate_manifest_sha256:'d'.repeat(64),predecessor_release_id:pointer.release_id,
43
+ outcome:{state:'ACTIVATION_OUTCOME_UNKNOWN'},update_id:null,continuity_update_id:null,state_path:null,observed_at_utc:now()
44
+ }));
45
+ // A tampered signed envelope must not authorize reclaim.
46
+ const failurePath=path.join(dir,'failure-receipt.json');
47
+ await writeFile(failurePath,JSON.stringify({...failure,body:{...failure.body,phase:'committing'}}));
48
+ await assert.rejects(()=>manager.claim('e'.repeat(64)),/unresolved|in progress/);
49
+ await writeFile(failurePath,JSON.stringify(failure));
50
+ // Even a valid signature cannot authorize reclaim if the live pointer changed.
51
+ await writeFile(path.join(root,'active-release.json'),JSON.stringify({...pointer,release_id:'foreign-runtime'}));
52
+ await assert.rejects(()=>manager.claim('e'.repeat(64)),/unresolved|in progress/);
53
+ await writeFile(path.join(root,'active-release.json'),JSON.stringify(pointer));
54
+ const next=await manager.claim('e'.repeat(64));
55
+ assert.notEqual(next.operation_id,claim.operation_id);
56
+ await next.release();
57
+ }finally{await rm(root,{recursive:true,force:true})}
58
+ });
@@ -4,7 +4,7 @@ import {createUacApproval,verifyUacApproval,validateApprovalWindow,requireTruste
4
4
  import {readFileSync} from 'node:fs';
5
5
  import {fileURLToPath} from 'node:url';
6
6
  const h=(n)=>n.repeat(64);
7
- const base=()=>({stateRoot:'C:\\Users\\DEADBYTE\\.deadbyte-mcp',candidateRoot:'C:\\Program Files\\DEADBYTE-R153-TEST',candidateVersion:'0.15.59',candidateManifestSha256:h('a'),tarballSha256:h('b'),markerReceiptSha256:h('c'),predecessorPointerSha256:h('d'),predecessorPolicySha256:{process:h('1'),coding:h('2'),autonomous:h('3'),desktop:h('4'),host:h('5')},preflightSubjectSha256:h('e'),nodeSha256:h('f'),deployScriptSha256:h('0'),nonce:h('6'),issuedAt:'2026-10-24T00:00:00.000Z',expiresAt:'2026-10-24T00:05:00.000Z'});
7
+ const base=()=>({stateRoot:'C:\\Users\\DEADBYTE\\.deadbyte-mcp',candidateRoot:'C:\\Program Files\\DEADBYTE-R153-TEST',candidateVersion:'0.15.60',candidateManifestSha256:h('a'),tarballSha256:h('b'),markerReceiptSha256:h('c'),predecessorPointerSha256:h('d'),predecessorPolicySha256:{process:h('1'),coding:h('2'),autonomous:h('3'),desktop:h('4'),host:h('5')},preflightSubjectSha256:h('e'),nodeSha256:h('f'),deployScriptSha256:h('0'),nonce:h('6'),issuedAt:'2026-10-24T00:00:00.000Z',expiresAt:'2026-10-24T00:05:00.000Z'});
8
8
  test('R153 UAC receipt carries exact no-grants narrow migration subject',()=>{
9
9
  const x=base(),receipt=createUacApproval(x);
10
10
  assert.equal(receipt.schema,'deadbyte.r153-uac-approval.v1');
@@ -31,7 +31,7 @@ test('R153 UAC receipt fails closed on expiration, malformed, replay-like tamper
31
31
  assert.throws(()=>createUacApproval({...x,issuedAt:'not-a-date'}));
32
32
  assert.throws(()=>createUacApproval({...x,nonce:'x'}));
33
33
  });
34
- test('R153 UAC scope only accepts protected root and exact v0.15.59',()=>{
34
+ test('R153 UAC scope only accepts protected root and exact v0.15.60',()=>{
35
35
  assert.throws(()=>createUacApproval({...base(),candidateRoot:'C:\\Users\\DEADBYTE\\npm-cache'}),/protected/i);
36
36
  assert.throws(()=>createUacApproval({...base(),candidateVersion:'0.15.55'}),/candidate/i);
37
37
  assert.throws(()=>validateApprovalWindow('2026-10-24T00:00:00.000Z','2026-10-24T00:00:00.000Z','2026-10-24T00:00:00.000Z'));
@@ -45,7 +45,7 @@ test('R153 RED: mutable npx entrypoint stages exact registry package before priv
45
45
  assert.doesNotMatch(script,/npm-cli\.js|npm install/i);
46
46
  assert.match(script,/Get-FileHash -LiteralPath \$file -Algorithm SHA256/);
47
47
  assert.match(script,/NODE_OPTIONS/);
48
- assert.match(script,/https:\/\/registry\.npmjs\.org\/deadbyte-mcp\/0\.15\.59/);
48
+ assert.match(script,/https:\/\/registry\.npmjs\.org\/deadbyte-mcp\/0\.15\.60/);
49
49
  assert.match(script,/live npm registry tarball SHA-256 mismatch/);
50
50
  assert.match(script,/live npm registry tarball integrity mismatch/);
51
51
  assert.match(script,/DEADBYTE-R153-Stage-/);
@@ -54,6 +54,7 @@ test('R153 RED: mutable npx entrypoint stages exact registry package before priv
54
54
  assert.match(script,/'\/inheritance:r'/);
55
55
  assert.match(script,/verify-protected-stage-r153\.mjs/);
56
56
  assert.match(script,/request-uac-migration-r153\.ps1/);
57
- assert.match(script,/& \$helper -Elevated/);
57
+ assert.match(script,/\$helperArgs\s*=\s*@\('-Elevated'/);
58
+ assert.match(script,/& \$helper @helperArgs/);
58
59
  assert.match(script,/Remove-Item -LiteralPath \$prefix -Recurse -Force/);
59
60
  });
@@ -83,7 +83,7 @@ test('R72 compact baseline permits only R64 read offset and authorized coding-on
83
83
  assert.deepEqual(diff.added,[]);
84
84
  assert.deepEqual(diff.removed,[]);
85
85
  const packageVersion=JSON.parse(await readFile(path.join(repoRoot,'package.json'),'utf8')).version;
86
- if(['0.15.41','0.15.42','0.15.43','0.15.44','0.15.45','0.15.46','0.15.47','0.15.48','0.15.49','0.15.50','0.15.51','0.15.52','0.15.53','0.15.54','0.15.55','0.15.56','0.15.57','0.15.58','0.15.59'].includes(packageVersion)){
86
+ if(['0.15.41','0.15.42','0.15.43','0.15.44','0.15.45','0.15.46','0.15.47','0.15.48','0.15.49','0.15.50','0.15.51','0.15.52','0.15.53','0.15.54','0.15.55','0.15.56','0.15.57','0.15.58','0.15.59','0.15.60'].includes(packageVersion)){
87
87
  assert.deepEqual([...diff.schema_changed].sort(),['machine_fs','native_diff_preview']);
88
88
  assert.equal(diff.unchanged.length,41);
89
89
  const prior=baseline.tools.find(tool=>tool.name==='machine_fs');