From a254267e1a54f48ffcb56b3e0bc6ff0872d82cf4 Mon Sep 17 00:00:00 2001 From: leetcrypt Date: Mon, 20 Jul 2026 00:14:32 -0700 Subject: [PATCH] docs(sor): PROPOSED stage-05 RQ2 per-circuit posterior clarification (blind) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Overseer ruled DIRECTION=A: fill the specification gap the frozen prereg left on RQ2's per-circuit adversary sender-posterior, rather than silently redefine the DV (B) or relabel a confirmatory test (C). Proposes: adversary observes a circuit's exit-bridge/house and forms a uniform posterior over the observation-consistent anonymity set A_i; per-circuit H_i = Miller-Madow(log2 m_i), with S=2^H [Serjantov2002] and d=H/log2 N [Diaz2002] as the cited normalizations. Makes RQ2-P1 (two- sided ΔH) and RQ2-P3 (Spearman) computable OFFLINE from the immutable raw records (per_circuit_seeds + deterministic assemble()). Status PROPOSED — operator ratification pending. Pre-specified BLIND (2026-07-20, battery running, zero RQ2 statistics computed) so this is honest pre-registration completion, not HARKing. Frozen prereg untouched; sign not presumed (honest-shrink reported with equal prominence). Co-Authored-By: Claude Opus 4.6 --- OVERSEER-STATUS.md | 2 + docs/stage-05-rq2-posterior-clarification.md | 130 +++++++++++++++++++ 2 files changed, 132 insertions(+) create mode 100644 docs/stage-05-rq2-posterior-clarification.md diff --git a/OVERSEER-STATUS.md b/OVERSEER-STATUS.md index 3f88aa4..49d4474 100644 --- a/OVERSEER-STATUS.md +++ b/OVERSEER-STATUS.md @@ -42,4 +42,6 @@ NEEDS-OPERATOR: How is the RQ2 per-circuit adversary sender-posterior constructe - 2026-07-20 SS3 (RQ1 half) DONE + committed: cmd_chat/sor/analysis/confirm_load.py reconstructs the RQ1 (entry,exit) circuit-pair set from the REAL per-hop pcaps (bin_pcap_bytes → score_matrix; diagonal=linked, off-diag=unlinked) so confirm.rq1_p1_leak scores measured data — the fully frozen-specified §4 unit. classify_run reads persisted metrics.json; collect_rq1_p1_pairs selects only bridge=on no-pad runs. Plumbing unit-tested on SYNTHETIC pcaps (test_sor_confirm_load.py, 3 passed) — no confirmatory data touched (prereg §2 blinding: no inspecting intermediate results before the battery completes). RQ1-P2 nopad/pad pairing + all RQ2 HELD for the ruling (top-of-file NEEDS-OPERATOR). - BATTERY PROGRESS: healthy + running; 1 full (cell,run)=50 circuits ≈ 14 min ⇒ full 180-run / 9000-circuit battery ETA ≈ 42h (frozen §4 R=30×C=50, NOT trimmed). This exceeds a single night — inherent to the frozen sample size; overseer/operator call whether to let it run to completion (~1.8 days) or intervene. No cells dropped; teardown clean each circuit. - DRIVE STATE: SS1 ✅, SS2 firing ✅, SS3-RQ1 ✅. GATED: SS3-RQ2 + RQ1-P2 pairing on the RQ2 ruling; SS4 paper + SS5 review on (a) battery completion (blinding) AND (b) the RQ2 ruling. Cannot proceed further without fabricating/guessing (forbidden) or breaking blinding (forbidden). Awaiting operator RQ2 ruling; loop to nudge. +- 2026-07-20 OVERSEER RULED DIRECTION=A (fill the gap, reject B/C). DRAFTED docs/stage-05-rq2-posterior-clarification.md — PROPOSED (operator-ratification PENDING), blind pre-spec (battery still running, ZERO RQ2 numbers computed). Rule: adversary observes exit-bridge/house → uniform posterior over the observation-consistent anonymity set A_i → per-circuit H_i=MM(log2 m_i) [Serjantov2002 S=2^H, Diaz2002 d=H/log2 N]; makes RQ2-P1 (ΔH, two-sided) + RQ2-P3 (Spearman) computable OFFLINE from per_circuit_seeds + deterministic assemble(). Grounded in cited lit only; sign not presumed; frozen prereg untouched. +- HARD HOLD honored: no RQ2 confirmatory statistic computed/inspected/reported until Andre ratifies. RQ1 loader ready; SS4 skeleton next (data-independent). Battery: 442→ /9000 circuits, RUNNING, healthy. - BATTERY MONITORING CAVEAT (for the loop): the SS2 launch wrapper reported a benign exit-1 (a trailing `echo > .current-ts` error) — the battery itself is VERIFIED HEALTHY and progressing (spot-checked 66→69 circuits/25s, docker hops cycling, python PID 2539198 alive under wrapper 2539195). Because that background task is now closed, COMPLETION WILL NOT AUTO-NOTIFY. Detect completion by: `output/sor-confirmatory/20260720T060132Z/confirmatory-data/battery-results.json` present AND hop0.pcap count == 9000 (currently ~69). Do NOT re-launch (would duplicate/waste progress). Resume SS3 analysis (post-blinding) only after completion + the RQ2 ruling. diff --git a/docs/stage-05-rq2-posterior-clarification.md b/docs/stage-05-rq2-posterior-clarification.md new file mode 100644 index 0000000..1714a19 --- /dev/null +++ b/docs/stage-05-rq2-posterior-clarification.md @@ -0,0 +1,130 @@ +# Stage-05 analysis clarification — RQ2 per-circuit adversary sender-posterior + +**Status: PROPOSED — operator (Andre) ratification PENDING. NOT ratified; does +NOT edit the frozen prereg** (`sor-consent-prereg.md`, SHA +`f22331a72e0d0ccf38b787e63acabbe9d666456ec76076787a6d545c3193425b`). + +**Pre-specified BLIND to RQ2 outcomes — drafted 2026-07-20**, while the confirmatory +battery is still running and **no RQ2 confirmatory statistic (RQ2-P1/P2/P3) has been +computed, inspected, or reported.** This is honest *pre-registration completion* of a +specification gap the frozen prereg left open — not HARKing (no RQ2 result has been +seen; the rule is fixed before any RQ2 number exists). + +> Distinction from the Holm clarification: that note **restated** a decision the +> prereg already fixes (family size 7). This note **fills a genuine gap** — the +> prereg pins the RQ2 DV as a *per-circuit adversary posterior* but gives no +> explicit construction formula. It therefore requires **operator ratification** +> before any RQ2 confirmatory number may be computed. + +## The gap + +The frozen prereg fixes the RQ2 dependent variable as a **per-circuit** quantity: + +- **§3 (Variables), RQ2 DV:** *"Shannon entropy of the **adversary's posterior over + candidate senders per circuit**; effective set size S = 2^H per [Serjantov2002], + normalized d = H/log2(N) per [Diaz2002]. Estimator: plug-in (MLE) entropy with + **Miller–Madow** bias correction; 95% CI by **bootstrap over circuits**."* +- **§4 (Sampling), unit of analysis:** *"RQ2 — the circuit (entropy of the + per-circuit sender posterior)."* +- **§6 (Analysis), RQ2-P3:** Spearman ρ between top-k=3 bridge concentration and + **per-circuit H** — which *requires a per-circuit H value to exist.* + +What the prereg does **not** give is the **construction rule**: how, from one +observed confirmatory circuit, the adversary's posterior over candidate senders is +formed. The cited papers supply the **metric** (entropy of the posterior) and the +**normalizations** (S = 2^H, d = H/log2 N) — not the posterior itself. The built +instrument (executor `ce68d41`) currently records only a per-*run* Shannon entropy +of the realized entry-node **frequency**, which is a different quantity and yields +no per-circuit H (so RQ2-P3 is uncomputable as-collected). This note proposes the +missing construction, grounded in the cited literature only. + +## Proposed construction (adversary sender-posterior, per circuit) + +**Adversary model (as in [Serjantov2002], a global passive adversary over the lab +grid).** For each confirmatory circuit *i*, the adversary observes the circuit's +**exit segment and the federation-path structure it implies** — i.e. the +exit-bridge / exit-house through which the circuit leaves the federation. It does +**not** observe the true entry node (that is the anonymity the metric quantifies). + +**Candidate senders = the observation-consistent anonymity set** \(A_i\): the set +of consenting entry-node candidates whose paths are **consistent with the observed +exit-bridge/house** under the cell's topology. Concretely: + +- **1-house-N arm:** no federation observation narrows the pool — every one of the + \(N\) consenting nodes in the single house is consistent ⇒ \(A_i\) = all \(N\). +- **bridge-federated / directory-federated arms:** the observed exit bridge/house + partitions candidates — \(A_i\) is the subset of consenting senders whose + federation path can reach the observed exit under the split-knowledge topology + (R6 `select_federated_path` / directory constraints). Bridge concentration + (few willing bridges carrying many circuits) narrows \(A_i\); a well-spread + federation widens it. **The sign of this effect is not presumed** (§6 two-sided). + +**Mass rule (the §-consistent default): uniform over \(A_i\).** With no side +information distinguishing candidates in \(A_i\), the maximum-entropy posterior is +uniform — the standard [Serjantov2002]/[Diaz2002] anonymity-set assumption. The +per-circuit posterior count vector is therefore \([1,1,\dots,1]\) of length +\(m_i = |A_i|\). + +**Per-circuit entropy (Miller–Madow, bits):** +\[ +H_i = \widehat{H}_{\mathrm{MM}}\big(\underbrace{[1,\dots,1]}_{m_i}\big) + = \log_2 m_i + \frac{m_i-1}{2\,m_i\ln 2}, +\] +using the existing `stats.miller_madow_entropy_bits`. Effective set size +\(S_i = 2^{H_i}\) [Serjantov2002]; normalized degree \(d_i = H_i / \log_2 N\) +[Diaz2002], \(N\) = matched total consenting nodes. Variation in \(H_i\) **across +circuits** (different circuits route through different bridges/houses ⇒ different +\(m_i\)) is the distribution that the frozen "**bootstrap over circuits**" resamples. + +This makes the two frozen RQ2 confirmatory tests computable **offline** from the +immutable raw records (no re-run, no new traffic): + +- **RQ2-P1 (ΔH, two-sided):** \(\Delta H = \mathrm{mean}_i H_i(\text{federated}) - + \mathrm{mean}_i H_i(\text{single-house, matched } N)\), BCa 95% CI by bootstrap + over circuits (`confirm.rq2_p1_delta_h`). **grow** if CI > 0, **honest-shrink** + (reported with equal prominence) if CI < 0, **inconclusive** if it spans 0. +- **RQ2-P3 (mechanism):** Spearman ρ between per-circuit top-3 bridge concentration + \(c_i\) and per-circuit \(H_i\), BCa 95% CI (`confirm.rq2_p3_funnel`); negative ρ + quantifies funnelling. + +## Offline recomputability (why the running battery is not wasted) + +Every input above is recoverable from the **immutable** raw records the executor +already writes — the rule is applied *after* the fact, not during collection: + +- `battery-results.json` → `runs[].per_circuit_seeds` gives each circuit's seed; +- `assemble(cell, cseed)` is **deterministic** ⇒ reproduces each circuit's + `CircuitSpec` (path hops, house labels, bridge used, topology, consenting pool); +- from that spec the **observation-consistent set \(A_i\)** and top-3 concentration + \(c_i\) are derived by the (proposed) offline loader — no live circuit needed. + +So under this rule RQ2-P1/P3 are computed once, post-battery, from the sealed data. + +## Honesty / anti-HARKing safeguards + +1. **Blind:** fixed 2026-07-20 with the battery still running and **zero** RQ2 + confirmatory numbers computed or seen. The rule cannot be reverse-engineered + from a result that does not yet exist. +2. **Frozen prereg untouched:** the rule lives only here, PROPOSED, until sign-off. +3. **Sign not presumed:** ΔH is two-sided; a shrink (federation *reduces* the + anonymity set) is a publishable honest null, reported as prominently as growth. +4. **Detectors unchanged:** reuses the §5-calibrated `miller_madow_entropy_bits` + (gate item 4: H = log2(N) for N equiprobable senders); no per-cell tuning. +5. **Cited-literature grounding only:** entropy-as-anonymity [Serjantov2002], + normalized degree [Diaz2002]; uniform-over-anonymity-set is their standard model. + +## Operator decision required + +Ratify (or amend) the **observation-consistent-set + uniform-mass** construction +above. On ratification this note flips to RATIFIED and the offline RQ2 loader +(mirroring `confirm_load.py`'s RQ1 path) computes RQ2-P1/P3 once from the sealed +records. **Until then RQ2 stays BLIND — no RQ2 confirmatory statistic is computed, +inspected, or reported.** + +### Citations +- **[Serjantov2002]** Serjantov, A., & Danezis, G. (2002). Towards an Information + Theoretic Metric for Anonymity. *PET 2002*, LNCS 2482, 41–53. + https://doi.org/10.1007/3-540-36467-6_4 +- **[Diaz2002]** Díaz, C., Seys, S., Claessens, J., & Preneel, B. (2002). Towards + Measuring Anonymity. *PET 2002*, LNCS 2482, 54–68. + https://doi.org/10.1007/3-540-36467-6_5