deadbyte-mcp 0.15.64 → 0.15.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MANIFEST.SHA256 +64 -22
- package/PROVENANCE.json +32 -7
- package/README.txt +31 -18
- package/RELEASE.json +40 -7
- package/SBOM.cdx.json +2 -2
- package/TEST-MATRIX.json +48 -2
- package/bridge/package.json +1 -1
- package/controller/deadbyte-process-policy.json +4 -4
- package/docs/R168-ACTIVATION-RECONCILIATION-BLOCKER-20261026.md +39 -0
- package/docs/R168-CRASH-JOURNAL-PROTECTED-PREFLIGHT-20261026.md +46 -0
- package/docs/R168-FIVE-PLANE-FENCE-20261026.md +41 -0
- package/docs/R168-NATIVE-EXCLUSION-TERMINAL-CONTRACT-20261026.md +53 -0
- package/docs/R168-NPX-REMOTE-SKEW-HOTFIX-20261026.md +41 -0
- package/docs/R168-READONLY-AUDIT-AND-RESUME-20261026.md +56 -0
- package/docs/R168-SIGNED-RECONCILIATION-PRECOMMIT-20261026.md +45 -0
- package/package.json +6 -3
- package/scripts/deploy-r48.mjs +37 -4
- package/scripts/gate-windows-r167.ps1 +75 -0
- package/scripts/gate-windows-r168.ps1 +75 -0
- package/scripts/npm-release-r48.mjs +33 -3
- package/scripts/npm-release-readiness-r167.mjs +70 -0
- package/scripts/npm-release-readiness-r168.mjs +70 -0
- package/scripts/r168-audit-readonly.mjs +32 -0
- package/scripts/r168-npm-registry-readonly.mjs +19 -0
- package/scripts/r168-protected-preflight.mjs +65 -0
- package/scripts/r168-release-scan.mjs +28 -0
- package/scripts/r168-source-full-test-runner.mjs +46 -0
- package/scripts/r168-subject-readonly.mjs +49 -0
- package/src/activation-path-r167.mjs +55 -0
- package/src/activation-reconciliation-audit-r168.mjs +200 -0
- package/src/activation-reconciliation-consent-r168.mjs +235 -0
- package/src/activation-reconciliation-fence-r168.mjs +87 -0
- package/src/activation-reconciliation-journal-r168.mjs +100 -0
- package/src/activation-reconciliation-receipt-store-r168.mjs +42 -0
- package/src/activation-reconciliation-terminal-r168.mjs +111 -0
- package/src/deadbyte-cli.mjs +20 -0
- package/src/npm-publication-resume-r168.mjs +25 -0
- package/src/remote-one-shot-coherence-r168.mjs +36 -0
- package/src/version.mjs +1 -1
- package/test/process-policy-refresh.test.mjs +8 -5
- package/test/r130-release-security-contract.test.mjs +7 -7
- package/test/r132-release-identity.test.mjs +7 -7
- package/test/r153-prepublish-identity.test.mjs +2 -2
- package/test/r160-release-contract.test.mjs +4 -12
- package/test/r163-isolated-slot-rollback-restore.test.mjs +2 -2
- package/test/r165-live-cli-skew.test.mjs +7 -7
- package/test/r167-activation-path.test.mjs +124 -0
- package/test/r167-release-contract.test.mjs +51 -0
- package/test/r167-release-readiness.test.mjs +27 -0
- package/test/r168-combined-targeted-runner.mjs +14 -0
- package/test/r168-crash-journal.test.mjs +149 -0
- package/test/r168-five-plane-fence-runner.mjs +11 -0
- package/test/r168-five-plane-fence.test.mjs +128 -0
- package/test/r168-focused-suite.test.mjs +4 -0
- package/test/r168-native-five-plane-runner.mjs +11 -0
- package/test/r168-native-five-plane-scratch.test.mjs +49 -0
- package/test/r168-native-r85-protected-scratch.test.mjs +44 -0
- package/test/r168-npm-resume-identity.test.mjs +49 -0
- package/test/r168-owner-reconciliation-contract.test.mjs +250 -0
- package/test/r168-protected-entrypoint.test.mjs +53 -0
- package/test/r168-reconciliation-audit.test.mjs +42 -0
- package/test/r168-release-contract.test.mjs +56 -0
- package/test/r168-remote-one-shot-coherence.test.mjs +65 -0
- package/test/r59-tool-surface-compat.test.mjs +1 -1
- package/test/r63-one-shot-coherence.test.mjs +10 -5
- package/node_modules/which/CHANGELOG.md +0 -166
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# R168 activation reconciliation blocker
|
|
2
|
+
|
|
3
|
+
Status: DEVELOPMENT_SUCCESSOR_ONLY / PRODUCTION_UNCHANGED
|
|
4
|
+
|
|
5
|
+
## Verified publication
|
|
6
|
+
|
|
7
|
+
- `deadbyte-mcp@0.15.65` was accepted by npm and reconciled to `REGISTRY_IDENTITY_VERIFIED`.
|
|
8
|
+
- Registry `latest` is `0.15.65`.
|
|
9
|
+
- Registry and local tarball SHA-256: `fc3ae5b1505e316bc9dfedf8d063cb00641754c8f5f1306a31f8cc4bb84c9484`.
|
|
10
|
+
- npm integrity: `sha512-f/oM6h4yU7HBWr/x3OOnwIAuVpDB7ZE45FCc/NF/1yVqha1KTudXHUiMolUpvNiYsZPfiHcPn5SwNoes7kxaTA==`.
|
|
11
|
+
- npm shasum: `e21c96b0340a02112a3128d85ccc1cb158b7d0f8`.
|
|
12
|
+
- A fresh-cache external invocation returned version `0.15.65`.
|
|
13
|
+
|
|
14
|
+
## Activation attempt
|
|
15
|
+
|
|
16
|
+
- R167 protected preflight from `C:\Program Files\DEADBYTE-R167-Protected-0.15.65-3316654646cc8705-Fix6` returned `ONLINE_READY`, `EPOCH_NATIVE`, and `TRUSTED_READY`.
|
|
17
|
+
- Captured authority vector was Coding armed only; Process, Autonomous, Desktop, and Host were disarmed.
|
|
18
|
+
- The canonical activation attempt was rejected before candidate mutation with `CONCURRENT_ACTIVATION` because the preserved R166/R65 activation claim is unresolved.
|
|
19
|
+
|
|
20
|
+
## Preserved ambiguous evidence
|
|
21
|
+
|
|
22
|
+
- Lock operation: `c84d7ffa4eee80a2f467acda3ddd9332`.
|
|
23
|
+
- Lock subject: `fba80e0128da9657dcbfcaa27d3a4dc8d9d8939146e81a097293fa5fcb6ae8fc`.
|
|
24
|
+
- Outcome file: `C:\Users\DEADBYTE\.deadbyte-mcp\evidence\updates\r65-activation-outcome-1792993876612-cc7c498632c7757d.json`.
|
|
25
|
+
- Candidate was `0.15.64`, update/state paths are null, and the outcome remains `ACTIVATION_OUTCOME_UNKNOWN` after an R89 `UNTRUSTED_WRITE_ACE` failure.
|
|
26
|
+
- The outcome contains continuity id `r65-ef42bc84451ce024c4dee736d4047b36`; no matching continuity record was found in the bounded evidence search. Absence alone is not terminal proof and does not authorize deleting the claim.
|
|
27
|
+
|
|
28
|
+
## Live state after rejection
|
|
29
|
+
|
|
30
|
+
- Active release remains `v0.15.61-055d1ff0aa99e60b`.
|
|
31
|
+
- Active manifest remains `055d1ff0aa99e60bbf9e9f136b02ebd4fffb8391712560f7607cff30af94dcdf`.
|
|
32
|
+
- Runtime is ONLINE with Bridge/Core/Cloud verified and supervisor RUNNING.
|
|
33
|
+
- Coding is still ARMED; all other planes are DISARMED.
|
|
34
|
+
|
|
35
|
+
## Required next boundary
|
|
36
|
+
|
|
37
|
+
Implement a narrow signed reconciliation contract in this isolated successor. It must prove the old continuity transition never reached a durable epoch mutation by binding the exact old claim/outcome, predecessor pointer, current verified authority head/grant, policy hashes, and complete bounded continuity evidence inventory. Only a verified no-mutation reconciliation receipt may terminalize the old claim. Never delete the lock from age, PID, missing files, or an unsigned observation. Also fix npm publication resume so preserved claim metadata supplies the original shasum/integrity instead of passing `undefined` to the R167 closure guard.
|
|
38
|
+
|
|
39
|
+
No R168 publication or production activation is authorized by this document.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# R168 — Crash journal and protected preflight engineering evidence
|
|
2
|
+
Date: 2026-10-26
|
|
3
|
+
Status: R168_SCRATCH_E2E_VERIFIED / PROTECTED_PRODUCTION_GATE_PENDING / ACTIVATION_NOT_RUN
|
|
4
|
+
|
|
5
|
+
## Production left unchanged
|
|
6
|
+
- Active machine release observed before engineering: v0.15.61-055d1ff0aa99e60b
|
|
7
|
+
- Active release SHA-256: 055d1ff0aa99e60bbf9e9f136b02ebd4fffb8391712560f7607cff30af94dcdf
|
|
8
|
+
- Coding standing-grant ARMED and no new authority requested
|
|
9
|
+
- Production old claim c84d7ffa4eee80a2f467acda3ddd9332 not deleted
|
|
10
|
+
- No production owner Ed25519 authorization available
|
|
11
|
+
- 0.15.65 published is NOT activated, 0.15.66 not published
|
|
12
|
+
|
|
13
|
+
## New R168 work (isolated successor only)
|
|
14
|
+
1. src/activation-reconciliation-journal-r168.mjs
|
|
15
|
+
SHA-256 f5b2b82f830bfeaa1c1c20cf8020dc0b0ff6437072e67c48adf96cbebe4cb7d7
|
|
16
|
+
Exclusive "wx" terminal intent, file fsync, readback, exact owner approval/prepared receipt binding and one-use nonce. Read-only restart classification:
|
|
17
|
+
- PRECOMMIT_CLAIM_PRESENT_BLOCKED
|
|
18
|
+
- CLAIM_CHANGED_BLOCKED
|
|
19
|
+
- CAS_OUTCOME_UNKNOWN_BLOCKED
|
|
20
|
+
- TERMINAL_VERIFIED_ACTIVATION_SEPARATE
|
|
21
|
+
NO path-delete, authority revoke/restore, auto-retry or auto-activation.
|
|
22
|
+
2. test/r168-crash-journal.test.mjs
|
|
23
|
+
SHA-256 44818657894db72a0ead65e96e734f30c11f10f5914e2c4e2961ee3a3e5b2c70
|
|
24
|
+
Five pure fixture crash/interruption cases PLUS a live scratch Win32 integration test. The latter uses the protected R167 0.15.65 R85 addon and the REAL FileIdInfo-pinned native CAS against one disposable simulated claim while all five native R85 locks are held. It verifies intent-before-CAS, claim readback, signed terminal fixture and lock cleanup. Does NOT touch production claim.
|
|
25
|
+
3. scripts/r168-protected-preflight.mjs
|
|
26
|
+
SHA-256 c8b3551936ff7e24d851d6cad580d11fbf495150558d963b7215230481412e2e
|
|
27
|
+
Read-only gate requires C:\Program Files, future exact R168/0.15.66 candidate identity, all critical reconciliation sources in the manifest, complete installed-tree byte verification and R89 ACL trust before reporting READY. Rejects skip flags. No CAS, owner signing, grant changes or activation.
|
|
28
|
+
4. test/r168-protected-entrypoint.test.mjs
|
|
29
|
+
SHA-256 e65c5a762c769ce065d58ce6b75d800609b62a9221f839086129e106bf335980
|
|
30
|
+
Confirms writable D: successor is rejected, skip-trust rejected and no mutation functions in preflight.
|
|
31
|
+
5. test/r168-combined-targeted-runner.mjs
|
|
32
|
+
SHA-256 f815c24b39c8f2cc14bc4567d0812df70858a755e6839fadf4106a449ad54f9e
|
|
33
|
+
Windows observed 42 PASS / 0 FAIL / 0 SKIP, signed execution receipt d4e645ee50b7244bbc2d7054, receipt SHA-256 5f1f95a7e32afe01044fa8c360065c4c1f75f935957aa3f03b23cb4e06f40dda
|
|
34
|
+
Includes both simulated five-plane cases and one real Native R85 held-handle + FileId CAS scratch case.
|
|
35
|
+
|
|
36
|
+
## Critical limitations / next gate
|
|
37
|
+
- The R168 source working directory still carries R167/0.15.65 package metadata and the old manifest. This is deliberate NOT a releasable 0.15.66 artifact. The new preflight currently DENIES execution from D: as intended. Full R168 manifest, packaging and protected installation are NOT verified.
|
|
38
|
+
- Journal tests simulate crash outcomes by reopening durable files; they do not establish power-loss-safe parent-directory fsync or signed production crash recovery. The journal file and containing directory still require a protected, handle-pinned commit protocol.
|
|
39
|
+
- The real scratch native CAS test runs with fixture Ed25519 keys, synthetic epoch histories and a disposable claim. It does NOT prove live signed five-plane epoch history/pointer continuity inside a production owner-approved transaction.
|
|
40
|
+
- The production commit entrypoint has NOT been implemented. Must use protected R168 source, real owner-signed subject, exclusive native five-plane R85 fence, final signed audit, native FileId CAS only for exact old claim, signed terminal result and durable crash readback, with activation a separately authorized later operation.
|
|
41
|
+
- If the claim is absent without a valid terminal receipt, remain blocked (do not replay or invent terminal success).
|
|
42
|
+
- The owner has not supplied an independently pinned Ed25519 public key/approval. Do not create or treat ephemeral test keys as production authority.
|
|
43
|
+
- No npm publish, R65 claim deletion, Coding grant change, pointer change, activation or standing authorization mutation was performed in this work.
|
|
44
|
+
|
|
45
|
+
## Already-published option
|
|
46
|
+
Existing deadbyte-mcp@0.15.65 can be invoked in an isolated npm CLI process for read-only version/doctor checks without switching ChatGPT's production bridge. The production bridge remains on 0.15.61 until the strict activation gate is passed.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# R168 five-plane epoch exclusion — observed engineering result
|
|
2
|
+
Date: 2026-10-26
|
|
3
|
+
Status: SIMULATED_EXCLUSION_GREEN / R85_PROTECTED_NATIVE_NOT_RUN / NO_PRODUCTION_MUTATION
|
|
4
|
+
|
|
5
|
+
## Exact source
|
|
6
|
+
- Isolated successor: D:\Projects\deadbyte-mcp\development\deadbyte-mcp-0.15.66-r168-activation-reconcile
|
|
7
|
+
- src/activation-reconciliation-fence-r168.mjs SHA-256 585f0abd6fd9747448b8345bd5b51e80b458eaac162770bc74928242a0cc1549
|
|
8
|
+
- test/r168-five-plane-fence.test.mjs SHA-256 680e97d56a76de152d78c17865c37d627ca9b7c9424edff10565a7a42485170a
|
|
9
|
+
- test/r168-five-plane-fence-runner.mjs SHA-256 4be327e980dba25723d4c5149f501de8fb591b86bba39210f714dc95a4d6a8f0
|
|
10
|
+
- test/r168-combined-targeted-runner.mjs SHA-256 8e6fb457134b9157be68334c0e091de6fdf73afbb1101d3c06754658d82c37bb
|
|
11
|
+
|
|
12
|
+
## Evidence
|
|
13
|
+
- RED: five tests fail on unimplemented fence, signed receipt c766ff7c0d433e6324128617.
|
|
14
|
+
- GREEN with Node --test worker simulation: eight tests PASS / zero FAIL.
|
|
15
|
+
- Combined R168 focused suite: 25 PASS / zero FAIL, receipt 53183186a60bcad87448201e, signature verification pending independent check.
|
|
16
|
+
- Five-plane sequence: process -> coding -> autonomous -> desktop -> host. Held until callback returns; release in reverse.
|
|
17
|
+
- Full-set directory checks precede any native acquisition. No silent stale-lock recovery.
|
|
18
|
+
- If one plane is locked, callback is never invoked and acquired handles release in reverse.
|
|
19
|
+
- If audit work throws, acquired handles are released; release ambiguity is not suppressed.
|
|
20
|
+
- A simulated concurrent ordinary append cannot acquire the held per-plane lock.
|
|
21
|
+
- The production exported API cannot accept injected/mock acquisitions, including in Node test worker.
|
|
22
|
+
- Simulation exported as separate non-authoritative helper; it is NEVER proof of R85/R89 trust.
|
|
23
|
+
|
|
24
|
+
## Connection to existing native authority semantics
|
|
25
|
+
- Existing authority-continuity-r65.mjs append uses per-plane authority-epochs/<plane>/.lock.
|
|
26
|
+
- Existing epoch-lock-r85.mjs acquires with the Windows x64 native addon, validates R89 protected installed root, metadata and addon source/digest.
|
|
27
|
+
- Existing native/deadbyte-epoch-lock-r85.cpp holds an exclusive handle with non-reparse ancestor pins. The implementation uses FileRenameInfo on a new temporary leaf and releases by FileDispositionInfo on that held handle.
|
|
28
|
+
- R168 reads and guards all five planes under the same native lock paths, but an actual protected native integration test is still required.
|
|
29
|
+
|
|
30
|
+
## Remaining release/activation blockers
|
|
31
|
+
1. Candidate metadata still describes 0.15.65/R167: package.json, RELEASE.json and source manifest cannot be used as a final 0.15.66 release.
|
|
32
|
+
2. Exclusive fence is simulated only; exact R168 source must be installed and R89-verified in Program Files, then native exclusion tested there.
|
|
33
|
+
3. Protected owner Ed25519 key must be independently provisioned and pinned, with a fresh one-time owner approval to the exact claim and FileId.
|
|
34
|
+
4. Atomic signed terminal intent/CAS/readback needs an implementation whose authorization, crash-recovery and claim-gating paths are protected; no production deletion has been wired.
|
|
35
|
+
5. Before any activation, recheck same live predecessor, Coding grant, signed five-plane heads, existing old R65 claim and full evidence.
|
|
36
|
+
6. Full protected Windows regression, exact npm package and registry release verification remain pending for 0.15.66. Existing published npm 0.15.65 is unchanged.
|
|
37
|
+
|
|
38
|
+
## Never infer
|
|
39
|
+
- 25 PASS simulation is not evidence that 0.15.65 or 0.15.66 activated.
|
|
40
|
+
- No signed R168 owner approval has been given.
|
|
41
|
+
- No runtime authority, claim, UAC grants, npm tags or production pointer were changed.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# R168 — native exclusion and terminal evidence engineering report
|
|
2
|
+
Date: 2026-10-26
|
|
3
|
+
Status: NATIVE_SCRATCH_VERIFIED / CONTRACT_GREEN / LIVE_RECONCILIATION_NOT_RUN
|
|
4
|
+
|
|
5
|
+
## Current machine identity
|
|
6
|
+
- Live DEADBYTE MCP runtime: v0.15.61-055d1ff0aa99e60b ONLINE
|
|
7
|
+
- Live manifest SHA-256: 055d1ff0aa99e60bbf9e9f136b02ebd4fffb8391712560f7607cff30af94dcdf
|
|
8
|
+
- Coding plane: ARMED standing-grant; policy SHA-256 e1351f62567a58ed2444211b2bfc7c0ffceb2eec30895a47594f1974b45f9783
|
|
9
|
+
- Prior ambiguous R65 activation claim and outcome unchanged. R168 owner signature NOT PRESENT.
|
|
10
|
+
- Published npm 0.15.65 remains separate from runtime activation. No publish or activation was attempted.
|
|
11
|
+
|
|
12
|
+
## Verified changes in isolated R168 successor
|
|
13
|
+
- src/activation-reconciliation-fence-r168.mjs
|
|
14
|
+
SHA-256 585f0abd6fd9747448b8345bd5b51e80b458eaac162770bc74928242a0cc1549
|
|
15
|
+
Non-injectable protected production entrypoint; calls R85 native held-handle addon (which enforces R89) on the same .lock used by authority append, in order process/coding/autonomous/desktop/host.
|
|
16
|
+
All five directories must already exist. Acquired handles are released in reverse. Missing/busy or ambiguous release is fail-closed. No stale automatic reclaim.
|
|
17
|
+
Separate test-only simulator exists; it is not production authority, and production API rejects injected acquisitions.
|
|
18
|
+
- src/activation-reconciliation-consent-r168.mjs
|
|
19
|
+
SHA-256 a82b05e1c521cc77f3398985d6faa1beb0fe8f65595f50bed474227550d462c5
|
|
20
|
+
Strict subject field shape, Ed25519 owner/machine key independence on create AND verify, time-bounded one-time approval, no extra machine-signed authority fields.
|
|
21
|
+
- src/activation-reconciliation-terminal-r168.mjs
|
|
22
|
+
SHA-256 c1e2672913b70f3f922d7ff4690bb4934cf58147999da9f926d77de8126da44a
|
|
23
|
+
Pure signed terminal-result create/verify contract. Rejects any CAS outcome except REMOVED and observed claim absence. Requires exact predecessor pointer, outcome, Coding grant/policy and five signed epoch histories unchanged.
|
|
24
|
+
Archived terminal receipts remain cryptographically verifiable after owner approval expires, but expired approval cannot authorize NEW terminalization.
|
|
25
|
+
IMPORTANT: this module does NOT perform native CAS, read production files, load signing keys, or create any production terminal receipt.
|
|
26
|
+
|
|
27
|
+
## Windows observed test evidence
|
|
28
|
+
- Combined targeted suite: 33 PASS, 0 FAIL. Runner: test/r168-combined-targeted-runner.mjs, SHA-256 8e6fb457134b9157be68334c0e091de6fdf73afbb1101d3c06754658d82c37bb.
|
|
29
|
+
Signed execution receipt: a348c16de229a71112982f0a; SHA-256 310e4083c04469c6b8c5792d25f5571130cbe9ba5f1b9d0c4c2dc6e4021c14bb.
|
|
30
|
+
- Actual R85 protected addon on one scratch lock: 1 PASS, 0 FAIL.
|
|
31
|
+
Source: C:\Program Files\DEADBYTE-R167-Protected-0.15.65-3316654646cc8705-Fix6
|
|
32
|
+
Fixture MANIFEST.SHA256 verified SHA-256: 3316654646cc870584a7c969c2032af6c795229ff8c65e5a8b794f97c2458c41
|
|
33
|
+
Signed execution receipt: 7f2b90542e03ab543ebe8ea1; SHA-256 1ff47595595df331b9d2e546be264b8b0b787db8d30ff8e85a80e70f72b88d11.
|
|
34
|
+
Two contenders cannot simultaneously acquire the same native lock. Release removes lock and permits reacquisition.
|
|
35
|
+
- Actual R85 addon on all FIVE scratch-plane locks held concurrently: 1 PASS, 0 FAIL.
|
|
36
|
+
Signed execution receipt: f3f6f17ea14ce6b2c5438b19; SHA-256 17b349ef0a41eeee969347f4f26d4a370a67a9f0f15914c6c78d3a3363f16f36.
|
|
37
|
+
Competing acquisition for each held native lock returned null. All five files absent after release. No production authority paths touched.
|
|
38
|
+
- Live read-only old claim identity remains stable:
|
|
39
|
+
Old operation c84d7ffa4eee80a2f467acda3ddd9332
|
|
40
|
+
Subject SHA-256 b9353eb0e1b20aff9a8af472def677df7b5a9fc21d85a9ccd67b46ddc4b02d83
|
|
41
|
+
Native FileIdInfo 526e54a56e54841f:79c90100000033000000000000000000
|
|
42
|
+
Signed history 134 events. Runner receipt 5a4fc88d132616cb0595081b.
|
|
43
|
+
- All four listed signed execution receipts independently verified with signature_valid=true.
|
|
44
|
+
|
|
45
|
+
## Remaining strict blockers before real use of published 0.15.65 as production
|
|
46
|
+
1. Build a protected exact-byte R168 reconciliation entrypoint and full signed journal with explicit crash-recovery design. R168 source still carries R167/0.15.65 package metadata and old MANIFEST.SHA256; release gate has NOT run for 0.15.66.
|
|
47
|
+
2. Run five-plane Native R85 exclusion with the FINAL real signed audit and native FileIdInfo snapshot under those held handles in an R89 protected R168 entrypoint.
|
|
48
|
+
3. Bind a properly provisioned independent owner Ed25519 public key and obtain per-claim signed owner approval. No owner key provisioned/approved in this session.
|
|
49
|
+
4. Write an exclusive, durable terminal intent proof before any production CAS; make every activation entrypoint honor unresolved intent. Validate windows crash/restart ambiguity and prohibit silent retry.
|
|
50
|
+
5. Under exclusive handles and approved intent, use native handle-identity+SHA-256 CAS only for exact old claim, verify no claim file remains, inspect all five heads/pointer/grant again, and record a durable signed terminal result. On any uncertain result stop without reenabling authority.
|
|
51
|
+
6. Only after separate authorization, perform R167/0.15.65 production activation with signed restoration/rollback proof and remote readback. Do not merge publication with activation.
|
|
52
|
+
|
|
53
|
+
No one has yet authorized or executed production claim removal. No production grants, pointer, R65 lock or npm release tag was changed by this R168 session.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# R168 — npm cache CLI remote skew / accidental activation hotfix
|
|
2
|
+
Date: 2026-10-26
|
|
3
|
+
Status: SOURCE_HOTFIX_VERIFIED / 48_TARGETED_PASS / LIVE_REMOTE_STATUS_PASS / NOT_PUBLISHED / NOT_ACTIVATED
|
|
4
|
+
|
|
5
|
+
## User-observed bug in published deadbyte-mcp@0.15.65
|
|
6
|
+
- `npx deadbyte-mcp@latest remote status` auto-executed Runtime 0.15.61 -> 0.15.65 activation.
|
|
7
|
+
- Invocation originated from a writable npm _npx cache path and called deploy-r48.mjs without required --authority-epoch-root.
|
|
8
|
+
- R167 denied with '--authority-epoch-root requires a path'. This is expected fail-closed enforcement and NOT proof of a damaged release.
|
|
9
|
+
- A series of `npx@latest remote armprocess/armcoding/...` commands triggered the same unwanted activation attempt. Do not repeat these commands to arm existing production.
|
|
10
|
+
|
|
11
|
+
## Engineering fix in isolated R168 successor
|
|
12
|
+
- `src/remote-one-shot-coherence-r168.mjs`: pure classification of read-only status commands vs authority/runtime operations when npm CLI version differs from active pointer version. No state writes.
|
|
13
|
+
- `src/deadbyte-cli.mjs`: before any one-shot coherence upgrade, read the active release and select dispatch:
|
|
14
|
+
1. `status`, `processstatus`, `codingstatus`, `autonomousstatus`, `desktopstatus`, `hoststatus` on skew directly call installed active launcher and issue a VERSION SKEW notice without running npm-cache deployment.
|
|
15
|
+
2. All arm/disarm/restart and other one-shot actions on skew fail closed before runtime activation, session cleanup or grant mutation.
|
|
16
|
+
3. Coherent version still goes through original manifest identity and signed coherence checks.
|
|
17
|
+
- Bare foreground `remote` is guarded BEFORE foreground marker acquisition, session recovery and synchronizeForegroundRuntime. On skew, rejects without touching authority. Do not launch foreground remote as an observation substitute: by existing implementation, default foreground session can disarm existing grants on entry/cleanup.
|
|
18
|
+
- The published 0.15.65 package is IMMUTABLE and DOES NOT contain the hotfix. Candidate metadata/manifest for 0.15.66 not yet finalized, and no npm publication authorized.
|
|
19
|
+
|
|
20
|
+
## Live evidence
|
|
21
|
+
- R168 one-shot regression: 6 PASS / 0 FAIL.
|
|
22
|
+
- Combined R168 focused regression: 48 PASS / 0 FAIL.
|
|
23
|
+
- Combined runner: `test/r168-combined-targeted-runner.mjs`, SHA256 eb5a5e73fd0284297959f4e6ca1631ebf0f23749c56ec1b4cc75cad5f8f1ca6b
|
|
24
|
+
- Signed combined execution receipt: 5af81da9912af1c0c7026688 (signature_valid=true); receipt SHA-256 1d12fe7539d2df5e36bf4c5d6b4fe69a1978f6984f67e1dd2dba12f7c1c54392.
|
|
25
|
+
- Live execution of the R168 successor CLI `remote status`: exit 0; displayed current 0.15.61 ONLINE, Bridge/Core/Cloud verified, Coding ARMED; printed VERSION SKEW. Receipt: e1c1b5b291b0e43766f88767, signature_valid=true.
|
|
26
|
+
- Live `remote armcoding` from R168 successor: exit 1, explicit version skew without calling the controller. Receipt 30f59d4947ffc58edecf985c, signature_valid=true.
|
|
27
|
+
- Live bare `remote` from R168 successor: exit 1 on skew BEFORE a foreground session is claimed.
|
|
28
|
+
- Machine identity after tests: v0.15.61-055d1ff0aa99e60b ONLINE. Coding still ARMED standing-grant.
|
|
29
|
+
|
|
30
|
+
## Operator-safe immediate use
|
|
31
|
+
- Read current connected runtime with the installed stable launcher (not npx latest):
|
|
32
|
+
`& "$HOME\.deadbyte-mcp\bin\DEADBYTE-MCP.ps1" status -Json`
|
|
33
|
+
- Or read active pinned version with `npx -y deadbyte-mcp@0.15.61 remote status` when exact published byte identity is verified.
|
|
34
|
+
- Do NOT chain `npx@latest remote arm*`; each command tries incompatible automatic deployment from npm cache.
|
|
35
|
+
- No need to re-arm Coding: the installed runtime's Coding remains ARMED.
|
|
36
|
+
- If a previous npm foreground process remains interactive, end that foreground npm process only; do not stop the existing DEADBYTE bridge or delete R65 claims.
|
|
37
|
+
|
|
38
|
+
## Still blocked / next release gate
|
|
39
|
+
- R168 successor source still holds R167 0.15.65 package version and old manifest; targeted tests alone do not justify a 0.15.66 publication.
|
|
40
|
+
- Complete separate protected R168 exact-byte release installation, R89 ACL check, full regression, npm packaging closure, and controlled registry publish.
|
|
41
|
+
- Owner-approved terminal reconciliation of old unknown R65 activation claim and independent post-switch activation checks remain required. No production claim deleted, no grants changed.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# R168 — observed read-only reconciliation evidence
|
|
2
|
+
Status: READONLY_AUDIT_PASS / CLAIM_NOT_TERMINALIZED / PRODUCTION_UNCHANGED
|
|
3
|
+
Date: 2026-10-26
|
|
4
|
+
|
|
5
|
+
## Verified Windows observation
|
|
6
|
+
R168 diagnostic command ran via DEADBYTE Coding and returned exit 0.
|
|
7
|
+
- Runner: scripts/r168-audit-readonly.mjs
|
|
8
|
+
- Runner SHA-256: f39904be19bacf16344232e5722a210b74a96c844a1ee0b59e66cdfe41169478
|
|
9
|
+
- Source: src/activation-reconciliation-audit-r168.mjs
|
|
10
|
+
- Source SHA-256: 467268f6f195e9359b819e35c8b418c81e1cb40c9ba04b990fd2656e354c65a5
|
|
11
|
+
- Signed execution receipt: 273b5b7acd1959ce3a694748
|
|
12
|
+
- Receipt SHA-256: 00e16f59375a8756ac385930ba8298470f4b3ba94010637a523e6a45b1425a56
|
|
13
|
+
- Receipt verification: signature_valid=true
|
|
14
|
+
|
|
15
|
+
Audit result: NO_MATCHING_TRANSACTION_OBSERVED
|
|
16
|
+
- Observation SHA-256: ea486f693d525267d1137b3a903373a155fb1a1b8ffdec7bbd13da3fba14ed7c
|
|
17
|
+
- Old claim: c84d7ffa4eee80a2f467acda3ddd9332
|
|
18
|
+
- Old claim SHA-256: 6ca42d7d0ea784526e3d4bc59309649503f326d8cae518f46622b44419aed748
|
|
19
|
+
- Old outcome SHA-256: 03242edda1bcc09a1abdd954991e8fe31cf201b119fc4229635bd2dd64bcde82
|
|
20
|
+
- Old continuity id: r65-ef42bc84451ce024c4dee736d4047b36
|
|
21
|
+
- Predecessor pointer SHA-256: db806f3353e4ca435a5a3c323b9ddc8e34d719cee43a5193722f8010971050d4
|
|
22
|
+
- Coding policy SHA-256: e1351f62567a58ed2444211b2bfc7c0ffceb2eec30895a47594f1974b45f9783
|
|
23
|
+
- Coding grant SHA-256: 7be43f8421a5bc039e85844ade20d13d02f80cf6b17c7a21537a8080bbfdfb12
|
|
24
|
+
- Coding epoch head SHA-256: e10e59ce8dbaddc8b7635cfe998d1bd20ac0f53b86b3d34bb2a353bb5670a7e3
|
|
25
|
+
- Update inventory: 376 entries; one exact matching old outcome; no R27 candidate prefix for 0.15.64
|
|
26
|
+
- Full signed epoch history: process 27, coding 29, autonomous 24, desktop 28, host 26; total 134 events
|
|
27
|
+
- Every signed event predates old activation claim; none names the old continuity update ID
|
|
28
|
+
- Coding grant remains trusted against signed head
|
|
29
|
+
- Process, Autonomous, Desktop, Host grant files all absent
|
|
30
|
+
- Process, Desktop, Host have historical grant heads without current grant file; that is not an active grant
|
|
31
|
+
- Claim, outcome and pointer hashes unchanged across the audit
|
|
32
|
+
- This is an observation, not a signed R168 terminalization certificate. terminalization_authorized=false.
|
|
33
|
+
|
|
34
|
+
## Source changes in isolated R168 successor
|
|
35
|
+
- src/activation-reconciliation-audit-r168.mjs: read-only bound inspection, complete signed epoch history checks, grant/policy/pointer comparisons, fail-closed output
|
|
36
|
+
- scripts/r168-audit-readonly.mjs: exact old-claim runner with source SHA-256 pin; no writes
|
|
37
|
+
- test/r168-reconciliation-audit.test.mjs: 5 PASS / 0 FAIL
|
|
38
|
+
- src/npm-publication-resume-r168.mjs: derives integrity, shasum and SHA-256 from a claim-bound preserved tarball; rejects mismatches
|
|
39
|
+
- scripts/npm-release-r48.mjs: uses the complete preserved resume record and checks source manifest against old immutable claim; no npm invocation performed
|
|
40
|
+
- test/r168-npm-resume-identity.test.mjs: RED first 0/3, GREEN final 5/5 including publisher parser syntax
|
|
41
|
+
- Signed GREEN receipt: 229ff91a2207785c8c142525, SHA-256 31b7f9f74ce1d59c0d8bb260b3bb870c6b84c6fd1504e6e9144ae17335d1ee5e
|
|
42
|
+
|
|
43
|
+
## Still blocked
|
|
44
|
+
Do NOT delete old claim, replay old mutation, activate 0.15.65, publish 0.15.66, or change ACL, authority grants or the active pointer.
|
|
45
|
+
|
|
46
|
+
Required next engineering stage is an independent signed reconciliation contract that:
|
|
47
|
+
1. Re-runs complete read-only R168 audit immediately before commit.
|
|
48
|
+
2. Binds exact claim/outcome/pointer hash, full signed epoch heads/history inventory, Coding grant/policy, old continuity ID, and the expected operator-approved subject.
|
|
49
|
+
3. Requires an exact ACL-protected release entrypoint before accessing owner signing authority or touching the claim.
|
|
50
|
+
4. Writes a verifiable one-use owner-authorized Ed25519 reconciliation attestation with exclusive no-clobber receipt semantics.
|
|
51
|
+
5. Confirms active runtime and all authority planes again.
|
|
52
|
+
6. Uses Win32 ancestor/leaf-handle-pinned CAS to remove only the exact old claim after approval, never age/PID-based unlink.
|
|
53
|
+
7. Records the signed terminal outcome and confirms state unchanged. If any step is ambiguous, stop without retrying the activation.
|
|
54
|
+
8. Separately closes R168 version metadata, manifest, protected full Windows suite and exact artifact release gates before any new npm publication.
|
|
55
|
+
|
|
56
|
+
No production mutation or R168 publication was performed in this session.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# R168 — owner authorization precommit engineering evidence
|
|
2
|
+
Status: PRECOMMIT_CONSENT_VERIFIED / NATIVE_CAS_NOT_RUN / CLAIM_UNCHANGED
|
|
3
|
+
Date: 2026-10-26
|
|
4
|
+
|
|
5
|
+
## Existing evidence and identity
|
|
6
|
+
- Production: v0.15.61-055d1ff0aa99e60b ONLINE and Coding ARMED.
|
|
7
|
+
- Old claim operation: c84d7ffa4eee80a2f467acda3ddd9332
|
|
8
|
+
- Old outcome: ACTIVATION_OUTCOME_UNKNOWN for 0.15.64 after R89 UNTRUSTED_WRITE_ACE.
|
|
9
|
+
- Read-only observation SHA-256: ea486f693d525267d1137b3a903373a155fb1a1b8ffdec7bbd13da3fba14ed7c
|
|
10
|
+
- Claim exact SHA-256: 6ca42d7d0ea784526e3d4bc59309649503f326d8cae518f46622b44419aed748
|
|
11
|
+
- Native Win32 File ID: 526e54a56e54841f:79c90100000033000000000000000000
|
|
12
|
+
- R168 signed subject SHA-256: b9353eb0e1b20aff9a8af472def677df7b5a9fc21d85a9ccd67b46ddc4b02d83
|
|
13
|
+
- Subject derivation read the claim twice through native FileIdInfo-pinned handles, compared exact identity around a fresh signed five-plane audit, and did not modify any release.
|
|
14
|
+
- Signed command receipt: 8e5ea7840e605eadef6de76a
|
|
15
|
+
- Signed command receipt SHA-256: 1a67398d72c7c66eb66308301a4b9431ecd7ce77d3b2ab56c77996fb5e38b046
|
|
16
|
+
|
|
17
|
+
## Implemented in R168 successor only
|
|
18
|
+
- src/activation-reconciliation-consent-r168.mjs: canonical subject digest binding, exact per-claim human confirmation, narrow time-bounded Ed25519 owner approval verifier, independently keyed machine authorization attestation, explicit terminalization_committed:false.
|
|
19
|
+
- src/activation-reconciliation-receipt-store-r168.mjs: no-clobber 'wx' file creation, sync, readback and digest verification for one-use authorization evidence. Test fixtures only; not invoked on production.
|
|
20
|
+
- scripts/r168-subject-readonly.mjs: exact pinned live subject audit, fails closed on any drift; no signing or deletion.
|
|
21
|
+
- test/r168-owner-reconciliation-contract.test.mjs: 7 pass / 0 fail, including wrong key, expired approval, tamper, unsigned, duplicate record and independent owner/machine signer roles.
|
|
22
|
+
- test/r168-focused-suite.test.mjs: 17 pass / 0 fail, combining signed epoch evidence, owner consent, and npm resume focused suites.
|
|
23
|
+
- Focused suite signed execution receipt ID: 1a0dbfb8ef111c012038284e
|
|
24
|
+
- Focused suite receipt SHA-256: abedcf8a3ce92a4a12647c3308d02a4de22299269648b5ac13d9ac6bd0a9d53e
|
|
25
|
+
- Only ephemeral Ed25519 test keys were created. No production owner approval exists.
|
|
26
|
+
|
|
27
|
+
## Why native CAS is not called yet
|
|
28
|
+
The Win32 module src/foreground-marker-cas-win32.mjs supports readPinnedEpochLockSnapshot and deletePinnedRemoteMarker(expectedSha, expectedFileId); it pins ancestor handles and validates exact SHA-256/FileIdInfo.
|
|
29
|
+
However, the five independently mutable authority epoch histories and the activation claim do NOT have an established shared exclusion lock. A read-only audit followed by a deletion is not an atomic proof of absence of intervening authority changes. Therefore no production CAS has been wired or run.
|
|
30
|
+
|
|
31
|
+
### Required owner/production gate
|
|
32
|
+
1. Establish a trusted, independently pinned owner Ed25519 public key that is NOT the machine signer key. Its origin and provisioning must be reviewed; no default, guessed or generated production approval.
|
|
33
|
+
2. Run only from an R89 verified protected install whose shipped bytes match the intended candidate; never from writable D: or npm cache.
|
|
34
|
+
3. Provide a separate one-time action preview: old claim operation, native File ID, subject digest, exact Code grant, active runtime, consequences of terminalization. Default is decline.
|
|
35
|
+
4. Obtain owner signature and exact typed confirmation for that subject. Treat a changed audit or lock identity as requiring new consent.
|
|
36
|
+
5. Engineer and verify exclusive authority/claim handoff across all five epoch planes, with no writes/revokes permitted between final audit and native CAS.
|
|
37
|
+
6. Persist a signed, bounded, no-clobber terminal intent proof before CAS; verify it and the epoch/pointer state with handles held. Only then use native CAS to remove the exact old claim. A crash after intent but before CAS must leave activation blocked; never age/PID cleanup.
|
|
38
|
+
7. Post-CAS verified readback and signed terminal outcome. If ambiguous, do not replay or attempt activation.
|
|
39
|
+
8. Separately finish R168 version metadata, manifest, full protected Windows regression, npm packaging and external release gates. 0.15.65 registry publication and 0.15.66 production activation remain separate.
|
|
40
|
+
|
|
41
|
+
## Forbidden
|
|
42
|
+
- No deletion of r65-activation.lock by pathname or manually.
|
|
43
|
+
- No manual grant edits/re-arm, UAC bypass or new standing grants.
|
|
44
|
+
- No reinterpretation of test-signing keys as production owner authorization.
|
|
45
|
+
- No publish of 0.15.66 or activation from this precommit test evidence.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deadbyte-mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.66",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Authenticated MCP agentic runtime with signed skills, persistent model backends, identity-bound remote devices, durable job supervision, immutable release slots, and separately revocable machine authority.",
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
"contained:run": "node src/contained-cli.mjs workspaces/demo input.txt",
|
|
43
43
|
"contained:smoke": "node src/contained-smoke.mjs",
|
|
44
44
|
"mcp:contained:smoke": "node src/mcp-contained-smoke-client.mjs",
|
|
45
|
-
"gate:windows": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r166.ps1 -Stage all",
|
|
46
45
|
"authority:smoke": "node src/authority-smoke.mjs",
|
|
47
46
|
"mcp:remote:smoke": "node src/remote-mcp-smoke-client.mjs",
|
|
48
47
|
"mcp:host:smoke": "node src/mcp-host-smoke-client.mjs",
|
|
@@ -94,7 +93,11 @@
|
|
|
94
93
|
"r66:focused:test": "node --test --test-concurrency=1 test/r66-release-contract.test.mjs test/r58-doctor-runtime.test.mjs test/r58-doctor-foreground.test.mjs test/r58-doctor-installation.test.mjs test/r65-controller-authority-epoch.test.mjs test/r65-authority-observation-epoch.test.mjs",
|
|
95
94
|
"r67:focused:test": "node scripts/r67-focused-gate.mjs",
|
|
96
95
|
"r67:shard:run": "node scripts/r67-regression-shard-run.mjs",
|
|
97
|
-
"r67:shard:verify": "node scripts/r67-regression-reconcile.mjs"
|
|
96
|
+
"r67:shard:verify": "node scripts/r67-regression-reconcile.mjs",
|
|
97
|
+
"r167:focused:test": "node --test --test-concurrency=1 test/r167-activation-path.test.mjs test/r167-release-contract.test.mjs test/r167-release-readiness.test.mjs test/r160-release-contract.test.mjs test/r158-epoch-bootstrap.test.mjs test/r65-activation-orchestration.test.mjs",
|
|
98
|
+
"gate:windows": "powershell -NoProfile -ExecutionPolicy Bypass -File scripts/gate-windows-r168.ps1 -Stage all",
|
|
99
|
+
"r168:focused:test": "node test/r168-combined-targeted-runner.mjs",
|
|
100
|
+
"r168:release:verify": "node scripts/npm-release-r48.mjs --verify-only"
|
|
98
101
|
},
|
|
99
102
|
"bundleDependencies": [
|
|
100
103
|
"@modelcontextprotocol/server",
|
package/scripts/deploy-r48.mjs
CHANGED
|
@@ -16,6 +16,7 @@ import {claimWithOneTimeMigration,verifyNarrowedPolicyGeneration} from '../src/c
|
|
|
16
16
|
import {verifyUacApproval,uacPointerSha256,protectedUacReceiptPath,requireTrustedUacInstallation} from '../src/uac-approval-contract-r153.mjs';
|
|
17
17
|
import {inspectTrustedInstallation} from '../src/privileged-install-trust-r89.mjs';
|
|
18
18
|
import {normalizeHostCommandPins,hostCommandPinArgs} from '../src/host-command-pins-r154.mjs';
|
|
19
|
+
import {parseActivationPathFlags,assertTrustedActivationEntrypoint,appendActivationPathArgs} from '../src/activation-path-r167.mjs';
|
|
19
20
|
|
|
20
21
|
const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..');
|
|
21
22
|
const state=path.resolve(process.env.DEADBYTE_STATE_ROOT||path.join(os.homedir(),'.deadbyte-mcp'));
|
|
@@ -79,7 +80,10 @@ function parseDeployArgs(argv){
|
|
|
79
80
|
if(out.hostCommandPins.length>0&&(!out.uacLegacyMigration||out.preflight))throw new Error('explicit host repin requires the elevated UAC migration');
|
|
80
81
|
return out;
|
|
81
82
|
}
|
|
82
|
-
const
|
|
83
|
+
const activationPathFlags=parseActivationPathFlags(process.argv.slice(2));
|
|
84
|
+
const deployArgs={...parseDeployArgs(activationPathFlags.remainingArgs),
|
|
85
|
+
authorityEpochRoot:activationPathFlags.authorityEpochRoot,
|
|
86
|
+
developmentRoot:activationPathFlags.developmentRoot};
|
|
83
87
|
|
|
84
88
|
async function writeExclusive(file,value){
|
|
85
89
|
const handle=await open(file,'wx',0o600);
|
|
@@ -306,21 +310,50 @@ if(deployArgs.uacLegacyMigration){
|
|
|
306
310
|
expiresAt:deployArgs.migrationExpiresAt
|
|
307
311
|
});
|
|
308
312
|
}
|
|
313
|
+
let activationPaths=null,activationPathError=null;
|
|
314
|
+
if(preflight.authority_continuity==='EPOCH_NATIVE'){
|
|
315
|
+
try{
|
|
316
|
+
// Validate exact path identity before the ACL probe so an unrelated protected
|
|
317
|
+
// directory cannot bless code executing from this package root.
|
|
318
|
+
assertTrustedActivationEntrypoint({continuity:'EPOCH_NATIVE',packageRoot:root,
|
|
319
|
+
authorityEpochRoot:deployArgs.authorityEpochRoot,developmentRoot:deployArgs.developmentRoot,trusted:true});
|
|
320
|
+
const privilegedFiles=[fileURLToPath(import.meta.url),path.join(root,'MANIFEST.SHA256'),
|
|
321
|
+
path.join(root,'src','activation-continuity-engine-r65.mjs'),path.join(root,'src','epoch-lock-r85.mjs'),
|
|
322
|
+
path.join(root,'bin','deadbyte-epoch-lock-r85.node')];
|
|
323
|
+
const trust=await inspectTrustedInstallation(privilegedFiles);
|
|
324
|
+
activationPaths=assertTrustedActivationEntrypoint({continuity:'EPOCH_NATIVE',packageRoot:root,
|
|
325
|
+
authorityEpochRoot:deployArgs.authorityEpochRoot,developmentRoot:deployArgs.developmentRoot,
|
|
326
|
+
trusted:trust?.trusted===true});
|
|
327
|
+
}catch(error){activationPathError=error;}
|
|
328
|
+
}else if(deployArgs.authorityEpochRoot){
|
|
329
|
+
activationPathError=new Error('--authority-epoch-root is valid only for EPOCH_NATIVE activation');
|
|
330
|
+
}else{
|
|
331
|
+
activationPaths={authorityEpochRoot:null,developmentRoot:deployArgs.developmentRoot??root};
|
|
332
|
+
}
|
|
309
333
|
|
|
310
334
|
if(deployArgs.preflight){
|
|
311
|
-
console.log(JSON.stringify(preflight
|
|
335
|
+
console.log(JSON.stringify({...preflight,
|
|
336
|
+
activation_entrypoint_state:activationPathError?'REJECTED':preflight.authority_continuity==='EPOCH_NATIVE'?'TRUSTED_READY':'NOT_APPLICABLE',
|
|
337
|
+
protected_activation_entrypoint:preflight.authority_continuity==='EPOCH_NATIVE'?!activationPathError:null,
|
|
338
|
+
activation_entrypoint_reason:activationPathError?String(activationPathError?.message??activationPathError).slice(0,256):null}));
|
|
312
339
|
process.exit(0);
|
|
313
340
|
}
|
|
314
341
|
if(!['ONLINE_READY','ONLINE_HOST_ARMED','PARKED_DIRTY','OFFLINE_CLEAN','LEGACY_SCOPE_REPAIR_READY'].includes(preflight.state))
|
|
315
342
|
throw new Error(`activation preflight rejected: ${preflight.state} subject=${preflight.subject_sha256??'<incomplete>'}`);
|
|
316
|
-
|
|
317
|
-
|
|
343
|
+
if(activationPathError)throw activationPathError;
|
|
344
|
+
let args=[
|
|
345
|
+
'--expected-version',expectedVersion,'--expected-manifest',manifest,
|
|
318
346
|
'--process-policy',path.join(root,'controller','deadbyte-process-policy.json'),'--process-policy-sha256',await sha(path.join(root,'controller','deadbyte-process-policy.json')),
|
|
319
347
|
'--desktop-policy',path.join(root,'controller','deadbyte-desktop-policy.json'),'--desktop-policy-sha256',await sha(path.join(root,'controller','deadbyte-desktop-policy.json')),
|
|
320
348
|
'--semantic-lsp-config',path.join(root,'controller','deadbyte-semantic-lsp-config.json'),'--semantic-lsp-config-sha256',await sha(path.join(root,'controller','deadbyte-semantic-lsp-config.json')),
|
|
321
349
|
'--bridge-root',bridgeRoot,'--bridge-script-sha256',await sha(bridgeScript),
|
|
322
350
|
'--enable-machine-fs','--enable-observation','--enable-desktop','--enable-autonomous-supervisor','--recover-offline-predecessor'
|
|
323
351
|
];
|
|
352
|
+
if(preflight.authority_continuity==='EPOCH_NATIVE'){
|
|
353
|
+
args=appendActivationPathArgs(args,{stageRoot:root,...activationPaths});
|
|
354
|
+
}else{
|
|
355
|
+
args.push('--stage',root,'--development-root',activationPaths.developmentRoot);
|
|
356
|
+
}
|
|
324
357
|
args.push(...hostCommandPinArgs(deployArgs.hostCommandPins));
|
|
325
358
|
let result=null,verification=null,activationOutcomePath=null;
|
|
326
359
|
let continuityEngine=null,continuityUpdateId=null;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#requires -Version 5.1
|
|
2
|
+
[CmdletBinding()]
|
|
3
|
+
param(
|
|
4
|
+
[ValidateSet('preflight','focused','full','manifest','doctor','all')][string]$Stage='preflight',
|
|
5
|
+
[string]$ExpectedDevelopmentRoot
|
|
6
|
+
)
|
|
7
|
+
Set-StrictMode -Version Latest
|
|
8
|
+
$ErrorActionPreference='Stop'
|
|
9
|
+
$repo=Split-Path -Parent $PSScriptRoot
|
|
10
|
+
if([string]::IsNullOrWhiteSpace($ExpectedDevelopmentRoot)){$ExpectedDevelopmentRoot=$repo}
|
|
11
|
+
$ExpectedDevelopmentRoot=[IO.Path]::GetFullPath($ExpectedDevelopmentRoot)
|
|
12
|
+
$state=Join-Path $env:USERPROFILE '.deadbyte-mcp'
|
|
13
|
+
$parentId='v0.15.61-055d1ff0aa99e60b'
|
|
14
|
+
$parentSha='055d1ff0aa99e60bbf9e9f136b02ebd4fffb8391712560f7607cff30af94dcdf'
|
|
15
|
+
$parentGen='f940e794daac2dda097a66301c4b85c4b29a2df7c669e549503c05a2a55ff6c4'
|
|
16
|
+
$sourceManifest='ad3c091fbbe2bac6d234548724008b67305fd483ad6542f92d5aeb1aa84f5849'
|
|
17
|
+
$nativeNode='C:\Program Files\nodejs\node.exe'
|
|
18
|
+
$node=if(Test-Path -LiteralPath $nativeNode -PathType Leaf){$nativeNode}else{(Get-Command node -ErrorAction Stop).Source}
|
|
19
|
+
function Sha([string]$file){
|
|
20
|
+
$sha=[Security.Cryptography.SHA256]::Create()
|
|
21
|
+
try{$stream=[IO.File]::OpenRead($file);try{return ([BitConverter]::ToString($sha.ComputeHash($stream))).Replace('-','').ToLowerInvariant()}finally{$stream.Dispose()}}finally{$sha.Dispose()}
|
|
22
|
+
}
|
|
23
|
+
function Run-Node([string]$label,[string[]]$nodeArgs){
|
|
24
|
+
if($null -eq $nodeArgs -or $nodeArgs.Count -lt 1){throw "R167_${label}_NO_NODE_ARGUMENTS"}
|
|
25
|
+
Write-Output "R167_STAGE_START=$label"
|
|
26
|
+
Write-Output "R167_STAGE_ARGS=$($nodeArgs.Count)"
|
|
27
|
+
$global:LASTEXITCODE=0
|
|
28
|
+
& $node @nodeArgs
|
|
29
|
+
$exit=$global:LASTEXITCODE
|
|
30
|
+
if($exit -ne 0){throw "R167_${label}_FAILED exit=$exit"}
|
|
31
|
+
Write-Output "R167_STAGE_PASS=$label"
|
|
32
|
+
}
|
|
33
|
+
Push-Location $repo
|
|
34
|
+
$previousExpectedDevelopmentRoot=$env:DEADBYTE_EXPECTED_DEVELOPMENT_ROOT
|
|
35
|
+
try{
|
|
36
|
+
$env:DEADBYTE_EXPECTED_DEVELOPMENT_ROOT=$ExpectedDevelopmentRoot
|
|
37
|
+
$pkg=Get-Content -LiteralPath 'package.json' -Raw | ConvertFrom-Json
|
|
38
|
+
$release=Get-Content -LiteralPath 'RELEASE.json' -Raw | ConvertFrom-Json
|
|
39
|
+
if($pkg.version -ne '0.15.65' -or $release.version -ne '0.15.65' -or $release.train -ne 'R167'){throw 'R167_CANDIDATE_VERSION_DRIFT'}
|
|
40
|
+
if($release.source_predecessor.version -ne '0.15.64' -or $release.source_predecessor.train -ne 'R166' -or $release.r167.source_predecessor_manifest_sha256 -ne $sourceManifest){throw 'R167_SOURCE_PREDECESSOR_IDENTITY_DRIFT'}
|
|
41
|
+
if($release.runtime_predecessor.release_id -ne $parentId -or $release.runtime_predecessor.manifest_sha256 -ne $parentSha -or $release.runtime_predecessor.generation_manifest_sha256 -ne $parentGen){throw 'R167_RUNTIME_PREDECESSOR_IDENTITY_DRIFT'}
|
|
42
|
+
$active=Get-Content -LiteralPath (Join-Path $state 'active-release.json') -Raw | ConvertFrom-Json
|
|
43
|
+
if($active.version -ne '0.15.61' -or $active.release_id -ne $parentId -or $active.manifest_sha256 -ne $parentSha -or $active.generation_manifest_sha256 -ne $parentGen){throw 'R167_ACTIVE_RUNTIME_DRIFT'}
|
|
44
|
+
if((Sha (Join-Path $active.release_root 'MANIFEST.SHA256')) -ne $parentSha){throw 'R167_ACTIVE_MANIFEST_MISMATCH'}
|
|
45
|
+
Write-Output 'R167_PREDECESSOR_PREFLIGHT=PASS'
|
|
46
|
+
if($Stage -eq 'preflight'){return}
|
|
47
|
+
if($Stage -in @('focused','all')){
|
|
48
|
+
Run-Node -label 'focused' -nodeArgs @('--test','--test-reporter=tap','--test-concurrency=1','test/r167-activation-path.test.mjs','test/r167-release-contract.test.mjs','test/r160-release-contract.test.mjs','test/r158-epoch-bootstrap.test.mjs','test/r65-activation-orchestration.test.mjs','test/r89-privileged-install-boundary.test.mjs','test/r119-recovery-crash-after-commit.test.mjs','test/r59-tool-surface-compat.test.mjs')
|
|
49
|
+
if($Stage -eq 'focused'){return}
|
|
50
|
+
}
|
|
51
|
+
if($Stage -in @('full','all')){
|
|
52
|
+
$previousCrossVolume=$env:DEADBYTE_TEST_CROSS_VOLUME_ROOT
|
|
53
|
+
$tempDrive=[IO.Path]::GetPathRoot([IO.Path]::GetFullPath($env:TEMP))
|
|
54
|
+
$scratchDrive=if($tempDrive -ieq 'D:\'){'C:\'}else{'D:\'}
|
|
55
|
+
if(-not (Test-Path -LiteralPath $scratchDrive -PathType Container)){throw 'R167_CROSS_VOLUME_DRIVE_UNAVAILABLE'}
|
|
56
|
+
$crossVolume=Join-Path $scratchDrive 'DEADBYTE-R167-CrossVolume'
|
|
57
|
+
try{
|
|
58
|
+
[IO.Directory]::CreateDirectory($crossVolume)|Out-Null
|
|
59
|
+
$env:DEADBYTE_TEST_CROSS_VOLUME_ROOT=$crossVolume
|
|
60
|
+
Run-Node -label 'full' -nodeArgs @('--test','--test-reporter=tap','--test-concurrency=4','test/*.test.mjs')
|
|
61
|
+
}finally{$env:DEADBYTE_TEST_CROSS_VOLUME_ROOT=$previousCrossVolume}
|
|
62
|
+
if($Stage -eq 'full'){return}
|
|
63
|
+
}
|
|
64
|
+
if($Stage -in @('manifest','all')){
|
|
65
|
+
Run-Node -label 'manifest' -nodeArgs @('scripts/release-manifest.mjs','verify')
|
|
66
|
+
if($Stage -eq 'manifest'){return}
|
|
67
|
+
}
|
|
68
|
+
if($Stage -in @('doctor','all')){
|
|
69
|
+
$previous=$env:DEADBYTE_STATE_ROOT
|
|
70
|
+
$isolated=Join-Path $env:TEMP ('deadbyte-r167-doctor-'+[guid]::NewGuid().ToString('N'))
|
|
71
|
+
try{[IO.Directory]::CreateDirectory($isolated)|Out-Null;$env:DEADBYTE_STATE_ROOT=$isolated;Run-Node -label 'isolated_doctor' -nodeArgs @('src/deadbyte-cli.mjs','doctor')}
|
|
72
|
+
finally{$env:DEADBYTE_STATE_ROOT=$previous;Remove-Item -LiteralPath $isolated -Recurse -Force -ErrorAction SilentlyContinue}
|
|
73
|
+
}
|
|
74
|
+
Write-Output 'R167_WINDOWS_CANDIDATE_GATE=PASS_PREPUBLICATION'
|
|
75
|
+
}finally{$env:DEADBYTE_EXPECTED_DEVELOPMENT_ROOT=$previousExpectedDevelopmentRoot;Pop-Location}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#requires -Version 5.1
|
|
2
|
+
[CmdletBinding()]
|
|
3
|
+
param(
|
|
4
|
+
[ValidateSet('preflight','focused','full','manifest','doctor','all')][string]$Stage='preflight',
|
|
5
|
+
[string]$ExpectedDevelopmentRoot
|
|
6
|
+
)
|
|
7
|
+
Set-StrictMode -Version Latest
|
|
8
|
+
$ErrorActionPreference='Stop'
|
|
9
|
+
$repo=Split-Path -Parent $PSScriptRoot
|
|
10
|
+
if([string]::IsNullOrWhiteSpace($ExpectedDevelopmentRoot)){$ExpectedDevelopmentRoot=$repo}
|
|
11
|
+
$ExpectedDevelopmentRoot=[IO.Path]::GetFullPath($ExpectedDevelopmentRoot)
|
|
12
|
+
$state=Join-Path $env:USERPROFILE '.deadbyte-mcp'
|
|
13
|
+
$parentId='v0.15.61-055d1ff0aa99e60b'
|
|
14
|
+
$parentSha='055d1ff0aa99e60bbf9e9f136b02ebd4fffb8391712560f7607cff30af94dcdf'
|
|
15
|
+
$parentGen='f940e794daac2dda097a66301c4b85c4b29a2df7c669e549503c05a2a55ff6c4'
|
|
16
|
+
$sourceManifest='3316654646cc870584a7c969c2032af6c795229ff8c65e5a8b794f97c2458c41'
|
|
17
|
+
$nativeNode='C:\Program Files\nodejs\node.exe'
|
|
18
|
+
$node=if(Test-Path -LiteralPath $nativeNode -PathType Leaf){$nativeNode}else{(Get-Command node -ErrorAction Stop).Source}
|
|
19
|
+
function Sha([string]$file){
|
|
20
|
+
$sha=[Security.Cryptography.SHA256]::Create()
|
|
21
|
+
try{$stream=[IO.File]::OpenRead($file);try{return ([BitConverter]::ToString($sha.ComputeHash($stream))).Replace('-','').ToLowerInvariant()}finally{$stream.Dispose()}}finally{$sha.Dispose()}
|
|
22
|
+
}
|
|
23
|
+
function Run-Node([string]$label,[string[]]$nodeArgs){
|
|
24
|
+
if($null -eq $nodeArgs -or $nodeArgs.Count -lt 1){throw "R168_${label}_NO_NODE_ARGUMENTS"}
|
|
25
|
+
Write-Output "R168_STAGE_START=$label"
|
|
26
|
+
Write-Output "R168_STAGE_ARGS=$($nodeArgs.Count)"
|
|
27
|
+
$global:LASTEXITCODE=0
|
|
28
|
+
& $node @nodeArgs
|
|
29
|
+
$exit=$global:LASTEXITCODE
|
|
30
|
+
if($exit -ne 0){throw "R168_${label}_FAILED exit=$exit"}
|
|
31
|
+
Write-Output "R168_STAGE_PASS=$label"
|
|
32
|
+
}
|
|
33
|
+
Push-Location $repo
|
|
34
|
+
$previousExpectedDevelopmentRoot=$env:DEADBYTE_EXPECTED_DEVELOPMENT_ROOT
|
|
35
|
+
try{
|
|
36
|
+
$env:DEADBYTE_EXPECTED_DEVELOPMENT_ROOT=$ExpectedDevelopmentRoot
|
|
37
|
+
$pkg=Get-Content -LiteralPath 'package.json' -Raw | ConvertFrom-Json
|
|
38
|
+
$release=Get-Content -LiteralPath 'RELEASE.json' -Raw | ConvertFrom-Json
|
|
39
|
+
if($pkg.version -ne '0.15.66' -or $release.version -ne '0.15.66' -or $release.train -ne 'R168'){throw 'R168_CANDIDATE_VERSION_DRIFT'}
|
|
40
|
+
if($release.source_predecessor.version -ne '0.15.65' -or $release.source_predecessor.train -ne 'R167' -or $release.r168.source_predecessor_manifest_sha256 -ne $sourceManifest){throw 'R168_SOURCE_PREDECESSOR_IDENTITY_DRIFT'}
|
|
41
|
+
if($release.runtime_predecessor.release_id -ne $parentId -or $release.runtime_predecessor.manifest_sha256 -ne $parentSha -or $release.runtime_predecessor.generation_manifest_sha256 -ne $parentGen){throw 'R168_RUNTIME_PREDECESSOR_IDENTITY_DRIFT'}
|
|
42
|
+
$active=Get-Content -LiteralPath (Join-Path $state 'active-release.json') -Raw | ConvertFrom-Json
|
|
43
|
+
if($active.version -ne '0.15.61' -or $active.release_id -ne $parentId -or $active.manifest_sha256 -ne $parentSha -or $active.generation_manifest_sha256 -ne $parentGen){throw 'R168_ACTIVE_RUNTIME_DRIFT'}
|
|
44
|
+
if((Sha (Join-Path $active.release_root 'MANIFEST.SHA256')) -ne $parentSha){throw 'R168_ACTIVE_MANIFEST_MISMATCH'}
|
|
45
|
+
Write-Output 'R168_PREDECESSOR_PREFLIGHT=PASS'
|
|
46
|
+
if($Stage -eq 'preflight'){return}
|
|
47
|
+
if($Stage -in @('focused','all')){
|
|
48
|
+
Run-Node -label 'focused' -nodeArgs @('--test','--test-reporter=tap','--test-concurrency=1','test/r167-activation-path.test.mjs','test/r168-release-contract.test.mjs','test/r168-remote-one-shot-coherence.test.mjs','test/r160-release-contract.test.mjs','test/r158-epoch-bootstrap.test.mjs','test/r65-activation-orchestration.test.mjs','test/r89-privileged-install-boundary.test.mjs','test/r119-recovery-crash-after-commit.test.mjs','test/r59-tool-surface-compat.test.mjs')
|
|
49
|
+
if($Stage -eq 'focused'){return}
|
|
50
|
+
}
|
|
51
|
+
if($Stage -in @('full','all')){
|
|
52
|
+
$previousCrossVolume=$env:DEADBYTE_TEST_CROSS_VOLUME_ROOT
|
|
53
|
+
$tempDrive=[IO.Path]::GetPathRoot([IO.Path]::GetFullPath($env:TEMP))
|
|
54
|
+
$scratchDrive=if($tempDrive -ieq 'D:\'){'C:\'}else{'D:\'}
|
|
55
|
+
if(-not (Test-Path -LiteralPath $scratchDrive -PathType Container)){throw 'R168_CROSS_VOLUME_DRIVE_UNAVAILABLE'}
|
|
56
|
+
$crossVolume=Join-Path $scratchDrive 'DEADBYTE-R168-CrossVolume'
|
|
57
|
+
try{
|
|
58
|
+
[IO.Directory]::CreateDirectory($crossVolume)|Out-Null
|
|
59
|
+
$env:DEADBYTE_TEST_CROSS_VOLUME_ROOT=$crossVolume
|
|
60
|
+
Run-Node -label 'full' -nodeArgs @('--test','--test-reporter=tap','--test-concurrency=4','test/*.test.mjs')
|
|
61
|
+
}finally{$env:DEADBYTE_TEST_CROSS_VOLUME_ROOT=$previousCrossVolume}
|
|
62
|
+
if($Stage -eq 'full'){return}
|
|
63
|
+
}
|
|
64
|
+
if($Stage -in @('manifest','all')){
|
|
65
|
+
Run-Node -label 'manifest' -nodeArgs @('scripts/release-manifest.mjs','verify')
|
|
66
|
+
if($Stage -eq 'manifest'){return}
|
|
67
|
+
}
|
|
68
|
+
if($Stage -in @('doctor','all')){
|
|
69
|
+
$previous=$env:DEADBYTE_STATE_ROOT
|
|
70
|
+
$isolated=Join-Path $env:TEMP ('deadbyte-r168-doctor-'+[guid]::NewGuid().ToString('N'))
|
|
71
|
+
try{[IO.Directory]::CreateDirectory($isolated)|Out-Null;$env:DEADBYTE_STATE_ROOT=$isolated;Run-Node -label 'isolated_doctor' -nodeArgs @('src/deadbyte-cli.mjs','doctor')}
|
|
72
|
+
finally{$env:DEADBYTE_STATE_ROOT=$previous;Remove-Item -LiteralPath $isolated -Recurse -Force -ErrorAction SilentlyContinue}
|
|
73
|
+
}
|
|
74
|
+
Write-Output 'R168_WINDOWS_CANDIDATE_GATE=PASS_PREPUBLICATION'
|
|
75
|
+
}finally{$env:DEADBYTE_EXPECTED_DEVELOPMENT_ROOT=$previousExpectedDevelopmentRoot;Pop-Location}
|