Widen the churn-mixed baseline bounds to sit outside the scenario's own spread

The root-count ceiling of 4 was set from six runs whose observed maximum
was 3. Fourteen runs that recorded a baseline verdict put the real
distribution at 1 to 5 roots, so the ceiling sat at roughly the 93rd
percentile of the scenario's own variance: one sample in fourteen
exceeded it and four sat at or above it. It therefore reddened a share of
runs whatever the daemon did, which is a calibration fault rather than a
convergence one. Every sample ran the file's fixed seed, so the spread is
container timing and not a differing chaos schedule.

The ceiling is now 6, one step beyond the observed maximum, and the
parented floor moves to its complement at 4. That still fails a mesh
where seven or more of ten nodes are islanded, which is the collapse case
the assertion exists to catch; driving evaluate_baseline directly
confirms all fourteen samples pass and 7, 8 and 10 roots still fail.

min_sessions is left at 10 against an observed minimum of 12. It has
never fired, but the comment now records the margin as thin so a future
failure there is read as calibration first.
This commit is contained in:
Johnathan Corgan
2026-07-26 15:22:43 +00:00
parent cf129cde77
commit 24bf4d46d4
+33 -8
View File
@@ -75,12 +75,37 @@ bandwidth:
# #
# This one is calibrated rather than derived, because a scenario that # This one is calibrated rather than derived, because a scenario that
# stops and starts nodes on purpose does not hold a single spanning # stops and starts nodes on purpose does not hold a single spanning
# tree. The six provably-completed archived runs end with two or three # tree.
# distinct roots, seven or eight of ten nodes parented, and fifteen to #
# twenty sessions. The floors below sit one step outside those ranges # Calibrated 2026-07-26 against fourteen runs that recorded a baseline
# so an unlucky run does not go red, which leaves them catching a mesh # verdict, read from their assertions.txt files. Every one used this
# that collapsed rather than one that churned. Tighten them only # file's fixed seed 42 and therefore an identical chaos schedule, so the
# against a larger sample than six runs. # spread below is container timing rather than differing scenarios:
#
# distinct roots 1 2 3 4 5 -> 2 3 5 3 1 runs
# nodes parented 9 8 7 6 5 -> the exact complement, in all 14
# sessions 12 to 20, minimum 12
#
# The previous ceiling of 4 roots sat at roughly the 93rd percentile of
# that distribution: one run in fourteen exceeded it and four sat at or
# above it, so it reddened a share of runs whatever the daemon did. It
# was set from six runs whose observed maximum was 3, which is how a
# threshold one step outside a small sample ends up inside the real one.
#
# The ceiling is now 6, one step beyond the observed maximum of 5, and
# the parented floor is its complement at 4. That still fails a mesh
# that collapsed — seven or more of ten nodes islanded — which is the
# only thing this assertion was ever meant to catch. Do not read a pass
# as convergence: four of the six gating scenarios assert a floor of
# this kind, and it means the mesh formed and nobody errored.
#
# min_sessions stays at 10 against an observed minimum of 12. It has
# never fired and there is no evidence it is mis-set, but the margin is
# thin and a future failure there should be read as calibration before
# it is read as a defect.
#
# Tighten any of these only against a larger sample, and against one
# gathered at the invocation CI actually runs.
# #
# READ THIS BEFORE RETUNING: the numbers above describe the invocation CI # READ THIS BEFORE RETUNING: the numbers above describe the invocation CI
# gates on, which is not this file's own defaults. ci-local runs it as # gates on, which is not this file's own defaults. ci-local runs it as
@@ -98,8 +123,8 @@ bandwidth:
assertions: assertions:
baseline: baseline:
min_nodes_reporting: 10 min_nodes_reporting: 10
max_roots: 4 max_roots: 6
min_nodes_parented: 6 min_nodes_parented: 4
min_sessions: 10 min_sessions: 10
logging: logging: