deadbyte-mcp 0.15.33 → 0.15.34

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
@@ -49,7 +49,7 @@ ad9821d027ac70612820617ed3c197d465c98e42a9e2a5bbb40f571fb2314894 controller/dea
49
49
  8c70a873fd77e5b1579512ec218220182c2bddba63dc50c56ec70a7b449c52d9 controller/deadbyte-desktop-policy.json
50
50
  5e8ef223b0dbc52173aaf044a075837eef8964ff0e7e16f83a595e0d17695625 controller/deadbyte-host-policy.json.example
51
51
  6f0cc469f51444dd18211fa3346c826abeea4d2ec7a8945f0200dc5c622031ef controller/DEADBYTE-MCP.cmd
52
- cd499f8a4fc00663f9943e7b021e63a967fee77c152438ec3db0b628c77275b6 controller/deadbyte-process-policy.json
52
+ e21738fc6d3a34e5cf247fcb9442755235f76cedbbfe6602a2f40c0d5cf6297f controller/deadbyte-process-policy.json
53
53
  d274b099a298c1033fea8f1e8849751693bbc0448778d619400acb82d4f53a3b controller/deadbyte-semantic-lsp-config.json
54
54
  3023d2985f5b6e5cc7c0d08cb8b342b362c93dce7ebd4224635362194be40cf2 controller/README.TXT
55
55
  101e613518c73c6aa31c725fe1b5f9a24c995dc9876b7b28e1f3e97ac9f8d362 DEADBYTE-MCP-R27-FINAL/R27-ADMIN-CLOSURE.json
@@ -1343,7 +1343,7 @@ db605a698f917c4006462596e6526fe6a9c6eff9b8409e8472fe545d4b70027c node_modules/z
1343
1343
  f67a25ded944912bd4621b68df17c7c70a52aae117278c076c0aabbc32a3abba node_modules/zod/v4/mini/schemas.d.ts
1344
1344
  51b3a7869df2d3a1bd98acb9d5b6a61bbccc7653d7a3d8fca7f0e0db7e84e284 node_modules/zod/v4/mini/schemas.js
1345
1345
  3e3125b5a537a24c3632c1c5c09640ce7bcb3935901b127ad8ae3c37a27f133f node_modules/zod/v4/package.json
1346
- 566fc8a38e7558b511369c3f8f6828735dd7382ed28ec48d3262d95de591ea76 package.json
1346
+ c0b2d5a8506490c3c6d3c22ff962c1df372db840ff1067f9e0661ce2edc9f0e6 package.json
1347
1347
  872947dffd89755b03558b217129f009dc9f4fd1ce55e93c602fc6ea97ba8b48 proof/commander-closure-20260927/CONTINUATION.json
1348
1348
  2959980d295814aaa0df71fdb358d2cbfd01c1357ee36ef6b10c149875bdb262 proof/commander-closure-20260927/RESULT.json
1349
1349
  2c2866309ca3a6fc8de5b03d445f1dcf0778474fa25cefb822b2ab729bc91c62 proof/commander-closure-20260927/SEARCH-CONTINUATION.json
@@ -1408,7 +1408,7 @@ d433aaea5cccd1e184775ac4d915f34e0b39c6c99916dddd009731ad5fd6443f proof/V073-WIN
1408
1408
  bd0773a9e02e8ab11475c9cc5a7db29a8313233b7eab7f837922737e75ec5938 proof/VERIFY.txt
1409
1409
  2c821808d4596965c577f40191daee224d3aea81989778c4af97f53a83b487db proof/WINDOWS-CONTAINED-STATUS.txt
1410
1410
  f8bc839c7b4fcb0ea7b7e7ad9448847c3beae6f95f2eb4d407d1b284aaa4ff68 proof/WINDOWS-CONTAINMENT-STATUS.txt
1411
- ad94ad04d0ae744e6528b43e0dcaf8ffc27ebe81326ffc2f2704a195c61a1d45 PROVENANCE.json
1411
+ c368736d93f975dde4bd82f2eb9b2431f39f5da15bf1fc4c005c44a0e00b4c1d PROVENANCE.json
1412
1412
  27ca0f3c9ee3a1b6374a9c8dd98008decdd0c7659c7a569c70ad7b9734c74655 R34-BASELINE.json
1413
1413
  0b7ec5ee347ddfa6cca59740fc7a8fe3fc5d51406265bb12189e82fa106319d2 R41-PARENT.json
1414
1414
  bd2a789b0aab5663f0d208af2ca8e4ec98179bc8c7b57e70a962d4e06a3dcfc4 R42-PARENT.json
@@ -1417,9 +1417,9 @@ f932ef78b7a72b1bb0d7aedb5fe42fbb9951c2492eb528b72442f46ddff81a6c R44-DONORS.jso
1417
1417
  731b4c559fc0d25dea701e4474f02400b27e8e3f4cac9f230d5214497d4490a9 R44-PARENT.json
1418
1418
  d33ec5d167dd44800ba4e68372b08db43deb8d01df2ef71dd435ff004ac66c8b R45-PARENT.json
1419
1419
  3dc607603fea511e2f428e9546a875ab7e38b6a0bbd5e803e4510de082f30804 R49-PARENT.json
1420
- ed5b11e9895e040d8fe09b810e27c6845d6f51ad139a6ab46374e60ae7d081d4 README.txt
1421
- 0480675e951e6ebfec7d0074403571d76ddbf75497be9dfa2c7d185d4931143a RELEASE.json
1422
- a3f04699a6302367d1ac577e532ffd416e324a8a662560018489bb1bd18eb40a SBOM.cdx.json
1420
+ 06a5346bcbf3b502af395352ed058d7f2bc75654f05ad3061d26c4fb3a434304 README.txt
1421
+ 25df904fdc459aef8b2e0abb80ba11e3d11665985baac576b0b8e0107d1c3e22 RELEASE.json
1422
+ 81bbe107d12ffde7049bd434156c86888111f8ffd3dbce77d516afa71b67f991 SBOM.cdx.json
1423
1423
  7c86062c4f69db3179a129d65945ccfab1b1c1c5bcc29b91383eac097d50f2aa scripts/activate-skill-creator-1.1.1.mjs
1424
1424
  bd138fe5a64088e8e1a7a5bf6104c5b17317bdc8cf3ad8191ea00ed82ace7d9b scripts/agent-eval-r42.mjs
1425
1425
  8d90256a6863f3bbbff02e95cb12389fc6f9e8dbcb77bf1c20c902de371425e8 scripts/archive-source-zips.mjs
@@ -1518,6 +1518,7 @@ a62d69eea0c9db8778cd1551185ff6721ee6390d91afcb6863aecb75f9f422d1 scripts/gate-w
1518
1518
  89f930eb3d3b9d8972d777a327f16bcfebcf12576a6ada48e53f64d1142adb2d scripts/gate-windows-r54.ps1
1519
1519
  7dddf9b547f59b4b36ab4a7e7576d598ecd3f9e0ec24807608b2c52b0b6e6963 scripts/gate-windows-r55.ps1
1520
1520
  078066f300debe5cbb4a7dc5565a193e78d247e68089da96d220a91ef14b05c9 scripts/gate-windows-r56.ps1
1521
+ ab45a76d4faa6e33d6c4b68e0d4ebe3b7b30bb8f03f8f9d71ed7b62e9412f8b7 scripts/gate-windows-r57.ps1
1521
1522
  9a085b34b9e54023eb0efadcea1e74a1bef44b984105d064768d66910999173e scripts/gate-windows.ps1
1522
1523
  9e625bdc701298c05eb2a63c208d023a487a1baf306c05940eb29c19fb1d6544 scripts/init-desktop-policy-r40.ps1
1523
1524
  01451045bff624a157e7eea79afd7edfa8cb8212ea0256c8ec744fe1e1b269ff scripts/init-host-policy.ps1
@@ -1612,6 +1613,7 @@ f344639080f68b7da5cda765b518e0fb91bc8818229b6f460e82b173018ad30c scripts/window
1612
1613
  127497b8ac8701da6a1211efb9f311aab3a67c4995430588617210d681139cf2 scripts/windows-gate-evidence-r54.mjs
1613
1614
  93021201c4f37191545502a411886eafef8df031675b716c5d7eb4b50d5e30df scripts/windows-gate-evidence-r55.mjs
1614
1615
  be332ed7cef04abaec8679198e379d7f42fc67e0833be9f42e25103c88cb5b26 scripts/windows-gate-evidence-r56.mjs
1616
+ 44f368cd0e7c38ddebbf62204e0f3e41f61207b1ceb08b01aeee56282ce6b779 scripts/windows-gate-evidence-r57.mjs
1615
1617
  2255b8eb78ca61267df54448560a671357f04893b6bb1df27b8b9fc8a944d255 scripts/windows-gate-evidence.mjs
1616
1618
  105a5c6dcd54e4fabb416df9eaac093654f3ea39c4233a56e0bc6d53371b2128 scripts/workload-contract-regression-r47.mjs
1617
1619
  c32cb9054a1b9641ae071c00622c0054272bdb0b519ea22c4ff926a1600a2b46 scripts/workload-stream-regression.mjs
@@ -1776,7 +1778,7 @@ fafeb0ec6e31762f14de46a5f021582b9a54de8af4c73c3ecc92ac71020cc8b7 src/remote-ses
1776
1778
  45fcd7e9447545785e851fbeec439551c10a85c93f60a19437729870222c697c src/runtime-catalog-expectation.mjs
1777
1779
  066c97427989298ff3d7db06e40572f4d634269ea7dfd5836575ea98c52d92bc src/runtime-coherence.mjs
1778
1780
  ce2223bf6075e96cc02505c1439acce18bb1f204c5e86cf9152bb7194daf3cd2 src/runtime-identity.mjs
1779
- b0050ff8b0d07d99184cb14d6b8866f87ecf927d71645e4410dae89756c8b9cb src/runtime-update.mjs
1781
+ 6ce4232fc309270ad2add0cf01f20216ab507c9a0dd4bff66338407a3d0677ac src/runtime-update.mjs
1780
1782
  c61335adb38bfc415fe1cdabfe2c0a87e61579dfd1e52cce91c44d6993479457 src/search-cursor.mjs
1781
1783
  fc5407ef8338ebeeede16225b3249166dc4d45e903d873eb46c15c3df07dc9ad src/semantic-backend-registry.mjs
1782
1784
  686e9b55b9f4352b941579f186a9b9d348d86af53d052cbd5da953e7d15470ff src/semantic-code.mjs
@@ -1796,12 +1798,12 @@ c99c2402fb0df4f68634fa906eb198c551c55dad9f0921a7b8ed6e33d503884e src/tunnel-std
1796
1798
  aa765e9a28c69ff58a5b5a0d29b49ea181af4db9076633b102dbca25861e708e src/tunnel-stdio-compat.mjs
1797
1799
  642cb67d1854850e336ee73fbd71b329056bdcbdab35cea19c1a995a155ff5d9 src/verifier-cli.mjs
1798
1800
  8f818a4852ce3be3a380cd4736c3073a7a3e0e45cd7c7ca90588a6b843d3d022 src/verifier.mjs
1799
- 2afcfc97ef9d39e24563308cb48a22d6bbaacff95b4a7856f2f14a25fb45c9a0 src/version.mjs
1801
+ e4b97e04cf6377f8006b68e1cfb02c0c74ea258ea04a4166c4348c9f82a8b34e src/version.mjs
1800
1802
  7e09c57a97289360aabfaf3d531208e54872efbfb3182f3c18203d2cb88c46b5 src/worker-registry.mjs
1801
1803
  76361d5ae9a710273cf64a7525082197b692236bf23689875e5fd1ef4aa96d2b src/worker-scheduler.mjs
1802
1804
  4da1b32f5198bb089bc68b7eb6de21ea296678b5020018a73742bf0df57d62fa src/workload-substrate.mjs
1803
1805
  1bd637e7634ca0259791c5108fcf324554f70b1db49e5eac3505287c04bbc3be STABILIZATION-PROGRESS.md
1804
- 7d84b869cc45f61a00daaf97c56ff8f8e919f9893823b37ea98163546828c872 TEST-MATRIX.json
1806
+ 9d5e5c08d52ed006b27729535bd255c62754de0c359723f9cb6bb9ff29aa1e6a TEST-MATRIX.json
1805
1807
  e4f1fb97545f23772ddff28ad3f9954a4714f9854062fca62e0e12c1cb2ec4ae test/agent-backend-r44.test.mjs
1806
1808
  2a78c818058b25efdc143a3a97c832da231ccd6ff9d90c7796d681a0251b85c4 test/agent-crash-child.mjs
1807
1809
  d9461ab7c118ee75d37a2d6f5e637d7e43505af6a9ad8c7ddafffc8ace185a5b test/agent-crash-worker.mjs
@@ -2046,7 +2048,7 @@ eaaf2547cf06fad4c16db72413ea137143c280a9bc641b3230ee2d85a0b65b5a test/r44-final
2046
2048
  25a21ccffcf566b020b8f3c6c0a5a3b7ff06b243fff84e405207e458640ba487 test/r47-release-contract.test.mjs
2047
2049
  2871a825520cca851a10f65f42a6033c4c17d7446c1930d7a64316a76aacf681 test/r48-release-contract.test.mjs
2048
2050
  ec6fc253774c318b048dc943c83b496f942d8dd034f6db9439a99a46ae3a6158 test/r49-remote-control-donors.test.mjs
2049
- 74a1b45b6256aa97a0974c404ac7af26986ba3956760ba204d1e1f2fff4f8d30 test/r49-windows-gate.test.mjs
2051
+ 830b8942dcf557b8c162bc00a2de9bd4c0df1203cb69ac5fc0bcbd6f8a3c8385 test/r49-windows-gate.test.mjs
2050
2052
  c3f0a8b6ced2c15ed8580fcb261ad65bf3b885e6593d70de7394be63aba8dd1c test/r51-live-log-polling.test.mjs
2051
2053
  3821085180a09707110e4c1a10e711343e9fb2fcf871c7c1e34149a77c7fba50 test/r51-release-contract.test.mjs
2052
2054
  cc1ca8fe9514ca047ace52cd688f3f4fa5b7680a280d7a31cc2196ce915b91c9 test/r51-runtime-coherence.test.mjs
@@ -2058,8 +2060,10 @@ b0a9cca4f2c5dcf1a24d6e7675b42c72e88339b29ddc9220aa679316ae1467f5 test/r53-relea
2058
2060
  4148924e4edc935398e20a763cb27d903095b978898e8140b695b5642b63fe8c test/r54-release-contract.test.mjs
2059
2061
  4847402324bff518df66c9b7dbd1091bf8c0f5c5547e70c1a042c963b770bd28 test/r55-offline-predecessor-guardian-family.test.mjs
2060
2062
  b1e6b35cf8a20214e1797cc1051c5e9c733f8d0f69b564b4ef73edc60132b252 test/r55-release-contract.test.mjs
2061
- f193c42af942d34f03f0e916ba7d8c61ed0b6450ad11df87dbddb4c3cf00d6e7 test/r56-release-contract.test.mjs
2063
+ 68512426d0319cb47a479a43b75234aa0a1eaeffc3904ef27f311f8a790d8631 test/r56-release-contract.test.mjs
2062
2064
  74c25d78ddebb04fad40576b284639eabbfb4487b4ec090fb1dcf6874cef878c test/r56-rollback-launcher-restore.test.mjs
2065
+ facda6e4625e492464052af88b1b13e7626ac43c1e27dc18585f4a5327698af4 test/r57-core-startup-race.test.mjs
2066
+ 4a1816ce60102b787e262b2ee05d57d0692f58e86c993ed6c9471370872e7ad0 test/r57-release-contract.test.mjs
2063
2067
  e45a6cd299d8d65bdeb9bc0117ce1eb2b47fdebad89a02413ee979c9d0ae3a5c test/release-activation-gate.test.mjs
2064
2068
  85f6dc2059fd19d03452309ffe67bed5b87da8e6f0ce3a85cab58cba8b197ceb test/release-generation.test.mjs
2065
2069
  bb58887a2c393cd5aac3fa3bb3a04de2704bd2a30dd2083ea638543485fa7e60 test/release-manifest-windows.test.mjs
package/PROVENANCE.json CHANGED
@@ -1,36 +1,38 @@
1
1
  {
2
2
  "schema": "deadbyte.provenance.v1",
3
- "version": "0.15.33",
4
- "builder": "deadbyte-r56-signed-rollback-launcher-restore-hotfix",
5
- "source_model": "exact published and active 0.15.32 artifact -> signed activation receipt verified -> explicit rollback failed before mutation because predecessor verification compared the successor live launcher to the prior launcher digest -> signed activation handoff confirmed exact predecessor launcher snapshots -> parent regression RED -> surgical split stored-installation verification plus signed predecessor launcher restore before pointer commit plus successor launcher recovery ordering -> focused/full regression -> package verification -> registry round-trip -> activation/rollback/restore",
3
+ "version": "0.15.34",
4
+ "builder": "deadbyte-r57-bounded-core-startup-discovery-hotfix",
5
+ "source_model": "exact published and active 0.15.33 artifact -> explicit signed rollback reached exact 0.15.32 pointer and restored signed predecessor launcher -> predecessor restart verification raced downstream core process visibility after ONLINE -> rollback recovery restored exact 0.15.33 without errors -> parent regression RED -> bounded retry only for zero-child core visibility, ambiguous topology remains fail-closed -> focused/full regression -> package verification -> registry round-trip -> activation/rollback/restore",
6
6
  "signing": "ed25519",
7
- "parent_release_id": "v0.15.32-e7223f467777f5df",
8
- "parent_manifest_sha256": "e7223f467777f5dfeb20fd2cc7a6eca22619a44ed95e5bc0b32d9c7aabba361b",
9
- "parent_generation_manifest_sha256": "740443fd207c5e6ffd5952079214bf6e81e9281a6ec880de9bbe3b8ce1deb00e",
10
- "parent_tarball_sha256": "c9e1f5875dd2177cee0089305b40321c128c54ce7f5522e34e507d4ecfb22638",
11
- "parent_activation_status": "ACTIVATED_ROLLBACK_DEFECT_OBSERVED",
7
+ "parent_release_id": "v0.15.33-776a51cb916e28dd",
8
+ "parent_manifest_sha256": "776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c",
9
+ "parent_generation_manifest_sha256": "20ccc5e4bbf8470b61e0a6d2ad181dad5e8533da980ceba7749e1d6f48d9dbd3",
10
+ "parent_tarball_sha256": "d84a6df0a972a43c50d5e31242d9217f59858b2d73c4284af296da76d2048e5f",
11
+ "parent_activation_status": "ACTIVATED_ROLLBACK_CORE_DISCOVERY_RACE_OBSERVED",
12
12
  "runtime_predecessor": {
13
- "release_id": "v0.15.32-e7223f467777f5df",
14
- "manifest_sha256": "e7223f467777f5dfeb20fd2cc7a6eca22619a44ed95e5bc0b32d9c7aabba361b",
15
- "generation_manifest_sha256": "740443fd207c5e6ffd5952079214bf6e81e9281a6ec880de9bbe3b8ce1deb00e"
13
+ "release_id": "v0.15.33-776a51cb916e28dd",
14
+ "manifest_sha256": "776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c",
15
+ "generation_manifest_sha256": "20ccc5e4bbf8470b61e0a6d2ad181dad5e8533da980ceba7749e1d6f48d9dbd3"
16
16
  },
17
- "source_predecessor_version": "0.15.32",
18
- "source_predecessor_tarball_sha256": "c9e1f5875dd2177cee0089305b40321c128c54ce7f5522e34e507d4ecfb22638",
19
- "source_predecessor_manifest_file_sha256": "e7223f467777f5dfeb20fd2cc7a6eca22619a44ed95e5bc0b32d9c7aabba361b",
20
- "r56_hotfix": {
21
- "defect": "explicit rollback verifies predecessor against successor launcher before restoring signed predecessor launcher snapshot",
22
- "signed_handoff_launcher_snapshot_required": true,
23
- "stored_predecessor_verified_without_live_launcher": true,
24
- "predecessor_launcher_restored_before_pointer_commit": true,
25
- "successor_launcher_restored_before_recovery_pointer": true,
26
- "exact_parent_activation_receipt_sha256": "6518a04154f485cfae42e582269634d69a8b05a0183149d5e10006fbdd9d933c",
27
- "observed_parent_rollback_failure_receipt_sha256": "00cbd497e4902c67ab39313a378e2fcf32159113b46339ad1d54b5e5a7714205",
28
- "red_parent_0_15_32": "FAIL_5_OF_5",
29
- "green_r56_candidate": "PASS_5_OF_5",
17
+ "source_predecessor_version": "0.15.33",
18
+ "source_predecessor_tarball_sha256": "d84a6df0a972a43c50d5e31242d9217f59858b2d73c4284af296da76d2048e5f",
19
+ "source_predecessor_manifest_file_sha256": "776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c",
20
+ "r57_hotfix": {
21
+ "defect": "runtime restart verification samples downstream core once immediately after ONLINE and can race process visibility",
22
+ "bounded_core_discovery_after_online": true,
23
+ "retry_only_missing_core": true,
24
+ "ambiguous_core_fail_closed": true,
25
+ "timeout_fail_closed": true,
26
+ "parent_rollback_reached_exact_0_15_32": true,
27
+ "parent_recovery_restored_exact_0_15_33": true,
28
+ "exact_parent_activation_receipt_sha256": "5da29c0c6e7858d518f1ece5e3509ac9ac9e2079f4117a83827a0d432018a4d0",
29
+ "observed_parent_rollback_state_sha256": "e4ffcdb92a997bb49f936dfc338701b81601ad0ded97284f5d615f4276786608",
30
+ "red_parent_0_15_33": "FAIL_5_OF_5",
31
+ "green_r57_candidate": "PASS_5_OF_5",
30
32
  "full_regression": "PASS",
31
33
  "stable_final_claim": false
32
34
  },
33
- "reproducibility": "0.15.32 remains immutable and active while R56 is built. Rollback input remains the signed activation receipt; predecessor launcher bytes are accepted only from the signature-verified sibling handoff whose prior/new pointers match that receipt. The predecessor release/generation are verified independently before shutdown; the signed predecessor launcher snapshot is restored before pointer commit. Recovery reinstalls the signed successor launcher before restoring the successor pointer.",
35
+ "reproducibility": "0.15.33 remains immutable and active while R57 is built. After controller ONLINE/local-ready, R57 waits a bounded 10 seconds for exactly one downstream core only when the verified bridge has zero children. Any ambiguous or multiple-child topology still fails immediately. Timeout remains fail-closed. Signed rollback launcher and pointer ordering from R56 is preserved.",
34
36
  "operator_override": {
35
37
  "four_hour_soak": "NOT_COMPLETED",
36
38
  "reason": "owner explicitly directed deploy before the 4-hour hard soak completed",
package/README.txt CHANGED
@@ -1,4 +1,4 @@
1
- DEADBYTE MCP V0.15.33 / R56 SIGNED ROLLBACK LAUNCHER RESTORE HOTFIX
1
+ DEADBYTE MCP V0.15.34 / R57 BOUNDED CORE STARTUP DISCOVERY HOTFIX
2
2
  =========================
3
3
 
4
4
  AUTHENTICATED MACHINE TRUTH + DURABLE AGENT + CODING + AUTONOMOUS PRODUCTION ENGINE
@@ -7,12 +7,12 @@ NPX PRIMARY OPERATOR UX
7
7
  ------------------------
8
8
  Use the npm CLI entry point instead of the legacy CMD convenience wrapper:
9
9
 
10
- npx -y deadbyte-mcp@0.15.33 mcp
11
- npx -y deadbyte-mcp@0.15.33 remote
12
- npx -y deadbyte-mcp@0.15.33 remote status
13
- npx -y deadbyte-mcp@0.15.33 remote restart
14
- npx -y deadbyte-mcp@0.15.33 audit status
15
- npx -y deadbyte-mcp@0.15.33 audit verify
10
+ npx -y deadbyte-mcp@0.15.34 mcp
11
+ npx -y deadbyte-mcp@0.15.34 remote
12
+ npx -y deadbyte-mcp@0.15.34 remote status
13
+ npx -y deadbyte-mcp@0.15.34 remote restart
14
+ npx -y deadbyte-mcp@0.15.34 audit status
15
+ npx -y deadbyte-mcp@0.15.34 audit verify
16
16
 
17
17
  The `mcp` command is the quiet stdio server entry for local MCP clients; stdout is reserved for MCP.
18
18
  The remote CLI invokes the stable active-release PowerShell launcher directly with shell=false.
@@ -29,6 +29,10 @@ and a random 256-bit session nonce, prevents concurrent foreground sessions, and
29
29
  recover only a dead, unguarded stale owner. Explicit subcommands such as `remote status` remain
30
30
  one-shot controller operations.
31
31
 
32
+ R57 BOUNDED CORE STARTUP DISCOVERY HOTFIX
33
+ ------------------------------------------
34
+ 0.15.34 fixes the restart-verification race observed during the signed 0.15.33 -> 0.15.32 rollback acceptance. After the controller reported ONLINE and local-ready, the verifier sampled the verified bridge's downstream core process exactly once; on the failing run the bridge existed but its mcp-server child had not yet appeared in the process snapshot. R57 adds a bounded 10-second discovery wait that retries only the exact zero-child condition. Ambiguous or multiple-child topologies still fail immediately, timeout remains fail-closed, and the signed launcher/pointer rollback ordering from R56 is preserved. 0.15.33 remains immutable and published.
35
+
32
36
  R56 SIGNED ROLLBACK LAUNCHER RESTORE HOTFIX
33
37
  ------------------------------------------------
34
38
  0.15.33 fixes the explicit rollback defect observed after the successful 0.15.32 production activation. The prior immutable release and generation are now verified without incorrectly comparing them to the currently active successor launcher. Rollback then loads the signature-verified activation handoff, requires its prior/new pointers to match the signed activation receipt, restores the signed predecessor launcher snapshot before committing the predecessor pointer, and verifies the complete predecessor installation before restart. If rollback recovery is required, the signed successor launcher bytes are reinstalled before the successor pointer is restored. 0.15.32 remains immutable and published.
@@ -284,7 +288,7 @@ CONTROLLER
284
288
  ----------
285
289
  Primary operator entry point:
286
290
 
287
- npx -y deadbyte-mcp@0.15.33 remote
291
+ npx -y deadbyte-mcp@0.15.34 remote
288
292
 
289
293
  The legacy CMD entry remains compatibility-only for R33 rollback safety.
290
294
 
@@ -345,7 +349,7 @@ MCP CLIENT CONFIGURATION
345
349
  ------------------------
346
350
  The local stdio entry point is quiet and suitable for MCP hosts:
347
351
 
348
- npx -y deadbyte-mcp@0.15.33 mcp
352
+ npx -y deadbyte-mcp@0.15.34 mcp
349
353
 
350
354
  CLAUDE DESKTOP
351
355
  Use the standard local-server entry in claude_desktop_config.json:
@@ -354,7 +358,7 @@ Use the standard local-server entry in claude_desktop_config.json:
354
358
  "mcpServers": {
355
359
  "deadbyte": {
356
360
  "command": "npx",
357
- "args": ["-y", "deadbyte-mcp@0.15.33", "mcp"]
361
+ "args": ["-y", "deadbyte-mcp@0.15.34", "mcp"]
358
362
  }
359
363
  }
360
364
  }
@@ -367,7 +371,7 @@ Create .cursor/mcp.json:
367
371
  "deadbyte": {
368
372
  "type": "stdio",
369
373
  "command": "npx",
370
- "args": ["-y", "deadbyte-mcp@0.15.33", "mcp"]
374
+ "args": ["-y", "deadbyte-mcp@0.15.34", "mcp"]
371
375
  }
372
376
  }
373
377
  }
@@ -380,7 +384,7 @@ Create .vscode/mcp.json:
380
384
  "deadbyte": {
381
385
  "type": "stdio",
382
386
  "command": "npx",
383
- "args": ["-y", "deadbyte-mcp@0.15.33", "mcp"]
387
+ "args": ["-y", "deadbyte-mcp@0.15.34", "mcp"]
384
388
  }
385
389
  }
386
390
  }
@@ -390,9 +394,9 @@ Add this to ~/.codex/config.toml:
390
394
 
391
395
  [mcp_servers.deadbyte]
392
396
  command = "npx"
393
- args = ["-y", "deadbyte-mcp@0.15.33", "mcp"]
397
+ args = ["-y", "deadbyte-mcp@0.15.34", "mcp"]
394
398
 
395
- The remote device path remains `npx -y deadbyte-mcp@0.15.33 remote`. Remote public MCP uses the
399
+ The remote device path remains `npx -y deadbyte-mcp@0.15.34 remote`. Remote public MCP uses the
396
400
  verified HTTPS named-tunnel URL selected by the active generation; do not commit a private device
397
401
  URL or tunnel token into a repository.
398
402
 
package/RELEASE.json CHANGED
@@ -1,38 +1,40 @@
1
1
  {
2
2
  "schema": "deadbyte.release.v1",
3
3
  "name": "deadbyte-mcp",
4
- "version": "0.15.33",
5
- "train": "R56",
6
- "label": "SIGNED ROLLBACK LAUNCHER RESTORE HOTFIX",
4
+ "version": "0.15.34",
5
+ "train": "R57",
6
+ "label": "BOUNDED CORE STARTUP DISCOVERY HOTFIX",
7
7
  "protocol_revision": "2026-07-28",
8
8
  "parent": {
9
- "version": "0.15.32",
10
- "release_id": "v0.15.32-e7223f467777f5df",
11
- "manifest_sha256": "e7223f467777f5dfeb20fd2cc7a6eca22619a44ed95e5bc0b32d9c7aabba361b",
12
- "generation_manifest_sha256": "740443fd207c5e6ffd5952079214bf6e81e9281a6ec880de9bbe3b8ce1deb00e",
13
- "tarball_sha256": "c9e1f5875dd2177cee0089305b40321c128c54ce7f5522e34e507d4ecfb22638",
14
- "activation_status": "ACTIVATED_ROLLBACK_DEFECT_OBSERVED"
9
+ "version": "0.15.33",
10
+ "release_id": "v0.15.33-776a51cb916e28dd",
11
+ "manifest_sha256": "776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c",
12
+ "generation_manifest_sha256": "20ccc5e4bbf8470b61e0a6d2ad181dad5e8533da980ceba7749e1d6f48d9dbd3",
13
+ "tarball_sha256": "d84a6df0a972a43c50d5e31242d9217f59858b2d73c4284af296da76d2048e5f",
14
+ "activation_status": "ACTIVATED_ROLLBACK_CORE_DISCOVERY_RACE_OBSERVED"
15
15
  },
16
16
  "runtime_predecessor": {
17
- "release_id": "v0.15.32-e7223f467777f5df",
18
- "manifest_sha256": "e7223f467777f5dfeb20fd2cc7a6eca22619a44ed95e5bc0b32d9c7aabba361b",
19
- "generation_manifest_sha256": "740443fd207c5e6ffd5952079214bf6e81e9281a6ec880de9bbe3b8ce1deb00e"
17
+ "release_id": "v0.15.33-776a51cb916e28dd",
18
+ "manifest_sha256": "776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c",
19
+ "generation_manifest_sha256": "20ccc5e4bbf8470b61e0a6d2ad181dad5e8533da980ceba7749e1d6f48d9dbd3"
20
20
  },
21
21
  "source_predecessor": {
22
- "version": "0.15.32",
23
- "tarball_sha256": "c9e1f5875dd2177cee0089305b40321c128c54ce7f5522e34e507d4ecfb22638",
24
- "manifest_file_sha256": "e7223f467777f5dfeb20fd2cc7a6eca22619a44ed95e5bc0b32d9c7aabba361b"
22
+ "version": "0.15.33",
23
+ "tarball_sha256": "d84a6df0a972a43c50d5e31242d9217f59858b2d73c4284af296da76d2048e5f",
24
+ "manifest_file_sha256": "776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c"
25
25
  },
26
26
  "hotfix": {
27
- "defect": "explicit rollback verifies predecessor against successor launcher before restoring signed predecessor launcher snapshot",
28
- "signed_handoff_launcher_snapshot_required": true,
29
- "stored_predecessor_verified_without_live_launcher": true,
30
- "predecessor_launcher_restored_before_pointer_commit": true,
31
- "successor_launcher_restored_before_recovery_pointer": true,
32
- "exact_parent_activation_receipt_sha256": "6518a04154f485cfae42e582269634d69a8b05a0183149d5e10006fbdd9d933c",
33
- "observed_parent_rollback_failure_receipt_sha256": "00cbd497e4902c67ab39313a378e2fcf32159113b46339ad1d54b5e5a7714205",
34
- "red_parent_0_15_32": "FAIL_5_OF_5",
35
- "green_r56_candidate": "PASS_5_OF_5",
27
+ "defect": "runtime restart verification samples downstream core once immediately after ONLINE and can race process visibility",
28
+ "bounded_core_discovery_after_online": true,
29
+ "retry_only_missing_core": true,
30
+ "ambiguous_core_fail_closed": true,
31
+ "timeout_fail_closed": true,
32
+ "parent_rollback_reached_exact_0_15_32": true,
33
+ "parent_recovery_restored_exact_0_15_33": true,
34
+ "exact_parent_activation_receipt_sha256": "5da29c0c6e7858d518f1ece5e3509ac9ac9e2079f4117a83827a0d432018a4d0",
35
+ "observed_parent_rollback_state_sha256": "e4ffcdb92a997bb49f936dfc338701b81601ad0ded97284f5d615f4276786608",
36
+ "red_parent_0_15_33": "FAIL_5_OF_5",
37
+ "green_r57_candidate": "PASS_5_OF_5",
36
38
  "full_regression": "PASS",
37
39
  "stable_final_claim": false
38
40
  },
@@ -142,6 +144,7 @@
142
144
  "offline_predecessor_host_revoke_before_capture": true,
143
145
  "offline_recovery_self_process_exclusion": true,
144
146
  "offline_recovery_foreground_guardian_family_exclusion": true,
145
- "signed_rollback_launcher_snapshot_restore": true
147
+ "signed_rollback_launcher_snapshot_restore": true,
148
+ "bounded_core_startup_discovery": true
146
149
  }
147
150
  }
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:r56:0.15.33",
4
+ "serialNumber": "urn:cdx:deadbyte-mcp:r57:0.15.34",
5
5
  "version": 1,
6
6
  "metadata": {
7
7
  "component": {
8
8
  "type": "application",
9
9
  "name": "deadbyte-mcp",
10
- "version": "0.15.33"
10
+ "version": "0.15.34"
11
11
  }
12
12
  },
13
13
  "components": [
@@ -34,7 +34,7 @@
34
34
  {
35
35
  "type": "file",
36
36
  "name": "deadbyte-hardware-observer-r45.exe",
37
- "version": "0.15.33",
37
+ "version": "0.15.34",
38
38
  "hashes": [
39
39
  {
40
40
  "alg": "SHA-256",
package/TEST-MATRIX.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema": "deadbyte.test-matrix.v1",
3
- "version": "0.15.33",
4
- "train": "R56",
3
+ "version": "0.15.34",
4
+ "train": "R57",
5
5
  "primary_platform": "win32-x64",
6
6
  "reference": {
7
7
  "package": "@wonderwhy-er/desktop-commander",
@@ -11,14 +11,14 @@
11
11
  },
12
12
  "required": [
13
13
  {
14
- "id": "r56-focused",
15
- "command": "npm run r56:focused:test",
16
- "expected": "PASS signed rollback handoff launcher restore, ordering, activation recovery regressions, runtime update/slot contracts"
14
+ "id": "r57-focused",
15
+ "command": "npm run r57:focused:test",
16
+ "expected": "PASS bounded core startup discovery, timeout and ambiguity negative controls, signed rollback regressions, runtime update/slot contracts"
17
17
  },
18
18
  {
19
19
  "id": "full-regression",
20
20
  "command": "npm run r48:full:test",
21
- "expected": "PASS current R56 successor"
21
+ "expected": "PASS current R57 successor"
22
22
  },
23
23
  {
24
24
  "id": "package-boundary",
@@ -28,7 +28,7 @@
28
28
  {
29
29
  "id": "windows-gate",
30
30
  "command": "npm run gate:windows",
31
- "expected": "PASS R56 focused + recorded full regression + manifest/doctor evidence"
31
+ "expected": "PASS R57 focused + recorded full regression + manifest/doctor evidence"
32
32
  },
33
33
  {
34
34
  "id": "package-verify",
@@ -37,62 +37,67 @@
37
37
  },
38
38
  {
39
39
  "id": "activation",
40
- "command": "npx --yes deadbyte-mcp@0.15.33 remote",
41
- "expected": "activate exact R56 from exact active 0.15.32"
40
+ "command": "npx --yes deadbyte-mcp@0.15.34 remote",
41
+ "expected": "activate exact R57 from exact active 0.15.33"
42
42
  },
43
43
  {
44
44
  "id": "rollback",
45
- "command": "runtime-update --rollback-receipt <signed R56 activation receipt>",
46
- "expected": "restore exact signed 0.15.32 pointer, signed predecessor launcher snapshot, ONLINE runtime, all authority DISARMED"
45
+ "command": "runtime-update --rollback-receipt <signed R57 activation receipt>",
46
+ "expected": "restore exact signed 0.15.33 pointer/runtime, ONLINE, all authority DISARMED despite transient zero-child startup window"
47
47
  },
48
48
  {
49
49
  "id": "restore",
50
- "command": "npx --yes deadbyte-mcp@0.15.33 remote",
51
- "expected": "restore same exact R56 release/generation and foreground authority contract"
50
+ "command": "npx --yes deadbyte-mcp@0.15.34 remote",
51
+ "expected": "restore same exact R57 release/generation and foreground authority contract"
52
52
  }
53
53
  ],
54
54
  "observed_pre_release_evidence": {
55
- "red_parent_0_15_32": {
55
+ "red_parent_0_15_33": {
56
56
  "status": "FAIL_EXPECTED",
57
57
  "tests": 5,
58
58
  "failed": 5,
59
- "receipt_id": "483a2b5bbda756dc85954752",
60
- "receipt_sha256": "f3b446306691d61e97896ab4d237abaa20d1243237299812e790233c46451dba"
59
+ "receipt_id": "5ab72278a1c91a03bd7223a5",
60
+ "receipt_sha256": "f12a8ea7593aa0754da45c074e613d7d3c530e8e95d83a9e8b669cfbc61d0306"
61
61
  },
62
- "green_r56_candidate": {
62
+ "green_r57_candidate": {
63
63
  "status": "PASS",
64
64
  "tests": 5,
65
65
  "failed": 0,
66
- "receipt_id": "7bf8f8dd93f175f5d7de118a",
67
- "receipt_sha256": "4198930f38a3fc4b7978cfc94ca4509127561c170b05f7566bdf79513e449a8b"
66
+ "receipt_id": "bcfdb0757b905154960eaea9",
67
+ "receipt_sha256": "9b62291a4312df128e88749f1a0c88d3884d82fb651d7d389db4e14556a5f39f"
68
68
  },
69
69
  "parent_activation": {
70
70
  "status": "PASS",
71
- "release_id": "v0.15.32-e7223f467777f5df",
72
- "manifest_sha256": "e7223f467777f5dfeb20fd2cc7a6eca22619a44ed95e5bc0b32d9c7aabba361b",
73
- "generation_manifest_sha256": "740443fd207c5e6ffd5952079214bf6e81e9281a6ec880de9bbe3b8ce1deb00e",
74
- "activation_receipt_sha256": "6518a04154f485cfae42e582269634d69a8b05a0183149d5e10006fbdd9d933c"
71
+ "release_id": "v0.15.33-776a51cb916e28dd",
72
+ "manifest_sha256": "776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c",
73
+ "generation_manifest_sha256": "20ccc5e4bbf8470b61e0a6d2ad181dad5e8533da980ceba7749e1d6f48d9dbd3",
74
+ "activation_receipt_sha256": "5da29c0c6e7858d518f1ece5e3509ac9ac9e2079f4117a83827a0d432018a4d0"
75
75
  },
76
76
  "parent_rollback": {
77
77
  "status": "FAIL_EXPECTED",
78
- "error": "active pointer launcher digest mismatch",
79
- "command_receipt_sha256": "00cbd497e4902c67ab39313a378e2fcf32159113b46339ad1d54b5e5a7714205"
78
+ "error": "expected one unambiguous downstream core for bridge 20396, found children=0 visible_matches=0",
79
+ "state_path": "C:\\Users\\DEADBYTE\\.deadbyte-mcp\\evidence\\updates\\r31-rollback-5da29c0c6e7858d5-muou98lb-1163ac55\\state.json",
80
+ "state_sha256": "e4ffcdb92a997bb49f936dfc338701b81601ad0ded97284f5d615f4276786608",
81
+ "predecessor_pointer_reached": true,
82
+ "recovery_successor_pointer_restored": true,
83
+ "recovery_successor_runtime_restarted": true,
84
+ "recovery_errors": []
80
85
  },
81
86
  "full_regression": {
82
87
  "status": "PASS",
83
- "files": 233,
88
+ "files": 235,
84
89
  "batches": 8,
85
- "elapsed_ms": 245761.429,
86
- "receipt_id": "3dce7b1649f489fc02b8f055",
87
- "receipt_sha256": "35da0a6a0a7d98c08f32f24b5f06df434d353018089acfaf51b9dd51693b7083",
88
- "request_sha256": "af035b60299d84e743aa2babaa2321e89555bea4bbb2cd95036f6dc9fe086010"
90
+ "elapsed_ms": 239011.708,
91
+ "receipt_id": "9d95b63da942fc18a74c98a3",
92
+ "receipt_sha256": "66e6e9ed02e8aa6e8e3644f44561983f3051893b890b964d33c3364402ced17f",
93
+ "request_sha256": "f8de9082c0d30ee075607727cdb9af031b3f400cada8ea56c3debc12f353b65e"
89
94
  }
90
95
  },
91
96
  "inherited_parent_evidence": {
92
- "version": "0.15.32",
97
+ "version": "0.15.33",
93
98
  "parent_full_regression": "PASS",
94
- "parent_manifest_sha256": "e7223f467777f5dfeb20fd2cc7a6eca22619a44ed95e5bc0b32d9c7aabba361b",
95
- "parent_tarball_sha256": "c9e1f5875dd2177cee0089305b40321c128c54ce7f5522e34e507d4ecfb22638",
99
+ "parent_manifest_sha256": "776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c",
100
+ "parent_tarball_sha256": "d84a6df0a972a43c50d5e31242d9217f59858b2d73c4284af296da76d2048e5f",
96
101
  "parent_registry_identity": "PASS",
97
102
  "four_hour_soak": "NOT_COMPLETED_OPERATOR_BYPASS"
98
103
  },
@@ -131,6 +136,12 @@
131
136
  "signed_handoff_launcher_snapshot_required": true,
132
137
  "predecessor_launcher_restored_before_pointer_commit": true,
133
138
  "successor_launcher_restored_before_recovery_pointer": true
139
+ },
140
+ "r57": {
141
+ "core_startup_wait_timeout_ms": 10000,
142
+ "core_startup_poll_ms": 100,
143
+ "retry_only_zero_child": true,
144
+ "ambiguous_topology_fail_closed": true
134
145
  }
135
146
  },
136
147
  "non_win32": {
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "schema": "deadbyte.process-policy.v1",
3
3
  "enabled": true,
4
- "grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.33-r56\\controller\\runtime\\process-grant.json",
5
- "state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.33-r56\\controller\\runtime\\process-state",
4
+ "grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.34-r57\\controller\\runtime\\process-grant.json",
5
+ "state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.34-r57\\controller\\runtime\\process-state",
6
6
  "native_host": {
7
- "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.33-r56\\bin\\deadbyte-process-host.exe",
7
+ "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.34-r57\\bin\\deadbyte-process-host.exe",
8
8
  "sha256": "daf9cfb371bee88cafbf5597eaa507fec504dbe0b0ddd40d0c3c2e02817f49e4"
9
9
  },
10
10
  "roots": {
11
11
  "core": {
12
- "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.33-r56",
12
+ "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.34-r57",
13
13
  "deny_paths": [
14
14
  "node_modules",
15
15
  "controller/runtime",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deadbyte-mcp",
3
- "version": "0.15.33",
3
+ "version": "0.15.34",
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-r56.ps1",
45
+ "gate:windows": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r57.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",
@@ -78,7 +78,8 @@
78
78
  "r53:focused:test": "node --test --test-concurrency=1 test/r53-release-contract.test.mjs test/stabilization-update-child-root.test.mjs test/stabilization-state-root.test.mjs test/stabilization-guardian.test.mjs test/stabilization-semver.test.mjs test/stabilization-powershell.test.mjs test/release-slot.test.mjs test/runtime-self-update.test.mjs test/r51-runtime-coherence.test.mjs test/remote-session-cli.test.mjs test/r52-offline-predecessor-recovery.test.mjs test/r52-host-revocation.test.mjs",
79
79
  "r54:focused:test": "node --test --test-concurrency=1 test/r54-release-contract.test.mjs test/r54-offline-predecessor-self-exclusion.test.mjs test/r52-offline-predecessor-recovery.test.mjs test/runtime-self-update.test.mjs test/r51-runtime-coherence.test.mjs test/remote-session-cli.test.mjs",
80
80
  "r55:focused:test": "node --test --test-concurrency=1 test/r55-release-contract.test.mjs test/r55-offline-predecessor-guardian-family.test.mjs test/r54-offline-predecessor-self-exclusion.test.mjs test/r52-offline-predecessor-recovery.test.mjs test/runtime-self-update.test.mjs test/r51-runtime-coherence.test.mjs test/remote-session-cli.test.mjs",
81
- "r56:focused:test": "node --test --test-concurrency=1 test/r56-release-contract.test.mjs test/r56-rollback-launcher-restore.test.mjs test/r55-offline-predecessor-guardian-family.test.mjs test/r54-offline-predecessor-self-exclusion.test.mjs test/runtime-self-update.test.mjs test/release-slot.test.mjs test/r51-runtime-coherence.test.mjs"
81
+ "r56:focused:test": "node --test --test-concurrency=1 test/r56-release-contract.test.mjs test/r56-rollback-launcher-restore.test.mjs test/r55-offline-predecessor-guardian-family.test.mjs test/r54-offline-predecessor-self-exclusion.test.mjs test/runtime-self-update.test.mjs test/release-slot.test.mjs test/r51-runtime-coherence.test.mjs",
82
+ "r57:focused:test": "node --test --test-concurrency=1 test/r57-release-contract.test.mjs test/r57-core-startup-race.test.mjs test/r56-rollback-launcher-restore.test.mjs test/r55-offline-predecessor-guardian-family.test.mjs test/r54-offline-predecessor-self-exclusion.test.mjs test/runtime-self-update.test.mjs test/release-slot.test.mjs test/r51-runtime-coherence.test.mjs test/remote-session-cli.test.mjs"
82
83
  },
83
84
  "bundleDependencies": [
84
85
  "@modelcontextprotocol/server",
@@ -0,0 +1,27 @@
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.34 / R57 gate failed at $Name with exit code $LASTEXITCODE" }
9
+ }
10
+ function Invoke-NodeTest {
11
+ param([Parameter(Mandatory)][string]$Name,[Parameter(Mandatory)][string[]]$TestFiles)
12
+ Write-Host "==== $Name ===="
13
+ & node.exe --test --test-concurrency=1 @TestFiles
14
+ if ($LASTEXITCODE -ne 0) { throw "DEADBYTE 0.15.34 / R57 gate failed at $Name with exit code $LASTEXITCODE" }
15
+ }
16
+
17
+ Invoke-NodeTest 'r57-package-boundary' @('test/package-boundary.test.mjs')
18
+ Invoke-GateStep 'r57-focused-contracts' @('run','r57:focused:test')
19
+ Write-Host '==== full-regression-evidence ===='
20
+ $matrix=Get-Content -LiteralPath (Join-Path (Split-Path $PSScriptRoot -Parent) 'TEST-MATRIX.json') -Raw | ConvertFrom-Json
21
+ if($matrix.observed_pre_release_evidence.full_regression.status -ne 'PASS'){ throw 'R57 full regression evidence is not PASS' }
22
+ Invoke-GateStep 'manifest-write' @('run','manifest:write')
23
+ Invoke-GateStep 'manifest-verify' @('run','manifest:verify')
24
+ Invoke-GateStep 'doctor' @('run','doctor')
25
+ & node.exe (Join-Path $PSScriptRoot 'windows-gate-evidence-r57.mjs')
26
+ if ($LASTEXITCODE -ne 0) { throw "R57 evidence writer failed with exit code $LASTEXITCODE" }
27
+ Write-Host '==== DEADBYTE 0.15.34 / R57 WINDOWS GATE: PASS ===='
@@ -0,0 +1,81 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { mkdir, open, readFile } from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { doctor } from '../src/doctor-r45.mjs';
7
+
8
+ const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
9
+ const stateRoot=path.resolve(process.env.DEADBYTE_STATE_ROOT||path.join(os.homedir(),'.deadbyte-mcp'));
10
+ const sha256=bytes=>createHash('sha256').update(bytes).digest('hex');
11
+ const insist=(ok,message)=>{if(!ok)throw new Error(message);};
12
+ const pkg=JSON.parse(await readFile(path.join(root,'package.json'),'utf8'));
13
+ const release=JSON.parse(await readFile(path.join(root,'RELEASE.json'),'utf8'));
14
+ const provenance=JSON.parse(await readFile(path.join(root,'PROVENANCE.json'),'utf8'));
15
+ const matrix=JSON.parse(await readFile(path.join(root,'TEST-MATRIX.json'),'utf8'));
16
+ const active=JSON.parse(await readFile(path.join(stateRoot,'active-release.json'),'utf8'));
17
+ const manifestSha256=sha256(await readFile(path.join(root,'MANIFEST.SHA256')));
18
+
19
+ insist(pkg.version==='0.15.34'&&release.version===pkg.version&&release.train==='R57','R57 candidate identity mismatch');
20
+ insist(release.parent.version==='0.15.33','R57 parent mismatch');
21
+ insist(release.parent.manifest_sha256==='776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c','R57 parent manifest mismatch');
22
+ insist(release.parent.generation_manifest_sha256==='20ccc5e4bbf8470b61e0a6d2ad181dad5e8533da980ceba7749e1d6f48d9dbd3','R57 parent generation mismatch');
23
+ insist(release.parent.tarball_sha256==='d84a6df0a972a43c50d5e31242d9217f59858b2d73c4284af296da76d2048e5f','R57 parent tarball mismatch');
24
+ insist(
25
+ active.release_id===release.runtime_predecessor.release_id&&
26
+ active.manifest_sha256===release.runtime_predecessor.manifest_sha256&&
27
+ active.generation_manifest_sha256===release.runtime_predecessor.generation_manifest_sha256,
28
+ 'active runtime is not exact sealed 0.15.33 predecessor'
29
+ );
30
+ insist(release.hotfix?.bounded_core_discovery_after_online===true,'R57 bounded core discovery missing');
31
+ insist(release.hotfix?.retry_only_missing_core===true,'R57 zero-child-only retry contract missing');
32
+ insist(release.hotfix?.ambiguous_core_fail_closed===true,'R57 ambiguous-core fail-closed contract missing');
33
+ insist(release.hotfix?.timeout_fail_closed===true,'R57 timeout fail-closed contract missing');
34
+ insist(release.hotfix?.full_regression==='PASS','R57 full regression metadata is not PASS');
35
+ insist(matrix.observed_pre_release_evidence?.full_regression?.status==='PASS','R57 full regression evidence is not PASS');
36
+ insist(provenance.operator_override?.stable_final_claim===false,'R57 must not claim stable/final');
37
+ insist(matrix.operator_override?.four_hour_soak==='NOT_COMPLETED','R57 matrix must preserve soak bypass');
38
+
39
+ const health=await doctor();
40
+ insist(health.status==='ok'&&health.package_version===pkg.version&&health.manifest?.verified===true,'R57 doctor evidence invalid');
41
+
42
+ const evidenceBody={
43
+ schema:'deadbyte.r57-windows-gate.v1',
44
+ status:'passed',
45
+ exit_code:0,
46
+ version:pkg.version,
47
+ train:'R57',
48
+ completed_at_utc:new Date().toISOString(),
49
+ manifest_sha256:manifestSha256,
50
+ parent:release.parent,
51
+ runtime_predecessor:release.runtime_predecessor,
52
+ hotfix:release.hotfix,
53
+ operator_override:provenance.operator_override,
54
+ active_predecessor:{
55
+ release_id:active.release_id,
56
+ version:active.version,
57
+ manifest_sha256:active.manifest_sha256,
58
+ generation_manifest_sha256:active.generation_manifest_sha256
59
+ },
60
+ doctor:{verified_entries:health.manifest.verified_entries},
61
+ gates:{
62
+ r57_focused:true,
63
+ package_boundary:true,
64
+ full_regression:true,
65
+ manifest_final_verify:true,
66
+ four_hour_soak_completed:false
67
+ }
68
+ };
69
+ const bytes=Buffer.from(JSON.stringify(evidenceBody,null,2)+'\n');
70
+ const dir=path.join(stateRoot,'evidence','release');
71
+ await mkdir(dir,{recursive:true});
72
+ const target=path.join(dir,`r57-windows-gate-${manifestSha256.slice(0,16)}.json`);
73
+ try{
74
+ const handle=await open(target,'wx',0o600);
75
+ try{await handle.writeFile(bytes);await handle.sync();}finally{await handle.close();}
76
+ }catch(error){
77
+ if(error?.code!=='EEXIST')throw error;
78
+ const prior=JSON.parse(await readFile(target,'utf8'));
79
+ insist(prior.schema===evidenceBody.schema&&prior.status==='passed'&&prior.version===evidenceBody.version&&prior.manifest_sha256===manifestSha256,'conflicting R57 gate evidence identity');
80
+ }
81
+ console.log(JSON.stringify({status:'passed',path:target,sha256:sha256(bytes),manifest_sha256:manifestSha256}));
@@ -743,6 +743,37 @@ export function selectCoreProcess(processes,coreRoot,bridgePid,verifiedBridge=nu
743
743
  function coreProcess(coreRoot,bridge){
744
744
  return selectCoreProcess(nodeProcesses(),coreRoot,bridge.pid,bridge);
745
745
  }
746
+ export async function waitForCoreProcess(coreRoot,bridge,{
747
+ timeoutMs=10000,
748
+ pollMs=100,
749
+ processProvider=nodeProcesses,
750
+ sleepFn=sleep,
751
+ nowFn=Date.now
752
+ }={}){
753
+ const bridgePid=Number(bridge?.pid);
754
+ if(!Number.isInteger(bridgePid)||bridgePid<1) throw new Error('downstream core wait requires verified bridge PID');
755
+ if(!Number.isFinite(timeoutMs)||timeoutMs<0) throw new Error('downstream core wait timeout invalid');
756
+ if(!Number.isFinite(pollMs)||pollMs<1) throw new Error('downstream core wait poll invalid');
757
+ if(typeof processProvider!=='function'||typeof sleepFn!=='function'||typeof nowFn!=='function') throw new Error('downstream core wait hooks invalid');
758
+ const started=Number(nowFn());
759
+ let lastError=null;
760
+ while(true){
761
+ try {
762
+ const processes=await processProvider();
763
+ return selectCoreProcess(processes,coreRoot,bridgePid,bridge);
764
+ } catch(error){
765
+ const message=String(error?.message??error);
766
+ const transient=`expected one unambiguous downstream core for bridge ${bridgePid}, found children=0 visible_matches=0`;
767
+ if(message!==transient) throw error;
768
+ lastError=error;
769
+ }
770
+ const elapsed=Math.max(0,Number(nowFn())-started);
771
+ if(elapsed>=timeoutMs){
772
+ throw new Error(`downstream core did not appear for bridge ${bridgePid} within ${timeoutMs}ms: ${String(lastError?.message??lastError)}`);
773
+ }
774
+ await sleepFn(Math.min(pollMs,Math.max(1,timeoutMs-elapsed)));
775
+ }
776
+ }
746
777
  async function captureRuntime(ctx){
747
778
  const statusText=controllerCaptured(ctx,'status',15000); const status=parseControllerStatus(statusText);
748
779
  if(!status.online||!status.bridge_pid||!status.cloud_pid||!status.local_ready) throw new Error(`slot update requires ONLINE runtime: ${statusText}`);
@@ -826,7 +857,7 @@ async function startAndVerify(ctx,oldRuntime){
826
857
  catch {} await sleep(500);
827
858
  }
828
859
  if(!status?.online||!status.bridge_pid||!status.cloud_pid||!status.local_ready) throw new Error(`new runtime failed ONLINE gate: ${statusText}`);
829
- const bridge=await readLedger(ctx,'bridge'); const cloud=await readLedger(ctx,'cloud'); const core=coreProcess(ctx.core_root,bridge);
860
+ const bridge=await readLedger(ctx,'bridge'); const cloud=await readLedger(ctx,'cloud'); const core=await waitForCoreProcess(ctx.core_root,bridge);
830
861
  if(oldRuntime?.bridge&&sameGeneration(oldRuntime.bridge,bridge)) throw new Error('fresh bridge generation gate failed');
831
862
  if(oldRuntime?.cloud&&sameGeneration(oldRuntime.cloud,cloud)) throw new Error('fresh cloud generation gate failed');
832
863
  if(oldRuntime?.core&&oldRuntime.core.pid===core.pid&&oldRuntime.core.creation_date===core.creation_date) throw new Error('fresh downstream core generation gate failed');
package/src/version.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export const DEADBYTE_VERSION = '0.15.33';
1
+ export const DEADBYTE_VERSION = '0.15.34';
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';
@@ -4,9 +4,11 @@ import test from 'node:test';
4
4
 
5
5
  const read=path=>readFile(new URL(`../${path}`,import.meta.url),'utf8');
6
6
 
7
- test('R56 canonical Windows gate is successor-bound and preserves R55/R54/R53/R52/R51/R50/R49 historical gates',async()=>{
8
- const [pkgText,gate,evidence,historicalR55,historicalEvidenceR55,historicalR54,historicalEvidenceR54,historicalR53,historicalEvidenceR53,historicalR52,historicalEvidenceR52,historicalR51,historicalEvidenceR51,historicalR50,historicalR49,deferred]=await Promise.all([
7
+ test('R57 canonical Windows gate is successor-bound and preserves R56/R55/R54/R53/R52/R51/R50/R49 historical gates',async()=>{
8
+ const [pkgText,gate,evidence,historicalR56,historicalEvidenceR56,historicalR55,historicalEvidenceR55,historicalR54,historicalEvidenceR54,historicalR53,historicalEvidenceR53,historicalR52,historicalEvidenceR52,historicalR51,historicalEvidenceR51,historicalR50,historicalR49,deferred]=await Promise.all([
9
9
  read('package.json'),
10
+ read('scripts/gate-windows-r57.ps1'),
11
+ read('scripts/windows-gate-evidence-r57.mjs'),
10
12
  read('scripts/gate-windows-r56.ps1'),
11
13
  read('scripts/windows-gate-evidence-r56.mjs'),
12
14
  read('scripts/gate-windows-r55.ps1'),
@@ -24,18 +26,20 @@ test('R56 canonical Windows gate is successor-bound and preserves R55/R54/R53/R5
24
26
  read('scripts/deferred-slot-operation-r46.mjs')
25
27
  ]);
26
28
  const pkg=JSON.parse(pkgText);
27
- assert.match(pkg.scripts['gate:windows'],/gate-windows-r56\.ps1$/);
28
- assert.match(gate,/DEADBYTE 0\.15\.33 \/ R56 WINDOWS GATE: PASS/);
29
- assert.match(gate,/r56-package-boundary/);
30
- assert.match(gate,/r56-focused-contracts/);
29
+ assert.match(pkg.scripts['gate:windows'],/gate-windows-r57\.ps1$/);
30
+ assert.match(gate,/DEADBYTE 0\.15\.34 \/ R57 WINDOWS GATE: PASS/);
31
+ assert.match(gate,/r57-package-boundary/);
32
+ assert.match(gate,/r57-focused-contracts/);
31
33
  assert.match(gate,/full-regression-evidence/);
32
34
  assert.match(gate,/manifest-verify/);
33
35
  assert.match(gate,/doctor/);
34
- assert.match(evidence,/deadbyte\.r56-windows-gate\.v1/);
35
- assert.match(evidence,/pkg\.version==='0\.15\.33'/);
36
- assert.match(evidence,/release\.train==='R56'/);
37
- assert.match(evidence,/release\.parent\.version==='0\.15\.32'/);
36
+ assert.match(evidence,/deadbyte\.r57-windows-gate\.v1/);
37
+ assert.match(evidence,/pkg\.version==='0\.15\.34'/);
38
+ assert.match(evidence,/release\.train==='R57'/);
39
+ assert.match(evidence,/release\.parent\.version==='0\.15\.33'/);
38
40
  assert.match(evidence,/four_hour_soak_completed:false/);
41
+ assert.match(historicalR56,/DEADBYTE 0\.15\.33 \/ R56 WINDOWS GATE: PASS/);
42
+ assert.match(historicalEvidenceR56,/deadbyte\.r56-windows-gate\.v1/);
39
43
  assert.match(historicalR55,/DEADBYTE 0\.15\.32 \/ R55 WINDOWS GATE: PASS/);
40
44
  assert.match(historicalEvidenceR55,/deadbyte\.r55-windows-gate\.v1/);
41
45
  assert.match(historicalR54,/DEADBYTE 0\.15\.31 \/ R54 WINDOWS GATE: PASS/);
@@ -5,8 +5,10 @@ import { readFile } from 'node:fs/promises';
5
5
  const root=new URL('../',import.meta.url);
6
6
  const read=rel=>readFile(new URL(rel,root),'utf8');
7
7
  const json=rel=>read(rel).then(JSON.parse);
8
+ const currentPackage=await json('package.json');
9
+ const r56test=currentPackage.version==='0.15.33'?test:test.skip;
8
10
 
9
- test('R56 release identity is coherent across package lock source metadata SBOM and gate',async()=>{
11
+ r56test('R56 release identity is coherent across package lock source metadata SBOM and gate',async()=>{
10
12
  const [pkg,lock,release,provenance,matrix,sbom,versionSource]=await Promise.all([
11
13
  json('package.json'),json('package-lock.json'),json('RELEASE.json'),json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json'),read('src/version.mjs')
12
14
  ]);
@@ -25,7 +27,7 @@ test('R56 release identity is coherent across package lock source metadata SBOM
25
27
  assert.match(pkg.scripts['r56:focused:test'],/r56-rollback-launcher-restore\.test\.mjs/);
26
28
  });
27
29
 
28
- test('R56 source and runtime predecessor are exact active published 0.15.32',async()=>{
30
+ r56test('R56 source and runtime predecessor are exact active published 0.15.32',async()=>{
29
31
  const [release,provenance]=await Promise.all([json('RELEASE.json'),json('PROVENANCE.json')]);
30
32
  assert.equal(release.parent.version,'0.15.32');
31
33
  assert.equal(release.parent.release_id,'v0.15.32-e7223f467777f5df');
@@ -44,7 +46,7 @@ test('R56 source and runtime predecessor are exact active published 0.15.32',asy
44
46
  assert.deepEqual(provenance.runtime_predecessor,release.runtime_predecessor);
45
47
  });
46
48
 
47
- test('R56 records signed rollback launcher ordering RED to GREEN and preserves non-final claim',async()=>{
49
+ r56test('R56 records signed rollback launcher ordering RED to GREEN and preserves non-final claim',async()=>{
48
50
  const [release,provenance,matrix]=await Promise.all([json('RELEASE.json'),json('PROVENANCE.json'),json('TEST-MATRIX.json')]);
49
51
  assert.equal(release.hotfix.signed_handoff_launcher_snapshot_required,true);
50
52
  assert.equal(release.hotfix.stored_predecessor_verified_without_live_launcher,true);
@@ -0,0 +1,85 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { readFile } from 'node:fs/promises';
4
+ import { pathToFileURL } from 'node:url';
5
+ import path from 'node:path';
6
+
7
+ const target=process.env.R57_RUNTIME_UPDATE_PATH
8
+ ? path.resolve(process.env.R57_RUNTIME_UPDATE_PATH)
9
+ : path.resolve(new URL('../src/runtime-update.mjs',import.meta.url).pathname.replace(/^\/(?:[A-Za-z]:)/,m=>m.slice(1)));
10
+ const runtimeUpdate=await import(pathToFileURL(target).href+'?r57='+Date.now());
11
+ const coreRoot='C:\\slot\\core';
12
+ const bridge={pid:20396,component:'bridge',script_path:'C:\\slot\\bridge\\src\\bridge.mjs',script_sha256:'a'.repeat(64)};
13
+
14
+ function core(pid=13456,parentPid=bridge.pid){
15
+ return {
16
+ ProcessId:pid,
17
+ ParentProcessId:parentPid,
18
+ CreationDate:'20261001011147.227000+000',
19
+ ExecutablePath:'C:\\Program Files\\nodejs\\node.exe',
20
+ CommandLine:`"C:\\Program Files\\nodejs\\node.exe" ${coreRoot}\\src\\mcp-server.mjs`
21
+ };
22
+ }
23
+
24
+ test('R57 exports bounded downstream core discovery',()=>{
25
+ assert.equal(typeof runtimeUpdate.waitForCoreProcess,'function');
26
+ });
27
+
28
+ test('R57 tolerates the observed ONLINE-to-core visibility race and returns the later exact child',async()=>{
29
+ const snapshots=[[],[],[core()]];
30
+ let calls=0;
31
+ let clock=0;
32
+ const found=await runtimeUpdate.waitForCoreProcess(coreRoot,bridge,{
33
+ timeoutMs:1000,
34
+ pollMs:100,
35
+ processProvider:()=>{ calls++; return snapshots.shift()??[core()]; },
36
+ sleepFn:async ms=>{ clock+=ms; },
37
+ nowFn:()=>clock
38
+ });
39
+ assert.equal(found.pid,13456);
40
+ assert.equal(found.parent_pid,bridge.pid);
41
+ assert.equal(found.identity_basis,'command_line');
42
+ assert.equal(calls,3);
43
+ });
44
+
45
+ test('R57 times out fail-closed when the core never appears',async()=>{
46
+ let calls=0;
47
+ let clock=0;
48
+ await assert.rejects(
49
+ runtimeUpdate.waitForCoreProcess(coreRoot,bridge,{
50
+ timeoutMs:250,
51
+ pollMs:100,
52
+ processProvider:()=>{ calls++; return []; },
53
+ sleepFn:async ms=>{ clock+=ms; },
54
+ nowFn:()=>clock
55
+ }),
56
+ /downstream core did not appear.*bridge 20396.*250ms/i
57
+ );
58
+ assert.ok(calls>=3);
59
+ });
60
+
61
+ test('R57 does not retry an ambiguous downstream core topology',async()=>{
62
+ let calls=0;
63
+ let clock=0;
64
+ await assert.rejects(
65
+ runtimeUpdate.waitForCoreProcess(coreRoot,bridge,{
66
+ timeoutMs:1000,
67
+ pollMs:100,
68
+ processProvider:()=>{ calls++; return [core(14001),core(14002)]; },
69
+ sleepFn:async ms=>{ clock+=ms; },
70
+ nowFn:()=>clock
71
+ }),
72
+ /expected one unambiguous downstream core.*children=2.*visible_matches=2/i
73
+ );
74
+ assert.equal(calls,1);
75
+ });
76
+
77
+ test('R57 startAndVerify uses bounded core discovery after the ONLINE gate',async()=>{
78
+ const source=await readFile(target,'utf8');
79
+ const start=source.indexOf('async function startAndVerify');
80
+ const end=source.indexOf('async function stabilizeRuntime',start);
81
+ assert.ok(start>=0&&end>start);
82
+ const body=source.slice(start,end);
83
+ assert.match(body,/const core=await waitForCoreProcess\(ctx\.core_root,bridge\)/);
84
+ assert.doesNotMatch(body,/const core=coreProcess\(ctx\.core_root,bridge\)/);
85
+ });
@@ -0,0 +1,65 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { readFile } from 'node:fs/promises';
4
+
5
+ const root=new URL('../',import.meta.url);
6
+ const read=rel=>readFile(new URL(rel,root),'utf8');
7
+ const json=rel=>read(rel).then(JSON.parse);
8
+
9
+ test('R57 release identity is coherent across package lock source metadata SBOM and gate',async()=>{
10
+ const [pkg,lock,release,provenance,matrix,sbom,versionSource]=await Promise.all([
11
+ json('package.json'),json('package-lock.json'),json('RELEASE.json'),json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json'),read('src/version.mjs')
12
+ ]);
13
+ assert.equal(pkg.version,'0.15.34');
14
+ assert.equal(lock.version,pkg.version);
15
+ assert.equal(lock.packages[''].version,pkg.version);
16
+ assert.match(versionSource,/DEADBYTE_VERSION = '0\.15\.34'/);
17
+ assert.equal(release.version,pkg.version);
18
+ assert.equal(release.train,'R57');
19
+ assert.equal(provenance.version,pkg.version);
20
+ assert.equal(matrix.version,pkg.version);
21
+ assert.equal(matrix.train,'R57');
22
+ assert.equal(sbom.metadata.component.version,pkg.version);
23
+ assert.equal(sbom.serialNumber,'urn:cdx:deadbyte-mcp:r57:0.15.34');
24
+ assert.match(pkg.scripts['gate:windows'],/gate-windows-r57\.ps1/);
25
+ assert.match(pkg.scripts['r57:focused:test'],/r57-core-startup-race\.test\.mjs/);
26
+ });
27
+
28
+ test('R57 source and runtime predecessor are exact active published 0.15.33',async()=>{
29
+ const [release,provenance]=await Promise.all([json('RELEASE.json'),json('PROVENANCE.json')]);
30
+ assert.equal(release.parent.version,'0.15.33');
31
+ assert.equal(release.parent.release_id,'v0.15.33-776a51cb916e28dd');
32
+ assert.equal(release.parent.manifest_sha256,'776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c');
33
+ assert.equal(release.parent.generation_manifest_sha256,'20ccc5e4bbf8470b61e0a6d2ad181dad5e8533da980ceba7749e1d6f48d9dbd3');
34
+ assert.equal(release.parent.tarball_sha256,'d84a6df0a972a43c50d5e31242d9217f59858b2d73c4284af296da76d2048e5f');
35
+ assert.equal(release.parent.activation_status,'ACTIVATED_ROLLBACK_CORE_DISCOVERY_RACE_OBSERVED');
36
+ assert.equal(release.source_predecessor.version,'0.15.33');
37
+ assert.deepEqual(release.runtime_predecessor,{
38
+ release_id:'v0.15.33-776a51cb916e28dd',
39
+ manifest_sha256:'776a51cb916e28ddc3cbb2ecd3857151a0e73e0aaf83d4e6308e6674125dd01c',
40
+ generation_manifest_sha256:'20ccc5e4bbf8470b61e0a6d2ad181dad5e8533da980ceba7749e1d6f48d9dbd3'
41
+ });
42
+ assert.equal(provenance.parent_manifest_sha256,release.parent.manifest_sha256);
43
+ assert.equal(provenance.parent_generation_manifest_sha256,release.parent.generation_manifest_sha256);
44
+ assert.deepEqual(provenance.runtime_predecessor,release.runtime_predecessor);
45
+ });
46
+
47
+ test('R57 records bounded zero-child retry RED to GREEN and preserves fail-closed controls',async()=>{
48
+ const [release,provenance,matrix]=await Promise.all([json('RELEASE.json'),json('PROVENANCE.json'),json('TEST-MATRIX.json')]);
49
+ assert.equal(release.hotfix.bounded_core_discovery_after_online,true);
50
+ assert.equal(release.hotfix.retry_only_missing_core,true);
51
+ assert.equal(release.hotfix.ambiguous_core_fail_closed,true);
52
+ assert.equal(release.hotfix.timeout_fail_closed,true);
53
+ assert.equal(release.hotfix.parent_rollback_reached_exact_0_15_32,true);
54
+ assert.equal(release.hotfix.parent_recovery_restored_exact_0_15_33,true);
55
+ assert.equal(release.hotfix.exact_parent_activation_receipt_sha256,'5da29c0c6e7858d518f1ece5e3509ac9ac9e2079f4117a83827a0d432018a4d0');
56
+ assert.equal(release.hotfix.observed_parent_rollback_state_sha256,'e4ffcdb92a997bb49f936dfc338701b81601ad0ded97284f5d615f4276786608');
57
+ assert.equal(release.hotfix.red_parent_0_15_33,'FAIL_5_OF_5');
58
+ assert.equal(release.hotfix.green_r57_candidate,'PASS_5_OF_5');
59
+ assert.equal(matrix.observed_pre_release_evidence.red_parent_0_15_33.receipt_sha256,'f12a8ea7593aa0754da45c074e613d7d3c530e8e95d83a9e8b669cfbc61d0306');
60
+ assert.equal(matrix.observed_pre_release_evidence.green_r57_candidate.receipt_sha256,'9b62291a4312df128e88749f1a0c88d3884d82fb651d7d389db4e14556a5f39f');
61
+ assert.equal(provenance.operator_override.four_hour_soak,'NOT_COMPLETED');
62
+ assert.equal(release.hotfix.stable_final_claim,false);
63
+ assert.equal(provenance.operator_override.stable_final_claim,false);
64
+ assert.equal(matrix.operator_override.stable_final_claim,false);
65
+ });