deadbyte-mcp 0.8.10 → 0.10.0

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.
Files changed (388) hide show
  1. package/CONTEXT.md +41 -0
  2. package/MANIFEST.SHA256 +386 -94
  3. package/R34-BASELINE.json +9 -0
  4. package/README.txt +141 -10
  5. package/bench/fixtures/corpus.json +36 -0
  6. package/bench/fixtures/r36/case-map.json +8 -0
  7. package/bin/WORKER-REGISTRY.txt +3 -3
  8. package/bin/appcontainer-stage.exe +0 -0
  9. package/bin/appcontainer-stage.obj +0 -0
  10. package/bin/bootstrap-advapi32.exe +0 -0
  11. package/bin/bootstrap-advapi32.obj +0 -0
  12. package/bin/bootstrap-exitcode.exe +0 -0
  13. package/bin/bootstrap-exitcode.obj +0 -0
  14. package/bin/bootstrap-kernel32.exe +0 -0
  15. package/bin/bootstrap-kernel32.obj +0 -0
  16. package/bin/child-control-probe.exe +0 -0
  17. package/bin/child-control-probe.obj +0 -0
  18. package/bin/child-control-stage.exe +0 -0
  19. package/bin/child-control-stage.obj +0 -0
  20. package/bin/contained-reverse-worker.exe +0 -0
  21. package/bin/contained-reverse-worker.obj +0 -0
  22. package/bin/contained-transform-worker.exe +0 -0
  23. package/bin/contained-transform-worker.obj +0 -0
  24. package/bin/containment-probe.exe +0 -0
  25. package/bin/containment-probe.obj +0 -0
  26. package/bin/deadbyte-contain.exe +0 -0
  27. package/bin/deadbyte-contain.obj +0 -0
  28. package/bin/deadbyte-exec.exe +0 -0
  29. package/bin/deadbyte-exec.obj +0 -0
  30. package/bin/deadbyte-process-host.exe +0 -0
  31. package/bin/deadbyte-process-host.obj +0 -0
  32. package/bin/deadbyte-tunnel-host.exe +0 -0
  33. package/bin/deadbyte-tunnel-host.obj +0 -0
  34. package/controller/README.TXT +12 -4
  35. package/controller/deadbyte-controller.config.psd1.example +14 -0
  36. package/controller/deadbyte-controller.ps1 +191 -20
  37. package/controller/deadbyte-process-policy.json +5 -5
  38. package/controller/deadbyte-semantic-lsp-config.json +95 -0
  39. package/docs/ADR-0001-PRODUCTION-BASELINE-SEAMS.md +29 -0
  40. package/docs/ARCHITECTURE.md +6 -5
  41. package/docs/R36-CAPABILITY-EVIDENCE.md +43 -0
  42. package/docs/superpowers/plans/2026-09-16-deadbyte-loop-engine.md +846 -0
  43. package/docs/superpowers/plans/2026-09-17-r35-production-successor.md +408 -0
  44. package/docs/superpowers/plans/2026-09-18-r36-zero-loss-autonomy.md +739 -0
  45. package/docs/superpowers/specs/2026-09-16-deadbyte-loop-engine-design.md +435 -0
  46. package/docs/superpowers/specs/2026-09-17-r35-production-successor-design.md +220 -0
  47. package/docs/superpowers/specs/2026-09-18-r36-zero-loss-autonomy-design.md +640 -0
  48. package/node_modules/typescript/LICENSE.txt +55 -0
  49. package/node_modules/typescript/README.md +50 -0
  50. package/node_modules/typescript/SECURITY.md +41 -0
  51. package/node_modules/typescript/ThirdPartyNoticeText.txt +193 -0
  52. package/node_modules/typescript/bin/tsc +2 -0
  53. package/node_modules/typescript/bin/tsserver +2 -0
  54. package/node_modules/typescript/lib/_tsc.js +133818 -0
  55. package/node_modules/typescript/lib/_tsserver.js +659 -0
  56. package/node_modules/typescript/lib/_typingsInstaller.js +222 -0
  57. package/node_modules/typescript/lib/cs/diagnosticMessages.generated.json +2122 -0
  58. package/node_modules/typescript/lib/de/diagnosticMessages.generated.json +2122 -0
  59. package/node_modules/typescript/lib/es/diagnosticMessages.generated.json +2122 -0
  60. package/node_modules/typescript/lib/fr/diagnosticMessages.generated.json +2122 -0
  61. package/node_modules/typescript/lib/it/diagnosticMessages.generated.json +2122 -0
  62. package/node_modules/typescript/lib/ja/diagnosticMessages.generated.json +2122 -0
  63. package/node_modules/typescript/lib/ko/diagnosticMessages.generated.json +2122 -0
  64. package/node_modules/typescript/lib/lib.d.ts +22 -0
  65. package/node_modules/typescript/lib/lib.decorators.d.ts +384 -0
  66. package/node_modules/typescript/lib/lib.decorators.legacy.d.ts +22 -0
  67. package/node_modules/typescript/lib/lib.dom.asynciterable.d.ts +41 -0
  68. package/node_modules/typescript/lib/lib.dom.d.ts +39429 -0
  69. package/node_modules/typescript/lib/lib.dom.iterable.d.ts +571 -0
  70. package/node_modules/typescript/lib/lib.es2015.collection.d.ts +147 -0
  71. package/node_modules/typescript/lib/lib.es2015.core.d.ts +597 -0
  72. package/node_modules/typescript/lib/lib.es2015.d.ts +28 -0
  73. package/node_modules/typescript/lib/lib.es2015.generator.d.ts +77 -0
  74. package/node_modules/typescript/lib/lib.es2015.iterable.d.ts +605 -0
  75. package/node_modules/typescript/lib/lib.es2015.promise.d.ts +81 -0
  76. package/node_modules/typescript/lib/lib.es2015.proxy.d.ts +128 -0
  77. package/node_modules/typescript/lib/lib.es2015.reflect.d.ts +144 -0
  78. package/node_modules/typescript/lib/lib.es2015.symbol.d.ts +46 -0
  79. package/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts +326 -0
  80. package/node_modules/typescript/lib/lib.es2016.array.include.d.ts +116 -0
  81. package/node_modules/typescript/lib/lib.es2016.d.ts +21 -0
  82. package/node_modules/typescript/lib/lib.es2016.full.d.ts +23 -0
  83. package/node_modules/typescript/lib/lib.es2016.intl.d.ts +31 -0
  84. package/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts +21 -0
  85. package/node_modules/typescript/lib/lib.es2017.d.ts +26 -0
  86. package/node_modules/typescript/lib/lib.es2017.date.d.ts +31 -0
  87. package/node_modules/typescript/lib/lib.es2017.full.d.ts +23 -0
  88. package/node_modules/typescript/lib/lib.es2017.intl.d.ts +44 -0
  89. package/node_modules/typescript/lib/lib.es2017.object.d.ts +49 -0
  90. package/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts +135 -0
  91. package/node_modules/typescript/lib/lib.es2017.string.d.ts +45 -0
  92. package/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts +53 -0
  93. package/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts +77 -0
  94. package/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts +53 -0
  95. package/node_modules/typescript/lib/lib.es2018.d.ts +24 -0
  96. package/node_modules/typescript/lib/lib.es2018.full.d.ts +24 -0
  97. package/node_modules/typescript/lib/lib.es2018.intl.d.ts +83 -0
  98. package/node_modules/typescript/lib/lib.es2018.promise.d.ts +30 -0
  99. package/node_modules/typescript/lib/lib.es2018.regexp.d.ts +37 -0
  100. package/node_modules/typescript/lib/lib.es2019.array.d.ts +79 -0
  101. package/node_modules/typescript/lib/lib.es2019.d.ts +24 -0
  102. package/node_modules/typescript/lib/lib.es2019.full.d.ts +24 -0
  103. package/node_modules/typescript/lib/lib.es2019.intl.d.ts +23 -0
  104. package/node_modules/typescript/lib/lib.es2019.object.d.ts +33 -0
  105. package/node_modules/typescript/lib/lib.es2019.string.d.ts +37 -0
  106. package/node_modules/typescript/lib/lib.es2019.symbol.d.ts +24 -0
  107. package/node_modules/typescript/lib/lib.es2020.bigint.d.ts +765 -0
  108. package/node_modules/typescript/lib/lib.es2020.d.ts +27 -0
  109. package/node_modules/typescript/lib/lib.es2020.date.d.ts +42 -0
  110. package/node_modules/typescript/lib/lib.es2020.full.d.ts +24 -0
  111. package/node_modules/typescript/lib/lib.es2020.intl.d.ts +474 -0
  112. package/node_modules/typescript/lib/lib.es2020.number.d.ts +28 -0
  113. package/node_modules/typescript/lib/lib.es2020.promise.d.ts +47 -0
  114. package/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts +99 -0
  115. package/node_modules/typescript/lib/lib.es2020.string.d.ts +44 -0
  116. package/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts +41 -0
  117. package/node_modules/typescript/lib/lib.es2021.d.ts +23 -0
  118. package/node_modules/typescript/lib/lib.es2021.full.d.ts +24 -0
  119. package/node_modules/typescript/lib/lib.es2021.intl.d.ts +166 -0
  120. package/node_modules/typescript/lib/lib.es2021.promise.d.ts +48 -0
  121. package/node_modules/typescript/lib/lib.es2021.string.d.ts +33 -0
  122. package/node_modules/typescript/lib/lib.es2021.weakref.d.ts +78 -0
  123. package/node_modules/typescript/lib/lib.es2022.array.d.ts +121 -0
  124. package/node_modules/typescript/lib/lib.es2022.d.ts +25 -0
  125. package/node_modules/typescript/lib/lib.es2022.error.d.ts +75 -0
  126. package/node_modules/typescript/lib/lib.es2022.full.d.ts +24 -0
  127. package/node_modules/typescript/lib/lib.es2022.intl.d.ts +145 -0
  128. package/node_modules/typescript/lib/lib.es2022.object.d.ts +26 -0
  129. package/node_modules/typescript/lib/lib.es2022.regexp.d.ts +39 -0
  130. package/node_modules/typescript/lib/lib.es2022.string.d.ts +25 -0
  131. package/node_modules/typescript/lib/lib.es2023.array.d.ts +924 -0
  132. package/node_modules/typescript/lib/lib.es2023.collection.d.ts +21 -0
  133. package/node_modules/typescript/lib/lib.es2023.d.ts +22 -0
  134. package/node_modules/typescript/lib/lib.es2023.full.d.ts +24 -0
  135. package/node_modules/typescript/lib/lib.es2023.intl.d.ts +56 -0
  136. package/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts +65 -0
  137. package/node_modules/typescript/lib/lib.es2024.collection.d.ts +29 -0
  138. package/node_modules/typescript/lib/lib.es2024.d.ts +26 -0
  139. package/node_modules/typescript/lib/lib.es2024.full.d.ts +24 -0
  140. package/node_modules/typescript/lib/lib.es2024.object.d.ts +29 -0
  141. package/node_modules/typescript/lib/lib.es2024.promise.d.ts +35 -0
  142. package/node_modules/typescript/lib/lib.es2024.regexp.d.ts +25 -0
  143. package/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts +68 -0
  144. package/node_modules/typescript/lib/lib.es2024.string.d.ts +29 -0
  145. package/node_modules/typescript/lib/lib.es5.d.ts +4601 -0
  146. package/node_modules/typescript/lib/lib.es6.d.ts +23 -0
  147. package/node_modules/typescript/lib/lib.esnext.array.d.ts +35 -0
  148. package/node_modules/typescript/lib/lib.esnext.collection.d.ts +96 -0
  149. package/node_modules/typescript/lib/lib.esnext.d.ts +29 -0
  150. package/node_modules/typescript/lib/lib.esnext.decorators.d.ts +28 -0
  151. package/node_modules/typescript/lib/lib.esnext.disposable.d.ts +193 -0
  152. package/node_modules/typescript/lib/lib.esnext.error.d.ts +24 -0
  153. package/node_modules/typescript/lib/lib.esnext.float16.d.ts +445 -0
  154. package/node_modules/typescript/lib/lib.esnext.full.d.ts +24 -0
  155. package/node_modules/typescript/lib/lib.esnext.intl.d.ts +21 -0
  156. package/node_modules/typescript/lib/lib.esnext.iterator.d.ts +148 -0
  157. package/node_modules/typescript/lib/lib.esnext.promise.d.ts +34 -0
  158. package/node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts +25 -0
  159. package/node_modules/typescript/lib/lib.scripthost.d.ts +322 -0
  160. package/node_modules/typescript/lib/lib.webworker.asynciterable.d.ts +41 -0
  161. package/node_modules/typescript/lib/lib.webworker.d.ts +13150 -0
  162. package/node_modules/typescript/lib/lib.webworker.importscripts.d.ts +23 -0
  163. package/node_modules/typescript/lib/lib.webworker.iterable.d.ts +340 -0
  164. package/node_modules/typescript/lib/pl/diagnosticMessages.generated.json +2122 -0
  165. package/node_modules/typescript/lib/pt-br/diagnosticMessages.generated.json +2122 -0
  166. package/node_modules/typescript/lib/ru/diagnosticMessages.generated.json +2122 -0
  167. package/node_modules/typescript/lib/tr/diagnosticMessages.generated.json +2122 -0
  168. package/node_modules/typescript/lib/tsc.js +8 -0
  169. package/node_modules/typescript/lib/tsserver.js +8 -0
  170. package/node_modules/typescript/lib/tsserverlibrary.d.ts +17 -0
  171. package/node_modules/typescript/lib/tsserverlibrary.js +21 -0
  172. package/node_modules/typescript/lib/typesMap.json +497 -0
  173. package/node_modules/typescript/lib/typescript.d.ts +11437 -0
  174. package/node_modules/typescript/lib/typescript.js +200276 -0
  175. package/node_modules/typescript/lib/typingsInstaller.js +8 -0
  176. package/node_modules/typescript/lib/watchGuard.js +53 -0
  177. package/node_modules/typescript/lib/zh-cn/diagnosticMessages.generated.json +2122 -0
  178. package/node_modules/typescript/lib/zh-tw/diagnosticMessages.generated.json +2122 -0
  179. package/node_modules/typescript/package.json +120 -0
  180. package/package.json +5 -3
  181. package/proof/CONTAINMENT-BUILD.txt +6 -6
  182. package/proof/R34-TASK8-SUPERVISOR-CHECKPOINT.json +29 -0
  183. package/proof/R34-TASK9-MCP-SURFACE-CHECKPOINT.json +28 -0
  184. package/scripts/capability-benchmark.mjs +27 -0
  185. package/scripts/deferred-slot-operation.mjs +56 -16
  186. package/scripts/final-closure-verify.mjs +88 -39
  187. package/scripts/final-closure.mjs +63 -56
  188. package/scripts/gate-windows.ps1 +3 -3
  189. package/scripts/release-parity-tests.ps1 +9 -0
  190. package/scripts/release-parity.mjs +149 -139
  191. package/scripts/semantic-preflight.ps1 +73 -0
  192. package/scripts/tool-surface-snapshot.mjs +73 -0
  193. package/scripts/windows-gate-evidence.mjs +5 -5
  194. package/src/audit-verify.mjs +6 -2
  195. package/src/autonomous-action-reconcile.mjs +142 -0
  196. package/src/autonomous-context-engine.mjs +256 -0
  197. package/src/autonomous-live-state.mjs +17 -0
  198. package/src/autonomous-local-supervisor.mjs +249 -0
  199. package/src/autonomous-loop-state.mjs +304 -0
  200. package/src/autonomous-mcp-tools.mjs +5 -1
  201. package/src/autonomous-output-contracts.mjs +26 -7
  202. package/src/autonomous-plan.mjs +181 -0
  203. package/src/autonomous-planner-contracts.mjs +79 -0
  204. package/src/autonomous-planner.mjs +113 -6
  205. package/src/autonomous-policy.mjs +15 -2
  206. package/src/autonomous-progress.mjs +127 -0
  207. package/src/autonomous-runtime.mjs +785 -62
  208. package/src/autonomous-supervisor-host.mjs +70 -0
  209. package/src/autonomous-supervisor.mjs +31 -8
  210. package/src/capability-benchmark-runner.mjs +193 -0
  211. package/src/capability-benchmark.mjs +95 -0
  212. package/src/capability-ledger.mjs +158 -0
  213. package/src/coding-mcp-tools.mjs +65 -8
  214. package/src/coding-output-contracts.mjs +91 -8
  215. package/src/coding-plane.mjs +45 -9
  216. package/src/coding-search.mjs +130 -47
  217. package/src/compact-gateway-mcp-tools.mjs +128 -0
  218. package/src/compact-gateway-output-contracts.mjs +16 -0
  219. package/src/context-provenance.mjs +86 -0
  220. package/src/deadbyte-cli.mjs +145 -30
  221. package/src/document-adapter.mjs +43 -0
  222. package/src/lsp-stdio-client.mjs +112 -0
  223. package/src/machine-fs-smoke-client.mjs +2 -1
  224. package/src/machine-fs.mjs +51 -8
  225. package/src/mcp-server.mjs +46 -9
  226. package/src/native-diff-v2.mjs +337 -0
  227. package/src/native-diff.mjs +50 -2
  228. package/src/observation-smoke-client.mjs +3 -2
  229. package/src/operator-surface.mjs +43 -0
  230. package/src/process-runtime.mjs +98 -11
  231. package/src/process-smoke-client.mjs +11 -3
  232. package/src/provider-circuit.mjs +125 -0
  233. package/src/r36-compact-disarmed-probe.mjs +50 -0
  234. package/src/r36-full-surface-probe.mjs +56 -0
  235. package/src/release-generation.mjs +44 -5
  236. package/src/remote-live-log.mjs +76 -0
  237. package/src/remote-mcp-autonomous-smoke-client.mjs +58 -15
  238. package/src/remote-mcp-coding-smoke-client.mjs +5 -4
  239. package/src/remote-mcp-r24-disarmed-smoke-client.mjs +4 -2
  240. package/src/remote-mcp-r34-parity-client.mjs +177 -0
  241. package/src/remote-mcp-r36-parity-client.mjs +175 -0
  242. package/src/remote-mcp-smoke-client.mjs +113 -56
  243. package/src/remote-result-journal.mjs +114 -0
  244. package/src/runtime-update.mjs +109 -9
  245. package/src/search-cursor.mjs +45 -0
  246. package/src/semantic-backend-registry.mjs +39 -0
  247. package/src/semantic-code.mjs +246 -0
  248. package/src/semantic-lsp-backend.mjs +219 -0
  249. package/src/semantic-lsp-config.mjs +112 -0
  250. package/src/tool-surface-ledger.mjs +92 -0
  251. package/src/version.mjs +1 -1
  252. package/test/audit-verify.test.mjs +1 -1
  253. package/test/autonomous-action-reconcile.test.mjs +106 -0
  254. package/test/autonomous-adversarial.test.mjs +149 -6
  255. package/test/autonomous-capability-r36.test.mjs +151 -0
  256. package/test/autonomous-context-engine.test.mjs +181 -0
  257. package/test/autonomous-live-state.test.mjs +27 -0
  258. package/test/autonomous-local-supervisor.test.mjs +403 -0
  259. package/test/autonomous-loop-state.test.mjs +126 -0
  260. package/test/autonomous-loop-v2.test.mjs +105 -0
  261. package/test/autonomous-loop.test.mjs +79 -1
  262. package/test/autonomous-output-contract.test.mjs +54 -0
  263. package/test/autonomous-plan.test.mjs +101 -0
  264. package/test/autonomous-progress.test.mjs +106 -0
  265. package/test/autonomous-r34-e2e.test.mjs +338 -0
  266. package/test/autonomous-runtime.test.mjs +3 -3
  267. package/test/autonomous-supervisor-integration.test.mjs +48 -3
  268. package/test/capability-benchmark-r36.test.mjs +107 -0
  269. package/test/capability-benchmark-runner.test.mjs +49 -0
  270. package/test/capability-benchmark-semantic-r36.test.mjs +52 -0
  271. package/test/capability-benchmark.test.mjs +47 -0
  272. package/test/capability-claims-r36.test.mjs +23 -0
  273. package/test/capability-ledger-r36.test.mjs +102 -0
  274. package/test/cli-entrypoint.test.mjs +12 -0
  275. package/test/coding-catalog-consistency.test.mjs +24 -0
  276. package/test/coding-plane.test.mjs +3 -3
  277. package/test/coding-runtime.test.mjs +16 -0
  278. package/test/coding-search-r36.test.mjs +90 -0
  279. package/test/compact-catalog-r36.test.mjs +37 -0
  280. package/test/compact-gateway-r36.test.mjs +66 -0
  281. package/test/contained.test.mjs +1 -1
  282. package/test/context-provenance.test.mjs +61 -0
  283. package/test/controller-r27.test.mjs +4 -3
  284. package/test/controller.test.mjs +52 -0
  285. package/test/core.test.mjs +1 -1
  286. package/test/deferred-slot-operation-behavior.test.mjs +5 -1
  287. package/test/deferred-slot-operation.test.mjs +11 -1
  288. package/test/document-adapter.test.mjs +23 -0
  289. package/test/fixtures/lsp-framed-server.mjs +35 -0
  290. package/test/fixtures/semantic/cpp/compile_commands.json +4 -0
  291. package/test/fixtures/semantic/cpp/lib.cpp +2 -0
  292. package/test/fixtures/semantic/cpp/lib.hpp +2 -0
  293. package/test/fixtures/semantic/cpp/main.cpp +2 -0
  294. package/test/fixtures/semantic/python/lib.py +2 -0
  295. package/test/fixtures/semantic/python/main.py +2 -0
  296. package/test/fixtures/semantic/rust/Cargo.lock +7 -0
  297. package/test/fixtures/semantic/rust/Cargo.toml +8 -0
  298. package/test/fixtures/semantic/rust/src/lib.rs +3 -0
  299. package/test/fixtures/semantic/rust/src/main.rs +5 -0
  300. package/test/fixtures/semantic/rust/src/math.rs +3 -0
  301. package/test/fixtures/semantic/rust/target/.rustc_info.json +1 -0
  302. package/test/fixtures/semantic/rust/target/CACHEDIR.TAG +3 -0
  303. package/test/fixtures/semantic/rust/target/debug/.cargo-lock +0 -0
  304. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-4c168fa33c79d09c/dep-test-lib-semantic_rust +0 -0
  305. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-4c168fa33c79d09c/invoked.timestamp +1 -0
  306. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-4c168fa33c79d09c/test-lib-semantic_rust +1 -0
  307. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-4c168fa33c79d09c/test-lib-semantic_rust.json +1 -0
  308. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-5dcd474439c54a26/dep-test-bin-semantic_rust_bin +0 -0
  309. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-5dcd474439c54a26/invoked.timestamp +1 -0
  310. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-5dcd474439c54a26/test-bin-semantic_rust_bin +1 -0
  311. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-5dcd474439c54a26/test-bin-semantic_rust_bin.json +1 -0
  312. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-6212ccd976aa3808/dep-lib-semantic_rust +0 -0
  313. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-6212ccd976aa3808/invoked.timestamp +1 -0
  314. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-6212ccd976aa3808/lib-semantic_rust +1 -0
  315. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-6212ccd976aa3808/lib-semantic_rust.json +1 -0
  316. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-d741378dccdef61c/bin-semantic_rust_bin +1 -0
  317. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-d741378dccdef61c/bin-semantic_rust_bin.json +1 -0
  318. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-d741378dccdef61c/dep-bin-semantic_rust_bin +0 -0
  319. package/test/fixtures/semantic/rust/target/debug/.fingerprint/semantic_rust-d741378dccdef61c/invoked.timestamp +1 -0
  320. package/test/fixtures/semantic/rust/target/debug/deps/libsemantic_rust-4c168fa33c79d09c.rmeta +0 -0
  321. package/test/fixtures/semantic/rust/target/debug/deps/libsemantic_rust-6212ccd976aa3808.rmeta +0 -0
  322. package/test/fixtures/semantic/rust/target/debug/deps/libsemantic_rust_bin-5dcd474439c54a26.rmeta +0 -0
  323. package/test/fixtures/semantic/rust/target/debug/deps/libsemantic_rust_bin-d741378dccdef61c.rmeta +0 -0
  324. package/test/fixtures/semantic/rust/target/debug/deps/semantic_rust-4c168fa33c79d09c.d +5 -0
  325. package/test/fixtures/semantic/rust/target/debug/deps/semantic_rust-6212ccd976aa3808.d +5 -0
  326. package/test/fixtures/semantic/rust/target/debug/deps/semantic_rust_bin-5dcd474439c54a26.d +6 -0
  327. package/test/fixtures/semantic/rust/target/debug/deps/semantic_rust_bin-d741378dccdef61c.d +6 -0
  328. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-1nzlugxi6lq16/s-hmdgo8b6hg-1n6glhc-1qb77z00k06rqw4jdkj92spax/dep-graph.bin +0 -0
  329. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-1nzlugxi6lq16/s-hmdgo8b6hg-1n6glhc-1qb77z00k06rqw4jdkj92spax/query-cache.bin +0 -0
  330. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-1nzlugxi6lq16/s-hmdgo8b6hg-1n6glhc-1qb77z00k06rqw4jdkj92spax/work-products.bin +0 -0
  331. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-1nzlugxi6lq16/s-hmdgo8b6hg-1n6glhc.lock +0 -0
  332. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq-9twkpivsqnjon278x20bddozq/dep-graph.bin +0 -0
  333. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq-9twkpivsqnjon278x20bddozq/metadata.rmeta +0 -0
  334. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq-9twkpivsqnjon278x20bddozq/query-cache.bin +0 -0
  335. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq-9twkpivsqnjon278x20bddozq/work-products.bin +0 -0
  336. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust-3s436v7g6f5xm/s-hmdgo8b58k-1ekj4lq.lock +0 -0
  337. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-1jxcbdeehal7q/s-hmdgo8bxlf-1qr24o3-cmu3jai030no72y8u9eurrnjj/dep-graph.bin +0 -0
  338. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-1jxcbdeehal7q/s-hmdgo8bxlf-1qr24o3-cmu3jai030no72y8u9eurrnjj/query-cache.bin +0 -0
  339. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-1jxcbdeehal7q/s-hmdgo8bxlf-1qr24o3-cmu3jai030no72y8u9eurrnjj/work-products.bin +0 -0
  340. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-1jxcbdeehal7q/s-hmdgo8bxlf-1qr24o3.lock +0 -0
  341. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-2ocx55p60ni6b/s-hmdgo8bxj8-0ir41qt-diy9mqvc2eoiblmhjs3stcgi3/dep-graph.bin +0 -0
  342. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-2ocx55p60ni6b/s-hmdgo8bxj8-0ir41qt-diy9mqvc2eoiblmhjs3stcgi3/query-cache.bin +0 -0
  343. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-2ocx55p60ni6b/s-hmdgo8bxj8-0ir41qt-diy9mqvc2eoiblmhjs3stcgi3/work-products.bin +0 -0
  344. package/test/fixtures/semantic/rust/target/debug/incremental/semantic_rust_bin-2ocx55p60ni6b/s-hmdgo8bxj8-0ir41qt.lock +0 -0
  345. package/test/fixtures/semantic/rust/target/flycheck0/stderr +1 -0
  346. package/test/fixtures/semantic/rust/target/flycheck0/stdout +5 -0
  347. package/test/fixtures/semantic/typescript/lib.ts +3 -0
  348. package/test/fixtures/semantic/typescript/main.ts +2 -0
  349. package/test/fixtures/tool-surface-stdio-server.mjs +14 -0
  350. package/test/helpers/autonomous-r34-fixture.mjs +122 -0
  351. package/test/lsp-stdio-client.test.mjs +72 -0
  352. package/test/multi-file-read.test.mjs +44 -0
  353. package/test/native-diff-topology-r36.test.mjs +105 -0
  354. package/test/observation-integration.test.mjs +3 -3
  355. package/test/package-boundary.test.mjs +6 -0
  356. package/test/process-longrun-r36.test.mjs +82 -0
  357. package/test/process-release-gate.test.mjs +9 -0
  358. package/test/production-docs.test.mjs +48 -0
  359. package/test/prompts-resources.test.mjs +41 -0
  360. package/test/provider-circuit.test.mjs +93 -0
  361. package/test/public-autonomous-ingress-budget.test.mjs +28 -0
  362. package/test/r33-closeout-regression.test.mjs +4 -3
  363. package/test/r33-finalization.test.mjs +26 -18
  364. package/test/r36-finalization.test.mjs +104 -0
  365. package/test/r36-release-identity.test.mjs +52 -0
  366. package/test/release-generation.test.mjs +23 -2
  367. package/test/release-version.test.mjs +27 -17
  368. package/test/remote-live-log-r36.test.mjs +37 -0
  369. package/test/remote-live-log-recovery-r36.test.mjs +41 -0
  370. package/test/remote-r24-catalog.test.mjs +18 -4
  371. package/test/remote-result-journal.test.mjs +58 -0
  372. package/test/remote-session-cli.test.mjs +135 -30
  373. package/test/runtime-self-update.test.mjs +121 -1
  374. package/test/semantic-backend-registry.test.mjs +29 -0
  375. package/test/semantic-code.test.mjs +66 -0
  376. package/test/semantic-lsp-backend.test.mjs +108 -0
  377. package/test/semantic-lsp-config.test.mjs +81 -0
  378. package/test/semantic-lsp-readiness.test.mjs +34 -0
  379. package/test/semantic-lsp-transient-empty.test.mjs +32 -0
  380. package/test/semantic-lsp-transient-null.test.mjs +31 -0
  381. package/test/semantic-multilang.test.mjs +72 -0
  382. package/test/semantic-r36-rename.test.mjs +82 -0
  383. package/test/semantic-runtime-routing.test.mjs +32 -0
  384. package/test/semantic-server-config-integration.test.mjs +66 -0
  385. package/test/tool-surface-ledger.test.mjs +59 -0
  386. package/test/tool-surface-snapshot.test.mjs +17 -0
  387. package/test/tracer-bullet.test.mjs +77 -0
  388. package/deadbyte-mcp-0.8.9.tgz +0 -0
@@ -0,0 +1,104 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { readFile } from 'node:fs/promises';
4
+ import { validateParityEvidence, R35_PREDECESSOR_RELEASE_ID, R35_PREDECESSOR_MANIFEST } from '../scripts/release-parity.mjs';
5
+ import { verifyFinalClosureObject } from '../scripts/final-closure-verify.mjs';
6
+
7
+ const root=new URL('../',import.meta.url);
8
+ const text=rel=>readFile(new URL(rel,root),'utf8');
9
+
10
+ function parityFixture(){
11
+ const manifest='a'.repeat(64);
12
+ return {
13
+ schema:'deadbyte.r36-parity.v1',status:'passed',execution_provider:'deadbyte_mcp',rdc_operation_count:0,
14
+ candidate:{release_id:`v0.10.0-${manifest.slice(0,16)}`,version:'0.10.0',manifest_sha256:manifest},
15
+ immutable_slot:{protected:true,release_root:'C:/immutable/r36',development_root:'D:/Projects/deadbyte-mcp-r36-dev'},
16
+ local_full:{status:'passed',tool_count:76,strict_output_schemas:true},
17
+ public_compact:{status:'passed',tool_count:41,capability_closure:true,gateway_count:5},
18
+ autonomous:{status:'passed',signed_release_verified:true,observed_failure_before_replan:true},
19
+ before_rollback_disarmed:{status:'passed',capability_closure:true,coding_armed:false,autonomous_armed:false},
20
+ rollback:{state:'completed'},stage_restore:{status:'restored',manifest_sha256:manifest},restore:{state:'completed'},
21
+ predecessor:{release_id:R35_PREDECESSOR_RELEASE_ID,version:'0.9.0',manifest_sha256:R35_PREDECESSOR_MANIFEST},
22
+ predecessor_disarmed:{status:'passed',tool_count:73},
23
+ successor:{release_id:`v0.10.0-${manifest.slice(0,16)}`,version:'0.10.0',manifest_sha256:manifest},
24
+ successor_disarmed:{status:'passed',capability_closure:true,coding_armed:false,autonomous_armed:false},
25
+ requirements:Object.fromEntries(['tree_read','precondition_mutation','search','owned_process','observation','coding_loop','autonomy','interrupted_recovery','evidence_verification','compact_closure','full_surface'].map(key=>[key,true]))
26
+ };
27
+ }
28
+
29
+ test('R36 parity validator requires full-76, compact closure, exact R35 predecessor and immutable-slot separation',()=>{
30
+ const good=parityFixture();
31
+ assert.equal(validateParityEvidence(good),true);
32
+ assert.throws(()=>validateParityEvidence({...good,local_full:{...good.local_full,tool_count:75}}),/full 76/i);
33
+ assert.throws(()=>validateParityEvidence({...good,public_compact:{...good.public_compact,capability_closure:false}}),/compact closure/i);
34
+ assert.throws(()=>validateParityEvidence({...good,predecessor:{...good.predecessor,manifest_sha256:'b'.repeat(64)}}),/predecessor/i);
35
+ assert.throws(()=>validateParityEvidence({...good,immutable_slot:{...good.immutable_slot,development_root:good.immutable_slot.release_root}}),/immutable-slot/i);
36
+ assert.throws(()=>validateParityEvidence({...good,stage_restore:{status:'missing',manifest_sha256:good.candidate.manifest_sha256}}),/stage restore/i);
37
+ });
38
+
39
+ test('R36 compact disarmed probe carries signed machine status/ping evidence into closure',async()=>{
40
+ const probe=await text('src/r36-compact-disarmed-probe.mjs');
41
+ assert.match(probe,/op:'machine_ping'/);
42
+ assert.match(probe,/machine_status/);
43
+ assert.match(probe,/machine_ping/);
44
+ assert.match(probe,/nonce/);
45
+ });
46
+
47
+ test('R36 parity captures exact successor bridge before rollback and reuses it for restore',async()=>{
48
+ const parity=await text('scripts/release-parity.mjs');
49
+ assert.match(parity,/loadPowerShellDataFile/);
50
+ assert.match(parity,/successorBridge/);
51
+ assert.match(parity,/Bridge\?\.WorkingDirectory/);
52
+ assert.match(parity,/Bridge\?\.ScriptSha256/);
53
+ assert.match(parity,/const stageRestore=await restoreFrozenStage\(\{developmentRoot,releaseRoot:active\.release_root,expectedManifestSha256:candidateManifest\}\)/);
54
+ assert.match(parity,/scheduleDeferred\('activate',candidateManifest,\{bridgeRoot:successorBridge\.root,bridgeScriptSha256:successorBridge\.sha256\}\)/);
55
+ });
56
+
57
+ test('R36 compact parity uses bounded release-parity tests instead of the full npm suite',async()=>{
58
+ const parity=await text('src/remote-mcp-r36-parity-client.mjs');
59
+ assert.match(parity,/const testScript='scripts\/release-parity-tests\.ps1'/);
60
+ assert.doesNotMatch(parity,/const testScript='scripts\/autonomous-tests\.ps1'/);
61
+ const script=await text('scripts/release-parity-tests.ps1');
62
+ assert.match(script,/r36-finalization\.test\.mjs/);
63
+ assert.match(script,/r36-release-identity\.test\.mjs/);
64
+ assert.match(script,/deferred-slot-operation\.test\.mjs/);
65
+ });
66
+
67
+ test('R36 compact parity treats stale machine-fs precondition denial as expected evidence',async()=>{
68
+ const parity=await text('src/remote-mcp-r36-parity-client.mjs');
69
+ assert.match(parity,/const staleValue=stale\.structuredContent/);
70
+ assert.match(parity,/stale\.isError!==true\|\|staleValue\.status!=='denied'/);
71
+ assert.doesNotMatch(parity,/structured\(stale,'machine_fs stale'\)/);
72
+ });
73
+
74
+ test('R36 final closure writer binds compact public evidence and R36 release evidence domains',async()=>{
75
+ const writer=await text('scripts/final-closure.mjs');
76
+ assert.match(writer,/DEADBYTE-R36-FINAL-CLOSURE-V1/);
77
+ assert.match(writer,/deadbyte\.r36-final-closure\.v1/);
78
+ assert.match(writer,/pointer\.version==='0\.10\.0'/);
79
+ assert.match(writer,/release_label:'R36 FINAL MACHINE BASELINE'/);
80
+ assert.match(writer,/deadbyte\.r36-parity\.v1/);
81
+ assert.match(writer,/deadbyte\.r36-windows-gate\.v1/);
82
+ assert.match(writer,/tool_count.*76|local_full[\s\S]*76/);
83
+ assert.match(writer,/capability_closure/);
84
+ assert.match(writer,/R35_PREDECESSOR_RELEASE_ID|v0\.9\.0-b95e1ec1d9a7e26a/);
85
+ assert.match(writer,/development_root/);
86
+ });
87
+
88
+ test('R36 independent closure verifier binds full, compact, predecessor, restore, Windows gate and immutable slot',async()=>{
89
+ const verifier=await text('scripts/final-closure-verify.mjs');
90
+ assert.equal(typeof verifyFinalClosureObject,'function');
91
+ assert.doesNotMatch(verifier,/from ['"]\.\.\/src\//);
92
+ assert.match(verifier,/DEADBYTE-R36-FINAL-CLOSURE-V1/);
93
+ assert.match(verifier,/deadbyte\.r36-final-closure\.v1/);
94
+ assert.match(verifier,/envelope\.body\.version==='0\.10\.0'/);
95
+ assert.match(verifier,/R36 FINAL MACHINE BASELINE/);
96
+ assert.match(verifier,/deadbyte\.r36-parity\.v1/);
97
+ assert.match(verifier,/deadbyte\.r36-windows-gate\.v1/);
98
+ assert.match(verifier,/76/);
99
+ assert.match(verifier,/42/);
100
+ assert.match(verifier,/b95e1ec1d9a7e26a96ef492306c1be4df18c883ff03ab3b6015f677d7429ec8d/);
101
+ assert.match(verifier,/development_root/);
102
+ assert.match(verifier,/release_root/);
103
+ assert.match(verifier,/successor_disarmed/);
104
+ });
@@ -0,0 +1,52 @@
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 text=rel=>readFile(new URL(rel,root),'utf8');
7
+ const R35_RELEASE_ID='v0.9.0-b95e1ec1d9a7e26a';
8
+ const R35_MANIFEST='b95e1ec1d9a7e26a96ef492306c1be4df18c883ff03ab3b6015f677d7429ec8d';
9
+
10
+ test('R36 current release authority is consistently 0.10.0 / R36 and preserves exact R35 predecessor',async()=>{
11
+ const pkg=JSON.parse(await text('package.json'));
12
+ const [version,controller,gate,readme,architecture,controllerReadme,deferred,parity,closure,closureVerify,windowsGate]=await Promise.all([
13
+ text('src/version.mjs'),text('controller/deadbyte-controller.ps1'),text('scripts/gate-windows.ps1'),
14
+ text('README.txt'),text('docs/ARCHITECTURE.md'),text('controller/README.TXT'),
15
+ text('scripts/deferred-slot-operation.mjs'),text('scripts/release-parity.mjs'),text('scripts/final-closure.mjs'),
16
+ text('scripts/final-closure-verify.mjs'),text('scripts/windows-gate-evidence.mjs')
17
+ ]);
18
+ assert.equal(pkg.version,'0.10.0');
19
+ assert.match(version,/DEADBYTE_VERSION = '0\.10\.0'/);
20
+ assert.match(controller,/CONTROLLER V0\.10\.0 \/ R36/);
21
+ assert.match(gate,/DEADBYTE V0\.10\.0 \/ R36 WINDOWS BATCH GATE: PASS/);
22
+ assert.match(readme,/^DEADBYTE MCP V0\.10\.0 \/ R36 PRODUCTION BASELINE$/m);
23
+ assert.match(architecture,/^# DEADBYTE MCP V0\.10\.0 \/ R36 ARCHITECTURE$/m);
24
+ assert.match(controllerReadme,/^DEADBYTE MCP V0\.10\.0 \/ R36 CONTROLLER$/m);
25
+ assert.match(deferred,/--expected-version','0\.10\.0'/);
26
+ assert.match(parity,/deadbyte\.r36-parity\.v1/);
27
+ assert.match(parity,new RegExp(R35_RELEASE_ID.replaceAll('.','\\.')));
28
+ assert.match(parity,new RegExp(R35_MANIFEST));
29
+ assert.match(closure,/DEADBYTE-R36-FINAL-CLOSURE-V1/);
30
+ assert.match(closure,/version:'0\.10\.0'/);
31
+ assert.match(closure,/release_label:'R36 FINAL MACHINE BASELINE'/);
32
+ assert.match(closureVerify,/DEADBYTE-R36-FINAL-CLOSURE-V1/);
33
+ assert.match(closureVerify,/version==='0\.10\.0'/);
34
+ assert.match(windowsGate,/schema:'deadbyte\.r36-windows-gate\.v1'/);
35
+ });
36
+
37
+ test('R36 controller binds production remote to compact profile and restores parent environment',async()=>{
38
+ const controller=await text('controller/deadbyte-controller.ps1');
39
+ assert.match(controller,/Test-Path Env:DEADBYTE_CAPABILITY_PROFILE/);
40
+ assert.match(controller,/\$previousCapabilityProfileEnv = \$env:DEADBYTE_CAPABILITY_PROFILE/);
41
+ assert.match(controller,/\$env:DEADBYTE_CAPABILITY_PROFILE = 'compact'/);
42
+ assert.match(controller,/Remove-Item Env:DEADBYTE_CAPABILITY_PROFILE/);
43
+ assert.match(controller,/\$env:DEADBYTE_CAPABILITY_PROFILE = \$previousCapabilityProfileEnv/);
44
+ });
45
+
46
+ test('R36 parity source defines exact full 76-tool authority plus compact gateway closure',async()=>{
47
+ const parity=await text('src/remote-mcp-r36-parity-client.mjs');
48
+ assert.match(parity,/R36_EXPECTED_TOOLS/);
49
+ assert.match(parity,/R36_EXPECTED_TOOLS\.length !== 76|tool_count !== 76|length === 76/);
50
+ for(const name of ['capability_manifest','coding_inspect','machine_fs','process_session','machine_observe']) assert.match(parity,new RegExp(name));
51
+ assert.match(parity,/42/);
52
+ });
@@ -19,7 +19,11 @@ test('R27 generation bundle rebinds authority and mutable state outside the rele
19
19
  await mkdir(path.join(release,'scripts'),{recursive:true}); await mkdir(path.join(release,'bin'),{recursive:true}); await mkdir(workspace,{recursive:true});
20
20
  await writeFile(path.join(release,'scripts','gate.ps1'),'Write-Output gate\n');
21
21
  await writeFile(path.join(release,'bin','deadbyte-process-host.exe'),'process-host-bytes\n');
22
- const currentConfig={AgentRuntimeEnabled:true,ProcessRuntimeEnabled:true,CodingRuntimeEnabled:true,MachineFsRuntimeEnabled:true,ObservationRuntimeEnabled:true,AutonomousRuntimeEnabled:true,
22
+ const semanticConfigPath=path.join(base,'semantic-lsp.json');
23
+ const semanticConfigBytes=Buffer.from(JSON.stringify({schema:'deadbyte.semantic-lsp-config.v1',servers:[]})+'\n','utf8');
24
+ await writeFile(semanticConfigPath,semanticConfigBytes);
25
+ const currentConfig={AgentRuntimeEnabled:true,ProcessRuntimeEnabled:true,CodingRuntimeEnabled:true,MachineFsRuntimeEnabled:true,ObservationRuntimeEnabled:true,AutonomousRuntimeEnabled:true,AutonomousSupervisorEnabled:true,SemanticLspConfigFile:semanticConfigPath,SemanticLspConfigSha256:sha(semanticConfigBytes),
26
+ Supervisor:{FilePath:'C:/node.exe',FileSha256:EXE,Arguments:'src\\autonomous-supervisor-host.mjs',WorkingDirectory:'C:/release',ScriptPath:'C:/release/src/autonomous-supervisor-host.mjs',ScriptSha256:'2'.repeat(64)},
23
27
  Bridge:{FilePath:'C:/node.exe',FileSha256:EXE,Arguments:'bridge.mjs',WorkingDirectory:'C:/bridge',ScriptPath:'C:/bridge/bridge.mjs',ScriptSha256:EXE},
24
28
  Cloud:{FilePath:'C:/deadbyte-tunnel-host.exe',FileSha256:EXE,Arguments:'"C:/cloudflared.exe" "C:/secret/tunnel-token.txt" "C:/bridge"',WorkingDirectory:'C:/release',Transport:'deadbyte.named-tunnel.v2',Dependencies:[
25
29
  {Name:'cloudflared',Path:'C:/cloudflared.exe',Sha256:EXE},{Name:'tunnel-token',Path:'C:/secret/tunnel-token.txt',Sha256:EXE}
@@ -38,7 +42,7 @@ test('R27 generation bundle rebinds authority and mutable state outside the rele
38
42
  const development=path.join(base,'development'); await mkdir(development,{recursive:true}); await mkdir(path.join(development,'scripts'),{recursive:true}); await writeFile(path.join(development,'scripts','gate.ps1'),'Write-Output gate\n');
39
43
  const result=await createGenerationBundle({stateRoot:state,releaseRoot:release,developmentRoot:development,workspaceRoot:workspace,releaseId:'v0.8.3-aaaaaaaaaaaaaaaa',currentConfig,codingPolicy:coding,autonomousPolicy:autonomous,hostPolicy:host,processPolicy});
40
44
  const verified=await verifyGenerationBundle(result.generation_root,result.generation_manifest_sha256);
41
- assert.equal(verified.files,5);
45
+ assert.equal(verified.files,6);
42
46
  const generatedProcess=JSON.parse(await readFile(result.process_policy_path,'utf8'));
43
47
  assert.equal(generatedProcess.grant_file,path.join(path.resolve(state),'runtime','process-grant.json'));
44
48
  assert.equal(generatedProcess.state_dir,path.join(path.resolve(state),'evidence','process'));
@@ -62,8 +66,11 @@ test('R27 generation bundle rebinds authority and mutable state outside the rele
62
66
  assert.equal(generatedHost.roots.core.path,path.resolve(development));
63
67
  assert.notEqual(generatedHost.roots.core.path,path.resolve(release));
64
68
  assert.equal(generatedHost.arm_file,path.join(path.resolve(state),'runtime','host-grant.json'));
69
+ assert.equal(await readFile(result.semantic_config_path,'utf8'),semanticConfigBytes.toString('utf8'));
65
70
  const config=await readFile(result.config_path,'utf8');
66
71
  assert.match(config,new RegExp(`CoreRoot = '${release.replaceAll('\\','\\\\')}`));
72
+ assert.match(config,/SemanticLspConfigFile = '/);
73
+ assert.match(config,new RegExp(`SemanticLspConfigSha256 = '${sha(semanticConfigBytes)}'`));
67
74
  assert.doesNotMatch(config,/CoreRoot = ''/);
68
75
  assert.match(config,new RegExp(`WorkspaceRoot = '${workspace.replaceAll('\\','\\\\')}`));
69
76
  assert.match(config,/MachineRuntimeEnabled = \$true/);
@@ -74,6 +81,10 @@ test('R27 generation bundle rebinds authority and mutable state outside the rele
74
81
  assert.match(config,/ObservationRuntimeEnabled = \$true/);
75
82
  assert.match(config,/CodingPolicyFile = '/);
76
83
  assert.match(config,/AutonomousPolicyFile = '/);
84
+ assert.match(config,/AutonomousSupervisorEnabled = \$true/);
85
+ assert.match(config,/Supervisor = @\{/);
86
+ assert.match(config,/ScriptPath = 'C:\/release\/src\/autonomous-supervisor-host\.mjs'/);
87
+ assert.match(config,/ScriptSha256 = '2{64}'/);
77
88
  assert.match(config,/HostPolicyFile = '/);
78
89
  assert.match(config,/Transport = 'deadbyte\.named-tunnel\.v2'/);
79
90
  assert.match(config,/McpUrlFile = 'C:\/mcp-url\.txt'/);
@@ -107,10 +118,20 @@ test('R27 generation bundle rebinds authority and mutable state outside the rele
107
118
  const sixth=await createGenerationBundle({stateRoot:state,releaseRoot:release,developmentRoot:development,workspaceRoot:workspace,releaseId:'v0.8.3-aaaaaaaaaaaaaaaa',currentConfig:observationDisabled,codingPolicy:coding,autonomousPolicy:autonomous,hostPolicy:host,processPolicy});
108
119
  assert.notEqual(sixth.generation_root,result.generation_root);
109
120
  assert.notEqual(sixth.generation_seed_sha256,result.generation_seed_sha256);
121
+ const semanticConfig2Path=path.join(base,'semantic-lsp-v2.json');
122
+ const semanticConfig2Bytes=Buffer.from(JSON.stringify({schema:'deadbyte.semantic-lsp-config.v1',servers:[{id:'changed'}]})+'\n','utf8');
123
+ await writeFile(semanticConfig2Path,semanticConfig2Bytes);
124
+ const semanticChanged=structuredClone(currentConfig);
125
+ semanticChanged.SemanticLspConfigFile=semanticConfig2Path;
126
+ semanticChanged.SemanticLspConfigSha256=sha(semanticConfig2Bytes);
127
+ const seventh=await createGenerationBundle({stateRoot:state,releaseRoot:release,developmentRoot:development,workspaceRoot:workspace,releaseId:'v0.8.3-aaaaaaaaaaaaaaaa',currentConfig:semanticChanged,codingPolicy:coding,autonomousPolicy:autonomous,hostPolicy:host,processPolicy});
128
+ assert.notEqual(seventh.generation_root,result.generation_root);
129
+ assert.notEqual(seventh.generation_seed_sha256,result.generation_seed_sha256);
110
130
  await verifyGenerationBundle(result.generation_root,result.generation_manifest_sha256);
111
131
  await verifyGenerationBundle(second.generation_root,second.generation_manifest_sha256);
112
132
  await verifyGenerationBundle(third.generation_root,third.generation_manifest_sha256);
113
133
  await verifyGenerationBundle(fourth.generation_root,fourth.generation_manifest_sha256);
114
134
  await verifyGenerationBundle(fifth.generation_root,fifth.generation_manifest_sha256);
115
135
  await verifyGenerationBundle(sixth.generation_root,sixth.generation_manifest_sha256);
136
+ await verifyGenerationBundle(seventh.generation_root,seventh.generation_manifest_sha256);
116
137
  });
@@ -1,14 +1,14 @@
1
1
  import test from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
3
  import { readFile } from 'node:fs/promises';
4
- import { fileURLToPath } from 'node:url';
4
+ import { createHash } from 'node:crypto';
5
5
 
6
6
  const root = new URL('../', import.meta.url);
7
7
  const text = rel => readFile(new URL(rel, root), 'utf8');
8
8
 
9
- test('R33 patch successor release authority agrees on V0.8.10 / R33 identity', async () => {
9
+ test('R36 successor release authority agrees on V0.10.0 / R36 full+compact identity', async () => {
10
10
  const pkg = JSON.parse(await text('package.json'));
11
- const [version, controller, gate, readme, architecture, controllerReadme, deferred, parity, closure, closureVerify] = await Promise.all([
11
+ const [version, controller, gate, readme, architecture, controllerReadme, deferred, parity, closure, closureVerify, windowsGate, semanticConfig] = await Promise.all([
12
12
  text('src/version.mjs'),
13
13
  text('controller/deadbyte-controller.ps1'),
14
14
  text('scripts/gate-windows.ps1'),
@@ -16,20 +16,30 @@ test('R33 patch successor release authority agrees on V0.8.10 / R33 identity', a
16
16
  text('docs/ARCHITECTURE.md'),
17
17
  text('controller/README.TXT'),
18
18
  text('scripts/deferred-slot-operation.mjs'),
19
- text('src/remote-mcp-r33-parity-client.mjs'),
19
+ text('src/remote-mcp-r36-parity-client.mjs'),
20
20
  text('scripts/final-closure.mjs'),
21
- text('scripts/final-closure-verify.mjs')
21
+ text('scripts/final-closure-verify.mjs'),
22
+ text('scripts/windows-gate-evidence.mjs'),
23
+ text('controller/deadbyte-semantic-lsp-config.json')
22
24
  ]);
23
- assert.equal(pkg.version, '0.8.10');
24
- assert.match(version, /DEADBYTE_VERSION = '0\.8\.10'/);
25
- assert.match(controller, /CONTROLLER V0\.8\.10 \/ R33/);
26
- assert.match(gate, /DEADBYTE V0\.8\.10 \/ R33 WINDOWS BATCH GATE: PASS/);
27
- assert.match(readme, /^DEADBYTE MCP V0\.8\.10 \/ R33 FINAL MACHINE BASELINE$/m);
28
- assert.match(architecture, /^# DEADBYTE MCP V0\.8\.10 \/ R33 ARCHITECTURE$/m);
29
- assert.match(controllerReadme, /^DEADBYTE MCP V0\.8\.10 \/ R33 CONTROLLER$/m);
30
- assert.match(controllerReadme, /68-tool public catalog/);
31
- assert.match(deferred, /--expected-version','0\.8\.10'/);
32
- assert.match(parity, /version:'0\.8\.10'/);
33
- assert.match(closure, /version:'0\.8\.10'/);
34
- assert.match(closureVerify, /DEADBYTE V0\.8\.10 \/ R33 WINDOWS BATCH GATE: PASS/);
25
+ assert.equal(pkg.version, '0.10.0');
26
+ assert.match(version, /DEADBYTE_VERSION = '0\.10\.0'/);
27
+ assert.match(controller, /CONTROLLER V0\.10\.0 \/ R36/);
28
+ assert.match(gate, /DEADBYTE V0\.10\.0 \/ R36 WINDOWS BATCH GATE: PASS/);
29
+ assert.match(readme, /^DEADBYTE MCP V0\.10\.0 \/ R36 PRODUCTION BASELINE$/m);
30
+ assert.match(architecture, /^# DEADBYTE MCP V0\.10\.0 \/ R36 ARCHITECTURE$/m);
31
+ assert.match(controllerReadme, /^DEADBYTE MCP V0\.10\.0 \/ R36 CONTROLLER$/m);
32
+ assert.match(controllerReadme, /full 76-tool (?:profile|catalog)/);
33
+ assert.match(controllerReadme, /compact capability profile[^\n]*<=42 tools/);
34
+ assert.match(deferred, /--expected-version','0\.10\.0'/);
35
+ assert.match(parity, /version:'0\.10\.0'/);
36
+ assert.match(parity, /R36_EXPECTED_TOOLS\.length !== 76/);
37
+ assert.match(parity, /R36_COMPACT_TOOL_LIMIT=42/);
38
+ assert.match(closure, /version:'0\.10\.0'/);
39
+ assert.match(closureVerify, /DEADBYTE V0\.10\.0 \/ R36 WINDOWS BATCH GATE: PASS/);
40
+ assert.match(windowsGate, /schema:'deadbyte\.r36-windows-gate\.v1'/);
41
+ assert.equal(createHash('sha256').update(Buffer.from(semanticConfig,'utf8')).digest('hex'), 'd274b099a298c1033fea8f1e8849751693bbc0448778d619400acb82d4f53a3b');
42
+ assert.match(deferred, /--semantic-lsp-config/);
43
+ assert.match(deferred, /--semantic-lsp-config-sha256/);
44
+ assert.match(deferred, /deadbyte-semantic-lsp-config\.json/);
35
45
  });
@@ -0,0 +1,37 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { formatCompactAuditEvent } from '../src/remote-live-log.mjs';
4
+
5
+ test('compact live activity shows request context without payload or secret values',()=>{
6
+ const line=formatCompactAuditEvent({
7
+ event_type:'tool.request',
8
+ tool:'coding_file_read',
9
+ request_id:'abcdef1234567890',
10
+ args:{
11
+ root_id:'projects',
12
+ path:'src/deadbyte-cli.mjs',
13
+ content:'DO_NOT_PRINT_PAYLOAD',
14
+ token:'DO_NOT_PRINT_TOKEN'
15
+ }
16
+ });
17
+ assert.equal(line,'▶ RUN coding_file_read root=projects path=src/deadbyte-cli.mjs');
18
+ assert.doesNotMatch(line,/DO_NOT_PRINT_PAYLOAD|DO_NOT_PRINT_TOKEN|abcdef1234567890/);
19
+ });
20
+
21
+ test('compact live activity shows successful result duration',()=>{
22
+ assert.equal(formatCompactAuditEvent({
23
+ event_type:'tool.result',tool:'coding_search',request_id:'r1',
24
+ outcome:{is_error:false,duration_ms:42}
25
+ }),'✅ OK coding_search 42ms');
26
+ });
27
+
28
+ test('compact live activity shows failed result duration',()=>{
29
+ assert.equal(formatCompactAuditEvent({
30
+ event_type:'tool.result',tool:'coding_command_run',request_id:'r2',
31
+ outcome:{is_error:true,duration_ms:1734}
32
+ }),'❌ ERR coding_command_run 1.73s');
33
+ });
34
+
35
+ test('compact live activity ignores unrelated audit events',()=>{
36
+ assert.equal(formatCompactAuditEvent({event_type:'checkpoint',tool:'coding_tree'}),null);
37
+ });
@@ -0,0 +1,41 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { createLiveActivityTracker, formatRemoteLifecycle } from '../src/remote-live-log.mjs';
4
+
5
+ test('R36 lifecycle formatter exposes device/connect/ready/cleanup states with bounded semantic emoji',()=>{
6
+ assert.equal(formatRemoteLifecycle('device_start'),'🚀 [DEVICE] Starting DEADBYTE MCP...');
7
+ assert.equal(formatRemoteLifecycle('bridge_connected'),'🔌 [BRIDGE] Local bridge connected');
8
+ assert.equal(formatRemoteLifecycle('cloud_connected'),'🔌 [CLOUD] Remote MCP connected');
9
+ assert.equal(formatRemoteLifecycle('session_new'),'[SESSION] New foreground session');
10
+ assert.equal(formatRemoteLifecycle('session_restored'),'♻️ [SESSION] Previous result stream replayed');
11
+ assert.equal(formatRemoteLifecycle('ready'),'✅ [READY] DEADBYTE MCP online');
12
+ assert.equal(formatRemoteLifecycle('cleanup'),'🔐 [AUTH] Revoking session authority...');
13
+ assert.throws(()=>formatRemoteLifecycle('invented'),/unknown remote lifecycle/i);
14
+ });
15
+
16
+ test('R36 live activity tracker prints RUN before terminal result and reconciles interrupted requests',()=>{
17
+ const tracker=createLiveActivityTracker();
18
+ const run=tracker.observe({event_type:'tool.request',tool:'coding_search',request_id:'request-1',args:{root_id:'projects',path:'src',pattern:'needle',token:'DO_NOT_PRINT'}});
19
+ assert.equal(run,'▶ RUN coding_search root=projects path=src pattern=needle');
20
+ assert.deepEqual(tracker.pending(),[{request_id:'request-1',tool:'coding_search'}]);
21
+ const ok=tracker.observe({event_type:'tool.result',tool:'coding_search',request_id:'request-1',outcome:{is_error:false,duration_ms:84}});
22
+ assert.equal(ok,'✅ OK coding_search 84ms');
23
+ assert.deepEqual(tracker.pending(),[]);
24
+
25
+ tracker.observe({event_type:'tool.request',tool:'coding_command_run',request_id:'request-2',args:{command_id:'node_script',content:'DO_NOT_PRINT_PAYLOAD'}});
26
+ tracker.observe({event_type:'tool.request',tool:'coding_file_read',request_id:'request-3',args:{path:'src/a.mjs',private_key:'DO_NOT_PRINT_KEY'}});
27
+ const interrupted=tracker.reconcileInterrupted('session_end');
28
+ assert.deepEqual(interrupted,[
29
+ '⚠️ INTERRUPTED coding_command_run — session ended before result',
30
+ '⚠️ INTERRUPTED coding_file_read — session ended before result'
31
+ ]);
32
+ assert.deepEqual(tracker.pending(),[]);
33
+ assert.doesNotMatch(interrupted.join('\n'),/DO_NOT_PRINT|request-2|request-3/);
34
+ });
35
+
36
+ test('R36 live activity tracker tolerates terminal result whose request was before the tail baseline',()=>{
37
+ const tracker=createLiveActivityTracker();
38
+ const line=tracker.observe({event_type:'tool.result',tool:'coding_tree',request_id:'old-request',outcome:{is_error:false,duration_ms:15}});
39
+ assert.equal(line,'✅ OK coding_tree 15ms');
40
+ assert.deepEqual(tracker.pending(),[]);
41
+ });
@@ -66,10 +66,24 @@ test('R32 remote gate accepts observation only with machine plus coding configur
66
66
  assert.match(source, /observation_runtime: observationRuntime/);
67
67
  });
68
68
 
69
- test('R32 disarmed public gate requires the fully enabled 68-tool catalog', async () => {
69
+ test('R36 remote smoke accepts only the exact compact production catalog and uses read-only gateway proof', async () => {
70
+ const source = await readFile(sourcePath, 'utf8');
71
+ assert.match(source, /const r36CompactTools = \[/);
72
+ assert.match(source, /r36CompactTools\.length !== 41/);
73
+ assert.match(source, /const compactProfile = JSON\.stringify\(names\) === JSON\.stringify\(r36CompactTools\)/);
74
+ assert.match(source, /capability_manifest/);
75
+ assert.match(source, /machine_observe/);
76
+ assert.match(source, /op: 'machine_status'/);
77
+ assert.match(source, /op: 'machine_ping'/);
78
+ assert.match(source, /if \(compactProfile\) \{[\s\S]*?\} else \{[\s\S]*?workspace_open/);
79
+ assert.doesNotMatch(source, /r36CompactTools\.includes\(name\).*extras/s);
80
+ });
81
+
82
+ test('R34 disarmed public gate requires the exact canonical 73-tool catalog', async () => {
70
83
  const disarmedPath = fileURLToPath(new URL('../src/remote-mcp-r24-disarmed-smoke-client.mjs', import.meta.url));
71
84
  const source = await readFile(disarmedPath, 'utf8');
72
- assert.match(source, /listed\.tools\.length !== 68/);
73
- assert.match(source, /tool_count:68/);
74
- assert.doesNotMatch(source, /expected 61 tools/);
85
+ assert.match(source, /R34_EXPECTED_TOOLS/);
86
+ assert.match(source, /JSON\.stringify\(names\).*JSON\.stringify\(R34_EXPECTED_TOOLS\)/s);
87
+ assert.match(source, /tool_count:R34_EXPECTED_TOOLS\.length/);
88
+ assert.doesNotMatch(source, /listed\.tools\.length !== 68/);
75
89
  });
@@ -0,0 +1,58 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdtemp, readFile, rm } from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import { openRemoteResultJournal, parseRemoteResultCursor } from '../src/remote-result-journal.mjs';
7
+
8
+ const H=c=>c.repeat(64);
9
+ const session='a'.repeat(24);
10
+ const item=(requestId,payload,status='ok')=>({request_id:requestId,tool:'coding_tree',status,
11
+ observed_at_utc:'2026-09-17T00:00:00.000Z',payload_sha256:payload});
12
+
13
+ test('remote result journal is monotonic, restart-safe, and suppresses duplicate terminal results',async()=>{
14
+ const root=await mkdtemp(path.join(os.tmpdir(),'deadbyte-r35-remote-results-'));
15
+ const file=path.join(root,'journal.json');
16
+ try{
17
+ const first=await openRemoteResultJournal({filePath:file,sessionId:session,maxEntries:8});
18
+ const a=await first.recordTerminal(item('req-1',H('1')));
19
+ const duplicate=await first.recordTerminal(item('req-1',H('1')));
20
+ const b=await first.recordTerminal(item('req-2',H('2'),'error'));
21
+ assert.equal(a.event.seq,1);assert.equal(duplicate.duplicate,true);assert.equal(duplicate.event.seq,1);
22
+ assert.equal(b.event.seq,2);assert.equal(first.cursor(),'r1:'+session+':2');
23
+
24
+ const restarted=await openRemoteResultJournal({filePath:file,sessionId:session,maxEntries:8});
25
+ const c=await restarted.recordTerminal(item('req-3',H('3')));
26
+ assert.equal(c.event.seq,3);
27
+ const replay=await restarted.replayAfter('r1:'+session+':1',{limit:8});
28
+ assert.deepEqual(replay.events.map(event=>event.seq),[2,3]);
29
+ assert.equal(replay.next_cursor,'r1:'+session+':3');
30
+ }finally{await rm(root,{recursive:true,force:true});}
31
+ });
32
+
33
+ test('bounded retention rejects stale cursor and never stores raw payload bytes',async()=>{
34
+ const root=await mkdtemp(path.join(os.tmpdir(),'deadbyte-r35-remote-retention-'));
35
+ const file=path.join(root,'journal.json');
36
+ try{
37
+ const journal=await openRemoteResultJournal({filePath:file,sessionId:session,maxEntries:2});
38
+ await journal.recordTerminal(item('req-1',H('1')));
39
+ await journal.recordTerminal(item('req-2',H('2')));
40
+ await journal.recordTerminal(item('req-3',H('3')));
41
+ await assert.rejects(journal.replayAfter('r1:'+session+':0',{limit:8}),/cursor_outside_retention/);
42
+ const text=await readFile(file,'utf8');
43
+ assert.doesNotMatch(text,/stdout|stderr|payload\s*:/i);
44
+ const stored=JSON.parse(text);
45
+ assert.deepEqual(stored.events.map(event=>event.seq),[2,3]);
46
+ assert.equal(stored.next_seq,4);
47
+ }finally{await rm(root,{recursive:true,force:true});}
48
+ });
49
+
50
+ test('cursor parser rejects foreign sessions and malformed cursors',async()=>{
51
+ assert.deepEqual(parseRemoteResultCursor('r1:'+session+':42'),{session_id:session,seq:42});
52
+ assert.throws(()=>parseRemoteResultCursor('bad'),/cursor/i);
53
+ const root=await mkdtemp(path.join(os.tmpdir(),'deadbyte-r35-remote-cursor-'));
54
+ try{
55
+ const journal=await openRemoteResultJournal({filePath:path.join(root,'j.json'),sessionId:session,maxEntries:8});
56
+ await assert.rejects(journal.replayAfter('r1:'+'b'.repeat(24)+':0',{limit:8}),/cursor session mismatch/);
57
+ }finally{await rm(root,{recursive:true,force:true});}
58
+ });