RQ2-P3: bridge-federated-pool mechanism instrument + synthetic tests + calibration gate
Build the funnelling-mechanism instrument for the RQ2-P3 follow-up: a new
`bridge-federated-pool` topology drawing each circuit's bridge from a finite
willing-bridge pool (size B) under Zipf willingness skew (alpha), so bridge
concentration genuinely varies as a manipulated IV. Defensive measurement only:
synthetic seeds, no engine, no traffic, no confirmatory record read.
- assembler.py: add `bridge-federated-pool` branch + zipf_weights/weighted_draw
helpers; existing lead `bridge-federated` branch left untouched and
bit-reproducible (fresh bridge per seed).
- battery.py: enumerate_rq2p3_cells() = B{2,4,8} x alpha{0,1,2} + anchor B=50,
alpha=0 (separate fn; frozen 6-cell lead lattice unmutated).
- analysis/rq2p3_calibration.py: DRY synthetic-only §7 calibration gate; no
confirmatory data read. confirm_load_rq2.py/confirm.py/stats.py unchanged.
- tests/test_sor_rq2p3_pool.py: 9 synthetic tests (helpers + pool reuse/variance
+ lead branch reproducibility).
Calibration gate RAN: items 3 (monotonicity) & 4 (entropy) PASS; items 1 & 2 do
NOT match their naive-funnel wording because the ratified posterior yields a MIX
(rho>0 across the whole sweep incl anchor rho=+0.838; B=1 -> H=2.54 bits HIGH) --
the note-unique-bridge-artifact.md prediction, surfaced early. HARD HOLD: no
confirmatory battery, no prereg freeze; NEEDS-OPERATOR banner raised for the §7
item-1/2 re-word decision. Lead prereg SHA f22331a72e... untouched; worktree-only.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -92,6 +92,40 @@ def enumerate_cells() -> List[Cell]:
|
||||
return cells
|
||||
|
||||
|
||||
def enumerate_rq2p3_cells() -> List[Cell]:
|
||||
"""The RQ2-P3 funnelling-mechanism sweep cells (`rq2p3-mechanism-prereg.md` §4),
|
||||
kept **separate** from the frozen lead lattice: `enumerate_cells()` above is left
|
||||
byte-identical so every lead-pipeline caller (`plan_runs`, `battery_schedule`,
|
||||
`assembler_dry_check`, `collect_rq2_p1_arms`) stays bit-reproducible.
|
||||
|
||||
These use the new `bridge-federated-pool` topology (finite willing-bridge pool of
|
||||
size ``B`` under a Zipf willingness skew ``alpha``) so concentration genuinely
|
||||
varies. Tagged ``rq = "RQ2P3"`` so they are distinct from the frozen RQ1/RQ2
|
||||
cells and are skipped by the lead RQ2 collectors (which filter ``rq == "RQ2"``).
|
||||
|
||||
9 sweep cells: ``B ∈ {2,4,8} × alpha ∈ {0, 1.0, 2.0}``, plus the ``B=50, alpha=0``
|
||||
**calibration anchor** that reproduces the lead RQ2-P3 degeneracy (§7 gate item 1).
|
||||
"""
|
||||
cells: List[Cell] = []
|
||||
for b in (2, 4, 8):
|
||||
for alpha in (0.0, 1.0, 2.0):
|
||||
cells.append(Cell(
|
||||
"RQ2P3",
|
||||
f"RQ2P3/topo=bridge-federated-pool/selector=static/B={b}/alpha={alpha}",
|
||||
{"bridge": "off", "topology": "bridge-federated-pool",
|
||||
"selector": "static", "pool_B": str(b), "pool_alpha": str(alpha)},
|
||||
False,
|
||||
))
|
||||
cells.append(Cell(
|
||||
"RQ2P3",
|
||||
"RQ2P3/topo=bridge-federated-pool/selector=static/B=50/alpha=0.0",
|
||||
{"bridge": "off", "topology": "bridge-federated-pool",
|
||||
"selector": "static", "pool_B": "50", "pool_alpha": "0.0"},
|
||||
False,
|
||||
))
|
||||
return cells
|
||||
|
||||
|
||||
def declared_na_cells() -> List[Cell]:
|
||||
"""N/A cells declared at the design (not run, not dropped ad hoc) — padding is
|
||||
only defined for bridge-on, so bridge-off+padding is N/A (§2)."""
|
||||
|
||||
Reference in New Issue
Block a user