Merge branch 'master' into next

Carries today's maint batch up: the local CI image-scoping work, which
gives each run its own build context and test image tag instead of
writing the shared mutable one, and the retirement of the bloom-storm
chaos scenario.

Resolved as the earlier per-commit merges did, in the two files where
this line has diverged — the node test module list and the static suite
compose file. Parity holds at 21 legs a side, matching master.
This commit is contained in:
Johnathan Corgan
2026-07-26 17:17:32 +00:00
36 changed files with 423 additions and 485 deletions
+1 -1
View File
@@ -137,7 +137,7 @@ ping_path() {
# steady state, which is what real-world FIPS deployments see. To
# force on-wire multihop, isolate nodes on distinct docker networks.
case "$PROFILE" in
mesh|mesh-public)
mesh)
# Static-peer paths only — without mDNS / a Nostr relay in the
# test container set, non-adjacent pairs (A↔B, A↔C) can't
# establish direct UDP and the bench would either fail
+1 -1
View File
@@ -2,7 +2,7 @@
# Generate FIPS node configuration files from template and topology definition.
#
# Usage: ./generate-configs.sh <topology> [mesh-name]
# topology: mesh, mesh-public, chain, etc.
# topology: mesh, chain, etc.
# mesh-name: optional; when given, docker node identities are derived
# deterministically via sha256(mesh-name|node-id)
+2 -2
View File
@@ -89,7 +89,7 @@ echo ""
# nodes — labels DO NOT encode hop count, since peer discovery
# converges every same-subnet pair onto a direct UDP path within a
# few ticks regardless of the static `peers:` list.
if [ "$PROFILE" = "mesh" ] || [ "$PROFILE" = "mesh-public" ]; then
if [ "$PROFILE" = "mesh" ]; then
echo "Topology (static \`peers:\` from mesh.yaml):"
echo " A peers with: D, E"
echo " B peers with: C"
@@ -109,7 +109,7 @@ echo ""
echo "Waiting ${SETTLE_SECONDS}s for mesh convergence..."
sleep "$SETTLE_SECONDS"
if [ "$PROFILE" = "mesh" ] || [ "$PROFILE" = "mesh-public" ]; then
if [ "$PROFILE" = "mesh" ]; then
echo ""
echo "Testing mesh topology paths:"
iperf_test node-d node-a "$NPUB_D" "A→D"
+3 -3
View File
@@ -93,7 +93,7 @@ if [ "$PROFILE" = "chain" ]; then
wait_for_peers fips-node-c${FIPS_CI_NAME_SUFFIX:-} 2 20 || true
wait_for_peers fips-node-d${FIPS_CI_NAME_SUFFIX:-} 2 20 || true
wait_for_peers fips-node-e${FIPS_CI_NAME_SUFFIX:-} 1 20 || true
elif [ "$PROFILE" = "mesh" ] || [ "$PROFILE" = "mesh-public" ]; then
elif [ "$PROFILE" = "mesh" ]; then
# Mesh: check all nodes reach their configured peer counts
wait_for_peers fips-node-a${FIPS_CI_NAME_SUFFIX:-} 2 20 || true
wait_for_peers fips-node-b${FIPS_CI_NAME_SUFFIX:-} 1 20 || true
@@ -105,7 +105,7 @@ else
# section below is guarded by these same profile names, so the script
# ran no assertion at all and exited 0. A typo in the caller's profile
# argument produced a green run that tested nothing.
echo "ERROR: unknown profile '$PROFILE' (expected: chain, mesh, mesh-public)" >&2
echo "ERROR: unknown profile '$PROFILE' (expected: chain, mesh)" >&2
exit 2
fi
# Wait for full pairwise connectivity, progress-aware: the actual pings
@@ -119,7 +119,7 @@ wait_until_connected ping_all_quiet 45 15 || true
PASSED=0
FAILED=0
if [ "$PROFILE" = "mesh" ] || [ "$PROFILE" = "mesh-public" ]; then
if [ "$PROFILE" = "mesh" ]; then
# Sparse mesh topology: A-B, B-C, C-D, D-E, E-A, A-D
# Test all 20 directed pairs (5 nodes × 4 targets each)
echo ""