deadbyte-mcp 0.15.43 → 0.15.45

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 (247) hide show
  1. package/MANIFEST.SHA256 +160 -161
  2. package/PROVENANCE.json +257 -232
  3. package/README.txt +18 -18
  4. package/RELEASE.json +348 -320
  5. package/SBOM.cdx.json +14 -2
  6. package/TEST-MATRIX.json +503 -460
  7. package/bin/deadbyte-native-inspect-r67.exe +0 -0
  8. package/bridge/package.json +1 -1
  9. package/controller/deadbyte-controller.ps1 +1857 -1769
  10. package/controller/deadbyte-desktop-policy.json +6 -6
  11. package/controller/deadbyte-process-policy.json +4 -4
  12. package/docs/R67-ALPHA-REFERENCE-DIFFERENTIAL.md +42 -0
  13. package/docs/R67-ALPHA-STATIC-COMPARISON.json +205 -0
  14. package/docs/R67-CANDIDATE-PARENT.json +10 -0
  15. package/docs/R67-EVIDENCE-RECONCILE-CLOSEOUT-20261011.md +64 -0
  16. package/docs/R67-FULL-REGRESSION-UNKNOWN.json +27 -0
  17. package/docs/R67-NATIVE-INSPECT-BINARY.json +11 -0
  18. package/docs/R67-NPM-EXDEV-PRESERVATION-20261011.md +39 -0
  19. package/docs/R67-OBSERVATION-TRUTH.md +82 -0
  20. package/docs/R67-REFERENCE-GAP-MATRIX.json +57 -0
  21. package/docs/R67-REGRESSION-CLOSURE-20261011.md +24 -0
  22. package/docs/R68-COMPAT-HOST-EXEC-CANDIDATE.md +63 -0
  23. package/docs/R69-LIVE-OUTCOME-R70-POLICY-TRANSFER.md +136 -0
  24. package/docs/R70-CODING-DIGEST-SUPERVISOR-CHECKPOINT-20261013.md +42 -0
  25. package/docs/R70-FINITE-GRANT-OWNER-BOUNDARY-20261013.md +80 -0
  26. package/docs/R70-OWNER-BOOTSTRAP-CHECKPOINT-20261013.md +60 -0
  27. package/docs/R70-REFERENCE-MECHANISMS.json +95 -0
  28. package/docs/R70-TRUST-GUARD-EXPIRY-CHECKPOINT-20261013.md +47 -0
  29. package/native/deadbyte-native-inspect-r67.cpp +252 -0
  30. package/package.json +6 -3
  31. package/scripts/benchmark-l0-r71.mjs +76 -0
  32. package/scripts/build-native-inspector-r67.ps1 +28 -0
  33. package/scripts/gate-windows-r67.ps1 +56 -0
  34. package/scripts/gate-windows-r71.ps1 +64 -0
  35. package/scripts/npm-preserve-artifact-r67.mjs +99 -0
  36. package/scripts/npm-release-r48.mjs +12 -2
  37. package/scripts/npm-release-readiness-r67.mjs +26 -0
  38. package/scripts/npm-release-readiness-r71.mjs +21 -0
  39. package/scripts/r67-acquire-alpha-reference.mjs +95 -0
  40. package/scripts/r67-audit-nonpass-source.mjs +39 -0
  41. package/scripts/r67-compare-desktop-alpha.mjs +48 -0
  42. package/scripts/r67-diagnose-failed-shard.mjs +23 -0
  43. package/scripts/r67-durable-batch.mjs +42 -0
  44. package/scripts/r67-focused-gate.mjs +58 -0
  45. package/scripts/r67-full-regression.mjs +28 -0
  46. package/scripts/r67-independent-observation-verify.mjs +36 -0
  47. package/scripts/r67-independent-runtime-observation-verify.mjs +63 -0
  48. package/scripts/r67-nonpass-adjudicate.mjs +20 -0
  49. package/scripts/r67-publish-boundary-audit.mjs +32 -0
  50. package/scripts/r67-regression-reconcile.mjs +10 -0
  51. package/scripts/r67-regression-shard-run.mjs +70 -0
  52. package/scripts/r67-run-shard-batch.mjs +18 -0
  53. package/scripts/r67-stage-candidate.mjs +30 -0
  54. package/scripts/r67-verify-parent-ping.mjs +22 -0
  55. package/scripts/release-manifest.mjs +1 -0
  56. package/scripts/verify-r70-full-regression.ps1 +72 -0
  57. package/src/activation-continuity-engine-r65.mjs +2 -1
  58. package/src/authority-continuity-r65.mjs +28 -8
  59. package/src/autonomous-mcp-tools.mjs +1 -1
  60. package/src/autonomous-output-contracts.mjs +4 -1
  61. package/src/autonomous-policy.mjs +54 -7
  62. package/src/autonomous-runtime.mjs +1 -1
  63. package/src/capability-ledger.mjs +1 -1
  64. package/src/capability-resolver.mjs +2 -1
  65. package/src/commander-compat-runtime.mjs +30 -2
  66. package/src/deadbyte-cli.mjs +41 -7
  67. package/src/machine-fs-smoke-client.mjs +13 -5
  68. package/src/machine-identity.mjs +59 -2
  69. package/src/machine-mcp-tools.mjs +8 -0
  70. package/src/mcp-server.mjs +11 -2
  71. package/src/native-diff-v2.mjs +18 -5
  72. package/src/native-diff.mjs +21 -5
  73. package/src/native-inspector-r67.mjs +66 -0
  74. package/src/r67-diagnostic-export.mjs +118 -0
  75. package/src/r67-diagnostics-verify.mjs +82 -0
  76. package/src/r67-evidence-reconcile.mjs +128 -0
  77. package/src/r67-native-observation-authority.mjs +45 -0
  78. package/src/r67-observation-receipt.mjs +43 -0
  79. package/src/r67-regression-shards.mjs +176 -0
  80. package/src/r70-owner-approval.mjs +78 -0
  81. package/src/remote-live-log.mjs +62 -24
  82. package/src/remote-result-journal.mjs +1 -1
  83. package/src/runtime-update.mjs +2051 -1891
  84. package/src/tool-audit.mjs +3 -1
  85. package/src/version.mjs +1 -1
  86. package/test/agent-runtime.test.mjs +1 -1
  87. package/test/autonomous-local-supervisor.test.mjs +2 -1
  88. package/test/autonomous-loop.test.mjs +11 -6
  89. package/test/autonomous-output-contract.test.mjs +17 -1
  90. package/test/autonomous-runtime.test.mjs +1 -1
  91. package/test/autonomous-supervisor-integration.test.mjs +2 -1
  92. package/test/capability-resolver.test.mjs +17 -0
  93. package/test/codex-autonomous-r44.test.mjs +1 -1
  94. package/test/coding-plane.test.mjs +1 -1
  95. package/test/commander-compat-runtime.test.mjs +42 -0
  96. package/test/controller-policy-preflight-r59.test.mjs +1 -0
  97. package/test/full-max-catalog-r46.test.mjs +1 -1
  98. package/test/native-diff-topology-r36.test.mjs +35 -2
  99. package/test/native-diff.test.mjs +83 -3
  100. package/test/output-schema.test.mjs +1 -1
  101. package/test/r51-live-log-polling.test.mjs +12 -0
  102. package/test/r53-release-contract.test.mjs +1 -1
  103. package/test/r54-release-contract.test.mjs +1 -1
  104. package/test/r55-release-contract.test.mjs +1 -1
  105. package/test/r56-release-contract.test.mjs +1 -1
  106. package/test/r57-release-contract.test.mjs +1 -1
  107. package/test/r58-bundled-bridge.test.mjs +1 -1
  108. package/test/r58-release-contract.test.mjs +2 -2
  109. package/test/r58-windows-gate.test.mjs +1 -1
  110. package/test/r59-tool-surface-compat.test.mjs +9 -5
  111. package/test/r60-release-contract.test.mjs +3 -3
  112. package/test/r61-release-contract.test.mjs +1 -1
  113. package/test/r62-release-contract.test.mjs +1 -1
  114. package/test/r63-release-contract.test.mjs +1 -1
  115. package/test/r64-release-contract.test.mjs +1 -1
  116. package/test/r65-authority-runtime-epoch.test.mjs +9 -1
  117. package/test/r65-epoch-native-activation-integration.test.mjs +4 -4
  118. package/test/r65-release-contract.test.mjs +1 -1
  119. package/test/r66-release-contract.test.mjs +2 -1
  120. package/test/r67-cli-integration.test.mjs +41 -0
  121. package/test/r67-diagnostics-cli.test.mjs +60 -0
  122. package/test/r67-diagnostics-verify.test.mjs +49 -0
  123. package/test/r67-diagnostics-zip-oracle.test.mjs +38 -0
  124. package/test/r67-diagnostics.test.mjs +60 -0
  125. package/test/r67-evidence-reconcile.test.mjs +186 -0
  126. package/test/r67-isolated-slot-rollback-restore.test.mjs +63 -0
  127. package/test/r67-live-log-secret-canary.test.mjs +44 -0
  128. package/test/r67-machine-fs-smoke-epoch.test.mjs +22 -0
  129. package/test/r67-native-inspector.test.mjs +131 -0
  130. package/test/r67-native-observation-authority.test.mjs +49 -0
  131. package/test/r67-npm-cross-volume.test.mjs +74 -0
  132. package/test/r67-npm-publish-gate.test.mjs +40 -0
  133. package/test/r67-regression-shards.test.mjs +184 -0
  134. package/test/r67-release-contract.test.mjs +45 -0
  135. package/test/r67-runtime-observation-binding.test.mjs +86 -0
  136. package/test/r67-server-observation-wiring.test.mjs +12 -0
  137. package/test/r67-signed-receipt.test.mjs +66 -0
  138. package/test/r67-skip-rationale.test.mjs +31 -0
  139. package/test/r67-tool-annotations.test.mjs +21 -0
  140. package/test/r67-windows-gate-argv.test.mjs +13 -0
  141. package/test/r69-live-outcome.test.mjs +137 -0
  142. package/test/r70-autonomous-grant-expiry.test.mjs +89 -0
  143. package/test/r70-autonomous-policy-bootstrap.test.mjs +166 -0
  144. package/test/r70-controller-autonomous-root.test.mjs +104 -0
  145. package/test/r70-controller-grant-subset.test.mjs +28 -0
  146. package/test/r70-controller-owner-issue-boundary.test.mjs +80 -0
  147. package/test/r70-controller-policy-snapshot.test.mjs +66 -0
  148. package/test/r70-owner-approval.test.mjs +67 -0
  149. package/test/r71-full-verifier-artifact.test.mjs +28 -0
  150. package/test/r71-isolated-slot-rollback-restore.test.mjs +62 -0
  151. package/test/r71-native-diff-mcp-wire.test.mjs +75 -0
  152. package/test/r71-publish-fence.test.mjs +38 -0
  153. package/test/r71-release-identity.test.mjs +31 -0
  154. package/test/release-version.test.mjs +1 -1
  155. package/test/remote-live-log-r36.test.mjs +10 -0
  156. package/test/remote-live-log-r37.test.mjs +29 -0
  157. package/test/remote-result-journal.test.mjs +12 -0
  158. package/test/remote-session-cli.test.mjs +2 -1
  159. package/test/semantic-multilang.test.mjs +1 -1
  160. package/test/standing-grants.test.mjs +2 -2
  161. package/test/tool-audit.test.mjs +14 -0
  162. package/bin/appcontainer-stage.obj +0 -0
  163. package/bin/bootstrap-advapi32.obj +0 -0
  164. package/bin/bootstrap-exitcode.obj +0 -0
  165. package/bin/bootstrap-kernel32.obj +0 -0
  166. package/bin/child-control-probe.obj +0 -0
  167. package/bin/child-control-stage.obj +0 -0
  168. package/bin/contained-reverse-worker.obj +0 -0
  169. package/bin/contained-transform-worker.obj +0 -0
  170. package/bin/containment-probe.obj +0 -0
  171. package/bin/deadbyte-contain.obj +0 -0
  172. package/bin/deadbyte-desktop-input-r40.obj +0 -0
  173. package/bin/deadbyte-desktop-observer-r40.obj +0 -0
  174. package/bin/deadbyte-desktop-uia-r40.obj +0 -0
  175. package/bin/deadbyte-exec.obj +0 -0
  176. package/bin/deadbyte-hardware-observer-r45.obj +0 -0
  177. package/bin/deadbyte-process-host.obj +0 -0
  178. package/bin/deadbyte-tunnel-host.obj +0 -0
  179. package/conpty-input-observer.obj +0 -0
  180. package/miniconpty.obj +0 -0
  181. package/proof/CONTAINMENT-BUILD.txt +0 -163
  182. package/proof/MCP-SMOKE-STATUS.txt +0 -9
  183. package/proof/NODE-SYNTAX.txt +0 -4
  184. package/proof/PROOF.txt +0 -6
  185. package/proof/R34-TASK8-SUPERVISOR-CHECKPOINT.json +0 -29
  186. package/proof/R34-TASK9-MCP-SURFACE-CHECKPOINT.json +0 -28
  187. package/proof/SECRET-SCAN.txt +0 -4
  188. package/proof/SOURCE-GATES.txt +0 -16
  189. package/proof/STATUS.txt +0 -11
  190. package/proof/TARGET-V0313-CONTAINMENT-PASS.sha256 +0 -1
  191. package/proof/TARGET-V0313-CONTAINMENT-PASS.txt +0 -215
  192. package/proof/TARGET-V040-CONTAINED-IPC-FAIL.sha256 +0 -1
  193. package/proof/TARGET-V040-CONTAINED-IPC-FAIL.txt +0 -299
  194. package/proof/TARGET-V041-CONTAINED-CREATEPROCESS-203.sha256 +0 -1
  195. package/proof/TARGET-V041-CONTAINED-CREATEPROCESS-203.txt +0 -311
  196. package/proof/TARGET-V042-CONTAINED-CREATEPROCESS-203.sha256 +0 -1
  197. package/proof/TARGET-V042-CONTAINED-CREATEPROCESS-203.txt +0 -313
  198. package/proof/TARGET-V043-CONTAINED-CREATEPROCESS-203.sha256 +0 -1
  199. package/proof/TARGET-V043-CONTAINED-CREATEPROCESS-203.txt +0 -308
  200. package/proof/TARGET-V044-CONTAINED-PASS.sha256 +0 -1
  201. package/proof/TARGET-V044-CONTAINED-PASS.txt +0 -432
  202. package/proof/TARGET-V045-DUAL-OPERATION-PASS.sha256 +0 -1
  203. package/proof/TARGET-V045-DUAL-OPERATION-PASS.txt +0 -481
  204. package/proof/TARGET-V046-FIXED-EXECUTABLE-REGISTRY-PASS.sha256 +0 -1
  205. package/proof/TARGET-V046-FIXED-EXECUTABLE-REGISTRY-PASS.txt +0 -610
  206. package/proof/TARGET-V047-RUNTIME-MANIFEST-PASS.sha256 +0 -1
  207. package/proof/TARGET-V047-RUNTIME-MANIFEST-PASS.txt +0 -642
  208. package/proof/TARGET-V050-BATCH-GATE-PASS.sha256 +0 -1
  209. package/proof/TARGET-V050-BATCH-GATE-PASS.txt +0 -713
  210. package/proof/TESTS.txt +0 -686
  211. package/proof/TRUST-EPHEMERAL.txt +0 -4
  212. package/proof/V03-FREEZE.txt +0 -27
  213. package/proof/V041-IPC-HOTFIX.txt +0 -16
  214. package/proof/V042-ENV-HOTFIX.txt +0 -15
  215. package/proof/V043-DRIVE-CWD-HOTFIX.txt +0 -14
  216. package/proof/V044-LOCALAPPDATA-HOTFIX.txt +0 -18
  217. package/proof/V045-OPERATION-REGISTRY.txt +0 -7
  218. package/proof/V046-WORKER-REGISTRY.txt +0 -12
  219. package/proof/V047-WORKER-MANIFEST.txt +0 -18
  220. package/proof/V050-BATCH-TRUST-CLOSURE.txt +0 -21
  221. package/proof/V060-ACTIVE-NETWORK-AUTHORITY.txt +0 -29
  222. package/proof/V070-NODE-SYNTAX.txt +0 -36
  223. package/proof/V070-NODE-TESTS.txt +0 -752
  224. package/proof/V070-PACK-DRY-RUN.txt +0 -126
  225. package/proof/V070-SOURCE-GATE.txt +0 -30
  226. package/proof/V070-STATIC-SCAN.txt +0 -4
  227. package/proof/V070-WINDOWS-GATE-PENDING.txt +0 -25
  228. package/proof/V071-NODE-SYNTAX.txt +0 -1
  229. package/proof/V071-NODE-TESTS.txt +0 -796
  230. package/proof/V071-PACK-DRY-RUN.json +0 -656
  231. package/proof/V071-SOURCE-GATE.txt +0 -16
  232. package/proof/V071-WINDOWS-GATE-PENDING.txt +0 -24
  233. package/proof/V073-NODE-SYNTAX.txt +0 -4
  234. package/proof/V073-SOURCE-GATE.txt +0 -21
  235. package/proof/V073-STATIC-SCAN.txt +0 -10
  236. package/proof/V073-WINDOWS-GATE-PENDING.txt +0 -5
  237. package/proof/VERIFY.txt +0 -7
  238. package/proof/WINDOWS-CONTAINED-STATUS.txt +0 -5
  239. package/proof/WINDOWS-CONTAINMENT-STATUS.txt +0 -3
  240. package/proof/commander-closure-20260927/CONTINUATION.json +0 -43
  241. package/proof/commander-closure-20260927/RESULT.json +0 -30
  242. package/proof/commander-closure-20260927/SEARCH-CONTINUATION.json +0 -30
  243. package/proof/commander-closure-20260927/XLS-REFERENCE-PROBE.json +0 -13
  244. package/proof/commander-closure-20260928/DIFFERENTIAL-CHECKPOINT.json +0 -122
  245. package/proof/r59-full-regression-current.json +0 -13
  246. package/proof/r59-full-regression-current.stderr.log +0 -0
  247. package/proof/r59-full-regression-current.stdout.log +0 -1268
@@ -13,7 +13,7 @@ const PARENT=Object.freeze({
13
13
  generation_manifest_sha256:'6134f9f26b680e13ed545da4ab5f3020f411ea2569062fb9c154c8a7e036c9dc'
14
14
  });
15
15
 
16
- test('R60 identity is coherent and binds the exact production-accepted 0.15.36 predecessor',{skip:currentPackage.version!=='0.15.37'},async()=>{
16
+ test('R60 identity is coherent and binds the exact production-accepted 0.15.36 predecessor',{skip:currentPackage.version!=='0.15.37' ? 'Historical R60 release contract requires 0.15.37; current '+currentPackage.version : false},async()=>{
17
17
  const [pkg,lock,release,prov,matrix,sbom,version,bridgePkg,contract]=await Promise.all([
18
18
  json('package.json'),json('package-lock.json'),json('RELEASE.json'),json('PROVENANCE.json'),
19
19
  json('TEST-MATRIX.json'),json('SBOM.cdx.json'),read('src/version.mjs'),json('bridge/package.json'),
@@ -47,7 +47,7 @@ test('R60 identity is coherent and binds the exact production-accepted 0.15.36 p
47
47
  assert.match(contract,/0\.15\.37/);
48
48
  });
49
49
 
50
- test('R60 release contract exposes the proven remote truth semantics without widening dependencies',{skip:currentPackage.version!=='0.15.37'},async()=>{
50
+ test('R60 release contract exposes the proven remote truth semantics without widening dependencies',{skip:currentPackage.version!=='0.15.37' ? 'Historical R60 release contract requires 0.15.37; current '+currentPackage.version : false},async()=>{
51
51
  const [pkg,release,matrix]=await Promise.all([json('package.json'),json('RELEASE.json'),json('TEST-MATRIX.json')]);
52
52
  assert.equal(Object.keys(pkg.dependencies??{}).length,4);
53
53
  assert.equal(release.r60_remote_hardening.authority_truth_coherence,true);
@@ -70,7 +70,7 @@ test('R60 release contract exposes the proven remote truth semantics without wid
70
70
  assert.equal(matrix.observed_pre_release_evidence.r60_package.status,'PASS_VERIFY_ONLY_PRE_FINAL_SEAL');
71
71
  });
72
72
 
73
- test('R60 package scripts bind the new focused, full-regression and Windows-gate entrypoints',{skip:currentPackage.version!=='0.15.37'},async()=>{
73
+ test('R60 package scripts bind the new focused, full-regression and Windows-gate entrypoints',{skip:currentPackage.version!=='0.15.37' ? 'Historical R60 release contract requires 0.15.37; current '+currentPackage.version : false},async()=>{
74
74
  const [pkg,gate]=await Promise.all([json('package.json'),read('scripts/gate-windows-r60-prepublish.ps1')]);
75
75
  assert.match(pkg.scripts['r60:focused:test'],/r60-authority-coherence\.test\.mjs/);
76
76
  assert.match(pkg.scripts['r60:focused:test'],/r60-remote-call-recovery\.test\.mjs/);
@@ -11,7 +11,7 @@ const PARENT={
11
11
  generation_manifest_sha256:'54842021c75f01bf7ecbd5b10ab8a482ecf107765b45c46f9d39b12bab65eac4'
12
12
  };
13
13
 
14
- test('R61 identity binds exact sealed 0.15.37 predecessor without a public surface expansion',{skip:currentPackage.version!=='0.15.38'},async()=>{
14
+ test('R61 identity binds exact sealed 0.15.37 predecessor without a public surface expansion',{skip:currentPackage.version!=='0.15.38' ? 'Historical R61 release contract requires 0.15.38; current '+currentPackage.version : false},async()=>{
15
15
  const [pkg,lock,bridge,release,provenance,matrix,sbom,version,gate]=await Promise.all([
16
16
  json('package.json'),json('package-lock.json'),json('bridge/package.json'),json('RELEASE.json'),
17
17
  json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json'),read('src/version.mjs'),
@@ -12,7 +12,7 @@ const PARENT={
12
12
  generation_manifest_sha256:'9d320a8af1ba8e9e6a23552f35263da2670c00af1355464820552d849d9033c6'
13
13
  };
14
14
 
15
- test('R62 identity binds exact sealed 0.15.38 parent and transaction reconciliation scope',{skip:currentPackage.version!=='0.15.39'},async()=>{
15
+ test('R62 identity binds exact sealed 0.15.38 parent and transaction reconciliation scope',{skip:currentPackage.version!=='0.15.39' ? 'Historical R62 release contract requires 0.15.39; current '+currentPackage.version : false},async()=>{
16
16
  const [pkg,lock,bridge,release,provenance,matrix,sbom,version,gate]=await Promise.all([
17
17
  json('package.json'),json('package-lock.json'),json('bridge/package.json'),json('RELEASE.json'),
18
18
  json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json'),read('src/version.mjs'),
@@ -12,7 +12,7 @@ const PARENT={
12
12
  generation_manifest_sha256:'f47cb96083679e764725df1bde6eda53169a39f55772c173ab22f89a1dfaa7ab'
13
13
  };
14
14
 
15
- test('R63 identity binds exact active 0.15.39 parent and one-shot runtime coherence repair',{skip:currentPackage.version!=='0.15.40'},async()=>{
15
+ test('R63 identity binds exact active 0.15.39 parent and one-shot runtime coherence repair',{skip:currentPackage.version!=='0.15.40' ? 'Historical R63 release contract requires 0.15.40; current '+currentPackage.version : false},async()=>{
16
16
  const pkg=await json('package.json');
17
17
  assert.equal(pkg.version,'0.15.40');
18
18
  assert.match(pkg.scripts['r63:focused:test'],/r63-one-shot-coherence\.test\.mjs/);
@@ -12,7 +12,7 @@ const runtime={
12
12
  generation_manifest_sha256:'f47cb96083679e764725df1bde6eda53169a39f55772c173ab22f89a1dfaa7ab'
13
13
  };
14
14
 
15
- test('R64 release identity distinguishes unsealed source predecessor from active runtime predecessor',{skip:currentPackage.version!=='0.15.41'},async()=>{
15
+ test('R64 release identity distinguishes unsealed source predecessor from active runtime predecessor',{skip:currentPackage.version!=='0.15.41' ? 'Historical R64 release contract requires 0.15.41; current '+currentPackage.version : false},async()=>{
16
16
  const [pkg,lock,bridge,release,provenance,matrix,sbom,scope,gaps,version,gate]=await Promise.all([
17
17
  json('package.json'),json('package-lock.json'),json('bridge/package.json'),json('RELEASE.json'),
18
18
  json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json'),json('docs/R64-SCOPE.json'),
@@ -1,7 +1,7 @@
1
1
  import test from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
3
  import {mkdtemp,mkdir,rm,writeFile,readFile} from 'node:fs/promises';
4
- import {createHash} from 'node:crypto';
4
+ import {createHash,generateKeyPairSync} from 'node:crypto';
5
5
  import os from 'node:os';
6
6
  import path from 'node:path';
7
7
  import {loadCodingPolicy,codingSessionStatus} from '../src/coding-plane.mjs';
@@ -37,6 +37,14 @@ test('R65 standing Coding grant is disarmed until the durable epoch binds the ex
37
37
  assert.equal(trusted.armed,true);
38
38
  assert.equal(trusted.reason,'standing-grant');
39
39
  assert.equal(trusted.instance_nonce,grant.instance_nonce);
40
+ const publicPath=path.join(root,'trust','ed25519-public.pem');
41
+ const originalPublic=await readFile(publicPath);
42
+ const rotated=generateKeyPairSync('ed25519').publicKey.export({format:'pem',type:'spki'});
43
+ await writeFile(publicPath,rotated);
44
+ const denied=await codingSessionStatus(policy);
45
+ assert.equal(denied.armed,false,'changed trust bytes must not reuse the cached parsed key');
46
+ await writeFile(publicPath,originalPublic);
47
+ assert.equal((await codingSessionStatus(policy)).armed,true);
40
48
  }finally{
41
49
  await rm(root,{recursive:true,force:true});
42
50
  }
@@ -16,7 +16,7 @@ const dummy={coding:'2'.repeat(64),autonomous:'3'.repeat(64),desktop:'4'.repeat(
16
16
 
17
17
  async function optional(file){try{return await readFile(file);}catch(error){if(error?.code==='ENOENT')return null;throw error;}}
18
18
 
19
- test('epoch-native orchestrator uses transaction continuity engine instead of generic authority commands',async()=>{
19
+ test('epoch-native orchestrator handles BOM-encoded process grant with transaction continuity engine',async()=>{
20
20
  const root=await mkdtemp(path.join(os.tmpdir(),'deadbyte-r65-epoch-activation-'));
21
21
  try{
22
22
  const state=path.join(root,'state'),runtime=path.join(state,'runtime'),trust=path.join(state,'trust'),policies=path.join(root,'policies');
@@ -33,7 +33,7 @@ test('epoch-native orchestrator uses transaction continuity engine instead of ge
33
33
  await writeFile(beforePath,policyBytes);await writeFile(afterPath,policyBytes);
34
34
  const oldGrant={schema:'deadbyte.process-grant.v1',policy_sha256:sha(policyBytes),instance_nonce:'8'.repeat(64),
35
35
  profile_ids:['safe'],root_ids:['core'],granted_at_utc:'2026-10-07T00:00:00Z'};
36
- const oldBytes=Buffer.from(JSON.stringify(oldGrant));await writeFile(grantFile,oldBytes);
36
+ const oldBytes=Buffer.concat([Buffer.from([0xef,0xbb,0xbf]),Buffer.from(JSON.stringify(oldGrant))]);await writeFile(grantFile,oldBytes);
37
37
  const store=createAuthorityEpochStore({runtimeDir:runtime,policyBytes});
38
38
  await store.append({plane:'process',action:'grant',grantBytes:oldBytes,grantInstanceNonce:oldGrant.instance_nonce});
39
39
  let switched=false;
@@ -41,7 +41,7 @@ test('epoch-native orchestrator uses transaction continuity engine instead of ge
41
41
  const bytes=await optional(grantFile),head=await store.readHead({plane:'process'});
42
42
  let armed=false;
43
43
  if(bytes){
44
- const grant=JSON.parse(bytes);
44
+ const grant=JSON.parse(new TextDecoder('utf-8',{fatal:true}).decode(bytes));
45
45
  armed=(await store.verifyGrant({plane:'process',grantBytes:bytes,grantInstanceNonce:grant.instance_nonce,policyBytes})).trusted;
46
46
  }
47
47
  return {state:'ONLINE',local_ready:true,...ids,supervisor:{running:true},authority:{
@@ -104,7 +104,7 @@ test('epoch-native explicit user revoke after transaction revoke wins over orche
104
104
  const bytes=await optional(grantFile),head=await store.readHead({plane:'process'});
105
105
  let armed=false;
106
106
  if(bytes){
107
- const grant=JSON.parse(bytes);
107
+ const grant=JSON.parse(new TextDecoder('utf-8',{fatal:true}).decode(bytes));
108
108
  armed=(await store.verifyGrant({plane:'process',grantBytes:bytes,grantInstanceNonce:grant.instance_nonce,policyBytes})).trusted;
109
109
  }
110
110
  return {state:'ONLINE',local_ready:true,...ids,supervisor:{running:true},authority:{
@@ -12,7 +12,7 @@ const PARENT={
12
12
  generation_manifest_sha256:'19ae2efcdcde9f80c474f0e55851d4ada51c22813d3e05af03b11acb28c3fca5'
13
13
  };
14
14
 
15
- test('R65 release identity binds exact production R64 parent and durable authority-continuity train',{skip:currentPackage.version!=='0.15.42'},async()=>{
15
+ test('R65 release identity binds exact production R64 parent and durable authority-continuity train',{skip:currentPackage.version!=='0.15.42' ? 'Historical R65 release contract requires 0.15.42; current '+currentPackage.version : false},async()=>{
16
16
  const [pkg,lock,bridge,release,provenance,matrix,sbom,version,gate,gaps,design]=await Promise.all([
17
17
  json('package.json'),json('package-lock.json'),json('bridge/package.json'),json('RELEASE.json'),
18
18
  json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json'),read('src/version.mjs'),
@@ -4,6 +4,7 @@ import {readFile} from 'node:fs/promises';
4
4
 
5
5
  const read=rel=>readFile(new URL('../'+rel,import.meta.url),'utf8');
6
6
  const json=async rel=>JSON.parse((await read(rel)).replace(/^\uFEFF/,''));
7
+ const currentPackage=await json('package.json');
7
8
  const PARENT={
8
9
  version:'0.15.42',
9
10
  release_id:'v0.15.42-1b4754103dd4ca43',
@@ -11,7 +12,7 @@ const PARENT={
11
12
  generation_manifest_sha256:'62dc68be55ad627f8d872b8be8c1369ecca0edf08fdedc8336c9ccee2d2809fb'
12
13
  };
13
14
 
14
- test('R66 identity is an exact prepublish doctor hotfix of sealed R65',async()=>{
15
+ test('R66 identity is an exact prepublish doctor hotfix of sealed R65',{skip:currentPackage.version!=='0.15.43' ? 'Historical R66 release contract requires 0.15.43; current '+currentPackage.version : false},async()=>{
15
16
  const [pkg,lock,bridge,release,provenance,matrix,sbom,version,gate]=await Promise.all([
16
17
  json('package.json'),json('package-lock.json'),json('bridge/package.json'),json('RELEASE.json'),
17
18
  json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json'),read('src/version.mjs'),
@@ -0,0 +1,41 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {spawnSync} from 'node:child_process';
4
+ import {fileURLToPath} from 'node:url';
5
+ import path from 'node:path';
6
+ import {nativeInspectArgs} from '../src/native-inspector-r67.mjs';
7
+ const root=path.dirname(path.dirname(fileURLToPath(import.meta.url)));
8
+ const cli=path.join(root,'src','deadbyte-cli.mjs');
9
+ const exe=path.join(root,'bin','deadbyte-native-inspect-r67.exe');
10
+ function invoke(...args){
11
+ const r=spawnSync(process.execPath,[cli,'inspect',...args],{cwd:root,shell:false,windowsHide:true,encoding:'utf8',timeout:30000,maxBuffer:2097152});
12
+ assert.equal(r.error,undefined,r.error?.message);return {r,value:JSON.parse(r.stdout.trim())};
13
+ }
14
+ test('R67 CLI inspect exposes native process snapshot without MCP tool additions',()=>{
15
+ const {r,value}=invoke('process','4');
16
+ assert.equal(r.status,0,r.stderr);assert.equal(value.status,'ok');assert.equal(value.operation,'process');assert.ok(value.data.processes.length<=4);
17
+ });
18
+ test('R67 CLI inspect memory self is metadata-only and PE uses actual bytes',()=>{
19
+ const m=invoke('memory','self','4');
20
+ assert.equal(m.r.status,0,m.r.stderr);assert.equal(m.value.status,'ok');assert.ok(m.value.data.regions.length<=4);
21
+ const p=invoke('pe',exe);
22
+ assert.equal(p.r.status,0,p.r.stderr);assert.equal(p.value.status,'ok');assert.match(p.value.data.file_sha256,/^[a-f0-9]{64}$/);
23
+ });
24
+ test('R67 CLI typed input rejects invalid selectors before spawning native process',()=>{
25
+ for(const selector of [['process','0'],['process','999999'],['memory','0'],['memory','self','9999'],['memory','4148'],['identity'],['identity','0'],['memory','4148','0'],['memory','4148','18446744073709551616'],['pe'],['unknown']]){
26
+ assert.throws(()=>nativeInspectArgs(selector));
27
+ }
28
+ const error=spawnSync(process.execPath,[cli,'inspect','memory','0'],{cwd:root,shell:false,windowsHide:true,encoding:'utf8',timeout:30000});
29
+ assert.equal(error.status,1);assert.match(error.stderr,/invalid positive limit|limit out of range|creation_filetime/);
30
+ });
31
+ test('R67 CLI preserves raw Windows error instead of fabricating data',()=>{
32
+ const {r,value}=invoke('memory','4294967295','1','4');
33
+ assert.equal(r.status,2);assert.equal(value.status,'failed');assert.match(value.error,/win32|PID/);
34
+ });
35
+
36
+ test('R67 CLI rejects stale PID identity before successful region inspection',()=>{
37
+ const {r,value}=invoke('memory',String(process.pid),'1','4');
38
+ assert.equal(r.status,2);
39
+ assert.equal(value.error_code,'PROCESS_IDENTITY_MISMATCH');
40
+ assert.equal(value.win32_error,0);
41
+ });
@@ -0,0 +1,60 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {spawnSync} from 'node:child_process';
4
+ import {mkdtemp,mkdir,writeFile,readFile,rm} from 'node:fs/promises';
5
+ import os from 'node:os';
6
+ import path from 'node:path';
7
+ import {fileURLToPath} from 'node:url';
8
+ const root=path.dirname(path.dirname(fileURLToPath(import.meta.url)));
9
+ const cli=path.join(root,'src','deadbyte-cli.mjs');
10
+ test('R67 offline diagnostic CLI exports without activating remote, uploading or revealing raw log bytes',async()=>{
11
+ const folder=await mkdtemp(path.join(os.tmpdir(),'r67-diagnostic-cli-'));
12
+ try{
13
+ const state=path.join(folder,'state');
14
+ const output=path.join(folder,'report.zip');
15
+ await mkdir(path.join(state,'runtime','logs'),{recursive:true});
16
+ await writeFile(path.join(state,'active-release.json'),JSON.stringify({release_id:'v0.15.43-'+'a'.repeat(16),manifest_sha256:'a'.repeat(64)}));
17
+ await writeFile(path.join(state,'runtime','logs','controller-start.stderr.log'),'WARN reconnect win32=109 SECRET_CANARY_52917\n');
18
+ const run=spawnSync(process.execPath,[cli,'diagnostics','export','--output',output],{
19
+ cwd:root,env:{...process.env,DEADBYTE_STATE_ROOT:state},encoding:'utf8',shell:false,windowsHide:true,timeout:20000
20
+ });
21
+ assert.equal(run.status,0,run.stderr);
22
+ const result=JSON.parse(run.stdout);
23
+ assert.equal(result.status,'written_local_only');
24
+ assert.equal(result.uploaded,false);
25
+ const b=await readFile(output);
26
+ assert.equal(b.includes(Buffer.from('SECRET_CANARY_52917')),false);
27
+ assert.equal(b.readUInt32LE(0),0x04034b50);
28
+ const reject=spawnSync(process.execPath,[cli,'diagnostics','export','--output',path.join(folder,'second.zip'),'--upload'],{
29
+ cwd:root,env:{...process.env,DEADBYTE_STATE_ROOT:state},encoding:'utf8',shell:false,windowsHide:true,timeout:20000
30
+ });
31
+ assert.equal(reject.status,1);
32
+ assert.match(reject.stderr,/upload|syntax|diagnostics/i);
33
+ }finally{await rm(folder,{recursive:true,force:true});}
34
+ });
35
+
36
+ test('R67 diagnostic CLI verify checks local ZIP without starting remote session',async()=>{
37
+ const {makeOfflineDiagnosticBundle}=await import('../src/r67-diagnostic-export.mjs');
38
+ const folder=await mkdtemp(path.join(os.tmpdir(),'r67-diagnostic-verify-cli-'));
39
+ try{
40
+ const file=path.join(folder,'report.zip');
41
+ const bundle=makeOfflineDiagnosticBundle({
42
+ releaseId:'v0.15.43-'+'a'.repeat(16),manifestSha256:'a'.repeat(64),logs:[]
43
+ });
44
+ await writeFile(file,bundle.zip);
45
+ const r=spawnSync(process.execPath,[cli,'diagnostics','verify','--input',file],{
46
+ cwd:root,encoding:'utf8',shell:false,windowsHide:true,timeout:20000
47
+ });
48
+ assert.equal(r.status,0,r.stderr);
49
+ const result=JSON.parse(r.stdout);
50
+ assert.equal(result.status,'VERIFIED_LOCAL_STRUCTURE');
51
+ assert.equal(result.archive_sha256,bundle.archive_sha256);
52
+ const broken=Buffer.from(bundle.zip);broken[50]^=1;
53
+ const brokenPath=path.join(folder,'corrupt.zip');await writeFile(brokenPath,broken);
54
+ const denial=spawnSync(process.execPath,[cli,'diagnostics','verify','--input',brokenPath],{
55
+ cwd:root,encoding:'utf8',shell:false,windowsHide:true,timeout:20000
56
+ });
57
+ assert.equal(denial.status,1);
58
+ assert.match(denial.stderr,/integrity|ZIP|unsafe/i);
59
+ }finally{await rm(folder,{recursive:true,force:true});}
60
+ });
@@ -0,0 +1,49 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {makeOfflineDiagnosticBundle} from '../src/r67-diagnostic-export.mjs';
4
+ import {verifyOfflineDiagnosticsZip} from '../src/r67-diagnostics-verify.mjs';
5
+ const sha='a'.repeat(64);
6
+ const archive=()=>makeOfflineDiagnosticBundle({releaseId:'v0.15.43-'+'a'.repeat(16),manifestSha256:sha,
7
+ logs:[{source:'controller-start.stderr.log',content:'2026-10-11T03:04:05.000Z WARN reconnect win32=109 PASSWORD_CANARY_91020'}]}).zip;
8
+ test('R67 offline diagnostic independently verifies ZIP CRC, bounded entries and fixed schemas',()=>{
9
+ const v=verifyOfflineDiagnosticsZip(archive());
10
+ assert.equal(v.status,'VERIFIED_LOCAL_STRUCTURE');
11
+ assert.equal(v.uploaded,false);
12
+ assert.equal(v.entry_count,2);
13
+ assert.equal(v.summary.redaction,'FIXED_FIELDS_ONLY');
14
+ assert.equal(v.summary.network_upload,'NEVER');
15
+ assert.match(v.archive_sha256,/^[a-f0-9]{64}$/);
16
+ assert.equal(v.summary.raw_log_lines_exported,0);
17
+ });
18
+ test('R67 verifier rejects byte tampering without an updated CRC',()=>{
19
+ const corrupted=Buffer.from(archive());
20
+ const phrase=Buffer.from('FIXED_FIELDS_ONLY');
21
+ const offset=corrupted.indexOf(phrase);
22
+ assert.ok(offset>0);
23
+ corrupted[offset]^=1;
24
+ assert.throws(()=>verifyOfflineDiagnosticsZip(corrupted),/CRC|hash|corrupt/i);
25
+ });
26
+ test('R67 verifier rejects trailing junk, extra archive entries and invalid size bounds',()=>{
27
+ const good=archive();
28
+ assert.throws(()=>verifyOfflineDiagnosticsZip(Buffer.concat([good,Buffer.alloc(20)])),/trailing|eocd|boundary|ZIP/i);
29
+ assert.throws(()=>verifyOfflineDiagnosticsZip(good.subarray(0,good.length-5)),/truncated|eocd|boundary|ZIP/i);
30
+ assert.throws(()=>verifyOfflineDiagnosticsZip(Buffer.alloc(4*1024*1024+1)),/size|large/i);
31
+ });
32
+ test('R67 verify rejects semantic tampering even when attacker recomputes all ZIP CRCs',()=>{
33
+ const buf=Buffer.from(archive());
34
+ const find=Buffer.from('FIXED_FIELDS_ONLY');
35
+ const at=buf.indexOf(find);
36
+ assert.ok(at>0);
37
+ buf.write('ALLOW_RAW_LOGS___',at,'utf8');
38
+ const dataStart=30+buf.readUInt16LE(26),dataLength=buf.readUInt32LE(18);
39
+ let crc=0xffffffff;
40
+ for(const byte of buf.subarray(dataStart,dataStart+dataLength)){
41
+ crc^=byte;
42
+ for(let j=0;j<8;j++)crc=(crc>>>1)^((crc&1)?0xedb88320:0);
43
+ }
44
+ crc=(crc^0xffffffff)>>>0;
45
+ const dir=buf.readUInt32LE(buf.length-22+16);
46
+ buf.writeUInt32LE(crc,14);
47
+ buf.writeUInt32LE(crc,dir+16);
48
+ assert.throws(()=>verifyOfflineDiagnosticsZip(buf),/unsafe diagnostic summary/i);
49
+ });
@@ -0,0 +1,38 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {spawnSync} from 'node:child_process';
4
+ import {mkdtemp,writeFile,rm} from 'node:fs/promises';
5
+ import path from 'node:path';
6
+ import os from 'node:os';
7
+ import {makeOfflineDiagnosticBundle} from '../src/r67-diagnostic-export.mjs';
8
+ test('R67 ZIP interoperates with independent Windows .NET ZipArchive reader',async()=>{
9
+ const folder=await mkdtemp(path.join(os.tmpdir(),'r67-dotnet-zip-'));
10
+ try{
11
+ const file=path.join(folder,'diag.zip');
12
+ const x=makeOfflineDiagnosticBundle({releaseId:'v0.15.43-'+'a'.repeat(16),manifestSha256:'a'.repeat(64),logs:[
13
+ {source:'controller-start.stderr.log',content:'2026-10-11T01:02:03.000Z ERROR timeout win32=109 TOKEN_CANARY_7841'}
14
+ ]});
15
+ await writeFile(file,x.zip);
16
+ const escaped=file.replaceAll("'","''");
17
+ const ps=[
18
+ '$ErrorActionPreference="Stop"',
19
+ 'Add-Type -AssemblyName System.IO.Compression.FileSystem',
20
+ "$zip=[System.IO.Compression.ZipFile]::OpenRead('"+escaped+"')",
21
+ "try{",
22
+ " $entries=@($zip.Entries|ForEach-Object {$_.FullName})",
23
+ " if($entries.Count -ne 2 -or $entries[0] -ne 'diagnostics.json' -or $entries[1] -ne 'redacted-events.json'){throw 'ZIP_ENTRY_MISMATCH'}",
24
+ " foreach($entry in $zip.Entries){",
25
+ " $reader=New-Object System.IO.StreamReader($entry.Open())",
26
+ " try{$body=$reader.ReadToEnd();$parsed=ConvertFrom-Json -InputObject $body;if(!$parsed){throw 'INVALID_JSON'}}finally{$reader.Dispose()}",
27
+ " if($body.Contains('TOKEN_CANARY_7841')){throw 'SECRET_LEAK'}",
28
+ " }",
29
+ " Write-Output 'ZIP_ORACLE_PASS'",
30
+ "}finally{$zip.Dispose()}"
31
+ ].join(';');
32
+ const r=spawnSync('powershell.exe',['-NoLogo','-NoProfile','-NonInteractive','-Command',ps],
33
+ {windowsHide:true,shell:false,encoding:'utf8',timeout:20000,maxBuffer:1024*1024});
34
+ assert.equal(r.error,undefined,r.error?.message);
35
+ assert.equal(r.status,0,r.stderr);
36
+ assert.match(r.stdout,/ZIP_ORACLE_PASS/);
37
+ }finally{await rm(folder,{recursive:true,force:true});}
38
+ });
@@ -0,0 +1,60 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {mkdtemp,mkdir,writeFile,readFile,rm,lstat} from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import {redactDiagnosticLine,makeOfflineDiagnosticBundle,exportOfflineDiagnostics} from '../src/r67-diagnostic-export.mjs';
7
+ const secret='SENTINEL_SECRET_CANARY_984031';
8
+ const token='sk-proj-FAKE_DIAGNOSTIC_SECRET';
9
+ const sha='a'.repeat(64);
10
+ test('R67 local diagnostics use irreversible token-free allowlist, not regex-redacted raw log',()=>{
11
+ const line='2026-10-11T05:44:03.000Z ERROR reconnect win32=109 Authorization: Bearer '+secret+' '+token+' C:\\Users\\DEADBYTE\\passwords.txt';
12
+ const output=redactDiagnosticLine(line);
13
+ assert.deepEqual(output,{timestamp:'2026-10-11T05:44:03.000Z',level:'ERROR',event:'reconnect',win32_error:109});
14
+ assert.ok(!JSON.stringify(output).includes('FAKE'));
15
+ const unknown=redactDiagnosticLine('password='+secret+' '+token+' cwd=/private/location');
16
+ assert.equal(unknown,null,'unknown free-form lines must be dropped');
17
+ });
18
+ test('R67 offline ZIP contains only fixed names, derived summaries, no raw secrets or network URL',()=>{
19
+ const bundle=makeOfflineDiagnosticBundle({
20
+ releaseId:'v0.15.43-'+'a'.repeat(16),manifestSha256:sha,
21
+ logs:[{source:'controller-start.stderr.log',content:'ERROR reconnect win32=109 Bearer '+secret+'\nINFO ready '+token+'\npassword='+secret+'\n'}]
22
+ });
23
+ assert.ok(Buffer.isBuffer(bundle.zip));
24
+ assert.equal(bundle.zip.readUInt32LE(0),0x04034b50,'ZIP local file header');
25
+ assert.ok(bundle.zip.includes(Buffer.from('diagnostics.json')));
26
+ assert.ok(bundle.zip.includes(Buffer.from('redacted-events.json')));
27
+ for(const value of [secret,token,'password=','Bearer','C:\\Users\\','https://'])
28
+ assert.equal(bundle.zip.includes(Buffer.from(value)),false,'raw or sensitive text leaked');
29
+ assert.equal(bundle.summary.schema,'deadbyte.r67-offline-diagnostics.v1');
30
+ assert.equal(bundle.summary.network_upload,'NEVER');
31
+ assert.equal(bundle.summary.source_count,1);
32
+ assert.equal(bundle.summary.redacted_event_count,2);
33
+ assert.match(bundle.archive_sha256,/^[a-f0-9]{64}$/);
34
+ });
35
+ test('R67 exports only to owner-selected local path, absent target and no arbitrary logs',async()=>{
36
+ const folder=await mkdtemp(path.join(os.tmpdir(),'deadbyte-r67-diagnostic-test-'));
37
+ try{
38
+ const stateRoot=path.join(folder,'state');
39
+ await mkdir(path.join(stateRoot,'runtime','logs'),{recursive:true});
40
+ await writeFile(path.join(stateRoot,'active-release.json'),JSON.stringify({release_id:'v0.15.43-'+'a'.repeat(16),manifest_sha256:sha}));
41
+ await writeFile(path.join(stateRoot,'runtime','logs','controller-start.stderr.log'),'ERROR timeout Authorization: Bearer '+secret+'\nINFO connected '+token+'\n');
42
+ await writeFile(path.join(stateRoot,'runtime','logs','arbitrary.log'),'ERROR THIS MUST NOT BE INCLUDED '+secret+'\n');
43
+ const output=path.join(folder,'owner-approved.zip');
44
+ const result=await exportOfflineDiagnostics({stateRoot,outputPath:output});
45
+ assert.equal(result.status,'written_local_only');
46
+ assert.equal(result.uploaded,false);
47
+ const actual=await readFile(output);
48
+ assert.equal(actual.readUInt32LE(0),0x04034b50);
49
+ assert.equal(actual.includes(Buffer.from(secret)),false);
50
+ assert.equal(actual.includes(Buffer.from(token)),false);
51
+ assert.equal(actual.includes(Buffer.from('arbitrary.log')),false);
52
+ const info=await lstat(output);
53
+ assert.ok(info.isFile()&&!info.isSymbolicLink());
54
+ await assert.rejects(()=>exportOfflineDiagnostics({stateRoot,outputPath:output}),/EEXIST|already exists/);
55
+ }finally{await rm(folder,{recursive:true,force:true});}
56
+ });
57
+ test('R67 without output path fails before read and upload option is always forbidden',async()=>{
58
+ await assert.rejects(()=>exportOfflineDiagnostics({stateRoot:'C:\\a'}),/outputPath/);
59
+ await assert.rejects(()=>exportOfflineDiagnostics({stateRoot:'C:\\a',outputPath:'X',upload:true}),/upload.*disabled|no network/i);
60
+ });
@@ -0,0 +1,186 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {createHash} from 'node:crypto';
4
+ import {mkdtemp,mkdir,readFile,writeFile,rm} from 'node:fs/promises';
5
+ import path from 'node:path';
6
+ import os from 'node:os';
7
+ import {createR67ShardPlan,r67RegressionTreeHash,r67ShardTimeoutMs} from '../src/r67-regression-shards.mjs';
8
+ import {reconcileR67Evidence} from '../src/r67-evidence-reconcile.mjs';
9
+
10
+ const sha=b=>createHash('sha256').update(b).digest('hex');
11
+ const op='r67-e2e-fixture-contract';
12
+ async function fixture(){
13
+ const parent=await mkdtemp(path.join(os.tmpdir(),'deadbyte-r67-e2e-'));
14
+ const root=path.join(parent,'candidate'),evidenceRoot=path.join(parent,'evidence');
15
+ await mkdir(path.join(root,'test'),{recursive:true});
16
+ await mkdir(path.join(root,'src'));
17
+ await mkdir(evidenceRoot);
18
+ await writeFile(path.join(root,'package.json'),'{}\n');
19
+ await writeFile(path.join(root,'src','core.mjs'),'export const r67 = true;\n');
20
+ const names=Array.from({length:32},(_,i)=>'test/fixture-'+String(i).padStart(2,'0')+'.test.mjs');
21
+ for(const name of names)await writeFile(path.join(root,name),'import test from "node:test"; test("fixture",()=>{});\n');
22
+ const plan=createR67ShardPlan(names,32);
23
+ const hashes=await Promise.all(names.map(async name=>[name,sha(await readFile(path.join(root,name)))]));
24
+ const testTree=sha(Buffer.from(JSON.stringify(hashes)));
25
+ const opts={roots:['src','test'],topLevel:['package.json'],extra:[]};
26
+ const tree=await r67RegressionTreeHash(root,opts);
27
+ async function writeShard(index,{kind='valid',signed=false}={}){
28
+ const shard=plan.shards[index],folder=path.join(evidenceRoot,op+'-shard-'+String(index).padStart(2,'0'));
29
+ await mkdir(folder,{recursive:true});
30
+ const intent={schema:'deadbyte.r67-shard-intent.v1',operation:op,shard_index:index,plan_sha256:plan.plan_sha256,
31
+ files_sha256:shard.files_sha256,test_tree_sha256:testTree,source_tree_sha256:tree.sha256,
32
+ source_file_count:tree.file_count,started_at_utc:'2026-10-11T00:00:00.000Z',files:shard.files};
33
+ await writeFile(path.join(folder,'intent.json'),JSON.stringify(intent));
34
+ const status=kind==='unknown'?'OUTCOME_UNKNOWN':'PASS';
35
+ const result={schema:kind==='v1'?'deadbyte.r67-shard-result.v1':'deadbyte.r67-shard-result.v2',
36
+ operation_id:op,shard_index:index,plan_sha256:plan.plan_sha256,
37
+ files_sha256:shard.files_sha256,test_tree_sha256:testTree,source_tree_sha256:tree.sha256,
38
+ source_file_count:tree.file_count,status,exit_code:status==='PASS'?0:null,
39
+ test_count:status==='PASS'?1:null,passed:status==='PASS'?1:null,failed:status==='PASS'?0:null,
40
+ skipped:status==='PASS'?0:null,cancelled:status==='PASS'?0:null,todo:status==='PASS'?0:null,
41
+ configured_timeout_ms:r67ShardTimeoutMs(shard),timed_out:false,failure_reason:null,elapsed_ms:1,
42
+ stdout_sha256:sha(Buffer.from('fixture output')),stderr_sha256:sha(Buffer.alloc(0))};
43
+ if(kind==='tampered')result.files_sha256='f'.repeat(64);
44
+ const receipt_sha256=sha(Buffer.from(JSON.stringify(result)));
45
+ await writeFile(path.join(folder,'result.json'),JSON.stringify({...result,receipt_sha256}));
46
+ return folder;
47
+ }
48
+ return {parent,root,evidenceRoot,plan,opts,writeShard,cleanup:()=>rm(parent,{recursive:true,force:true})};
49
+ }
50
+ test('R67 real reconciliation consumes 32 durable v2 receipts and reports PASS from fixture source bytes',async()=>{
51
+ const x=await fixture();
52
+ try{
53
+ for(let i=0;i<32;i++)await x.writeShard(i);
54
+ const r=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
55
+ assert.equal(r.status,'PASS',JSON.stringify(r));
56
+ assert.equal(r.verified_receipts,32);
57
+ assert.equal(r.verdict.test_count,32);
58
+ assert.deepEqual(r.integrity_faults,[]);
59
+ }finally{await x.cleanup();}
60
+ });
61
+ test('R67 verified legacy v1 receipts cannot count toward a new full suite PASS',async()=>{
62
+ const x=await fixture();
63
+ try{
64
+ for(let i=0;i<32;i++)await x.writeShard(i,{kind:i===5?'v1':'valid'});
65
+ const r=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
66
+ assert.equal(r.status,'STALE_SOURCE');
67
+ assert.deepEqual(r.stale_indices,[5]);
68
+ assert.equal(r.verified_receipts,31);
69
+ }finally{await x.cleanup();}
70
+ });
71
+ test('R67 rejects changed receipts before considering source staleness',async()=>{
72
+ const x=await fixture();
73
+ try{
74
+ for(let i=0;i<32;i++)await x.writeShard(i,{kind:i===7?'tampered':'valid'});
75
+ const file=path.join(x.evidenceRoot,op+'-shard-07','result.json');
76
+ const broken=JSON.parse(await readFile(file,'utf8'));broken.result_sha256='0'.repeat(64);
77
+ await writeFile(file,JSON.stringify(broken));
78
+ await writeFile(path.join(x.root,'src','core.mjs'),'export const r67 = false;\n');
79
+ const r=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
80
+ assert.equal(r.status,'FAILED_INTEGRITY');
81
+ assert.ok(r.integrity_faults.some(e=>e.index===7));
82
+ }finally{await x.cleanup();}
83
+ });
84
+ test('R67 source mutation, missing shard and unknown outcome never produce PASS',async()=>{
85
+ const x=await fixture();
86
+ try{
87
+ for(let i=0;i<31;i++)await x.writeShard(i);
88
+ let r=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
89
+ assert.equal(r.status,'BLOCKED');
90
+ await x.writeShard(31,{kind:'unknown'});
91
+ r=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
92
+ assert.equal(r.status,'OUTCOME_UNKNOWN');
93
+ await writeFile(path.join(x.root,'src','core.mjs'),'export const r67 = false;\n');
94
+ r=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
95
+ assert.equal(r.status,'STALE_SOURCE');
96
+ }finally{await x.cleanup();}
97
+ });
98
+
99
+ test('R67 changed test plan makes authentic historical v1 receipts STALE, not integrity failures',async()=>{
100
+ const x=await fixture();
101
+ try{
102
+ for(let i=0;i<32;i++)await x.writeShard(i,{kind:'v1'});
103
+ await writeFile(path.join(x.root,'test','fixture-added.test.mjs'),'import test from "node:test"; test("new",()=>{});\\n');
104
+ const r=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
105
+ assert.equal(r.status,'STALE_SOURCE',JSON.stringify(r.integrity_faults));
106
+ assert.deepEqual(r.integrity_faults,[]);
107
+ assert.equal(r.stale_indices.length,32);
108
+ }finally{await x.cleanup();}
109
+ });
110
+
111
+ test('R67 v2 PASS cannot coexist with timed_out=true even if receipt SHA is recomputed',async()=>{
112
+ const x=await fixture();
113
+ try{
114
+ for(let i=0;i<32;i++)await x.writeShard(i);
115
+ const file=path.join(x.evidenceRoot,op+'-shard-08','result.json');
116
+ const result=JSON.parse(await readFile(file,'utf8'));result.timed_out=true;
117
+ const {receipt_sha256,...body}=result;result.receipt_sha256=sha(Buffer.from(JSON.stringify(body)));
118
+ await writeFile(file,JSON.stringify(result));
119
+ const r=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
120
+ assert.equal(r.status,'FAILED_INTEGRITY');
121
+ assert.ok(r.integrity_faults.some(v=>v.index===8));
122
+ }finally{await x.cleanup();}
123
+ });
124
+
125
+ test('R67 v2 skips cannot silently produce a full regression PASS without classification',async()=>{
126
+ const x=await fixture();
127
+ try{
128
+ for(let i=0;i<32;i++)await x.writeShard(i);
129
+ const file=path.join(x.evidenceRoot,op+'-shard-09','result.json');
130
+ const result=JSON.parse(await readFile(file,'utf8'));result.passed=0;result.skipped=1;
131
+ const {receipt_sha256,...body}=result;result.receipt_sha256=sha(Buffer.from(JSON.stringify(body)));
132
+ await writeFile(file,JSON.stringify(result));
133
+ const r=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
134
+ assert.equal(r.status,'BLOCKED_NONPASS_CLASSIFICATION');
135
+ assert.deepEqual(r.unclassified_nonpass,[{index:9,skipped:1,todo:0,cancelled:0}]);
136
+ }finally{await x.cleanup();}
137
+ });
138
+
139
+ test('R67 case-level SKIP evidence stays visible and forged case counts fail integrity',async()=>{
140
+ const x=await fixture();
141
+ try{
142
+ for(let i=0;i<32;i++)await x.writeShard(i);
143
+ const file=path.join(x.evidenceRoot,op+'-shard-09','result.json');
144
+ const report=JSON.parse(await readFile(file,'utf8'));
145
+ report.passed=0;report.skipped=1;
146
+ report.nonpass_cases=[{kind:'SKIP',name:'offline fixture',reason:'unsupported platform'}];
147
+ report.nonpass_fully_classified=true;
148
+ const seal=async()=>{
149
+ const {receipt_sha256,...body}=report;report.receipt_sha256=sha(Buffer.from(JSON.stringify(body)));
150
+ await writeFile(file,JSON.stringify(report));
151
+ };
152
+ await seal();
153
+ const observed=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
154
+ assert.equal(observed.status,'PASS','Fully reasoned skips must be honestly recorded but should not fabricate test failures');
155
+ assert.deepEqual(observed.classified_nonpass[0].cases,report.nonpass_cases);
156
+ assert.equal(observed.verdict.passed,31);
157
+ assert.equal(observed.verdict.test_count,32);
158
+ report.nonpass_cases.push({kind:'SKIP',name:'forged',reason:'unsupported platform'});
159
+ await seal();
160
+ const broken=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
161
+ assert.equal(broken.status,'FAILED_INTEGRITY');
162
+ }finally{await x.cleanup();}
163
+ });
164
+
165
+
166
+ test('R67 v2 FAILED result must bind a complete named failure case ledger, not an empty passing-shaped ledger',async()=>{
167
+ const x=await fixture();
168
+ try{
169
+ for(let i=0;i<32;i++)await x.writeShard(i);
170
+ const file=path.join(x.evidenceRoot,op+'-shard-07','result.json');
171
+ const result=JSON.parse(await readFile(file,'utf8'));
172
+ const name='remote ownership race';
173
+ result.status='FAILED';result.exit_code=1;result.failed=1;result.passed=0;
174
+ result.failure_cases=[{name,name_sha256:sha(Buffer.from(name,'utf8'))}];
175
+ result.failure_cases_complete=true;
176
+ const seal=async()=>{const {receipt_sha256,...body}=result;result.receipt_sha256=sha(Buffer.from(JSON.stringify(body)));await writeFile(file,JSON.stringify(result));};
177
+ await seal();
178
+ let observed=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
179
+ assert.equal(observed.status,'FAILED');
180
+ assert.deepEqual(observed.integrity_faults,[]);
181
+ result.failure_cases=[];result.failure_cases_complete=true;await seal();
182
+ observed=await reconcileR67Evidence({root:x.root,evidenceRoot:x.evidenceRoot,operationId:op,sourceHashOptions:x.opts});
183
+ assert.equal(observed.status,'FAILED_INTEGRITY');
184
+ assert.ok(observed.integrity_faults.some(v=>v.index===7));
185
+ }finally{await x.cleanup();}
186
+ });