Skip to content

experiments: per-victim seeded arrival order (ADR 0044) + the deaf/mute row pair — the N-042 instrument pass - #188

Draft
EzequielPostan wants to merge 5 commits into
mainfrom
experiments-arrival-order
Draft

experiments: per-victim seeded arrival order (ADR 0044) + the deaf/mute row pair — the N-042 instrument pass#188
EzequielPostan wants to merge 5 commits into
mainfrom
experiments-arrival-order

Conversation

@EzequielPostan

Copy link
Copy Markdown
Collaborator

The instrument pass chartered at the E20 merge: the N-042 fix and the parked failure-severity run-row change, batched into one re-baseline generation per ADR 0036.

The arrival-order fix (ADR 0044, resolves N-042)

The wavefront's canonical (sender rank, addressee rank) delivery sort made every victim process its intra-wave arrivals in the same global sender-rank order, so under saturated budgets a low-ranked dialer won every admission race population-wide and a high-ranked dialer lost every one. Class-level measurands were exact under that order (ranks are independent of the class draw — every class-level prediction in E12/E18/E19 matched), but per-node tail events composed of many dial outcomes were amplified by orders of magnitude relative to the independent per-victim orders a real network approximates. Two passes measured the amplification: the E19 ordered flooder (386/400 good vs ≈ 400/400 under independent orders) and E20's seed-1148 pubseam cell (188/400 bad vs the corrected form's 84.8), both attributed to N-042 by rank dissection.

The fix: the wave sort key becomes (addressee rank, arrival key, sender rank, message identity), where the arrival key is SHA-256(lp("experiments/arrival-order/v1") ‖ run_seed ‖ lp(recipient) ‖ lp(sender)) — each recipient's intra-wave order over senders is decorrelated from every other recipient's by construction, and the whole run remains a pure function of (configuration, seeds), worker-count-independent. Driver-only; core untouched. The manifest's recorded seed-derivation rule names the arrival-key derivation.

Both frozen validation re-runs passed (the fix's own pre-registrations, recorded in the charter before the pass ran):

  • Seed 1148 (pubseam-mu40-n4k-k12-bp100-cap10): 80/400 bad vs the independent-order form's 84.8 (z = −0.59), split 72 mute-class / 8 deaf-class (registered ~83 %/17 %; the deaf count's z ≈ −1.9), refusals 23 060/run vs the registered 23 063. The canonical order had measured 188/400.
  • The E19 ordered flooder (ordered-flood-b50-cap16-s800): 400/400 good (canonical order: 386/400 — all fourteen strandings were the instrument's), with the class-level race columns identical to the decimal (40 617.4 rejected/run, 230 394.6 dial sends/run) — the budget refuses the same load under both orders; only the per-node race allocation changed.

The failure-severity row pair (the parked PR #152 batch partner)

Run rows gain deaf (vertices the largest component cannot reach — the in-defect) and mute (vertices that cannot reach it — the out-defect), the formal severity tables' stranded-node classification, computed in the existing condensation pass (one forward and one backward walk from the giant; a vertex disconnected in both directions counts in both classes). Raw-digraph classification under every model — M3's seed rescue shows in good, never here. The d-distribution (up_honest − largest_scc) was already derivable; the class split completes the formal folder's severity comparison surface.

The re-baseline generation (ADR 0036)

All seven baseline sweeps re-run and stored at 0764da3, compared against the 9197868 generation with the two added fields stripped: every measurand of record is value-identical — good counts equal in all seven sweeps, zero changes across topology verdicts, coverage, receipts, depth distributions, degree and standing-degree histograms, and all dial columns. The one anticipated movement is the sends/sends_by_kind/suppressed attribution triple (split-horizon origin ties among same-wave duplicate deliveries resolve by the new order): Δsends ≡ Δsuppressed on every publish slice, mean |Δ| < 1 send per publish against 10²–10⁵-send totals. docs/experiments/m2-comparison.md is re-validated and carries this generation's values (three quoted send figures moved at quoted precision; every other figure unchanged). Manifests differ in tool_commit and the extended seed_derivation only.

Records

  • ADR 0044 (the instrument's arrival-order model; alternatives priced).
  • N-042 resolved in specs/IMPLEMENTATION_NOTES.md with both re-runs' measured numbers.
  • Addenda at the N-042 references in docs/experiments/symmetric-flooding.md, docs/experiments/m4-synthesis.md, and the program of record.
  • The living row-schema contract (configs/experiments/README.md) documents the new columns and cites ADR 0044.
  • Golden serialization test updated (the conscious schema-change gate); new unit tests for the classification and the canonicalisation (per-victim key order, collection-order independence).

No new registered cells: both validation re-runs reuse their frozen seeds (1148, 1137); seeds 1150+ remain untaken.

🤖 Generated with Claude Code

EzequielPostan and others added 5 commits August 20, 2026 20:07
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…te row pair

The wave sort's canonical key becomes (addressee rank, arrival key,
sender rank, identity), the arrival key a pure function of (run seed,
recipient, sender) under experiments/arrival-order/v1 — each victim's
budget races decorrelate, resolving N-042's instrument amplification
(resolution recorded after the frozen validation re-runs). Run rows
gain the formal severity tables' stranded-node classification: deaf
(unreachable from the giant) and mute (cannot reach it), computed in
the existing condensation pass. Both changes are byte-affecting: one
re-baseline generation per ADR 0036 follows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eration recorded

Both frozen re-runs passed (seed 1148: 80/400 vs the form's 84.8,
z = -0.59, races exact; the ordered flooder: 400/400 with race columns
identical to the decimal). m2-comparison re-validated at the new
generation (three quoted send figures at quoted precision; every other
measurand value-identical); resolution addenda at the N-042 references.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…egistries

Pre-existing on main, surfaced by the CI toolchain update: the traits
are async for I/O-backed registries; the in-memory implementations are
synchronous under their mutex by design.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant