deadbyte-mcp 0.15.35 → 0.15.37

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 (92) hide show
  1. package/MANIFEST.SHA256 +91 -46
  2. package/PROVENANCE.json +76 -30
  3. package/README.txt +62 -8
  4. package/RELEASE.json +78 -23
  5. package/SBOM.cdx.json +10 -25
  6. package/TEST-MATRIX.json +109 -44
  7. package/bridge/package.json +4 -2
  8. package/bridge/src/bridge-health-r59.mjs +53 -0
  9. package/bridge/src/bridge.mjs +158 -26
  10. package/bridge/src/canonical-json-r60.mjs +13 -0
  11. package/bridge/src/r40-governor.mjs +56 -10
  12. package/bridge/src/reconnect-delay-r60.mjs +31 -0
  13. package/bridge/src/remote-call-claims-r60.mjs +157 -0
  14. package/bridge/src/remote-dispatch-r60.mjs +75 -0
  15. package/controller/deadbyte-controller.ps1 +76 -13
  16. package/controller/deadbyte-process-policy.json +4 -4
  17. package/docs/R59-PROVENANCE.json +87 -0
  18. package/docs/R59-RELEASE.json +187 -0
  19. package/docs/R59-SBOM.cdx.json +68 -0
  20. package/docs/R59-TASK-CONTRACT.md +26 -0
  21. package/docs/R59-TEST-MATRIX.json +258 -0
  22. package/docs/R59-bridge-package.json +13 -0
  23. package/docs/R59-package-lock.json +184 -0
  24. package/docs/R59-package.json +106 -0
  25. package/docs/R59-version.mjs +6 -0
  26. package/docs/R60-TASK-CONTRACT.md +22 -0
  27. package/package.json +7 -3
  28. package/proof/r59-full-regression-current.json +13 -0
  29. package/proof/r59-full-regression-current.stderr.log +0 -0
  30. package/proof/r59-full-regression-current.stdout.log +1268 -0
  31. package/scripts/full-regression-r60.mjs +32 -0
  32. package/scripts/gate-windows-r59-prepublish.ps1 +41 -0
  33. package/scripts/gate-windows-r60-prepublish.ps1 +74 -0
  34. package/scripts/r59-full-regression-capture.mjs +35 -0
  35. package/src/capability-resolver.mjs +25 -7
  36. package/src/capability-snapshot.mjs +56 -0
  37. package/src/compact-gateway-mcp-tools.mjs +10 -11
  38. package/src/deadbyte-cli.mjs +80 -34
  39. package/src/mcp-server.mjs +179 -118
  40. package/src/r40-compact-disarmed-probe.mjs +1 -1
  41. package/src/r44-compact-disarmed-probe.mjs +1 -1
  42. package/src/r45-compact-disarmed-probe.mjs +1 -1
  43. package/src/remote-authority.mjs +56 -0
  44. package/src/remote-enforcement-probe-r60.mjs +17 -0
  45. package/src/remote-live-log.mjs +19 -2
  46. package/src/remote-log-decode-r60.mjs +32 -0
  47. package/src/remote-mcp-machine-smoke-client.mjs +19 -1
  48. package/src/remote-mcp-r40-parity-client.mjs +1 -1
  49. package/src/remote-mcp-r44-parity-client.mjs +1 -1
  50. package/src/remote-mcp-r45-parity-client.mjs +1 -1
  51. package/src/remote-mcp-smoke-client.mjs +1 -1
  52. package/src/remote-session-guardian.mjs +20 -3
  53. package/src/runtime-plane-registry.mjs +74 -0
  54. package/src/tool-audit.mjs +5 -0
  55. package/src/version.mjs +1 -1
  56. package/test/bridge-runtime-r59.test.mjs +60 -0
  57. package/test/capability-resolver.test.mjs +16 -0
  58. package/test/capability-snapshot-r59.test.mjs +39 -0
  59. package/test/compact-gateway-r36.test.mjs +22 -2
  60. package/test/compact-max-catalog-r44.test.mjs +1 -1
  61. package/test/compact-max-catalog-r45.test.mjs +1 -1
  62. package/test/contained.test.mjs +2 -1
  63. package/test/controller-policy-preflight-r59.test.mjs +39 -0
  64. package/test/fixtures/r59-compact-surface-v0.15.35.json +222 -0
  65. package/test/observation-integration.test.mjs +2 -3
  66. package/test/optional-plane-degraded-r59.test.mjs +44 -0
  67. package/test/r48-release-contract.test.mjs +1 -1
  68. package/test/r49-windows-gate.test.mjs +1 -1
  69. package/test/r51-runtime-coherence.test.mjs +2 -2
  70. package/test/r58-bundled-bridge.test.mjs +3 -1
  71. package/test/r58-cleanup-retention.test.mjs +9 -3
  72. package/test/r58-concurrent-recovery.test.mjs +9 -3
  73. package/test/r58-controller-live-local.test.mjs +36 -4
  74. package/test/r58-controller-state-coherence.test.mjs +1 -1
  75. package/test/r58-release-contract.test.mjs +3 -2
  76. package/test/r58-stale-owner.test.mjs +2 -2
  77. package/test/r58-windows-gate.test.mjs +2 -1
  78. package/test/r59-release-contract.test.mjs +61 -0
  79. package/test/r59-tool-surface-compat.test.mjs +90 -0
  80. package/test/r60-authority-coherence.test.mjs +36 -0
  81. package/test/r60-authority-enforcement.test.mjs +28 -0
  82. package/test/r60-bridge-dispatch.test.mjs +119 -0
  83. package/test/r60-clock-discipline.test.mjs +15 -0
  84. package/test/r60-live-timeline.test.mjs +29 -0
  85. package/test/r60-reconnect-errors.test.mjs +21 -0
  86. package/test/r60-reconnect-jitter.test.mjs +18 -0
  87. package/test/r60-release-contract.test.mjs +81 -0
  88. package/test/r60-remote-call-recovery.test.mjs +170 -0
  89. package/test/r60-windows-log-decode.test.mjs +25 -0
  90. package/test/remote-live-log-r37.test.mjs +1 -1
  91. package/test/remote-session-cli.test.mjs +200 -43
  92. package/test/runtime-plane-registry-r59.test.mjs +40 -0
@@ -0,0 +1,75 @@
1
+ // This function is the one downstream-dispatch boundary used by the Bridge.
2
+ // A published dispatch marker precedes every call that might mutate Core.
3
+ const READ_ONLY_TOOLS=new Set([
4
+ 'agent_task_events','agent_task_status','agent_task_verify',
5
+ 'autonomous_goal_events','autonomous_goal_status','autonomous_goal_verify','autonomous_session_status',
6
+ 'capability_manifest','coding_file_read','coding_files_read','coding_receipt_verify','coding_search',
7
+ 'coding_session_status','coding_stat','coding_symbol_definition','coding_symbol_outline','coding_symbol_references',
8
+ 'coding_task_events','coding_task_status','coding_task_verify','coding_tree','evidence_verify','file_read',
9
+ 'host_file_read','machine_fs_list','machine_fs_read','machine_fs_stat','machine_list','machine_ping',
10
+ 'machine_process_list','machine_search_page','machine_search_status','machine_status','machine_system_status',
11
+ 'native_diff_preview','native_diff_verify','process_session_list','process_session_read','process_session_status'
12
+ ]);
13
+ const MUTATING_TOOLS=new Set([
14
+ 'agent_task_approve','agent_task_cancel','agent_task_run','agent_task_submit',
15
+ 'autonomous_goal_approve','autonomous_goal_cancel','autonomous_goal_run','autonomous_goal_submit','autonomous_release_gate',
16
+ 'coding_benchmark_run','coding_command_run','coding_file_write','coding_symbol_replace','coding_task_approve',
17
+ 'coding_task_cancel','coding_task_run','coding_task_submit','coding_text_replace','contained_transform',
18
+ 'host_exec','host_file_write','machine_fs_delete','machine_fs_edit_exact','machine_fs_mkdir','machine_fs_move',
19
+ 'machine_fs_write','machine_revoke','machine_search_cancel','machine_search_start','native_diff_apply',
20
+ 'process_session_action','process_session_start','process_session_terminate','proof_execute','workspace_open'
21
+ ]);
22
+ const COMPACT_READ_ONLY={
23
+ machine_fs:new Set(['stat','list','read']),
24
+ process_session:new Set(['read','status','list']),
25
+ machine_observe:new Set(['machine_list','machine_status','machine_ping','search_page','search_status',
26
+ 'process_list','system_status','hardware_query','registry_query','service_list','driver_list',
27
+ 'socket_list','volume_list','usb_list','wsl_list']),
28
+ coding_inspect:new Set(['stat','search','files_read','symbol_outline','symbol_definition','symbol_references',
29
+ 'symbol_diagnostics','symbol_implementations','symbol_rename_preview']),
30
+ desktop_control:new Set(['observe','status'])
31
+ };
32
+ const COMPACT_MUTATING={
33
+ machine_fs:new Set(['write','edit_exact','mkdir','move','delete']),
34
+ process_session:new Set(['start','write','action','terminate']),
35
+ machine_observe:new Set(['search_start','search_cancel']),
36
+ desktop_control:new Set(['target','action'])
37
+ };
38
+
39
+ export function classifyRemoteOperation(tool,args){
40
+ const name=tool?.name;
41
+ if(typeof name!=='string')return 'unknown';
42
+ if(Object.hasOwn(COMPACT_READ_ONLY,name)||Object.hasOwn(COMPACT_MUTATING,name)){
43
+ if(COMPACT_READ_ONLY[name]?.has(args?.op))return 'read_only';
44
+ if(COMPACT_MUTATING[name]?.has(args?.op))return 'mutating';
45
+ return 'unknown';
46
+ }
47
+ if(MUTATING_TOOLS.has(name))return 'mutating';
48
+ if(READ_ONLY_TOOLS.has(name))return 'read_only';
49
+ return 'unknown';
50
+ }
51
+
52
+ export async function dispatchBridgeCall({claims,binding,classification,signal,invoke}){
53
+ if(!claims||typeof claims.claim!=='function'||typeof invoke!=='function')throw new Error('remote dispatch dependencies invalid');
54
+ if(!['read_only','mutating','unknown'].includes(classification))throw new Error('remote dispatch classification invalid');
55
+ const claim=await claims.claim(binding);
56
+ if(claim.state==='TERMINAL')return claim.result;
57
+ const recoveredRead=claim.state==='INTERRUPTED'&&classification==='read_only'&&claim.side_effect_state==='none';
58
+ if((claim.state==='EXECUTING'||claim.state==='INTERRUPTED')&&!recoveredRead)throw new Error(`remote claim ${claim.claim_id} outcome unknown; reconcile before retry`);
59
+ if(claim.state!=='CLAIMED'&&!recoveredRead)throw new Error(`remote claim ${claim.claim_id} is ${claim.state}; no dispatch`);
60
+ if(signal?.aborted)throw new Error(`remote claim ${claim.claim_id} cancelled before dispatch`);
61
+ if(!recoveredRead){
62
+ try{await claims.dispatch(claim.claim_id);}
63
+ catch(error){throw new Error(`remote claim ${claim.claim_id} already in flight; no replay`,{cause:error});}
64
+ }
65
+ let result;
66
+ try{result=await invoke();}
67
+ catch(error){throw new Error(`remote claim ${claim.claim_id} outcome unknown after dispatch; no replay`,{cause:error});}
68
+ try{await claims.terminal(claim.claim_id,result);}
69
+ catch(error){
70
+ const existing=await claims.state(claim.claim_id);
71
+ if(recoveredRead&&existing.state==='TERMINAL')return existing.result;
72
+ throw new Error(`remote claim ${claim.claim_id} terminal publication failed; outcome unknown`,{cause:error});
73
+ }
74
+ return result;
75
+ }
@@ -685,11 +685,31 @@ function Stop-OwnedComponent([string]$Name) {
685
685
  Remove-Item -LiteralPath (Ledger-Path $Name) -Force -ErrorAction SilentlyContinue
686
686
  }
687
687
 
688
- function Test-LocalReady($Cfg) {
688
+ function Get-LocalHealth($Cfg) {
689
+ $response = $null
690
+ try {
691
+ $request = [System.Net.HttpWebRequest]::Create([string]$Cfg.LocalReadyUri)
692
+ $request.Timeout = [int]$Cfg.ProbeTimeoutSeconds * 1000
693
+ $request.ReadWriteTimeout = [int]$Cfg.ProbeTimeoutSeconds * 1000
694
+ $response = $request.GetResponse()
695
+ } catch [System.Net.WebException] {
696
+ $response = $_.Exception.Response
697
+ if ($null -eq $response) { return [pscustomobject]@{ State='UNREACHABLE'; StatusCode=0; Diagnostic='readiness endpoint unreachable' } }
698
+ } catch { return [pscustomobject]@{ State='UNREACHABLE'; StatusCode=0; Diagnostic='readiness probe failed' } }
689
699
  try {
690
- $r = Invoke-WebRequest -UseBasicParsing -Uri ([string]$Cfg.LocalReadyUri) -TimeoutSec ([int]$Cfg.ProbeTimeoutSeconds)
691
- return ($r.StatusCode -ge 200 -and $r.StatusCode -lt 300)
692
- } catch { return $false }
700
+ $status = [int]$response.StatusCode
701
+ $reader = New-Object System.IO.StreamReader($response.GetResponseStream())
702
+ try { $body = $reader.ReadToEnd() } finally { $reader.Dispose() }
703
+ try { $parsed = $body | ConvertFrom-Json } catch { return [pscustomobject]@{ State='INVALID'; StatusCode=$status; Diagnostic='readiness response JSON invalid' } }
704
+ if ($parsed.schema -ne 'deadbyte.bridge-health.v1' -or [string]$parsed.state -notin @('STARTING','READY','DEGRADED','RECONCILING','STOPPING')) {
705
+ return [pscustomobject]@{ State='INVALID'; StatusCode=$status; Diagnostic='readiness response schema invalid' }
706
+ }
707
+ return [pscustomobject]@{ State=[string]$parsed.state; StatusCode=$status; Diagnostic=[string]$parsed.diagnostic }
708
+ } finally { if ($null -ne $response) { $response.Dispose() } }
709
+ }
710
+ function Test-LocalReady($Cfg) {
711
+ $health = Get-LocalHealth $Cfg
712
+ return ($health.State -eq 'READY' -and $health.StatusCode -ge 200 -and $health.StatusCode -lt 300)
693
713
  }
694
714
  function Get-LocalReadyListenerOwners($Cfg) {
695
715
  try { $uri = [Uri]([string]$Cfg.LocalReadyUri) } catch { Fail 'LocalReadyUri is invalid' }
@@ -719,18 +739,43 @@ function Test-LocalReadyOwned($Cfg, $Bridge) {
719
739
  if ($owners.Count -ne 1 -or $owners[0] -ne [int]$Bridge.Ledger.pid) { return $false }
720
740
  return (Test-LocalReady $Cfg)
721
741
  }
742
+ function Get-LocalHealthOwned($Cfg, $Bridge) {
743
+ if (-not $Bridge -or -not $Bridge.Alive) { return [pscustomobject]@{ State='UNREACHABLE'; StatusCode=0; Diagnostic='bridge not alive' } }
744
+ $owners = @(Get-LocalReadyListenerOwners $Cfg)
745
+ if ($owners.Count -ne 1 -or $owners[0] -ne [int]$Bridge.Ledger.pid) { return [pscustomobject]@{ State='UNATTRIBUTED'; StatusCode=0; Diagnostic='readiness listener ownership mismatch' } }
746
+ return (Get-LocalHealth $Cfg)
747
+ }
722
748
 
723
749
  function Get-ObservedState($Cfg) {
724
750
  $bridge = Test-OwnedInstance 'Bridge'
725
751
  $cloud = Test-OwnedInstance 'Cloud'
726
752
  $core = Get-DownstreamCoreObservation $Cfg $bridge
727
- $ready = if ($bridge.Alive -and $core.alive) { try { Test-LocalReadyOwned $Cfg $bridge } catch { $false } } else { $false }
753
+ $health = if ($bridge.Alive -and $core.alive) { try { Get-LocalHealthOwned $Cfg $bridge } catch { [pscustomobject]@{ State='UNREACHABLE'; StatusCode=0; Diagnostic='readiness attribution failed' } } } else { [pscustomobject]@{ State='UNREACHABLE'; StatusCode=0; Diagnostic='core not alive' } }
754
+ $ready = $health.State -eq 'READY'
728
755
  $state = if (-not $bridge.Alive -and -not $cloud.Alive) { 'OFFLINE' }
729
756
  elseif (-not $bridge.Alive -and $cloud.Alive) { 'PARKED' }
730
757
  elseif ($bridge.Alive -and $cloud.Alive -and $ready) { 'ONLINE' }
758
+ elseif ($bridge.Alive -and $cloud.Alive -and $core.alive -and $health.State -eq 'DEGRADED') { 'DEGRADED' }
731
759
  elseif ($bridge.Alive -and $core.reason -eq 'startup-zero-child') { 'STARTING' }
732
760
  else { 'FAILED' }
733
- [pscustomobject]@{ State=$state; Bridge=$bridge; Core=$core; Cloud=$cloud; LocalReady=$ready }
761
+ [pscustomobject]@{ State=$state; Bridge=$bridge; Core=$core; Cloud=$cloud; LocalReady=$ready; LocalHealth=$health }
762
+ }
763
+
764
+ function Wait-LocalOperational($Cfg) {
765
+ $deadline = [DateTime]::UtcNow.AddSeconds([int]$Cfg.StartTimeoutSeconds)
766
+ do {
767
+ $bridge = Test-OwnedInstance 'Bridge'
768
+ if (-not $bridge.Alive) { return $null }
769
+ $core = Get-DownstreamCoreObservation $Cfg $bridge
770
+ if (-not $core.alive -and $core.reason -ne 'startup-zero-child') { return $null }
771
+ if ($core.alive) {
772
+ $health = Get-LocalHealthOwned $Cfg $bridge
773
+ if ($health.State -in @('READY','DEGRADED')) { return $health }
774
+ }
775
+ if ([DateTime]::UtcNow -ge $deadline) { return $null }
776
+ Start-Sleep -Milliseconds 250
777
+ } while ([DateTime]::UtcNow -lt $deadline)
778
+ return $null
734
779
  }
735
780
 
736
781
  function Wait-LocalReady($Cfg) {
@@ -842,17 +887,18 @@ function Invoke-CoreGate($Cfg, [string]$ScriptName, [string[]]$ExtraArguments =
842
887
 
843
888
  function Start-Deadbyte($Cfg) {
844
889
  $state = Get-ObservedState $Cfg
845
- if ($state.State -eq 'ONLINE') { return $state }
890
+ if ($state.State -in @('ONLINE','DEGRADED')) { return $state }
846
891
  if ($state.State -in @('FAILED','STARTING')) { Fail "runtime is $($state.State); inspect status and reconcile verified owned components before restart" }
847
892
  $cloudWasAlive = [bool]$state.Cloud.Alive
848
893
  Assert-LocalReadyPortAvailable $Cfg
849
894
  try {
850
895
  Start-OwnedComponent 'Bridge' $Cfg.Bridge $Cfg | Out-Null
851
- if (-not (Wait-LocalReady $Cfg)) { Fail 'bridge started but owned local readiness gate failed' }
896
+ $localHealth = Wait-LocalOperational $Cfg
897
+ if ($null -eq $localHealth) { Fail 'bridge started but owned local readiness gate failed' }
852
898
  Start-OwnedComponent 'Cloud' $Cfg.Cloud $Cfg | Out-Null
853
899
  if (-not (Wait-CurrentUrl $Cfg)) { Fail 'public endpoint metadata did not become available before timeout' }
854
900
  $final = Get-ObservedState $Cfg
855
- if ($final.State -ne 'ONLINE') { Fail "start gate failed: observed $($final.State)" }
901
+ if ($final.State -notin @('ONLINE','DEGRADED')) { Fail "start gate failed: observed $($final.State)" }
856
902
  return $final
857
903
  } catch {
858
904
  try { Stop-OwnedComponent 'Bridge' } catch {}
@@ -879,6 +925,18 @@ function Stop-Deadbyte($Cfg) {
879
925
  return $s
880
926
  }
881
927
 
928
+ function Assert-PolicyRootsAvailable($Policy, [string]$Plane) {
929
+ $rootIds = @($Policy.roots.PSObject.Properties.Name)
930
+ if ($rootIds.Count -lt 1) { Fail "$Plane policy requires at least one root" }
931
+ foreach ($rootId in $rootIds) {
932
+ $raw = [string]$Policy.roots.$rootId.path
933
+ if ([string]::IsNullOrWhiteSpace($raw)) { Fail "$Plane policy root '$rootId' path missing" }
934
+ try { $full = [System.IO.Path]::GetFullPath($raw) } catch { Fail "$Plane policy root '$rootId' path invalid" }
935
+ if (-not (Test-Path -LiteralPath $full -PathType Container)) { Fail "$Plane policy root '$rootId' missing: $full" }
936
+ }
937
+ return $rootIds
938
+ }
939
+
882
940
  function Get-HostPolicyMetadata($Cfg) {
883
941
  if ([string]::IsNullOrWhiteSpace([string]$Cfg.HostPolicyFile)) { Fail 'privileged host plane is not configured' }
884
942
  $policyPath = [string]$Cfg.HostPolicyFile
@@ -888,6 +946,7 @@ function Get-HostPolicyMetadata($Cfg) {
888
946
  $armFile = [System.IO.Path]::GetFullPath([string]$policy.arm_file)
889
947
  $runtimeReal = [System.IO.Path]::GetFullPath($RuntimeDir).TrimEnd('\') + '\'
890
948
  if (-not $armFile.StartsWith($runtimeReal, [System.StringComparison]::OrdinalIgnoreCase)) { Fail 'host policy arm_file must live under controller runtime directory' }
949
+ Assert-PolicyRootsAvailable $policy 'host' | Out-Null
891
950
  [pscustomobject]@{
892
951
  Path = $policyPath
893
952
  Sha256 = Get-ExecutableHash $policyPath
@@ -950,7 +1009,7 @@ function Get-ProcessPolicyMetadata($Cfg) {
950
1009
  $runtimeReal = [System.IO.Path]::GetFullPath($RuntimeDir).TrimEnd('\') + '\'
951
1010
  if (-not $grantFile.StartsWith($runtimeReal, [System.StringComparison]::OrdinalIgnoreCase)) { Fail 'process policy grant_file must live under controller runtime directory' }
952
1011
  $profileIds = @($policy.profiles.PSObject.Properties.Name)
953
- $rootIds = @($policy.roots.PSObject.Properties.Name)
1012
+ $rootIds = @(Assert-PolicyRootsAvailable $policy 'process')
954
1013
  if ($profileIds.Count -lt 1 -or $rootIds.Count -lt 1) { Fail 'process policy requires profiles and roots' }
955
1014
  [pscustomobject]@{ Path=$policyPath; Sha256=Get-ExecutableHash $policyPath; GrantFile=$grantFile; ProfileIds=$profileIds; RootIds=$rootIds }
956
1015
  }
@@ -1010,8 +1069,7 @@ function Get-CodingPolicyMetadata($Cfg) {
1010
1069
  $leaseFile = [System.IO.Path]::GetFullPath([string]$policy.lease_file)
1011
1070
  $runtimeReal = [System.IO.Path]::GetFullPath($RuntimeDir).TrimEnd('\') + '\'
1012
1071
  if (-not $leaseFile.StartsWith($runtimeReal, [System.StringComparison]::OrdinalIgnoreCase)) { Fail 'coding policy lease_file must live under controller runtime directory' }
1013
- $rootIds = @($policy.roots.PSObject.Properties.Name)
1014
- if ($rootIds.Count -lt 1) { Fail 'coding policy requires at least one root' }
1072
+ $rootIds = @(Assert-PolicyRootsAvailable $policy 'coding')
1015
1073
  [pscustomobject]@{ Path=$policyPath; Sha256=Get-ExecutableHash $policyPath; LeaseFile=$leaseFile; RootIds=$rootIds }
1016
1074
  }
1017
1075
 
@@ -1374,7 +1432,12 @@ function Invoke-MachineSmoke($Cfg) {
1374
1432
  $url = Get-CurrentUrl $Cfg
1375
1433
  if (-not $url) { Fail 'public MCP URL unavailable' }
1376
1434
  Wait-PublicDnsReady $Cfg $url
1377
- Invoke-CoreGate $Cfg 'remote-mcp-machine-smoke-client.mjs' @($url)
1435
+ $probeArgs = @($url)
1436
+ if (-not [string]::IsNullOrWhiteSpace([string]$env:DEADBYTE_REMOTE_PROBE_MODE)) {
1437
+ if ([string]$env:DEADBYTE_REMOTE_PROBE_MODE -notin @('default','desktop','host','full','revoked')) { Fail 'invalid remote enforcement probe mode' }
1438
+ $probeArgs += [string]$env:DEADBYTE_REMOTE_PROBE_MODE
1439
+ }
1440
+ Invoke-CoreGate $Cfg 'remote-mcp-machine-smoke-client.mjs' $probeArgs
1378
1441
  Write-Host 'MACHINE IDENTITY LIVE GATE PASS: public status/list + SPKI identity + signed Ed25519 ping verified.'
1379
1442
  }
1380
1443
 
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "schema": "deadbyte.process-policy.v1",
3
3
  "enabled": true,
4
- "grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.35-r58\\controller\\runtime\\process-grant.json",
5
- "state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.35-r58\\controller\\runtime\\process-state",
4
+ "grant_file": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.37-r60\\controller\\runtime\\process-grant.json",
5
+ "state_dir": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.37-r60\\controller\\runtime\\process-state",
6
6
  "native_host": {
7
- "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.35-r58\\bin\\deadbyte-process-host.exe",
7
+ "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.37-r60\\bin\\deadbyte-process-host.exe",
8
8
  "sha256": "daf9cfb371bee88cafbf5597eaa507fec504dbe0b0ddd40d0c3c2e02817f49e4"
9
9
  },
10
10
  "roots": {
11
11
  "core": {
12
- "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.35-r58",
12
+ "path": "D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.37-r60",
13
13
  "deny_paths": [
14
14
  "node_modules",
15
15
  "controller/runtime",
@@ -0,0 +1,87 @@
1
+ {
2
+ "schema": "deadbyte.provenance.v1",
3
+ "version": "0.15.36",
4
+ "source_model": "exact published and production-accepted 0.15.35 artifact -\u003e isolated R59 candidate -\u003e optional-plane degraded availability -\u003e runtime capability snapshot v3 -\u003e bounded Bridge Core reconciliation with no mutation replay -\u003e controller root preflight -\u003e fresh full regression/package/public frontdoor gates -\u003e operator-authorized publication with four-hour soak and clean-machine explicitly not completed -\u003e production activation/rollback/restore",
5
+ "signing": "ed25519",
6
+ "parent_tarball_sha256": "8259e30946d28dd138c1e2ce2f483fe1370d1658544f2adbfebafa4db8875bba",
7
+ "parent_activation_status": "PRODUCTION_ACCEPTED_WITH_SIGNED_ROLLBACK_AND_RESTORE",
8
+ "parent_rollback_receipt_sha256": "2f8aa5784fe6629c25af776b247b22b8e84d1a51c3420339ddd7a7445cf6ff9b",
9
+ "runtime_predecessor": {
10
+ "release_id": "v0.15.35-1b5715b276facbc0",
11
+ "manifest_sha256": "1b5715b276facbc00f8e341a554472cb4829e5af60e221c357c41b66053af9d4",
12
+ "generation_manifest_sha256": "047e73b62d7b7819b84201a221a09b7e647cacf21f82101ebed4fbd7e23fc430"
13
+ },
14
+ "source_predecessor_tarball_sha256": "8259e30946d28dd138c1e2ce2f483fe1370d1658544f2adbfebafa4db8875bba",
15
+ "source_predecessor_manifest_file_sha256": "1b5715b276facbc00f8e341a554472cb4829e5af60e221c357c41b66053af9d4",
16
+ "reproducibility": "0.15.35 remains immutable production authority while R59 is developed in D:\\Projects\\deadbyte-mcp\\development\\deadbyte-mcp-0.15.36-r59. Publication is operator-authorized with four-hour soak and clean-machine truth preserved as NOT_COMPLETED; no stable/final claim is permitted.",
17
+ "public_surface_evidence": {
18
+ "status": "PASS",
19
+ "baseline_release": "v0.15.35-1b5715b276facbc0",
20
+ "tool_count": 43,
21
+ "unchanged": 43,
22
+ "added": 0,
23
+ "removed": 0,
24
+ "schema_changed": 0,
25
+ "surface_sha256": "8e98978b720633acb0c7d4d65c36a945243c47f6dbccfa64ab877329f2956fe3",
26
+ "evidence_receipt_sha256": "2d3adcc33d010c4977974971222e6b13d613ff268097fff0eec0113e4f82f281"
27
+ },
28
+ "fresh_full_regression": {
29
+ "status": "PENDING_R59_AFTER_RELEASE_IDENTITY_CUT",
30
+ "proof_path": "proof/r59-full-regression-current.json"
31
+ },
32
+ "inherited_r58_consolidation": {
33
+ "frontend_status_vocabulary": true,
34
+ "read_only_structured_status": true,
35
+ "doctor_read_only_installation_runtime_transaction_checks": true,
36
+ "stale_foreground_identity_hardening": true,
37
+ "bridge_bundled_inside_release": true,
38
+ "bridge_recursive_local_dependency_binding": true,
39
+ "bridge_dynamic_relative_import_fail_closed": true,
40
+ "bridge_path_escape_fail_closed": true,
41
+ "isolated_controller_bridge_core_lifecycle": "PASS",
42
+ "performance_acceptance": "PASS_BOUNDED_PREPUBLISH",
43
+ "fresh_full_regression": "PASS",
44
+ "package_acceptance": "PENDING",
45
+ "registry_round_trip": "PENDING",
46
+ "production_activation_rollback_restore": "PENDING",
47
+ "stable_final_claim": false,
48
+ "cross_plane_acceptance": "PASS",
49
+ "public_surface_compatibility": "PASS_43_TOOLS_NO_SCHEMA_DRIFT"
50
+ },
51
+ "r59_runtime_hardening": {
52
+ "optional_plane_degradation": true,
53
+ "stable_tool_registration_on_optional_failure": true,
54
+ "capability_manifest_v3": true,
55
+ "live_overlay_authority_ceiling": true,
56
+ "bridge_bounded_reconciliation": true,
57
+ "bridge_health_requires_fresh_child_catalog_capability_attestation": true,
58
+ "mutation_unknown_outcome_no_replay": true,
59
+ "read_only_retry_only_before_dispatch": true,
60
+ "cancellation_aware_governor": true,
61
+ "controller_policy_root_preflight": true,
62
+ "public_surface_compatibility": "PASS_43_TOOLS_NO_SCHEMA_DRIFT",
63
+ "frontdoor_signed_ping": "PASS",
64
+ "four_hour_soak": "NOT_COMPLETED",
65
+ "clean_machine": "NOT_COMPLETED",
66
+ "stable_final_claim": false
67
+ },
68
+ "inherited_parent_performance_evidence": {
69
+ "summary_path": "D:\\Projects\\deadbyte-mcp\\testing\\0.15.35\\performance-summary.json",
70
+ "summary_sha256": "4586d8462ce1ae643d255315d4b4febfdd3f731dd8728e4b37b5636b622b756c",
71
+ "bridge_candidate_first_p95_reduction_pct": 63.632445348471286,
72
+ "bridge_baseline_first_p95_reduction_pct": 43.06594367803213,
73
+ "stdio_aggregate_p95_delta_pct": 1.984392678457768,
74
+ "limitations_preserved": true
75
+ },
76
+ "builder": "deadbyte-r59-resilient-runtime",
77
+ "parent_release_id": "v0.15.35-1b5715b276facbc0",
78
+ "parent_manifest_sha256": "1b5715b276facbc00f8e341a554472cb4829e5af60e221c357c41b66053af9d4",
79
+ "parent_generation_manifest_sha256": "047e73b62d7b7819b84201a221a09b7e647cacf21f82101ebed4fbd7e23fc430",
80
+ "source_predecessor_version": "0.15.35",
81
+ "operator_override": {
82
+ "four_hour_soak": "WAIVED_BY_OPERATOR",
83
+ "clean_machine": "WAIVED_BY_OPERATOR",
84
+ "reason": "Operator explicitly requested immediate deployment without further testing.",
85
+ "stable_final_claim": false
86
+ }
87
+ }
@@ -0,0 +1,187 @@
1
+ {
2
+ "schema": "deadbyte.release.v1",
3
+ "name": "deadbyte-mcp",
4
+ "version": "0.15.36",
5
+ "train": "R59",
6
+ "label": "RESILIENT CORE BRIDGE CAPABILITY RUNTIME",
7
+ "protocol_revision": "2026-07-28",
8
+ "parent": {
9
+ "version": "0.15.35",
10
+ "release_id": "v0.15.35-1b5715b276facbc0",
11
+ "manifest_sha256": "1b5715b276facbc00f8e341a554472cb4829e5af60e221c357c41b66053af9d4",
12
+ "generation_manifest_sha256": "047e73b62d7b7819b84201a221a09b7e647cacf21f82101ebed4fbd7e23fc430",
13
+ "tarball_sha256": "8259e30946d28dd138c1e2ce2f483fe1370d1658544f2adbfebafa4db8875bba",
14
+ "activation_status": "PRODUCTION_ACCEPTED_WITH_SIGNED_ROLLBACK_AND_RESTORE"
15
+ },
16
+ "runtime_predecessor": {
17
+ "release_id": "v0.15.35-1b5715b276facbc0",
18
+ "manifest_sha256": "1b5715b276facbc00f8e341a554472cb4829e5af60e221c357c41b66053af9d4",
19
+ "generation_manifest_sha256": "047e73b62d7b7819b84201a221a09b7e647cacf21f82101ebed4fbd7e23fc430"
20
+ },
21
+ "source_predecessor": {
22
+ "version": "0.15.35",
23
+ "tarball_sha256": "8259e30946d28dd138c1e2ce2f483fe1370d1658544f2adbfebafa4db8875bba",
24
+ "manifest_file_sha256": "1b5715b276facbc00f8e341a554472cb4829e5af60e221c357c41b66053af9d4"
25
+ },
26
+ "consolidation": {
27
+ "frontend_status_vocabulary": true,
28
+ "read_only_structured_status": true,
29
+ "doctor_read_only_installation_runtime_transaction_checks": true,
30
+ "stale_foreground_identity_hardening": true,
31
+ "bridge_bundled_inside_release": true,
32
+ "bridge_recursive_local_dependency_binding": true,
33
+ "bridge_dynamic_relative_import_fail_closed": true,
34
+ "bridge_path_escape_fail_closed": true,
35
+ "isolated_controller_bridge_core_lifecycle": "PASS",
36
+ "performance_acceptance": "PASS_BOUNDED_PREPUBLISH",
37
+ "fresh_full_regression": "PASS",
38
+ "package_acceptance": "PENDING_R59_FINAL",
39
+ "registry_round_trip": "PENDING",
40
+ "production_activation_rollback_restore": "PENDING",
41
+ "stable_final_claim": false,
42
+ "cross_plane_acceptance": "PASS",
43
+ "public_surface_compatibility": "PASS_43_TOOLS_NO_SCHEMA_DRIFT"
44
+ },
45
+ "stabilization": {
46
+ "semver_strict_validation": true,
47
+ "powershell_child_environment_normalized": true,
48
+ "explicit_state_root_propagation": true,
49
+ "guardian_cleanup_fail_closed": true,
50
+ "local_isolated_state_acceptance": "PASS",
51
+ "full_regression": "PASS",
52
+ "four_hour_soak": "WAIVED_BY_OPERATOR",
53
+ "clean_machine": "WAIVED_BY_OPERATOR",
54
+ "stable_final_claim": false
55
+ },
56
+ "platform": {
57
+ "primary": "win32",
58
+ "architectures": [
59
+ "x64"
60
+ ]
61
+ },
62
+ "capabilities": {
63
+ "host_execution_modes": [
64
+ "script",
65
+ "inline",
66
+ "native"
67
+ ],
68
+ "hardware_queries": [
69
+ "cpu",
70
+ "gpu",
71
+ "memory",
72
+ "storage",
73
+ "network",
74
+ "pci"
75
+ ],
76
+ "compact_tool_count": 43,
77
+ "full_tool_count": 117,
78
+ "full_tool_catalog": {
79
+ "path": "docs/R49-FULL-TOOL-CATALOG.json",
80
+ "base_sha256": "259fdc97a24575aff3f094911b5e86e4f512b07be7c2cc1286b0fd200d03a8c9"
81
+ },
82
+ "historical_r46_full_tool_count": 84,
83
+ "commander_reference_public_tool_count": 26,
84
+ "commander_additive_tool_count": 14,
85
+ "commander_drop_in": true,
86
+ "commander_rich_pdf": true,
87
+ "commander_incremental_pdf_revisions": true,
88
+ "commander_docx": true,
89
+ "commander_docx_header_footer_search": true,
90
+ "commander_xlsx": true,
91
+ "commander_url_read": true,
92
+ "commander_external_process_identity": true,
93
+ "commander_directory_read_fallback": true,
94
+ "commander_binary_detection": true,
95
+ "commander_protocol_adversarial": true,
96
+ "atomic_mutation_unknown_effect": true,
97
+ "package_slot_version_coherence": true,
98
+ "pid_reuse_self_recovery": true,
99
+ "bounded_controller_failure_evidence": true,
100
+ "durable_task_events_preserve_signed_envelope": true,
101
+ "capability_manifest_authority_truth": true,
102
+ "capability_manifest_host_grant_truth": true,
103
+ "process_profiles": [
104
+ "ping_hold",
105
+ "powershell",
106
+ "powershell_repl"
107
+ ],
108
+ "powershell_fileless": true,
109
+ "powershell_source_max_arg_bytes": 8192,
110
+ "powershell_persistent_repl": true,
111
+ "process_raw_input_profile_opt_in": true,
112
+ "process_tail_reads": true,
113
+ "process_wait_reads": true,
114
+ "process_chunked_output_ring": true,
115
+ "remote_reachability_ttl": true,
116
+ "remote_probe_timeout_retry": true,
117
+ "remote_dispatch_timeout_no_retry": true,
118
+ "observation_search_session_ttl": true,
119
+ "observation_search_session_cap": 128,
120
+ "windows_queries": [
121
+ "registry",
122
+ "services",
123
+ "drivers",
124
+ "sockets",
125
+ "volumes",
126
+ "usb",
127
+ "wsl"
128
+ ],
129
+ "machine_fs_list_entry_fault_isolation": true,
130
+ "native_windows_observation": true,
131
+ "desktop_bounded_semantic_wait": true,
132
+ "desktop_wait_signed_final_observation": true,
133
+ "desktop_wait_autonomous_goal_binding": true,
134
+ "native_windows_observer_sha256": "c9b46fc497b55b8f0ad1564c8e15f9c1cdf2a07f206b3c8fa7966c892058e920",
135
+ "human_livelog_visual_opcode": true,
136
+ "human_livelog_absolute_root_paths": true,
137
+ "human_livelog_trace_span": true,
138
+ "human_livelog_presentation_filter": true,
139
+ "human_livelog_tty_in_place_rewrite": true,
140
+ "human_livelog_expanded_summary": true,
141
+ "runtime_package_auto_coherence": true,
142
+ "coding_command_singleflight": true,
143
+ "coding_command_result_dedup_cache": true,
144
+ "foreground_desktop_host_fail_closed": true,
145
+ "human_livelog_slow_call_marker": true,
146
+ "human_livelog_peak_inflight": true,
147
+ "human_livelog_bounded_discovery": true,
148
+ "human_livelog_single_parse": true,
149
+ "offline_predecessor_host_revoke_before_capture": true,
150
+ "offline_recovery_self_process_exclusion": true,
151
+ "offline_recovery_foreground_guardian_family_exclusion": true,
152
+ "signed_rollback_launcher_snapshot_restore": true,
153
+ "bounded_core_startup_discovery": true,
154
+ "bundled_release_bridge": true,
155
+ "bridge_recursive_dependency_binding": true,
156
+ "doctor_read_only_diagnostics": true,
157
+ "coherent_structured_status": true,
158
+ "optional_plane_degradation": true,
159
+ "capability_manifest_v3": true,
160
+ "bridge_bounded_reconciliation": true,
161
+ "mutation_unknown_outcome_no_replay": true,
162
+ "controller_policy_root_preflight": true
163
+ },
164
+ "r59_runtime_hardening": {
165
+ "optional_plane_degradation": true,
166
+ "stable_tool_registration_on_optional_failure": true,
167
+ "capability_manifest_v3": true,
168
+ "live_overlay_authority_ceiling": true,
169
+ "bridge_bounded_reconciliation": true,
170
+ "bridge_health_requires_fresh_child_catalog_capability_attestation": true,
171
+ "mutation_unknown_outcome_no_replay": true,
172
+ "read_only_retry_only_before_dispatch": true,
173
+ "cancellation_aware_governor": true,
174
+ "controller_policy_root_preflight": true,
175
+ "public_surface_compatibility": "PASS_43_TOOLS_NO_SCHEMA_DRIFT",
176
+ "frontdoor_signed_ping": "PASS",
177
+ "four_hour_soak": "NOT_COMPLETED",
178
+ "clean_machine": "NOT_COMPLETED",
179
+ "stable_final_claim": false
180
+ },
181
+ "operator_override": {
182
+ "four_hour_soak": "WAIVED_BY_OPERATOR",
183
+ "clean_machine": "WAIVED_BY_OPERATOR",
184
+ "reason": "Operator explicitly requested immediate deployment without further testing.",
185
+ "stable_final_claim": false
186
+ }
187
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "bomFormat": "CycloneDX",
3
+ "specVersion": "1.6",
4
+ "serialNumber": "urn:cdx:deadbyte-mcp:r59:0.15.36",
5
+ "version": 1,
6
+ "metadata": {
7
+ "component": {
8
+ "type": "application",
9
+ "name": "deadbyte-mcp",
10
+ "version": "0.15.36"
11
+ }
12
+ },
13
+ "components": [
14
+ {
15
+ "type": "library",
16
+ "name": "@modelcontextprotocol/client",
17
+ "version": "2.1.0"
18
+ },
19
+ {
20
+ "type": "library",
21
+ "name": "@modelcontextprotocol/server",
22
+ "version": "2.1.0"
23
+ },
24
+ {
25
+ "type": "library",
26
+ "name": "typescript",
27
+ "version": "5.9.3"
28
+ },
29
+ {
30
+ "type": "library",
31
+ "name": "zod",
32
+ "version": "4.4.3"
33
+ },
34
+ {
35
+ "type": "file",
36
+ "name": "deadbyte-hardware-observer-r45.exe",
37
+ "version": "0.15.36",
38
+ "hashes": [
39
+ {
40
+ "alg": "SHA-256",
41
+ "content": "c9b46fc497b55b8f0ad1564c8e15f9c1cdf2a07f206b3c8fa7966c892058e920"
42
+ }
43
+ ]
44
+ },
45
+ {
46
+ "type": "file",
47
+ "name": "deadbyte-r59-bundled-bridge",
48
+ "version": "0.15.36",
49
+ "hashes": [
50
+ {
51
+ "alg": "SHA-256",
52
+ "content": "32aa34687e26e37a1ad6b34245b37aa1c7523ce216225a2d189fed4f6c4ff346"
53
+ }
54
+ ]
55
+ },
56
+ {
57
+ "type": "file",
58
+ "name": "deadbyte-r59-node-http-adapter",
59
+ "version": "0.15.36",
60
+ "hashes": [
61
+ {
62
+ "alg": "SHA-256",
63
+ "content": "281985edd717b991d78fe1853057a6a6cbf6fc5b57cab48ed8444b09b15dcd6e"
64
+ }
65
+ ]
66
+ }
67
+ ]
68
+ }
@@ -0,0 +1,26 @@
1
+ # R59 Task Contract
2
+
3
+ - TASK_ID: deadbyte-r59-robust-runtime
4
+ - OBJECTIVE: Produce backward-compatible DEADBYTE MCP 0.15.36 with fault-isolated optional planes, live capability snapshots, resilient Bridge/Core lifecycle, and verified direct-cloudflared frontdoor operation.
5
+ - ACTIVE_SKILL: implement-controlled-software-changes; final verification uses verify-production-implementation without repair authority.
6
+ - LEAD_ROLE: runtime implementation
7
+ - REVIEW_ROLES: independent release verifier after the candidate is frozen
8
+ - SOURCES: owner-approved 0.15.35 to 0.15.36 plan; exact 0.15.35 tarball SHA-256 `8259e30946d28dd138c1e2ce2f483fe1370d1658544f2adbfebafa4db8875bba`; sealed parent manifest `1b5715b276facbc00f8e341a554472cb4829e5af60e221c357c41b66053af9d4`
9
+ - FIXED: existing public tool names/counts/input contracts; authority planes; no Wrangler; no generic shell/PID/executable/stdin authority; no mutation of sealed 0.15.35 bytes
10
+ - TARGETS: Core initialization, capability resolver/manifest, bundled Bridge/governor, controller diagnostics, frontdoor verification and release evidence
11
+ - BOUNDS: optional configured planes may degrade independently; signed ledger remains the authority ceiling; no transparent replay after dispatch
12
+ - CLASS_2_DISCRETION: bounded retry/backoff/TTL values inside owner-approved limits, reversible and test-bound
13
+ - CLASS_3_DISCRETION: internal module boundaries, helper names and test organization
14
+ - PROHIBITED: dynamic plugin loading; authority widening; Host/Desktop auto-arm; in-place production edits; Wrangler transport
15
+ - METHOD_LOCK: direct cloudflared frontdoor; state-machine Bridge/Core lifecycle; signed static capability ceiling with live reducing overlay; status METHOD_CLOSED by owner instruction
16
+ - PRODUCTION_LINEAGE: source parent 0.15.35 tarball; delivery target npm `deadbyte-mcp@0.15.36`; runtime representation signed release/generation slot
17
+ - DEPENDENCIES: Node.js/PowerShell/MSVC already pinned by the parent; no new dependencies
18
+ - CAPABILITY_CONTEXT: local Windows host with D: isolated test state; npm and production activation only after deterministic gates
19
+ - ASSURANCE_MODE: HIGH_RISK
20
+ - TESTS: focused RED/GREEN, full regression, Windows gate, isolated acceptance, four-hour soak, registry round-trip, activation/rollback/restore
21
+ - ACCEPTANCE_ORACLES: actual MCP protocol/catalog, Ed25519 ping verification, OS process identity, protected hashes, npm registry bytes and independent receipt verifier
22
+ - ACCEPTANCE_ENVIRONMENT: current production Windows host with isolated D: state; clean-machine proof is not claimed
23
+ - PASS_CONDITION: every mandatory gate passes with fresh evidence and final authority is disarmed
24
+ - STOP_CONDITION: protected parent bytes drift, authority widens, unknown mutation is replayed, mandatory gate fails, or credentials/human authentication are required
25
+ - ROLLBACK: exact signed 0.15.35 pointer plus owned compatibility junction
26
+