Enforce merged local and cluster coverage Add an owned coverage command with clean exports, remote peer collection, direct Ra bootstrap decision tests, and an initial 83 percent floor. Record the 83.58 percent baseline in Gate 0.
Enforce merged local and cluster coverage
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
modified
docs/2026-08-20-integration-hardening-and-staging-readiness-recommendations.md -
modified
lib/openagents/cluster/ra_bootstrap.ex -
modified
mix.exs -
added
ops/ci/coverage.sh -
modified
test/openagents/cluster/chaos_test.exs -
modified
test/openagents/cluster/drain_test.exs -
added
test/openagents/cluster/ra_bootstrap_test.exs -
modified
test/openagents/cluster/ra_cluster_test.exs -
modified
test/openagents/cluster_test.exs -
modified
test/openagents/work/handoff_test.exs -
added
test/support/openagents/test/remote_cover.ex
Diff
11 files changed, +147 -19
docs/2026-08-20-integration-hardening-and-staging-readiness-recommendations.md modified +16 -6
@@ -94,11 +94,19 @@ Completed on 2026-08-20:
| 94 | 94 |
|
| 95 | 95 |
|
| 96 | 96 |
|
| 97 |
|
|
| 98 |
|
|
| 99 |
|
|
| 100 |
|
|
| 101 |
|
|
| 97 |
|
|
| 98 |
|
|
| 99 |
|
|
| 100 |
|
|
| 101 |
|
|
| 102 |
|
|
| 103 |
|
|
| 104 |
|
|
| 105 |
|
|
| 106 |
|
|
| 107 |
|
|
| 108 |
|
|
| 109 |
|
|
| 102 | 110 |
|
| 103 | 111 |
|
| 104 | 112 |
|
@@ -1082,7 +1090,9 @@ through `mix assets.test`.
| 1082 | 1090 |
|
| 1083 | 1091 |
|
| 1084 | 1092 |
|
| 1085 |
|
|
| 1093 |
|
|
| 1094 |
|
|
| 1095 |
|
|
| 1086 | 1096 |
|
| 1087 | 1097 |
|
| 1088 | 1098 |
|
lib/openagents/cluster/ra_bootstrap.ex modified +33 -13
@@ -78,25 +78,22 @@ defmodule OpenAgents.Cluster.RaBootstrap do
| 78 | 78 |
|
| 79 | 79 |
|
| 80 | 80 |
|
| 81 |
|
|
| 82 | 81 |
|
| 83 |
|
|
| 84 |
|
|
| 85 |
|
|
| 82 |
|
|
| 83 |
|
|
| 84 |
|
|
| 86 | 85 |
|
| 87 | 86 |
|
| 88 | 87 |
|
| 89 | 88 |
|
| 90 | 89 |
|
| 91 |
|
|
| 92 |
|
|
| 90 |
|
|
| 91 |
|
|
| 93 | 92 |
|
| 94 | 93 |
|
| 95 | 94 |
|
| 96 | 95 |
|
| 97 |
|
|
| 98 |
|
|
| 99 |
|
|
| 96 |
|
|
| 100 | 97 |
|
| 101 | 98 |
|
| 102 | 99 |
|
@@ -104,8 +101,8 @@ defmodule OpenAgents.Cluster.RaBootstrap do
| 104 | 101 |
|
| 105 | 102 |
|
| 106 | 103 |
|
| 107 |
|
|
| 108 |
|
|
| 104 |
|
|
| 105 |
|
|
| 109 | 106 |
|
| 110 | 107 |
|
| 111 | 108 |
|
@@ -113,7 +110,7 @@ defmodule OpenAgents.Cluster.RaBootstrap do
| 113 | 110 |
|
| 114 | 111 |
|
| 115 | 112 |
|
| 116 |
|
|
| 113 |
|
|
| 117 | 114 |
|
| 118 | 115 |
|
| 119 | 116 |
|
@@ -122,9 +119,32 @@ defmodule OpenAgents.Cluster.RaBootstrap do
| 122 | 119 |
|
| 123 | 120 |
|
| 124 | 121 |
|
| 122 |
|
|
| 123 |
|
|
| 124 |
|
|
| 125 |
|
|
| 126 |
|
|
| 127 |
|
|
| 128 |
|
|
| 129 |
|
|
| 130 |
|
|
| 131 |
|
|
| 132 |
|
|
| 133 |
|
|
| 134 |
|
|
| 135 |
|
|
| 136 |
|
|
| 137 |
|
|
| 138 |
|
|
| 139 |
|
|
| 140 |
|
|
| 141 |
|
|
| 142 |
|
|
| 143 |
|
|
| 144 |
|
|
| 125 | 145 |
|
| 126 | 146 |
|
| 127 |
|
|
| 147 |
|
|
| 128 | 148 |
|
| 129 | 149 |
|
| 130 | 150 |
|
mix.exs modified +1
@@ -9,6 +9,7 @@ defmodule OpenAgents.MixProject do
| 9 | 9 |
|
| 10 | 10 |
|
| 11 | 11 |
|
| 12 |
|
|
| 12 | 13 |
|
| 13 | 14 |
|
| 14 | 15 |
|
ops/ci/coverage.sh added +29
@@ -0,0 +1,29 @@
| 1 |
|
|
| 2 |
|
|
| 3 |
|
|
| 4 |
|
|
| 5 |
|
|
| 6 |
|
|
| 7 |
|
|
| 8 |
|
|
| 9 |
|
|
| 10 |
|
|
| 11 |
|
|
| 12 |
|
|
| 13 |
|
|
| 14 |
|
|
| 15 |
|
|
| 16 |
|
|
| 17 |
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
|
|
| 21 |
|
|
| 22 |
|
|
| 23 |
|
|
| 24 |
|
|
| 25 |
|
|
| 26 |
|
|
| 27 |
|
|
| 28 |
|
|
| 29 |
|
test/openagents/cluster/chaos_test.exs modified +1
test/openagents/cluster/drain_test.exs modified +1
test/openagents/cluster/ra_bootstrap_test.exs added +53
@@ -0,0 +1,53 @@
| 1 |
|
|
| 2 |
|
|
| 3 |
|
|
| 4 |
|
|
| 5 |
|
|
| 6 |
|
|
| 7 |
|
|
| 8 |
|
|
| 9 |
|
|
| 10 |
|
|
| 11 |
|
|
| 12 |
|
|
| 13 |
|
|
| 14 |
|
|
| 15 |
|
|
| 16 |
|
|
| 17 |
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
|
|
| 21 |
|
|
| 22 |
|
|
| 23 |
|
|
| 24 |
|
|
| 25 |
|
|
| 26 |
|
|
| 27 |
|
|
| 28 |
|
|
| 29 |
|
|
| 30 |
|
|
| 31 |
|
|
| 32 |
|
|
| 33 |
|
|
| 34 |
|
|
| 35 |
|
|
| 36 |
|
|
| 37 |
|
|
| 38 |
|
|
| 39 |
|
|
| 40 |
|
|
| 41 |
|
|
| 42 |
|
|
| 43 |
|
|
| 44 |
|
|
| 45 |
|
|
| 46 |
|
|
| 47 |
|
|
| 48 |
|
|
| 49 |
|
|
| 50 |
|
|
| 51 |
|
|
| 52 |
|
|
| 53 |
|