deadbyte-mcp 0.15.74 → 0.15.76

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 (109) hide show
  1. package/MANIFEST.SHA256 +108 -42
  2. package/PROVENANCE.json +20 -22
  3. package/README.txt +23 -18
  4. package/RELEASE.json +69 -18
  5. package/SBOM.cdx.json +2 -2
  6. package/TEST-MATRIX.json +32 -2
  7. package/bin/deadbyte-desktop-uia-r199-fixed.exe +0 -0
  8. package/bin/deadbyte-desktop-uia-r199-fixed.obj +0 -0
  9. package/bin/deadbyte-desktop-uia-r199.exe +0 -0
  10. package/bin/deadbyte-desktop-uia-r199.obj +0 -0
  11. package/bin/deadbyte-fs-read-r197-fixed.exe +0 -0
  12. package/bin/deadbyte-fs-read-r198.exe +0 -0
  13. package/bin/deadbyte-fs-read-r198.obj +0 -0
  14. package/bin/deadbyte-root-relative-probe-r197.exe +0 -0
  15. package/bridge/package.json +1 -1
  16. package/controller/deadbyte-process-policy.json +4 -4
  17. package/docs/R184-package-lock.json +2 -8
  18. package/native/deadbyte-desktop-uia-r199.cpp +345 -0
  19. package/native/deadbyte-fs-read-r197.cpp +174 -0
  20. package/native/deadbyte-fs-read-r198.cpp +181 -0
  21. package/native/deadbyte-root-relative-probe-r197.cpp +97 -0
  22. package/package.json +5 -2
  23. package/scripts/build-native-desktop-uia-r199-fixed.ps1 +28 -0
  24. package/scripts/build-native-desktop-uia-r199.ps1 +28 -0
  25. package/scripts/build-native-fs-read-r197-fixed.ps1 +28 -0
  26. package/scripts/build-native-fs-read-r197.ps1 +28 -0
  27. package/scripts/build-native-fs-read-r198.ps1 +28 -0
  28. package/scripts/build-native-root-probe-r197.ps1 +28 -0
  29. package/scripts/gate-windows-r195.ps1 +114 -0
  30. package/scripts/gate-windows-r206.ps1 +116 -0
  31. package/scripts/gate-windows-r207.ps1 +104 -0
  32. package/scripts/init-desktop-policy-r199.ps1 +85 -0
  33. package/scripts/npm-release-r48.mjs +27 -0
  34. package/scripts/npm-release-readiness-r195.mjs +72 -0
  35. package/scripts/npm-release-readiness-r206.mjs +76 -0
  36. package/scripts/npm-release-readiness-r207.mjs +76 -0
  37. package/scripts/r193-owner-request-live.mjs +8 -7
  38. package/scripts/r193-owner-uac-broker.mjs +6 -5
  39. package/scripts/r205-candidate-selection.mjs +22 -0
  40. package/src/candidate-selection-evidence-r206.mjs +71 -0
  41. package/src/candidate-selection-r205.mjs +96 -0
  42. package/src/desktop-postcondition-r196.mjs +30 -0
  43. package/src/desktop-runtime-r40.mjs +44 -7
  44. package/src/desktop-uia-identity-r199.mjs +51 -0
  45. package/src/desktop-uia-r40.mjs +9 -1
  46. package/src/machine-fs-handle-read-r196.mjs +43 -0
  47. package/src/machine-fs-native-read-r197.mjs +73 -0
  48. package/src/machine-fs-native-read-r198.mjs +76 -0
  49. package/src/machine-fs-read-worker.mjs +5 -25
  50. package/src/machine-fs.mjs +31 -16
  51. package/src/r195-canonical-owner-observation.mjs +15 -0
  52. package/src/r207-owner-enrollment-io.mjs +30 -0
  53. package/src/remote-destination-journal-r202.mjs +120 -0
  54. package/src/remote-device-r44.mjs +89 -14
  55. package/src/remote-payload-boundary-r201.mjs +71 -0
  56. package/src/remote-terminal-evidence-r200.mjs +60 -0
  57. package/src/version.mjs +1 -1
  58. package/test/desktop-runtime-r40.test.mjs +111 -0
  59. package/test/desktop-uia-r40.test.mjs +15 -0
  60. package/test/fixtures/r197-junction-swap-worker.mjs +21 -0
  61. package/test/fixtures/r203-journal-writer.mjs +6 -0
  62. package/test/process-policy-refresh.test.mjs +4 -4
  63. package/test/r130-release-security-contract.test.mjs +8 -8
  64. package/test/r132-release-identity.test.mjs +7 -7
  65. package/test/r153-prepublish-identity.test.mjs +1 -1
  66. package/test/r160-release-contract.test.mjs +3 -3
  67. package/test/r165-live-cli-skew.test.mjs +1 -1
  68. package/test/r167-release-contract.test.mjs +11 -11
  69. package/test/r168-release-contract.test.mjs +4 -4
  70. package/test/r172-release-contract.test.mjs +6 -6
  71. package/test/r173-release-contract.test.mjs +16 -16
  72. package/test/r179-release-contract.test.mjs +12 -12
  73. package/test/r190-release-contract.test.mjs +10 -10
  74. package/test/r191-release-contract.test.mjs +12 -12
  75. package/test/r192-release-identity.test.mjs +9 -9
  76. package/test/r193-release-identity.test.mjs +24 -22
  77. package/test/r193-release-readiness.test.mjs +2 -2
  78. package/test/r193-windows-gate.test.mjs +10 -10
  79. package/test/r194-release-identity.test.mjs +19 -15
  80. package/test/r194-release-readiness.test.mjs +3 -3
  81. package/test/r194-windows-gate.test.mjs +9 -8
  82. package/test/r195-canonical-owner-observation.test.mjs +32 -0
  83. package/test/r195-release-readiness.test.mjs +22 -0
  84. package/test/r196-desktop-postcondition.test.mjs +53 -0
  85. package/test/r196-handle-bound-read.test.mjs +99 -0
  86. package/test/r196-remote-outcome.test.mjs +94 -0
  87. package/test/r197-namespace-race.test.mjs +41 -0
  88. package/test/r197-native-dispatch-race.test.mjs +49 -0
  89. package/test/r197-native-file-read.test.mjs +60 -0
  90. package/test/r197-native-root-open.test.mjs +61 -0
  91. package/test/r198-root-identity.test.mjs +88 -0
  92. package/test/r199-native-uia-worker.test.mjs +28 -0
  93. package/test/r199-uia-identity.test.mjs +43 -0
  94. package/test/r200-remote-reconcile.test.mjs +106 -0
  95. package/test/r201-payload-boundary.test.mjs +78 -0
  96. package/test/r201-payload-fuzz.test.mjs +37 -0
  97. package/test/r201-tool-boundary-fuzz.test.mjs +120 -0
  98. package/test/r202-destination-journal.test.mjs +92 -0
  99. package/test/r203-atomic-journal.test.mjs +86 -0
  100. package/test/r205-candidate-selection-cli.test.mjs +31 -0
  101. package/test/r205-candidate-selection.test.mjs +83 -0
  102. package/test/r206-candidate-evidence.test.mjs +64 -0
  103. package/test/r206-release-contract.test.mjs +42 -0
  104. package/test/r206-release-readiness.test.mjs +23 -0
  105. package/test/r207-owner-enrollment-io.test.mjs +37 -0
  106. package/test/r207-release-contract.test.mjs +51 -0
  107. package/test/r207-release-readiness.test.mjs +23 -0
  108. package/test/r59-tool-surface-compat.test.mjs +1 -1
  109. package/test/r64-machine-fs-large-read.test.mjs +26 -12
@@ -8,7 +8,7 @@ import {DEADBYTE_VERSION} from '../src/version.mjs';
8
8
  const root=path.resolve(fileURLToPath(new URL('..',import.meta.url)));
9
9
  const read=async rel=>JSON.parse(await readFile(path.join(root,rel),'utf8'));
10
10
  const readOptional=async rel=>{try{return await read(rel);}catch(error){if(error?.code==='ENOENT')return null;throw error;}};
11
- const VERSION='0.15.74';
11
+ const VERSION='0.15.76';
12
12
  const R166_MANIFEST='ad3c091fbbe2bac6d234548724008b67305fd483ad6542f92d5aeb1aa84f5849';
13
13
  const R166_TARBALL='3d22412c3cebabd66bfa92ca4dbaaf3ef49acba7f92436a16485d7e4cb18c653';
14
14
 
@@ -20,20 +20,20 @@ test('current package identity retains the immutable R167/R173 activation lineag
20
20
  provenance.version,matrix.version,bom.metadata.component.version,DEADBYTE_VERSION];
21
21
  if(lock)versions.push(lock.version,lock.packages[''].version);
22
22
  for(const version of versions)assert.equal(version,VERSION);
23
- assert.equal(release.train,'R194');
24
- assert.equal(matrix.train,'R194');
25
- assert.equal(bom.serialNumber,'urn:cdx:deadbyte-mcp:r194:0.15.74');
23
+ assert.equal(release.train,'R207');
24
+ assert.equal(matrix.train,'R207');
25
+ assert.equal(bom.serialNumber,'urn:cdx:deadbyte-mcp:r207:0.15.76');
26
26
  assert.deepEqual(release.runtime_predecessor,{
27
- version:'0.15.72',release_id:'v0.15.72-0a5d9436e06e2d9e',
28
- manifest_sha256:'0a5d9436e06e2d9e7cf9179417465955d8ca5ba88655b13dd019190243c1cc90',
29
- generation_manifest_sha256:'aec7b998306a3bbbcc59088648e7bc46ca7e203d749d4550b5b5f372032f92b0'
27
+ version:'0.15.75',release_id:'v0.15.75-9039fff265696091',
28
+ manifest_sha256:'9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248',
29
+ generation_manifest_sha256:'83a212e01173c73f78cff2a6d26e6f3f50f476a8c0ea3cbbf592a466071909e9'
30
30
  });
31
- assert.equal(release.source_predecessor.version,'0.15.73');
32
- assert.equal(release.source_predecessor.train,'R193');
33
- assert.equal(release.source_predecessor.tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
31
+ assert.equal(release.source_predecessor.version,'0.15.75');
32
+ assert.equal(release.source_predecessor.train,'R206');
33
+ assert.equal(release.source_predecessor.tarball_sha256,'c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9');
34
34
  assert.equal(release.r173.source_predecessor_version,'0.15.67');
35
35
  assert.equal(release.r167.source_predecessor_manifest_sha256,R166_MANIFEST);
36
- assert.equal(provenance.source_predecessor_manifest_file_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
36
+ assert.equal(provenance.source_predecessor_manifest_file_sha256,'9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248');
37
37
  assert.equal(provenance.r173.source_predecessor_manifest_sha256,'4fd7bfc76b1de6401c142b607cc84e847434b28c888bc99ceb09c9e8e5adc8f8');
38
38
  assert.equal(release.r172.source_predecessor_manifest_sha256,'962e227dace247d59aa860211388fbde461c5f9c8a7e8a878e34a14a27d355f8');
39
39
  assert.equal(release.r172.source_predecessor_tarball_sha256,'31b194a4fbff7dbdb9f4f275b4ea49c5115f7b0bb2241c0c72d72ef690311a5d');
@@ -13,10 +13,10 @@ const predecessorTarball='fc3ae5b1505e316bc9dfedf8d063cb00641754c8f5f1306a31f8cc
13
13
 
14
14
  test('R172 preserves the immutable R168 publication lineage separately from current identity',async()=>{
15
15
  const release=await read('RELEASE.json');
16
- assert.equal(release.runtime_predecessor.version,'0.15.72');
17
- assert.equal(release.parent.version,'0.15.72');
18
- assert.equal(release.runtime_predecessor.release_id,'v0.15.72-0a5d9436e06e2d9e');
19
- assert.equal(release.parent.release_id,'v0.15.72-0a5d9436e06e2d9e');
16
+ assert.equal(release.runtime_predecessor.version,'0.15.75');
17
+ assert.equal(release.parent.version,'0.15.75');
18
+ assert.equal(release.runtime_predecessor.release_id,'v0.15.75-9039fff265696091');
19
+ assert.equal(release.parent.release_id,'v0.15.75-9039fff265696091');
20
20
  assert.notEqual(release.runtime_predecessor.release_id,parent);
21
21
  assert.notEqual(release.parent.release_id,parent);
22
22
  assert.equal(release.r168.scope,'REMOTE_VERSION_SKEW_FAIL_CLOSED_AND_READONLY_RECONCILIATION');
@@ -16,12 +16,12 @@ test('R190 binds the published source predecessor separately from the active run
16
16
  const versions=[pkg.version,bridge.version,release.version,provenance.version,matrix.version,
17
17
  bom.metadata.component.version,DEADBYTE_VERSION];
18
18
  if(lock)versions.push(lock.version,lock.packages[''].version);
19
- for(const value of versions)assert.equal(value,'0.15.74');
20
- assert.equal(release.train,'R194'); assert.equal(matrix.train,'R194');
21
- assert.equal(release.source_predecessor.version,'0.15.73');
22
- assert.equal(release.source_predecessor.manifest_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
23
- assert.equal(release.source_predecessor.tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
24
- assert.equal(release.runtime_predecessor.release_id,'v0.15.72-0a5d9436e06e2d9e');
19
+ for(const value of versions)assert.equal(value,'0.15.76');
20
+ assert.equal(release.train,'R207'); assert.equal(matrix.train,'R207');
21
+ assert.equal(release.source_predecessor.version,'0.15.75');
22
+ assert.equal(release.source_predecessor.manifest_sha256,'9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248');
23
+ assert.equal(release.source_predecessor.tarball_sha256,'c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9');
24
+ assert.equal(release.runtime_predecessor.release_id,'v0.15.75-9039fff265696091');
25
25
  assert.equal(release.r173.public_tool_delta,0); assert.equal(release.r173.authority_scope_delta,0);
26
26
  });
27
27
 
@@ -13,21 +13,21 @@ test('R190 package identity binds the exact published R179 source and live runti
13
13
  json('package.json'),readReleaseLock(root),json('bridge/package.json'),json('RELEASE.json'),
14
14
  json('PROVENANCE.json'),json('TEST-MATRIX.json'),json('SBOM.cdx.json')
15
15
  ]);
16
- assert.equal(pkg.version,'0.15.74');
17
- assert.equal(lock.version,'0.15.74');
18
- assert.equal(lock.packages[''].version,'0.15.74');
19
- assert.equal(bridge.version,'0.15.74');
20
- assert.equal(release.version,'0.15.74');
21
- assert.equal(release.train,'R194');
22
- assert.equal(matrix.version,'0.15.74');
23
- assert.equal(matrix.train,'R194');
24
- assert.equal(sbom.metadata.component.version,'0.15.74');
25
- assert.equal(release.source_predecessor.version,'0.15.73');
26
- assert.equal(release.source_predecessor.train,'R193');
27
- assert.equal(release.source_predecessor.manifest_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
28
- assert.equal(release.source_predecessor.tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
29
- assert.equal(release.runtime_predecessor.version,'0.15.72');
30
- assert.equal(provenance.version,'0.15.74');
31
- assert.equal(provenance.parent_tarball_sha256,'15ab5d9808cbca342aee3f64c6d1123e8fbb72964674eab460e355c8675bf84d');
16
+ assert.equal(pkg.version,'0.15.76');
17
+ assert.equal(lock.version,'0.15.76');
18
+ assert.equal(lock.packages[''].version,'0.15.76');
19
+ assert.equal(bridge.version,'0.15.76');
20
+ assert.equal(release.version,'0.15.76');
21
+ assert.equal(release.train,'R207');
22
+ assert.equal(matrix.version,'0.15.76');
23
+ assert.equal(matrix.train,'R207');
24
+ assert.equal(sbom.metadata.component.version,'0.15.76');
25
+ assert.equal(release.source_predecessor.version,'0.15.75');
26
+ assert.equal(release.source_predecessor.train,'R206');
27
+ assert.equal(release.source_predecessor.manifest_sha256,'9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248');
28
+ assert.equal(release.source_predecessor.tarball_sha256,'c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9');
29
+ assert.equal(release.runtime_predecessor.version,'0.15.75');
30
+ assert.equal(provenance.version,'0.15.76');
31
+ assert.equal(provenance.parent_tarball_sha256,'c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9');
32
32
  assert.equal(provenance.source_predecessor_manifest_file_sha256,release.source_predecessor.manifest_sha256);
33
33
  });
@@ -7,27 +7,27 @@ import {DEADBYTE_VERSION} from '../src/version.mjs';
7
7
  import {readReleaseLock} from './helpers/release-lock.mjs';
8
8
  const root=path.resolve(fileURLToPath(new URL('..',import.meta.url)));
9
9
  const read=async file=>JSON.parse(await readFile(path.join(root,file),'utf8'));
10
- const parent='v0.15.72-0a5d9436e06e2d9e';
11
- const manifest='0a5d9436e06e2d9e7cf9179417465955d8ca5ba88655b13dd019190243c1cc90';
12
- const generation='aec7b998306a3bbbcc59088648e7bc46ca7e203d749d4550b5b5f372032f92b0';
10
+ const parent='v0.15.75-9039fff265696091';
11
+ const manifest='9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248';
12
+ const generation='83a212e01173c73f78cff2a6d26e6f3f50f476a8c0ea3cbbf592a466071909e9';
13
13
  const tarball='1a7f1fe05a06178b8d772a140be6e0470790b743cef690c3f8f8165cc61075bf';
14
14
  test('R190 version, lock snapshot, bridge, matrix, SBOM and provenance identify exact 0.15.70 successor',async()=>{
15
15
  const [pkg,lock,bridge,release,provenance,matrix,sbom]=await Promise.all([
16
16
  read('package.json'),readReleaseLock(root),read('bridge/package.json'),read('RELEASE.json'),
17
17
  read('PROVENANCE.json'),read('TEST-MATRIX.json'),read('SBOM.cdx.json')]);
18
18
  for(const version of [pkg.version,lock.version,lock.packages[''].version,bridge.version,release.version,provenance.version,
19
- matrix.version,sbom.metadata.component.version,DEADBYTE_VERSION])assert.equal(version,'0.15.74');
20
- assert.equal(release.train,'R194');assert.equal(matrix.train,'R194');
21
- assert.equal(sbom.serialNumber,'urn:cdx:deadbyte-mcp:r194:0.15.74');
19
+ matrix.version,sbom.metadata.component.version,DEADBYTE_VERSION])assert.equal(version,'0.15.76');
20
+ assert.equal(release.train,'R207');assert.equal(matrix.train,'R207');
21
+ assert.equal(sbom.serialNumber,'urn:cdx:deadbyte-mcp:r207:0.15.76');
22
22
  assert.equal(release.parent.release_id,parent);assert.equal(release.parent.manifest_sha256,manifest);
23
23
  assert.equal(release.parent.generation_manifest_sha256,generation);
24
- assert.equal(release.source_predecessor.version,'0.15.73');
25
- assert.equal(release.source_predecessor.manifest_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
26
- assert.equal(release.source_predecessor.tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
24
+ assert.equal(release.source_predecessor.version,'0.15.75');
25
+ assert.equal(release.source_predecessor.manifest_sha256,'9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248');
26
+ assert.equal(release.source_predecessor.tarball_sha256,'c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9');
27
27
  assert.equal(release.runtime_predecessor.release_id,parent);
28
28
  assert.equal(provenance.runtime_predecessor.release_id,parent);
29
- assert.equal(provenance.parent_tarball_sha256,'15ab5d9808cbca342aee3f64c6d1123e8fbb72964674eab460e355c8675bf84d');
30
- assert.equal(provenance.source_predecessor_tarball_sha256,release.source_predecessor.tarball_sha256);
29
+ assert.equal(provenance.parent_tarball_sha256,'c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9');
30
+ assert.equal(provenance.source_predecessor_tarball_sha256,'c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9');
31
31
  });
32
32
  test('R179 does not misrepresent owner Autonomous enrollment, protected regression or publication as finished',async()=>{
33
33
  const [release,prov,matrix]=await Promise.all(['RELEASE.json','PROVENANCE.json','TEST-MATRIX.json'].map(read));
@@ -48,7 +48,7 @@ test('R190 retains historical R179 and R173 source evidence without promoting it
48
48
  assert.equal(release.r173.source_predecessor_version,'0.15.67');
49
49
  assert.equal(release.r173.source_predecessor_manifest_sha256,'4fd7bfc76b1de6401c142b607cc84e847434b28c888bc99ceb09c9e8e5adc8f8');
50
50
  assert.equal(prov.r173.source_predecessor_version,'0.15.67');
51
- assert.equal(release.source_predecessor.version,'0.15.73');
51
+ assert.equal(release.source_predecessor.version,'0.15.75');
52
52
  assert.notEqual(release.source_predecessor.tarball_sha256,release.r173.source_predecessor_tarball_sha256);
53
53
  });
54
54
  test('R184 ships a semantic lock snapshot matching installed package identity and dependencies',async()=>{
@@ -8,17 +8,17 @@ test('R190 candidate identity separates published source 0.15.69 from active run
8
8
  json('package.json'),json('bridge/package.json'),json('RELEASE.json'),json('PROVENANCE.json'),
9
9
  json('TEST-MATRIX.json'),json('SBOM.cdx.json'),readFile(new URL('../src/version.mjs',import.meta.url),'utf8')]);
10
10
  for(const value of [pkg.version,bridge.version,release.version,provenance.version,matrix.version,
11
- sbom.metadata.component.version])assert.equal(value,'0.15.74');
12
- assert.match(versionSource,/DEADBYTE_VERSION = '0\.15\.74'/);
13
- assert.equal(release.train,'R194');assert.equal(matrix.train,'R194');
14
- assert.equal(release.source_predecessor.version,'0.15.73');
15
- assert.equal(release.source_predecessor.tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
16
- assert.equal(release.source_predecessor.manifest_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
17
- assert.equal(release.runtime_predecessor.version,'0.15.72');
18
- assert.equal(release.runtime_predecessor.release_id,'v0.15.72-0a5d9436e06e2d9e');
19
- assert.equal(provenance.source_predecessor_version,'0.15.73');
11
+ sbom.metadata.component.version])assert.equal(value,'0.15.76');
12
+ assert.match(versionSource,/DEADBYTE_VERSION = '0\.15\.76'/);
13
+ assert.equal(release.train,'R207');assert.equal(matrix.train,'R207');
14
+ assert.equal(release.source_predecessor.version,'0.15.75');
15
+ assert.equal(release.source_predecessor.tarball_sha256,'c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9');
16
+ assert.equal(release.source_predecessor.manifest_sha256,'9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248');
17
+ assert.equal(release.runtime_predecessor.version,'0.15.75');
18
+ assert.equal(release.runtime_predecessor.release_id,'v0.15.75-9039fff265696091');
19
+ assert.equal(provenance.source_predecessor_version,'0.15.75');
20
20
  assert.equal(provenance.source_predecessor_tarball_sha256,release.source_predecessor.tarball_sha256);
21
- assert.match(sbom.serialNumber,/r194:0\.15\.74$/);
21
+ assert.match(sbom.serialNumber,/r207:0\.15\.76$/);
22
22
  });
23
23
 
24
24
  test('R190 release metadata records verified recovery without claiming publication or activation',async()=>{
@@ -6,23 +6,23 @@ import path from 'node:path';
6
6
  import {DEADBYTE_VERSION} from '../src/version.mjs';
7
7
  const root=path.resolve(fileURLToPath(new URL('..',import.meta.url)));
8
8
  const json=async f=>JSON.parse(await readFile(path.join(root,f),'utf8'));
9
- const predecessor='v0.15.72-0a5d9436e06e2d9e';
10
- const publishedManifest='0a5d9436e06e2d9e7cf9179417465955d8ca5ba88655b13dd019190243c1cc90';
11
- const publishedTarball='15ab5d9808cbca342aee3f64c6d1123e8fbb72964674eab460e355c8675bf84d';
9
+ const predecessor='v0.15.75-9039fff265696091';
10
+ const publishedManifest='9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248';
11
+ const publishedTarball='c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9';
12
12
  test('R191 exact version identity includes bundled bridge, lock snapshot, SBOM, provenance and matrix',async()=>{
13
13
  const [pkg,bridge,lock,release,provenance,matrix,bom]=await Promise.all(['package.json','bridge/package.json','docs/R184-package-lock.json','RELEASE.json','PROVENANCE.json','TEST-MATRIX.json','SBOM.cdx.json'].map(json));
14
- for(const ver of [pkg.version,bridge.version,lock.version,lock.packages[''].version,release.version,provenance.version,matrix.version,bom.metadata.component.version,DEADBYTE_VERSION])assert.equal(ver,'0.15.74');
15
- for(const train of [release.train,matrix.train])assert.equal(train,'R194');
16
- assert.equal(bom.serialNumber,'urn:cdx:deadbyte-mcp:r194:0.15.74');
14
+ for(const ver of [pkg.version,bridge.version,lock.version,lock.packages[''].version,release.version,provenance.version,matrix.version,bom.metadata.component.version,DEADBYTE_VERSION])assert.equal(ver,'0.15.76');
15
+ for(const train of [release.train,matrix.train])assert.equal(train,'R207');
16
+ assert.equal(bom.serialNumber,'urn:cdx:deadbyte-mcp:r207:0.15.76');
17
17
  assert.equal(release.parent.release_id,predecessor);
18
18
  assert.equal(provenance.parent_release_id,predecessor);
19
- assert.equal(release.source_predecessor.version,'0.15.73');
20
- assert.equal(release.source_predecessor.manifest_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
21
- assert.equal(release.source_predecessor.tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
22
- assert.equal(provenance.source_predecessor_version,'0.15.73');
19
+ assert.equal(release.source_predecessor.version,'0.15.75');
20
+ assert.equal(release.source_predecessor.manifest_sha256,publishedManifest);
21
+ assert.equal(release.source_predecessor.tarball_sha256,publishedTarball);
22
+ assert.equal(provenance.source_predecessor_version,'0.15.75');
23
23
  assert.equal(provenance.parent_tarball_sha256,publishedTarball);
24
- assert.equal(provenance.source_predecessor_tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
25
- assert.equal(provenance.source_predecessor_manifest_file_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
24
+ assert.equal(provenance.source_predecessor_tarball_sha256,publishedTarball);
25
+ assert.equal(provenance.source_predecessor_manifest_file_sha256,publishedManifest);
26
26
  assert.equal(release.r191_activation_repair.npm_publish,'NOT_RUN');
27
27
  assert.equal(release.r191_activation_repair.production_activation,'NOT_RUN');
28
28
  assert.equal(release.r190_foreground_recovery.status,'PREPUBLISH_VERIFIED');
@@ -3,21 +3,21 @@ import {readFile} from 'node:fs/promises';import {createHash} from 'node:crypto'
3
3
  import {DEADBYTE_VERSION} from '../src/version.mjs';
4
4
  const root=path.resolve(fileURLToPath(new URL('..',import.meta.url)));
5
5
  const read=async name=>JSON.parse(await readFile(path.join(root,name),'utf8'));
6
- const prevHash='0a5d9436e06e2d9e7cf9179417465955d8ca5ba88655b13dd019190243c1cc90';
7
- const prevTar='15ab5d9808cbca342aee3f64c6d1123e8fbb72964674eab460e355c8675bf84d';
6
+ const prevHash='9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248';
7
+ const prevTar='c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9';
8
8
  test('R193 current identity retains exact published R192 predecessor evidence',async()=>{
9
9
  const [pkg,bridge,lock,release,prov,matrix,bom]=await Promise.all([
10
10
  read('package.json'),read('bridge/package.json'),read('docs/R184-package-lock.json'),
11
11
  read('RELEASE.json'),read('PROVENANCE.json'),read('TEST-MATRIX.json'),read('SBOM.cdx.json')]);
12
12
  for(const actual of [pkg.version,bridge.version,lock.version,lock.packages[''].version,
13
13
  release.version,prov.version,matrix.version,bom.metadata.component.version,DEADBYTE_VERSION])
14
- assert.equal(actual,'0.15.74');
15
- assert.equal(release.train,'R194');assert.equal(matrix.train,'R194');
16
- assert.equal(bom.serialNumber,'urn:cdx:deadbyte-mcp:r194:0.15.74');
17
- assert.equal(release.parent.release_id,'v0.15.72-0a5d9436e06e2d9e');
14
+ assert.equal(actual,'0.15.76');
15
+ assert.equal(release.train,'R207');assert.equal(matrix.train,'R207');
16
+ assert.equal(bom.serialNumber,'urn:cdx:deadbyte-mcp:r207:0.15.76');
17
+ assert.equal(release.parent.release_id,'v0.15.75-9039fff265696091');
18
18
  assert.equal(release.parent.manifest_sha256,prevHash);
19
- assert.equal(release.source_predecessor.tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
20
- assert.equal(release.source_predecessor.manifest_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
19
+ assert.equal(release.source_predecessor.tarball_sha256,prevTar);
20
+ assert.equal(release.source_predecessor.manifest_sha256,prevHash);
21
21
  assert.equal(prov.parent_tarball_sha256,prevTar);
22
22
  assert.equal(prov.parent_manifest_sha256,prevHash);
23
23
  assert.equal(release.r192.production_activation,'NOT_RUN');
@@ -33,7 +33,7 @@ test('R192 foreground reader enforces caller-safe telemetry rather than changing
33
33
  assert.match(log,/sanitizeAuditArgs\(compact\[6\]\)/);
34
34
  const [policy,release]=await Promise.all([
35
35
  read('controller/deadbyte-process-policy.json'),read('RELEASE.json')]);
36
- const approved=release.r194.development_policy_root;
36
+ const approved=release.r207.development_policy_root;
37
37
  assert.equal(typeof approved,'string');
38
38
  assert.ok(path.isAbsolute(approved));
39
39
  assert.equal(path.resolve(policy.roots.core.path),path.resolve(approved));
@@ -7,40 +7,41 @@ import path from 'node:path';
7
7
  const root=fileURLToPath(new URL('..',import.meta.url));
8
8
  const json=async file=>JSON.parse(await readFile(path.join(root,file),'utf8'));
9
9
  const parent={
10
- version:'0.15.72',
11
- release_id:'v0.15.72-0a5d9436e06e2d9e',
12
- manifest_sha256:'0a5d9436e06e2d9e7cf9179417465955d8ca5ba88655b13dd019190243c1cc90',
13
- generation_manifest_sha256:'aec7b998306a3bbbcc59088648e7bc46ca7e203d749d4550b5b5f372032f92b0'
10
+ version:'0.15.75',
11
+ release_id:'v0.15.75-9039fff265696091',
12
+ manifest_sha256:'9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248',
13
+ generation_manifest_sha256:'83a212e01173c73f78cff2a6d26e6f3f50f476a8c0ea3cbbf592a466071909e9'
14
14
  };
15
- const parentTarball='15ab5d9808cbca342aee3f64c6d1123e8fbb72964674eab460e355c8675bf84d';
15
+ const parentTarball='c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9';
16
16
 
17
- test('R193 package identity binds exact active and published 0.15.72 predecessor',async()=>{
17
+ test('R207 package identity preserves the R193 owner boundary and separates R206 source from active R206 runtime',async()=>{
18
18
  const [pkg,bridge,release,provenance,matrix,sbom,versionSource]=await Promise.all([
19
19
  json('package.json'),json('bridge/package.json'),json('RELEASE.json'),json('PROVENANCE.json'),
20
20
  json('TEST-MATRIX.json'),json('SBOM.cdx.json'),readFile(path.join(root,'src','version.mjs'),'utf8')]);
21
- assert.equal(pkg.version,'0.15.74');
22
- assert.equal(bridge.version,'0.15.74');
23
- assert.match(versionSource,/DEADBYTE_VERSION = '0\.15\.74'/);
24
- assert.equal(release.version,'0.15.74');
25
- assert.equal(release.train,'R194');
21
+ assert.equal(pkg.version,'0.15.76');
22
+ assert.equal(bridge.version,'0.15.76');
23
+ assert.match(versionSource,/DEADBYTE_VERSION = '0\.15\.76'/);
24
+ assert.equal(release.version,'0.15.76');
25
+ assert.equal(release.train,'R207');
26
26
  for(const key of Object.keys(parent)){
27
27
  assert.equal(release.parent[key],parent[key]);
28
28
  assert.equal(release.runtime_predecessor[key],parent[key]);
29
29
  }
30
- assert.equal(release.source_predecessor.version,'0.15.73');
31
- assert.equal(release.source_predecessor.train,'R193');
32
- assert.equal(release.source_predecessor.manifest_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
33
- assert.equal(release.source_predecessor.tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
34
- assert.equal(provenance.version,'0.15.74');
30
+ assert.equal(release.source_predecessor.version,'0.15.75');
31
+ assert.equal(release.source_predecessor.train,'R206');
32
+ assert.equal(release.source_predecessor.manifest_sha256,parent.manifest_sha256);
33
+ assert.equal(release.source_predecessor.tarball_sha256,parentTarball);
34
+ assert.equal(provenance.version,'0.15.76');
35
35
  assert.equal(provenance.parent_release_id,parent.release_id);
36
36
  assert.equal(provenance.parent_manifest_sha256,parent.manifest_sha256);
37
37
  assert.equal(provenance.parent_generation_manifest_sha256,parent.generation_manifest_sha256);
38
- assert.equal(provenance.source_predecessor_version,'0.15.73');
39
- assert.equal(provenance.source_predecessor_tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
40
- assert.equal(matrix.version,'0.15.74');
41
- assert.equal(matrix.train,'R194');
42
- assert.equal(sbom.metadata.component.version,'0.15.74');
43
- assert.match(sbom.serialNumber,/r194:0\.15\.74$/);
38
+ assert.equal(provenance.source_predecessor_version,'0.15.75');
39
+ assert.equal(provenance.source_predecessor_train,'R206');
40
+ assert.equal(provenance.source_predecessor_tarball_sha256,parentTarball);
41
+ assert.equal(matrix.version,'0.15.76');
42
+ assert.equal(matrix.train,'R207');
43
+ assert.equal(sbom.metadata.component.version,'0.15.76');
44
+ assert.match(sbom.serialNumber,/r207:0\.15\.76$/);
44
45
  });
45
46
 
46
47
  test('R193 manifest binds every protected owner-boundary implementation file',async()=>{
@@ -50,6 +51,7 @@ test('R193 manifest binds every protected owner-boundary implementation file',as
50
51
  'scripts/r193-migrate-runtime-limited.ps1','scripts/r193-owner-keygen.mjs',
51
52
  'scripts/r193-owner-request-live.mjs','scripts/r193-owner-uac-approve.ps1',
52
53
  'scripts/r193-owner-uac-broker.mjs','scripts/r193-owner-uac-enroll-and-approve.ps1',
54
+ 'src/r195-canonical-owner-observation.mjs',
53
55
  'src/r193-live-owner-subject.mjs','src/r193-owner-secret-acl.mjs',
54
56
  'src/r193-owner-uac-broker.mjs','test/r193-release-identity.test.mjs'
55
57
  ]) assert.match(manifest,new RegExp(' '+file.replaceAll('.','\\.')+'(?:\\r?\\n|$)'));
@@ -77,11 +77,11 @@ test('R193 publisher refuses a repacked artifact that differs from closure bytes
77
77
  observedSha256:'c'.repeat(64),observedIntegrity:'sha512-other',observedShasum:'d'.repeat(40)}),/PUBLISH_BLOCKED R193.*repacked tarball/);
78
78
  });
79
79
 
80
- test('canonical npm release entrypoint enforces R193 closure before registry or pack work',async()=>{
80
+ test('canonical npm release entrypoint enforces current R207 closure before registry or pack work',async()=>{
81
81
  const root=fileURLToPath(new URL('..',import.meta.url));
82
82
  const env={...process.env};delete env.DEADBYTE_R193_CLOSURE_ROOT;
83
83
  const result=spawnSync(process.execPath,[path.join(root,'scripts','npm-release-r48.mjs'),'--publish-only'],{cwd:root,env,encoding:'utf8',windowsHide:true});
84
84
  assert.notEqual(result.status,0);
85
- assert.match(`${result.stdout}\n${result.stderr}`,/PUBLISH_BLOCKED R194.*closure root absent/);
85
+ assert.match(`${result.stdout}\n${result.stderr}`,/PUBLISH_BLOCKED R207.*closure root absent/);
86
86
  assert.doesNotMatch(`${result.stdout}\n${result.stderr}`,/npm publish|Packing artifact/);
87
87
  });
@@ -6,19 +6,19 @@ import path from 'node:path';
6
6
 
7
7
  const root=fileURLToPath(new URL('..',import.meta.url));
8
8
 
9
- test('R194 Windows gate is the canonical exact-identity prepublication gate',async()=>{
9
+ test('R207 Windows gate is the canonical exact-identity prepublication gate',async()=>{
10
10
  const [pkg,gate]=await Promise.all([
11
11
  readFile(path.join(root,'package.json'),'utf8').then(JSON.parse),
12
- readFile(path.join(root,'scripts','gate-windows-r194.ps1'),'utf8')
12
+ readFile(path.join(root,'scripts','gate-windows-r207.ps1'),'utf8')
13
13
  ]);
14
- assert.equal(pkg.scripts['gate:windows'],'powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r194.ps1 -Stage all');
15
- assert.match(gate,/0\.15\.74/);
16
- assert.match(gate,/R194/);
17
- assert.match(gate,/v0\.15\.72-0a5d9436e06e2d9e/);
18
- assert.match(gate,/0a5d9436e06e2d9e7cf9179417465955d8ca5ba88655b13dd019190243c1cc90/);
19
- assert.match(gate,/aec7b998306a3bbbcc59088648e7bc46ca7e203d749d4550b5b5f372032f92b0/);
20
- assert.match(gate,/test\/r193-release-identity\.test\.mjs/);
21
- assert.match(gate,/test\/r193-release-readiness\.test\.mjs/);
14
+ assert.equal(pkg.scripts['gate:windows'],'powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r207.ps1 -Stage all');
15
+ assert.match(gate,/0\.15\.76/);
16
+ assert.match(gate,/R207/);
17
+ assert.match(gate,/v0\.15\.75-9039fff265696091/);
18
+ assert.match(gate,/9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248/);
19
+ assert.match(gate,/83a212e01173c73f78cff2a6d26e6f3f50f476a8c0ea3cbbf592a466071909e9/);
20
+ assert.match(gate,/test\/r207-release-contract\.test\.mjs/);
21
+ assert.match(gate,/test\/r207-owner-enrollment-io\.test\.mjs/);
22
22
  assert.match(gate,/test\/r193-owner-uac-broker\.test\.mjs/);
23
23
  assert.match(gate,/test\/r70-owner-approval\.test\.mjs/);
24
24
  assert.match(gate,/test\/r89-privileged-install-boundary\.test\.mjs/);
@@ -5,28 +5,28 @@ import{fileURLToPath}from'node:url';
5
5
  import path from'node:path';
6
6
  const root=fileURLToPath(new URL('..',import.meta.url));
7
7
  const json=async n=>JSON.parse(await readFile(path.join(root,n),'utf8'));
8
- test('R194 exact release version and predecessor bind active R192 but frozen local R193 source',async()=>{
8
+ test('R207 exact release identity binds R206 source separately from active R206 runtime',async()=>{
9
9
  const [pkg,bridge,release,provenance,matrix,sbom,lock,ver]=await Promise.all([
10
10
  json('package.json'),json('bridge/package.json'),json('RELEASE.json'),json('PROVENANCE.json'),
11
11
  json('TEST-MATRIX.json'),json('SBOM.cdx.json'),json('docs/R184-package-lock.json'),
12
12
  readFile(path.join(root,'src','version.mjs'),'utf8')]);
13
13
  for(const v of [pkg.version,bridge.version,release.version,provenance.version,matrix.version,
14
- sbom.metadata.component.version,lock.version,lock.packages[''].version])assert.equal(v,'0.15.74');
15
- assert.match(ver,/DEADBYTE_VERSION = '0\.15\.74'/);
16
- assert.equal(release.train,'R194');assert.equal(matrix.train,'R194');
17
- assert.equal(sbom.serialNumber,'urn:cdx:deadbyte-mcp:r194:0.15.74');
18
- assert.equal(release.parent.release_id,'v0.15.72-0a5d9436e06e2d9e');
14
+ sbom.metadata.component.version,lock.version,lock.packages[''].version])assert.equal(v,'0.15.76');
15
+ assert.match(ver,/DEADBYTE_VERSION = '0\.15\.76'/);
16
+ assert.equal(release.train,'R207');assert.equal(matrix.train,'R207');
17
+ assert.equal(sbom.serialNumber,'urn:cdx:deadbyte-mcp:r207:0.15.76');
18
+ assert.equal(release.parent.release_id,'v0.15.75-9039fff265696091');
19
19
  assert.equal(release.runtime_predecessor.release_id,release.parent.release_id);
20
- assert.equal(release.source_predecessor.version,'0.15.73');
21
- assert.equal(release.source_predecessor.train,'R193');
22
- assert.equal(release.source_predecessor.release_status,'FROZEN_R193_RELEASE_READY_NOT_PUBLISHED');
23
- assert.equal(release.source_predecessor.manifest_sha256,'e0b3f8b333f1c1260a97b178d1a8beff5742355296a9fe7daba378612604a3bd');
24
- assert.equal(release.source_predecessor.tarball_sha256,'13c3dd23a535609aa53173b328c7d9299d5dcada684f3253a88af6a4b300c534');
25
- assert.equal(provenance.source_predecessor_version,'0.15.73');
20
+ assert.equal(release.source_predecessor.version,'0.15.75');
21
+ assert.equal(release.source_predecessor.train,'R206');
22
+ assert.equal(release.source_predecessor.release_status,'RELEASED');
23
+ assert.equal(release.source_predecessor.manifest_sha256,'9039fff265696091f9217ba4f19526c6c74a967f9ff48b75ac6e340b5f431248');
24
+ assert.equal(release.source_predecessor.tarball_sha256,'c2ebb079e7725f3a2f2c7d8f98ef42059e94e51f402d99c1825f46e020237ee9');
25
+ assert.equal(provenance.source_predecessor_version,'0.15.75');
26
26
  assert.equal(provenance.source_predecessor_tarball_sha256,release.source_predecessor.tarball_sha256);
27
- assert.equal(release.r194.scope,'NPM_AUTH_RECOVERY_AND_OWNER_AUTHORIZATION');
28
- assert.equal(release.r194.npm_publish,'NOT_RUN');
29
- assert.equal(release.r194.production_activation,'NOT_RUN');
27
+ assert.equal(release.r195.scope,'CANONICAL_PROTECTED_OWNER_OBSERVATION');
28
+ assert.equal(release.r195.npm_publish,'NOT_RUN');
29
+ assert.equal(release.r195.production_activation,'NOT_RUN');
30
30
  });
31
31
  test('R194 canonical publisher binds R194 readiness before registry/pack effects',async()=>{
32
32
  const [entry,readiness]=await Promise.all([
@@ -34,6 +34,10 @@ test('R194 canonical publisher binds R194 readiness before registry/pack effects
34
34
  readFile(path.join(root,'scripts/npm-release-readiness-r194.mjs'),'utf8')]);
35
35
  assert.match(entry,/assertR194NpmPublishReady/);
36
36
  assert.match(entry,/if\(r194Readiness\)assertR194PackedIdentity/);
37
+ assert.match(entry,/assertR195NpmPublishReady/);
38
+ assert.match(entry,/if\(r195Readiness\)assertR195PackedIdentity/);
39
+ assert.match(entry,/assertR206NpmPublishReady/);
40
+ assert.match(entry,/if\(r206Readiness\)assertR206PackedIdentity/);
37
41
  assert.match(entry,/authorizePublish:ownerAuth,authorizeAuthRetry:ownerAuth/);
38
42
  assert.match(entry,/version==='0\.15\.74'/);
39
43
  assert.match(entry,/if \(!publishOnly\)/);
@@ -77,11 +77,11 @@ test('R194 publisher refuses a repacked artifact that differs from closure bytes
77
77
  observedSha256:'c'.repeat(64),observedIntegrity:'sha512-other',observedShasum:'d'.repeat(40)}),/PUBLISH_BLOCKED R194.*repacked tarball/);
78
78
  });
79
79
 
80
- test('canonical npm release entrypoint enforces R194 closure before registry or pack work',async()=>{
80
+ test('canonical npm release entrypoint enforces current R207 closure before registry or pack work',async()=>{
81
81
  const root=fileURLToPath(new URL('..',import.meta.url));
82
- const env={...process.env};delete env.DEADBYTE_R194_CLOSURE_ROOT;
82
+ const env={...process.env};delete env.DEADBYTE_R207_CLOSURE_ROOT;
83
83
  const result=spawnSync(process.execPath,[path.join(root,'scripts','npm-release-r48.mjs'),'--publish-only'],{cwd:root,env,encoding:'utf8',windowsHide:true});
84
84
  assert.notEqual(result.status,0);
85
- assert.match(`${result.stdout}\n${result.stderr}`,/PUBLISH_BLOCKED R194.*closure root absent/);
85
+ assert.match(`${result.stdout}\n${result.stderr}`,/PUBLISH_BLOCKED R207.*closure root absent/);
86
86
  assert.doesNotMatch(`${result.stdout}\n${result.stderr}`,/npm publish|Packing artifact/);
87
87
  });
@@ -4,17 +4,18 @@ import {readFile} from 'node:fs/promises';
4
4
  import path from 'node:path';
5
5
  import {fileURLToPath} from 'node:url';
6
6
  const root=fileURLToPath(new URL('..',import.meta.url));
7
- test('R194 prepublication Windows gate keeps parent pinned and current R194 identity',async()=>{
7
+ test('R207 prepublication Windows gate keeps active R206 runtime parent pinned',async()=>{
8
8
  const [pkg,gate]=await Promise.all([
9
9
  readFile(path.join(root,'package.json'),'utf8').then(JSON.parse),
10
- readFile(path.join(root,'scripts/gate-windows-r194.ps1'),'utf8')]);
10
+ readFile(path.join(root,'scripts/gate-windows-r207.ps1'),'utf8')]);
11
11
  assert.equal(pkg.scripts['gate:windows'],
12
- 'powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r194.ps1 -Stage all');
13
- assert.match(gate,/0\.15\.74/);assert.match(gate,/R194/);
14
- assert.match(gate,/v0\.15\.72-0a5d9436e06e2d9e/);
15
- assert.match(gate,/aec7b998306a3bbbcc59088648e7bc46ca7e203d749d4550b5b5f372032f92b0/);
16
- assert.match(gate,/test\/r194-release-identity\.test\.mjs/);
17
- assert.match(gate,/test\/r194-npm-auth-recovery\.test\.mjs/);
12
+ 'powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r207.ps1 -Stage all');
13
+ assert.match(gate,/0\.15\.76/);assert.match(gate,/R207/);
14
+ assert.match(gate,/v0\.15\.75-9039fff265696091/);
15
+ assert.match(gate,/83a212e01173c73f78cff2a6d26e6f3f50f476a8c0ea3cbbf592a466071909e9/);
16
+ assert.match(gate,/test\/r207-release-contract\.test\.mjs/);
17
+ assert.match(gate,/test\/r207-owner-enrollment-io\.test\.mjs/);
18
+ assert.match(gate,/test\/r195-canonical-owner-observation\.test\.mjs/);
18
19
  assert.match(gate,/test\/r193-owner-uac-broker\.test\.mjs/);
19
20
  assert.doesNotMatch(gate,/arm(process|coding|autonomous|desktop|host)/i);
20
21
  assert.doesNotMatch(gate,/deploy|activate|npm publish/i);
@@ -0,0 +1,32 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {observeCanonicalController} from '../src/r195-canonical-owner-observation.mjs';
4
+
5
+ test('R195 protected owner flow observes the active controller through the canonical launcher',async()=>{
6
+ const calls=[];
7
+ const result=await observeCanonicalController({
8
+ stateRoot:'C:\\Users\\DEADBYTE\\.deadbyte-mcp',
9
+ powershell:'C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe',
10
+ env:{PATH:'fixture'},
11
+ execFileAsync:async(file,args,options)=>{
12
+ calls.push({file,args,options});
13
+ return {stdout:'{"state":"ONLINE","supervisor":{"running":true}}\n'};
14
+ }
15
+ });
16
+ assert.deepEqual(result,{state:'ONLINE',supervisor:{running:true}});
17
+ assert.equal(calls.length,1);
18
+ assert.equal(calls[0].file,'C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe');
19
+ assert.deepEqual(calls[0].args,[
20
+ '-NoLogo','-NoProfile','-NonInteractive','-ExecutionPolicy','Bypass','-File',
21
+ 'C:\\Users\\DEADBYTE\\.deadbyte-mcp\\bin\\DEADBYTE-MCP.ps1','status','-Json'
22
+ ]);
23
+ assert.equal(calls[0].options.shell,false);
24
+ assert.equal(calls[0].options.windowsHide,true);
25
+ });
26
+
27
+ test('R195 canonical owner observation rejects caller-selected relative state roots',async()=>{
28
+ await assert.rejects(()=>observeCanonicalController({
29
+ stateRoot:'.\\state',powershell:'powershell.exe',env:{},
30
+ execFileAsync:async()=>({stdout:'{}'})
31
+ }),/absolute state root/);
32
+ });
@@ -0,0 +1,22 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import {assertR195NpmPublishReady,assertR195PackedIdentity} from '../scripts/npm-release-readiness-r195.mjs';
4
+
5
+ const release={
6
+ version:'0.15.75',train:'R195',
7
+ parent:{version:'0.15.74',release_id:'v0.15.74-e84bf4eed16e9443',
8
+ manifest_sha256:'e84bf4eed16e9443fbd0bf9f0f562e26b01db778647aefcc8b12fd7f48636b47',
9
+ generation_manifest_sha256:'598f896be9ce65e6b0c618e8c8f6eaa2a9d91617a76a146bf3deb385a56d19e7'},
10
+ r195:{scope:'CANONICAL_PROTECTED_OWNER_OBSERVATION',public_tool_delta:0,authority_scope_delta:0}
11
+ };
12
+
13
+ test('R195 publication refuses an absent exact-byte closure before pack or registry effects',async()=>{
14
+ await assert.rejects(assertR195NpmPublishReady(release,{root:'D:\\candidate'}),/PUBLISH_BLOCKED R195.*closure root absent/);
15
+ });
16
+
17
+ test('R195 packed identity refuses any artifact differing from the protected closure',()=>{
18
+ assert.throws(()=>assertR195PackedIdentity({
19
+ tarball_sha256:'a'.repeat(64),tarball_integrity:'sha512-expected',tarball_shasum:'b'.repeat(40),
20
+ observedSha256:'c'.repeat(64),observedIntegrity:'sha512-other',observedShasum:'d'.repeat(40)
21
+ }),/PUBLISH_BLOCKED R195.*repacked tarball/);
22
+ });