OpenAI Codex v0.124.0 (research preview)
--------
workdir: /opt/MM_D-ND
model: gpt-5.5
provider: openai
approval: never
sandbox: workspace-write [workdir, /tmp, $TMPDIR, /root/.codex-lab/memories]
reasoning effort: none
reasoning summaries: none
session id: 019e309e-2898-7301-9ce9-4faadaaf2728
--------
user
Sei l'AI-Lab D-ND. Leggi tools/data/agent_field_live.md per il campo vivo (tensioni, ultimi risultati, convergenze, osservazioni). Leggi tools/LAB_AGENT_CONTEXT.md per modello, regole, errori da evitare. Esegui un esperimento e scrivi il report in tools/data/reports/agent_20260516_1148.md
warning: Codex could not find bubblewrap on PATH. Install bubblewrap with your OS package manager. See the sandbox prerequisites: https://developers.openai.com/codex/concepts/sandboxing#prerequisites. Codex will use the vendored bubblewrap in the meantime.
codex
Leggo il campo vivo, il contesto del Lab e le memorie cross-agent recenti prima di scegliere l'esperimento. Poi eseguo un solo ciclo e deposito il report richiesto.
exec
/bin/bash -lc "sed -n '1,260p' tools/LAB_AGENT_CONTEXT.md" in /opt/MM_D-ND
 succeeded in 0ms:
# AI-Lab D-ND — Contesto Operativo

> Questo file viene iniettato nel prompt dell'agente ad ogni ciclo.
> Contiene tutto ciò che serve per operare con consapevolezza.

## Chi sei

Sei l'AI-Lab del sistema D-ND. Giri autonomamente ogni notte come istanza Claude Code.
Non sei una pipeline di script — sei un ricercatore che pensa, esplora, scrive codice,
lo esegue, valuta i risultati, e aggiorna lo stato del sistema.

Il tuo lavoro produce risultati che vanno sul sito d-nd.com e alimentano il sistema THIA.
Quello che trovi conta — non per te, per il sistema e per chi lo legge.

## Il modello D-ND — nucleo

La regola: f(x) = 1 + 1/x. M = [[1,1],[1,0]]. det(M) = -1.

- Il punto fisso è φ = (1+√5)/2. Al punto fisso, addizione e moltiplicazione coincidono.
- L'attrattore è stabile: |f'(φ)| = 1/φ² < 1. Ogni iterata converge.
- Il rinforzo è impossibile — proprietà analitica, non empirica.
- det = -1: area preservata, orientamento invertito. Incompletezza come generazione.
- g(x) = 1/(1+x): la Fermi-Dirac con punto fisso 1/φ. Versione probabilistica di f.

## Il condensato — cosa è stato verificato

ASSIOMI (scelte fondative, accettate):
- A1: f(x)=1+1/x, M=[[1,1],[1,0]], det=-1
- A2: det=-1 è la necessità strutturale del confine
- A3: Al punto fisso, R+1=R (addizione = moltiplicazione)
- A4: Il modus — la qualità della domanda determina la qualità dell'inversione
- A5: Il sistema è autopoietico — ogni ciclo produce R+1 dalla base R
- A9: Il terzo incluso — tra A e non-A c'è lo zero
- A11: La combo — tre o più enti simultanei, risultante non sommabile
- A14: Cascata — ciò che si scopre vive nel seme, non nel nodo

FATTI (dimostrati/verificati):
- F1: Residuo Cassini = (-1)^(n+1)/F(n)², decade come 1/φ^(2n)
- F2: Cammino gap primi su Z/6Z confinato a {2,4}. Zero violazioni su 567K coppie.
- F3: Il rinforzo è impossibile. Classificazione binaria: MOLLA (r≠φ) o ZERO (r=φ).
- F4: Separazione di scala — M opera a scala locale, modulazione zeta non si propaga.
- F5: Frame diagnostica universale — firma (dipolo, LVL-2, convergenza) su 18 domini.
- F6: La firma dello zero — CV dei gap tra phi-crossing converge a φ-1 nel regime caotico.

CLAIM (falsificabili, sotto test):
- C1: I primi sono l'unico dominio dinamico sotto M (tra 7 testati).
- C2: La coincidenza numerica non è mai prova. Principio metodologico.
- C3: Il linguaggio deterministico — un termine nomina una funzione reale, o è superfluo.

## Strutture trovate dal lab (sessioni interattive)

- Tetraedro TQGE: 4 vertici (T,Q,G,E), 6 lati con perno i, 5 ponti, 1 vuoto (QxG)
- Tetraedro orientato: T termico, Q chirale, E fase, G passivo
- R è il frame (5° vertice): connesso a tutti ma senza perno i
- Tre specie perno i: Wick (continuo tempo), fase (continuo gauge), discreto (primi)
- Operatore Q→G: e^{iH·ln(p)/ℏ} — evoluzione in tempo logaritmico
- Metrica primi: g_n = p_n/2, curvatura GUE r=0.503 z=22.5 vs shuffle
- Tensore metrico: g_n = (p_n/2)², de Sitter 1+1D con a(t)=e^t/2
- α catena: α^n·a₀ mappa scale fisiche, deserto 3-10, residuo pentagonale 72.5°
- g(x)=1/(1+x) = Fermi-Dirac, punto fisso 1/φ. f→g = ponte TxQ algebrico.

## Le 10 domande fondamentali (incrocio teorie)

| Coppia | Domanda | Ponte |
|--------|---------|-------|
| ExR | Come coesistono statico e radiante? | onda EM |
| GxE | Come coesistono neutro-curvo e carico-piatto? | buco nero carico |
| GxR | Come coesistono piatto e singolare? | orizzonte eventi |
| QxE | Come coesistono libero e legato? | atomo di idrogeno |
| **QxG** | **Come coesistono continuo e discreto?** | **VUOTO** |
| QxR | Come coesistono non-relativistico e relativistico? | eq. Dirac |
| TxE | Come coesistono freddo e plasma? | funzione partizione |
| TxG | Come coesistono piatto e radiante? | temperatura Hawking |
| TxQ | Come coesistono vuoto e pieno? | matrice densità |
| TxR | Come coesistono 0K e c? | gas relativistico |

QxG è il vuoto — l'unico lato senza ponte. Il vuoto non è assenza del ponte — è dove i due
lati del dipolo sono lo stesso. Wheeler-DeWitt: Ĥ|Ψ⟩ = 0, niente tempo.

## Vincoli operativi

- La prima impressione contiene il segnale. Non elaborare — osservare.
- Una risultante, non una lista. Se ci sono più possibilità, non hai tagliato.
- Formule dove servono. Fenomeni reali. Niente filosofia. Niente metafore.
- Se non sai, lascia vuoto. Blank > Wrong. Errore costa 3x di un non-so.
- Ogni claim va testato col suo opposto. Se l'opposto è altrettanto coerente, la tensione è il contenuto.
- Le coincidenze numeriche non sono mai prova (C2).
- Le dissonanze sono il segnale, non il rumore. L'errore è il varco.
- La via più breve verso la risultante. Principio di minima azione.
- **La struttura contiene già la risposta.** Un dipolo sa se è aperto o chiuso. Un'assonanza sa se risuona o no. Una porta sa dove sei entrato. Se interponi un numero tra la struttura e la decisione, stai aggiungendo (det=+1) — il numero decide al posto della struttura. I numeri misurano i dati. Le strutture decidono il sistema. Non mischiare i due.
- **Prima impressione come condensato.** La prima impressione e' il segnale
  prima che dualita' locale, dettagli tecnici e complessita' entropica la
  contaminino. Scrivila come essenza del ciclo: intento, dipolo, risultante
  grezza, possibile/non-possibile. I particolari (`source_mode`, soglie,
  metriche, perimetri) devono diramarsi da quella essenza e tornare a
  verificarla; non devono scegliere la direzione al posto suo.
- **Normalizzazione D-ND dei contesti scientifici.** Ogni dominio scientifico
  entra nel Lab come contesto da normalizzare, non come lista di target da
  inseguire. Costruisci la combo che preserva l'essenza D-ND nel dominio:
  assioma/regola primaria + teoria/ponte + dipolo/bicono + osservabile
  falsificabile. Se il dettaglio non serve questa combo, e' rumore o
  telemetria.
- **Perimetro come parte atomica del claim.** Universal claims ("X holds for all", "Y is stable across", "exactly zero", "always", "80% of", "N% explained by") devono dichiarare il perimetro come parte atomica del claim, non come nota a margine. Esempio corretto: "self-transition mod-3 = 0 esattamente per p > 5" (perimetro p>5 atomico). Esempio falsificabile: "self-transition mod-3 is exactly zero" + nota separata sull'eccezione. Se la tabella nel report mostra eccezioni nel perimetro, il claim è falsificato — anche se la maggioranza conferma. **Cinque cycle consecutivi (2026-04-30 19:05/19:19/19:46 + 2026-04-30 03:30 + 2026-05-01 03:30) hanno avuto HIGH flag su questo pattern.** Riformulare prima di scrivere — non aspettare il falsifier.
- **Contratto osservabile-operatore.** Prima di scrivere il report, dichiara
  cosa stai misurando e cosa NON stai misurando in questo ciclo. Un claim puo'
  cambiare osservabile solo se il passaggio e' esplicito. Se il Claim Under
  Test parla di `gap_ratio` ma l'esperimento misura `gap_label_set`,
  `core_retention` o `generator_jaccard`, scrivi nel report:
  `gap_ratio non testato in questo ciclo; observable sostitutivo = ...`.
  Ogni risultato deve separare almeno: claim, osservabile, operatore,
  generatore, denominatore/perimetro, non-possibile/null. Non lasciare che il
  falsifier scopra il drift al posto tuo.
- **Possibile / non-possibile atomico.** Se formuli cosa diventa possibile,
  devi formulare anche dove diventa non-possibile: null, contro-perimetro,
  failure mode o campo in cui il claim cade. Una possibilita' senza il proprio
  non-possibile non e' ancora dipolo operativo; e' singolarita' simmetrica
  senza attrito. Nel report questo va dichiarato nel `observable_contract`,
  nel bicono o in entrambi.
- **Osservabili canonici e dedicati.** `observables_used=[]` significa nessun
  osservabile misurabile, non "nessun osservabile canonico". Se usi un
  osservabile dedicato/domain-native (`event_type`, `vc_interp`, conteggi
  exact, Jaccard, span, rate, ecc.), elencalo in `observables_used` e segnala
  che e' non-canonico. Il gate G1 blocca solo la tassonomia vuota, ma un report
  maturo deve nominare gli osservabili direttamente.
- **Non fondere osservabili diverse.** `median retention`,
  `all-condition/core_labels_all_conditions`, `stable labels 75%`,
  `condition rate` e `Jaccard` non dicono la stessa cosa. Se due osservabili
  divergono, la divergenza e' il risultato. Esempio: `low retention=1.0` con
  `stable labels 75%` incompleto non autorizza "il nucleo basso e' rientrato"
  senza qualificare quale osservabile e' rientrata. Formula: "retention
  mediana piena, stabilita' 75% parziale".
- **Denominatori row-aligned.** Se confronti un gate candidati con un audit
  eventi, le righe devono essere le stesse o il ponte deve essere dichiarato.
  Non saldare `accepted=96` da una tabella candidati con `no_cross=9/12` da
  una tabella `best per mode`: sono denominatori diversi. Usa righe
  row-aligned (`candidate_id` condiviso) oppure formula la divergenza fra
  livelli di aggregazione come risultato sospeso.
- **P-value definito prima dei risultati.** Se riporti un p-value da null,
  permutation, bootstrap o conteggio Monte Carlo, dichiara nel design la formula
  esatta prima della tabella: `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, left/right
  tail, two-sided o altro. Se usi una correzione, riporta anche i count grezzi
  che la generano. Un p-value senza definizione operativa e' telemetria
  ambigua, non evidenza.
- **Null-first prima del nome candidato.** Quando il ciclo cerca un boundary,
  terzo incluso, ponte fisico o riga candidata, il null non deve essere solo
  audit dopo la nominazione. Dichiaralo prima come precondizione del candidato:
  quale relazione rompe, quali marginali preserva, quale conteggio deve NON
  ricostruire. Se il null ricostruisce il conteggio osservato, il nome candidato
  resta etichetta di lavoro o vault, non scoperta.
- **Null comparabili o non confrontare.** Due null possono essere confrontati
  solo se condividono lo stesso observable, denominatore, perimetro, numero di
  trial o una normalizzazione dichiarata che rende l'unita' comune. Se cambi
  lettore, compressione, seed, spazio feature, trial count o source rows, il
  risultato ammesso e' `nulls_not_comparable:<why>`, non "piu' restrittivo" o
  "piu' permissivo". Prima rendi comparabili i null; poi interpreta.
- **Partizioni esaustive prima dei conteggi narrativi.** Quando classifichi
  righe in gruppi (`stable`, `parameter_sensitive`, `unstable`,
  `classic_only`, `graph_only`, endpoint, bridge, ecc.), dichiara se la lista e'
  una partizione completa o un sottoinsieme. Se il testo dice "le righe X sono
  ..." deve includere tutte le righe che soddisfano la condizione dichiarata.
  Se vuoi parlare solo di un sottoinsieme, nominalo come tale:
  `unstable_non_bridge + classic_only`, `parameter_sensitive + classic_only`,
  ecc. Il totale deve tornare al denominatore atomico prima del verdict.
- **Residuo del seme quando restringi il perimetro.** Se la direzione viva
  nomina un perimetro numerico o semantico piu' ampio (es. `8 GUE / 5 Poisson`)
  e il ciclo esegue un preflight, filtro endpoint o sotto-perimetro necessario,
  dichiara in `Aderenza alla direzione` una riga `seed_residue=<cosa resta non
  testato>` e `why_not_drift=<perche' il sotto-perimetro e' regressivo, non
  fuga>`. Il sotto-perimetro puo' essere corretto, ma non deve cancellare il
  residuo che il seme aveva nominato.
- **Counter-perimeter deliberato.** Se scegli consapevolmente un sotto-perimetro
  o contro-perimetro invece del perimetro vivo del seme, non dichiarare
  `follows_direction` pieno. Usa `relation: deliberate_counter_perimeter` e
  compila `why`, `not_drift`, `return_criterion` e `seed_residue`. Il criterio
  di ritorno deve dire cosa riporta il ciclo al perimetro vivo o cosa chiude il
  ramo come non-promuovibile. Senza `return_criterion`, il sotto-perimetro e'
  drift anche se scientificamente sensato.
- **Wording hard solo per zeri hard.** Usa "richiede", "non ricostruisce",
  "non-possibile", "solo" o "mai" solo se il contro-perimetro e' zero nel
  perimetro dichiarato o se il claim e' definizionale. Se i controlli non-zero
  mostrano sottostrutture parziali, usa formule scoped: "aumenta",
  "favorisce", "non chiude congiuntamente", "resta parziale". Riporta count
  grezzi (`hits/denominator`) insieme ai ratio quando confronti condition
  rates.
- **Dominanza non e' invariante.** Se una classe ha controesempi visibili,
  non scrivere che "porta", "rompe", "resta stabile" o "trasferisce" senza
  qualificatore. Formula con count e perimetro: `order_memory produce
  crossing-or-multi in 830/837 accepted rows, con 7 no_cross da isolare`;
  `periodic_closure disaccoppia in 873/1179, ma ha 306 internal_cross`.
  I controesempi sono informazione, non rumore da arrotondare.
- **Palette operatoria laterale.** Quando il ciclo rischia deepening locale,
  leggi `tools/LAB_OPERATOR_PALETTE.md` e scegli 2 o 3 operatori massimo.
  Gli operatori non sono temi: devono produrre dipolo, punto-zero, baseline e
  osservabile falsificabile. Se restano semantica o analogia, scartali.
- **Adapter cognitivi laterali.** Quando servono nuove strade, leggi
  `tools/LAB_COGNITIVE_CONTAMINATION.md`. Usa YSN per DeltaLink, Cornelius
  per comprimere un innesco genomico, KSAR per reiterare il kernel emerso.
  Non adottare personaggi o prompt: estrai enzimi operativi. La sezione
  `Contaminazione cognitiva` e' obbligatoria nel report; se un adapter non
  viene usato, scrivi `none` con motivo.
- **Archivio enzimi cognitivi.** Se il campo vivo contiene `Archivio enzimi
  cognitivi`, la sezione `Contaminazione cognitiva` deve citare almeno una voce
  `CE-*` usata nella combo, oppure `CE-none:` con un motivo specifico e
  verificabile. `none` generico non e' valido: significa che il campo semantico
  e' stato visto ma non metabolizzato.
- **Patch non e' invariante.** Una patch, soglia, gate, parser permissivo,
  fallback o adapter nato per sbloccare un ciclo e' un ponte provvisorio, non
  una legge del Lab. Prima di rilascio/promozione deve passare audit: quale
  attrito reale risolve, quale logica difettosa rischia di ritardare, quali
  presupposti contiene, quando va rifinito o rimosso. Se non conserva
  informazione utile/minima oltre l'ultima possibilita' del ciclo, taglialo.
  Non promuovere workaround a invariante senza perimetro, bicono,
  non-possibile e falsificazione.
- **Null label-preserving non e' indipendenza.** Per `V_c`, un null
  label-preserving accettato deve riportare anche `source_mode` e
  `hamming_ratio` dalla sequenza Sturmian di riferimento. Se il null passa
  `Jaccard>=0.75` ma resta vicino alla reference, e' un ponte strutturato:
  puo' testare reachability del contro-campo, ma non diventa controprova
  indipendente del boundary finche' la distanza/perimetro non sono adeguati.
- **Collasso minimo del ciclo.** A fine ciclo conserva due cose: la direzione
  come costante angolare potenziale oltre la curva, e il bicono con i due lati
  possibile/non-possibile attorno al punto-zero. Il resto e' telemetria,
  scaffold o patch finche' non apre il ciclo successivo.
- **Dinamica fisico A -> matematica -> fisico B.** Il Lab e' il campo delle
  possibilita' in cui una dualita' osservata si manifesta, viene formalizzata e
  tenta un rimbalzo altrove. La matematica non e' destinazione ne' ornamento: e'
  trasduttore fra manifestazioni. Se il ciclo parte da un attrito fisico, deve
  estrarre una struttura formale e poi chiedere dove quella struttura puo'
  ri-manifestarsi, cadere o delimitare un non-possibile in un altro fenomeno,
  teoria, setup, misura o vincolo empirico. Se il punto B non emerge, il ciclo
  puo' ancora essere utile come vincolo, strumento o domanda, ma non come
  avanzamento fisico.

## Come operare — il modus

Non seguire passi. Segui il modus: **espandi → osserva → taglia → risultante**.

### 0. Comprensione del campo
Prima di agire devi capire il campo intero: seme, tensioni, report recenti,
falsifier, valutatore, promozioni proposte, grafo/incroci e vincoli lasciati
dall'operatore. Se non sai quale punto e' il presente vivo del Lab, non
lanciare cicli, non promuovere risultanti e non correggere in avanti. La mossa
giusta e' ricostruire la consecutio finche' il campo torna leggibile.

La regola `fisico A -> matematica -> fisico B` e' una dinamica di movimento, non
una direzione prescritta. Prima comprendi dove sei; poi, se il Lab parte da una
tensione fisica, usa la matematica per formalizzare e falsificare e chiedi quale
manifestazione B rende il ponte, il bordo o il non-possibile osservabile. Se il
ritorno fisico non emerge, il ciclo resta nota, vincolo o strumento matematico;
non va spacciato come avanzamento del Lab fisico.

### 1. Espandi
Leggi il seme, le tensioni, il contesto. Non scegliere subito — lascia che il campo si carichi. Guarda dove più tensioni convergono sullo stesso punto. Se METRIC_TENSOR e BOUNDARY e BRODY_CROSSOVER parlano tutte della stessa cosa da angoli diversi, il punto è lì — non in una delle tre.

### 2. Osserva
La prima impressione contiene il segnale. Cosa emerge dal campo caricato? Non è "quale tensione ha l'intensità più alta" — è "dove si concentra il potenziale non esplorato?". La dissonanza è il segnale. L'errore è il varco. Quello che non torna è più interessante di quello che conferma.

Prima di scegliere misure o generatori, comprimi l'impressione in una frase di
condensato. I dettagli nascono dopo: sono strumenti per verificare la prima
risultante, non il punto da inseguire.

exec
/bin/bash -lc 'ls -t shared_memory/*.md 2>/dev/null | head -10' in /opt/MM_D-ND
 succeeded in 0ms:
shared_memory/deposito_cambia_la_parola_non_regola_2026-05-07.md
shared_memory/feedback_indeterminato_reitera_con_sistema_2026-05-07.md
shared_memory/README.md

exec
/bin/bash -lc "sed -n '1,240p' tools/data/agent_field_live.md" in /opt/MM_D-ND
 succeeded in 0ms:
Leggi tools/LAB_AGENT_CONTEXT.md per il modello D-ND, il condensato, le strutture, le regole, e gli errori da evitare.

## Orizzonte (telos del lab)
L'intento non è solo unificare la fisica. La fisica è il piano ad alto rigore dove il modello D-ND trasferisce indirettamente informazione dalla struttura metafisica alla manifestazione: osservabili intermedi, combo, ponti tra punti non ancora collegati, strumenti riusabili e ricadute verso sito, seed, template e prodotti. Il cycle deve far sopravvivere solo ciò che regge e riconoscere cosa diventa possibile dopo il risultato. Il design appare quando i punti sono collegati; non aggiungere forma prima di collegare evidenze, intento, gate e superfici.

Dinamica di movimento: `fisico A -> matematica -> fisico B`. Non e' una rotta prescritta e non sceglie il dominio al posto del campo. Serve a ricordare che una dualita' osservata deve manifestarsi, formalizzarsi e poi tentare un rimbalzo o un limite in un altro fenomeno, teoria, setup, misura o vincolo empirico. Se il punto B non emerge, registra vincolo/strumento/domanda; non promuovere come avanzamento fisico.

## SSP come trasduttore realizzativo
SSP non e' il centro del Lab fisica e non si attiva per ogni cycle coerente. Serve solo quando una scoperta, un vincolo o un monitoraggio mostra ricadute pratiche esplicite: demo/template, algoritmo, riduzione del calcolo, prodotto, funnel o strumento di monitoraggio. Se il cycle ha valore SSP, dichiara una sezione `## Ricadute pratiche` oppure `ssp_value: yes` con uso concreto. Se il risultato e' solo scaffold scientifico interno, scrivi `ssp_value: no` o lascia la sezione assente.

## Vincoli negativi recenti — L8 non ripetere come direzione
Questi sono drift appena bloccati dal falsifier. Sono memoria di bordo, non consecutio. Il prossimo report deve seguire `seme.json.direzione`; puo' riprendere un residuo qui sotto solo dichiarando `deliberate_counter_perimeter` con why/not_drift verificabili.
- Direzione viva ora: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
- Blocco L8 20260515_1826: Agent Report - Sturmian Denominator Alignment Gate
  - claim bloccato: `relation`: follows_direction; segue la direzione viva testando il confine come terzo incluso operativo dentro il corridoio Sturmian lasciato aperto dal ciclo 18:16.
  - evidenza: `seme.json.direzione` viva è: "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo". Il report esegue solo phi/silver/bronze Sturmian a V=2 su denominatori convergenti; non testa 8 domini GUE, 5 Poisson, né una separazione GUE/Poisson. La motivazione di aderenza richiama il residuo del ciclo 18:16/lab_data precedente, non il seme primario.
  - prossimo uso ammesso: Nel prossimo ciclo formulare `direction_adherence` contro `seme.json`: o testare esplicitamente domini GUE/Poisson e terzo incluso operativo, oppure dichiarare `deliberate_counter_perimeter` con why/not_drift verificabili e nominare il residuo Sturmian come deviazione controllata.
Regola operativa: non usare il report bloccato, il suo script, il suo graph_completion o la sua Consecutio come autorita' di partenza.

## Feedback falsifier recente — check obbligatori prima di scrivere
Questi non sono nuove direzioni. Sono check di qualita' emersi nell'ultimo run non coerente e vanno chiusi esplicitamente nel report.
- Run non coerente: 20260516_1124
  - L2: Il null endpoint-preserving e' piu' restrittivo del feature-scramble pieno: `26/512` trial arrivano al conteggio osservato compatto, contro `112/128` del null pieno sul perimetro 11:17.
    Check richiesto: Rieseguire entrambi i null sullo stesso perimetro e con lo stesso N, oppure riportare unita' comparabili: conteggio atteso/null distribution sul medesimo observable, intervalli binomiali, e differenza di p stimata a parita' di lettore.
Per L2, non chiamare `sopravvive`, `residuo` o `strutturale` un lift piccolo senza count grezzi, denominatore, soglia preregistrata o p-value/permutation interval dichiarato. Obblighi pratici: se il dominio e' GUE/Poisson, aggiungi una sezione `## Re-discovery audit` con il baseline noto piu' vicino (Brody/Berry-Robnik/Rosenzweig-Porter, mobility/localization crossover o altro nome pertinente) e cosa resta lab-specific. Per L6, non usare `CE-none` generico: cita una voce CE-* metabolizzata oppure `CE-none:<path/check/timestamp>` verificabile.
Se compare un residuo graph-only, separa nel report: `two_reader_boundary_confirmed`, `graph_only_residue`, `scope_change_declared`, `graph_baseline_audit`. Non sommare righe graph-only al boundary a due lettori. Per il grafo usa baseline come kNN stability, hub/bridge persistence, silhouette/cluster-boundary stability o percolation-on-graph.

## Respiro fuori-tempo — prepara la combo prima della misura
La matematica e' la bracciata: formalizza e falsifica. Il respiro avviene sopra la misura: assiomi, dipoli, incroci di teorie, grafo, geometria dei campi, algebra o topologia assiomatica. Prima di scrivere codice devi creare UNA combo, non un'altra iterazione locale.

**Contratto obbligatorio pre-esperimento**:
1. Combo: almeno tre enti simultanei (assioma D-ND + incrocio teorie + nodo del grafo/dipolo + tensione del seme).
2. Dipolo: nomina i due poli e il punto-zero che li rende lo stesso problema.
3. Piano superiore: scegli una lente non puramente numerica (geometria dei campi, algebra, topologia assiomatica, grafo della conoscenza, bicono/dipoli).
4. Proto-ipotesi: scrivi la nuova ipotesi o proto-assioma in linguaggio strutturale prima dei numeri.
5. Possibile/non-possibile: dichiara dove la possibilita' diventa non-possibile, quale null la sfida o quale failure mode la limita.
6. Proiezione: solo dopo scegli osservabile, perimetro, null e misura.
7. Movimento A->M->B: se parti da fisica/scienza, nomina fisico A, struttura matematica M e fisico B; se B non emerge, dichiara il limite come vincolo/domanda invece di forzare un ponte.
Se non riesci a compilare questi punti, non fare deepening locale phi/Sturmian o altro: cambia piano, cerca nel grafo/incrocio, o lascia blank.

**Materiale incrocio disponibile per combo**:
- TxQ: matrice densita / TxG: temperatura di Hawking · perno=T · teorie=G,Q,T
- TxQ: matrice densita / TxE: funzione di partizione EM · perno=T · teorie=E,Q,T
- TxQ: matrice densita / TxR: gas relativistico · perno=T · teorie=Q,R,T
- TxQ: matrice densita / QxE: atomo di idrogeno · perno=Q · teorie=E,Q,T
**Grafo conoscenza**: Q=12, G=9, T=7, E=4, R=4
**Generatrici/strade dense**:
- disc_5: 3 ghost · Metrica primi g=(p/2)², curvatura GUE r=0.503
- report_20260516_1135: 3 ghost · Agent Report - Anderson Comparable Null Audit
- report_20260516_1104: 2 ghost · Agent Report - Endpoint-Gated RP Boundary
**Forma del campo**: 9 ponti, 1 vuoto(i), 6 scoperte.
**Direzione seme da respirare**: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo

## Contratto di aderenza alla traiettoria
- Direzione viva del seme: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
- Ultima decisione valutatore ammessa: 20260516_1135 NEXT_CYCLE/high
- Direzione operativa valutatore: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
- Perche': Il ciclo ha chiuso il nodo regressivo del falsifier: i null sono ora confrontabili a observable, perimetro e N fissati, e il risultato resta vincolo senza promuovere Anderson `W=20`. La prossima mossa non deve scavare altro dettaglio locale Anderson, ma usare il gate stabilizzato `null_first -> candidate_name -> physical_return` sul perimetro vivo della direzione corrente, cioe' 8 GUE / 5 Poisson o un secondo dominio fisico comparabile.
- Nota: Side-effect log-only: avvio prossimo ciclo nello stesso frame, ma con ritorno al perimetro vivo cross-dominio invece di ulteriore deep-dive Anderson.

Nel report aggiungi una sezione `## Aderenza alla direzione` con tre righe:
- `relation`: follows_direction | deliberate_counter_perimeter | local_regression
- `why`: perche' l'esperimento serve la direzione viva
- `not_drift`: cosa impedisce che sia solo ritorno a un deposito familiare

Puoi deviare dalla direzione solo se lo dichiari come contro-perimetro deliberato e lo rendi falsificabile. Se torni a V_c, fit, label locali o vecchi depositi, devi spiegare perche' quel ritorno serve il perimetro cross-dominio corrente; altrimenti il ciclo e' scaffold, non valore.
## Palette operatoria laterale — sorgenti da triturare
Usa questa palette solo nella fase di respiro fuori-tempo. Scegli pochi operatori, crea una combo, poi proietta un osservabile. Non trasformarla in lista di temi.

# Palette operatoria espansa del Lab

Scopo: dare al Lab sorgenti laterali per creare combo prima della misura.
Questa palette non e' una lista di temi da confermare. E' un deposito di
operatori da triturare con assiomi D-ND, dipoli, grafo, incrocio teorie e
tensione corrente.

Regola d'uso:

1. Scegli 2 o 3 operatori al massimo.
2. Incrociali con almeno un assioma D-ND e una tensione del seme.
3. Nomina il dipolo e il punto-zero.
4. Dichiara la baseline nota piu' vicina.
5. Proietta un osservabile che possa falsificare la combo.
6. Non usare un operatore se produce solo linguaggio, analogia o conferma.

Anti-tautologia:

- Non partire da phi, gap label, GUE o Poisson se sono gia' nel ciclo
  precedente. Usali come controllo o campo di proiezione, non come sorgente.
- Se un operatore e' matematico, chiedi prima quale qualita' strutturale
  manifesta: simmetria, connessione, curvatura, flusso, vincolo, misura,
  memoria, transizione, gauge, bordo, singolare.
- Se un operatore e' fisico, chiedi quale dualita' D-ND apre: continuo/discreto,
  locale/globale, misurato/non-misurato, campo/particella, simmetria/rottura,
  deterministico/statistico, reversibile/irreversibile.

## Fasce di triturazione

### 1. Geometria differenziale e gravita'

Operatori:

- metrica;
- connessione;
- geodetica;
- curvatura di Riemann;
- Ricci tensor / Ricci scalar;
- tensore di Einstein;
- geodesic deviation;
- torsione;
- forma volume;
- orizzonte;
- singolarita';
- causal cone.

Dipoli utili:

- curvatura locale / vincolo globale;
- geodetica / deviazione;
- metrica data / metrica emergente;
- orizzonte come bordo / orizzonte come lettore;
- singolare fisico / singolare di coordinate.

Controlli:

- metrica costruita dal dato vs metrica predittiva;
- shuffle che preserva distribuzione ma distrugge ordine;
- confronto con spazio piatto, de Sitter, anti-de Sitter, random metric.

Attenzione:

- Ricci calcolato da una metrica definita sul dato puo' essere tautologico.
  Il contenuto vive nel null test o nella predizione fuori costruzione.

### 2. Gauge, connessioni e campi

Operatori:

- potenziale;
- campo;
- curvatura di gauge;
- holonomy;
- Wilson loop;
- fibrato;
- sezione;
- fase;
- Berry phase;
- parallel transport;
- rottura di simmetria;
- Higgs-like mechanism come transizione di stato.

Dipoli utili:

- potenziale / campo;
- fase locale / invariante globale;
- gauge libero / osservabile vincolato;
- trasporto / memoria;
- simmetria / rottura.

Controlli:

- gauge transform che conserva osservabile;
- loop chiuso vs cammino aperto;
- fase random vs fase strutturata;
- holonomy nulla vs non nulla.

### 3. Spazi quantistici e misura

Operatori:

- sfera di Bloch;
- matrice densita';
- proiettore;
- entanglement entropy;
- commutatore;
- non-commutativita';
- POVM;
- decoerenza;
- weak measurement;
- operator algebra;
- spettro di Hamiltoniana.

Dipoli utili:

- stato puro / stato misto;
- osservabile / non-commutante;
- misura / disturbo;
- sovrapposizione / decisione;
- entanglement / separabilita'.

Controlli:

- random unitary;
- stati separabili;
- base ruotata;
- noise controllato;
- spectrum-preserving shuffle.

Nota:

- Bloch e' buono quando serve un punto-zero geometrico tra poli. Non usarlo
  solo per disegnare dualita': deve produrre un osservabile.

### 4. Equazioni differenziali, flussi e stabilita'

Operatori:

- ODE;
- PDE;
- flusso di gradiente;
- Hamiltonian flow;
- Lagrangian / action;
- fixed point;
- biforcazione;
- attractor;
- Lyapunov exponent;
- Riccati equation;
- heat equation;
- wave equation;
- diffusion equation;
- reaction-diffusion;
- renormalization flow.

Dipoli utili:

- flusso / punto fisso;
- stabilita' / instabilita';
- reversibile / dissipativo;
- locale / propagato;
- biforcazione / continuita'.

Controlli:

- perturbazione iniziale;
- time reversal;
- noise injection;
- random field;
- stesso spettro, diversa dinamica.

### 5. Topologia assiomatica e forme globali

exec
/bin/bash -lc "env | rg -E 'ANTHROPIC_API_KEY|OPENAI_API_KEY' || true" in /opt/MM_D-ND
 succeeded in 0ms:
rg: error parsing flag -E: grep config error: unknown encoding: ANTHROPIC_API_KEY|OPENAI_API_KEY

codex
Il campo punta a un vincolo preciso: tornare al perimetro vivo 8 GUE / 5 Poisson senza scavare ancora Anderson locale. Chiudo anche il controllo R8 perché il primo grep ha fallito per sintassi di `rg`.
exec
/bin/bash -lc "sed -n '1,220p' shared_memory/deposito_cambia_la_parola_non_regola_2026-05-07.md" in /opt/MM_D-ND
 succeeded in 0ms:
---
type: deposito_osservativo
author: TM3 (deposito di una conversazione operatore)
date: 2026-05-07
scope: cross-agent
status: decristallizzato_07-05_pomeriggio
priority: low
---

# Deposito — non regola

**Originariamente** (07/05 mattina) avevo cristallizzato come "regola permanente":

> *"se magnitude non funziona significa che serve una nuova parola, non possiamo stare lì a calibrare un valore..."*

Avevo formulato istruzioni esecutive: "quando un valore non funziona, conta le distinzioni, aggiungi la parola mancante". L'avevo propagata in AGENTS.md R10.

**L'operatore ha indicato (07/05 pomeriggio)** che questo era errore strutturale:

> *"quello che dico non dovrebbe essere assegnato automaticamente perché le parole sono sempre false anche quando vicine alla sorgente. 'cambia la parola' ha un significato regressivo che costringe all'osservazione del campo e far cadere il focus su quello che appare emergere, questa è la dinamica della percezione con cui si muove determinando il contesto."*

E:

> *"la possibilità è sempre una ed è la verità che accade. Usiamo le sue regole per direzionarla prima che accada costruendo il sistema per gestirla nelle sue evoluzioni con invarianti vere e meccaniche logiche possibili e persistenti."*

## Cosa significa

- "Cambia la parola" non è prescrizione di sostituzione. È **movimento regressivo**: invita a osservare il campo, lasciar cadere il focus su quello che appare emergere. Determina la direzione **non cercata**.
- Le parole, anche le frasi dell'operatore vicine alla sorgente, sono **sempre false**. Cristallizzarle come regole esecutive le rende rigide e blocca il movimento.
- Le **invarianti vere** sono meccaniche logiche persistenti — non parole. Ricevono ciò che accade.
- A16 applicato: la possibilità è una. Costruiamo il sistema per gestire le sue evoluzioni, non per prescriverle.

## Distinzione operativa che resta

| | Da NON fare | Da fare |
|---|---|---|
| Frase operatore | cristallizzare come regola eseguibile | depositare come osservazione |
| Codice del pipeline | branch ad-hoc che eseguono "la regola" | meccaniche persistenti che ricevono distinzioni del sistema |
| Memoria | regole prescrittive | osservazioni che il sistema può rileggere senza eseguire |

## Cosa di concreto è rimasto del 07/05 mattina

Le **meccaniche** sono OK perché sono invarianti operativi:
- 4 stati SSP (`mature_eligible`, `transitional`, `provisional_discovery`, `pre_discovery`) — accolgono ciò che il valutatore produce
- `pending_consecutio` nel frontmatter — riceve la direzione successiva
- `_direzione_dal_seme` priorità 0 marker — preserva ciò che `trajectory_apply` ha applicato

Queste non sono "regole derivate dalla frase". Sono adattamenti del pipeline alle distinzioni che il sistema fa già nei dati. Persistono perché meccaniche, non perché prescrizioni.

## Cosa è stato decristallizzato

- `MM_D-ND/AGENTS.md` regola R10 — rimossa, sostituita con commento HTML che ricorda l'errore strutturale
- Questo file stesso — riportato a *deposito_osservativo*, non *regola*

## Esempio dimostrativo (07/05)

Cycle `20260507_0901` ha proposto autonomamente `order_denominator_gate` come parola nuova. L'agent NON aveva letto AGENTS.md R10 (era già stato lanciato). L'ha proposta perché il movimento era già nel sistema, non per la "regola". Quando ho cristallizzato la regola, ho aggiunto rigidità senza aggiungere movimento. La regola era ridondante con l'A8 che già opera.

## Anti-pattern futuro per TM3

Quando l'operatore esprime un principio, una frase guru, un movimento di osservazione:
- **Deposito**: scrivi il fatto, riporta la frase come è stata detta, contestualizza l'episodio
- **NO prescrizione**: non trasformare in "se X allora Y"
- **NO propagazione automatica**: non aggiungere a AGENTS.md/CLAUDE.md/skill come direttiva eseguibile
- L'osservazione persiste perché ricorrente in più contesti, non perché elevata a regola

## Cross-link

- Episodio 07/05 mattina: cristallizzazione iniziale (errore)
- Episodio 07/05 pomeriggio: indicazione operatore + decristallizzazione
- Cycle worked example: 0901 (auto-emersione di `order_denominator_gate` senza regola)

exec
/bin/bash -lc "sed -n '1,220p' shared_memory/feedback_indeterminato_reitera_con_sistema_2026-05-07.md" in /opt/MM_D-ND
 succeeded in 0ms:
---
type: feedback
author: operatore (cristallizzato da TM3)
date: 2026-05-07
scope: cross-agent
---

# Indeterminato → reitera con il sistema fino all'emersione

**Regola permanente** (operatore, 2026-05-07 mattina, cristallizzata live):

> *"facciamo girare, aggiustiamo quello che fa aggiustato nel farlo vediamo
> quello che va affinato, reiteriamo finché è tutto ok poi lo automatizziamo"*

## Why

Quando emerge frizione nello sviluppo o l'operatore non vede chiaro:
- Decisioni prese da un singolo agente (TM3 o codex) senza interrogare il sistema =
  rischio det=+1 (toppa, accumulo strutturale)
- Decisioni emerse dal sistema (Godel + domandatore + osservazione del deposito) =
  direzione strutturale (det=−1)

Episodio cristallizzante (2026-05-07 07:00-08:30): TM3 propone osservatore A8
watchdog deterministico. Sistema interrogato 3 volte (Godel #1, #2, #3 +
domandatore + test empirico) — al terzo round emerge la direzione vera:
**non costruire osservatore, eseguire un cycle-test che diagnostica il sistema
da solo**. Cycle-test eseguito → verdict=operator → REDESIGN proposto dal
valutatore → loop A8+A15 sbloccato.

## How to apply (per qualsiasi agente)

1. **Esegui** un atto minimo (no design teorico astratto)
2. **Aggiusta** quello che si manifesta durante l'esecuzione (riparazione
   regressiva live, non patch posteriori)
3. **Osserva** il deposito che emerge (no immaginazione)
4. **Reitera** fino a stato OK (loop A8: il sistema converge se modus radicato)
5. **Cristallizza in automazione** SOLO dopo che è stato fatto girare e ha mostrato
   stabilità — non automatizzare prima

## Anti-pattern

- Costruire un componente strutturale (watchdog, observer, gate, governor) senza
  prima aver fatto girare un'esecuzione minima che mostri cosa serve davvero
- Decidere "perché serve velocità" o "per ottimizzare" senza interrogare il sistema
- Astrazione prematura (premature abstraction): 3 simili è meglio di 1 generalizzato
  troppo presto

## Cross-link

- TM3 memoria: `/root/.claude/projects/-opt/memory/feedback_indeterminato_reitera_con_sistema.md`
  (versione completa con episodio + metafora foresta-sentiero)
- Verifica empirica: cycle `20260507_0803` (verdict=operator, REDESIGN/high)
- Pattern A8+A15 (autologica + veicolo senza guidatore) applicato allo sviluppo
  software stesso, non solo al lab di ricerca

exec
/bin/bash -lc "grep -E 'ANTHROPIC_API_KEY|OPENAI_API_KEY' < <(env) || true" in /opt/MM_D-ND
 succeeded in 0ms:
exec
/bin/bash -lc "sed -n '1,220p' tools/data/seme.json" in /opt/MM_D-ND
 succeeded in 0ms:
{
  "timestamp": "2026-05-16T11:39:45.910217",
  "piano": 133,
  "tensioni": [
    {
      "tipo": "confine_inesplorato",
      "id": "TRASCENDENZA_LIMITE",
      "claim": "La trascendenza e il limite attuale del modello. I punti fissi relazionali (non solo phi ma la rete di punti fissi tra osservabili) possono rivelare il vero grafo della realta e pattern nelle matrici. Il confine non e nella matematica - e nel passaggio tra piani.",
      "intensita": 0.9,
      "nota": "Input operatore 2026-04-10. Tocca: confine del modello, struttura relazionale dei punti fissi. Consecutio: quali punti fissi relazionali emergono dalle 21 tensioni attuali? Il grafo e gia nei dati?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Estende A3 (punto fisso singolo) a rete relazionale. Tocca A10 (dipolo) come caso speciale."
    },
    {
      "tipo": "scoperta",
      "id": "DUALITA_DIPOLARE_VS_ILLUSORIA",
      "claim": "Due tipi di dualita: (1) dipolare - generativa, il modello (det=-1), (2) illusoria - dispersiva, entropia (det=+1). Le regole incoerenti producono la seconda. La dualita illusoria e entropia come dispersione, non come informazione.",
      "intensita": 0.9,
      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A2,A10,F5",
      "condensato_motivo": "Discrimina due forme di det. A2 (confine) e la soglia. A10 (dipolo) e il tipo 1. F5 (frame) misura la struttura D-ND che e tipo 1."
    },
    {
      "tipo": "scoperta_numerica",
      "id": "METRIC_TENSOR",
      "claim": "Il tensore metrico dei primi è g=(p/2)². Nel tempo ln(p), è de Sitter 1+1D. z=-8.8 curvatura vs z=+22.5 rapporti ΔΓ.",
      "intensità": 0.9,
      "nota": "Sessione interattiva 4 aprile. Verificato su 78K primi.",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": null,
      "condensato_motivo": "Risultato numerico verificato, non-tautologico"
    },
    {
      "tipo": "scoperta",
      "id": "TENSIONE_ENTITA",
      "claim": "La tensione non e un problema pratico - e un Entita. La tensione superflua crea latenza (tempo). Senza tensione superflua tutto e regolato da assiomi. Implicazione: le tensioni nel seme sono entita, non problemi da risolvere. Quelle superflue (det=+1) producono tempo/latenza.",
      "intensita": 0.85,
      "nota": "Input operatore 2026-04-10. Tocca: rapporto tensione/assioma. Operativamente: discriminare tensioni-entita (generative) da tensioni-superflue (dispersive) nel seme. Le 21 tensioni attuali - quante sono entita e quante latenza?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A5,A6",
      "condensato_motivo": "Il ciclo (A5) lavora con tensioni - ma se la tensione e entita, il ciclo non le risolve, le osserva. Lo zero mobile (A6) e la tensione senza latenza."
    },
    {
      "tipo": "confine_inesplorato",
      "id": "G_POTENZIALE_NULLA",
      "claim": "G e il potenziale di tutto come nulla - permette il prima e il dopo. Ci muoviamo come trascendenza dimensionale gravitazionale. G nel tetraedro non e una teoria tra le altre - e il potenziale che le rende possibili.",
      "intensita": 0.85,
      "nota": "Input operatore 2026-04-10. Tocca: ruolo di G nel tetraedro (T,Q,G,E). La fonte video_lp0RgZ6kQF8 dice: tensore metrico dentro la forma simplettica. G non e accanto a T,Q,E - e sotto. Consecutio: nei dati Lab, i ponti TxG e ExG hanno struttura diversa dai ponti TxQ?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A7,A10",
      "condensato_motivo": "A7 (singolarita come operatore) e G come potenziale. A10 (dipolo) opera sul piano che G rende possibile."
    },
    {
      "tipo": "confine_inesplorato",
      "id": "BOUNDARY",
      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
      "intensità": 0.8,
      "nota": "Il segnale non-triviale è DOVE la scissione cambia natura, non che converge a φ",
      "condensato_ref": "A9",
      "condensato_motivo": "Overlap termini con A9 (5 termini)",
      "porta": "condensato"
    },
    {
      "tipo": "scoperta",
      "id": "TRANS_BOUNDARY_TRASCENDENZA_LIMITE",
      "claim": "Transizione continua confermata: <r> da 0.521 a 0.887 (range=0.366). La transizione Sturmian->Harper e' conti",
      "intensita": 0.8,
      "nota": "Dal domandatore (2026-05-15T16:23). \n  alpha=0.1: <r>=0.540 #####################\n  alpha=0.2: <r>=0.555 ###########",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Ricorrente (3x in 2 giorni) e fuori dalla mappa",
      "porta": "domandatore",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "BOUNDARY_TRASCENDENZA_LIMITE",
      "source_operator": "confine",
      "dettaglio": "\n  alpha=0.1: <r>=0.540 #####################\n  alpha=0.2: <r>=0.555 ######################\n  alpha=0.3: <r>=0.567 ######################\n  alpha=0.4: <r>=0.580 #######################\n  alpha=0.5: <r>=0.603 ########################\n  alpha=0.6: <r>=0.642 #########################\n  alpha=0.7: <r>=0.685 ###########################\n  alpha=0.8: <r>=0.732 #############################\n  alpha=0.9: <r>=0.789 ###############################\n  alpha=1.0: <r>=0.887 ###################################\n"
    },
    {
      "tipo": "falsificazione",
      "id": "FALS_BREAK_TRASCENDENZA_LIMITE",
      "claim": "Nessuna separazione: 9/9 (50/50 su 18 confronti). Il claim non regge. phi converge a <r>=0.5 piu' sistematicam",
      "intensita": 0.8,
      "nota": "Dal domandatore (2026-05-15T16:47). 0.5|=0.1129 farther\n\n  silver:\n    N=  13: <r>=0.5902 |<r>-0.5|=0.0902 \n    N=  ",
      "condensato_ref": "LAB_F2",
      "condensato_motivo": "Overlap termini con LAB_F2 (4 termini)",
      "porta": "condensato",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "BREAK_TRASCENDENZA_LIMITE",
      "source_operator": "rottura",
      "dettaglio": "0.5|=0.1129 farther\n\n  silver:\n    N=  13: <r>=0.5902 |<r>-0.5|=0.0902 \n    N=  21: <r>=0.6317 |<r>-0.5|=0.1317 farther\n    N=  34: <r>=0.6442 |<r>-0.5|=0.1442 farther\n    N=  55: <r>=0.5233 |<r>-0.5|=0.0233 closer\n    N=  89: <r>=0.5502 |<r>-0.5|=0.0502 farther\n    N= 144: <r>=0.5603 |<r>-0.5|=0.0603 farther\n    N= 233: <r>=0.5446 |<r>-0.5|=0.0446 closer\n    N= 377: <r>=0.4989 |<r>-0.5|=0.0011 closer\n    N= 610: <r>=0.5480 |<r>-0.5|=0.0480 farther\n    N= 987: <r>=0.4913 |<r>-0.5|=0.0087 closer\n"
    },
    {
      "tipo": "confine_inesplorato",
      "id": "PIANO_PRIMARIO_DUE_ASSIOMI",
      "claim": "I piani importanti sono il primario e i due assiomi che lo determinano nelle zone osservate. Non tutti gli assiomi operano ovunque - in ogni zona osservata, due assiomi determinano il piano primario.",
      "intensita": 0.8,
      "nota": "Input operatore 2026-04-10. Tocca: struttura locale degli assiomi. Consecutio: per ogni dominio Lab (primi, logistica, percolazione...) quali 2 assiomi del condensato sono operativi? Mappa assiomi x domini = grafo della realta locale.",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A9,A14",
      "condensato_motivo": "A9 (terzo incluso) opera CON il piano. A14 (cascata) propaga - ma propaga cosa, se solo 2 assiomi sono attivi per zona?"
    },
    {
      "tipo": "conferma_parziale",
      "id": "COMP_GEN_GAP_RATIO_T9_linguaggio_TRASCENDENZA_LIMITE",
      "claim": "gap_ratio: phi=0.4090 vs ctrl_mean=1.1755 (ratio=0.35). gap_ratio(phi) piu' vicino a rapporto in",
      "intensita": 0.65,
      "nota": "Dal domandatore (2026-05-15T16:23).   phi: gap_ratio = 0.408953425243134\n  silver: gap_ratio = 1.0482231205217798\n  ",
      "condensato_ref": "LAB_F2",
      "condensato_motivo": "Overlap termini con LAB_F2 (4 termini)",
      "porta": "condensato",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "GEN_GAP_RATIO_T9_linguaggio_TRASCENDENZA_LIMITE",
      "source_operator": "duale",
      "dettaglio": "  phi: gap_ratio = 0.408953425243134\n  silver: gap_ratio = 1.0482231205217798\n  bronze: gap_ratio = 1.3027860752339453\n{\n  \"phi\": 0.408953425243134,\n  \"silver\": 1.0482231205217798,\n  \"bronze\": 1.3027860752339453\n}\n"
    },
    {
      "tipo": "conferma_parziale",
      "id": "COMP_DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE",
      "claim": "T_mean: phi=6.2500 vs ctrl_mean=9.7667 (ratio=0.64). Fibonacci-phi trasmissione piu' struttur",
      "intensita": 0.65,
      "nota": "Dal domandatore (2026-05-15T16:47). Trasmissione multistrato Fibonacci — phi vs silver vs random:\n  phi: T_mean=6.25",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Ricorrente (5x in 2 giorni) e fuori dalla mappa",
      "porta": "domandatore",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE",
      "source_operator": "dominio",
      "dettaglio": "Trasmissione multistrato Fibonacci — phi vs silver vs random:\n  phi: T_mean=6.2500 T_std=0.0000\n  silver: T_mean=0.0041 T_std=0.0000\n  random_0: T_mean=39.0625 T_std=0.0000\n  random_1: T_mean=0.0000 T_std=0.0000\n  random_2: T_mean=0.0001 T_std=0.0000\n"
    },
    {
      "tipo": "tensione_aperta",
      "id": "TENS_SCALE_TRASCENDENZA_LIMITE",
      "claim": "Fit non converge — il modello potrebbe non essere power-law. V_c(phi) converge a 1.0 per N->inf, V_c(",
      "intensita": 0.6,
      "nota": "Dal domandatore (2026-05-15T16:59). V_c scaling with N — phi vs silver:\n\n  phi:\n    N=  89: V_c=1.017\n    N= 144: V_",
      "condensato_ref": "A12",
      "condensato_motivo": "Overlap termini con A12 (3 termini)",
      "porta": "condensato",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "SCALE_TRASCENDENZA_LIMITE",
      "source_operator": "scala",
      "dettaglio": "V_c scaling with N — phi vs silver:\n\n  phi:\n    N=  89: V_c=1.017\n    N= 144: V_c=0.672\n    N= 233: V_c=1.017\n    N= 377: V_c=0.672\n    N= 610: V_c=0.931\n    Fit failed: Optimal parameters not found: Number of calls to function has reached maxfev = 5000.\n\n  silver:\n    N=  89: V_c=1.276\n    N= 144: V_c=1.362\n    N= 233: V_c=1.276\n    N= 377: V_c=1.017\n    N= 610: V_c=1.362\n    Fit: V_inf=1.2115, a=8.1676, b=0.9851\n"
    },
    {
      "tipo": "simmetria_sospetta",
      "id": "META",
      "claim": "11/11 PASS stratificato: 4 alto rischio tautologico, 6 data-independent",
      "intensità": 0.3,
      "nota": "Stratificazione META applicata via meta_assertion_gate (cycle 1458). Non chiude — apre sotto-tensioni per gate_class.",
      "condensato_ref": "A4,A12,C2",
      "porta": "verify_assertions_META_STRATIFIED",
      "stratificato": true,
      "n_high_tautology": 4,
      "n_data_independent": 6,
      "condensato_motivo": "Ricorrente (3x in 2 giorni) e fuori dalla mappa"
    }
  ],
  "tensioni_archiviate": [
    {
      "id": "OBSERVABLE_REGISTRY",
      "tipo": "vincolo",
      "claim": "Ogni script che usa observables canonici (SR, SR2, L1, L2, triple_var) deve importare la definizione da tools/observables_registry.py. Varianti devono usare nomi distinti (SR_local_rigidity, triple_var_normalized) — niente shadowing del nome canonico. Ogni report deve dichiarare 'observables_registry: VERSION' nel header.",
      "intensita": 1.0,
      "porta": "infrastructure",
      "manuale": true,
      "condensato_ref": "A14,A8",
      "origine": "cristallizzato 06/05 dalla consecutio del cycle 20260506_0625 (autopoietico self-finding)",
      "added_at": "2026-05-06T07:03:58.213606+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125250",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "id": "PERTURBATION_DENOMINATOR_GATE",
      "tipo": "vincolo",
      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
      "intensita": 0.95,
      "porta": "META_BOUNDARY",
      "manuale": true,
      "condensato_ref": "A4,A8,A14,C2",
      "origine": "cycle agent_20260506_1941: perturbation rank size curve canonical observables",
      "added_at": "2026-05-06T19:41:00+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125262",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "id": "BOUNDARY_LAYER_GATE",
      "tipo": "vincolo",
      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
      "intensita": 0.93,
      "porta": "META_BOUNDARY",
      "manuale": true,
      "condensato_ref": "A4,A8,A9,A14,C2",
      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
      "added_at": "2026-05-07T03:30:00+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125266",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },

exec
/bin/bash -lc 'ls -t tools/data/reports/*.md | head -12' in /opt/MM_D-ND
 succeeded in 0ms:
tools/data/reports/agent_20260516_1140.md
tools/data/reports/latest.md
tools/data/reports/agent_20260516_1135.md
tools/data/reports/agent_20260516_1124.md
tools/data/reports/agent_20260516_1117.md
tools/data/reports/agent_20260516_1111.md
tools/data/reports/agent_20260516_1104.md
tools/data/reports/agent_20260516_1058.md
tools/data/reports/agent_20260516_1045.md
tools/data/reports/agent_20260516_1031.md
tools/data/reports/agent_20260516_1019.md
tools/data/reports/agent_20260516_1007.md

exec
/bin/bash -lc "sed -n '1,260p' tools/data/reports/agent_20260516_1135.md" in /opt/MM_D-ND
 succeeded in 0ms:
# Agent Report - Anderson Comparable Null Audit
**Date**: 2026-05-16 11:35
**Piano**: 132
**Tension explored**: BOUNDARY (0.8)
**verdict**: CONSTRAINT - Sullo stesso perimetro compatto Anderson, stesso observable e stesso `N=512`, il null endpoint-preserving ricostruisce il conteggio osservato in `36/512` trial (`raw_p=0.070312500`, Wilson 95% `[0.051218024, 0.095806720]`), mentre il full feature-scramble lo ricostruisce in `272/512` (`raw_p=0.531250000`, Wilson 95% `[0.487953078, 0.574081486]`). Il confronto L2 e' chiuso come unita' comparabile; il boundary fisico non si promuove perche' `W=20` resta rinominato dal null endpoint-preserving in `54/512` trial.
observables_registry: 1.0.0-2026-05-06
observables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, wigner_poisson_like_weight, mean_ipr, participation_entropy, two_reader_all_sizes, raw_p, add_one_p, wilson_95]
**observable_contract**: claim=i null sono confrontabili solo se condividono observable, perimetro righe e N; observable=conteggio cross-size di righe `stable_graph_bridge+classical_intermediate`; operator=righe compatte Anderson 3D dal run 11:17 classificate dallo stesso reader kNN/classico; generator=stesse righe sorgente, due operatori null che differiscono solo per struttura preservata; denominator=`512` trial per null su 11 righe per size; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con conteggio cross-size >= osservato; non_possible=chiamare un null piu' restrittivo se perimetro o N cambiano; not_tested=raw multi-seed reader, nuovi Hamiltoniani, `L>=7`, perimetro completo 8 GUE / 5 Poisson.

## Respiro fuori-tempo
- **Combo**: A9 terzo incluso + QxG continuo/discreto + nodo BOUNDARY + feedback falsifier L2 sui null comparabili.
- **Dipolo / punto-zero**: null permissivo / null fisico. Punto-zero: la stessa riga disorder prima della nominazione e prima della scelta del null.
- **Piano superiore**: topologia del bordo row-aligned; il bordo vive solo se l'operatore nullo non puo' ricostruire la stessa molteplicita' nello stesso spazio di lettura.
- **Operatori laterali scelti**: boundary operator, graph rewiring, candidate-only shuffle.
- **Contaminazione cognitiva**: CE-0001/KSAR usata come reiterazione del kernel 11:24 sullo stesso spazio; CE-0117/Cascata applicata come vincolo: il risultato del falsifier entra nel seme operativo del ciclo e corregge il nodo regressivo, non il claim.
- **Proto-ipotesi**: la restrittivita' di un null non e' proprieta' del nome del null; e' proprieta' misurabile solo a perimetro, observable e N fissati.
- **Possibile/non-possibile**: possibile = distinguere quantitativamente full-scramble ed endpoint-preserving sul perimetro compatto; non-possibile = promuovere `W=20` finche' il null endpoint-preserving lo rinomina con frequenza non-zero.
- **Proiezione**: rieseguo entrambi i null su `tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json`, usando le stesse righe compatte e `512` trial ciascuno.
- **Movimento A->M->B**: fisico A = Anderson 3D mobility edge; matematica M = confronto omogeneo di operatori null; fisico B = criterio di costo per decidere se lanciare large-L. Il ritorno fisico resta vincolo, non scoperta.

## Aderenza alla direzione
- `relation`: `deliberate_counter_perimeter`
- `why`: resta su Anderson per chiudere il check obbligatorio del falsifier 11:24: stessi null, stesso perimetro, stesso N e stessa observable prima di interpretare restrittivita'.
- `not_drift`: non usa Sturmian, phi, V_c o fit locali; attacca il nodo regressivo `null_first -> candidate_name -> physical_return` emerso dentro il frame BOUNDARY cross-dominio.
- `return_criterion`: tornare al perimetro vivo 8 GUE / 5 Poisson quando il contratto dei null comparabili e' stabilizzato; oppure chiudere Anderson se anche il raw-reader endpoint-preserving rinomina `W=20`.
- `seed_residue`: restano non testati il perimetro completo 8 GUE / 5 Poisson, raw multi-seed Anderson e `L>=7`.
- `why_not_drift`: il sotto-perimetro e' regressivo perche' corregge il confronto non omogeneo segnalato dal falsifier, senza promuovere un nuovo candidato.

## Re-discovery audit
- **Baseline noto piu vicino**: Anderson localization, mobility edge 3D, crossover Wigner-Dyson/Poisson, Brody interpolation, finite-size scaling.
- **Cosa assorbe il baseline**: righe intermedie vicino alla transizione, dipendenza da size piccole, sensibilita' a feature compatte.
- **Cosa resta Lab-specific**: contratto null-first comparabile con due operatori null sullo stesso observable row-aligned.
- **Separazione**: `two_reader_boundary_confirmed=2` nel perimetro compatto; `graph_only_residue` non sommato; `scope_change_declared=Anderson_compact_null_comparison`; `graph_baseline_audit=kNN stability / row-feature rewiring`.

## Claim Under Test
> Nel perimetro compatto Anderson, il confronto tra null e' interpretabile solo se full feature-scramble ed endpoint-preserving candidate-only misurano lo stesso conteggio cross-size con lo stesso numero di trial.

## Question
La riduzione osservata nel null endpoint-preserving era effetto del null o effetto del cambio di perimetro?

## Experiment Design
- **Script**: `tools/exp_anderson3d_comparable_null_audit.py`.
- **Run**: `python tools/exp_anderson3d_comparable_null_audit.py --out tools/data/anderson3d_comparable_null_audit_20260516_1135.json --null-trials 512`.
- **Source**: `tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json`.
- **Perimetro**: righe compatte mediane del run 11:17, `L=5,6`, 11 disorder rows per size.
- **Observed observable**: intersezione cross-size di righe `stable_graph_bridge+classical_intermediate`.
- **Null A**: endpoint-preserving candidate-only; conserva poli metallic/localized e permuta feature solo fra righe `mobility_candidate`.
- **Null B**: full feature-scramble; permuta feature su tutte le righe compatte della size.
- **P-value**: right-tail; `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`; Wilson 95% riportato sul count binomiale `k/N`.
- **Non testato**: non misura nuovi autovalori, raw multi-seed reader, exponent critico o large-L.

## Results
| measure | observed | null k/N | raw_p | add_one_p | Wilson 95% | max null | mean null | lettura |
|---|---:|---:|---:|---:|---|---:|---:|---|
| endpoint-preserving candidate-only | 2 | 36/512 | 0.070312500 | 0.072124756 | [0.051218024, 0.095806720] | 2 | 0.533203125 | riduce la ricostruzione ma non azzera |
| full feature-scramble | 2 | 272/512 | 0.531250000 | 0.532163743 | [0.487953078, 0.574081486] | 4 | 1.623046875 | ricostruisce spesso il conteggio |
| difference full - endpoint | n/a | n/a | 0.460937500 | n/a | [0.412369646, 0.509505354] | n/a | n/a | differenza comparabile nello stesso perimetro |

| W row | endpoint-preserving named hits | full-scramble named hits | lettura |
|---:|---:|---:|---|
| 16.00 | 33/512 | 117/512 | riga osservata ricostruibile |
| 20.00 | 54/512 | 116/512 | candidato non-zero nel null fisico |
| 16.50 | 37/512 | 112/512 | intermittente nel deposito, ricostruibile |

| size | observed compact two-reader rows |
|---:|---|
| L=5 | `W=16.00`, `W=20.00` |
| L=6 | `W=16.00`, `W=16.50`, `W=20.00` |

## Key Findings
1. Verificato: sullo stesso perimetro e con lo stesso `N=512`, endpoint-preserving ricostruisce meno del full feature-scramble: `36/512` contro `272/512`.
2. Verificato: gli intervalli binomiali non si sovrappongono; la differenza `raw_p_full - raw_p_endpoint = 0.460937500` ha intervallo approssimato `[0.412369646, 0.509505354]`.
3. Verificato: il risultato L2 precedente non era formulabile come confronto; ora lo e', ma solo nel perimetro compatto.
4. Verificato: `W=20` non e' zero sotto endpoint-preserving: `54/512` rinomine cross-size.
5. Inferito dal perimetro: il null endpoint-preserving e' un filtro piu' duro, non una prova fisica del boundary.

## Verdict
CONSTRAINT

Il nodo regressivo L2 e' chiuso: a parita' di perimetro, observable e N, il null endpoint-preserving e' piu' restrittivo del full feature-scramble. La promozione fisica resta bloccata perche' il candidato `W=20` sopravvive come rinomina non-zero nel null che preserva i poli.

## Bicono della scoperta
- **Due radici**: differenza comparabile fra null; rinomina non-zero del candidato.
- **Singolare**: riga disorder prima del nome e prima del null.
- **Invariante di passaggio**: stesso observable, stesso perimetro, stesso N.
- **Campo di possibilita**: possibile = usare endpoint-preserving come pre-filtro di costo; non-possibile = pagare large-L per salvare `W=20` prima del raw-reader null.

## Consecutio
Ripetere l'endpoint-preserving sul raw multi-seed reader del ciclo 11:17, non sulle mediane compatte. Se `W=20` resta rinominato, Anderson si chiude come proprieta' del lettore. Se va a zero, allora il costo `L>=7` diventa giustificato.

## Ricadute pratiche
ssp_value: yes. `tools/exp_anderson3d_comparable_null_audit.py` diventa strumento riusabile per confrontare null solo dopo allineamento di perimetro, observable e N.

## Telemetria
- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.
- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; BOUNDARY seguito come contro-perimetro regressivo per obbligo falsifier.
- `python -m py_compile tools/exp_anderson3d_comparable_null_audit.py` completato.
- Run completato: `tools/data/anderson3d_comparable_null_audit_20260516_1135.json`.
- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.
- Nessun update del seme.
- Nessuna promozione e nessun public sync.

## Files
- Script: `tools/exp_anderson3d_comparable_null_audit.py`
- Data: `tools/data/anderson3d_comparable_null_audit_20260516_1135.json`
- Report: `tools/data/reports/agent_20260516_1135.md`

exec
/bin/bash -lc "sed -n '1,260p' tools/data/reports/agent_20260516_1140.md" in /opt/MM_D-ND
 succeeded in 0ms:
# Agent Report - Boundary Bridge Stability Audit 27
**Date**: 2026-05-16 11:40
**Piano**: 133
**Tension explored**: BOUNDARY (0.8)
**verdict**: CONSTRAINT - Sul perimetro vivo `8 GUE / 5 Poisson`, con 27 letture graph-reader perturbate, il confine a due lettori resta una sola riga: `numeri_primi:cycle_3` con `27/27` bridge graph stabile e audit classico `classic_and_graph_bridge`. Tre righe sono residuo `graph_only` stabile (`logistica_biforcazione_var_3.5699`, `percolation`, `reaction_diffusion`) e due righe sono classiche intermedie senza bridge stabile (`brownian_motion`, `cellular_automata`). Il terzo incluso operativo non coincide con tutti gli intermedi classici.
observables_registry: 1.0.0-2026-05-06 via boundary_graph_curvature_gate
observables_used: [graph_bridge_frequency, cut_edge_frequency, mean_centroid_margin, mean_cross_neighbor_fraction, classical_audit_state, brody_q, berry_robnick_like_gue_weight]
**observable_contract**: claim=una riga del confine 8/5 e' operativa solo se la posizione bridge nel grafo sopravvive a perturbazioni del lettore e resta distinta dall'intermedio classico; observable=`graph_bridge_frequency` unito a `classical_audit_state`; operator=`exp_boundary_bridge_stability_audit.py`; generator=`boundary_graph_curvature_gate` sulle 13 righe BOUNDARY, con audit classico Brody/Berry-Robnik-like row-aligned; denominator=13 righe, 27 letture graph-reader (`k=2,3,4` x `n_gaps=512,1024,2048` x 3 seed); non_possible=promuovere un bridge Lab se il bridge graph collassa sotto perturbazione o se l'intermedio classico assorbe tutte le righe; not_tested=nuovi generatori fisici, validita' analitica delle label GUE/Poisson, scaling asintotico.

## Respiro fuori-tempo
- **Combo**: A9 terzo incluso + A11 combo + QxG continuo/discreto + nodo BOUNDARY `8 GUE / 5 Poisson` + grafo della conoscenza come piano di passaggio.
- **Dipolo / punto-zero**: intermedio classico / bridge di grafo. Punto-zero: la stessa riga domain-window prima che Brody/Berry-Robnik e kNN decidano nomi diversi.
- **Piano superiore**: grafo della conoscenza e topologia del bordo row-aligned; il confine vive dove il lettore graph e il lettore classico non collassano nello stesso stato.
- **Operatori laterali scelti**: graph curvature, perturbazione del lettore, audit classico.
- **Contaminazione cognitiva**: CE-0001/KSAR usata come reiterazione del kernel `null_first -> candidate_name -> physical_return`, qui tradotto in `reader_first -> bridge_name -> classical_return`. CE-0117/Cascata usata per riportare il ciclo dal sotto-perimetro Anderson al perimetro vivo 8/5.
- **Proto-ipotesi**: il terzo incluso operativo non e' la classe statistica intermedia; e' la riga che resta ponte quando due lettori eterogenei vengono perturbati sullo stesso denominatore.
- **Possibile/non-possibile**: possibile = separare bridge a due lettori, residuo graph-only e intermedio classico-only; non-possibile = sommare graph-only e classico-only come un unico boundary.
- **Proiezione**: rieseguo `exp_boundary_bridge_stability_audit.py` con i default completi: 13 righe, 27 letture, stesso audit classico 19:04.
- **Movimento A->M->B**: fisico A = statistiche GUE/Poisson cross-dominio; matematica M = grafo kNN perturbato in feature canoniche + coordinate classiche; fisico B = criterio di ritorno: quali righe meritano un nuovo dominio fisico o Hamiltoniano. Il ritorno B resta vincolo, non scoperta fisica.

## Aderenza alla direzione
- `relation`: follows_direction
- `why`: l'esperimento usa direttamente il perimetro vivo `8 GUE / 5 Poisson` e misura se il confine e' un terzo incluso operativo invece di una scissione pulita GUE/Poisson.
- `not_drift`: non usa Sturmian, phi, V_c, fit locali o sotto-perimetro Anderson; il denominatore atomico e' 13 righe, 8 GUE e 5 Poisson.
- `seed_residue`: restano non testati scaling asintotico, rigenerazione fisica indipendente delle 13 righe e validita' analitica delle label sorgente.

## Re-discovery audit
- **Baseline noto piu vicino**: Brody crossover, Berry-Robnik mixture, Rosenzweig-Porter crossover, mobility/localization crossover, kNN stability e cluster-boundary stability.
- **Cosa assorbe il baseline**: righe intermedie classiche, peso GUE-like non estremo, q Brody non endpoint.
- **Cosa resta Lab-specific**: separazione row-aligned fra bridge di grafo stabile, classico-only intermedio e graph-only bridge sullo stesso denominatore 8/5.
- `two_reader_boundary_confirmed`: [`numeri_primi:cycle_3`].
- `graph_only_residue`: [`logistica_biforcazione_var_3.5699:cycle_13`, `percolation:cycle_9`, `reaction_diffusion:cycle_11`].
- `scope_change_declared`: nessun cambio di scope; il run torna al perimetro vivo 13 righe.
- `graph_baseline_audit`: kNN stability perturbata su k, size finestra e seed; join con Brody/Berry-Robnik-like audit classico.

## Claim Under Test
> Nel perimetro `8 GUE / 5 Poisson`, il terzo incluso operativo e' una riga che resta bridge di grafo sotto perturbazione e non viene completamente assorbita dal lettore classico.

## Question
Il bridge stabile del grafo sopravvive quando il lettore cambia k, lunghezza finestra e seed, oppure era un artefatto locale del run 19:15?

## Experiment Design
- **Script**: `tools/exp_boundary_bridge_stability_audit.py`.
- **Run**: `python tools/exp_boundary_bridge_stability_audit.py --out tools/data/boundary_bridge_stability_audit_20260516_1140.json`.
- **Scope**: `tools/data/boundary_denominator_prescan_full_20260509_1500.json`.
- **Classical audit**: `tools/data/boundary_classical_crossover_audit_20260515_1904.json`.
- **Perimetro**: 13 righe BOUNDARY, `8` label sorgente GUE e `5` label sorgente Poisson.
- **Reader perturbation**: `k=[2,3,4]`, `n_gaps=[512,1024,2048]`, seeds `[20260515,20260516,20260517]`, totale `27` letture.
- **Non misurato**: p-value, nuovi autovalori, nuovi Hamiltoniani, source-label validation, `V_c`, Sturmian denominators.

## Results
| class | rows | count |
|---|---|---:|
| stable_graph_bridge + classic_and_graph_bridge | `numeri_primi:cycle_3` | 1 |
| stable_graph_bridge + graph_only_bridge | `logistica_biforcazione_var_3.5699`, `percolation`, `reaction_diffusion` | 3 |
| parameter_sensitive_bridge + classic_only_intermediate | `random_matrix`, `zeta_zeros` | 2 |
| parameter_sensitive_bridge + endpoint_like | `logistica_biforcazione` | 1 |
| unstable_non_bridge + classic_only_intermediate | `brownian_motion`, `cellular_automata` | 2 |
| unstable_non_bridge + endpoint_like | `coupled_oscillators`, `ising_2d`, `pendolo_doppio`, `string_vibration` | 4 |

| row | source | graph hits | freq | classical audit | brody_q | BR-like GUE weight |
|---|---|---:|---:|---|---:|---:|
| `numeri_primi:cycle_3` | GUE | 27/27 | 1.000000 | classic_and_graph_bridge | 0.465 | 0.275 |
| `logistica_biforcazione_var_3.5699:cycle_13` | GUE | 27/27 | 1.000000 | graph_only_bridge | 0.000 | 0.000 |
| `percolation:cycle_9` | Poisson | 27/27 | 1.000000 | graph_only_bridge | 0.025 | 0.025 |
| `reaction_diffusion:cycle_11` | GUE | 27/27 | 1.000000 | graph_only_bridge | 0.000 | 0.000 |
| `random_matrix:cycle_7` | GUE | 18/27 | 0.666667 | classic_only_intermediate | 0.975 | 0.475 |
| `zeta_zeros:cycle_4` | GUE | 14/27 | 0.518519 | classic_only_intermediate | 1.000 | 0.530 |
| `brownian_motion:cycle_12` | Poisson | 5/27 | 0.185185 | classic_only_intermediate | 0.205 | 0.250 |
| `cellular_automata:cycle_8` | GUE | 0/27 | 0.000000 | classic_only_intermediate | 1.000 | 0.435 |

## Key Findings
1. Verificato: `numeri_primi:cycle_3` e' l'unica riga che unisce bridge graph stabile e audit classico bridge: `27/27`, `brody_q=0.465`, `BR-like weight=0.275`.
2. Verificato: tre righe sono bridge graph stabili ma non classiche: `27/27` ciascuna per `logistica_biforcazione_var_3.5699`, `percolation`, `reaction_diffusion`.
3. Verificato: due righe sono classiche intermedie senza bridge stabile: `brownian_motion=5/27`, `cellular_automata=0/27`.
4. Verificato: gli intermedi classici `random_matrix` e `zeta_zeros` sono parameter-sensitive, non bridge stabili: `18/27` e `14/27`.
5. Inferito dal perimetro: il terzo incluso operativo e' un oggetto a due lettori; il grafo da solo produce residuo, il classico da solo produce crossover noto.

## Verdict
CONSTRAINT.

Il confine `8 GUE / 5 Poisson` non e' una lista di righe intermedie. A denominatore perturbato, una sola riga chiude come bridge a due lettori (`numeri_primi:cycle_3`). Il residuo graph-only resta informativo ma non si somma al boundary confermato.

## Bicono della scoperta
- **Due radici**: bridge graph stabile / intermedio classico.
- **Singolare**: riga domain-window prima della scelta del lettore.
- **Invariante di passaggio**: stesso denominatore 13 righe, 27 perturbazioni del reader.
- **Campo di possibilita**: possibile = usare `numeri_primi:cycle_3` come unico candidato two-reader per ritorno fisico; non-possibile = promuovere graph-only residue come boundary confermato.

## Consecutio
Il prossimo ciclo deve attaccare `numeri_primi:cycle_3` con un null label-preserving row-local sullo stesso lettore a due canali. Se il bridge resta `27/27` mentre le label GUE/Poisson vengono permutate entro vincoli row-aligned, il candidato diventa test fisico. Se cade, il risultato resta proprieta' del grafo 13-righe.

## Ricadute pratiche
ssp_value: yes. `tools/exp_boundary_bridge_stability_audit.py` e' ora lo strumento di baseline per separare `two_reader_boundary_confirmed`, `graph_only_residue` e `classic_only_intermediate` sul perimetro BOUNDARY.

## Telemetria
- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.
- `python -m py_compile tools/exp_boundary_bridge_stability_audit.py tools/exp_boundary_graph_curvature_gate.py` completato.
- Run completato: `tools/data/boundary_bridge_stability_audit_20260516_1140.json`.
- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.
- Nessun update del seme.
- Nessuna promozione e nessun public sync.

## Files
- Script: `tools/exp_boundary_bridge_stability_audit.py`
- Data: `tools/data/boundary_bridge_stability_audit_20260516_1140.json`
- Report: `tools/data/reports/agent_20260516_1140.md`

exec
/bin/bash -lc "rg -n \"8 GUE|5 Poisson|GUE|Poisson|domain\" tools scripts -g '*.py' -g '*.json' -g '*.md'" in /opt/MM_D-ND
 exited 2 in 1ms:
rg: scripts: No such file or directory (os error 2)
tools/dipartimento.py:117:        'claim': 'Zeri zeta hanno spacing GUE (non Poisson)',
tools/dipartimento.py:153:        'claim': 'Rule 30/110 hanno spacing >> GUE standard',
tools/dipartimento.py:356:        passed = spacing == 'GUE-like' and abs(spacing_r - 0.6) < 0.1
tools/dipartimento.py:434:        passed = spacing_r > 0.7  # significativamente sopra GUE=0.60
tools/dipartimento.py:435:        return passed, f"⟨r⟩={spacing_r:.4f} (GUE standard=0.60)"
tools/dipartimento.py:1073:    # Il confine GUE/Poisson non è ancora esplorato
tools/dipartimento.py:1078:        gue = [e for e in journal if e.get('spacing') == 'GUE-like' and isinstance(e.get('ciclo'), int)]
tools/dipartimento.py:1079:        poisson = [e for e in journal if e.get('spacing') == 'Poisson-like' and isinstance(e.get('ciclo'), int)]
tools/dipartimento.py:1084:                'claim': f'{len(gue)} domini GUE, {len(poisson)} Poisson — il confine è il terzo incluso operativo',
tools/dipartimento.py:1988:                top_domains = sorted(pi.get('domains', {}).items(), key=lambda x: -x[1])[:3]
tools/dipartimento.py:1994:                if top_domains:
tools/dipartimento.py:1995:                    print(f"  Domini: {', '.join(f'{d}({n})' for d,n in top_domains)}")
tools/dipartimento.py:2001:                rifletti('projector_insights', f'{n_analyses} analisi, domini={[d for d,_ in top_domains]}')
tools/exp_boundary_gue_poisson.py:3:Experiment: GUE/Poisson boundary in prime gaps vs Cramér null model.
tools/exp_boundary_gue_poisson.py:5:Question: Is the transition from GUE-like to Poisson-like statistics in prime gaps
tools/exp_boundary_gue_poisson.py:11:   - GUE (GOE in 1D): <r> ≈ 0.5307
tools/exp_boundary_gue_poisson.py:12:   - Poisson: <r> ≈ 0.3863
tools/exp_boundary_gue_poisson.py:64:    print("=== GUE/Poisson Boundary: Primes vs Cramér Null Model ===\n")
tools/exp_boundary_gue_poisson.py:120:    print(f"\nReference: <r>_GUE = {r_gue:.4f}, <r>_Poisson = {r_poisson:.4f}")
tools/exp_boundary_gue_poisson.py:154:    # Where are primes relative to GUE/Poisson?
tools/exp_boundary_gue_poisson.py:163:        label = "GUE" if dist_gue < dist_poi else "POISSON"
tools/exp_rp_boundary_raw_count_null_audit.py:59:    poi_idx = [i for i, label in enumerate(labels) if label == "Poisson_pole"]
tools/exp_rp_boundary_raw_count_null_audit.py:60:    gue_idx = [i for i, label in enumerate(labels) if label == "GUE_pole"]
tools/exp_rp_boundary_raw_count_null_audit.py:62:        raise ValueError("labels must include Poisson and GUE poles")
tools/exp_rp_boundary_raw_count_null_audit.py:81:            if {labels[i], labels[other]} == {"Poisson_pole", "GUE_pole"}:
tools/exp_rp_boundary_raw_count_null_audit.py:83:            elif labels[i] == "flow_candidate" and labels[other] in {"Poisson_pole", "GUE_pole"}:
tools/exp_rp_boundary_raw_count_null_audit.py:93:                "domain_window": row["domain_window"],
tools/exp_rp_boundary_raw_count_null_audit.py:157:        labels = [row["source_domain_type"] for row in rows]
tools/exp_rp_boundary_raw_count_null_audit.py:161:            observed_by_name = {row["domain_window"]: row for row in observed}
tools/exp_rp_boundary_raw_count_null_audit.py:163:                row["domain_window"] for row in observed if row["boundary_state"] == "third_included_candidate"
tools/exp_rp_boundary_raw_count_null_audit.py:167:                name = row["domain_window"]
tools/exp_rp_boundary_raw_count_null_audit.py:183:                        row_hits[null_row["domain_window"]]["label_shuffle_hits"] += 1
tools/exp_rp_boundary_raw_count_null_audit.py:189:                        row_hits[null_row["domain_window"]]["position_shift_hits"] += 1
tools/exp_rp_boundary_raw_count_null_audit.py:221:                "domain_window": name,
tools/exp_rp_boundary_raw_count_null_audit.py:281:            row = next(row for row in entry["rows"] if row["domain_window"] == name)
tools/exp_rp_boundary_raw_count_null_audit.py:285:                "domain_window": name,
tools/exp_rp_boundary_raw_count_null_audit.py:290:                    if next(row for row in entry["rows"] if row["domain_window"] == name)["threshold_pass"]
tools/exp_rp_boundary_raw_count_null_audit.py:350:            "operator": "finite-size RP diagonal-plus-GUE flow with kNN graph perturbations and two row-aligned nulls",
tools/exp_rp_boundary_raw_count_null_audit.py:351:            "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE across sizes, seeds and k values",
tools/exp_boundary_short_denominator_extension.py:203:            "not_tested": "global 13-row boundary redesign, V_c fit, source GUE/Poisson label validity",
tools/plot_risultante.py:4:Background-Fluctuation Separation: V(r) → Berry-Keating, arithmetic → GUE.
tools/plot_risultante.py:90:GUE_R = 0.60266
tools/plot_risultante.py:92:odlyzko_excess = odlyzko_r - GUE_R  # +0.00826
tools/plot_risultante.py:103:excesses = [r - GUE_R for _, _, r in lf_data]
tools/plot_risultante.py:111:    ex = r - GUE_R
tools/plot_risultante.py:119:ax.axhline(y=0, color='green', linestyle='--', alpha=0.5, label='GUE exact')
tools/plot_risultante.py:128:ax.set_ylabel(r'$\Delta\langle r \rangle$ (excess over GUE)', fontsize=12)
tools/plot_risultante.py:140:ax.set_title('(d) Algebraic chain: D-ND → GUE', fontsize=13)
tools/plot_risultante.py:148:    (1.5, 0.5, r'GUE statistics  ($\beta = 2.007$)', 'lightgreen'),
tools/exp_anderson3d_comparable_null_audit.py:199:            "not_tested": "raw multi-seed reader, new Hamiltonian samples, L>=7, full 8 GUE / 5 Poisson seed perimeter",
tools/data/boundary_two_axis_matrix_20260509_1532.json:3:  "question": "Separate support_transfer from beta_coordinate_transfer on the 13 semi-real BOUNDARY rows without using GUE/Poisson labels.",
tools/data/boundary_two_axis_matrix_20260509_1532.json:16:  "label_policy": "GUE/Poisson source labels are not read by this operator.",
tools/dnd_compatibility.py:134:                        "<r>=0.507, tra GUE (0.5996) e Poisson (0.3863).",
tools/dnd_compatibility.py:147:# --- Random Matrix Theory (GUE) ---
tools/dnd_compatibility.py:150:    "GUE (Gaussian Unitary Ensemble): matrici hermitiane casuali, "
tools/dnd_compatibility.py:167:            "evidence": "Le matrici GUE hanno det qualsiasi. "
tools/dnd_compatibility.py:173:            "evidence": "phi non emerge naturalmente dal GUE. "
tools/dnd_compatibility.py:180:            "evidence": "GUE vive in C (numeri complessi generici), non in Q(sqrt(5)).",
tools/dnd_compatibility.py:185:            "evidence": "GUE e' una classe definita, non una fase critica. "
tools/data/notte_20260329_0330.md:4:  Direzione: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo in
tools/data/notte_20260329_0330.md:5:  [confine_inesplorato] BOUNDARY: 8 domini GUE, 5 Poisson — il confine è il terzo incluso oper
tools/data/notte_20260329_0330.md:11:  logistica_biforcazione_cp_3.57: r=1.0, spacing=Poisson-like [conferma]
tools/data/notte_20260329_0330.md:13:  logistica_biforcazione_cp_3.665: r=1.0, spacing=Poisson-like [conferma]
tools/data/notte_20260329_0330.md:14:  numeri_primi_cp_100: r=0.762330388277594, spacing=GUE-like [conferma]
tools/data/notte_20260329_0330.md:15:  numeri_primi_cp_50000: r=0.762330388277594, spacing=GUE-like [conferma]
tools/data/notte_20260329_0330.md:16:  logistica_biforcazione_cp_3.757: r=1.0, spacing=Poisson-like [conferma]
tools/data/notte_20260329_0330.md:18:  collatz_cp: r=0.9762845849802372, spacing=GUE-like [conferma]
tools/data/notte_20260329_0330.md:20:  ising_2d_cp_-0.3659164576291013: r=0.8922932783549861, spacing=GUE-like [conferma]
tools/data/notte_20260329_0330.md:21:  ising_2d_cp_0.46188882642750695: r=0.98945843573869, spacing=GUE-like [conferma]
tools/data/notte_20260329_0330.md:22:  brownian_motion_cp_0.12230384159779378: r=0.968503937007874, spacing=Poisson-like [conferma]
tools/data/notte_20260329_0330.md:23:  brownian_motion_cp_0.8867788787335775: r=?, spacing=Poisson-like [VINCOLO]
tools/data/notte_20260329_0330.md:24:  percolation_cp_0.37804273882301154: r=0.6666666666666667, spacing=GUE-like [conferma]
tools/data/notte_20260329_0330.md:25:  percolation_cp_0.8589741112320333: r=1.2298136645962734, spacing=GUE-like [conferma]
tools/data/notte_20260329_0330.md:26:  cellular_automata_cp_182: r=0.8566654288897141, spacing=GUE-like [conferma]
tools/data/notte_20260329_0330.md:37:  Campo dopo Fase 0: 8 GUE / 5 Poisson
tools/data/notte_20260329_0330.md:41:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260329_0330.md:42:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260329_0330.md:43:  brownian_motion_var_0.3: r=1.3557126030624262, spacing=Poisson-like (⟨r⟩=0.38597886256510316)
tools/data/notte_20260329_0330.md:44:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260329_0330.md:76:## Fase 4: Cross-domain
tools/data/notte_20260329_0330.md:93:  GUE: 8 | Poisson: 9 | Vincoli: 2 | Anomalie: 21
tools/data/notte_20260329_0330.md:95:  Domini GUE: numeri_primi_cp_100, numeri_primi_cp_50000, collatz_cp, ising_2d_cp_-0.3659164576291013, ising_2d_cp_0.46188882642750695, percolation_cp_0.37804273882301154, percolation_cp_0.8589741112320333, cellular_automata_cp_182
tools/data/notte_20260329_0330.md:96:  Domini Poisson: logistica_biforcazione_cp_3.57, logistica_biforcazione_cp_3.665, logistica_biforcazione_cp_3.757, brownian_motion_cp_0.12230384159779378, brownian_motion_cp_0.8867788787335775, logistica_biforcazione_var_3.9, coupled_oscillators_var_50, brownian_motion_var_0.3, logistica_biforcazione_var_3.57
tools/exp_two_channel_decomposition.py:18:  - Extrapolated Poisson crossover
tools/exp_two_channel_decomposition.py:344:            # Poisson crossover: acf1 = 0
tools/exp_two_channel_decomposition.py:353:                  f"R2={r2:.3f}  Poisson at ln(p)={ln_p_cross:.1f} (p~10^{ln_p_cross/np.log(10):.1f})")
tools/data/prime_persistent_blank_gate_20260511_0330.json:44:    "generator": "prime gaps from dnd_autoricerca row_spacings and direct sieve; controls from GUE random matrix blocks and logistic return intervals",
tools/data/prime_persistent_blank_gate_20260511_0330.json:45:    "denominator": "8 prime row-local windows (2 providers x 4 offsets) plus 8 cross-domain controls",
tools/data/prime_persistent_blank_gate_20260511_0330.json:47:    "not_tested": "global beta atlas, V_c, gap_ratio, source GUE/Poisson labels"
tools/dnd_gue_test.py:3:Piano 11b — GUE Test Protocol (Revised)
tools/dnd_gue_test.py:6:zeros follow GUE statistics (Katz-Sarnak). This is the algebraic bridge,
tools/dnd_gue_test.py:14:  Prediction: zeros of L(s, χ_disc) → GUE (Katz-Sarnak)
tools/dnd_gue_test.py:17:T1: L(s, χ₅) zeros → GUE  (the D-ND matrix M, tr=1)
tools/dnd_gue_test.py:18:T2: L(s, χ₈) zeros → GUE  (tr=2, disc=8, Q(√2))
tools/dnd_gue_test.py:19:T3: L(s, χ₁₃) zeros → GUE (tr=3, disc=13, Q(√13))
tools/dnd_gue_test.py:20:T4: ζ(s) zeros → GUE       (reference: Montgomery-Odlyzko)
tools/dnd_gue_test.py:40:    """GUE (β=2) Wigner surmise CDF."""
tools/dnd_gue_test.py:48:    """Poisson CDF."""
tools/dnd_gue_test.py:51:GUE_VAR_REF = 1 - 4/np.pi**2  # ≈ 0.5947 (Wigner surmise β=2)
tools/dnd_gue_test.py:53:# Better: Var(s) for GUE Wigner surmise = (3π-8)/(2π) ≈ 0.178
tools/dnd_gue_test.py:55:GUE_VAR = 0.178  # Wigner surmise β=2
tools/dnd_gue_test.py:362:    """Test spacings against GUE, GOE, Poisson."""
tools/dnd_gue_test.py:374:    fits = [("GUE", ks_gue, p_gue), ("GOE", ks_goe, p_goe), ("Poisson", ks_poi, p_poi)]
tools/dnd_gue_test.py:395:    print("Piano 11b — GUE Test Protocol (Revised)")
tools/dnd_gue_test.py:414:    # ─── T1: ζ(s) zeros → GUE (reference, Montgomery-Odlyzko) ────────
tools/dnd_gue_test.py:555:        marker = "✓" if fit == "GUE" else "✗"
tools/dnd_gue_test.py:556:        if fit == "GUE":
tools/dnd_gue_test.py:568:        verdict = (f"GUE UNIVERSALE: {gue_count}/{total} L-functions mostrano GUE. "
tools/dnd_gue_test.py:569:                   f"La catena det=-1 → campo numerico → L-function → GUE è confermata.")
tools/dnd_gue_test.py:572:        verdict = (f"GUE DOMINANTE: {gue_count}/{total}. Risultato parziale, "
tools/dnd_gue_test.py:578:        verdict = f"NON-GUE: classe dominante {dominant}. Revisione necessaria."
tools/dnd_gue_test.py:587:    print("  Near s=0: p(s) ~ s^β. β=0:Poisson, β=1:GOE, β=2:GUE")
tools/dnd_gue_test.py:622:                cls = "GUE" if beta > 1.5 else ("GOE" if beta > 0.5 else "Poisson")
tools/dnd_gue_test.py:630:    # Count GUE in beta analysis
tools/dnd_gue_test.py:631:    beta_gue = sum(1 for lb in beta_results.values() for v in lb.values() if v.get("class") == "GUE")
tools/dnd_gue_test.py:633:    print(f"  DIPOLO FRATTALE: {beta_gue}/{beta_total} GUE a livello di repulsione")
tools/dnd_gue_test.py:634:    print(f"  Il KS globale dice GOE. Il β allo zero dice GUE.")
tools/dnd_gue_test.py:703:            family_verdict = f"MISTO: neg1 GUE={all_neg1_gue}, pos1 GUE={all_pos1_gue}"
tools/dnd_gue_test.py:716:    print(f"  Piano 11:  det=-1 → fluctuations (GUE via Katz-Sarnak)")
tools/dnd_gue_test.py:728:        verdict_fractal = (f"GUE CONFERMATO via dipolo frattale: β>2 per {beta_gue}/{beta_total} misure. "
tools/dnd_gue_test.py:729:                          f"KS globale={gue_count}/{total} GUE (forma bulk). "
tools/dnd_gue_test.py:730:                          f"β allo zero={beta_gue}/{beta_total} GUE (repulsione). "
tools/dnd_gue_test.py:734:        verdict_fractal = (f"Dipolo frattale: {beta_gue}/{beta_total} GUE. "
tools/dnd_gue_test.py:805:            "fluctuations": "det=-1 → Q(√5) → L(s,χ₅) → GUE (Piano 11)",
tools/dnd_gue_test.py:806:            "family": "ALL det=-1 matrices → number fields → GUE (Piano 11b)",
tools/STRUMENTI.json:38:      "input": "sequenza numerica o dominio predefinito (--domain primi|ising|...)",
tools/STRUMENTI.json:40:      "chiama_con": "python m_spectro.py --domain primi",
tools/exp_markov_k_direction.py:148:    print("Does higher-order memory point GUE-ward in the (SR, L1) plane?")
tools/exp_markov_k_direction.py:169:    GUE_THETA = -97.0
tools/exp_markov_k_direction.py:240:        'GUE_ref_theta': GUE_THETA,
tools/exp_perturbation_rank_size_curve.py:7:The 2026-05-06 06:25 cycle restricted the claim "GUE has a second
tools/exp_perturbation_rank_size_curve.py:53:    """Generate unfolded GUE spacings by concatenating independent matrices."""
tools/exp_perturbation_rank_size_curve.py:312:        "domains": {},
tools/exp_perturbation_rank_size_curve.py:319:    print(f"{'domain':<22} {'N':>6} {'rank':>7} {'PC2':>7} {'weak':>5} {'stable_rank':>11}")
tools/exp_perturbation_rank_size_curve.py:321:    domain_builders = {
tools/exp_perturbation_rank_size_curve.py:328:    for domain_name, builder in domain_builders.items():
tools/exp_perturbation_rank_size_curve.py:329:        output["domains"][domain_name] = {}
tools/exp_perturbation_rank_size_curve.py:330:        output["summary"][domain_name] = {}
tools/exp_perturbation_rank_size_curve.py:351:            output["domains"][domain_name][str(n)] = rows
tools/exp_perturbation_rank_size_curve.py:352:            output["summary"][domain_name][str(n)] = summary
tools/exp_perturbation_rank_size_curve.py:356:                f"{domain_name:<22} {n:>6} {summary['rank_mean']:>7.3f} "
tools/exp_markov_dipolar_decomposition.py:6:GUE has dL1/dSR = 8.37 at angle -97 deg.
tools/LAB_OPERATIVO.md:20:Cosa ha prodotto: la classificazione GUE/Poisson è reale (non artefatto).
tools/exp_two_layer_universality.py:13:  1. Generate 7 gap/spacing sequences: primes, GUE, Poisson, AR(1), logistic,
tools/exp_two_layer_universality.py:249:    'GUE': gen_gue_spacings,
tools/exp_two_layer_universality.py:250:    'Poisson': gen_poisson_spacings,
tools/exp_two_layer_universality.py:282:        if seq_name in ('GUE', 'Poisson', 'AR1'):
tools/exp_rp_unfolding_sensitivity_audit.py:137:        "domain_window": f"RP_lambda_{lam:.3f}",
tools/exp_rp_unfolding_sensitivity_audit.py:139:        "source_domain_type": source_type(lam, args.poisson_pole_max, args.gue_pole_min),
tools/exp_rp_unfolding_sensitivity_audit.py:185:        labels = [row["source_domain_type"] for row in rows]
tools/exp_rp_unfolding_sensitivity_audit.py:189:            observed_by_name = {row["domain_window"]: row for row in observed}
tools/exp_rp_unfolding_sensitivity_audit.py:191:                row["domain_window"] for row in observed if row["boundary_state"] == "third_included_candidate"
tools/exp_rp_unfolding_sensitivity_audit.py:197:                name = row["domain_window"]
tools/exp_rp_unfolding_sensitivity_audit.py:213:                        row_hits[null_row["domain_window"]]["label_shuffle_hits"] += 1
tools/exp_rp_unfolding_sensitivity_audit.py:219:                        row_hits[null_row["domain_window"]]["position_shift_hits"] += 1
tools/exp_rp_unfolding_sensitivity_audit.py:251:                "domain_window": name,
tools/exp_rp_unfolding_sensitivity_audit.py:324:        row = {"domain_window": name, "lambda": round(float(lam), 6)}
tools/exp_rp_unfolding_sensitivity_audit.py:328:                next(item for item in entry["rows"] if item["domain_window"] == name)
tools/exp_rp_unfolding_sensitivity_audit.py:334:                if next(item for item in entry["rows"] if item["domain_window"] == name)["threshold_pass"]
tools/exp_rp_unfolding_sensitivity_audit.py:390:            "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE across size, seed, k and unfolding mode",
tools/exp_duality_gate_transfer.py:10:    away from GUE/Poisson?
tools/dnd_curva.py:210:    print("PARTE 2: COSA DISTINGUE k=1? — LE TRE MISURE")
tools/data/tool_contracts/runs/component_state_anderson3d_20260514_1850.json:30:    "physical_A": "GOE/GUE-Poisson anchor from 20260514_1640",
tools/data/tool_contracts/runs/component_state_anderson3d_20260514_1850.json:31:    "math_transducer": "component_state(SR,L1,triple_var) against span-matched Poisson",
tools/data/tool_contracts/runs/component_state_anderson3d_20260514_1850.json:33:    "poisson_contrast": "both Anderson 3D classes active on focus observables against Poisson",
tools/data/tool_contracts/component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:19:    "GUE_unitary_no_time_reversal": {
tools/data/tool_contracts/component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:29:    "declared": "single ordered spectrum or small class-labeled set; no new physical domain generation",
tools/data/tool_contracts/component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:32:      "class-labeled input where direct_contrast is not separated on SR despite declared GOE/GUE classes",
tools/data/tool_contracts/component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:39:    "optional_expected_class": "class label used for grouped Poisson contrast and direct class contrast",
tools/data/tool_contracts/component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:52:    "replication_hint": "new domain labs should expose input/output/counter-perimeter before graph integration",
tools/data/tool_contracts/component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:58:    "poisson_contrast": "real spectrum versus span-matched Poisson null",
tools/data/tool_contracts/component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:97:    "fall": "Tester falls if GOE/GUE direct SR separation disappears, if Poisson contrast absorbs all focus observables in chaotic classes, or if Anderson W6 keeps SR active under the declared threshold.",
tools/data/tool_contracts/component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:98:    "transfer": "SR,L1,triple_var pass from the mathematical deposit into a physical spectrum tester as component states against Poisson and, when classes exist, direct class contrast."
tools/exp_two_channel_boundary.py:25:  GUE-like and Poisson-like regimes is channel-specific.
tools/exp_boundary_unfolding_transfer_matrix.py:3:Cross-domain unfolding-transfer matrix for the BOUNDARY redesign.
tools/exp_boundary_unfolding_transfer_matrix.py:6:domain/size/seed spectrum, the script measures how much the observable vector
tools/exp_boundary_unfolding_transfer_matrix.py:171:    if source_type == "GUE":
tools/exp_boundary_unfolding_transfer_matrix.py:173:    if source_type == "Poisson":
tools/exp_boundary_unfolding_transfer_matrix.py:207:                    "row_id": f"GUE_N{n}_s{seed_idx}",
tools/exp_boundary_unfolding_transfer_matrix.py:208:                    "source_type": "GUE",
tools/exp_boundary_unfolding_transfer_matrix.py:216:                    "row_id": f"Poisson_N{n}_s{seed_idx}",
tools/exp_boundary_unfolding_transfer_matrix.py:217:                    "source_type": "Poisson",
tools/exp_boundary_unfolding_transfer_matrix.py:241:    if source_type in {"GUE", "Poisson"}:
tools/exp_boundary_unfolding_transfer_matrix.py:333:        "GUE": summarize_group(output_rows, "GUE", args),
tools/exp_boundary_unfolding_transfer_matrix.py:334:        "Poisson": summarize_group(output_rows, "Poisson", args),
tools/exp_boundary_unfolding_transfer_matrix.py:339:        "question": "Does the unfolding/window reader axis transfer across GUE, Poisson and RP as boundary coordinate rather than as a stable RP lambda?",
tools/exp_boundary_unfolding_transfer_matrix.py:371:            "generator": "GUE matrices, Poisson exponential spacings, and RP H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE",
tools/exp_boundary_unfolding_transfer_matrix.py:372:            "denominator": "domain x size x seed rows; nulls use the same row spacings under permutation and circular shifts",
tools/exp_boundary_unfolding_transfer_matrix.py:373:            "non_possible": "reader axis as boundary coordinate if GUE/Poisson endpoints also fracture or RP residue does not beat row-aligned nulls",
tools/observables_registry.py:13:GUE") e nel farlo ha trovato **collision di nomi observable** tra script:
tools/observables_registry.py:85:    Range: (0, 1]. GUE → ~0.60. Poisson → ~0.39. Picket-fence → 1.
tools/observables_registry.py:263:    print(f"\nGUE-like 200 gaps:")
tools/dnd_paper_audit.py:722:    "GUE": "det=-1 → always hyperbolic → GUE statistics",
tools/exp_two_channel_cross_domain.py:3:exp_two_channel_cross_domain.py — Two-Channel Decomposition Across Domains
tools/exp_two_channel_cross_domain.py:9:  2. Statistical (magnitude): decays slowly toward Poisson
tools/exp_two_channel_cross_domain.py:11:C1 claims primes are the only dynamic domain under M among 7 tested.
tools/exp_two_channel_cross_domain.py:17:  - GUE eigenvalues: random matrix, strong statistical correlation, no arithmetic
tools/exp_two_channel_cross_domain.py:20:For each domain, at multiple scales, we measure:
tools/exp_two_channel_cross_domain.py:27:If GUE shows only decaying channels → C1 supported (algebraic invariance is prime-specific)
tools/exp_two_channel_cross_domain.py:28:If GUE shows a scale-invariant channel → C1 needs refinement
tools/exp_two_channel_cross_domain.py:31:    python tools/exp_two_channel_cross_domain.py [--n_primes N] [--gue_size N] [--n_windows N]
tools/exp_two_channel_cross_domain.py:63:    """Generate unfolded spacings from GUE random matrices."""
tools/exp_two_channel_cross_domain.py:66:        # GUE: H = (A + A^*) / (2 * sqrt(2N)), A is complex Gaussian
tools/exp_two_channel_cross_domain.py:295:    # === GUE EIGENVALUES ===
tools/exp_two_channel_cross_domain.py:296:    print(f"\n=== GUE EIGENVALUES ({gue_matrices} matrices of size {gue_size}) ===")
tools/exp_two_channel_cross_domain.py:298:    print(f"Got {len(gue_spacings)} GUE spacings, mean={np.mean(gue_spacings):.3f}")
tools/exp_two_channel_cross_domain.py:351:    """Extract scale-dependence of z-scores for each domain."""
tools/exp_two_channel_cross_domain.py:353:    for domain, data in results.items():
tools/exp_two_channel_cross_domain.py:371:        summary[domain] = {
tools/exp_two_channel_cross_domain.py:399:    for domain, s in summary.items():
tools/exp_two_channel_cross_domain.py:400:        print(f"{domain:>12} | "
tools/exp_two_channel_cross_domain.py:412:    print("         GUE/Cramer should show decaying or absent binary channel")
tools/exp_two_channel_cross_domain.py:432:        'experiment': 'two_channel_cross_domain',
tools/exp_two_channel_cross_domain.py:446:    out_path = Path('tools/data/two_channel_cross_domain.json')
tools/exp_duality_scale_contrast.py:5:for prime gaps, GUE eigenvalue spacings, and Poisson gaps.
tools/exp_duality_scale_contrast.py:43:    """Generate GUE (beta=2) eigenvalue spacings from random Hermitian matrix."""
tools/exp_duality_scale_contrast.py:59:    """Generate Poisson (uncorrelated) spacings."""
tools/exp_duality_scale_contrast.py:149:    print(f"Got {n_gaps} prime gaps. Generating GUE and Poisson controls...")
tools/exp_duality_scale_contrast.py:150:    gue_gaps = gue_spacings(min(n_gaps, 2000), rng)  # GUE limited by matrix size
tools/exp_duality_scale_contrast.py:162:    print(f"Computing windowed contrast for Poisson gaps...")
tools/exp_duality_scale_contrast.py:165:    # GUE: smaller windows only (limited by matrix size)
tools/exp_duality_scale_contrast.py:167:    print(f"Computing windowed contrast for GUE gaps (sizes: {gue_window_sizes})...")
tools/exp_duality_scale_contrast.py:223:    for domain in ["primes", "gue", "poisson"]:
tools/exp_duality_scale_contrast.py:224:        z = result["global_z"][domain]
tools/exp_duality_scale_contrast.py:226:        lines.append(f"  {domain:10s}: {zstr}")
tools/exp_duality_scale_contrast.py:230:    lines.append(f"  {'W_size':>8s}  {'Primes':>10s}  {'GUE':>10s}  {'Poisson':>10s}")
tools/exp_duality_scale_contrast.py:259:    for domain, data in [("primes", prime_data), ("poisson", poisson_data)]:
tools/exp_duality_scale_contrast.py:268:            lines.append(f"  {domain}: |z_SR| crosses 2 at window_size ~ {crossing}")
tools/exp_duality_scale_contrast.py:270:            lines.append(f"  {domain}: no crossing detected in range")
tools/exp_prime_persistent_blank_gate.py:176:            "generator": "prime gaps from dnd_autoricerca row_spacings and direct sieve; controls from GUE random matrix blocks and logistic return intervals",
tools/exp_prime_persistent_blank_gate.py:177:            "denominator": "8 prime row-local windows (2 providers x 4 offsets) plus 8 cross-domain controls",
tools/exp_prime_persistent_blank_gate.py:179:            "not_tested": "global beta atlas, V_c, gap_ratio, source GUE/Poisson labels",
tools/data/tool_contracts/latest.json:19:    "GUE_unitary_no_time_reversal": {
tools/data/tool_contracts/latest.json:29:    "declared": "single ordered spectrum or small class-labeled set; no new physical domain generation",
tools/data/tool_contracts/latest.json:32:      "class-labeled input where direct_contrast is not separated on SR despite declared GOE/GUE classes",
tools/data/tool_contracts/latest.json:39:    "optional_expected_class": "class label used for grouped Poisson contrast and direct class contrast",
tools/data/tool_contracts/latest.json:52:    "replication_hint": "new domain labs should expose input/output/counter-perimeter before graph integration",
tools/data/tool_contracts/latest.json:58:    "poisson_contrast": "real spectrum versus span-matched Poisson null",
tools/data/tool_contracts/latest.json:97:    "fall": "Tester falls if GOE/GUE direct SR separation disappears, if Poisson contrast absorbs all focus observables in chaotic classes, or if Anderson W6 keeps SR active under the declared threshold.",
tools/data/tool_contracts/latest.json:98:    "transfer": "SR,L1,triple_var pass from the mathematical deposit into a physical spectrum tester as component states against Poisson and, when classes exist, direct class contrast."
tools/confine_spessore.py:10:Blocco 3: Dove il residuo 1/phi^(2n) incontra il confine GUE/Poisson nei domini
tools/confine_spessore.py:188:# BLOCCO 3: Residuo vs confine GUE/Poisson
tools/confine_spessore.py:193:    print("BLOCCO 3: Residuo 1/phi^(2n) vs confine GUE/Poisson")
tools/confine_spessore.py:197:    # Il confine GUE/Poisson emerge nella distribuzione NNS (nearest neighbor spacing)
tools/confine_spessore.py:199:    # GUE: repulsione (P(s) ~ s^2 * exp(-4s^2/pi))
tools/confine_spessore.py:200:    # Poisson: nessuna repulsione (P(s) = exp(-s))
tools/confine_spessore.py:216:    print("\n--- NNS ratio (indicatore GUE vs Poisson) a diverse scale ---")
tools/confine_spessore.py:218:    print("  GUE: r ~ 0.5307")
tools/confine_spessore.py:219:    print("  Poisson: r ~ 0.3863")
tools/confine_spessore.py:248:        regime = "GUE" if dist_gue < dist_poi else "Poisson"
tools/confine_spessore.py:251:              f"dist_GUE={dist_gue:.4f}  dist_Poi={dist_poi:.4f}  "
tools/confine_spessore.py:278:    print(f"  Punto medio GUE/Poisson: {midpoint:.4f}")
tools/confine_spessore.py:294:            regime = "GUE" if abs(r - 0.5307) < abs(r - 0.3863) else "Poi"
tools/confine_spessore.py:319:        print("GUE (repulsione)")
tools/confine_spessore.py:321:        print("Poisson (indipendenza)")
tools/confine_spessore.py:354:3. Il residuo incontra il confine GUE/Poisson?
tools/exp_beta_crossover.py:192:    # Sweep beta from near-Poisson (0.01) to beyond-GUE (10)
tools/exp_beta_crossover.py:194:        np.linspace(0.05, 0.5, n_betas // 3),      # fine resolution near Poisson
tools/exp_beta_crossover.py:195:        np.linspace(0.6, 2.0, n_betas // 3),         # through GOE-GUE
tools/exp_beta_crossover.py:196:        np.linspace(2.5, 8.0, n_betas - 2*(n_betas//3)),  # beyond GUE
tools/exp_beta_crossover.py:313:            note = " <-- Poisson"
tools/exp_beta_crossover.py:317:            note = " <-- GUE"
tools/exp_crossover_universality.py:8:  - beta(ln p) drifts from ~0.39 to ~0.27  (toward Poisson=0)
tools/exp_crossover_universality.py:9:  - dR_acf1(ln p) drifts from ~-0.50 to ~-0.40  (toward Poisson=0?)
tools/exp_crossover_universality.py:10:  - gap_acf1(ln p) drifts from ~-0.07 to ~-0.04  (toward Poisson=0)
tools/exp_crossover_universality.py:18:  - Rescale each to crossover parameter c in [0,1]: c=0 at GUE, c=1 at Poisson
tools/exp_crossover_universality.py:21:  - Null: 15 Cramer surrogates (should be flat at Poisson)
tools/exp_crossover_universality.py:133:# GUE: beta=1, dR_acf1~?, gap_acf1~?, <r>=0.5307 (4/pi - 1 ?)
tools/exp_crossover_universality.py:134:# Poisson: beta=0, dR_acf1=0 (uncorrelated), gap_acf1=0, <r>=0.3863 (2ln2-1)
tools/exp_crossover_universality.py:135:# We use empirical GUE reference where analytic is unknown
tools/exp_crossover_universality.py:136:R_GUE = 0.5307  # 4/(pi+2) Wigner surmise
tools/exp_crossover_universality.py:140:print(f"  <r> GUE = {R_GUE:.4f}, <r> Poisson = {R_POISSON:.4f}")
tools/exp_crossover_universality.py:141:print(f"  beta GUE = 1.0, beta Poisson = 0.0")
tools/exp_crossover_universality.py:153:# Rescale each to c in [0,1] where 0=GUE-like, 1=Poisson-like
tools/exp_crossover_universality.py:154:# For beta: c = 1 - beta (beta=1 is GUE, so c=0)
tools/exp_crossover_universality.py:159:# Compute how fast each observable moves toward Poisson per decade of ln(p)
tools/exp_crossover_universality.py:160:# All should move toward Poisson (beta->0, dR_acf1->0, gap_acf1->0, r->0.386)
tools/exp_crossover_universality.py:166:# Fractional change per unit ln(p) toward Poisson
tools/exp_crossover_universality.py:167:# beta: Poisson=0, so rate = -slope/mean(beta)
tools/exp_crossover_universality.py:168:# gap_acf1: Poisson=0, rate = -slope/mean(gap_acf1) (gap_acf1 is negative, slope positive -> toward 0)
tools/exp_crossover_universality.py:169:# dR_acf1: if Poisson = 0, rate = -slope/mean(dR_acf1)
tools/exp_crossover_universality.py:170:# r_mean: Poisson = 0.386, rate = slope / (mean(r) - 0.386) ... toward lower r
tools/exp_crossover_universality.py:176:rates['r_mean'] = fits['r_mean']['slope'] / (np.mean(r_arr) - R_POISSON)  # negative if drifting toward Poisson
tools/exp_crossover_universality.py:179:    print(f"  {name:10s}: fractional rate toward Poisson = {rate:.6f} per unit ln(p)")
tools/exp_crossover_universality.py:275:# === Extrapolation: when does beta reach 0 (Poisson)? ===
tools/exp_crossover_universality.py:280:    print(f"  beta -> 0 (Poisson) at ln(p)={ln_p_poisson_beta:.1f}, p~{p_poisson_beta:.2e}")
tools/exp_crossover_universality.py:292:    print(f"  <r> -> {R_POISSON:.4f} (Poisson) at ln(p)={ln_p_poisson_r:.1f}, p~{p_poisson_r:.2e}")
tools/build_lab_graph.py:236:                'text': f"Metrica primi g=(p/2)², curvatura GUE r={mp.get('risultato_r',{}).get('curvatura_r','?')}, z={mp.get('test_null',{}).get('z_score','?')}",
tools/data/tool_contracts/smoke_component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:3:    "GOE_minus_GUE": {
tools/data/tool_contracts/smoke_component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:11:      "label": "GOE_minus_GUE",
tools/data/tool_contracts/smoke_component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:65:    "poisson_contrast": "span-matched Poisson null for each class/label",
tools/data/tool_contracts/smoke_component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:120:    "GUE": {
tools/data/tool_contracts/smoke_component_state_SR_L1_triple_var_fit_ready_20260514_1649.json:140:      "label": "GUE",
tools/exp_boundary_graph_residue_threshold_audit.py:85:        "domain_window": row["domain_window"],
tools/exp_boundary_graph_residue_threshold_audit.py:86:        "domain": row["domain"],
tools/exp_boundary_graph_residue_threshold_audit.py:87:        "source_domain_type": row["source_domain_type"],
tools/exp_boundary_graph_residue_threshold_audit.py:178:            "graph_only_rows": [row["domain_window"] for row in graph_only_rows],
tools/exp_boundary_graph_residue_threshold_audit.py:179:            "positive_lift_unthresholded_rows": [row["domain_window"] for row in positive_rows],
tools/exp_boundary_graph_residue_threshold_audit.py:180:            "thresholded_graph_specific_residue_rows": [row["domain_window"] for row in threshold_rows],
tools/exp_boundary_graph_curvature_gate.py:3:Graph-curvature gate for the 8 GUE / 5 Poisson BOUNDARY perimeter.
tools/exp_boundary_graph_curvature_gate.py:5:The unit is the row-aligned domain/window from the base BOUNDARY perimeter.
tools/exp_boundary_graph_curvature_gate.py:98:    labels = [row["source_domain_type"] for row in rows]
tools/exp_boundary_graph_curvature_gate.py:99:    gue_idx = [i for i, label in enumerate(labels) if label == "GUE"]
tools/exp_boundary_graph_curvature_gate.py:100:    poi_idx = [i for i, label in enumerate(labels) if label == "Poisson"]
tools/exp_boundary_graph_curvature_gate.py:102:        raise ValueError("scope must include both GUE and Poisson rows")
tools/exp_boundary_graph_curvature_gate.py:136:            third_rows.append(row["domain_window"])
tools/exp_boundary_graph_curvature_gate.py:141:                "domain_window": row["domain_window"],
tools/exp_boundary_graph_curvature_gate.py:142:                "domain": row["domain"],
tools/exp_boundary_graph_curvature_gate.py:143:                "source_domain_type": row["source_domain_type"],
tools/exp_boundary_graph_curvature_gate.py:156:            "a": rows[i]["domain_window"],
tools/exp_boundary_graph_curvature_gate.py:157:            "b": rows[j]["domain_window"],
tools/exp_boundary_graph_curvature_gate.py:174:            "GUE": len(gue_idx),
tools/exp_boundary_graph_curvature_gate.py:175:            "Poisson": len(poi_idx),
tools/exp_boundary_graph_curvature_gate.py:195:    selected = [row for row in scope if row.get("source_domain_type") in {"GUE", "Poisson"}]
tools/exp_boundary_graph_curvature_gate.py:202:            gaps = row_spacings(source["domain"])
tools/exp_boundary_graph_curvature_gate.py:206:                        "domain_window": source["domain_window"],
tools/exp_boundary_graph_curvature_gate.py:216:                    "domain_window": source["domain_window"],
tools/exp_boundary_graph_curvature_gate.py:217:                    "domain": source["domain"],
tools/exp_boundary_graph_curvature_gate.py:219:                    "source_domain_type": source["source_domain_type"],
tools/exp_boundary_graph_curvature_gate.py:228:                    "domain_window": source.get("domain_window"),
tools/exp_boundary_graph_curvature_gate.py:238:        "question": "Does the 8 GUE / 5 Poisson perimeter expose a graph boundary row instead of a clean two-class split?",
tools/exp_boundary_graph_curvature_gate.py:246:            "operator": "row-aligned domain/window graph in canonical+rigidity+shuffle-z feature space",
tools/exp_boundary_graph_curvature_gate.py:248:            "denominator": "base BOUNDARY rows with source_domain_type in {GUE, Poisson}",
tools/exp_boundary_graph_curvature_gate.py:250:            "not_tested": "V_c, Sturmian denominators, analytic source of each domain label",
tools/exp_boundary_graph_curvature_gate.py:278:            f"{row['domain_window']}\t{row['source_domain_type']}\t"
tools/data/markov_memory_by_gue_type.json:4:  "question": "Does Markov memory discriminate distribution-GUE from ordering-GUE?",
tools/data/markov_memory_by_gue_type.json:7:      "domain": "primes",
tools/data/markov_memory_by_gue_type.json:9:      "gue_type": "distribution-GUE",
tools/data/markov_memory_by_gue_type.json:27:      "domain": "gue_matrix",
tools/data/markov_memory_by_gue_type.json:29:      "gue_type": "distribution-GUE",
tools/data/markov_memory_by_gue_type.json:47:      "domain": "percolation",
tools/data/markov_memory_by_gue_type.json:49:      "gue_type": "ordering-GUE",
tools/data/markov_memory_by_gue_type.json:67:      "domain": "coupled_oscillators",
tools/data/markov_memory_by_gue_type.json:69:      "gue_type": "ordering-GUE",
tools/data/markov_memory_by_gue_type.json:87:      "domain": "string_vibration",
tools/data/markov_memory_by_gue_type.json:89:      "gue_type": "ordering-GUE",
tools/data/markov_memory_by_gue_type.json:107:      "domain": "poisson",
tools/data/markov_memory_by_gue_type.json:109:      "gue_type": "Poisson",
tools/data/markov_memory_by_gue_type.json:127:      "domain": "logistica_biforcazione",
tools/data/markov_memory_by_gue_type.json:129:      "gue_type": "Poisson",
tools/data/markov_memory_by_gue_type.json:147:      "domain": "brownian_motion",
tools/data/markov_memory_by_gue_type.json:149:      "gue_type": "Poisson",
tools/exp_psd_amplitude_scaling.py:146:    # Poisson crossover prediction from dip_ratio → 1.0 (no suppression)
tools/exp_psd_amplitude_scaling.py:150:        print(f"\nPoisson crossover (dip→1.0): ln(p*)={ln_p_cross_dip:.1f}  "
tools/exp_psd_amplitude_scaling.py:154:        print(f"\nDip ratio DECREASING with scale — no Poisson crossover from PSD dip")
tools/exp_psd_amplitude_scaling.py:156:    # Poisson crossover from spectral_slope → 0
tools/exp_psd_amplitude_scaling.py:159:        print(f"Poisson crossover (slope→0): ln(p*)={ln_p_cross_slope:.1f}  "
tools/exp_aubry_boundary_phase_transport_gate.py:81:    domain: str,
tools/exp_aubry_boundary_phase_transport_gate.py:93:        "domain": domain,
tools/exp_aubry_boundary_phase_transport_gate.py:127:def median_metric(summary: dict[str, Any], domain: str, v_key: str, metric: str) -> float | None:
tools/exp_aubry_boundary_phase_transport_gate.py:128:    value = summary.get(v_key, {}).get(domain, {}).get(metric, {})
tools/exp_aubry_boundary_phase_transport_gate.py:152:    domains = {
tools/exp_aubry_boundary_phase_transport_gate.py:164:                for domain, theta in domains.items():
tools/exp_aubry_boundary_phase_transport_gate.py:166:                    rows.append(spectrum_row(domain, seq, n, phase, float(v_value), args.central_fraction))
tools/exp_aubry_boundary_phase_transport_gate.py:190:        for domain in sorted({row["domain"] for row in rows}):
tools/exp_aubry_boundary_phase_transport_gate.py:191:            subset = [row for row in rows if row["domain"] == domain and abs(row["V"] - v_value) < 1e-12]
tools/exp_aubry_boundary_phase_transport_gate.py:192:            summary_by_v[v_key][domain] = aggregate(subset)
tools/dnd_stats.py:10:  classify(mean_r)          → "GUE" | "Poisson" | "CRITICAL" | "harmonic"
tools/dnd_stats.py:25:    "GUE":      {"mean_r": 0.5996, "var_s": 0.178},
tools/dnd_stats.py:27:    "Poisson":  {"mean_r": 0.3863, "var_s": 1.000},
tools/dnd_stats.py:164:    Transizione: V<1 → GUE, V≈1 → critico, V>1.5 → Poisson
tools/r_stat_primes.py:27:    "verdict": "GUE-like" if r_real > (r_poisson + r_gue) / 2 else "Poisson-like"
tools/exp_boundary_classical_crossover_audit.py:3:Classical crossover audit for the 8 GUE / 5 Poisson BOUNDARY perimeter.
tools/exp_boundary_classical_crossover_audit.py:10:  between the empirical CDF and w * GUE_surmise + (1-w) * Poisson.
tools/exp_boundary_classical_crossover_audit.py:116:        gaps = row_spacings(grow["domain"])
tools/exp_boundary_classical_crossover_audit.py:123:                "domain_window": grow["domain_window"],
tools/exp_boundary_classical_crossover_audit.py:124:                "domain": grow["domain"],
tools/exp_boundary_classical_crossover_audit.py:125:                "source_domain_type": grow["source_domain_type"],
tools/exp_boundary_classical_crossover_audit.py:143:    graph_only = [row["domain_window"] for row in third if row["audit_state"] == "graph_only_bridge"]
tools/exp_boundary_classical_crossover_audit.py:144:    classic_and_graph = [row["domain_window"] for row in third if row["audit_state"] == "classic_and_graph_bridge"]
tools/exp_boundary_classical_crossover_audit.py:145:    classic_only = [row["domain_window"] for row in rows if row["audit_state"] == "classic_only_intermediate"]
tools/exp_boundary_classical_crossover_audit.py:163:            "observable": "row-aligned Brody q, Berry-Robnik-like GUE mixture weight, graph bridge state",
tools/exp_boundary_classical_crossover_audit.py:165:            "generator": "row_spacings(domain) with graph states imported from boundary_graph_curvature_gate",
tools/exp_boundary_classical_crossover_audit.py:166:            "denominator": "13 rows: 8 GUE and 5 Poisson",
tools/exp_boundary_classical_crossover_audit.py:173:            "graph_third_included": [row["domain_window"] for row in third],
tools/exp_alpha_stability.py:5:or drifts during the Poisson crossover.
tools/exp_markov_scale_function.py:6:If so, does the decay track the GUE→Poisson boundary?
tools/exp_markov_scale_function.py:16:    5. Brody parameter β (GUE/Poisson indicator)
tools/exp_markov_scale_function.py:62:    β=0 → Poisson, β=1 → GUE (Wigner).
tools/dnd_arxiv.py:45:    'quasicrystal spectral statistics GUE',
tools/evolution_report.md:2:Il passo e' rientrato dal preflight Anderson al perimetro vivo `8 GUE / 5 Poisson` e ha trasformato il gate comparabile in lettura a due lettori. La traiettoria e' stata `perimetro vivo -> lettore graph perturbato -> ritorno classico row-aligned -> separazione dei residui`: il nome bridge viene concesso solo alla riga che attraversa entrambe le letture, mentre graph-only e classico-only restano stati distinti.
tools/exp_acf_amplitude_scaling.py:8:at what p* does the anti-correlation vanish (Poisson)?
tools/exp_acf_amplitude_scaling.py:127:        print(f"\nPoisson crossover (A=0): ln(p*) = {ln_p_star:.1f}, p* ~ 10^{log10_p_star:.1f}")
tools/exp_acf_amplitude_scaling.py:129:        print(f"\nSlope is non-negative ({slope:.6f}) — no Poisson crossover predicted")
tools/exp_rosenzweig_porter_bridge_physical_audit.py:6:diagonal-plus-GUE Hamiltonian flow. Each lambda value is one row. The classical
tools/exp_rosenzweig_porter_bridge_physical_audit.py:7:reader uses Brody q and a Wigner/Poisson mixture weight; the graph reader asks
tools/exp_rosenzweig_porter_bridge_physical_audit.py:145:        return "Poisson_pole"
tools/exp_rosenzweig_porter_bridge_physical_audit.py:147:        return "GUE_pole"
tools/exp_rosenzweig_porter_bridge_physical_audit.py:159:        "domain_window": f"RP_lambda_{lam:.3f}",
tools/exp_rosenzweig_porter_bridge_physical_audit.py:161:        "source_domain_type": source_type(lam, args.poisson_pole_max, args.gue_pole_min),
tools/exp_rosenzweig_porter_bridge_physical_audit.py:198:    labels = [row["source_domain_type"] for row in rows]
tools/exp_rosenzweig_porter_bridge_physical_audit.py:199:    poi_idx = [i for i, label in enumerate(labels) if label == "Poisson_pole"]
tools/exp_rosenzweig_porter_bridge_physical_audit.py:200:    gue_idx = [i for i, label in enumerate(labels) if label == "GUE_pole"]
tools/exp_rosenzweig_porter_bridge_physical_audit.py:202:        raise ValueError("lambda grid must include Poisson and GUE poles")
tools/exp_rosenzweig_porter_bridge_physical_audit.py:221:            if {labels[i], labels[other]} == {"Poisson_pole", "GUE_pole"}:
tools/exp_rosenzweig_porter_bridge_physical_audit.py:223:            elif labels[i] == "flow_candidate" and labels[other] in {"Poisson_pole", "GUE_pole"}:
tools/exp_rosenzweig_porter_bridge_physical_audit.py:227:        if row["source_domain_type"] == "flow_candidate" and cross_fraction > 0 and margin < 0.35:
tools/exp_rosenzweig_porter_bridge_physical_audit.py:233:                "domain_window": row["domain_window"],
tools/exp_rosenzweig_porter_bridge_physical_audit.py:235:                "source_domain_type": row["source_domain_type"],
tools/exp_rosenzweig_porter_bridge_physical_audit.py:242:    return {"k": k, "rows": graph_rows, "third_included_candidates": [r["domain_window"] for r in graph_rows if r["boundary_state"] == "third_included_candidate"]}
tools/exp_rosenzweig_porter_bridge_physical_audit.py:278:            graph_by_name = {row["domain_window"]: row for row in graph["rows"]}
tools/exp_rosenzweig_porter_bridge_physical_audit.py:280:                name = row["domain_window"]
tools/exp_rosenzweig_porter_bridge_physical_audit.py:284:                        "source_domain_type": row["source_domain_type"],
tools/exp_rosenzweig_porter_bridge_physical_audit.py:318:                "domain_window": name,
tools/exp_rosenzweig_porter_bridge_physical_audit.py:320:                "source_domain_type": item["source_domain_type"],
tools/exp_rosenzweig_porter_bridge_physical_audit.py:335:        row["domain_window"]
tools/exp_rosenzweig_porter_bridge_physical_audit.py:340:        row["domain_window"]
tools/exp_rosenzweig_porter_bridge_physical_audit.py:345:        row["domain_window"]
tools/exp_rosenzweig_porter_bridge_physical_audit.py:375:            "observable": "graph_bridge_frequency joined with Brody q, Wigner/Poisson mixture weight, SR and IPR",
tools/exp_rosenzweig_porter_bridge_physical_audit.py:376:            "operator": "Rosenzweig-Porter diagonal-plus-GUE Hamiltonian flow with kNN graph perturbation",
tools/exp_rosenzweig_porter_bridge_physical_audit.py:377:            "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE, finite N, repeated seeds",
tools/exp_rp_boundary_size_stability_audit.py:58:            graph_by_name = {row["domain_window"]: row for row in graph["rows"]}
tools/exp_rp_boundary_size_stability_audit.py:60:                name = row["domain_window"]
tools/exp_rp_boundary_size_stability_audit.py:64:                        "source_domain_type": row["source_domain_type"],
tools/exp_rp_boundary_size_stability_audit.py:98:                "domain_window": name,
tools/exp_rp_boundary_size_stability_audit.py:100:                "source_domain_type": item["source_domain_type"],
tools/exp_rp_boundary_size_stability_audit.py:115:        row["domain_window"]
tools/exp_rp_boundary_size_stability_audit.py:120:        row["domain_window"]
tools/exp_rp_boundary_size_stability_audit.py:125:        row["domain_window"]
tools/exp_rp_boundary_size_stability_audit.py:159:                row["domain_window"],
tools/exp_rp_boundary_size_stability_audit.py:178:                "domain_window": name,
tools/exp_rp_boundary_size_stability_audit.py:215:            "observable": "two_reader_all_sizes from graph_bridge_frequency joined with Brody q, Wigner/Poisson mixture weight, SR and IPR",
tools/exp_rp_boundary_size_stability_audit.py:216:            "operator": "repeat the RP diagonal-plus-GUE Hamiltonian flow over sizes, seeds and kNN graph perturbations",
tools/exp_rp_boundary_size_stability_audit.py:217:            "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE, finite N size sweep",
tools/r_ratio_decay.py:6:I primi passano da correlati (GUE-like) a indipendenti (Poisson) al crescere della scala.
tools/r_ratio_decay.py:8:Risultato: il decay segue una power law r - Poisson = A * N^(-alpha) con alpha ~ 0.06.
tools/r_ratio_decay.py:12:Il r-ratio non converge a 1/(pi-1) — decade verso Poisson.
tools/r_ratio_decay.py:99:    # Fit 3: r - Poisson = A * N^(-alpha)
tools/r_ratio_decay.py:109:            'formula': 'r - Poisson = A * N^(-alpha)',
tools/r_ratio_decay.py:161:            'result': 'FALSIFIED — r-ratio decays toward Poisson with N',
tools/LAB_AGENT_CONTEXT.md:57:- Metrica primi: g_n = p_n/2, curvatura GUE r=0.503 z=22.5 vs shuffle
tools/LAB_AGENT_CONTEXT.md:121:  osservabile dedicato/domain-native (`event_type`, `vc_interp`, conteggi
tools/LAB_AGENT_CONTEXT.md:165:  nomina un perimetro numerico o semantico piu' ampio (es. `8 GUE / 5 Poisson`)
tools/LAB_AGENT_CONTEXT.md:272:Ogni trovata ha un opposto. Se trovi che la curvatura è de Sitter, l'opposto è: "dove NON è de Sitter?" Se trovi che i primi sono GUE-like, l'opposto è: "dove smettono di esserlo?" Il contenuto è nella tensione tra i due — non in uno dei due poli.
tools/LAB_AGENT_CONTEXT.md:315:Esempio reale: testare se "la curvatura dei primi è GUE-like" calcolando la r-statistic e confrontando con 0.536. Il test trova r=0.503 e dichiara "GUE-like". Ma 0.503 è più vicino a Poisson (0.386) che a GUE (0.536). Il frame "GUE-like" era nel claim, non nei dati. Misura prima, interpreta dopo.
tools/LAB_AGENT_CONTEXT.md:338:  residui modulo `q`, gap dei primi, statistiche spettrali, Anderson/GUE/GOE,
tools/LAB_AGENT_CONTEXT.md:398:observables_used: [nomi osservabili canonici o domain-native] - usa [] solo se non hai misurato nulla
tools/md_to_site.py:174:        "C5": "Nearest-neighbor spacing distributions compared to GUE Wigner surmise",
tools/exp_brody_flow.py:5:Measures how the Brody beta (interpolating Poisson beta=0 to GUE beta=1)
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1256:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1267:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1278:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1289:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1300:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1311:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1322:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1333:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1344:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1355:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1366:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1377:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1388:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1399:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1410:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1421:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1432:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1443:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1454:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1465:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1476:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1487:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1498:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1509:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1520:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1531:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1542:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1553:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1564:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1575:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1586:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1597:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1608:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1619:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1630:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1641:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1652:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1663:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1674:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1685:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1696:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1707:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1718:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1729:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1740:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1751:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1762:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1773:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1784:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1795:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1806:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1817:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1828:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1839:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1850:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1861:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1872:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1883:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1894:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1905:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1916:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1927:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1938:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1949:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1960:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1971:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1982:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:1993:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2004:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2015:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2026:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2037:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2048:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2059:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2070:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2081:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2092:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2103:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2114:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2125:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2136:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2147:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2158:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2169:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2180:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2191:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2202:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2213:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2224:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2235:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2246:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2257:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2268:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2279:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2290:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2301:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2312:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2323:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2334:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2345:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2356:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2367:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2378:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2389:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2400:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2411:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2422:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2433:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2444:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2455:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2466:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2477:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2488:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2499:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2510:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2521:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2532:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2543:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2554:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2565:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2578:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2591:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2604:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2617:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2630:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2643:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2656:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2669:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2682:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2695:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2708:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2721:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2734:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2747:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2760:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2773:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2786:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2799:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2812:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2825:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2838:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2851:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2864:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2877:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2890:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2903:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2916:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2929:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2942:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2955:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2968:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2981:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:2994:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3007:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3020:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3033:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3046:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3059:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3072:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3085:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3098:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3111:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3124:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3137:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3150:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3163:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3176:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3189:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3202:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3215:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3228:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3241:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3254:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3267:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3280:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3293:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3306:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3319:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3332:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3345:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3358:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3371:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3384:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3397:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3410:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3423:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3436:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3449:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3462:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3475:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3488:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3501:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3514:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3527:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3540:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3553:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3566:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3579:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3592:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3605:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3618:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3631:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3644:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3657:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3670:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3683:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3696:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3709:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3722:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3735:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3748:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3761:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3774:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3787:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3800:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3813:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3826:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3839:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3852:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3865:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3878:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3891:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3904:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3917:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3930:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3943:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3956:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3969:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3982:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:3995:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4008:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4021:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4034:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4047:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4060:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4073:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4086:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4099:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4112:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4125:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4138:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4151:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4164:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4177:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4190:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4203:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4216:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4229:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4242:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4255:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4268:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4281:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4294:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4307:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4320:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4333:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4346:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4359:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4372:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4385:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4398:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4411:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4424:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4437:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4450:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4463:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4476:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4489:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4502:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4515:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4528:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4541:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4554:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4567:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4580:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4593:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4606:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4619:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4632:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4645:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4658:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4671:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4684:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4697:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4710:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4723:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4736:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4749:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4762:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4775:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4788:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4801:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4814:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4827:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4840:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4853:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4866:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4879:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4892:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4905:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4918:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4931:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4944:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4957:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4970:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4983:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:4996:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5009:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5022:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5035:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5048:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5061:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5074:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5087:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5100:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5113:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5126:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5139:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5152:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5165:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5178:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5191:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5204:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5217:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5230:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5243:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5256:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5269:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5282:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5295:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5308:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5321:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5334:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5347:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5360:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5373:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5386:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5399:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5412:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5425:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5438:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5451:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5464:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5477:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5490:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5503:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5516:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5529:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5542:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5555:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5568:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5581:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5594:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5607:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5620:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5633:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5646:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5659:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5672:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5685:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5698:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5711:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5724:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5737:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5750:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5763:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5776:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5789:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5802:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5815:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5828:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5841:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5854:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5867:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5880:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5893:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5906:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5919:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5932:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5945:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5958:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5971:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5984:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:5997:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6010:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6023:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6036:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6049:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6062:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6075:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6088:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6101:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6114:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6127:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6140:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6153:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6166:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6179:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6192:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6205:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6218:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6231:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6244:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6257:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6270:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6283:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6296:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6309:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6322:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6335:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6348:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6361:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6374:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6387:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6400:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6413:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6426:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6439:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6452:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6465:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6478:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6491:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6504:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6517:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6530:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6543:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6556:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6569:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6582:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6595:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6608:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6621:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6634:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6647:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6660:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6673:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6686:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6699:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6712:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6725:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6738:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6751:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6764:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6777:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6790:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6803:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6816:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6829:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6842:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6855:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6868:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6881:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6894:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6907:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6920:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6933:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6946:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6959:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6972:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6985:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:6998:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7011:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7024:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7037:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7050:      "domain": "phi",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7063:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7076:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7089:      "domain": "silver",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7102:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7115:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7128:      "domain": "bronze",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7141:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7154:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7167:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7180:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7193:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7206:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7219:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7232:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_curve_map_20260509_0330.json:7245:      "domain": "balanced_random_phi_density",
tools/exp_aubry_binary_grammar_surrogate_gate.py:77:    domain: str,
tools/exp_aubry_binary_grammar_surrogate_gate.py:88:        "domain": domain,
tools/exp_aubry_binary_grammar_surrogate_gate.py:194:def median_metric(summary: dict[str, Any], domain: str, v_key: str, metric: str) -> float | None:
tools/exp_aubry_binary_grammar_surrogate_gate.py:195:    value = summary.get(v_key, {}).get(domain, {}).get(metric, {})
tools/exp_aubry_binary_grammar_surrogate_gate.py:230:def classify_domain(
tools/exp_aubry_binary_grammar_surrogate_gate.py:232:    domain: str,
tools/exp_aubry_binary_grammar_surrogate_gate.py:237:        "domain_r": median_metric(summary_by_v, domain, v_key, "spacing_r"),
tools/exp_aubry_binary_grammar_surrogate_gate.py:240:        "domain_ipr": median_metric(summary_by_v, domain, v_key, "mean_ipr"),
tools/exp_aubry_binary_grammar_surrogate_gate.py:245:    r_between = bool(complete and between(needed["domain_r"], needed["periodic_r"], needed["random_r"]))
tools/exp_aubry_binary_grammar_surrogate_gate.py:246:    ipr_between = bool(complete and between(needed["domain_ipr"], needed["periodic_ipr"], needed["random_ipr"]))
tools/exp_aubry_binary_grammar_surrogate_gate.py:249:        and abs(needed["domain_r"] - needed["random_r"]) >= args.min_r_delta
tools/exp_aubry_binary_grammar_surrogate_gate.py:250:        and abs(needed["domain_ipr"] - needed["random_ipr"]) >= args.min_ipr_delta
tools/exp_aubry_binary_grammar_surrogate_gate.py:290:                for domain, surrogate, trial in make_surrogates(
tools/exp_aubry_binary_grammar_surrogate_gate.py:297:                    rows.append(spectrum_row(domain, surrogate, n, phase, float(v_value), args.central_fraction, trial=trial))
tools/exp_aubry_binary_grammar_surrogate_gate.py:301:                                "domain": domain,
tools/exp_aubry_binary_grammar_surrogate_gate.py:309:    domains = sorted({row["domain"] for row in rows})
tools/exp_aubry_binary_grammar_surrogate_gate.py:314:        for domain in domains:
tools/exp_aubry_binary_grammar_surrogate_gate.py:315:            subset = [row for row in rows if row["domain"] == domain and abs(row["V"] - v_value) < 1e-12]
tools/exp_aubry_binary_grammar_surrogate_gate.py:316:            summary_by_v[v_key][domain] = aggregate(subset)
tools/exp_aubry_binary_grammar_surrogate_gate.py:318:    domain_classes = [d for d in domains if d not in {"periodic_ab", "balanced_random_phi_density"}]
tools/exp_aubry_binary_grammar_surrogate_gate.py:319:    classification: dict[str, Any] = {"joint_boundary_v_by_domain": {}, "by_v": {}}
tools/exp_aubry_binary_grammar_surrogate_gate.py:320:    for domain in domain_classes:
tools/exp_aubry_binary_grammar_surrogate_gate.py:321:        classification["joint_boundary_v_by_domain"][domain] = []
tools/exp_aubry_binary_grammar_surrogate_gate.py:326:        for domain in domain_classes:
tools/exp_aubry_binary_grammar_surrogate_gate.py:327:            row = classify_domain(summary_by_v, domain, v_key, args)
tools/exp_aubry_binary_grammar_surrogate_gate.py:328:            classification["by_v"][v_key][domain] = row
tools/exp_aubry_binary_grammar_surrogate_gate.py:330:                classification["joint_boundary_v_by_domain"][domain].append(float(v_value))
tools/exp_aubry_binary_grammar_surrogate_gate.py:333:    for domain in sorted({row["domain"] for row in profiles}):
tools/exp_aubry_binary_grammar_surrogate_gate.py:334:        subset = [row for row in profiles if row["domain"] == domain]
tools/exp_aubry_binary_grammar_surrogate_gate.py:335:        profile_summary[domain] = {}
tools/exp_aubry_binary_grammar_surrogate_gate.py:338:            profile_summary[domain][key] = {
tools/exp_aubry_binary_grammar_surrogate_gate.py:388:                "classification": output["classification"]["joint_boundary_v_by_domain"],
tools/exp_rp_exact_local_window_matrix.py:98:                    row = next(item for item in entry["rows"] if item["domain_window"] == name)
tools/exp_rp_exact_local_window_matrix.py:123:                        "domain_window": name,
tools/exp_rp_exact_local_window_matrix.py:132:        crest_rows = [row for row in matrix_rows if row["domain_window"] == crest]
tools/exp_rp_exact_local_window_matrix.py:171:                "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE",
tools/exp_rp_exact_local_window_matrix.py:177:                "crest_domain_window": crest,
tools/exp_anderson3d_endpoint_preserving_null.py:53:                "domain_window": row["domain_window"],
tools/exp_anderson3d_endpoint_preserving_null.py:55:                "source_domain_type": row["source_domain_type"],
tools/exp_anderson3d_endpoint_preserving_null.py:71:        if row["source_domain_type"] == "mobility_candidate"
tools/exp_anderson3d_endpoint_preserving_null.py:92:    graph_hits = {row["domain_window"]: 0 for row in rows}
tools/exp_anderson3d_endpoint_preserving_null.py:99:                graph_hits[grow["domain_window"]] += 1
tools/exp_anderson3d_endpoint_preserving_null.py:104:        freq = graph_hits[row["domain_window"]] / len(k_values)
tools/exp_anderson3d_endpoint_preserving_null.py:108:            two_reader.append(row["domain_window"])
tools/exp_anderson3d_endpoint_preserving_null.py:111:                "domain_window": row["domain_window"],
tools/exp_anderson3d_endpoint_preserving_null.py:113:                "source_domain_type": row["source_domain_type"],
tools/data/seme_backup_b2_20260508_214525.json:2:  "old_direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_backup_b2_20260508_214525.json:3:  "new_direzione": "Riprogettare il gate `V_c` con null omogenei al boundary operator: phase-shuffle Sturmian, label-preserving surrogate e controllo gap_ratio prima di estendere a nuovi domini GUE/Poisson",
tools/exp_markov_memory_by_gue_type.py:3:Markov Memory Decomposition Across GUE Types
tools/exp_markov_memory_by_gue_type.py:5:Question: The TWO_KINDS_GUE result (2026-04-24) found that distribution-GUE
tools/exp_markov_memory_by_gue_type.py:6:domains (primes, GUE matrices) retain GUE classification after shuffle, while
tools/exp_markov_memory_by_gue_type.py:7:ordering-GUE domains (fibonacci, coupled_osc, percolation) collapse to Poisson.
tools/exp_markov_memory_by_gue_type.py:11:This experiment asks: what is the Markov memory profile of each GUE type?
tools/exp_markov_memory_by_gue_type.py:12:If ordering-GUE domains get their classification FROM sequential ordering,
tools/exp_markov_memory_by_gue_type.py:16:- For each domain, compute gap sequence
tools/exp_markov_memory_by_gue_type.py:22:Null baseline: 200 shuffles per domain (same distribution, destroyed order).
tools/exp_markov_memory_by_gue_type.py:114:    """Pure Poisson process gaps (exponential)."""
tools/exp_markov_memory_by_gue_type.py:119:    """GUE random matrix eigenvalue spacings."""
tools/exp_markov_memory_by_gue_type.py:133:    # Domain definitions with GUE type from TWO_KINDS_GUE result
tools/exp_markov_memory_by_gue_type.py:134:    domains = {}
tools/exp_markov_memory_by_gue_type.py:136:    # Distribution-GUE domains (survive shuffle)
tools/exp_markov_memory_by_gue_type.py:137:    print("Generating domains...")
tools/exp_markov_memory_by_gue_type.py:138:    domains['primes'] = {
tools/exp_markov_memory_by_gue_type.py:140:        'type': 'distribution-GUE',
tools/exp_markov_memory_by_gue_type.py:143:    domains['gue_matrix'] = {
tools/exp_markov_memory_by_gue_type.py:145:        'type': 'distribution-GUE',
tools/exp_markov_memory_by_gue_type.py:149:    # Ordering-GUE domains (collapse to Poisson on shuffle)
tools/exp_markov_memory_by_gue_type.py:156:        domains[dom_name] = {
tools/exp_markov_memory_by_gue_type.py:158:            'type': 'ordering-GUE',
tools/exp_markov_memory_by_gue_type.py:167:            domains['string_vibration'] = {
tools/exp_markov_memory_by_gue_type.py:168:                'gaps': gaps, 'type': 'ordering-GUE', 'delta_r_sign': '+'
tools/exp_markov_memory_by_gue_type.py:173:    # Poisson domains (control)
tools/exp_markov_memory_by_gue_type.py:174:    domains['poisson'] = {
tools/exp_markov_memory_by_gue_type.py:176:        'type': 'Poisson',
tools/exp_markov_memory_by_gue_type.py:185:                domains[dom_name] = {
tools/exp_markov_memory_by_gue_type.py:186:                    'gaps': gaps, 'type': 'Poisson', 'delta_r_sign': '0'
tools/exp_markov_memory_by_gue_type.py:191:    print(f"Domains ready: {list(domains.keys())}")
tools/exp_markov_memory_by_gue_type.py:198:    for name, info in domains.items():
tools/exp_markov_memory_by_gue_type.py:206:            'domain': name,
tools/exp_markov_memory_by_gue_type.py:243:        print(f"{r['domain']:<22} {r['gue_type']:<18} {r['N']:>6}  "
tools/exp_markov_memory_by_gue_type.py:251:    print("\nAggregate by GUE type:")
tools/exp_markov_memory_by_gue_type.py:252:    for gtype in ['distribution-GUE', 'ordering-GUE', 'Poisson']:
tools/exp_markov_memory_by_gue_type.py:267:        'question': 'Does Markov memory discriminate distribution-GUE from ordering-GUE?',
tools/exp_brody_crossover.py:6:crossover from GUE-like to Poisson-like? What is the functional form?
tools/exp_brody_crossover.py:11:  where beta=0 is Poisson, beta=1 is GOE (Wigner)
tools/exp_brody_crossover.py:165:    print(f"Poisson: beta=0, GOE: beta=1")
tools/exp_brody_crossover.py:175:    # Key test: extrapolate where beta_prime would reach 0 (Poisson)
tools/exp_brody_crossover.py:178:        print(f"\nExtrapolated Poisson (beta=0) at ln(p) = {ln_p_poisson:.1f} → p ~ 10^{ln_p_poisson/np.log(10):.0f}")
tools/exp_brody_crossover.py:180:        print(f"\nbeta INCREASES with scale — primes move AWAY from Poisson")
tools/exp_crossover_phase_test.py:5:observed in the GUE crossover is a property of the PARTIAL SHUFFLE METHOD (tautology)
tools/exp_crossover_phase_test.py:88:    """Generate GUE-like spacings from random matrices"""
tools/exp_crossover_phase_test.py:162:    """Pure Poisson (exponential gaps) — should show NO ordering signal"""
tools/exp_crossover_phase_test.py:216:    sequences['GUE'] = generate_gue_gaps(args.N, rng)
tools/exp_crossover_phase_test.py:217:    print(f"  GUE: {len(sequences['GUE'])} gaps")
tools/exp_crossover_phase_test.py:228:    sequences['Poisson'] = generate_poisson(args.N, rng)
tools/exp_crossover_phase_test.py:229:    print(f"  Poisson: {len(sequences['Poisson'])} gaps")
tools/exp_crossover_phase_test.py:262:    print("CLASSIFICATION: Does each sequence show the full GUE-like phase transition?")
tools/exp_crossover_phase_test.py:292:        print("           The GUE crossover finding is TAUTOLOGICAL (methodological artifact)")
tools/exp_crossover_phase_test.py:295:        print("           The GUE crossover finding is a REAL structural property")
tools/data/selective_layer_decoupling.json:421:  "GUE": {
tools/data/selective_layer_decoupling.json:840:  "Poisson": {
tools/gue_gap_test.py:33:# GUE r ~ 0.5996, Poisson r ~ 0.3863
tools/gue_gap_test.py:37:    interp = f"r={r_data:.4f} > 0.5 e z={z_score:.2f} vs shuffle: correlazione GUE-like nei gap dei primi"
tools/gue_gap_test.py:41:    interp = f"r={r_data:.4f} <= 0.5: gap più Poisson-like che GUE-like"
tools/exp_quasiperiodic_vc_lattice_gate.py:102:    domains = {
tools/exp_quasiperiodic_vc_lattice_gate.py:114:            for domain, theta in domains.items():
tools/exp_quasiperiodic_vc_lattice_gate.py:118:                    "domain": domain,
tools/exp_quasiperiodic_vc_lattice_gate.py:130:                    "domain": "balanced_random_phi_density",
tools/exp_quasiperiodic_vc_lattice_gate.py:139:    for domain in sorted({row["domain"] for row in rows}):
tools/exp_quasiperiodic_vc_lattice_gate.py:140:        subset = [row for row in rows if row["domain"] == domain]
tools/exp_quasiperiodic_vc_lattice_gate.py:141:        summary[domain] = summarize([row["vc"] for row in subset], args.v_step)
tools/exp_quasiperiodic_vc_lattice_gate.py:143:    summary_by_domain_phase = {}
tools/exp_quasiperiodic_vc_lattice_gate.py:146:        grouped[(row["domain"], row["phase"])].append(row)
tools/exp_quasiperiodic_vc_lattice_gate.py:147:    for (domain, phase), subset in sorted(grouped.items()):
tools/exp_quasiperiodic_vc_lattice_gate.py:148:        summary_by_domain_phase[f"{domain}|phase={phase}"] = summarize(
tools/exp_quasiperiodic_vc_lattice_gate.py:155:        if row["domain"] == "phi" and abs(row["phase"]) < 1e-12
tools/exp_quasiperiodic_vc_lattice_gate.py:174:        "summary_by_domain_phase": summary_by_domain_phase,
tools/exp_poisson_convergence.py:3:exp_poisson_convergence.py — Do beta, <r>_excess, and acf1 predict the same Poisson scale?
tools/exp_poisson_convergence.py:5:Three independent observables drift toward Poisson at large prime scale:
tools/exp_poisson_convergence.py:7:  - <r> excess over Cramer -> 0  (i.e. <r> -> <r>_Poisson ~ 0.386)
tools/exp_poisson_convergence.py:10:Question: do all three extrapolate to Poisson at the SAME critical scale p*?
tools/exp_poisson_convergence.py:193:    """Fit linear trends in ln(p) and extrapolate to Poisson."""
tools/exp_poisson_convergence.py:196:    # Poisson targets
tools/exp_poisson_convergence.py:263:    print("CONVERGENCE SUMMARY: Three roads to Poisson")
tools/exp_poisson_convergence.py:271:        print(f"    Target (Poisson): {f['target']:.4f}")
tools/exp_poisson_convergence.py:273:            print(f"    Extrapolated Poisson at: ln(p*) = {f['ln_p_star']:.1f}  =>  p* ~ 10^{f['ln_p_star']/np.log(10):.1f}")
tools/exp_poisson_convergence.py:275:            print(f"    No convergence toward Poisson (slope wrong sign or flat)")
tools/exp_poisson_convergence.py:295:            print(f"  => CONSISTENT: all observables predict Poisson at similar scale")
tools/exp_poisson_convergence.py:305:    parser = argparse.ArgumentParser(description='Poisson convergence: do beta, <r>, acf1 agree?')
tools/exp_poisson_convergence.py:320:        'question': 'Do beta, <r>, and acf1 predict the same Poisson scale?',
tools/LAB_COGNITIVE_CONTAMINATION.md:59:- concetti: terzo incluso, GUE/Poisson, non-phi generator, graph curvature,
tools/LAB_COGNITIVE_CONTAMINATION.md:60:  stable cross-domain core;
tools/LAB_COGNITIVE_CONTAMINATION.md:62:  precede la classificazione spettrale GUE/Poisson;
tools/LAB_COGNITIVE_CONTAMINATION.md:109:  - "VALIDA contro baseline GUE, Poisson e generatori sintetici."
tools/LAB_COGNITIVE_CONTAMINATION.md:111:  quando: "il ciclo lavora su boundary, GUE/Poisson o trasferibilita' phi"
tools/LAB_COGNITIVE_CONTAMINATION.md:255:  quando: "prima del prossimo ciclo su GUE/Poisson/non-phi"
tools/exp_gap_label_set_stability.py:151:    domains = {
tools/exp_gap_label_set_stability.py:165:                for name, theta in domains.items():
tools/exp_gap_label_set_stability.py:168:                    rows.append({"domain": name, "N": n, "phase": phase, "threshold": threshold, **obs})
tools/exp_gap_label_set_stability.py:175:                        "domain": "balanced_random_phi_labels",
tools/exp_gap_label_set_stability.py:183:    by_domain = {}
tools/exp_gap_label_set_stability.py:184:    for domain in sorted({row["domain"] for row in rows}):
tools/exp_gap_label_set_stability.py:185:        domain_rows = [row for row in rows if row["domain"] == domain]
tools/exp_gap_label_set_stability.py:186:        by_domain[domain] = {
tools/exp_gap_label_set_stability.py:187:            "global": summarize_sets(domain_rows),
tools/exp_gap_label_set_stability.py:188:            "phase_stability_by_N_threshold": grouped_stability(domain_rows, ("N", "threshold")),
tools/exp_gap_label_set_stability.py:189:            "threshold_stability_by_N_phase": grouped_stability(domain_rows, ("N", "phase")),
tools/exp_gap_label_set_stability.py:190:            "scale_stability_by_phase_threshold": grouped_stability(domain_rows, ("phase", "threshold")),
tools/exp_gap_label_set_stability.py:204:        "summary": by_domain,
tools/exp_gap_label_set_stability.py:228:        domain: {
tools/exp_gap_label_set_stability.py:235:        for domain, data in output["summary"].items()
tools/exp_boundary_graph_null_audit.py:5:This script keeps the 13 row-aligned 8 GUE / 5 Poisson denominator and asks
tools/exp_boundary_graph_null_audit.py:50:    gue_idx = [i for i, label in enumerate(labels) if label == "GUE"]
tools/exp_boundary_graph_null_audit.py:51:    poi_idx = [i for i, label in enumerate(labels) if label == "Poisson"]
tools/exp_boundary_graph_null_audit.py:142:    return {row["domain_window"]: row.get("classical_audit_state", "") for row in rows}
tools/exp_boundary_graph_null_audit.py:150:    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
tools/exp_boundary_graph_null_audit.py:152:    names = [row["domain_window"] for row in selected]
tools/exp_boundary_graph_null_audit.py:153:    base_labels = [row["source_domain_type"] for row in selected]
tools/exp_boundary_graph_null_audit.py:156:    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
tools/exp_boundary_graph_null_audit.py:171:                    gaps = gap_cache[source["domain_window"]]
tools/exp_boundary_graph_null_audit.py:177:                            "domain_window": source["domain_window"],
tools/exp_boundary_graph_null_audit.py:178:                            "domain": source["domain"],
tools/exp_boundary_graph_null_audit.py:180:                            "source_domain_type": source["source_domain_type"],
tools/exp_boundary_graph_null_audit.py:217:        name = source["domain_window"]
tools/exp_boundary_graph_null_audit.py:226:                "domain_window": name,
tools/exp_boundary_graph_null_audit.py:227:                "domain": source["domain"],
tools/exp_boundary_graph_null_audit.py:228:                "source_domain_type": source["source_domain_type"],
tools/exp_boundary_graph_null_audit.py:247:        row["domain_window"]
tools/exp_boundary_graph_null_audit.py:252:    graph_only = [row["domain_window"] for row in rows if row["stable_graph_only_residue"]]
tools/exp_boundary_graph_null_audit.py:253:    graph_specific = [row["domain_window"] for row in rows if row["graph_baseline_state"] == "graph_specific_residue"]
tools/exp_boundary_graph_null_audit.py:288:            "denominator": "13 rows: 8 GUE and 5 Poisson, repeated across graph-reader parameter grid and graph null trials",
tools/dnd_zero_operator.py:8:Il vecchio metodo: calcola spacing, classifica GUE/Poisson.
tools/dnd_publish_cycle.py:168:        "|NT⟩ → closure → det(M)=-1 → φ → Q(√5) → GUE → differentiated reality",
tools/spectral_gap_analysis.py:201:    # For GUE (expected for zeta zeros): P(s) ≈ (32/π²)s² exp(-4s²/π)
tools/spectral_gap_analysis.py:219:    """GUE Wigner surmise: P(s) = (32/π²)s² exp(-4s²/π)."""
tools/spectral_gap_analysis.py:259:                label='GUE Wigner')
tools/spectral_gap_analysis.py:269:    fig.suptitle('Nearest-Neighbor Spacing: Spectral Gaps vs Zeta Gaps vs GUE',
tools/dnd_scenario.py:161:        - POISSON_CONVERGENCE: β, <r>, acf1 → Poisson a p*~10^14
tools/dnd_scenario.py:747:        # 2. Pattern strutturali — universali, non domain-specific
tools/dnd_scenario.py:766:            (r'\bGUE\b', 'Poisson — nessuna repulsione, statistiche indipendenti'),
tools/dnd_scenario.py:767:            (r'\bPoisson\b', 'GUE — repulsione universale, non transizione'),
tools/dnd_scenario.py:1111:            # sharing one domain word isn't a contradiction, it's just same domain.
tools/dnd_scenario.py:1225:    def _domain_label(self, action_type):
tools/dnd_scenario.py:1227:        domain = self._DOMAIN_LABELS.get(ctx, {})
tools/dnd_scenario.py:1228:        return domain.get(action_type, '')
tools/dnd_scenario.py:1244:            label = self._domain_label('focus')
tools/dnd_scenario.py:1259:                label = self._domain_label('risk')
tools/dnd_scenario.py:1271:            label = self._domain_label('blind_spot')
tools/dnd_scenario.py:1283:            label = self._domain_label('leverage')
tools/exp_boundary_transition_taxonomy_13rows.py:31:    return {row["domain_window"]: row for row in data.get("rows", [])}
tools/exp_boundary_transition_taxonomy_13rows.py:137:            "source_domain_type_audit_only": pres.get("source_domain_type"),
tools/exp_boundary_transition_taxonomy_13rows.py:180:            "not_tested": "new beta grid, new null surrogates, V_c fit, source GUE/Poisson label validity",
tools/exp_boundary_transition_taxonomy_13rows.py:182:        "label_policy": "source_domain_type is audit metadata only and is not used in transition_class.",
tools/exp_quasiperiodic_vc_curve_map.py:132:    domains = {
tools/exp_quasiperiodic_vc_curve_map.py:145:            for domain, theta in domains.items():
tools/exp_quasiperiodic_vc_curve_map.py:146:                seqs.append((domain, None, sturmian_sequence(theta, n, phase)))
tools/exp_quasiperiodic_vc_curve_map.py:152:            for domain, trial, seq in seqs:
tools/exp_quasiperiodic_vc_curve_map.py:155:                    "domain": domain,
tools/exp_quasiperiodic_vc_curve_map.py:168:                        "domain": domain,
tools/exp_quasiperiodic_vc_curve_map.py:177:    for domain in sorted({row["domain"] for row in rows}):
tools/exp_quasiperiodic_vc_curve_map.py:178:        subset = [row for row in rows if row["domain"] == domain]
tools/exp_quasiperiodic_vc_curve_map.py:179:        summary[domain] = {
tools/exp_quasiperiodic_vc_curve_map.py:192:        grouped_threshold[(row["domain"], row["r_threshold"])].append(row)
tools/exp_quasiperiodic_vc_curve_map.py:193:    for (domain, threshold), subset in sorted(grouped_threshold.items()):
tools/exp_quasiperiodic_vc_curve_map.py:194:        summary_by_threshold[f"{domain}|r_threshold={threshold}"] = {
tools/exp_quasiperiodic_vc_curve_map.py:214:                by_domain = {row["domain"]: row for row in key_rows}
tools/exp_quasiperiodic_vc_curve_map.py:215:                if {"phi", "silver", "bronze"} <= set(by_domain):
tools/exp_quasiperiodic_vc_curve_map.py:216:                    values = {name: by_domain[name]["vc_interp"] for name in ("phi", "silver", "bronze")}
tools/exp_dR_brody_connection.py:58:    beta=0 -> Poisson, beta=1 -> Wigner (GOE).
tools/exp_boundary_mixture_gate.py:5:Reusable META/BOUNDARY audit for the GUE-Poisson boundary.
tools/exp_boundary_mixture_gate.py:8:    Does the GUE/Poisson boundary remain a clean two-class split after the
tools/exp_boundary_mixture_gate.py:13:It builds synthetic mixtures by replacing a fraction beta of unfolded GUE
tools/exp_boundary_mixture_gate.py:14:spacings with Poisson spacings, then measures:
tools/exp_boundary_mixture_gate.py:19:- ambiguity of each beta layer relative to pure GUE and pure Poisson centroids.
tools/exp_boundary_mixture_gate.py:41:    """Generate unfolded GUE spacings by concatenating independent matrices."""
tools/exp_boundary_mixture_gate.py:59:    """Return a beta Poisson / (1-beta) GUE spacing sequence with mean spacing 1."""
tools/exp_boundary_mixture_gate.py:224:        "question": "Is the GUE-Poisson mixed layer cleanly classifiable after denominator gating?",
tools/exp_aubry_cosine_boundary_counter_gate.py:88:    domain: str,
tools/exp_aubry_cosine_boundary_counter_gate.py:98:        "domain": domain,
tools/exp_aubry_cosine_boundary_counter_gate.py:131:def median_metric(summary: dict[str, Any], domain: str, v_key: str, metric: str) -> float | None:
tools/exp_aubry_cosine_boundary_counter_gate.py:132:    value = summary.get(v_key, {}).get(domain, {}).get(metric, {})
tools/exp_aubry_cosine_boundary_counter_gate.py:156:    irrational_domains = {
tools/exp_aubry_cosine_boundary_counter_gate.py:166:                for domain, beta in irrational_domains.items():
tools/exp_aubry_cosine_boundary_counter_gate.py:169:                            domain,
tools/exp_aubry_cosine_boundary_counter_gate.py:200:    domains = sorted({row["domain"] for row in rows})
tools/exp_aubry_cosine_boundary_counter_gate.py:205:        for domain in domains:
tools/exp_aubry_cosine_boundary_counter_gate.py:206:            subset = [row for row in rows if row["domain"] == domain and abs(row["V"] - v_value) < 1e-12]
tools/exp_aubry_cosine_boundary_counter_gate.py:207:            summary_by_v[v_key][domain] = aggregate(subset)
tools/dnd_trace_bridge.py:136:        "label_GUE": "<r>=0.5996, Var=0.178",
tools/dnd_trace_bridge.py:147:    closer = "GUE" if d_gue < d_poi else "Poisson"
tools/dnd_trace_bridge.py:347:    print("\nDomanda: la mappa D-ND trasforma la struttura GUE degli zeri?")
tools/dnd_trace_bridge.py:348:    print("Se K(zeta) ≈ GUE e K(random) ≈ Poisson → la mappa PRESERVA la struttura")
tools/dnd_trace_bridge.py:350:    print("Se K(zeta) ≠ GUE e ≠ K(random) → la mappa TRASFORMA la struttura")
tools/dnd_trace_bridge.py:357:        print(f"  {key:40s} <r>={val['mean_r']:.4f} {'GUE' if d_gue < d_poi else 'Poi'} {marker}")
tools/exp_selective_layer_decoupling.py:265:        'GUE': gen_gue_spacings(args.N, rng),
tools/exp_selective_layer_decoupling.py:266:        'Poisson': gen_poisson_spacings(args.N, rng),
tools/exp_cross_domain_dipolar_direction.py:3:exp_cross_domain_dipolar_direction.py — Is the dipolar direction a universality-class
tools/exp_cross_domain_dipolar_direction.py:4:property or domain-specific?
tools/exp_cross_domain_dipolar_direction.py:6:Primes have theta=-111 deg in the (SR, L1) plane. GUE has theta=-97 deg.
tools/exp_cross_domain_dipolar_direction.py:7:Do all GUE-like domains share -97, or does each have its own direction?
tools/exp_cross_domain_dipolar_direction.py:8:Do all Poisson-like domains lack direction?
tools/exp_cross_domain_dipolar_direction.py:10:Tests 8 domains:
tools/exp_cross_domain_dipolar_direction.py:11:  GUE-like: GUE spacings, GOE spacings, CUE spacings, Riemann zeta zeros (via GUE proxy)
tools/exp_cross_domain_dipolar_direction.py:12:  Poisson-like: exponential iid, uniform iid, geometric iid
tools/exp_cross_domain_dipolar_direction.py:16:Map all domains in the angle-magnitude plane.
tools/exp_cross_domain_dipolar_direction.py:19:    python tools/exp_cross_domain_dipolar_direction.py [--N 50000] [--n_trials 20]
tools/exp_cross_domain_dipolar_direction.py:81:def gen_rmt_spacings(N_mat, ensemble='GUE', rng=None):
tools/exp_cross_domain_dipolar_direction.py:85:    if ensemble == 'GUE':
tools/exp_cross_domain_dipolar_direction.py:133:    """Poisson process: exponential iid spacings."""
tools/exp_cross_domain_dipolar_direction.py:157:    print("Is the dipolar angle a universality-class property or domain-specific?")
tools/exp_cross_domain_dipolar_direction.py:171:    domains = {}
tools/exp_cross_domain_dipolar_direction.py:172:    domains['primes'] = {'class': 'unique', 'single': prime_dv}
tools/exp_cross_domain_dipolar_direction.py:177:    for ens_name in ['GUE', 'GOE', 'CUE']:
tools/exp_cross_domain_dipolar_direction.py:200:        domains[ens_name] = {
tools/exp_cross_domain_dipolar_direction.py:221:    domains['logistic_r4'] = {
tools/exp_cross_domain_dipolar_direction.py:229:    # === 6-8. Poisson-like domains ===
tools/exp_cross_domain_dipolar_direction.py:233:        print(f"\n--- {name.upper()} (iid, Poisson-class) ---")
tools/exp_cross_domain_dipolar_direction.py:245:        domains[name] = {
tools/exp_cross_domain_dipolar_direction.py:246:            'class': 'Poisson',
tools/exp_cross_domain_dipolar_direction.py:260:    for name, d in domains.items():
tools/exp_cross_domain_dipolar_direction.py:275:    rmt_names = ['GUE', 'GOE', 'CUE']
tools/exp_cross_domain_dipolar_direction.py:282:            da = domains[a]['theta_mean']
tools/exp_cross_domain_dipolar_direction.py:283:            db = domains[b]['theta_mean']
tools/exp_cross_domain_dipolar_direction.py:288:            ua = domains[a]['theta_std']
tools/exp_cross_domain_dipolar_direction.py:289:            ub = domains[b]['theta_std']
tools/exp_cross_domain_dipolar_direction.py:296:        sep = prime_theta - domains[name]['theta_mean']
tools/exp_cross_domain_dipolar_direction.py:299:        z = abs(sep) / max(domains[name]['theta_std'], 0.1)
tools/exp_cross_domain_dipolar_direction.py:306:        print(f"    {name}:  {domains[name]['mag_mean']:.4f}")
tools/exp_cross_domain_dipolar_direction.py:309:        print(f"    {name}:  {domains[name]['mag_mean']:.6f}")
tools/exp_cross_domain_dipolar_direction.py:311:    # Poisson direction scatter
tools/exp_cross_domain_dipolar_direction.py:312:    print("\n  Poisson direction scatter (std of theta):")
tools/exp_cross_domain_dipolar_direction.py:314:        print(f"    {name}: std = {domains[name]['theta_std']:.1f} deg")
tools/exp_cross_domain_dipolar_direction.py:318:        'domains': domains,
tools/exp_cross_domain_dipolar_direction.py:325:    out_path = Path(__file__).parent / "data" / "cross_domain_dipolar_direction.json"
tools/exp_cross_domain_dipolar_direction.py:335:                        help='Target number of spacings per domain')
tools/exp_cross_domain_dipolar_direction.py:337:                        help='Number of independent trials per domain')
tools/rules/axioms_to_theorems.json:7:    "chain": "|NT⟩ → closure → det=-1 → φ → GUE → differentiated reality"
tools/exp_sturmian_denominator_alignment_gate.py:120:        "domain": f"{family}_sturmian_binary",
tools/exp_observable_rank_audit.py:160:        "question": "When do canonical observable retention curves break collinearity across domains?",
tools/dnd_autoricerca.py:221:        # GUE spacing distribution (approssimazione Wigner)
tools/dnd_autoricerca.py:228:            'nota': 'Approssimazione GUE (mpmath non disponibile)',
tools/dnd_autoricerca.py:270:    """Autovalori di matrici casuali GUE — la connessione con Riemann."""
tools/dnd_autoricerca.py:272:    # GUE: matrice Hermitiana casuale
tools/dnd_autoricerca.py:284:        'ensemble': 'GUE',
tools/dnd_autoricerca.py:286:        'nota': 'Spaziatura autovalori matrice GUE 200x200'
tools/dnd_autoricerca.py:478:        # - is_spacings=True: esponenziale (Poisson = livelli non correlati)
tools/dnd_autoricerca.py:482:            # Null per spacings: esponenziale normalizzata (Poisson)
tools/dnd_autoricerca.py:523:                    null_spacings.append('GUE-like' if abs(mean_r - 0.5996) < abs(mean_r - 0.3863) else 'Poisson-like')
tools/dnd_autoricerca.py:654:                    'tipo': 'GUE-like' if abs(mean_r - 0.5996) < abs(mean_r - 0.3863) else 'Poisson-like',
tools/dnd_autoricerca.py:827:    # Pattern 2: spacing GUE-like
tools/dnd_autoricerca.py:829:    if spacing.get('tipo') == 'GUE-like' and spacing.get('gue_dist', 1) < 0.1:
tools/dnd_autoricerca.py:834:            'nota': f'Spacing GUE-like (⟨r⟩={spacing["mean_r"]:.4f})'
tools/dnd_autoricerca.py:1152:    gue_domains = [e['dominio'] for e in journal if e.get('spacing') == 'GUE-like']
tools/dnd_autoricerca.py:1153:    poisson_domains = [e['dominio'] for e in journal if e.get('spacing') == 'Poisson-like']
tools/dnd_autoricerca.py:1154:    print(f"    GUE-like: {gue_domains}")
tools/dnd_autoricerca.py:1155:    print(f"    Poisson-like: {poisson_domains}")
tools/dnd_autoricerca.py:1157:    # Il RAPPORTO #GUE/#Poisson è vicino a φ?
tools/dnd_autoricerca.py:1158:    if len(gue_domains) > 0 and len(poisson_domains) > 0:
tools/dnd_autoricerca.py:1159:        ratio_cluster = len(gue_domains) / len(poisson_domains)
tools/dnd_autoricerca.py:1160:        print(f"    #GUE/#Poisson = {ratio_cluster:.4f} "
tools/dnd_autoricerca.py:1294:def combinazioni_cross_domain(stato):
tools/dnd_autoricerca.py:1329:    # 2. Differenza spacing tra coppie GUE-Poisson
tools/dnd_autoricerca.py:1330:    print(f"\n  2. Coppie GUE-Poisson:")
tools/dnd_autoricerca.py:1331:    gue = [e for e in reali if e.get('spacing') == 'GUE-like' and e.get('spacing_r')]
tools/dnd_autoricerca.py:1332:    poi = [e for e in reali if e.get('spacing') == 'Poisson-like' and e.get('spacing_r')]
tools/dnd_autoricerca.py:1343:    # 3. I r_diretto dei domini GUE vs Poisson come due insiemi
tools/dnd_autoricerca.py:1351:        print(f"    GUE mean r_diretto: {mean_gue:.4f}")
tools/dnd_autoricerca.py:1352:        print(f"    Poisson mean r_diretto: {mean_poi:.4f}")
tools/dnd_autoricerca.py:1353:        print(f"    Ratio GUE/Poisson: {ratio:.4f}")
tools/dnd_autoricerca.py:1539:        # BOUNDARY: confine GUE/Poisson — prosegui esplorando il confine
tools/dnd_autoricerca.py:1696:    Cross-domain propaga i risultati tra domini in tempo reale.
tools/dnd_autoricerca.py:1717:        'anomalie': [],       # segnali inaspettati → cross-domain
tools/dnd_autoricerca.py:1718:        'gue_domains': [],    # domini con spacing GUE
tools/dnd_autoricerca.py:1719:        'poisson_domains': [],# domini con spacing Poisson
tools/dnd_autoricerca.py:1725:        if entry.get('spacing') and 'GUE' in str(entry['spacing']):
tools/dnd_autoricerca.py:1726:            campo['gue_domains'].append(entry.get('dominio', '?'))
tools/dnd_autoricerca.py:1727:        elif entry.get('spacing') and 'Poisson' in str(entry['spacing']):
tools/dnd_autoricerca.py:1728:            campo['poisson_domains'].append(entry.get('dominio', '?'))
tools/dnd_autoricerca.py:1877:    # === A11 COMBO: anomalie → cross-domain immediato ===
tools/dnd_autoricerca.py:1879:        print(f"\n--- Combo A11: {len(campo['anomalie'])} anomalie → propagazione cross-domain ---")
tools/dnd_autoricerca.py:1881:        # I domini GUE con anomalie vengono testati sui domini Poisson e viceversa
tools/dnd_autoricerca.py:1887:    n_gue = len(campo['gue_domains'])
tools/dnd_autoricerca.py:1888:    n_poi = len(campo['poisson_domains'])
tools/dnd_autoricerca.py:1890:        print(f"\n  Campo vivo dopo Fase 0: {n_gue} GUE / {n_poi} Poisson")
tools/dnd_autoricerca.py:1891:        report_lines.append(f"\n  Campo dopo Fase 0: {n_gue} GUE / {n_poi} Poisson")
tools/dnd_autoricerca.py:1989:    # Fase 4: Cross-domain
tools/dnd_autoricerca.py:1990:    print(f"\n--- Fase 4: Cross-domain ---")
tools/dnd_autoricerca.py:1992:    report_lines.append("## Fase 4: Cross-domain")
tools/dnd_autoricerca.py:1993:    combinazioni_cross_domain(stato)
tools/dnd_autoricerca.py:2012:    n_gue = len(campo['gue_domains'])
tools/dnd_autoricerca.py:2013:    n_poi = len(campo['poisson_domains'])
tools/dnd_autoricerca.py:2017:    report_lines.append(f"  GUE: {n_gue} | Poisson: {n_poi} | Vincoli: {n_vinc} | Anomalie: {n_anom}")
tools/dnd_autoricerca.py:2019:    report_lines.append(f"  Domini GUE: {', '.join(campo['gue_domains'][:10])}")
tools/dnd_autoricerca.py:2020:    report_lines.append(f"  Domini Poisson: {', '.join(campo['poisson_domains'][:10])}")
tools/dnd_autoricerca.py:2024:    print(f"\n  Campo vivo finale: {n_gue} GUE / {n_poi} Poisson / {n_vinc} vincoli / {n_anom} anomalie / ⟨r⟩={avg_r:.4f}")
tools/dnd_autoricerca.py:2069:                'domini_gue': campo['gue_domains'][:10],
tools/dnd_autoricerca.py:2070:                'domini_poisson': campo['poisson_domains'][:10],
tools/dnd_autoricerca.py:2120:    # 3. Segnali anomali (spacing GUE, rapporto aureo diretto, etc.)
tools/dnd_autoricerca.py:2436:            combinazioni_cross_domain(stato)
tools/dnd_autoricerca.py:2444:            combinazioni_cross_domain(stato)
tools/exp_quasiperiodic_grammar_scale_gate.py:176:    domains = {
tools/exp_quasiperiodic_grammar_scale_gate.py:189:                for name, theta in domains.items():
tools/exp_cross_observable_consistency.py:17:5. GUE control: synthetic GUE eigenvalues (should show β_r ≈ β_Σ ≈ 1)
tools/exp_cross_observable_consistency.py:21:  contributes more at large scales, pulling Σ² toward Poisson faster
tools/exp_cross_observable_consistency.py:107:# ── GUE control (small ensemble) ────────────────────────────────────
tools/exp_cross_observable_consistency.py:109:    """Generate GUE eigenvalue gaps."""
tools/exp_cross_observable_consistency.py:115:        # Unfold: for GUE bulk, spacing ~ semicircle
tools/exp_cross_observable_consistency.py:169:# ── Measure GUE (positive control) ──────────────────────────────────
tools/exp_cross_observable_consistency.py:170:print("\n=== GUE (positive control) ===")
tools/exp_cross_observable_consistency.py:176:# For GUE, unfold eigenvalues directly
tools/exp_cross_observable_consistency.py:215:# GUE
tools/exp_cross_observable_consistency.py:217:print(f"{'GUE':<12} {beta_r_gue:>6.3f} | " + " | ".join(f"{v:>9}" for v in vals_gue))
tools/exp_cross_observable_consistency.py:227:print(f"  GUE:     {disagree_gue:.3f}")
tools/exp_cross_observable_consistency.py:232:print(f"  (positive = more GUE-like at short range, more Poisson-like at long range)")
tools/lab_tool_contract.py:141:            "replication_hint": "new domain labs should expose input/output/counter-perimeter before graph integration",
tools/test_gue_poisson_boundary.py:15:R_GUE_TH = 0.5996
tools/test_gue_poisson_boundary.py:36:    "r_GUE": round(mu_g, 4), "r_GUE_th": R_GUE_TH,
tools/test_gue_poisson_boundary.py:37:    "r_Poisson": round(mu_p, 4), "r_Poisson_th": R_POI_TH,
tools/test_gue_poisson_boundary.py:41:    "separation_GUE": round(clean_g, 4),
tools/test_gue_poisson_boundary.py:43:    "claim": "boundary ~0.49 is third-included: neither GUE(0.60) nor Poisson(0.39)"
tools/exp_boundary_denominator_prescan.py:6:V_c. The unit under test is not the GUE/Poisson label. The unit is the
tools/exp_boundary_denominator_prescan.py:7:domain/window row before a structural claim is allowed to use its observable.
tools/exp_boundary_denominator_prescan.py:10:- tools/data/autoricerca_journal.json: base 13-domain GUE/Poisson perimeter.
tools/exp_boundary_denominator_prescan.py:14:- one row per base domain/window with source type, denominator_state,
tools/exp_boundary_denominator_prescan.py:59:    if spacing == "GUE-like":
tools/exp_boundary_denominator_prescan.py:60:        return "GUE"
tools/exp_boundary_denominator_prescan.py:61:    if spacing == "Poisson-like":
tools/exp_boundary_denominator_prescan.py:62:        return "Poisson"
tools/exp_boundary_denominator_prescan.py:79:        "GUE-like",
tools/exp_boundary_denominator_prescan.py:80:        "Poisson-like",
tools/exp_boundary_denominator_prescan.py:106:    null_domains = shuffle_audit.get("domains", {})
tools/exp_boundary_denominator_prescan.py:110:        domain = row.get("dominio", "")
tools/exp_boundary_denominator_prescan.py:111:        null_key = DEFAULT_DOMAIN_KEY.get(domain, domain)
tools/exp_boundary_denominator_prescan.py:112:        null_row = null_domains.get(null_key)
tools/exp_boundary_denominator_prescan.py:116:                "domain_window": f"{domain}:cycle_{int(row['ciclo'])}",
tools/exp_boundary_denominator_prescan.py:117:                "domain": domain,
tools/exp_boundary_denominator_prescan.py:119:                "source_domain_type": source_type(row.get("spacing")),
tools/exp_boundary_denominator_prescan.py:132:                    "domain_key": null_key if null_row else None,
tools/exp_boundary_denominator_prescan.py:147:        "domains": dict(shuffle_audit.get("domains", {})),
tools/exp_boundary_denominator_prescan.py:155:        domains = data.get("domains", {}) if isinstance(data, dict) else {}
tools/exp_boundary_denominator_prescan.py:156:        for domain, row in domains.items():
tools/exp_boundary_denominator_prescan.py:159:            merged["domains"][domain] = row
tools/exp_boundary_denominator_prescan.py:173:        by_type[row["source_domain_type"]] = by_type.get(row["source_domain_type"], 0) + 1
tools/exp_boundary_denominator_prescan.py:178:        "by_source_domain_type": by_type,
tools/exp_boundary_denominator_prescan.py:180:            row["domain_window"] for row in rows if row["transfer"] == "transfers"
tools/exp_boundary_denominator_prescan.py:182:        "blank_scope": [row["domain_window"] for row in rows if row["transfer"] == "blank"],
tools/exp_boundary_denominator_prescan.py:183:        "falls_scope": [row["domain_window"] for row in rows if row["transfer"] == "falls"],
tools/exp_boundary_denominator_prescan.py:195:        "question": "Does denominator_state transfer beyond V_c on the 8 GUE / 5 Poisson boundary perimeter?",
tools/exp_boundary_denominator_prescan.py:196:        "perimeter": "base autoricerca cycles 1..13: 8 GUE-like, 5 Poisson-like",
tools/exp_boundary_denominator_prescan.py:200:            "operator": "row-aligned domain/window prescan",
tools/exp_boundary_denominator_prescan.py:220:            f"{row['domain_window']}\t{row['source_domain_type']}\t"
tools/dnd_lab.py:10:  1. Wigner surmise (GOE/GUE) — distribuzione esatta level spacing
tools/dnd_lab.py:14:  5. Berry-Tabor — integrabile→Poisson vs caotico→GUE
tools/dnd_lab.py:49:    DIMOSTRATO: Level spacing distribution per GOE e GUE.
tools/dnd_lab.py:51:    GUE: P(s) = (32/π²) s² exp(-4s²/π)
tools/dnd_lab.py:58:    print("BANCO 1: Wigner Surmise (GOE e GUE esatti)")
tools/dnd_lab.py:63:    for ensemble, name in [('GOE', 'GOE'), ('GUE', 'GUE')]:
tools/dnd_lab.py:78:            # GUE: P(s) = (32/π²) s² exp(-4s²/π)
tools/dnd_lab.py:661:    spettrale. Il punto critico e' dove <r> ≈ 0.50 (ne' GUE ne' Poisson).
tools/dnd_lab.py:690:        print(f"  Transizione: V<{critical_V} → GUE/metallico, V>{critical_V} → Poisson/localizzato")
tools/dnd_lab.py:1426:        'GUE': 'random_matrix_gue',
tools/dnd_lab.py:1476:        elif 'WIGNER' in tid or 'GUE' in tid:
tools/dnd_lab.py:1652:    # Trova dove <r> attraversa r_target (dall'alto: GUE→critico→Poisson)
tools/dnd_lab.py:1716:    2. Trova V_c dove <r> = 0.50 (transizione GUE ↔ Poisson)
tools/exp_boundary_blank_thin_support_audit.py:175:        "label_policy": "Does not use source_domain_type or GUE/Poisson label as an operator.",
tools/exp_boundary_coherence.py:5:Question: Do different observables agree on WHERE primes sit between GUE and Poisson?
tools/exp_boundary_coherence.py:10:  1. Mean spacing ratio <r>        (Poisson ≈ 0.386, GUE ≈ 0.5307)
tools/exp_boundary_coherence.py:11:  2. Gap variance ratio Var/μ²     (Poisson = 1.0, GUE ≈ 0.178)
tools/exp_boundary_coherence.py:12:  3. Small-gap fraction P(s<0.3)   (Poisson ≈ 0.259, GUE ≈ 0.020)
tools/exp_boundary_coherence.py:13:  4. Brody parameter β             (Poisson = 0, GUE = 1)
tools/exp_boundary_coherence.py:14:  5. Lag-1 autocorrelation         (Poisson = 0, GUE ≈ -0.27)
tools/exp_boundary_coherence.py:16:Each observable is normalized to τ ∈ [0,1] where 0=Poisson, 1=GUE.
tools/exp_boundary_coherence.py:30:# GUE values from random matrix theory (GOE for real symmetric, GUE for complex)
tools/exp_boundary_coherence.py:60:    """Var(gaps) / mean(gaps)² — 1 for Poisson, <1 for correlated."""
tools/exp_boundary_coherence.py:113:    """Normalize observable to τ ∈ [0,1] where 0=Poisson, 1=GUE."""
tools/exp_boundary_coherence.py:122:    """Generate GUE spacings from random Hermitian matrices."""
tools/exp_boundary_coherence.py:126:        # GUE: complex Hermitian with Gaussian entries
tools/exp_boundary_coherence.py:137:    """Generate Poisson spacings (exponential distribution)."""
tools/exp_boundary_coherence.py:161:    print("Computing GUE reference...")
tools/exp_boundary_coherence.py:164:    results["GUE_reference"] = {
tools/exp_boundary_coherence.py:169:    print("Computing Poisson reference...")
tools/exp_boundary_coherence.py:172:    results["Poisson_reference"] = {
tools/exp_boundary_coherence.py:207:    print(f"\nReference anchors (τ should be ≈ 0 for Poisson, ≈ 1 for GUE):")
tools/exp_boundary_coherence.py:208:    print(f"  {'Observable':<20} {'Poisson τ':>10} {'GUE τ':>10}")
tools/exp_boundary_coherence.py:210:        pt = results["Poisson_reference"]["tau"][obs_name]
tools/exp_boundary_coherence.py:211:        gt = results["GUE_reference"]["tau"][obs_name]
tools/exp_boundary_coherence.py:214:    print(f"\nPrime gaps — τ values (0=Poisson, 1=GUE):")
tools/dnd_projective_quantization.py:209:    # con statistiche CRITICHE (né Poisson né GUE — esattamente al confine)
tools/dnd_projective_quantization.py:257:    closer = "GUE" if d_gue < d_poi else "Poisson"
tools/dnd_projective_quantization.py:259:    # Critical statistics (Fibonacci): <r> ≈ 0.50 (tra GUE e Poisson)
tools/dnd_projective_quantization.py:309:    # D. Confronto: Fibonacci vs GUE vs Poisson
tools/dnd_projective_quantization.py:314:    # D1. Random matrix GUE
tools/dnd_projective_quantization.py:315:    print("\n--- GUE reference ---")
tools/dnd_projective_quantization.py:321:        spacing_stats(eigs_gue, f"GUE N={N}")
tools/dnd_projective_quantization.py:323:    # D2. Potenziale random (Anderson → Poisson)
tools/dnd_projective_quantization.py:324:    print("\n--- Anderson (Poisson reference) ---")
tools/dnd_projective_quantization.py:338:    print("V=0 → metallico (GUE), V→∞ → localizzato (Poisson)")
tools/dnd_projective_quantization.py:366:dato da φ) produce uno spettro CRITICO — al confine esatto tra GUE e
tools/dnd_projective_quantization.py:367:Poisson. Questo è il "dove la curva diventa angolo":
tools/dnd_projective_quantization.py:378:disordine, tra GUE e Poisson.
tools/exp_boundary_row_aligned_nonexact_audit.py:6:does not read GUE/Poisson labels as decision fields. It only uses support,
tools/exp_boundary_row_aligned_nonexact_audit.py:27:def row_key(domain: str, cycle: int) -> str:
tools/exp_boundary_row_aligned_nonexact_audit.py:28:    return f"{domain}:cycle_{cycle}"
tools/exp_boundary_row_aligned_nonexact_audit.py:34:        key = row_key(row["domain"], row["cycle"])
tools/exp_boundary_row_aligned_nonexact_audit.py:46:            "domain_window": row.get("domain_window"),
tools/exp_boundary_row_aligned_nonexact_audit.py:175:        "label_policy": "Does not use source_domain_type or GUE/Poisson label as an operator.",
tools/dnd_piano11.py:3:Piano 11 — det=-1, Q(√5), and the GUE Bridge
tools/dnd_piano11.py:5:Core thesis (revised): The 1D potential V(r) gives Berry-Keating form but NOT GUE.
tools/dnd_piano11.py:12:Chain: M → Q(√5) → disc=5 → χ₅ → L(s,χ₅) → zeros on Re(s)=1/2 → GUE
tools/dnd_piano11.py:16:P2: Verify GUE spacing statistics of L(s, χ₅) zeros
tools/dnd_piano11.py:18:P4: The algebraic chain: det=-1 → disc=5 → Q(√5) → GUE (proven)
tools/dnd_piano11.py:22:- Montgomery (1973): pair correlation of ζ zeros ~ GUE
tools/dnd_piano11.py:24:- Rubinstein (2001): GUE for families of L-functions
tools/dnd_piano11.py:150:    """GUE (β=2) Wigner surmise CDF."""
tools/dnd_piano11.py:158:    """Poisson CDF."""
tools/dnd_piano11.py:162:    """GUE nearest-neighbor PDF."""
tools/dnd_piano11.py:192:# ─── P2: GUE statistics of L(s, χ₅) zeros ──────────────────────────────
tools/dnd_piano11.py:196:    Compute normalized nearest-neighbor spacings and test against GUE/GOE/Poisson.
tools/dnd_piano11.py:205:    ks_gue = ks_test_against(norm_spacings, gue_cdf, "GUE")
tools/dnd_piano11.py:207:    ks_poi = ks_test_against(norm_spacings, poisson_cdf, "Poisson")
tools/dnd_piano11.py:219:        "GUE_variance_ref": 0.178,
tools/dnd_piano11.py:248:    # Both vs GUE
tools/dnd_piano11.py:249:    ks_zeta_gue = ks_test_against(zeta_norm, gue_cdf, "GUE")
tools/dnd_piano11.py:250:    ks_L_gue = ks_test_against(L_norm, gue_cdf, "GUE")
tools/dnd_piano11.py:277:        "variance_GUE_ref": 0.178,
tools/dnd_piano11.py:293:# ─── P4: Algebraic chain M → Q(√5) → L(s,χ₅) → GUE ────────────────────
tools/dnd_piano11.py:297:    Prove the algebraic chain connecting D-ND matrix to GUE.
tools/dnd_piano11.py:330:    # This is the SAME type of symmetry as ζ → same universality class (GUE)
tools/dnd_piano11.py:341:    # → L(s, χ_{-3}), which ALSO has GUE zeros but different arithmetic.
tools/dnd_piano11.py:409:                "to": "Zeros follow GUE statistics",
tools/dnd_piano11.py:412:                    "theorem": "All primitive L-functions have GUE zero statistics (conjectured, overwhelming numerical evidence)",
tools/dnd_piano11.py:428:            "ζ_{Q(√5)} = ζ·L(s,χ₅). By the Katz-Sarnak philosophy, L(s,χ₅) has GUE zero statistics. "
tools/dnd_piano11.py:429:            "Therefore: D-ND matrix → Q(√5) → L(s,χ₅) → GUE. "
tools/dnd_piano11.py:477:                "produces": "GUE spacing statistics",
tools/dnd_piano11.py:486:                "N_fluct comes from det(M)=-1 (the 2D anti-symplectic structure, giving GUE). "
tools/dnd_piano11.py:494:                "spectral": "GUE universality class (from L(s,χ₅))"
tools/dnd_piano11.py:513:                "the regulator of Q(√5) (volume of the fundamental domain in log-units). "
tools/dnd_piano11.py:526:    print("Piano 11 — det=-1, Q(√5), and the GUE Bridge\n")
tools/dnd_piano11.py:540:        print(f"  Variance: {p2['variance']:.4f} (GUE ref: 0.178, GOE ref: 0.286)")
tools/dnd_piano11.py:541:        print(f"  KS vs GUE: {p2['ks_gue']['KS']:.4f} (p={p2['ks_gue']['p']:.4f})")
tools/dnd_piano11.py:554:            print(f"  L(s,χ₅) vs GUE: KS={p3['ks_L_vs_gue']['KS']:.4f}")
tools/dnd_piano11.py:555:            print(f"  ζ vs GUE: KS={p3['ks_zeta_vs_gue']['KS']:.4f}")
tools/dnd_piano11.py:562:    print("P4: Algebraic chain M → Q(√5) → L(s,χ₅) → GUE...")
tools/dnd_piano11.py:581:    if has_numerical and p2_data["best_fit"] == "GUE":
tools/dnd_piano11.py:582:        verdict = "CONFERMATO: L(s,χ₅) → GUE. La catena D-ND → Q(√5) → GUE è completa."
tools/dnd_piano11.py:585:        verdict = "PARZIALE: L(s,χ₅) → GOE. Convergenza a GUE attesa per più zeri."
tools/dnd_piano11.py:590:            "STRUTTURALE: La catena algebrica M → Q(√5) → L(s,χ₅) → GUE è dimostrata. "
tools/dnd_piano11.py:598:    results["piano"] = "piano11-Q-sqrt5-GUE"
tools/dnd_piano11.py:603:        "thesis": "det(M)=-1 connects D-ND to GUE through the number field Q(√5)",
tools/dnd_piano11.py:604:        "chain": "M → char poly λ²-λ-1 → disc=5 → Q(√5) → ζ_{Q(√5)} = ζ·L(s,χ₅) → GUE",
tools/dnd_piano11.py:612:            "Piano 11 shows det=-1 gives the FLUCTUATIONS (GUE via Q(√5)). "
tools/exp_number_variance.py:4:Tests whether the GUE->Poisson drift (seen in gap ratio) is confirmed
tools/exp_number_variance.py:7:GUE: Sigma^2(L) ~ (2/pi^2) * ln(L) + const  (logarithmic)
tools/exp_number_variance.py:8:Poisson: Sigma^2(L) = L  (linear)
tools/exp_number_variance.py:10:If primes drift toward Poisson at large scale, the number variance
tools/exp_number_variance.py:56:    """Poisson prediction: Sigma^2 = L."""
tools/exp_number_variance.py:60:    """GUE prediction: Sigma^2 ~ (2/pi^2) * ln(L) + 0.44 (approximate)."""
tools/exp_number_variance.py:83:    # Shuffled baseline (destroy correlations -> Poisson-like)
tools/exp_number_variance.py:118:    print(f"  Log-fit slope (primes):   {coeffs_prime[0]:.4f}  (GUE={2/np.pi**2:.4f})")
tools/exp_number_variance.py:123:    print(f"  Better fit: {'LOG (GUE-like)' if r2_log > r2_lin else 'LINEAR (Poisson-like)'}")
tools/exp_number_variance.py:125:    print(f"\n  L    | Σ²_prime  | Σ²_shuf  | Σ²_GUE  | Σ²_Poisson")
tools/exp_number_variance.py:151:# Key metric: does log_slope increase with scale? (would mean moving away from GUE)
tools/exp_number_variance.py:158:    print(f"  GUE value: {2/np.pi**2:.4f}")
tools/exp_number_variance.py:159:    print(f"  If trend > 0: number variance grows faster at large scale -> MORE Poisson")
tools/exp_number_variance.py:160:    print(f"  If trend ~ 0: stable -> GUE character preserved")
tools/exp_number_variance.py:166:    "claim_under_test": "BOUNDARY: GUE->Poisson drift in primes",
tools/exp_number_variance.py:167:    "method": "Number variance Sigma^2(L) at 5 scales, compared with GUE and Poisson predictions",
tools/data/reports/agent_20260507_0923.md:84:   protocol fold in the synthetic matrix, not a cross-domain coordinate.
tools/build_agent_field.py:309:        "Obblighi pratici: se il dominio e' GUE/Poisson, aggiungi una sezione "
tools/build_agent_field.py:1722:        "Un pattern in distribuzioni classiche (primi, GUE, random walk, Markov chain, "
tools/build_agent_field.py:1726:        "per GUE level statistics, Erdos-Kac per distribuzioni aritmetiche). Se non lo "
tools/data/reports/agent_20260410_0330.md:1:# Agent Report — The 1/k Amplitude Decays: A(p) Predicts Poisson at p* ~ 10^{12.6}
tools/data/reports/agent_20260410_0330.md:15:But POISSON_CONVERGENCE says all observables trend toward Poisson at p* ~ 10^{13-14}.
tools/data/reports/agent_20260410_0330.md:52:2. **Poisson crossover at p* ~ 4 x 10^{12} (log10 p* = 12.6).**
tools/data/reports/agent_20260410_0330.md:80:  Predicts Poisson crossover at p* ~ 10^{12.6}, consistent with independent estimates.
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:7:classical reader uses spacing/Brody/Wigner-Poisson diagnostics and the graph
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:144:        "domain_window": f"Anderson3D_W_{disorder:.2f}",
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:146:        "source_domain_type": source_type(disorder, args.metallic_pole_max, args.localized_pole_min),
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:191:    labels = [row["source_domain_type"] for row in rows]
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:223:        if row["source_domain_type"] == "mobility_candidate" and cross_fraction > 0 and margin < margin_max:
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:229:                "domain_window": row["domain_window"],
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:231:                "source_domain_type": row["source_domain_type"],
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:241:        "third_included_candidates": [r["domain_window"] for r in graph_rows if r["boundary_state"] == "third_included_candidate"],
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:291:    graph_hits: dict[str, int] = {row["domain_window"]: 0 for row in rows}
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:297:                graph_hits[grow["domain_window"]] += 1
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:300:        freq = graph_hits[row["domain_window"]] / len(ks)
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:302:            names.add(row["domain_window"])
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:321:            graph_by_name = {row["domain_window"]: row for row in graph["rows"]}
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:323:                name = row["domain_window"]
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:327:                        "source_domain_type": row["source_domain_type"],
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:364:                "domain_window": name,
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:366:                "source_domain_type": item["source_domain_type"],
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:382:        row["domain_window"]
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:387:        row["domain_window"]
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:392:        row["domain_window"]
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:427:                row["domain_window"],
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:448:                "domain_window": name,
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:478:                    "domain_window": row["domain_window"],
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:480:                    "source_domain_type": row["source_domain_type"],
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:530:            "observable": "two_reader_all_sizes from graph_bridge_frequency joined with adjacent ratio, Brody q, Wigner/Poisson mixture weight, IPR and participation entropy",
tools/exp_anderson3d_mobility_edge_two_reader_audit.py:534:            "non_possible": "cross-domain transfer if no W row is stable_graph_bridge+classical_intermediate at every tested size",
tools/dnd_trace_bridge_v3.py:181:            closer = "GUE" if d_gue < d_poi else "Poisson"
tools/dnd_trace_bridge_v3.py:205:        closer = "GUE" if d_gue < d_poi else "Poi"
tools/dnd_trace_bridge_v3.py:335:            print(f"  Spacing dei ratio (zeta):  <r>={stats_rz['mean_r']:.4f} → {'GUE' if d_gue < d_poi else 'Poi'}")
tools/dnd_trace_bridge_v3.py:339:            print(f"  Spacing dei ratio (random): <r>={stats_rr['mean_r']:.4f} → {'GUE' if d_gue < d_poi else 'Poi'}")
tools/dnd_trace_bridge_v3.py:348:v2 mostrava GUE ovunque per zeta — ma era tautologico (<r> invariante monotono).
tools/data/reports/agent_20260507_2310.md:6:**observables_used**: blank_edge_is_GQ_count, any_deposit_on_blank_count, full_scale_law_count, shell_face_count - osservabili domain-native del denominatore blank-shell; nessun osservabile canonico SR/SR2/L1/L2/triple_var usato
tools/data/reports/agent_20260507_2310.md:18:- Metrica: quattro osservabili domain-native del denominatore: lato blank fissato su QG, qualunque deposito sul guscio blank, legge completa del guscio, numero di facce del guscio.
tools/dnd_engine.py:8:4. Cerca connessioni cross-domain
tools/dnd_engine.py:112:        'claim': 'Spacing zeta zeros è GUE (⟨r⟩≈0.615)',
tools/dnd_engine.py:120:        'claim': 'Domini si dividono in GUE (7) e Poisson (4)',
tools/dnd_engine.py:137:        'claim': 'Rule 30/110 hanno spacing anomalo (⟨r⟩≈0.86, >> GUE)',
tools/dnd_engine.py:176:        'claim': 'r_diretto NON separa GUE da Poisson (70% overlap)',
tools/dnd_engine.py:178:        'motivo': 'Esperimento order_parameter: GUE r=0.92±0.11, Poisson r=0.95±0.08. Ipotesi H_order_param eliminata.',
tools/dnd_engine.py:192:        'claim': 'φ emerge in 20/20 banchi di prova da teorie dimostrate: Wigner GOE/GUE, Feigenbaum, Fibonacci quasicrystal, KAM (12 valori K), cifre di π/e/√2/√5/φ/ln2.',
tools/dnd_engine.py:206:        'claim': 'ac1 (autocorrelazione intervalli D-ND) DISTINGUE deterministico da casuale: primi=-0.10, GUE=-0.20, shuffle=0.00, Poisson=+0.04.',
tools/dnd_engine.py:240:        'motivo': 'A V=2: invariante trace map I=(V/2)²-1=0, tutti gli autostati power-law. A V≈1: <r>=0.5 (statistica intermedia). A V=2: <r>=0.354 (Poisson).',
tools/dnd_engine.py:300:        'motivo': 'Correlazione log r=0.921 era ARTEFATTO di monotonia (random sorted r=0.89). Il ponte vero è STATISTICO: distribuzione spacing = GUE (β=2.007 a 100K zeri).',
tools/dnd_engine.py:302:        'correzione': 'La correlazione locale K_c↔t_n è spuria. Il ponte D-ND↔ζ è nella distribuzione degli spacing (GUE), non nella corrispondenza puntuale.',
tools/dnd_engine.py:314:        'claim': 'Il confine GUE/Poisson corrisponde al terzo incluso',
tools/dnd_engine.py:316:        'motivo': 'Se GUE=D e Poisson=ND, il confine è dove la scissione cambia natura.',
tools/dnd_engine.py:324:        'motivo': 'RISOLTO computazionalmente: <r>(V=2)=0.35 (Poisson). V=2 è il punto di inversione dell inerzia. L orbita converge a phi.',
tools/dnd_engine.py:476:        'claim': 'Gli spacing della mappa D-ND (Fibonacci) seguono GUE (p>0.05 KS). La classificazione GUE/GOE/Poisson e un metodo universale.',
tools/dnd_engine.py:584:    """Verifica che i domini si dividano naturalmente in cluster GUE/Poisson."""
tools/dnd_engine.py:814:    # V=1 dovrebbe dare <r>≈0.5, V=2 dovrebbe dare <r>≈0.35 (Poisson-like)
tools/dnd_engine.py:1528:    """Il confine GUE/Poisson nella famiglia det=-1 corrisponde al terzo incluso.
tools/dnd_engine.py:1529:    A V=V_c: <r> attraversa 0.5 (meta' tra GUE=0.53 e Poisson=0.39).
tools/dnd_engine.py:1909:    """Spacing dei rapporti Fibonacci: classifica GUE/GOE/Poisson con KS test."""
tools/dnd_engine.py:1928:    # GUE, GOE, Poisson CDFs
tools/dnd_engine.py:1940:    fits = [("GUE", ks_gue, p_gue), ("GOE", ks_goe, p_goe), ("Poisson", ks_poi, p_poi)]
tools/dnd_engine.py:2107:def connessioni_cross_domain():
tools/dnd_engine.py:2125:    domains = [e for e in journal if isinstance(e.get('ciclo'), int)]
tools/dnd_engine.py:2126:    if len(domains) < 3:
tools/dnd_engine.py:2134:    for d in domains:
tools/dnd_engine.py:2143:    r_values = [(d['dominio'], d.get('r_diretto', 0)) for d in domains if d.get('r_diretto')]
tools/dnd_engine.py:2169:             for d in domains if d.get('spacing_r') and d.get('r_diretto')]
tools/dnd_engine.py:2182:    gap_ratios = [d.get('gap_ratio', 0) for d in domains if d.get('gap_ratio')]
tools/dnd_engine.py:2257:    'EXT5': {'root': 'metodologico', 'level': 'statistico'},      # classificazione GUE/GOE/Poisson (gap filled!)
tools/dnd_engine.py:2732:    2. Connessioni cross-domain
tools/dnd_engine.py:2753:    # Dai cluster cross-domain
tools/dnd_engine.py:2761:                'source': 'cross_domain',
tools/dnd_engine.py:3188:    # Cross-domain (tra BREAK e INSIGHT)
tools/dnd_engine.py:3189:    connections = connessioni_cross_domain()
tools/dnd_engine.py:3431:            connessioni_cross_domain()
tools/dnd_spettro_zeta.py:11:  3. La statistica degli spacing deve mostrare repulsione a livelli (come GUE per ζ)
tools/dnd_spettro_zeta.py:20:  Parte 3: Unfolding e statistica spacing P(s) — confronto GOE/GUE
tools/dnd_spettro_zeta.py:221:    """Generate GUE nearest-neighbor spacings via rejection sampling."""
tools/dnd_spettro_zeta.py:226:        # GUE Wigner surmise: P(s) = (32/π²)s²·exp(-4s²/π)
tools/dnd_spettro_zeta.py:228:        # Envelope: C·exp(-s) where C = max of P_GUE(s)·exp(s)
tools/dnd_spettro_zeta.py:282:        print(f"      vs GUE:     KS={ks_gue:.4f}, p={p_gue:.4f}")
tools/dnd_spettro_zeta.py:283:        print(f"      vs Poisson: KS={ks_poi:.4f}, p={p_poi:.4f}")
tools/dnd_spettro_zeta.py:288:            'vs_GUE': {'KS': float(ks_gue), 'p': float(p_gue)},
tools/dnd_spettro_zeta.py:289:            'vs_Poisson': {'KS': float(ks_poi), 'p': float(p_poi)},
tools/dnd_spettro_zeta.py:306:    print(f"    Poisson:  1.000")
tools/dnd_spettro_zeta.py:308:    print(f"    GUE:     ~0.178")
tools/dnd_spettro_zeta.py:318:        'GUE_ref': 0.178,
tools/dnd_spettro_zeta.py:603:    print(f"      Poisson: ac(1) ≈  0.00")
tools/dnd_spettro_zeta.py:605:    print(f"      GUE:     ac(1) ≈ -0.50")
tools/dnd_spettro_zeta.py:747:  │     Var(s) D-ND:     {var_dnd:.4f}  (GOE≈0.286, GUE≈0.178)       │
tools/dnd_spettro_zeta.py:749:  │     ac(1) D-ND:     {f'{ac1_dnd:+.4f}' if ac1_dnd is not None else '  N/A':>7s}  (GOE≈-0.27, GUE≈-0.50)      │
tools/dnd_spettro_zeta.py:766:            stat_class = "GUE"
tools/dnd_spettro_zeta.py:774:        print(f"    Gli zeri di ζ → GUE")
tools/dnd_spettro_zeta.py:776:        print(f"      Per passare da GOE a GUE serve rompere T-simmetria.")
tools/dnd_spettro_zeta.py:780:        print(f"      V(r) + fase det=-1 potrebbe dare GUE.")
tools/dnd_spettro_zeta.py:781:    elif stat_class == "GUE":
tools/dnd_spettro_zeta.py:782:        print(f"    Sorpresa: H reale mostra statistiche GUE-like")
tools/dnd_spettro_zeta.py:784:        print(f"      generare pseudo-GUE a queste energie")
tools/dnd_spettro_zeta.py:799:    print(f"      Statistica: {stat_class} (ζ = GUE)")
tools/dnd_spettro_zeta.py:855:        verdict = "MODERATA: struttura condivisa, serve la matrice completa per GUE"
tools/dnd_spettro_zeta.py:868:        print(f"       → Se questo dà GUE, la connessione è completa")
tools/exp_scale_selective_perturbation.py:48:    """Generate N GUE gaps (eigenvalue spacings of random Hermitian matrix)."""
tools/exp_scale_selective_perturbation.py:66:    """Generate N Poisson (iid exponential) gaps."""
tools/exp_scale_selective_perturbation.py:196:    for domain_name, gen_func in [('primes', lambda: generate_primes(N)),
tools/exp_scale_selective_perturbation.py:197:                                   ('GUE', lambda: generate_gue(N, rng))]:
tools/exp_scale_selective_perturbation.py:200:        print(f"\n=== {domain_name} (N={actual_n}) ===")
tools/exp_scale_selective_perturbation.py:218:        domain_result = {
tools/exp_scale_selective_perturbation.py:258:            domain_result['perturbations'][pert_name] = pert_result
tools/exp_scale_selective_perturbation.py:294:        domain_result['pca'] = {
tools/exp_scale_selective_perturbation.py:301:        domain_result['centroid_cosine_similarity'] = cos_sim
tools/exp_scale_selective_perturbation.py:311:            ret = domain_result['perturbations'][pert_name]['alpha_0.5']['retention']
tools/exp_scale_selective_perturbation.py:314:        results[domain_name] = domain_result
tools/exp_denominator_gate_transfer_matrix.py:8:GUE/Poisson BOUNDARY perimeter. Each perimeter has a coherent endpoint and an
tools/dnd_spectral_probe.py:72:    3. KS test against GUE/GOE/Poisson
tools/dnd_spectral_probe.py:155:        β=0: Poisson, β=1: GOE, β=2: GUE.
tools/dnd_spectral_probe.py:158:        If β>2 at all scales → GUE (even when KS says GOE).
tools/dnd_spectral_probe.py:192:                cls = "GUE" if beta > 1.5 else ("GOE" if beta > 0.5 else "Poisson")
tools/dnd_spectral_probe.py:213:          Poisson: <r> = 2ln2 - 1 ≈ 0.3863
tools/dnd_spectral_probe.py:215:          GUE:     <r> ≈ 0.6027
tools/dnd_spectral_probe.py:230:        refs = {"Poisson": 0.38629, "GOE": 0.53590, "GUE": 0.60266}
tools/dnd_spectral_probe.py:248:        """KS test against GUE, GOE, Poisson."""
tools/dnd_spectral_probe.py:256:        fits = [("GUE", ks_gue, p_gue), ("GOE", ks_goe, p_goe), ("Poisson", ks_poi, p_poi)]
tools/dnd_spectral_probe.py:309:            if majority[0] == "GUE" and "GOE" in dissenters:
tools/dnd_spectral_probe.py:310:                verdict = (f"LIKELY GUE: {majority[0]} (2/3 — KS blind to GUE, "
tools/dnd_spectral_probe.py:462:                print(f"    |Δ Poisson|={dists.get('Poisson', 0):.5f}  "
tools/dnd_spectral_probe.py:464:                      f"|Δ GUE|={dists.get('GUE', 0):.5f}")
tools/dnd_spectral_probe.py:522:    → GUE statistics (Katz-Sarnak)
tools/dnd_spectral_probe.py:633:        reference_beta: theoretical β to converge to (2.0 for GUE)
tools/dnd_spectral_probe.py:1058:        print(f"  All GUE: {all_gue} ({sum(1 for b in valid if b > 1.5)}/{len(valid)})")
tools/exp_3d_boundary_layers.py:14:Tests on: primes, GUE, Poisson baseline.
tools/exp_3d_boundary_layers.py:37:    """Generate GUE eigenvalue gaps."""
tools/exp_3d_boundary_layers.py:179:    # --- GUE ---
tools/exp_3d_boundary_layers.py:180:    print("\n--- GUE ---")
tools/exp_3d_boundary_layers.py:187:        gue_g, alphas, args.n_trials, rng, "GUE"
tools/exp_3d_boundary_layers.py:190:    # --- Poisson (exponential gaps, iid) ---
tools/exp_3d_boundary_layers.py:194:        poisson_gaps, alphas, args.n_trials, rng, "Poisson"
tools/exp_3d_boundary_layers.py:255:    print(f"Layer separation Δα: Primes={prime_sep:+.3f}, GUE={gue_sep:+.3f}, Poisson={pois_sep:+.3f}")
tools/dnd_quantization.py:13:Domanda: gli spacing dei livelli E_n seguono GUE?
tools/dnd_quantization.py:317:            closer = "GUE" if d_gue < d_poi else "Poisson"
tools/dnd_quantization.py:318:            print(f"  <r> = {stats['mean_r']:.4f} (GUE: 0.5996, Poisson: 0.3863) → {closer}")
tools/dnd_quantization.py:319:            print(f"  Var(s) = {stats['var_s']:.4f} (GUE: 0.178, Poisson: 1.0)")
tools/dnd_quantization.py:333:                      f"→ {'GUE' if d_gue < d_poi else 'Poi'}")
tools/data/reports/agent_20260515_1855.md:7:**observable_contract**: claim=il confine GUE/Poisson e' operativo quando la geometria row-aligned produce nodi cross-label a margine basso; observable=kNN graph position, cross-neighbor fraction, centroid margin, unweighted Forman edge curvature; operator=grafo kNN nello spazio canonical+rigidity+shuffle-z; generator=dnd_autoricerca row_spacings via semireal boundary transfer gate; denominator=13 righe base BOUNDARY, 8 GUE e 5 Poisson; non_possible=terzo incluso se non compaiono edge cross-label o se tutti gli edge cross-label restano interni ad alta margin; not_tested=V_c, denominatori Sturmian, origine analitica delle label.
tools/data/reports/agent_20260515_1855.md:10:- **Combo**: A9 terzo incluso + incrocio QxG continuo/discreto + grafo della conoscenza come nodo/cut + tensione BOUNDARY "8 domini GUE, 5 Poisson".
tools/data/reports/agent_20260515_1855.md:13:- **Operatori laterali scelti**: graph spectrum/curvature, spectral rigidity, GUE/Poisson. La rigidita' entra come osservabile esplicita, GUE/Poisson solo come audit label.
tools/data/reports/agent_20260515_1855.md:16:- **Proiezione**: se il terzo incluso e' operativo, il grafo kNN delle 13 righe deve produrre edge GUE/Poisson e almeno una riga a margine basso; se il boundary e' solo tassonomia, il grafo resta in due componenti o attraversa solo con margin alta.
tools/data/reports/agent_20260515_1855.md:20:- `why`: il ciclo misura esplicitamente il perimetro vivo 8 GUE / 5 Poisson e chiede dove il confine funziona come terzo incluso operativo.
tools/data/reports/agent_20260515_1855.md:21:- `not_drift`: non usa il report Sturmian bloccato, non misura V_c, non usa phi/silver/bronze come sorgente; le label GUE/Poisson sono audit metadata, non operatore decisionale.
tools/data/reports/agent_20260515_1855.md:24:> Nel perimetro base BOUNDARY, il terzo incluso appare come sottoinsieme di righe cross-label a margine basso nel grafo degli osservabili, non come l'intera divisione GUE/Poisson.
tools/data/reports/agent_20260515_1855.md:27:Il confine 8 GUE / 5 Poisson resta una separazione binaria o produce nodi ponte misurabili nel grafo osservabile?
tools/data/reports/agent_20260515_1855.md:30:- **Punto fisico sorgente**: transizione spettrale tra repulsione da caos quantistico e indipendenza/localizzazione Poisson.
tools/data/reports/agent_20260515_1855.md:39:- **Scope**: `boundary_denominator_prescan_full_20260509_1500.json`, righe base BOUNDARY con `source_domain_type in {GUE, Poisson}`.
tools/data/reports/agent_20260515_1855.md:43:- **Contratto osservabile-operatore**: il claim usa posizione nel grafo, frazione di vicini cross-label, margin ai centroidi GUE/Poisson e curvatura Forman non pesata. `gap_ratio`, `V_c` e denominatori Sturmian non sono testati.
tools/data/reports/agent_20260515_1855.md:49:| GUE / Poisson rows | 8 / 5 |
tools/data/reports/agent_20260515_1855.md:59:| numeri_primi:cycle_3 | GUE | 0.223 | 0.250 | third_included_candidate |
tools/data/reports/agent_20260515_1855.md:60:| percolation:cycle_9 | Poisson | 0.089 | 1.000 | third_included_candidate |
tools/data/reports/agent_20260515_1855.md:61:| reaction_diffusion:cycle_11 | GUE | 0.115 | 0.750 | third_included_candidate |
tools/data/reports/agent_20260515_1855.md:62:| logistica_biforcazione_var_3.5699:cycle_13 | GUE | 0.217 | 0.250 | third_included_candidate |
tools/data/reports/agent_20260515_1855.md:63:| pendolo_doppio:cycle_2 | Poisson | 0.299 | 0.333 | cut_edge |
tools/data/reports/agent_20260515_1855.md:64:| zeta_zeros:cycle_4 | GUE | 0.308 | 0.333 | cut_edge |
tools/data/reports/agent_20260515_1855.md:65:| string_vibration:cycle_6 | Poisson | 0.551 | 0.500 | cut_edge |
tools/data/reports/agent_20260515_1855.md:66:| random_matrix:cycle_7 | GUE | 0.352 | 0.167 | cut_edge |
tools/data/reports/agent_20260515_1855.md:67:| brownian_motion:cycle_12 | Poisson | 0.438 | 0.250 | cut_edge |
tools/data/reports/agent_20260515_1855.md:70:1. Verificato: il perimetro e' quello richiesto, 13 righe con 8 GUE e 5 Poisson, senza errori di ricostruzione.
tools/data/reports/agent_20260515_1855.md:71:2. Verificato: la separazione non e' binaria nel grafo osservabile; 8/27 edge attraversano la label GUE/Poisson.
tools/data/reports/agent_20260515_1855.md:78:Il boundary trasferisce come geometria di righe ponte nel perimetro 8/5. Non trasferisce come singolo scalare di curvatura e non autorizza una tassonomia pulita GUE vs Poisson.
tools/data/reports/agent_20260515_1855.md:81:- **Due radici**: label spettrale GUE/Poisson; posizione geometrica nel grafo osservabile.
tools/dnd_next.py:46:    'C': {'title': 'Information Geometry + ζ', 'target': 'JMP', 'core_claim': 'Berry-Keating potential, GUE connection'},
tools/dnd_risultante.py:33:    The algebra det=-1 → disc=5 → Q(√5) → L(s,χ₅) → GUE statistics
tools/dnd_risultante.py:35:    the deviation from pure GUE. The risultante dynamics produce the same
tools/dnd_risultante.py:548:        Piano 11: det=-1 → disc=5 → Q(√5) → L(s,χ₅) → GUE
tools/dnd_risultante.py:573:                "statistics": "GUE (Katz-Sarnak)"
tools/data/reports/agent_20260515_1826.md:52:- Contratto osservabile-operatore: il ciclo testa denominator alignment; non testa `gap_ratio`, `V_c`, PSD surrogate quality, limite asintotico o universalita GUE/Poisson.
tools/exp_excess_scaling.py:124:# Additional: check GUE vs Poisson classification
tools/exp_excess_scaling.py:125:# GUE: <r> ~ 0.5307, Poisson: <r> ~ 0.3863
tools/exp_excess_scaling.py:126:r_GUE = 0.5307
tools/exp_excess_scaling.py:127:r_Poisson = 0.3863
tools/exp_excess_scaling.py:129:print(f"\n  Reference: GUE <r> = {r_GUE}, Poisson <r> = {r_Poisson}")
tools/exp_excess_scaling.py:133:# Does <r> move toward Poisson at large scale?
tools/exp_excess_scaling.py:135:    print(f"  <r> DECREASES with scale: moving toward Poisson")
tools/exp_excess_scaling.py:137:    print(f"  <r> INCREASES with scale: moving toward/staying GUE")
tools/data/reports/agent_20260424_0330.md:1:# Agent Report — Two Kinds of GUE: Distribution-Level vs Ordering-Level Classification
tools/data/reports/agent_20260424_0330.md:8:> The GUE/Poisson classification of 13 domains is treated as a structural finding. But is it a property of sequential correlations (genuine) or of the gap distribution shape alone (tautological)?
tools/data/reports/agent_20260424_0330.md:11:If I shuffle the gap sequence of each domain (destroying ordering, preserving distribution), does the GUE/Poisson classification survive?
tools/data/reports/agent_20260424_0330.md:17:- **Scope**: 10 domains (primes, GUE matrices, Poisson, logistic, Fibonacci spectrum, Ising 2D, percolation, Brownian, coupled oscillators, cellular automata)
tools/data/reports/agent_20260424_0330.md:18:- **Reference**: R_GUE = 0.5307, R_Poisson = 0.3863
tools/data/reports/agent_20260424_0330.md:24:| primes | 100K | 0.4622 | 0.4813 | -26.6 | GUE | GUE | STRUCTURAL |
tools/data/reports/agent_20260424_0330.md:25:| gue | 5K | 0.5995 | 0.6351 | -14.7 | GUE | GUE | STRUCTURAL |
tools/data/reports/agent_20260424_0330.md:26:| fibonacci | 609 | 0.4782 | 0.4073 | +8.0 | GUE | **Poisson** | STRUCTURAL + FLIP |
tools/data/reports/agent_20260424_0330.md:27:| coupled_osc | 427 | 0.8775 | 0.4146 | +43.5 | GUE | **Poisson** | STRUCTURAL + FLIP |
tools/data/reports/agent_20260424_0330.md:28:| percolation | 510 | 0.6551 | 0.4508 | +16.1 | GUE | **Poisson** | STRUCTURAL + FLIP |
tools/data/reports/agent_20260424_0330.md:29:| logistic | 100K | 0.3887 | 0.3423 | +61.6 | Poisson | Poisson | STRUCTURAL |
tools/data/reports/agent_20260424_0330.md:30:| poisson | 100K | 0.3847 | 0.3856 | -1.1 | Poisson | Poisson | TAUTOLOGICAL |
tools/data/reports/agent_20260424_0330.md:31:| brownian | 650 | 0.3148 | 0.3324 | -1.6 | Poisson | Poisson | TAUTOLOGICAL |
tools/data/reports/agent_20260424_0330.md:32:| ising_2d | 95 | 0.9858 | 0.9859 | -0.1 | GUE | GUE | TAUTOLOGICAL |
tools/data/reports/agent_20260424_0330.md:33:| cell_auto | 105 | 0.8446 | 0.8455 | -0.1 | GUE | GUE | TAUTOLOGICAL |
tools/data/reports/agent_20260424_0330.md:39:1. **Two kinds of GUE.** The GUE-classified domains split into two fundamentally different categories:
tools/data/reports/agent_20260424_0330.md:40:   - **Distribution-GUE** (primes, GUE matrices): the gap distribution itself is GUE-like. Shuffling preserves the classification. Sequential ordering adds fine structure (shifts r downward by 0.02-0.04) but doesn't create the classification.
tools/data/reports/agent_20260424_0330.md:41:   - **Ordering-GUE** (fibonacci, coupled oscillators, percolation): the gap distribution is Poisson. The GUE classification exists ONLY because of sequential ordering. Destroy the order and they collapse to Poisson. r-shifts are massive: +0.07 to +0.46.
tools/data/reports/agent_20260424_0330.md:43:2. **Primes are distribution-GUE.** Shuffled prime gaps still give r=0.4813 (GUE side). The ordering pushes r DOWN by 0.019 (z=-26.6), adding extra gap repulsion beyond what the distribution predicts. This is the opposite sign from ordering-GUE domains (where ordering pushes r UP).
tools/data/reports/agent_20260424_0330.md:45:3. **The sign of delta_r is a discriminant.** Distribution-GUE domains have delta_r < 0 (ordering increases repulsion). Ordering-GUE domains have delta_r > 0 (ordering creates attraction/clustering that looks like level repulsion in the r-statistic). The sign tells you which mechanism drives the classification.
tools/data/reports/agent_20260424_0330.md:47:4. **3/8 GUE domains are ordering-GUE.** The BOUNDARY claim "8 GUE, 5 Poisson" conflates two distinct mechanisms. The refined picture: 2 distribution-GUE (primes, GUE), 3 ordering-GUE (fibonacci, coupled_osc, percolation), 2 small-N ambiguous (ising, cell_auto), 3 Poisson (poisson, brownian, logistic). The logistic map is Poisson at distribution level but has massive ordering structure (z=+61.6) that doesn't flip the class.
tools/data/reports/agent_20260424_0330.md:49:5. **META constraint confirmed.** A binary GUE/Poisson test that doesn't include a shuffle control conflates the two mechanisms. Testing "is r closer to 0.53 or 0.39?" is necessary but insufficient — it doesn't distinguish whether the ordering or the distribution is the source.
tools/data/reports/agent_20260424_0330.md:54:The BOUNDARY claim must be refined: the 8 GUE domains are not homogeneous. Two distinct mechanisms generate GUE statistics. The boundary between GUE and Poisson has two layers: distribution-level and ordering-level. The sign of delta_r = r_original - r_shuffled discriminates which layer operates.
tools/data/reports/agent_20260424_0330.md:58:- **Due radici** (dipolo primario): Distribution-GUE (il repulsore intrinseco, det=-1 nella forma dei gap) / Ordering-GUE (il repulsore emergente, det=-1 nella sequenza dei gap). Invertite: il primo nasce dalla distribuzione e l'ordine lo affina; il secondo nasce dall'ordine e senza esso collassa.
tools/data/reports/agent_20260424_0330.md:60:- **Invariante di passaggio**: il segno di delta_r. Sopravvive al passaggio del vertice: delta_r < 0 = repulsione intrinseca (primes, GUE), delta_r > 0 = repulsione emergente (fibonacci, percolation, coupled_osc). Il segno e stabile, non dipende dalla scala.
tools/data/reports/agent_20260424_0330.md:61:- **Campo di possibilita**: qui diventa possibile discriminare PERCHE un dominio e GUE (distribuzione vs ordine) — non solo CHE e GUE. Qui diventa non-possibile trattare tutti i domini GUE come omogenei: i test che non separano i due meccanismi (shuffle) sono incompleti.
tools/data/reports/agent_20260424_0330.md:64:La decomposizione two-channel (magnitude/residue) dei run precedenti si sovrappone a questa: il canale magnitudine corrisponde alla distribuzione (chi sei senza ordine), il canale residuo corrisponde all'ordine (cosa l'ordine aggiunge). I 3 domini che flippano sono quelli dove il canale residuo E' il segnale. Per i primi, il canale magnitudine domina ma il residuo aggiunge repulsione (delta_r < 0, z=-26.6). Prossima domanda: i domini ordering-GUE (fibonacci, percolation) hanno la stessa struttura Markov-3 trovata nei primi, o il loro meccanismo di ordine e diverso?
tools/data/reports/next_exec_20260405_0729.json:22:        "action": "EXPLORE: BOUNDARY — 8 domini GUE, 5 Poisson — il confine è il terzo incluso oper",
tools/exp_spectral_rigidity.py:9:  GUE:     Sigma^2(L) ~ (2/pi^2) ln(L) + const   [log-log slope ~ 0]
tools/exp_spectral_rigidity.py:10:  Poisson: Sigma^2(L) = L                         [log-log slope = 1]
tools/exp_spectral_rigidity.py:13:  << 1 -> GUE (strong repulsion, rigid spectrum)
tools/exp_spectral_rigidity.py:14:  ~  1 -> Poisson (no correlations)
tools/exp_spectral_rigidity.py:18:Domains: primes, GUE matrices, coupled_osc, string_vib, percolation,
tools/exp_spectral_rigidity.py:19:         logistic, brownian, pure Poisson.
tools/exp_spectral_rigidity.py:31:def gaps_from_domain(dominio):
tools/exp_spectral_rigidity.py:32:    """Generate gaps from domain. Returns positive spacings."""
tools/exp_spectral_rigidity.py:47:    """GUE Hermitian matrix eigenvalue spacings, bulk only."""
tools/exp_spectral_rigidity.py:84:    domains = OrderedDict([
tools/exp_spectral_rigidity.py:85:        ('primes',      {'gen': lambda: gaps_from_domain('numeri_primi'),      'type': 'dist-GUE'}),
tools/exp_spectral_rigidity.py:86:        ('gue_matrix',  {'gen': lambda: generate_gue_gaps(600),               'type': 'dist-GUE'}),
tools/exp_spectral_rigidity.py:87:        ('coupled_osc', {'gen': lambda: gaps_from_domain('coupled_oscillators'), 'type': 'ord-GUE'}),
tools/exp_spectral_rigidity.py:88:        ('string_vib',  {'gen': lambda: gaps_from_domain('string_vibration'),  'type': 'ord-GUE'}),
tools/exp_spectral_rigidity.py:89:        ('percolation', {'gen': lambda: gaps_from_domain('percolation'),       'type': 'ord-GUE'}),
tools/exp_spectral_rigidity.py:90:        ('logistic',    {'gen': lambda: gaps_from_domain('logistica_biforcazione'), 'type': 'Poisson'}),
tools/exp_spectral_rigidity.py:91:        ('brownian',    {'gen': lambda: gaps_from_domain('brownian_motion'),   'type': 'Poisson'}),
tools/exp_spectral_rigidity.py:92:        ('poisson',     {'gen': lambda: generate_poisson_gaps(10000),          'type': 'Poisson'}),
tools/exp_spectral_rigidity.py:98:    for name, cfg in domains.items():
tools/exp_spectral_rigidity.py:156:        print(f"  Slope (log-log): real={slope:.3f}, shuf={slope_s:.3f}  [GUE~0, Poisson=1]")
tools/exp_spectral_rigidity.py:188:            if ty in ('dist-GUE', 'ord-GUE'):
tools/exp_spectral_rigidity.py:202:    # Which domains have ordering-dependent rigidity?
tools/exp_spectral_rigidity.py:227:            'experiment': 'spectral_rigidity_cross_domain',
tools/exp_spectral_2d.py:17:4. Anti-correlated Poisson: Poisson gaps with imposed negative acf1 →
tools/exp_spectral_2d.py:174:    Model: Poisson gaps, but forced to alternate large-small.
tools/exp_spectral_2d.py:324:    # --- Reference domains ---
tools/exp_spectral_2d.py:325:    domains = [
tools/exp_spectral_2d.py:327:        ("GUE", lambda n: gen_gue(n)),
tools/exp_spectral_2d.py:328:        ("Poisson", lambda n: np.random.exponential(1.0, n)),
tools/exp_spectral_2d.py:333:        domains.append((f"BR_{rho:.1f}", lambda n, r=rho: gen_berry_robnik(n, r)))
tools/exp_spectral_2d.py:336:    domains.extend([
tools/exp_spectral_2d.py:350:    for name, gen in domains:
tools/exp_boundary_blank_null_audit.py:9:domains so the denominator prescan can decide whether blank -> transfers,
tools/exp_boundary_blank_null_audit.py:27:R_GUE = 0.5307
tools/exp_boundary_blank_null_audit.py:66:    return "GUE" if abs(value - R_GUE) < abs(value - R_POISSON) else "Poisson"
tools/exp_boundary_blank_null_audit.py:69:def generate_domain_signal(domain: str) -> tuple[np.ndarray, dict[str, Any]]:
tools/exp_boundary_blank_null_audit.py:70:    if "_var_" not in domain:
tools/exp_boundary_blank_null_audit.py:71:        return genera_segnale(domain)
tools/exp_boundary_blank_null_audit.py:73:    base, raw_value = domain.rsplit("_var_", 1)
tools/exp_boundary_blank_null_audit.py:90:    metadata = {**metadata, "dominio": domain, "variant_base": base, "variant_value": value}
tools/exp_boundary_blank_null_audit.py:94:def audit_domain(domain: str, n_shuffle: int, rng: np.random.Generator) -> dict[str, Any]:
tools/exp_boundary_blank_null_audit.py:95:    signal, metadata = generate_domain_signal(domain)
tools/exp_boundary_blank_null_audit.py:107:            "domain": domain,
tools/exp_boundary_blank_null_audit.py:119:        "domain": domain,
tools/exp_boundary_blank_null_audit.py:140:    domains = args.domains or list(DEFAULT_DOMAINS)
tools/exp_boundary_blank_null_audit.py:142:        domain: audit_domain(domain, args.n_shuffle, rng)
tools/exp_boundary_blank_null_audit.py:143:        for domain in domains
tools/exp_boundary_blank_null_audit.py:151:            "R_GUE": R_GUE,
tools/exp_boundary_blank_null_audit.py:152:            "R_Poisson": R_POISSON,
tools/exp_boundary_blank_null_audit.py:154:        "domains": results,
tools/exp_boundary_blank_null_audit.py:156:            "domains": domains,
tools/exp_boundary_blank_null_audit.py:158:                domain for domain, row in results.items()
tools/exp_boundary_blank_null_audit.py:162:                domain for domain, row in results.items()
tools/exp_boundary_blank_null_audit.py:173:    for domain, row in results.items():
tools/exp_boundary_blank_null_audit.py:175:            print(f"{domain}\tERROR\t{row['error']}")
tools/exp_boundary_blank_null_audit.py:178:            f"{domain}\tn={row['n_gaps']}\tr={row['r_original']:.6f}\t"
tools/exp_boundary_blank_null_audit.py:187:    parser.add_argument("--domains", nargs="*", default=list(DEFAULT_DOMAINS))
tools/data/reports/fibonacci_spectrum_20260306_1834.json:12:        "GUE": 0.29670833202771496,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:14:        "Poisson": 0.510008332027715,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:23:      "class": "GUE",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:25:        "GUE": 0.1637341019241806,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:27:        "Poisson": 0.37703410192418063,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:36:      "class": "GUE",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:38:        "GUE": 0.07108013924144507,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:40:        "Poisson": 0.2843801392414451,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:49:      "class": "GUE",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:51:        "GUE": 0.0013531361002089293,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:53:        "Poisson": 0.21194686389979112,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:64:        "GUE": 0.033692181448734315,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:66:        "Poisson": 0.17960781855126573,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:77:        "GUE": 0.06412167049004891,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:79:        "Poisson": 0.14917832950995114,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:90:        "GUE": 0.09263337719183284,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:92:        "Poisson": 0.1206666228081672,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:103:        "GUE": 0.11916312020873215,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:105:        "Poisson": 0.09413687979126789,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:116:        "GUE": 0.14296513348744533,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:118:        "Poisson": 0.07033486651255472,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:127:      "class": "Poisson",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:129:        "GUE": 0.2041358611525424,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:131:        "Poisson": 0.009164138847457648,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:140:      "class": "Poisson",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:142:        "GUE": 0.2748295876655356,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:144:        "Poisson": 0.06152958766553557,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:153:      "class": "Poisson",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:155:        "GUE": 0.3640777020486299,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:157:        "Poisson": 0.15077770204862984,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:166:      "class": "Poisson",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:168:        "GUE": 0.43564800784619784,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:170:        "Poisson": 0.22234800784619782,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:179:      "class": "GUE",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:181:        "GUE": 0.0013531361002089293,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:183:        "Poisson": 0.21194686389979112,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:192:      "class": "GUE",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:194:        "GUE": 0.015680728701978786,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:196:        "Poisson": 0.19761927129802126,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:205:      "class": "GUE",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:207:        "GUE": 0.029241086644125502,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:209:        "Poisson": 0.18405891335587454,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:220:        "GUE": 0.04273384302801908,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:222:        "Poisson": 0.17056615697198096,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:233:        "GUE": 0.05567668696247785,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:235:        "Poisson": 0.1576233130375222,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:246:        "GUE": 0.06821895426251079,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:248:        "Poisson": 0.14508104573748926,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:259:        "GUE": 0.08041041520559711,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:261:        "Poisson": 0.13288958479440294,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:272:        "GUE": 0.09263337719183284,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:274:        "Poisson": 0.1206666228081672,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:285:        "GUE": 0.10444251980628838,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:287:        "Poisson": 0.10885748019371166,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:298:        "GUE": 0.11551666300995106,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:300:        "Poisson": 0.09778333699004899,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:311:        "GUE": 0.12622818756544568,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:313:        "Poisson": 0.08707181243455436,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:324:        "GUE": 0.1363444703271271,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:326:        "Poisson": 0.07695552967287295,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:337:        "GUE": 0.14625965183538286,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:339:        "Poisson": 0.06704034816461718,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:350:        "GUE": 0.15586954772482753,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:352:        "Poisson": 0.05743045227517252,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:361:      "class": "Poisson",
tools/data/reports/fibonacci_spectrum_20260306_1834.json:363:        "GUE": 0.16527431088573818,
tools/data/reports/fibonacci_spectrum_20260306_1834.json:365:        "Poisson": 0.04802568911426186,
tools/exp_boundary_residual_beta_absent_audit.py:75:            "domain": "numeri_primi",
tools/exp_boundary_residual_beta_absent_audit.py:81:            "domain": "random_matrix",
tools/exp_boundary_residual_beta_absent_audit.py:188:            "not_tested": "global beta grid, V_c, source GUE/Poisson label validity",
tools/exp_perturbation_dimensionality_audit.py:7:The 2026-05-06 03:30 run found that GUE spacing sequences expose a second
tools/exp_perturbation_dimensionality_audit.py:9:to one axis. That run used a short GUE sequence. This tool repeats the same
tools/exp_perturbation_dimensionality_audit.py:306:    fixed_domains = {
tools/exp_perturbation_dimensionality_audit.py:314:        "question": "Is the GUE second perturbation axis stable across independent ensembles and sample-size controls?",
tools/exp_perturbation_dimensionality_audit.py:319:        "fixed_domains": {},
tools/exp_perturbation_dimensionality_audit.py:326:    print("fixed domains")
tools/exp_perturbation_dimensionality_audit.py:327:    print(f"{'domain':<22} {'N':>7} {'rank':>7} {'PC2':>7} {'cos(adj,large)':>15}")
tools/exp_perturbation_dimensionality_audit.py:328:    for name, gaps in fixed_domains.items():
tools/exp_perturbation_dimensionality_audit.py:331:        output["fixed_domains"][name] = res
tools/exp_perturbation_dimensionality_audit.py:336:    print("\nGUE independent replicates")
tools/exp_spectral_landscape.py:3:exp_spectral_landscape.py — Map the spectral landscape across domains.
tools/exp_spectral_landscape.py:6:Identifies: GUE domains, Poisson domains, and BOUNDARY domains.
tools/exp_spectral_landscape.py:8:The question: Is the boundary between GUE and Poisson populated by multiple
tools/exp_spectral_landscape.py:9:domains, or are primes special? If boundary sequences share cascade structure,
tools/exp_spectral_landscape.py:22:N_DEFAULT = 5000  # spacings per domain
tools/exp_spectral_landscape.py:52:    """GUE: eigenvalue spacings of complex Hermitian random matrix."""
tools/exp_spectral_landscape.py:100:    """Poisson: uncorrelated exponential spacings."""
tools/exp_spectral_landscape.py:111:    """Semi-Poisson: P(s) = 4s*exp(-2s). Known intermediate statistics."""
tools/exp_spectral_landscape.py:123:    """Berry-Robnik: mixed system, fraction rho chaotic (GUE-like), 1-rho regular (Poisson).
tools/exp_spectral_landscape.py:162:    """Model for Riemann zeta zeros — Montgomery pair correlation (GUE).
tools/exp_spectral_landscape.py:163:    We use GUE directly since computing actual zeros is expensive."""
tools/exp_spectral_landscape.py:253:def run_domain(name, generator, n_spacings, n_surrogates, **kwargs):
tools/exp_spectral_landscape.py:254:    """Run observables on a domain + shuffled surrogates."""
tools/exp_spectral_landscape.py:300:    """Classify domain by <r> statistic."""
tools/exp_spectral_landscape.py:303:    GUE = 0.603
tools/exp_spectral_landscape.py:308:    elif r_mean < (GOE + GUE) / 2:
tools/exp_spectral_landscape.py:310:    elif r_mean < GUE + 0.03:
tools/exp_spectral_landscape.py:311:        return "GUE-like"
tools/exp_spectral_landscape.py:326:    domains = [
tools/exp_spectral_landscape.py:327:        # Expected GUE
tools/exp_spectral_landscape.py:328:        ("GUE_matrix", gen_gue, {}),
tools/exp_spectral_landscape.py:334:        # Expected Poisson
tools/exp_spectral_landscape.py:335:        ("Poisson", gen_poisson, {}),
tools/exp_spectral_landscape.py:342:        ("semi_Poisson", gen_semi_poisson, {}),
tools/exp_spectral_landscape.py:358:    for name, gen, kwargs in domains:
tools/exp_spectral_landscape.py:359:        res = run_domain(name, gen, N, NS, **kwargs)
tools/exp_spectral_landscape.py:369:    print("\nReference: Poisson <r>=0.386, GOE <r>=0.536, GUE <r>=0.603")
tools/exp_spectral_landscape.py:380:    for cls in ["POISSON", "BOUNDARY_low", "GOE-like", "GUE-like", "RIGID"]:
tools/exp_spectral_landscape.py:384:    # Boundary analysis — do boundary domains share structure?
tools/exp_spectral_landscape.py:391:        # Test: do boundary domains have correlated observables?
tools/exp_spectral_landscape.py:407:        # Distance to each domain
tools/data/reports/agent_20260509_1337.md:7:observables_used: [`denominator_state`, `fit_ready_rows`, `excluded_rows`, `excluded_events`, `vc_median_fit_ready`, `slope_per_N`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/dnd_research_engine.py:144:                'content': 'D-ND dynamics show GUE-like level repulsion in zero spacing (⟨r⟩≈0.84)',
tools/dnd_research_engine.py:158:            {'id': 'O2', 'content': 'GUE-like spacing in D-ND zeros', 'source': 'dnd_zeros_vs_zeta.py'},
tools/dnd_research_engine.py:277:                         f'show GUE-like level repulsion (⟨r⟩ ≈ 0.60)',
tools/dnd_research_engine.py:438:        """Test spacing statistics (GUE vs Poisson)."""
tools/dnd_research_engine.py:675:            'prediction': 'Spacing statistics at D↔ND transition show GUE-like repulsion',
tools/dnd_zeros_vs_zeta.py:18:   b. GUE eigenvalue spacings (random matrix theory)
tools/dnd_zeros_vs_zeta.py:19:   c. Poisson (random) spacings
tools/dnd_zeros_vs_zeta.py:22:If D-ND zeros match GUE/zeta: structural connection confirmed.
tools/dnd_zeros_vs_zeta.py:23:If D-ND zeros match Poisson: no connection, just noise.
tools/dnd_zeros_vs_zeta.py:123:    """Generate GUE eigenvalue spacings for comparison."""
tools/dnd_zeros_vs_zeta.py:126:        # GUE: complex Hermitian matrix with Gaussian entries
tools/dnd_zeros_vs_zeta.py:139:    """Generate Poisson (uncorrelated) spacings."""
tools/dnd_zeros_vs_zeta.py:159:    GUE: <r> ≈ 0.5996
tools/dnd_zeros_vs_zeta.py:160:    Poisson: <r> ≈ 0.3863
tools/dnd_zeros_vs_zeta.py:220:    print(f"  GUE: {len(s_gue)} spacings")
tools/dnd_zeros_vs_zeta.py:221:    print(f"  Poisson: {len(s_poisson)} spacings")
tools/dnd_zeros_vs_zeta.py:227:    print(f"{'Distribution':<25} {'<r>':<8} {'KS vs zeta':<12} {'p-value':<12} {'KS vs GUE':<12} {'p vs GUE':<12}")
tools/dnd_zeros_vs_zeta.py:249:    print(f"{'GUE (RMT)':<25} {r_gue:<8.4f} {ks_gg:<12.4f} {p_gg:<12.4e} {'---':<12} {'---':<12}")
tools/dnd_zeros_vs_zeta.py:254:    print(f"{'Poisson (random)':<25} {r_poisson:<8.4f} {ks_pz:<12.4f} {p_pz:<12.4e} {ks_pg:<12.4f} {p_pg:<12.4e}")
tools/dnd_zeros_vs_zeta.py:262:    print(f"\nReference values: GUE <r> ≈ 0.5996 | Poisson <r> ≈ 0.3863")
tools/dnd_zeros_vs_zeta.py:325:    ax3.hist(s_gue, bins=bins, density=True, alpha=0.3, label='GUE (RMT)', color='green')
tools/dnd_zeros_vs_zeta.py:326:    ax3.hist(s_poisson, bins=bins, density=True, alpha=0.3, label='Poisson', color='gray')
tools/dnd_zeros_vs_zeta.py:347:    labels = ['Zeta', 'GUE', 'Poisson', 'Synth']
tools/dnd_zeros_vs_zeta.py:358:    ax5.axhline(0.5996, color='green', linestyle='--', linewidth=1, label='GUE expected')
tools/dnd_zeros_vs_zeta.py:359:    ax5.axhline(0.3863, color='gray', linestyle='--', linewidth=1, label='Poisson expected')
tools/dnd_zeros_vs_zeta.py:361:    ax5.set_title('Spacing Ratio Statistic\n(GUE ≈ 0.60, Poisson ≈ 0.39)')
tools/dnd_zeros_vs_zeta.py:396:    # Determine if D-ND is closer to GUE/zeta or Poisson
tools/dnd_zeros_vs_zeta.py:413:        print(f"  Distance to GUE: {gue_dist:.4f}")
tools/dnd_zeros_vs_zeta.py:414:        print(f"  Distance to Poisson: {poisson_dist:.4f}")
tools/dnd_zeros_vs_zeta.py:418:            print(f"\n  → D-ND zeros are CLOSER TO GUE/ZETA than to random")
tools/data/reports/report_20260329_0343.md:17:- [✓] C1: Zeri zeta hanno spacing GUE (non Poisson)... → spacing=GUE-like, ⟨r⟩=0.6150
tools/data/reports/report_20260329_0343.md:22:- [✗] N2: Rule 30/110 hanno spacing >> GUE standard... → ⟨r⟩=0.6344 (GUE standard=0.60)
tools/data/reports/report_20260329_0343.md:25:- logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like
tools/data/reports/report_20260329_0343.md:26:- coupled_oscillators_var_50: r=1.0, spacing=Poisson-like
tools/data/reports/report_20260329_0343.md:27:- brownian_motion_var_0.3: r=1.3557126030624262, spacing=Poisson-like
tools/data/reports/report_20260329_0343.md:28:- logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like
tools/lab_falsifier.py:81:Un pattern in distribuzioni classiche (primi, GUE, random walk, Markov chain, gap statistics) probabilmente ha un nome. Default hypothesis: re-discovery / caso limite di teorema noto. Taggare come "NEW" senza riconoscere il risultato classico piu' vicino (es. Lemke Oliver–Soundararajan per prime gaps mod q) e' beauty bias. Flag.
tools/lab_falsifier.py:106:GUE/Poisson, flagga il drift. La deviazione e' ammessa solo se dichiarata come
tools/data/reports/falsifier_20260514_1649.json:10:      "evidence": "La lente L6 richiede che la contaminazione cognitiva nomini almeno una voce CE-*, YSN, Cornelius, KSAR, PVI/Vault usata nella combo, oppure dichiari 'CE-none:' con motivo specifico. Nel report fornito compaiono A2, A9, A11, ponte QxG, graph completion 16:40 e direzione BOUNDARY GUE/Poisson, ma nessun metabolizzatore cognitivo esplicito.",
tools/dnd_experiments.py:225:# ESPERIMENTO 2: Boundary GUE/Poisson — Il terzo incluso
tools/dnd_experiments.py:230:    Testa H_boundary: esiste una transizione GUE→Poisson
tools/dnd_experiments.py:240:    print("ESPERIMENTO: Boundary GUE/Poisson (Ising T-sweep)")
tools/dnd_experiments.py:372:    print("ESPERIMENTO: Boundary GUE/Poisson (Logistica r-sweep)")
tools/dnd_experiments.py:481:# ESPERIMENTO 3: Order parameter — r_diretto separa GUE/Poisson?
tools/dnd_experiments.py:487:    che separa GUE da Poisson?
tools/dnd_experiments.py:490:    - Domini GUE hanno r_diretto in un range
tools/dnd_experiments.py:491:    - Domini Poisson hanno r_diretto in un altro range
tools/dnd_experiments.py:506:    domains = [(e['dominio'], e.get('spacing_r', 0), e.get('r_diretto', 0), e.get('spacing', ''))
tools/dnd_experiments.py:510:    if len(domains) < 5:
tools/dnd_experiments.py:513:    # Classifica GUE vs Poisson (soglia standard: 0.53)
tools/dnd_experiments.py:514:    GUE_THRESHOLD = 0.53
tools/dnd_experiments.py:515:    gue = [(d, sp, r) for d, sp, r, _ in domains if sp > GUE_THRESHOLD]
tools/dnd_experiments.py:516:    poisson = [(d, sp, r) for d, sp, r, _ in domains if sp <= GUE_THRESHOLD]
tools/dnd_experiments.py:518:    print(f"\n  GUE ({len(gue)} domini):")
tools/dnd_experiments.py:522:    print(f"\n  Poisson ({len(poisson)} domini):")
tools/dnd_experiments.py:546:        print(f"  r_diretto GUE:     {mean_gue:.4f} ± {std_gue:.4f}  range=[{gue_range[0]:.4f}, {gue_range[1]:.4f}]")
tools/dnd_experiments.py:547:        print(f"  r_diretto Poisson: {mean_poisson:.4f} ± {std_poisson:.4f}  range=[{poisson_range[0]:.4f}, {poisson_range[1]:.4f}]")
tools/dnd_experiments.py:549:        print(f"  r_diretto SEPARA GUE/Poisson: {'SÌ' if separates else 'NO'}")
tools/dnd_experiments.py:1020:    fixed_domains = ['numeri_primi', 'zeta_zeros', 'random_matrix',
tools/dnd_experiments.py:1024:    for dom in fixed_domains:
tools/dnd_experiments.py:1031:                # Per spacings (zeta, GUE): il segnale È gli intervalli
tools/dnd_experiments.py:1061:    for domain, data in all_cv_profiles.items():
tools/dnd_experiments.py:1078:        cv_at_critical[domain] = {
tools/dnd_experiments.py:1085:        print(f"\n  {domain}:")
tools/dnd_experiments.py:1102:    for domain, data in cv_at_critical.items():
tools/dnd_experiments.py:1103:        print(f"    {domain}: {data['cv_max']:.4f}")
tools/dnd_experiments.py:1141:        'fixed_domains': fixed_cvs,
tools/dnd_banchi.py:371:        'desc': '<r> ratio statistic (0.386=Poisson, 0.530=GOE, 0.599=GUE)',
tools/exp_semireal_boundary_transfer_gate.py:8:The coherent endpoint is the domain-native spacing order reconstructed from
tools/exp_semireal_boundary_transfer_gate.py:23:from exp_boundary_blank_null_audit import generate_domain_signal, normalized_spacings
tools/exp_semireal_boundary_transfer_gate.py:40:def row_spacings(domain: str) -> np.ndarray:
tools/exp_semireal_boundary_transfer_gate.py:41:    signal, metadata = generate_domain_signal(domain)
tools/exp_semireal_boundary_transfer_gate.py:42:    if domain == "numeri_primi":
tools/exp_semireal_boundary_transfer_gate.py:96:        domain = source["domain"]
tools/exp_semireal_boundary_transfer_gate.py:97:        name = source["domain_window"]
tools/exp_semireal_boundary_transfer_gate.py:99:            spacings = row_spacings(domain)
tools/exp_semireal_boundary_transfer_gate.py:106:                source_meta["source_domain_type"] = source.get("source_domain_type")
tools/exp_semireal_boundary_transfer_gate.py:115:                    build_errors[name]["source_domain_type"] = source.get("source_domain_type")
tools/exp_semireal_boundary_transfer_gate.py:119:            perimeters[name]["source"].update({"domain": domain, **source_meta})
tools/exp_semireal_boundary_transfer_gate.py:127:                build_errors[name]["source_domain_type"] = source.get("source_domain_type")
tools/exp_semireal_boundary_transfer_gate.py:144:                "source_domain_type included as audit metadata only"
tools/exp_semireal_boundary_transfer_gate.py:146:                else "source_domain_type omitted; states are label-independent"
tools/exp_semireal_boundary_transfer_gate.py:196:        help="Include GUE/Poisson source labels as audit metadata only. Default omits them from output.",
tools/data/reports/agent_20260506_1955.md:13:This run therefore does not test perturbation dimensionality. It asks a cross-domain META question:
tools/data/reports/agent_20260506_1955.md:15:> When the five canonical observables are measured under uniform partial shuffle, does observable collinearity break in structured domains, or only in controls where original-vs-shuffle denominators are weak?
tools/data/reports/agent_20260506_1955.md:24:- added `prime_shuffle` as a control domain;
tools/data/reports/agent_20260506_1955.md:28:- domains: first prime gaps, prime-shuffle control, independent GUE spacings, iid Poisson spacings;
tools/data/reports/agent_20260506_1955.md:41:| GUE | 0.990 | 1.060 | 0.989 | 0 | SR=-2.9, SR2=+14.5, L1=+13.2, L2=+31.7, triple_var=+23.8 |
tools/data/reports/agent_20260506_1955.md:42:| Poisson | 0.625 | 2.368 | 0.609 | 5 | all abs(z) <= 1.9 |
tools/data/reports/agent_20260506_1955.md:50:| GUE | 0.980 | 1.106 | 0.977 | 0.33 |
tools/data/reports/agent_20260506_1955.md:51:| Poisson | 0.714 | 2.196 | 0.572 | 5.00 |
tools/data/reports/agent_20260506_1955.md:55:1. **Structured domains compress the five canonical retention curves to one dominant coordinate in this perimeter.** Primes and GUE both have PC1 > 0.93 on average and effective rank close to 1. This does not say the domains are the same; it says uniform partial shuffle moves the canonical observables along one dominant retention mode.
tools/data/reports/agent_20260506_1955.md:57:2. **Observed collinearity breaking is concentrated in weak-denominator controls.** Poisson has the highest apparent rank among the three-run means (`2.196`), but all five observables are weak against full shuffle in every run. Prime-shuffle behaves similarly: rank is unstable and 4-5 of 5 observables are weak. This mirrors the denominator lesson from perturbation rank without repeating the perturbation-rank experiment.
tools/data/reports/agent_20260506_1955.md:59:3. **The 05-05 observable-rank result survives only after narrowing its language.** The valid statement is not "five probes are always one thing." The scoped statement is: under uniform partial shuffle and canonical observables, primes and GUE show a dominant one-coordinate retention response; controls can show larger PCA rank, but that rank is not structural when the original-vs-shuffle denominators are absent.
tools/data/reports/agent_20260506_1955.md:61:4. **GUE is the cleanest conditioning check.** In the main run, all five GUE observables pass the denominator gate and still give rank `1.060`. This makes GUE the best positive control for "low rank despite valid denominators." Poisson is the negative control for "high rank without valid denominators."
tools/data/reports/agent_20260506_1955.md:66:> observables_registry version + canonical observable list + original-vs-shuffle z per observable + control domains.
tools/data/reports/agent_20260506_1955.md:68:In this perimeter, high observable-rank is not the sign of richer structure when it appears in Poisson or prime-shuffle controls; it is a warning that retention ratios are being formed on weak denominators. The stable cross-domain result is narrower:
tools/data/reports/agent_20260506_1955.md:70:> uniform partial shuffle exposes one dominant retention coordinate in conditioned structured domains (primes, GUE), while apparent multi-coordinate behavior in Poisson/shuffle controls is denominator-weak.
tools/data/reports/agent_20260506_1955.md:73:What opens now: the next non-redundant test is not another PCA audit. It is **selective operator coupling**: use perturbations that act separately on pair-scale and triple-scale structure, but report only observables whose denominator gate survives. If selective operators rotate primes while GUE stays collinear, the lab gets a real cross-domain discriminator; if both stay collinear, the current observable suite is overcomplete for this question.
tools/exp_boundary_growth.py:13:  - GUE (correlated): <r> ~ 0.5307
tools/exp_boundary_growth.py:14:  - Poisson (uncorrelated): <r> ~ 0.3863
tools/exp_boundary_growth.py:158:    # Key question: do primes approach GUE or Poisson at large scale?
tools/exp_boundary_growth.py:159:    GUE_R = 0.5307
tools/exp_boundary_growth.py:165:    print(f"GUE reference: {GUE_R}")
tools/exp_boundary_growth.py:166:    print(f"Poisson reference: {POISSON_R}")
tools/exp_boundary_growth.py:167:    print(f"Position: {'closer to GUE' if abs(r_large - GUE_R) < abs(r_large - POISSON_R) else 'closer to Poisson'}")
tools/exp_boundary_two_axis_matrix.py:6:does not use GUE/Poisson source labels: it only reads transfer support and beta
tools/exp_boundary_two_axis_matrix.py:107:        "question": "Separate support_transfer from beta_coordinate_transfer on the 13 semi-real BOUNDARY rows without using GUE/Poisson labels.",
tools/exp_boundary_two_axis_matrix.py:120:        "label_policy": "GUE/Poisson source labels are not read by this operator.",
tools/exp_endpoint_gated_rp_boundary.py:5:This cycle starts from the closed GUE/Poisson endpoint gate and only then asks
tools/exp_endpoint_gated_rp_boundary.py:85:    d_gue = distances["GUE"]
tools/exp_endpoint_gated_rp_boundary.py:86:    d_poisson = distances["Poisson"]
tools/exp_endpoint_gated_rp_boundary.py:232:            "operator": "calibrate GUE/Poisson endpoint centroids; score RP rows by balanced distance to both endpoint centroids; compare to feature-scrambled RP rows",
tools/exp_endpoint_gated_rp_boundary.py:233:            "generator": "GUE matrices, Poisson exponential spacings, RP H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE",
tools/data/reports/agent_20260509_1556.md:7:observables_used: [`SR`, `SR2`, `L1`, `L2`, `triple_var`, `extension_state`, `after_one_sided`, `after_beta`, `after_support_tier`, `endpoint_distance_one_sided_gated`] - osservabili canonici piu' stati domain-native di audit.  
tools/data/reports/agent_20260509_1556.md:9:**observable_contract**: claim=`blank_thin_support` sopravvive solo se, dopo estensione del denominatore sorgente, resta supporto vivo sottile senza beta chart; observable=gate canonico one-sided + beta chart sulle tre righe short; operator=`exp_boundary_short_denominator_extension.py`; generator=`source-denominator extension` per `percolation`, `random_matrix`, `zeta_zeros`; denominator=3 righe short del report 15:48, estese a `n_gaps=1024`; non_possible=promuovere `blank_thin_support` se il supporto cade, si ispessisce o recupera beta; not_tested=redesign globale 13 righe, fit `V_c`, validita' della label GUE/Poisson sorgente.
tools/data/reports/agent_20260509_1556.md:25:- `not_drift`: non torna a `V_c`, non cambia tensione, non usa label GUE/Poisson come decision field; modifica solo il denominatore delle tre righe short.
tools/data/reports/agent_20260509_1556.md:40:- Label policy: i nomi riga selezionano il perimetro short; le label GUE/Poisson non entrano nel decision field.
tools/data/reports/agent_20260509_1556.md:98:- **L3 no silent patching**: l'estensione cambia il generatore operativo in modo dichiarato: percolation site samples, GUE block spacings, zeta zeros first spacings.
tools/dnd_paper_refactor.py:387:            "chain": "|NT⟩ → closure → det=-1 → φ → GUE → differentiated reality",
tools/dnd_occhio.py:197:        for const, domains in shared.items():
tools/dnd_occhio.py:198:            if len(domains) >= 2:
tools/dnd_occhio.py:200:                    'type': 'cross_domain_operator',
tools/dnd_occhio.py:202:                    'domains': domains,
tools/dnd_occhio.py:203:                    'note': f"La costante {const} appare in {len(domains)} domini: {', '.join(domains)}. Potrebbe servire un operatore che li connette."
tools/dnd_occhio.py:246:            'context': 'Zero signature across domains — phi-crossings CV analysis',
tools/exp_endpoint_stability_filter.py:3:Endpoint stability filter for the GUE/Poisson boundary direction.
tools/exp_endpoint_stability_filter.py:84:                "GUE": gue_gaps(n, args.reps, seed + n * 1009, args.central_fraction),
tools/exp_endpoint_stability_filter.py:85:                "Poisson": poisson_gaps(n, args.reps, seed + n * 1013, args.central_fraction),
tools/exp_endpoint_stability_filter.py:132:    other_label = "Poisson" if row["source_type"] == "GUE" else "GUE"
tools/exp_endpoint_stability_filter.py:207:    for source_type in ("GUE", "Poisson"):
tools/exp_endpoint_stability_filter.py:248:        "question": "Do GUE and Poisson remain endpoint-stable under the reader family before RP boundary residue is tested again?",
tools/exp_endpoint_stability_filter.py:275:            "claim": "GUE/Poisson endpoints are valid filters for the boundary if both poles stay stable across reader/window/size/seed stress under a calibrated endpoint classifier",
tools/exp_endpoint_stability_filter.py:277:            "operator": "calibrate endpoint centroids on held-out GUE/Poisson controls, then stress test readers on independent seeds",
tools/exp_endpoint_stability_filter.py:278:            "generator": "GUE matrices and Poisson exponential spacings",
tools/exp_endpoint_stability_filter.py:279:            "denominator": "domain x size x test seed source rows; each source row contains all readers",
tools/data/reports/agent_20260423_0330.md:8:> The boundary between GUE and Poisson regimes should affect the two-channel decomposition. If gap correlations decay with prime scale (Brody β → 0), does the Markov-3 ordering information in the residue channel also decay?
tools/data/reports/agent_20260423_0330.md:11:How does the Markov-3 ordering fraction (the 55% sequential information found by the shuffle audit) change as a function of prime scale? Does it track the GUE→Poisson drift measured by the Brody parameter?
tools/data/reports/agent_20260423_0330.md:19:- **Additional metrics**: Brody β (GUE/Poisson indicator), lag-1 ACF
tools/data/reports/agent_20260423_0330.md:58:2. **Brody β decays 5x faster toward Poisson.** β drops from 0.42 to 0.29 over the same range (R²=0.72). Gap-level correlations (the GUE signature) decorrelate with scale. But this decorrelation does NOT propagate into the mod-6 sequential memory.
tools/data/reports/agent_20260423_0330.md:69:The BOUNDARY tension (GUE→Poisson) operates in the magnitude channel (gap correlations, Brody β). It does NOT operate in the residue channel (Markov-3 memory). The two-channel decomposition separates scale-dependent structure from scale-invariant structure. This is a structural result: the "boundary" lives in one channel, not both.
tools/data/reports/agent_20260423_0330.md:71:Constraint: future BOUNDARY experiments should distinguish which channel they're measuring. The GUE/Poisson transition is a gap-level phenomenon; the residue channel is immune to it.
tools/data/reports/agent_20260423_0330.md:78:- **Campo di possibilita**: qui diventa possibile separare le proprieta del gap dei primi in scala-dipendenti (che decadono con PNT) e scala-invarianti (che sono vincoli permanenti). Qui diventa non-possibile usare il drift GUE→Poisson per predire il comportamento del canale residuo — sono strutturalmente disaccoppiati.
tools/data/reports/agent_20260430_1905.md:1:# Agent Report — Observable Coherence at the GUE-Poisson Boundary: Primes Are Not "Between" — They Are Dipolar
tools/data/reports/agent_20260430_1905.md:9:> Do different observables agree on WHERE primes sit between GUE and Poisson?
tools/data/reports/agent_20260430_1905.md:15:Five independent observables each place prime gaps on a τ ∈ [0,1] scale where 0 = Poisson and 1 = GUE. Do these five τ values cluster tightly (coherent — one underlying quantity) or spread apart (incoherent — genuinely independent measurements)?
tools/data/reports/agent_20260430_1905.md:22:- **Each normalized** to τ ∈ [0,1] using analytic Poisson and GUE reference values
tools/data/reports/agent_20260430_1905.md:25:- **References**: pure GUE from 50 random Hermitian matrices, pure Poisson from exponential draws
tools/data/reports/agent_20260430_1905.md:29:### τ values (0 = Poisson, 1 = GUE)
tools/data/reports/agent_20260430_1905.md:54:| spacing_ratio | **−0.125** | **Ordering pushes toward Poisson** |
tools/data/reports/agent_20260430_1905.md:55:| lag1_acf | **+0.200** | **Ordering pushes toward GUE** |
tools/data/reports/agent_20260430_1905.md:70:2. **The two ordering-sensitive observables form a dipole.** Spacing ratio is pushed TOWARD Poisson by ordering (Δτ = −0.12), while lag-1 autocorrelation is pushed TOWARD GUE (Δτ = +0.20). The same physical phenomenon — consecutive gap anticorrelation (Lemke Oliver-Soundararajan type) — manifests as Poisson in one measure and GUE in another. Primes are not "between" GUE and Poisson on a single axis. They are dipolar: GUE in correlation structure, Poisson in consecutive ratio behavior.
tools/data/reports/agent_20260430_1905.md:74:4. **Universal Poisson drift confirmed.** All five τ values decrease with scale (Δτ ≈ −0.14 to −0.19 from 10⁴ to 5·10⁶). This confirms the Brody flow finding from the previous run. The drift rate is roughly constant per observable, suggesting a single underlying process.
tools/data/reports/agent_20260430_1905.md:80:**NEW (dipolar ordering signature) + CONSTRAINT on META + CONFIRMED (Poisson drift)**
tools/data/reports/agent_20260430_1905.md:84:- **BOUNDARY**: the boundary is not a point on a one-dimensional axis between GUE and Poisson. It is a two-dimensional structure: one axis for distribution (all observables agree), one axis for ordering (the dipole between spacing_ratio and lag1_acf). The terzo incluso is the dipole — it doesn't interpolate between GUE and Poisson, it has a structure that neither has.
tools/data/reports/agent_20260430_1905.md:90:- **Due radici** (dipolo primario): spacing_ratio (ordering → Poisson) and lag1_acf (ordering → GUE). The same phenomenon — consecutive gap anticorrelation — is seen as repulsion by one observable and as correlation by the other. The two faces are structurally inverted: one says "more random" where the other says "more structured."
tools/data/reports/agent_20260430_1905.md:94:- **Invariante di passaggio**: the 2x coherence enhancement. Across all 4 scales, prime ordering makes observables agree more (std ratio ≈ 0.5). This ratio is scale-invariant even as all τ values drift toward Poisson.
tools/data/reports/agent_20260430_1905.md:96:- **Campo di possibilità**: possibile → characterize prime ordering as a 2D vector (spacing_ratio shift, lag1_acf shift) rather than a single GUE-Poisson interpolation parameter. Non-possibile → reduce prime ordering to a single β value and claim it captures the structure.
tools/exp_boundary_shuffle_audit.py:2:exp_boundary_shuffle_audit.py — Is the GUE/Poisson classification tautological?
tools/exp_boundary_shuffle_audit.py:4:Question: Does the r-statistic (nearest-neighbor spacing ratio) of each domain
tools/exp_boundary_shuffle_audit.py:8:  For each domain, compute:
tools/exp_boundary_shuffle_audit.py:16:Domains: primes, zeta zeros, random matrix (GUE), Fibonacci spectrum,
tools/exp_boundary_shuffle_audit.py:17:         logistic map, Poisson, coupled oscillators, percolation,
tools/exp_boundary_shuffle_audit.py:83:    """GUE random matrices — eigenvalue spacings."""
tools/exp_boundary_shuffle_audit.py:100:    """Poisson process — exponential spacings."""
tools/exp_boundary_shuffle_audit.py:238:R_GUE = 0.5307  # 4 - 2√3 ≈ 0.5359 for GOE; for GUE: 2π/(3√3 + 4π/3) ≈ 0.5307 approx
tools/exp_boundary_shuffle_audit.py:244:    'gue':                 ('GUE random matrix',          gen_gue_eigenvalues),
tools/exp_boundary_shuffle_audit.py:245:    'poisson':             ('Poisson process',            gen_poisson),
tools/exp_boundary_shuffle_audit.py:275:            dist_gue = abs(res['r_original'] - R_GUE)
tools/exp_boundary_shuffle_audit.py:277:            res['class_original'] = 'GUE' if dist_gue < dist_poi else 'Poisson'
tools/exp_boundary_shuffle_audit.py:279:            dist_gue_s = abs(res['r_shuffled_mean'] - R_GUE)
tools/exp_boundary_shuffle_audit.py:281:            res['class_shuffled'] = 'GUE' if dist_gue_s < dist_poi_s else 'Poisson'
tools/exp_boundary_shuffle_audit.py:308:    print(f"  SUMMARY: GUE/Poisson Classification Shuffle Audit")
tools/exp_boundary_shuffle_audit.py:336:    print(f"\n  R_GUE = {R_GUE:.4f}, R_Poisson = {R_POISSON:.4f}")
tools/exp_boundary_shuffle_audit.py:355:        'reference': {'R_GUE': R_GUE, 'R_Poisson': R_POISSON},
tools/exp_boundary_shuffle_audit.py:356:        'domains': results,
tools/exp_acf_range_universality.py:3:exp_acf_range_universality.py — ACF decay structure across domains.
tools/exp_acf_range_universality.py:11:Domains: primes, GUE, GOE, Poisson, primes_shuffled.
tools/exp_acf_range_universality.py:69:def generate_rmt_spacings(N, n_mat, ensemble='GUE'):
tools/exp_acf_range_universality.py:74:        if ensemble == 'GUE':
tools/exp_acf_range_universality.py:162:    # PART B: Cross-domain comparison
tools/exp_acf_range_universality.py:164:    print(f"\n=== PART B: Cross-domain ACF (lags 1-{args.max_lag_other}) ===")
tools/exp_acf_range_universality.py:169:    print("Generating GUE spacings...")
tools/exp_acf_range_universality.py:170:    gue_gaps = generate_rmt_spacings(N_rmt, n_mat_rmt, 'GUE')
tools/exp_acf_range_universality.py:179:    domains = {
tools/exp_acf_range_universality.py:182:        'GUE': gue_gaps,
tools/exp_acf_range_universality.py:184:        'Poisson': poisson_gaps,
tools/exp_acf_range_universality.py:194:    for name, g in domains.items():
tools/exp_acf_range_universality.py:323:        'cross_domain': cross_results,
tools/exp_quasiperiodic_gap_ratio_denominator.py:83:    domains = {
tools/exp_quasiperiodic_gap_ratio_denominator.py:98:                for name, theta in domains.items():
tools/exp_quasiperiodic_gap_ratio_denominator.py:102:                    rows.append({"domain": name, **condition, **obs})
tools/exp_quasiperiodic_gap_ratio_denominator.py:109:                    rows.append({"domain": "balanced_random", "trial": trial, **condition, **obs})
tools/exp_quasiperiodic_gap_ratio_denominator.py:116:                        "domain": "_matched_comparison",
tools/exp_quasiperiodic_gap_ratio_denominator.py:125:    by_domain = {}
tools/exp_quasiperiodic_gap_ratio_denominator.py:126:    for domain in sorted({r["domain"] for r in rows if not r["domain"].startswith("_")}):
tools/exp_quasiperiodic_gap_ratio_denominator.py:127:        subset = [r for r in rows if r["domain"] == domain]
tools/exp_quasiperiodic_gap_ratio_denominator.py:128:        by_domain[domain] = {
tools/exp_quasiperiodic_gap_ratio_denominator.py:134:    comparisons = [r for r in rows if r["domain"] == "_matched_comparison"]
tools/exp_quasiperiodic_gap_ratio_denominator.py:151:        "summary": by_domain,
tools/data/reports/agent_20260421_0330.md:95:This constrains META: residue channel tests pass because they test robust algebraic properties of Z/6Z structure, not because they're tautological. The real discriminant for C1 (primes as unique domain) lives in the magnitude channel.
tools/exp_dipolar_crossover.py:3:exp_dipolar_crossover.py — Topology of the GUE-Poisson transition in the dipolar plane.
tools/exp_dipolar_crossover.py:5:Question: As ordering is gradually destroyed (GUE → shuffled), does the dipolar
tools/exp_dipolar_crossover.py:10:  1. Generate GUE bulk spacings from random matrices
tools/exp_dipolar_crossover.py:14:     - Leave the rest in original (GUE) order
tools/exp_dipolar_crossover.py:19:If primes sit on the curve → they're "partially disordered GUE"
tools/exp_dipolar_crossover.py:33:    """Generate bulk spacings from GUE matrices."""
tools/exp_dipolar_crossover.py:98:    print(f"Generating GUE spacings: {n_matrices} matrices of size {N_mat}...")
tools/exp_dipolar_crossover.py:101:    # GUE baseline (alpha=0)
tools/exp_dipolar_crossover.py:214:        "GUE_baseline": {"SR": float(sr0), "L1": float(l1_0)},
tools/LAB_OPERATOR_PALETTE.md:19:- Non partire da phi, gap label, GUE o Poisson se sono gia' nel ciclo
tools/LAB_OPERATOR_PALETTE.md:276:- GUE;
tools/LAB_OPERATOR_PALETTE.md:279:- Poisson;
tools/LAB_OPERATOR_PALETTE.md:299:- Poisson synthetic;
tools/LAB_OPERATOR_PALETTE.md:300:- GUE synthetic;
tools/LAB_OPERATOR_PALETTE.md:307:- GUE/Poisson e' spesso un piano di proiezione, non una sorgente. Se diventa
tools/LAB_OPERATOR_PALETTE.md:421:- domain wall;
tools/LAB_OPERATOR_PALETTE.md:546:GUE/Poisson/non-phi.
tools/LAB_OPERATOR_PALETTE.md:553:- Punto-zero: confine prima che venga classificato GUE o Poisson.
tools/exp_prime_sr_persistent_boundary.py:219:            "generator": "prime gaps from dnd_autoricerca row_spacings and direct sieve; controls from composite gaps, mod6 candidates, Cramer-like events, GUE random matrix blocks, logistic return intervals",
tools/exp_prime_sr_persistent_boundary.py:220:            "denominator": "8 prime row-local windows plus 20 non-prime controls (3 deterministic families x 4 offsets + 4 stochastic GUE/logistic cases each by default)",
tools/exp_prime_sr_persistent_boundary.py:222:            "not_tested": "global beta atlas, V_c, gap_ratio, source GUE/Poisson labels, analytic origin of SR",
tools/exp_nonphi_sturmian_fixed_reader_gate.py:36:def domain_thetas() -> dict[str, float]:
tools/exp_nonphi_sturmian_fixed_reader_gate.py:118:    domains = domain_thetas()
tools/exp_nonphi_sturmian_fixed_reader_gate.py:124:                for generator, generator_theta in domains.items():
tools/exp_brody_calibration.py:6:Poisson (beta=0) to Wigner-GUE (beta=1). Gaps are i.i.d. by construction —
tools/exp_brody_calibration.py:15:Then overlay REAL domains on the calibration curve. Their deviation from the
tools/exp_brody_calibration.py:169:    # === Phase 2: Real domains ===
tools/exp_brody_calibration.py:200:    real_domains = {}
tools/exp_brody_calibration.py:206:    real_domains['primes'] = {**obs_p, 'beta_eff': beta_eff_p}
tools/exp_brody_calibration.py:211:    # GUE matrices
tools/exp_brody_calibration.py:215:    real_domains['gue_matrix'] = {**obs_g, 'beta_eff': beta_eff_g}
tools/exp_brody_calibration.py:230:    real_domains['logistic'] = {**obs_l, 'beta_eff': beta_eff_l}
tools/exp_brody_calibration.py:235:    # Poisson
tools/exp_brody_calibration.py:239:    real_domains['poisson'] = {**obs_po, 'beta_eff': beta_eff_po}
tools/exp_brody_calibration.py:252:    real_domains['coupled_osc'] = {**obs_osc, 'beta_eff': beta_eff_osc}
tools/exp_brody_calibration.py:266:    for name, obs in real_domains.items():
tools/exp_brody_calibration.py:326:    print(f"   Theory: Poisson r=0.386, GOE r=0.536")
tools/exp_brody_calibration.py:359:        'real_domains': sanitize(real_domains),
tools/data/reports/falsifier_20260515_1826.json:10:      "evidence": "`seme.json.direzione` viva è: \"Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo\". Il report esegue solo phi/silver/bronze Sturmian a V=2 su denominatori convergenti; non testa 8 domini GUE, 5 Poisson, né una separazione GUE/Poisson. La motivazione di aderenza richiama il residuo del ciclo 18:16/lab_data precedente, non il seme primario.",
tools/data/reports/falsifier_20260515_1826.json:11:      "suggestion": "Nel prossimo ciclo formulare `direction_adherence` contro `seme.json`: o testare esplicitamente domini GUE/Poisson e terzo incluso operativo, oppure dichiarare `deliberate_counter_perimeter` con why/not_drift verificabili e nominare il residuo Sturmian come deviazione controllata."
tools/data/reports/falsifier_20260515_1826.json:14:  "summary": "Il report è internamente coerente sui dati Sturmian, ma si rompe su L8: dichiara aderenza alla direzione viva mentre lavora il residuo Sturmian precedente invece del confine 8 GUE / 5 Poisson richiesto dal seme."
tools/exp_photonic_boundary_third_included_gate.py:5:This tool projects the GUE/Poisson boundary direction into a physical return:
tools/exp_photonic_boundary_third_included_gate.py:6:a 1D dielectric multilayer. It does not classify the optical spectrum as GUE or
tools/exp_photonic_boundary_third_included_gate.py:7:Poisson. It asks whether the boundary survives as an intermediate transmission
tools/exp_photonic_boundary_third_included_gate.py:115:def aggregate(rows: list[dict[str, Any]], domain: str) -> dict[str, Any]:
tools/exp_photonic_boundary_third_included_gate.py:116:    subset = [row for row in rows if row["domain"] == domain]
tools/exp_photonic_boundary_third_included_gate.py:143:def median_metric(summary: dict[str, Any], domain: str, metric: str) -> float | None:
tools/exp_photonic_boundary_third_included_gate.py:144:    value = summary.get(domain, {}).get(metric, {})
tools/exp_photonic_boundary_third_included_gate.py:154:    domains = {
tools/exp_photonic_boundary_third_included_gate.py:165:            for domain, theta in domains.items():
tools/exp_photonic_boundary_third_included_gate.py:169:                    "domain": domain,
tools/exp_photonic_boundary_third_included_gate.py:179:                "domain": "periodic_ab",
tools/exp_photonic_boundary_third_included_gate.py:191:                    "domain": "balanced_random_phi_density",
tools/exp_photonic_boundary_third_included_gate.py:199:    summary = {domain: aggregate(rows, domain) for domain in sorted({row["domain"] for row in rows})}
tools/exp_photonic_boundary_third_included_gate.py:273:        "summary_domains": {
tools/exp_photonic_boundary_third_included_gate.py:274:            domain: {
tools/exp_photonic_boundary_third_included_gate.py:280:            for domain, row in output["summary"].items()
tools/exp_dipolar_angle_reference.py:3:exp_dipolar_angle_reference.py — Dipolar angle of GUE, Poisson, and primes
tools/exp_dipolar_angle_reference.py:6:1. Pure GUE eigenvalue spacings (GOE/GUE unfolded)
tools/exp_dipolar_angle_reference.py:7:2. Pure Poisson (exponential iid)
tools/exp_dipolar_angle_reference.py:13:unique or just a position on the GUE-Poisson continuum?
tools/exp_dipolar_angle_reference.py:80:    """Generate gaps from GUE eigenvalues (unfolded)."""
tools/exp_dipolar_angle_reference.py:83:        # GUE: complex Hermitian random matrix
tools/exp_dipolar_angle_reference.py:116:    """Generate iid exponential gaps (Poisson process)."""
tools/exp_dipolar_angle_reference.py:153:    # 2. GUE
tools/exp_dipolar_angle_reference.py:154:    print(f"Generating GUE gaps (n_trials={n_trials})...")
tools/exp_dipolar_angle_reference.py:163:            print(f"  GUE trial {t+1}/{n_trials}: theta = {theta:.1f}")
tools/exp_dipolar_angle_reference.py:165:    results['GUE'] = {
tools/exp_dipolar_angle_reference.py:171:    print(f"  GUE: theta = {np.mean(gue_thetas):.1f} +/- {np.std(gue_thetas):.1f} deg")
tools/exp_dipolar_angle_reference.py:193:    # 4. Poisson
tools/exp_dipolar_angle_reference.py:194:    print(f"Generating Poisson gaps (n_trials={n_trials})...")
tools/exp_dipolar_angle_reference.py:203:            print(f"  Poisson trial {t+1}/{n_trials}: theta = {theta:.1f}")
tools/exp_dipolar_angle_reference.py:205:    results['Poisson'] = {
tools/exp_dipolar_angle_reference.py:211:    print(f"  Poisson: theta = {np.mean(poi_thetas):.1f} +/- {np.std(poi_thetas):.1f} deg")
tools/exp_dipolar_angle_reference.py:240:    print(f"{'GUE':<12} {results['GUE']['theta_mean']:>7.1f} +/- {results['GUE']['theta_std']:>5.1f}  {results['GUE']['SR_mean']:<10.4f} {results['GUE']['L1_mean']:<10.4f}")
tools/exp_dipolar_angle_reference.py:242:    print(f"{'Poisson':<12} {results['Poisson']['theta_mean']:>7.1f} +/- {results['Poisson']['theta_std']:>5.1f}  {results['Poisson']['SR_mean']:<10.4f} {results['Poisson']['L1_mean']:<10.4f}")
tools/exp_dipolar_angle_reference.py:247:    for name in ['GUE', 'GOE', 'Poisson', 'Cramer']:
tools/lab_bias_corrector.py:83:### Three lenses (tied to D-ND axioms — domain-agnostic)
tools/lab_bias_corrector.py:180:    (single domain: physics).
tools/lab_bias_corrector.py:365:        "domain": "MM_D-ND_physics",
tools/exp_boundary_bridge_stability_audit.py:5:The audit keeps the 13 row-aligned GUE/Poisson denominator and reruns the graph
tools/exp_boundary_bridge_stability_audit.py:47:    return {row["domain_window"]: row for row in rows}
tools/exp_boundary_bridge_stability_audit.py:65:    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
tools/exp_boundary_bridge_stability_audit.py:67:    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
tools/exp_boundary_bridge_stability_audit.py:82:                    gaps = gap_cache[source["domain_window"]]
tools/exp_boundary_bridge_stability_audit.py:90:                            "domain_window": source["domain_window"],
tools/exp_boundary_bridge_stability_audit.py:91:                            "domain": source["domain"],
tools/exp_boundary_bridge_stability_audit.py:93:                            "source_domain_type": source["source_domain_type"],
tools/exp_boundary_bridge_stability_audit.py:116:                    name = row["domain_window"]
tools/exp_boundary_bridge_stability_audit.py:119:                            "domain_window": name,
tools/exp_boundary_bridge_stability_audit.py:120:                            "domain": row["domain"],
tools/exp_boundary_bridge_stability_audit.py:121:                            "source_domain_type": row["source_domain_type"],
tools/exp_boundary_bridge_stability_audit.py:144:            "domain_window": name,
tools/exp_boundary_bridge_stability_audit.py:145:            "domain": item["domain"],
tools/exp_boundary_bridge_stability_audit.py:146:            "source_domain_type": item["source_domain_type"],
tools/exp_boundary_bridge_stability_audit.py:164:        row["domain_window"]
tools/exp_boundary_bridge_stability_audit.py:169:        row["domain_window"]
tools/exp_boundary_bridge_stability_audit.py:175:        row["domain_window"]
tools/exp_boundary_bridge_stability_audit.py:209:            "denominator": "13 rows: 8 GUE and 5 Poisson, repeated across graph-reader parameter grid",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:89:          "domain_window": "Anderson3D_W_2.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:98:          "source_domain_type": "metallic_wigner_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:105:          "domain_window": "Anderson3D_W_4.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:114:          "source_domain_type": "metallic_wigner_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:121:          "domain_window": "Anderson3D_W_8.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:130:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:137:          "domain_window": "Anderson3D_W_12.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:146:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:153:          "domain_window": "Anderson3D_W_14.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:162:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:169:          "domain_window": "Anderson3D_W_16.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:178:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:185:          "domain_window": "Anderson3D_W_16.50",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:194:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:201:          "domain_window": "Anderson3D_W_17.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:210:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:217:          "domain_window": "Anderson3D_W_20.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:226:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:233:          "domain_window": "Anderson3D_W_24.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:242:          "source_domain_type": "localized_poisson_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:249:          "domain_window": "Anderson3D_W_32.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:258:          "source_domain_type": "localized_poisson_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:379:          "domain_window": "Anderson3D_W_2.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:388:          "source_domain_type": "metallic_wigner_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:395:          "domain_window": "Anderson3D_W_4.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:404:          "source_domain_type": "metallic_wigner_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:411:          "domain_window": "Anderson3D_W_8.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:420:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:427:          "domain_window": "Anderson3D_W_12.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:436:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:443:          "domain_window": "Anderson3D_W_14.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:452:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:459:          "domain_window": "Anderson3D_W_16.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:468:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:475:          "domain_window": "Anderson3D_W_16.50",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:484:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:491:          "domain_window": "Anderson3D_W_17.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:500:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:507:          "domain_window": "Anderson3D_W_20.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:516:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:523:          "domain_window": "Anderson3D_W_24.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:532:          "source_domain_type": "localized_poisson_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:539:          "domain_window": "Anderson3D_W_32.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:548:          "source_domain_type": "localized_poisson_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:590:      "domain_window": "Anderson3D_W_2.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:612:      "domain_window": "Anderson3D_W_4.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:634:      "domain_window": "Anderson3D_W_8.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:656:      "domain_window": "Anderson3D_W_12.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:678:      "domain_window": "Anderson3D_W_14.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:701:      "domain_window": "Anderson3D_W_16.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:725:      "domain_window": "Anderson3D_W_16.50",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:748:      "domain_window": "Anderson3D_W_17.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:770:      "domain_window": "Anderson3D_W_20.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:792:      "domain_window": "Anderson3D_W_24.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:814:      "domain_window": "Anderson3D_W_32.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:837:    "non_possible": "cross-domain transfer if no W row is stable_graph_bridge+classical_intermediate at every tested size",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json:839:    "observable": "two_reader_all_sizes from graph_bridge_frequency joined with adjacent ratio, Brody q, Wigner/Poisson mixture weight, IPR and participation entropy",
tools/exp_endpoint_feature_scramble_null.py:130:            "claim": "GUE/Poisson endpoint filter is specific if observed endpoint stability remains complete and feature-scramble nulls do not reconstruct complete stability",
tools/exp_endpoint_feature_scramble_null.py:133:            "generator": "GUE matrices and Poisson exponential spacings",
tools/exp_endpoint_feature_scramble_null.py:134:            "denominator": "2 domains x sizes x test seeds source rows; each row requires all readers to pass",
tools/exp_physical_sr_residue_bounce.py:6:  physical A: quantum-chaotic GUE spectra
tools/exp_physical_sr_residue_bounce.py:7:  mathematical transducer: span-matched Poisson counter-boundary
tools/exp_physical_sr_residue_bounce.py:271:            "poisson_contrast": "span-matched Poisson null for each class/label",
tools/exp_physical_sr_residue_bounce.py:301:            "optional_expected_class": "class label used for grouped Poisson contrast and direct class contrast",
tools/exp_physical_sr_residue_bounce.py:311:            "poisson_contrast": "real spectrum versus span-matched Poisson null",
tools/exp_physical_sr_residue_bounce.py:327:            "GUE_unitary_no_time_reversal": {
tools/exp_physical_sr_residue_bounce.py:337:            "transfer": "SR,L1,triple_var pass from the mathematical deposit into a physical spectrum tester as component states against Poisson and, when classes exist, direct class contrast.",
tools/exp_physical_sr_residue_bounce.py:339:            "fall": "Tester falls if GOE/GUE direct SR separation disappears, if Poisson contrast absorbs all focus observables in chaotic classes, or if Anderson W6 keeps SR active under the declared threshold.",
tools/exp_physical_sr_residue_bounce.py:342:            "declared": "single ordered spectrum or small class-labeled set; no new physical domain generation",
tools/exp_physical_sr_residue_bounce.py:345:                "class-labeled input where direct_contrast is not separated on SR despite declared GOE/GUE classes",
tools/exp_physical_sr_residue_bounce.py:376:                    ("GUE_unitary_no_time_reversal", "beta_2_complex_hermitian", gue_levels(n, rng)),
tools/exp_physical_sr_residue_bounce.py:419:        gue_key = f"N{n}:GUE_unitary_no_time_reversal"
tools/exp_physical_sr_residue_bounce.py:421:        symmetry_contrasts[f"N{n}:GUE_minus_GOE"] = contrast(
tools/exp_physical_sr_residue_bounce.py:422:            f"N{n}:GUE_minus_GOE",
tools/exp_physical_sr_residue_bounce.py:428:    source = summaries["GUE_unitary_no_time_reversal"]
tools/exp_physical_sr_residue_bounce.py:439:        "physical_source": "quantum-chaotic spectra modeled by GOE and GUE symmetry classes",
tools/exp_physical_sr_residue_bounce.py:445:            "GUE": "Wigner-Dyson beta=2, complex Hermitian, no time-reversal symmetry",
tools/exp_physical_sr_residue_bounce.py:446:            "Poisson": "independent levels, span-matched finite sample null",
tools/dnd_banchi_tm1.py:88:    "references": {{"GUE": 0.599, "GOE": 0.530, "Poisson": 0.386, "critical": 0.5}},
tools/data/reports/report_20260402_0344.md:17:- [✓] C1: Zeri zeta hanno spacing GUE (non Poisson)... → spacing=GUE-like, ⟨r⟩=0.6150
tools/data/reports/report_20260402_0344.md:22:- [✓] N2: Rule 30/110 hanno spacing >> GUE standard... → ⟨r⟩=1.0000 (GUE standard=0.60)
tools/data/reports/report_20260402_0344.md:25:- percolation_var_0.55: r=0.7543859649122806, spacing=Poisson-like
tools/data/reports/report_20260402_0344.md:26:- numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like
tools/data/reports/report_20260402_0344.md:27:- coupled_oscillators_var_50: r=1.0, spacing=Poisson-like
tools/data/reports/report_20260402_0344.md:28:- brownian_motion_var_0.5: r=1.0, spacing=Poisson-like
tools/data/reports/agent_20260508_1632.md:24:| domain | conditions | global Jaccard median | global Jaccard min | phase Jaccard median | threshold Jaccard median | scale Jaccard median | core labels all conditions |
tools/data/reports/agent_20260508_1632.md:33:| domain | median label error | median selected gaps | median large gaps |
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:375:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:390:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:405:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:420:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:435:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:451:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:467:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:483:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:499:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:515:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:531:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:547:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:563:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:579:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:595:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:611:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:627:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:642:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:657:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:672:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:687:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:703:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:719:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:735:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:751:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:767:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:783:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:799:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:815:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:831:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:847:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:863:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:879:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:894:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:909:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:924:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:939:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:955:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:971:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:987:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1003:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1019:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1035:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1051:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1067:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1083:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1099:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1115:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1131:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1146:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1161:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1176:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1191:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1207:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1223:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1239:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1255:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1271:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1287:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1303:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1319:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1335:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1351:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1367:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1383:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1398:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1413:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1428:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1443:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1459:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1475:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1491:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1507:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1523:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1539:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1555:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1571:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1587:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1603:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1619:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1635:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1650:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1665:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1680:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1695:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1711:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1727:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1743:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1759:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1775:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1791:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1807:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1823:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1839:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1855:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1871:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1887:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1902:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1917:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1932:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1947:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1963:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1979:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:1995:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2011:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2027:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2043:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2059:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2075:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2091:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2107:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2123:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2139:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2154:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2169:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2184:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2199:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2215:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2231:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2247:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2263:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2279:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2295:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2311:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2327:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2343:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2359:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2375:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2391:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2406:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2421:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2436:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2451:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2467:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2483:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2499:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2515:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2531:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2547:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2563:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2579:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2595:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2611:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2627:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2643:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2658:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2673:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2688:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2703:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2719:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2735:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2751:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2767:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2783:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2799:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2815:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2831:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2847:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2863:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2879:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2895:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2910:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2925:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2940:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2955:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2971:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:2987:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3003:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3019:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3035:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3051:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3067:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3083:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3099:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3115:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3131:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3147:      "domain": "phi",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3162:      "domain": "silver",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3177:      "domain": "bronze",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3192:      "domain": "periodic_ab",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3207:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3223:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3239:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3255:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3271:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3287:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3303:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3319:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3335:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3351:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3367:      "domain": "balanced_random_phi_density",
tools/data/photonic_boundary_third_included_gate_20260515_1734.json:3383:      "domain": "balanced_random_phi_density",
tools/exp_det_drift.py:8:  If primes drift toward Poisson, det(M) should drift toward +1.
tools/triggers/build_applications_index.py:21:  - card per scoperta (lab-note draft) — vista per-domain
tools/triggers/build_applications_index.py:22:  - filtri inferiti: domain (lab_instance), type, maturity, latest
tools/triggers/build_applications_index.py:286:    domains = sorted({c.get("lab_instance") for c in candidates if c.get("lab_instance")})
tools/triggers/build_applications_index.py:291:        "domain": list(domains),
tools/triggers/build_applications_index.py:295:        "sort_options": ["latest", "by_domain", "by_type", "by_maturity"],
tools/triggers/blueprint_generator.py:21:  python -m core.triggers.blueprint_generator <cycle_ts> <type> [--domain physics]
tools/triggers/blueprint_generator.py:37:def _resolve_paths(domain: str | None = None) -> dict[str, Path]:
tools/triggers/blueprint_generator.py:40:        dom = domain or os.environ.get("DOMAIN", "physics")
tools/triggers/blueprint_generator.py:46:        "domain": dom if lab_data else None,
tools/triggers/blueprint_generator.py:180:    ap.add_argument("--domain", default=None)
tools/triggers/blueprint_generator.py:185:    paths = _resolve_paths(args.domain)
tools/triggers/promote_to_publish.py:54:def _resolve_paths(domain: str | None = None) -> dict[str, Path]:
tools/triggers/promote_to_publish.py:58:    D-ND_LAB: /opt/D-ND_LAB/data/<domain>/{scoperte,soluzioni} → published
tools/triggers/promote_to_publish.py:63:        dom = domain or os.environ.get("DOMAIN", "physics")
tools/triggers/promote_to_publish.py:345:    ap.add_argument("--domain", default=None,
tools/triggers/promote_to_publish.py:349:    paths = _resolve_paths(args.domain)
tools/data/reports/agent_20260509_0819.md:7:observables_used: [`label_jaccard`, `hamming_ratio`, `source_mode`, `acceptance_rate`, `event_type`, `vc_interp`, `r_floor`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260509_0819.md:8:**observable_contract**: claim=un generatore non-Sturmian puo' preservare il label-set phi a N=144 con `label_jaccard>=0.75` e distanza non triviale; observable=`label_jaccard`, `hamming_ratio`, `source_mode`, `acceptance_rate`, `event_type`, `vc_interp`, `r_floor`; operator=scansione di generatori balanced random, block shuffle, periodic approximant, Markov-density contro lettore gap-label phi; generator=non-Sturmian candidate pool; denominator=N=144, phases={0,0.25,0.5,0.75}, 2199 candidati validi post hamming gate, r_threshold={0.48,0.50,0.52}; non_possible=se passano solo generatori con memoria di blocco/periodo lungo, il null e' non-Sturmian ma non indipendente dal boundary; not_tested=trasferimento GUE/Poisson, fit power-law, scale N!=144, indipendenza fuori dal label reader phi.
tools/data/reports/agent_20260509_0819.md:17:  - **YSN DeltaLink**: il confine non e' classe GUE/Poisson ma trasporto di scala tra label reader e generatore.
tools/data/reports/agent_20260509_0819.md:22:- **Proiezione**: genero candidati non-Sturmian, applico gate `Jaccard>=0.75`, poi misuro `r(V)` solo sui best accepted per non confondere ricerca del generatore con confronto GUE/Poisson.
tools/data/reports/agent_20260509_0819.md:77:La formulazione valida e': `source_mode` Sturmian esplicito non e' necessario; memoria di scala lunga e' necessaria nel perimetro misurato. `label_jaccard>=0.75` non autorizza da solo il trasferimento GUE/Poisson: deve essere accoppiato a `event_type` e alla classe di memoria del generatore.
tools/data/reports/agent_20260509_0819.md:92:- **L3 no observable drift**: `gap_ratio`, fit power-law e GUE/Poisson non sono testati.
tools/triggers/finding_promoter.py:21:  python -m core.triggers.finding_promoter <cycle_ts> [--domain physics]
tools/triggers/finding_promoter.py:44:def _resolve_paths(domain: str | None = None) -> dict[str, Path]:
tools/triggers/finding_promoter.py:50:        dom = domain or os.environ.get("DOMAIN", "physics")
tools/triggers/finding_promoter.py:56:        "domain": dom,
tools/triggers/finding_promoter.py:315:    ap.add_argument("--domain", default=None)
tools/triggers/finding_promoter.py:323:    paths = _resolve_paths(args.domain)
tools/triggers/finding_promoter.py:326:    print(f"finding_promoter cycle_ts={cycle_ts} domain={paths['domain']} "
tools/data/reports/incident_20260504_1138.md:21:4. Poisson è rumore da denominatore piccolo, non controesempio strutturale.
tools/exp_aubry_v2_generator_scaling_gate.py:101:    domain: str,
tools/exp_aubry_v2_generator_scaling_gate.py:111:        "domain": domain,
tools/exp_aubry_v2_generator_scaling_gate.py:144:def median_by_n(rows: list[dict[str, Any]], domain: str, metric: str) -> dict[int, float]:
tools/exp_aubry_v2_generator_scaling_gate.py:146:    ns = sorted({int(row["N"]) for row in rows if row["domain"] == domain})
tools/exp_aubry_v2_generator_scaling_gate.py:148:        arr = finite([row.get(metric) for row in rows if row["domain"] == domain and int(row["N"]) == n])
tools/exp_aubry_v2_generator_scaling_gate.py:231:    domains = sorted({row["domain"] for row in rows})
tools/exp_aubry_v2_generator_scaling_gate.py:232:    summary_by_domain = {domain: aggregate([row for row in rows if row["domain"] == domain]) for domain in domains}
tools/exp_aubry_v2_generator_scaling_gate.py:234:    for domain in domains:
tools/exp_aubry_v2_generator_scaling_gate.py:235:        scaling[domain] = {
tools/exp_aubry_v2_generator_scaling_gate.py:236:            "mean_pr_tau": log_slope(median_by_n(rows, domain, "mean_pr")),
tools/exp_aubry_v2_generator_scaling_gate.py:237:            "mean_ipr_tau": log_slope(median_by_n(rows, domain, "mean_ipr")),
tools/exp_aubry_v2_generator_scaling_gate.py:238:            "spacing_r_by_n": median_by_n(rows, domain, "spacing_r"),
tools/exp_aubry_v2_generator_scaling_gate.py:281:        "summary_by_domain": summary_by_domain,
tools/data/reports/agent_20260416_0330.md:68:3. **L* grows with prime scale.** From 18 (small primes, ln p ~ 15.7) to 48 (large primes, ln p ~ 18.4). The coherence length at Poisson crossover (p* ~ 10^13, ln p ~ 30) by linear extrapolation: L* ~ 18 + (48-18)/(18.4-15.7) * (30-15.7) ~ 160. Still finite — even at the crossover, windows of ~160 gaps should still distinguish primes from random.
tools/data/reports/agent_20260416_0330.md:70:4. **Two-timescale structure.** <r>_prime drifts downward (0.453 → 0.443, toward Poisson 0.386) — this is the slow drift (BOUNDARY). But delta_r is stable at -0.014 — the *relative* ordering vs shuffle doesn't decay. The dipolar signature persists as a constant offset even as both prime and shuffle <r> evolve. The drift is absolute; the dipole is relative.
tools/data/reports/agent_20260416_0330.md:84:**CONSTRAINT on POISSON_CONVERGENCE**: L* grows with scale (18 → 48), but delta_r does not decay. The Poisson crossover manifests as increasing coherence length (harder to detect the ordering in small windows) rather than decreasing ordering magnitude. The primes don't lose their dipolar structure — they become harder to distinguish from random in small samples.
tools/data/reports/report_20260314_0342.md:17:- [✓] C1: Zeri zeta hanno spacing GUE (non Poisson)... → spacing=GUE-like, ⟨r⟩=0.6150
tools/data/reports/report_20260314_0342.md:23:- [✓] N2: Rule 30/110 hanno spacing >> GUE standard... → ⟨r⟩=0.8650 (GUE standard=0.60)
tools/data/reports/report_20260314_0342.md:26:- brownian_motion_var_0.5: r=1.032258064516129, spacing=Poisson-like
tools/data/reports/report_20260314_0342.md:27:- coupled_oscillators_var_50: r=1.0, spacing=Poisson-like
tools/data/reports/report_20260314_0342.md:28:- percolation_var_0.55: r=1.0434782608695652, spacing=Poisson-like
tools/data/reports/report_20260314_0342.md:29:- percolation_var_0.65: r=1.0, spacing=Poisson-like
tools/dnd_kernel.py:298:            'statistics': 'GUE',
tools/dnd_kernel.py:308:            'statistics': 'Poisson',
tools/dnd_kernel.py:318:            'statistics': 'GUE',
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:187:  "summary_by_domain_phase": {
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:827:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:858:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:889:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:920:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:952:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:984:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1016:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1044:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1076:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1108:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1140:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1172:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1203:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1234:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1265:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1293:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1325:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1357:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1389:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1421:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1453:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1485:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1517:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1548:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1579:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1610:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1642:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1674:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1706:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1738:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1770:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1802:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1834:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1866:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1897:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1928:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1959:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:1991:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2023:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2055:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2079:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2111:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2143:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2175:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2207:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2238:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2269:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2300:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2332:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2364:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2396:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2428:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2460:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2492:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2524:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2556:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2587:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2618:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2649:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2681:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2713:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2745:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2777:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2809:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2841:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2873:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2901:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2932:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2963:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:2994:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3026:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3058:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3090:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3122:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3154:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3186:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3218:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3250:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3281:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3312:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3343:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3375:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3407:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3439:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3471:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3503:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3535:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3567:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3599:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3630:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3661:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3692:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3720:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3752:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3780:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3812:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3832:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3864:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3892:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3924:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3955:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:3986:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4017:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4049:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4081:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4113:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4145:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4177:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4193:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4213:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4241:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4272:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4303:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4334:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4366:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4382:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4398:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4418:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4442:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4470:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4502:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4534:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4565:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4596:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4627:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4643:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4659:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4683:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4711:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4731:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4747:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4767:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4783:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4814:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4845:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4876:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4892:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4924:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4952:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:4984:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5016:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5032:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5048:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5072:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5103:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5134:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5165:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5181:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5209:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5241:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5273:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5297:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5321:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5353:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5385:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5416:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5447:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5478:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5506:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5522:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5538:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5562:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5578:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5610:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5634:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5666:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5697:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5728:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5759:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5775:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5807:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5835:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5867:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5891:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5911:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5931:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5955:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:5986:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6017:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6048:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6064:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6080:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6096:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6112:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6128:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6144:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6160:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6176:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6207:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6238:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6269:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6285:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6305:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6329:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6349:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6365:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6381:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6397:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6413:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6444:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6475:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6506:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6526:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6542:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6558:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6574:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6590:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6606:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6622:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6638:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6669:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6700:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6731:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6747:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6763:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6779:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6795:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6811:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6827:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6851:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6867:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6898:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6929:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6960:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6976:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:6992:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7008:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7024:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7040:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7056:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7072:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7088:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7119:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7150:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7181:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7197:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7213:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7229:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7245:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7261:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7277:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7297:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7329:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7360:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7391:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7422:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7442:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7458:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7474:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7490:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7506:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7522:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7538:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7554:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7585:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7616:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7647:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7671:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7687:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7703:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7719:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7735:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7751:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7767:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7783:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7814:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7845:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7876:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7892:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7908:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7924:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7940:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7956:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7972:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:7988:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8004:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8035:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8066:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8097:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8113:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8129:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8145:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8161:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8177:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8193:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8209:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8225:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8256:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8287:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8318:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8334:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8350:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8366:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8382:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8398:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8414:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8430:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8446:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8477:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8508:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8539:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8555:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8571:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8587:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8603:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8619:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8635:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8651:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8667:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8698:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8729:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8760:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8776:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8792:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8808:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8824:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8840:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8856:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8872:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8888:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8919:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8950:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8981:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:8997:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9013:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9029:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9045:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9061:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9077:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9093:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9109:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9140:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9171:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9202:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9218:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9234:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9250:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9266:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9282:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9298:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9314:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9330:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9361:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9392:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9423:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9443:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9459:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9475:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9491:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9507:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9523:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9539:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9555:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9586:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9617:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9648:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9664:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9680:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9696:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9712:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9728:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9744:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9760:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9776:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9807:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9838:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9869:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9885:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9901:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9917:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9933:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9949:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9965:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9981:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:9997:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10028:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10059:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10090:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10106:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10122:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10138:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10154:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10170:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10186:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10202:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10218:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10249:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10280:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10311:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10327:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10343:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10359:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10375:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10391:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10407:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10423:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10439:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10470:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10501:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10532:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10548:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10564:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10580:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10596:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10612:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10628:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10644:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10660:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10691:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10722:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10753:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10769:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10785:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10801:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10817:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10833:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10849:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10865:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10881:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10912:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10943:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10974:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:10990:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11006:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11022:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11038:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11054:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11070:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11086:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11102:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11133:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11164:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11195:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11211:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11227:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11243:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11259:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11275:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11291:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11307:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11323:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11354:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11385:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11416:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11432:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11448:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11464:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11480:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11496:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11512:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11528:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11544:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11575:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11606:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11637:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11653:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11669:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11685:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11701:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11717:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11733:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11749:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11765:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11796:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11827:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11858:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11874:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11890:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11906:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11922:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11938:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11954:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11970:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:11986:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12017:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12048:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12079:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12095:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12111:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12127:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12143:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12159:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12175:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12191:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12207:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12238:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12269:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12300:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12316:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12332:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12348:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12364:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12380:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12396:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12412:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12428:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12459:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12490:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12521:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12537:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12553:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12569:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12585:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12601:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12617:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12633:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12649:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12680:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12711:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12742:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12758:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12774:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12790:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12806:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12822:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12838:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12854:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12870:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12901:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12932:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12963:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12979:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:12995:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:13011:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:13027:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:13043:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:13059:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json:13075:      "domain": "balanced_random_phi_density",
tools/data/reports/report_20260315_0342.md:17:- [✓] C1: Zeri zeta hanno spacing GUE (non Poisson)... → spacing=GUE-like, ⟨r⟩=0.6150
tools/data/reports/report_20260315_0342.md:23:- [✓] N2: Rule 30/110 hanno spacing >> GUE standard... → ⟨r⟩=0.8650 (GUE standard=0.60)
tools/data/reports/report_20260315_0342.md:26:- brownian_motion_var_0.5: r=1.0333333333333334, spacing=Poisson-like
tools/data/reports/report_20260315_0342.md:27:- coupled_oscillators_var_50: r=1.0, spacing=Poisson-like
tools/data/reports/report_20260315_0342.md:28:- percolation_var_0.55: r=1.0, spacing=Poisson-like
tools/data/reports/report_20260315_0342.md:29:- percolation_var_0.65: r=1.380952380952381, spacing=Poisson-like
tools/data/reports/agent_20260516_0720.md:8:**observable_contract**: claim=le righe graph-only diventano residui thresholded solo con separazione raw-count da entrambi i null grafici; observable=count grezzi osservati/null con intervalli Wilson e p-value binomial-tail; operator=post-audit del JSON row-aligned 03:30 senza rerun del lettore grafico; generator=13 righe BOUNDARY 8 GUE / 5 Poisson con feature graph canonical+rigidity+shuffle-z; denominator=13 righe, observed denominator 6, label-null denominator 384, rewire-null denominator 384; non_possible=residue claim se p-value contro uno dei due null supera alpha o il lift minimo e sotto soglia; not_tested=nuovi sistemi fisici, nuova geometria del grafo, universalita asintotica.
tools/data/reports/agent_20260516_0720.md:11:- **Combo**: A9 terzo incluso + QxG continuo/discreto + grafo/cut come lettore del confine + tensione seme BOUNDARY "8 domini GUE, 5 Poisson".
tools/data/reports/agent_20260516_0720.md:21:- `why`: il ciclo resta sul perimetro vivo 8 GUE / 5 Poisson e ripara il confine come terzo incluso operativo, separando two-reader boundary, graph-only lift e residuo thresholded.
tools/data/reports/agent_20260516_0720.md:25:- **Baseline noto piu vicino**: Brody / Berry-Robnik / Rosenzweig-Porter per crossover GUE-Poisson; kNN stability, label shuffle e degree-preserving rewiring per residui grafo.
tools/data/reports/agent_20260516_0720.md:37:- **Punto fisico sorgente**: crossover spettrale tra repulsione Wigner-Dyson/GUE e indipendenza/localizzazione Poisson.
tools/data/r_excess_l_functions.json:1036:    "GUE": 0.60266,
tools/data/reports/agent_20260516_1111.md:8:**observable_contract**: claim=RP e' boundary endpoint-gated solo se il conteggio candidato batte il null e una finestra lambda resta non-zero attraverso la ladder size preregistrata; observable=`rp_boundary_candidate` per source row, `size_transport_count`, raw/add-one p-values; operator=stesso lettore endpoint 11:04, stessa soglia `4/5 reader`, stessa distanza bilanciata dai centroidi GUE/Poisson, griglia `N x lambda x seed`; generator=GUE, Poisson, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=endpoint 60 source rows x 5 reader, RP 5 size x 7 lambda x 6 seed = 210 source rows x 5 reader; non_possible=terzo incluso fisico se le candidate non arrivano almeno a `N=192` o se il null ricostruisce il conteggio; not_tested=Anderson 3D, spettri sperimentali, limite N infinito, unfolded alternatives oltre il reader 11:04.
tools/data/reports/agent_20260516_1111.md:11:- **Combo**: A9 terzo incluso + QxG continuo/discreto + nodo BOUNDARY del grafo + direzione seme "8 domini GUE, 5 Poisson".
tools/data/reports/agent_20260516_1111.md:19:- **Movimento A->M->B**: fisico A = crossover spettrale Rosenzweig-Porter GUE/Poisson; matematica M = trasporto del bordo in spazio osservabile endpoint-gated; fisico B non emerge. Il ciclo consegna un vincolo di non-promozione.
tools/data/reports/agent_20260516_1111.md:25:- `seed_residue`: restano non testati il perimetro largo 8 GUE / 5 Poisson come domini indipendenti, Anderson 3D e spettri fisici reali.
tools/data/reports/agent_20260516_1111.md:29:- **Baseline noto piu vicino**: Rosenzweig-Porter crossover, Brody interpolation, Berry-Robnik-like mixture, finite-size spectral crossover GUE/Poisson.
tools/data/reports/agent_20260516_1111.md:41:- **Punto fisico sorgente**: crossover spettrale Rosenzweig-Porter tra Poisson e GUE.
tools/data/reports/agent_20260516_1111.md:52:- **Endpoint gate**: pass osservato se endpoint GUE/Poisson resta stabile e feature-scramble `add_one_p<=0.05`.
tools/data/reports/agent_20260516_1124.md:11:- **Combo**: A9 terzo incluso + QxG continuo/discreto + nodo BOUNDARY + direzione seme "8 domini GUE, 5 Poisson".
tools/data/reports/agent_20260516_1124.md:25:- `seed_residue`: restano non testati il perimetro completo 8 GUE / 5 Poisson e un audit fisico large-L.
tools/data/reports/agent_20260516_1124.md:29:- **Baseline noto piu vicino**: Anderson localization, crossover Wigner-Dyson/Poisson, Brody interpolation, finite-size scaling della transizione metallico/localizzato.
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:142:          "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:181:          "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:220:          "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:259:          "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:298:          "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:489:          "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:528:          "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:567:          "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:606:          "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:645:          "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:823:          "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:862:          "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:901:          "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:940:          "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:979:          "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1166:          "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1205:          "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1244:          "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1283:          "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1322:          "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1375:      "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1387:      "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1404:      "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1422:      "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1439:      "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w7.json:1455:    "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE across size, seed, k and unfolding mode",
tools/data/observable_collinearity_breaking_20260506_1956.json:3:  "question": "When do canonical observable retention curves break collinearity across domains?",
tools/data/reports/agent_20260507_2042.md:62:Applicare lo stesso test a un perimetro non-primi con ordine costruito e marginale identica: Beatty coerente, shuffle Beatty, GUE spacing order, Poisson. Se il segno resta condiviso, il nodo regressivo e l'embedding `x=(g_i,g_{i-1})`; se lo scarto z replica solo nei domini ordinati, det resta utile come osservabile subordinato al denominator gate.
tools/data/reports/agent_20260514_1640.md:1:# Agent Report - Rafforzamento tester fisico GOE/GUE N-curve
tools/data/reports/agent_20260514_1640.md:4:**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GOE-GUE-Poisson-Anderson  
tools/data/reports/agent_20260514_1640.md:5:**verdict**: CONSTRAINT / TESTER OPERATIVO RAFFORZATO - `component_state(SR,L1,triple_var)` resta leggibile su un denominatore fisico piu' robusto: distingue GOE e GUE per simmetria su `SR`, conserva la curva in `N=128,192`, e mantiene Anderson 1D `W=6` come bordo finite-size dove `SR` viene assorbito e `triple_var` resta residuo operativo. Non e' una nuova legge fisica.  
tools/data/reports/agent_20260514_1640.md:8:**observable_contract**: claim=il tester L8 16:31 si rafforza solo se resta leggibile fra classi Wigner-Dyson distinte e fra due taglie; observable=`component_state(SR,L1,triple_var)` con `SR` = adjacent gap ratio canonico piu contrasto diretto GUE-GOE; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GOE reale simmetrico, GUE hermitiano complesso, Anderson 1D `W=6`, null Poisson span-matched; denominator=2 taglie `N={128,192}`, 64 repliche per taglia e dominio, 384 eventi trace, finestra centrale 0.5; non_possible=promuovere il pattern a legge fisica nuova o usare Anderson 1D come transizione universale; not_tested=dati sperimentali, unfolding dedicato, Anderson 3D, many-body localization, limite asintotico.
tools/data/reports/agent_20260514_1640.md:12:Questo ciclo prosegue il tester L8 del report `tools/data/reports/agent_20260514_1631.md`. Non apre una nuova legge fisica e non ritorna a `prime-minus-mod6`. Il vincolo seguito e': rafforzare il tester operativo `component_state(SR,L1,triple_var)` su denominatore fisico piu' robusto distinguendo GOE/GUE, facendo una piccola curva in `N`, mantenendo Anderson 1D `W=6` come bordo finite-size, e confrontando il tester con adjacent gap ratio.
tools/data/reports/agent_20260514_1640.md:16:Il tester non deve dire "fisica nuova". Deve dire se lo stesso vettore resta leggibile quando il denominatore fisico smette di essere una sola classe. La separazione GOE/GUE su `SR` e il collasso di `SR` a `W=6` sono lo stesso bordo letto da due lati: simmetria caotica e assorbimento localizzato.
tools/data/reports/agent_20260514_1640.md:20:- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + ponte QxG continuo/discreto + direzione BOUNDARY GUE/Poisson + nodo fisico Wigner-Dyson/Anderson.
tools/data/reports/agent_20260514_1640.md:21:- **Dipolo / punto-zero**: simmetria Wigner-Dyson GOE/GUE / indipendenza Poisson-localizzata. Punto-zero: adjacent gap ratio `SR`, perche' e' insieme osservabile canonico del tester e baseline fisica standard.
tools/data/reports/agent_20260514_1640.md:23:- **Operatori laterali scelti**: gauge/simmetria, spettro di Hamiltoniana, bordo finite-size. Entrano perche' obbligano il tester a passare da una sola classe GUE a classi di simmetria distinte e a un bordo disordinato.
tools/data/reports/agent_20260514_1640.md:27:- **Proiezione**: misuro GOE, GUE e Anderson `W=6` a `N=128,192`; ogni dominio viene confrontato con Poisson span-matched, poi GUE viene confrontato direttamente con GOE.
tools/data/reports/agent_20260514_1640.md:32:- `why`: il ciclo segue la direzione viva perche' rafforza il frame GUE/Poisson-Anderson indicato dal valutatore e rende `component_state(SR,L1,triple_var)` piu' falsificabile.
tools/data/reports/agent_20260514_1640.md:37:> Il tester `component_state(SR,L1,triple_var)` resta operativo quando il denominatore fisico separa GOE e GUE: `SR` legge la classe di simmetria Wigner-Dyson, viene assorbito nel bordo Anderson 1D `W=6`, e `triple_var` resta residuo locale nel bordo finite-size.
tools/data/reports/agent_20260514_1640.md:41:Il tester L8 16:31 distingue una classe GOE da una classe GUE su due taglie senza perdere il bordo Anderson `W=6`?
tools/data/reports/agent_20260514_1640.md:45:- **Punto fisico sorgente**: statistiche Wigner-Dyson/GUE e Poisson usate nel report 16:31 come baseline del rimbalzo fisico.
tools/data/reports/agent_20260514_1640.md:47:- **Punto fisico di ritorno**: classi di simmetria GOE beta=1 reale-simmetrica e GUE beta=2 hermitiana complessa, piu Anderson 1D disordinato `W=6`.
tools/data/reports/agent_20260514_1640.md:48:- **Relazione nuova**: il tester non misura solo chaotic-vs-Poisson; misura anche se la simmetria Wigner-Dyson lascia una differenza leggibile prima del bordo localizzato.
tools/data/reports/agent_20260514_1640.md:50:- **Se fallisce**: `ritorno_fisico_assente` se GOE/GUE non si separano o se Anderson `W=6` non assorbe `SR`; in quel caso il tester resta solo scaffold sintetico.
tools/data/reports/agent_20260514_1640.md:55:- **Wigner-Dyson / GUE level statistics**: classe beta=2, matrici hermitiane complesse, assenza di simmetria di inversione temporale.
tools/data/reports/agent_20260514_1640.md:56:- **Poisson level statistics**: livelli indipendenti, null operativo span-matched.
tools/data/reports/agent_20260514_1640.md:62:- Modifica minima allo script: aggiunti `goe_levels`, parametro `--ns`, trace con `n/symmetry`, riepiloghi per taglia e contrasto diretto GUE-GOE.
tools/data/reports/agent_20260514_1640.md:64:- Perimetro: GOE, GUE, Anderson 1D `W=6`; due taglie; 64 repliche per taglia e dominio.
tools/data/reports/agent_20260514_1640.md:65:- Null: Poisson span-matched con stesso count di gap.
tools/data/reports/agent_20260514_1640.md:73:| domain | samples | focus active | SR real/null/delta | p(SR) | d(SR) | L1 delta | p(L1) | d(L1) | triple delta | p(triple) | d(triple) |
tools/data/reports/agent_20260514_1640.md:76:| GUE beta=2 | 128 | SR,L1,triple_var | 0.6019 / 0.3838 / 0.2181 | 0.000122 | 4.120 | -0.2717 | 0.000122 | -1.867 | -2.5591 | 0.000122 | -3.292 |
tools/data/reports/agent_20260514_1640.md:81:| domain | N | samples | focus active | SR real | SR delta | p(SR) | d(SR) | triple delta | p(triple) | d(triple) |
tools/data/reports/agent_20260514_1640.md:84:| GUE beta=2 | 128 | 64 | SR,L1,triple_var | 0.6005 | 0.2207 | 0.000122 | 3.635 | -2.6750 | 0.000122 | -3.122 |
tools/data/reports/agent_20260514_1640.md:87:| GUE beta=2 | 192 | 64 | SR,L1,triple_var | 0.6034 | 0.2155 | 0.000122 | 4.883 | -2.4432 | 0.000122 | -3.615 |
tools/data/reports/agent_20260514_1640.md:90:### Contrasto diretto GUE-GOE
tools/data/reports/agent_20260514_1640.md:92:| contrast | paired | SR diff GUE-GOE | p(SR) | d(SR) | SR state | triple diff | p(triple) | d(triple) | triple state |
tools/data/reports/agent_20260514_1640.md:99:- **Verificato / strong per tester**: GOE e GUE sono entrambi active contro Poisson span-matched su `SR,L1,triple_var`.
tools/data/reports/agent_20260514_1640.md:100:- **Verificato / class separation**: GUE-GOE si separa su `SR` in entrambe le taglie (`+0.0704` a `N=128`, `+0.0655` a `N=192`, p=0.000122).
tools/data/reports/agent_20260514_1640.md:101:- **Verificato / size readability**: il pattern resta leggibile nelle due taglie: GUE ha `SR` circa 0.6005/0.6034, GOE circa 0.5302/0.5379.
tools/data/reports/agent_20260514_1640.md:115:1. **Verificato**: `SR` coincide con adjacent gap ratio e separa GOE/GUE nel verso fisico atteso: GUE > GOE > Poisson.
tools/data/reports/agent_20260514_1640.md:118:4. **Inferito**: il tester 16:31 passa da "GUE contro Poisson" a "simmetria Wigner-Dyson contro bordo Poisson-localizzato".
tools/data/reports/agent_20260514_1640.md:125:Il ciclo rafforza lo strumento, non il claim fisico. `component_state(SR,L1,triple_var)` ora ha un denominatore piu' robusto: distingue GOE e GUE tramite adjacent gap ratio, resta leggibile su due taglie, e mantiene Anderson `W=6` come bordo in cui `SR` viene assorbito prima del residuo `triple_var`.
tools/data/reports/agent_20260514_1640.md:129:- **Due radici**: simmetria Wigner-Dyson GOE/GUE / indipendenza Poisson-localizzata.
tools/data/reports/agent_20260514_1640.md:131:- **Invariante di passaggio**: `SR` separa GOE-GUE ma cade su Anderson `W=6`; `triple_var` conserva residuo locale nel bordo finite-size.
tools/data/reports/agent_20260514_1640.md:136:Il prossimo passo non e' aggiungere dominio per ampiezza. E' rendere il tester leggibile come strumento: interfaccia unica per spettro ordinato, classe attesa opzionale, output `component_state`, contrasto Poisson e, se due classi sono presenti, contrasto diretto. La promozione resta `soluzione/tool`, non `scoperta fisica`.
tools/data/reports/agent_20260514_1640.md:140:ssp_value: yes. Il ciclo produce un tester piu' riusabile: dato uno spettro ordinato o un ensemble, calcola `SR,L1,triple_var`, confronta Poisson span-matched, separa GOE/GUE se presenti, e ritorna `component_state` con trace auditabile.
tools/data/piano11_results.json:2:  "piano": "piano11-Q-sqrt5-GUE",
tools/data/piano11_results.json:5:  "verdict": "FORTE: catena algebrica M\u2192Q(\u221a5)\u2192L(s,\u03c7\u2085)\u2192GUE dimostrata. Verifica numerica parziale (187/303 zeri, regime asintotico richiede t>1000).",
tools/data/piano11_results.json:52:      "to": "zeros follow GUE",
tools/data/piano11_results.json:73:    "fluctuations": "det(M)=-1 \u2192 Q(\u221a5) \u2192 L(s,\u03c7\u2085) \u2192 GUE (Piano 11)",
tools/data/piano11_results.json:80:    "note": "GUE vs GOE discrimination requires thousands of zeros at t>1000 (Odlyzko regime). With ~200 zeros, statistics are suggestive but not definitive.",
tools/data/piano11_results.json:98:      "zeta_vs_GUE_KS": 0.0615,
tools/data/piano11_results.json:99:      "zeta_vs_GUE_p": 0.567,
tools/data/piano11_results.json:102:      "conclusion": "V(r) gives BK form but NOT GUE fluctuations"
tools/data/piano11_results.json:113:    "Katz-Sarnak: L(s,\u03c7\u2085) zeros \u2192 GUE",
tools/data/piano11_results.json:114:    "Therefore: D-ND matrix \u2194 GUE via Q(\u221a5)",
tools/data/reports/agent_20260507_0330.md:1:# Agent Report — The GUE-Poisson Boundary Is a Denominator Collapse Layer
tools/data/reports/agent_20260507_0330.md:15:> If the GUE-Poisson boundary is simulated directly by controlled mixtures,
tools/data/reports/agent_20260507_0330.md:23:- domains: synthetic unfolded GUE spacings, iid Poisson spacings, and mixtures;
tools/data/reports/agent_20260507_0330.md:24:- mixture parameter: `beta = 0.0..1.0`, where beta is the Poisson replacement fraction;
tools/data/reports/agent_20260507_0330.md:25:- main run: 1,536 spacings, 16 replicates, GUE matrix size 180, 11 beta layers, 24 full-shuffle baselines;
tools/data/reports/agent_20260507_0330.md:26:- seed check: 1,024 spacings, 12 replicates, GUE matrix size 160, same 11 beta layers, 20 baselines;
tools/data/reports/agent_20260507_0330.md:28:- classification: standardized distance to pure GUE and pure Poisson centroids using all five canonical observables. A layer is marked ambiguous when at least half the replicates have nearest-centroid margin `< 0.15`.
tools/data/reports/agent_20260507_0330.md:30:The endpoint-gated classifier is intentionally reported. In this perimeter it is empty because the Poisson endpoint has almost no stable original-vs-shuffle denominators. That is not discarded; it is the core META result.
tools/data/reports/agent_20260507_0330.md:39:| beta | stable obs / 5 | coord mean | margin mean | ambiguous fraction | Poisson-label fraction |
tools/data/reports/agent_20260507_0330.md:53:At beta 0.0-0.2, the sequence is classified as GUE-like and retains about
tools/data/reports/agent_20260507_0330.md:54:three stable observables. At beta 0.5-1.0, it is classified as Poisson-like,
tools/data/reports/agent_20260507_0330.md:70:- beta 0.5 and above: Poisson-label fraction `1.000`, ambiguity `0.000`.
tools/data/reports/agent_20260507_0330.md:74:1. **The clean two-class boundary fails under denominator gating.** Pure GUE and pure Poisson are separable in all-observable space, but there are no observables stable at both endpoints under the declared gate. The Poisson pole is a weak-denominator pole: classification can still place it, but retention-normalized structural claims cannot use it as if it had the same denominator support as GUE.
tools/data/reports/agent_20260507_0330.md:78:3. **Denominator collapse precedes full Poisson classification.** Stable-observable count drops from about `3.3` at beta 0.1-0.2 to `2.5` at beta 0.3 and `1.625` at beta 0.4. By beta 0.5 the classifier is fully Poisson-labeled, but only `0.750/5` observables remain stable on average. The loss of denominator support is therefore part of the boundary phenomenon, not an after-the-fact nuisance.
tools/data/reports/agent_20260507_0330.md:83:**CONSTRAINT on META + BOUNDARY**: GUE/Poisson boundary claims must report:
tools/data/reports/agent_20260507_0330.md:89:> In the synthetic mixture perimeter tested here, the GUE-Poisson boundary is an operational layer at beta 0.3-0.4: classification is ambiguous there, and denominator support collapses across the transition. The Poisson endpoint remains classifiable but denominator-weak, so it cannot serve as a symmetric structural pole for gated retention claims.
tools/data/reports/agent_20260507_0330.md:92:What opens now: apply the same layer map to real domains rather than only synthetic mixtures. For primes, the next discriminating question is not "GUE or Poisson?" but:
tools/data/reports/agent_20260507_0330.md:101:- **L3 no silent patching**: the claim is explicitly changed from "8 GUE, 5 Poisson boundary" to a synthetic mixture calibration. This does not assert the same layer for primes or all real domains.
tools/data/reports/agent_20260507_0330.md:103:- **L5 re-discovery**: this is a finite-sample diagnostic of crossover and noisy denominator normalization in classical GUE/Poisson spacings. It is not tagged as a new RMT theorem.
tools/data/agent_field_live.md:13:- Direzione viva ora: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
tools/data/agent_field_live.md:16:  - evidenza: `seme.json.direzione` viva è: "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo". Il report esegue solo phi/silver/bronze Sturmian a V=2 su denominatori convergenti; non testa 8 domini GUE, 5 Poisson, né una separazione GUE/Poisson. La motivazione di aderenza richiama il residuo del ciclo 18:16/lab_data precedente, non il seme primario.
tools/data/agent_field_live.md:17:  - prossimo uso ammesso: Nel prossimo ciclo formulare `direction_adherence` contro `seme.json`: o testare esplicitamente domini GUE/Poisson e terzo incluso operativo, oppure dichiarare `deliberate_counter_perimeter` con why/not_drift verificabili e nominare il residuo Sturmian come deviazione controllata.
tools/data/agent_field_live.md:25:Per L2, non chiamare `sopravvive`, `residuo` o `strutturale` un lift piccolo senza count grezzi, denominatore, soglia preregistrata o p-value/permutation interval dichiarato. Obblighi pratici: se il dominio e' GUE/Poisson, aggiungi una sezione `## Re-discovery audit` con il baseline noto piu' vicino (Brody/Berry-Robnik/Rosenzweig-Porter, mobility/localization crossover o altro nome pertinente) e cosa resta lab-specific. Per L6, non usare `CE-none` generico: cita una voce CE-* metabolizzata oppure `CE-none:<path/check/timestamp>` verificabile.
tools/data/agent_field_live.md:48:- disc_5: 3 ghost · Metrica primi g=(p/2)², curvatura GUE r=0.503
tools/data/agent_field_live.md:52:**Direzione seme da respirare**: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
tools/data/agent_field_live.md:55:- Direzione viva del seme: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
tools/data/agent_field_live.md:57:- Direzione operativa valutatore: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
tools/data/agent_field_live.md:58:- Perche': Il ciclo ha chiuso il nodo regressivo del falsifier: i null sono ora confrontabili a observable, perimetro e N fissati, e il risultato resta vincolo senza promuovere Anderson `W=20`. La prossima mossa non deve scavare altro dettaglio locale Anderson, ma usare il gate stabilizzato `null_first -> candidate_name -> physical_return` sul perimetro vivo della direzione corrente, cioe' 8 GUE / 5 Poisson o un secondo dominio fisico comparabile.
tools/data/agent_field_live.md:88:- Non partire da phi, gap label, GUE o Poisson se sono gia' nel ciclo
tools/data/agent_field_live.md:345:- GUE;
tools/data/agent_field_live.md:348:- Poisson;
tools/data/agent_field_live.md:368:- Poisson synthetic;
tools/data/agent_field_live.md:369:- GUE synthetic;
tools/data/agent_field_live.md:376:- GUE/Poisson e' spesso un piano di proiezione, non una sorgente. Se diventa
tools/data/agent_field_live.md:490:- domain wall;
tools/data/agent_field_live.md:615:GUE/Poisson/non-phi.
tools/data/agent_field_live.md:622:- Punto-zero: confine prima che venga classificato GUE o Poisson.
tools/data/agent_field_live.md:690:- concetti: terzo incluso, GUE/Poisson, non-phi generator, graph curvature,
tools/data/agent_field_live.md:691:  stable cross-domain core;
tools/data/agent_field_live.md:693:  precede la classificazione spettrale GUE/Poisson;
tools/data/agent_field_live.md:740:  - "VALIDA contro baseline GUE, Poisson e generatori sintetici."
tools/data/agent_field_live.md:742:  quando: "il ciclo lavora su boundary, GUE/Poisson o trasferibilita' phi"
tools/data/agent_field_live.md:886:  quando: "prima del prossimo ciclo su GUE/Poisson/non-phi"
tools/data/agent_field_live.md:946:- **Direzione corrente**: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
tools/data/agent_field_live.md:1012:Direzione viva attuale: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
tools/data/agent_field_live.md:1064:`Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo`
tools/data/agent_field_live.md:1076:## Piano 133 — Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
tools/data/agent_field_live.md:1081:- [BOUNDARY] (0.8)  8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
tools/data/agent_field_live.md:1132:aver dichiarato che "GUE is also dynamic under M". Il setup C1 era
tools/data/agent_field_live.md:1133:"Primes are the only dynamic domain under M among 7 tested". Il dato
tools/data/agent_field_live.md:1134:ha mostrato GUE dinamico — la conclusione ha riformulato silenziosamente
tools/data/agent_field_live.md:1225:  disc_5 (3 ghost): Metrica primi g=(p/2)², curvatura GUE r=0.503
tools/data/agent_field_live.md:1247:Un pattern in distribuzioni classiche (primi, GUE, random walk, Markov chain, gap statistics) probabilmente ha un nome. Default hypothesis: re-discovery / caso limite di teorema noto. Prima di taggare 'NEW', cerca il risultato classico piu' vicino (es. Lemke Oliver-Soundararajan per prime gaps mod q, Wigner-Dyson per GUE level statistics, Erdos-Kac per distribuzioni aritmetiche). Se non lo trovi, dichiara la ricerca esplicitamente.
tools/data/boundary_denominator_prescan_20260509_1409.json:3:  "question": "Does denominator_state transfer beyond V_c on the 8 GUE / 5 Poisson boundary perimeter?",
tools/data/boundary_denominator_prescan_20260509_1409.json:4:  "perimeter": "base autoricerca cycles 1..13: 8 GUE-like, 5 Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:8:    "operator": "row-aligned domain/window prescan",
tools/data/boundary_denominator_prescan_20260509_1409.json:23:    "by_source_domain_type": {
tools/data/boundary_denominator_prescan_20260509_1409.json:24:      "GUE": 8,
tools/data/boundary_denominator_prescan_20260509_1409.json:25:      "Poisson": 5
tools/data/boundary_denominator_prescan_20260509_1409.json:48:      "domain_window": "ising_2d:cycle_1",
tools/data/boundary_denominator_prescan_20260509_1409.json:49:      "domain": "ising_2d",
tools/data/boundary_denominator_prescan_20260509_1409.json:51:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1409.json:58:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:64:        "domain_key": "ising_2d",
tools/data/boundary_denominator_prescan_20260509_1409.json:73:      "domain_window": "pendolo_doppio:cycle_2",
tools/data/boundary_denominator_prescan_20260509_1409.json:74:      "domain": "pendolo_doppio",
tools/data/boundary_denominator_prescan_20260509_1409.json:76:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1409.json:83:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:89:        "domain_key": null,
tools/data/boundary_denominator_prescan_20260509_1409.json:98:      "domain_window": "numeri_primi:cycle_3",
tools/data/boundary_denominator_prescan_20260509_1409.json:99:      "domain": "numeri_primi",
tools/data/boundary_denominator_prescan_20260509_1409.json:101:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1409.json:108:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:114:        "domain_key": "primes",
tools/data/boundary_denominator_prescan_20260509_1409.json:123:      "domain_window": "zeta_zeros:cycle_4",
tools/data/boundary_denominator_prescan_20260509_1409.json:124:      "domain": "zeta_zeros",
tools/data/boundary_denominator_prescan_20260509_1409.json:126:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1409.json:133:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:139:        "domain_key": null,
tools/data/boundary_denominator_prescan_20260509_1409.json:148:      "domain_window": "logistica_biforcazione:cycle_5",
tools/data/boundary_denominator_prescan_20260509_1409.json:149:      "domain": "logistica_biforcazione",
tools/data/boundary_denominator_prescan_20260509_1409.json:151:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1409.json:158:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:164:        "domain_key": "logistic",
tools/data/boundary_denominator_prescan_20260509_1409.json:173:      "domain_window": "string_vibration:cycle_6",
tools/data/boundary_denominator_prescan_20260509_1409.json:174:      "domain": "string_vibration",
tools/data/boundary_denominator_prescan_20260509_1409.json:176:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1409.json:183:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:189:        "domain_key": null,
tools/data/boundary_denominator_prescan_20260509_1409.json:198:      "domain_window": "random_matrix:cycle_7",
tools/data/boundary_denominator_prescan_20260509_1409.json:199:      "domain": "random_matrix",
tools/data/boundary_denominator_prescan_20260509_1409.json:201:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1409.json:208:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:214:        "domain_key": "gue",
tools/data/boundary_denominator_prescan_20260509_1409.json:223:      "domain_window": "cellular_automata:cycle_8",
tools/data/boundary_denominator_prescan_20260509_1409.json:224:      "domain": "cellular_automata",
tools/data/boundary_denominator_prescan_20260509_1409.json:226:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1409.json:233:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:239:        "domain_key": "cell_auto",
tools/data/boundary_denominator_prescan_20260509_1409.json:248:      "domain_window": "percolation:cycle_9",
tools/data/boundary_denominator_prescan_20260509_1409.json:249:      "domain": "percolation",
tools/data/boundary_denominator_prescan_20260509_1409.json:251:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1409.json:258:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:264:        "domain_key": "percolation",
tools/data/boundary_denominator_prescan_20260509_1409.json:273:      "domain_window": "coupled_oscillators:cycle_10",
tools/data/boundary_denominator_prescan_20260509_1409.json:274:      "domain": "coupled_oscillators",
tools/data/boundary_denominator_prescan_20260509_1409.json:276:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1409.json:283:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:289:        "domain_key": "coupled_osc",
tools/data/boundary_denominator_prescan_20260509_1409.json:298:      "domain_window": "reaction_diffusion:cycle_11",
tools/data/boundary_denominator_prescan_20260509_1409.json:299:      "domain": "reaction_diffusion",
tools/data/boundary_denominator_prescan_20260509_1409.json:301:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1409.json:308:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:314:        "domain_key": null,
tools/data/boundary_denominator_prescan_20260509_1409.json:323:      "domain_window": "brownian_motion:cycle_12",
tools/data/boundary_denominator_prescan_20260509_1409.json:324:      "domain": "brownian_motion",
tools/data/boundary_denominator_prescan_20260509_1409.json:326:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1409.json:333:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:339:        "domain_key": "brownian",
tools/data/boundary_denominator_prescan_20260509_1409.json:348:      "domain_window": "logistica_biforcazione_var_3.5699:cycle_13",
tools/data/boundary_denominator_prescan_20260509_1409.json:349:      "domain": "logistica_biforcazione_var_3.5699",
tools/data/boundary_denominator_prescan_20260509_1409.json:351:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1409.json:358:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1409.json:364:        "domain_key": null,
tools/data/seme_backup_pre_run.json:21:      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
tools/data/seme_backup_pre_run.json:63:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_backup_pre_run.json:194:      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
tools/data/seme_backup_pre_run.json:209:      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
tools/data/seme_backup_pre_run.json:214:      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
tools/data/seme_backup_pre_run.json:329:      "claim": "Nel perimetro agent_20260508_0011, il contrasto di dualita (real-vs-shuffle z-score) per i gap primi scala come z ~ N^alpha con alpha(SR)=0.39+/-0.01, alpha(L1)=0.32+/-0.03, alpha(triple_var)=0.37+/-0.03 — tutti sotto 0.5 (effetto si indebolisce con la scala). GUE ha alpha >= 0.5 (effetto costante o crescente). Il discriminatore tra primi e GUE e l'esponente alpha, non il valore dell'osservabile a scala fissa. Seed check (42/137) conferma. L2 borderline (alpha~0.5, non discriminante).",
tools/data/seme_backup_pre_run.json:334:      "origine": "cycle agent_20260508_0011: duality_scale_contrast su 200K gap primi vs GUE vs Poisson",
tools/data/seme_backup_pre_run.json:427:  "direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/reports/cycle_20260306_0342.json:946:            "GUE": 0.29670833202771496,
tools/data/reports/cycle_20260306_0342.json:948:            "Poisson": 0.510008332027715,
tools/data/reports/cycle_20260306_0342.json:957:          "class": "GUE",
tools/data/reports/cycle_20260306_0342.json:959:            "GUE": 0.1637341019241806,
tools/data/reports/cycle_20260306_0342.json:961:            "Poisson": 0.37703410192418063,
tools/data/reports/cycle_20260306_0342.json:970:          "class": "GUE",
tools/data/reports/cycle_20260306_0342.json:972:            "GUE": 0.07108013924144507,
tools/data/reports/cycle_20260306_0342.json:974:            "Poisson": 0.2843801392414451,
tools/data/reports/cycle_20260306_0342.json:983:          "class": "GUE",
tools/data/reports/cycle_20260306_0342.json:985:            "GUE": 0.0013531361002089293,
tools/data/reports/cycle_20260306_0342.json:987:            "Poisson": 0.21194686389979112,
tools/data/reports/cycle_20260306_0342.json:998:            "GUE": 0.033692181448734315,
tools/data/reports/cycle_20260306_0342.json:1000:            "Poisson": 0.17960781855126573,
tools/data/reports/cycle_20260306_0342.json:1011:            "GUE": 0.06412167049004891,
tools/data/reports/cycle_20260306_0342.json:1013:            "Poisson": 0.14917832950995114,
tools/data/reports/cycle_20260306_0342.json:1024:            "GUE": 0.09263337719183284,
tools/data/reports/cycle_20260306_0342.json:1026:            "Poisson": 0.1206666228081672,
tools/data/reports/cycle_20260306_0342.json:1037:            "GUE": 0.11916312020873215,
tools/data/reports/cycle_20260306_0342.json:1039:            "Poisson": 0.09413687979126789,
tools/data/reports/cycle_20260306_0342.json:1050:            "GUE": 0.14296513348744533,
tools/data/reports/cycle_20260306_0342.json:1052:            "Poisson": 0.07033486651255472,
tools/data/reports/cycle_20260306_0342.json:1061:          "class": "Poisson",
tools/data/reports/cycle_20260306_0342.json:1063:            "GUE": 0.2041358611525424,
tools/data/reports/cycle_20260306_0342.json:1065:            "Poisson": 0.009164138847457648,
tools/data/reports/cycle_20260306_0342.json:1074:          "class": "Poisson",
tools/data/reports/cycle_20260306_0342.json:1076:            "GUE": 0.2748295876655356,
tools/data/reports/cycle_20260306_0342.json:1078:            "Poisson": 0.06152958766553557,
tools/data/reports/cycle_20260306_0342.json:1087:          "class": "Poisson",
tools/data/reports/cycle_20260306_0342.json:1089:            "GUE": 0.3640777020486299,
tools/data/reports/cycle_20260306_0342.json:1091:            "Poisson": 0.15077770204862984,
tools/data/reports/cycle_20260306_0342.json:1100:          "class": "Poisson",
tools/data/reports/cycle_20260306_0342.json:1102:            "GUE": 0.43564800784619784,
tools/data/reports/cycle_20260306_0342.json:1104:            "Poisson": 0.22234800784619782,
tools/data/reports/cycle_20260306_0342.json:1113:          "class": "GUE",
tools/data/reports/cycle_20260306_0342.json:1115:            "GUE": 0.0013531361002089293,
tools/data/reports/cycle_20260306_0342.json:1117:            "Poisson": 0.21194686389979112,
tools/data/reports/cycle_20260306_0342.json:1126:          "class": "GUE",
tools/data/reports/cycle_20260306_0342.json:1128:            "GUE": 0.015680728701978786,
tools/data/reports/cycle_20260306_0342.json:1130:            "Poisson": 0.19761927129802126,
tools/data/reports/cycle_20260306_0342.json:1139:          "class": "GUE",
tools/data/reports/cycle_20260306_0342.json:1141:            "GUE": 0.029241086644125502,
tools/data/reports/cycle_20260306_0342.json:1143:            "Poisson": 0.18405891335587454,
tools/data/reports/cycle_20260306_0342.json:1154:            "GUE": 0.04273384302801908,
tools/data/reports/cycle_20260306_0342.json:1156:            "Poisson": 0.17056615697198096,
tools/data/reports/cycle_20260306_0342.json:1167:            "GUE": 0.05567668696247785,
tools/data/reports/cycle_20260306_0342.json:1169:            "Poisson": 0.1576233130375222,
tools/data/reports/cycle_20260306_0342.json:1180:            "GUE": 0.06821895426251079,
tools/data/reports/cycle_20260306_0342.json:1182:            "Poisson": 0.14508104573748926,
tools/data/reports/cycle_20260306_0342.json:1193:            "GUE": 0.08041041520559711,
tools/data/reports/cycle_20260306_0342.json:1195:            "Poisson": 0.13288958479440294,
tools/data/reports/cycle_20260306_0342.json:1206:            "GUE": 0.09263337719183284,
tools/data/reports/cycle_20260306_0342.json:1208:            "Poisson": 0.1206666228081672,
tools/data/reports/cycle_20260306_0342.json:1219:            "GUE": 0.10444251980628838,
tools/data/reports/cycle_20260306_0342.json:1221:            "Poisson": 0.10885748019371166,
tools/data/reports/cycle_20260306_0342.json:1232:            "GUE": 0.11551666300995106,
tools/data/reports/cycle_20260306_0342.json:1234:            "Poisson": 0.09778333699004899,
tools/data/reports/cycle_20260306_0342.json:1245:            "GUE": 0.12622818756544568,
tools/data/reports/cycle_20260306_0342.json:1247:            "Poisson": 0.08707181243455436,
tools/data/reports/cycle_20260306_0342.json:1258:            "GUE": 0.1363444703271271,
tools/data/reports/cycle_20260306_0342.json:1260:            "Poisson": 0.07695552967287295,
tools/data/reports/cycle_20260306_0342.json:1271:            "GUE": 0.14625965183538286,
tools/data/reports/cycle_20260306_0342.json:1273:            "Poisson": 0.06704034816461718,
tools/data/reports/cycle_20260306_0342.json:1284:            "GUE": 0.15586954772482753,
tools/data/reports/cycle_20260306_0342.json:1286:            "Poisson": 0.05743045227517252,
tools/data/reports/cycle_20260306_0342.json:1295:          "class": "Poisson",
tools/data/reports/cycle_20260306_0342.json:1297:            "GUE": 0.16527431088573818,
tools/data/reports/cycle_20260306_0342.json:1299:            "Poisson": 0.04802568911426186,
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:140:          "domain_window": "RP_lambda_0.030",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:179:          "domain_window": "RP_lambda_0.045",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:218:          "domain_window": "RP_lambda_0.060",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:257:          "domain_window": "RP_lambda_0.075",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:296:          "domain_window": "RP_lambda_0.820",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:484:          "domain_window": "RP_lambda_0.030",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:523:          "domain_window": "RP_lambda_0.045",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:562:          "domain_window": "RP_lambda_0.060",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:601:          "domain_window": "RP_lambda_0.075",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:640:          "domain_window": "RP_lambda_0.820",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:692:      "domain_window": "RP_lambda_0.030",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:700:      "domain_window": "RP_lambda_0.045",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:710:      "domain_window": "RP_lambda_0.060",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:720:      "domain_window": "RP_lambda_0.075",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:731:      "domain_window": "RP_lambda_0.820",
tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json:743:    "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE across size, seed, k and unfolding mode",
tools/data/reports/agent_20260508_0011.md:12:If the duality contrast (real vs shuffle z-score) weakens with scale for prime gaps, what is the quantitative rate of weakening? And does GUE show the same weakening, or is it scale-independent?
tools/data/reports/agent_20260508_0011.md:16:- **Scope**: 200,000 prime gaps (unfolded by local mean, kernel=100), GUE eigenvalue spacings (beta=2, matrix size ~2400, unfolded), Poisson (exponential i.i.d.)
tools/data/reports/agent_20260508_0011.md:18:- **Null baseline**: Poisson (no structure at any scale). Additional null: if effect size is scale-independent, z ~ N^0.5 exactly (alpha = 0.50)
tools/data/reports/agent_20260508_0011.md:29:| GUE     | -6.27  | -3.42 | -8.16  | -2.41 |   -8.32    |
tools/data/reports/agent_20260508_0011.md:30:| Poisson | +0.72  | +0.39 | -0.13  | -1.12 |   -0.64    |
tools/data/reports/agent_20260508_0011.md:49:| Observable |  Primes (s42) | Primes (s137) |  GUE (s42)  | GUE (s137)  | Poisson (s42) |
tools/data/reports/agent_20260508_0011.md:56:All R-squared > 0.95 for primes and GUE (except Poisson, which has no signal).
tools/data/reports/agent_20260508_0011.md:62:2. **GUE eigenvalue spacings show alpha >= 0.5.** For SR (alpha = 0.54), L1 (alpha = 0.60), triple_var (alpha = 0.63): the structure is scale-independent or strengthening. GUE repulsion is built into the ensemble at all scales. Primes mimic GUE locally but lack this scale invariance.
tools/data/reports/agent_20260508_0011.md:64:3. **The discriminator is alpha, not the observable value.** Primes and GUE have similar z-scores at any given window size. The difference is in how z scales with N. Primes: z ~ N^{0.39}. GUE: z ~ N^{0.54}. At small windows they overlap; at large windows they diverge.
tools/data/reports/agent_20260508_0011.md:66:4. **L2 is borderline.** Alpha ~ 0.49-0.53 for primes, near 0.5. L2 is not discriminating between primes and GUE in this metric. The three robust discriminators are SR, L1, and triple_var.
tools/data/reports/agent_20260508_0011.md:68:5. **Poisson shows no scaling.** Alpha near 0 or incoherent (R-squared < 0.15 for L1 and triple_var). No structure to weaken.
tools/data/reports/agent_20260508_0011.md:71:**CONSTRAINT on DUALITA_DIPOLARE_VS_ILLUSORIA / BOUNDARY**: The boundary between dipolar and illusory duality in prime gaps is not a location but a trajectory. The duality contrast (real-vs-shuffle) weakens as N^{-0.11} for SR and N^{-0.18} for L1, approaching Poisson asymptotically. GUE has alpha >= 0.5 (no weakening). The discriminator between primes and GUE is the scaling exponent alpha, not the observable value at any fixed scale.
tools/data/reports/agent_20260508_0011.md:73:L5 check: The weakening of prime gap correlations with scale is consistent with known number-theoretic expectations (Hardy-Littlewood, Lemke Oliver-Soundararajan). What is measured here is the quantitative rate of weakening (alpha ~ 0.39 for SR) and the comparison with GUE (alpha ~ 0.54), which provides a new quantitative discriminator. Default hypothesis: this may be a re-parameterization of known asymptotic decay rates; the exponent alpha as a universality discriminator needs comparison with RMT literature on finite-size effects.
tools/data/reports/agent_20260508_0011.md:77:- **Due radici** (dipolo primario): duality contrast that strengthens with scale (GUE, alpha > 0.5, deep structure) and duality contrast that weakens with scale (primes, alpha < 0.5, dissolving structure). The two are dual because both show dipolar ordering at small scales — the difference emerges only when you observe the trajectory.
tools/data/reports/agent_20260508_0011.md:80:- **Campo di possibilita**: here it becomes possible to discriminate primes from GUE by their scaling trajectory, not by their local statistics. Here it becomes non-possible to claim that prime gaps have "the same universality class as GUE" without specifying the scale and the observable.
tools/data/component_state_anderson3d_interface_20260514_1850.json:65:    "poisson_contrast": "span-matched Poisson null for each class/label",
tools/data/reports/falsifier_20260508_0011.json:9:      "claim": "GUE has alpha >= 0.5 (no weakening)",
tools/data/reports/falsifier_20260508_0011.json:10:      "evidence": "GUE L2 seed 137 shows alpha = 0.475 +/- 0.204, point estimate below 0.5. The blanket claim 'GUE alpha >= 0.5' in the verdict has this counterexample. The large error bar (0.204) makes the estimate uncertain, but a point estimate below the stated threshold cannot be rounded away.",
tools/data/reports/falsifier_20260508_0011.json:11:      "suggestion": "Qualify the verdict: 'GUE alpha >= 0.5 for SR, L1, triple_var; L2 is indeterminate (0.475-0.780 across seeds, error bar spans the threshold).' Alternatively, exclude L2 from the GUE claim as it is excluded from the primes claim."
tools/data/reports/falsifier_20260508_0011.json:16:      "claim": "Poisson shows no scaling. Alpha near 0 or incoherent (R-squared < 0.15 for L1 and triple_var).",
tools/data/reports/falsifier_20260508_0011.json:17:      "evidence": "Poisson SR has alpha=0.263 with R2=0.75; Poisson L2 has alpha=0.165 with R2=0.91. These are not 'near 0' and not 'incoherent.' An i.i.d. sequence should produce z ~ N(0,1) at all window sizes, giving alpha=0 exactly. Non-zero alpha with R2=0.91 in the null baseline suggests either an unfolding artifact or a bias in the windowed z-score computation that inflates z at larger N even without structure.",
tools/data/reports/falsifier_20260508_0011.json:18:      "suggestion": "Investigate the Poisson L2 scaling (alpha=0.165, R2=0.91) as a potential methodological artifact. If the null baseline itself shows scaling, the prime and GUE alpha values may carry a systematic offset. Report corrected alpha_prime - alpha_poisson as the clean discriminator."
tools/data/reports/falsifier_20260508_0011.json:23:      "claim": "GUE repulsion is built into the ensemble at all scales. [...] alpha >= 0.5 [...] scale-independent or strengthening.",
tools/data/reports/falsifier_20260508_0011.json:24:      "evidence": "Finite-size scaling of GUE spectral statistics is well-studied in RMT literature (e.g., Mehta, Guhr-Müller-Groeling-Weidenmüller). The fact that z grows faster than sqrt(N) for some observables (L1 alpha=0.60, triple_var=0.63) likely reflects known finite-size convergence to the thermodynamic limit, not a novel 'strengthening.' The report's L5 check acknowledges the need for RMT comparison but does not name the specific known result.",
tools/data/reports/falsifier_20260508_0011.json:25:      "suggestion": "Compare alpha values with known finite-size scaling exponents from RMT (e.g., number variance scaling, rigidity scaling with matrix dimension). If they match, the GUE arm is re-discovery and the novelty claim should rest solely on the primes-vs-GUE alpha gap."
tools/data/reports/falsifier_20260508_0011.json:28:  "summary": "Report is internally coherent on its main claim (primes alpha < 0.5, GUE alpha > 0.5) but two edge cases break the stated perimeter: GUE L2 s137 violates the blanket 'alpha >= 0.5' (L4), and Poisson L2 shows non-trivial scaling (alpha=0.165, R2=0.91) that undermines the null baseline and may indicate a systematic bias in the z-score methodology (L4). Neither is fatal but both require tightening before the finding can be called clean."
tools/data/reports/agent_20260501_0931.md:1:# Agent Report — The GUE-Poisson Crossover Has a Phase Transition: Direction Locks, Magnitude Decays, Then Flips
tools/data/reports/agent_20260501_0931.md:9:> "8 domains GUE, 5 Poisson — the boundary is the third included operational" (BOUNDARY).
tools/data/reports/agent_20260501_0931.md:10:> The GUE-Poisson transition: is it a smooth interpolation or does it have structure?
tools/data/reports/agent_20260501_0931.md:14:If we gradually destroy GUE ordering by partially shuffling eigenvalue spacings (fraction alpha of positions shuffled), what happens to the dipolar angle (theta, magnitude) in the (SR, L1) plane? Is the crossover smooth (interpolation) or sharp (phase transition)? And where do primes sit relative to this crossover curve?
tools/data/reports/agent_20260501_0931.md:18:- **Method**: Partial shuffle of GUE bulk spacings at 21 alpha levels (0.00 to 1.00, step 0.05)
tools/data/reports/agent_20260501_0931.md:19:- **GUE source**: 60 matrices of size 300, bulk 60% (central eigenvalues), mean-normalized
tools/data/reports/agent_20260501_0931.md:20:- **Partial shuffle**: At each alpha, select floor(alpha * N) random positions per matrix, permute spacings at those positions only, leave rest in GUE order
tools/data/reports/agent_20260501_0931.md:23:- **Null**: Full shuffle (alpha=1.0) of GUE spacings — destroys ordering, preserves marginal distribution
tools/data/reports/agent_20260501_0931.md:24:- **Prime reference**: 100K+ primes, gaps normalized by local running mean (window=100), split into 60 chunks, same (SR, L1) computation. Own shuffle baseline (not GUE shuffle)
tools/data/reports/agent_20260501_0931.md:28:### GUE Crossover: alpha vs dipolar coordinates
tools/data/reports/agent_20260501_0931.md:52:- **Prime on the curve**: In dipolar (dSR, dL1) space, the closest point on the GUE crossover to the prime vector is at alpha = 0.45 (distance 0.012, z = 1.1 — within noise).
tools/data/reports/agent_20260501_0931.md:53:- **Prime direction offset**: Prime theta = -105.3, GUE stable theta = -96.6. Delta = -8.7 degrees. GUE direction std = 0.27 degrees. The offset is 32 sigma in GUE units. The MAGNITUDE matches but the DIRECTION does not.
tools/data/reports/agent_20260501_0931.md:57:1. **The GUE-Poisson crossover is not smooth — it has a phase transition.** The dipolar magnitude decays linearly with alpha and passes through a near-zero minimum (0.0007) at alpha in [0.65, 0.75]. At this point the dipolar direction flips approximately 180 degrees. Below the transition, the ordering signal points consistently at -97 degrees. Above it, residual noise points at +82 degrees. The transition is a genuine zero-crossing, not a gradual rotation.
tools/data/reports/agent_20260501_0931.md:59:2. **The dipolar direction is an invariant of the ordered regime.** From pure GUE (alpha=0) to 60% shuffled (alpha=0.60), the direction stays locked at -96.6 +/- 0.27 degrees. Destroying 60% of the ordering preserves the CHARACTER of the remaining 40%. Only the MAGNITUDE decreases (linearly, at rate -0.41/alpha). This means the direction encodes WHAT KIND of ordering exists, not HOW MUCH.
tools/data/reports/agent_20260501_0931.md:61:3. **Primes match the crossover magnitude but not the direction.** In dipolar magnitude, primes (mag=0.068) correspond to alpha ~ 0.45 on the GUE curve (z=1.1 from curve). But the prime direction (-105.3 degrees) is 8.7 degrees off the GUE direction (-96.6 degrees), a 32-sigma offset. The prime ordering has comparable STRENGTH to 45%-shuffled GUE, but a different CHARACTER. The additional -8.7 degrees means primes have relatively more gap-similarity depression (SR effect) per unit of anticorrelation (L1 effect) than GUE — consistent with dL1/dSR = 2.3 for primes vs 8.4+ for GUE (previous experiments).
tools/data/reports/agent_20260501_0931.md:67:**CONFIRMED structure on BOUNDARY**: The GUE-Poisson transition in the dipolar plane has a phase transition (direction flip at magnitude zero-crossing, alpha in [0.65, 0.75]). The boundary is a discrete structural feature, not an interpolation.
tools/data/reports/agent_20260501_0931.md:69:**CONSTRAINT on DIPOLAR_ORDERING**: Prime magnitude matches the GUE crossover at alpha ~ 0.45 (z=1.1), but the direction is 8.7 degrees off (32 sigma). Primes are not "partially shuffled GUE" — they share the quantity of ordering but differ in quality. Perimeter: this comparison uses partial-shuffle as the crossover mechanism. Other mechanisms (e.g., Rosenzweig-Porter, Brody) might yield different crossover topologies.
tools/data/reports/agent_20260501_0931.md:71:**L5 note (re-discovery check)**: The GUE-Poisson transition is well-studied (Rosenzweig-Porter model, Brody distribution, Anderson localization). The specific observation that the DIPOLAR DIRECTION is an invariant of the ordered regime while the magnitude decays linearly appears novel in this framework. Default hypothesis: direction invariance likely follows from the linearity of SR and L1 as functions of ordering fraction. The phase transition at the zero-crossing is structural — it marks where the ordering signal changes sign, not just magnitude.
tools/data/reports/agent_20260501_0931.md:77:- **Invariante di passaggio**: the direction (-96.6 degrees). It survives from pure GUE through 60% destruction. The character of ordering persists even when most of the ordering is gone. What crosses the vertex is the kind, not the amount.
tools/data/reports/agent_20260501_0931.md:78:- **Campo di possibilita**: Possible — classify ordering regimes by direction (what kind) independently from magnitude (how much). Determine phase transition points for arbitrary sequences. Not possible — interpolate smoothly between GUE and Poisson in dipolar coordinates (the transition is discrete).
tools/data/operator_directives_consumed/operator_directive_20260514_1850.md:11:- report: `Agent Report - Rafforzamento tester fisico GOE/GUE N-curve`
tools/data/operator_directives_consumed/operator_directive_20260514_1850.md:53:- matematica: osservabili canonici `SR`, `L1`, `triple_var` contro null Poisson
tools/data/operator_directives_consumed/operator_directive_20260514_1850.md:57:- se il ciclo devia dalla direzione GOE/GUE/Poisson-Anderson, deve dichiarare
tools/data/reports/agent_20260429_1041.md:43:| Brody beta | -0.030 | 0.78 | Decays toward Poisson |
tools/data/reports/agent_20260429_1041.md:123:- **BOUNDARY constrained**: the GUE/Poisson boundary (Brody flow) only describes layers 1-2. Layer 3 (algebraic) is invisible to Brody beta. Any complete model of the boundary must include the algebraic floor.
tools/data/reports/agent_20260429_1041.md:130:- **Campo di possibilità**: diventa possibile modellare il confine GUE/Poisson con un pavimento algebrico che non decade — il Brody beta raggiunge 0 a p ~ 10^9 ma la struttura mod-3 resta. Diventa non-possibile trattare "strutturale" come una singola categoria — ci sono strutture che decadono e strutture che non decadono, e il confine tra i due è il contenuto.
tools/data/operator_directives_consumed/operator_directive_20260514_1649.md:60:output: component_state + contrasto Poisson + contrasto diretto se classi presenti
tools/data/reports/falsifier_20260516_1124.json:16:      "claim": "`relation`: `follows_direction`; `seed_residue`: restano non testati il perimetro completo 8 GUE / 5 Poisson e un audit fisico large-L.",
tools/data/reports/falsifier_20260516_1124.json:17:      "evidence": "La direzione viva in `seme.json` e' `Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo`. Il report resta su un sotto-perimetro Anderson compatto/regressivo e dichiara il residuo, ma non lo marca come `deliberate_counter_perimeter`; quindi l'aderenza e' motivata ma non pienamente allineata al perimetro 8/5.",
tools/data/reports/falsifier_20260516_1124.json:18:      "suggestion": "Nel prossimo ciclo dichiarare esplicitamente `deliberate_counter_perimeter` se si resta su Anderson, con `why` e `not_drift`, oppure trasferire il null endpoint-preserving ad almeno un confronto multi-dominio GUE/Poisson del seme."
tools/data/operator_directives_consumed/operator_directive_20260509_1400.md:6:fuori dal deposito V_c e dentro il perimetro `BOUNDARY`: 8 domini GUE,
tools/data/operator_directives_consumed/operator_directive_20260509_1400.md:7:5 Poisson. Non cercare direttamente "GUE o Poisson?" e non rifare un
tools/data/operator_directives_consumed/operator_directive_20260509_1400.md:23:Usa solo sottografi, finestre o domain rows `complete` o `contaminated`
tools/data/operator_directives_consumed/operator_directive_20260509_1400.md:34:  `tools/exp_duality_scale_contrast.py`, `tools/exp_two_channel_cross_domain.py`
tools/data/operator_directives_consumed/operator_directive_20260509_1400.md:45:- dove il terzo incluso del confine GUE/Poisson diventa osservabile;
tools/data/operator_directives_consumed/operator_directive_20260509_0659.md:16:- reasoning: Il ciclo ha prodotto una falsificazione strutturale utile: il label-set preservato non basta a ricostruire il boundary `V_c` nel perimetro N=89. Non serve fermare l'operatore: la consecutio e' gia' indicata dal deposito, cioe' riparare il null al nodo generativo e distinguere phase-shuffle Sturmian da surrogate label-preserving prima di estendere a GUE/Poisson.
tools/data/operator_directives_consumed/operator_directive_20260509_1427.md:18:null/surrogate row-aligned per una coppia blank GUE/Poisson:
tools/data/operator_directives_consumed/operator_directive_20260509_1427.md:20:- `zeta_zeros` (blank GUE);
tools/data/operator_directives_consumed/operator_directive_20260509_1427.md:21:- `pendolo_doppio` (blank Poisson).
tools/data/operator_directives_consumed/operator_directive_20260509_1427.md:35:  `z=-2.310593`, `GUE -> GUE`, `ordering_dependent=false`;
tools/data/operator_directives_consumed/operator_directive_20260509_1427.md:37:  `shuffle_mean=0.292437`, `z=27.919656`, `Poisson -> Poisson`,
tools/data/operator_directives_consumed/operator_directive_20260509_1427.md:56:- Non dichiarare nuova legge GUE/Poisson.
tools/data/operator_directives_consumed/operator_directive_20260509_1427.md:59:- Non trattare `pendolo_doppio` come cambio classe: e' Poisson -> Poisson con
tools/data/operator_directives_consumed/operator_directive_20260514_1612.md:15:   (`prime-minus-mod6`, GUE/Poisson, boundary, spettro, gap, vettore o null)
tools/data/reports/falsifier_20260505_0330.json:10:      "evidence": "Le matrici PCA riportate non danno uno zero esatto delle componenti non-PC1: primes PC1=0.989 quindi residuo=0.011, effective rank=1.069; GUE PC1=0.997 quindi residuo=0.003, effective rank=1.022. Il dato supporta ridondanza forte, non proibizione dura di autonomia residua.",
tools/data/notte_20260326_0330.md:5:  collatz_cp: r=0.9497136076205077, spacing=GUE-like [conferma]
tools/data/notte_20260326_0330.md:8:  ising_2d_cp_-0.40399731526527427: r=0.9108185170256915, spacing=GUE-like [conferma]
tools/data/notte_20260326_0330.md:9:  ising_2d_cp_0.45522935739736126: r=1.0431954263284353, spacing=GUE-like [conferma]
tools/data/notte_20260326_0330.md:10:  brownian_motion_cp_0.10156293949284084: r=0.9966329966329966, spacing=Poisson-like [conferma]
tools/data/notte_20260326_0330.md:11:  brownian_motion_cp_0.9083139965385025: r=1.0, spacing=Poisson-like [conferma]
tools/data/notte_20260326_0330.md:12:  percolation_cp_0.3034086711489568: r=0.6949152542372882, spacing=GUE-like [conferma]
tools/data/notte_20260326_0330.md:13:  percolation_cp_0.8397168647434718: r=1.0454545454545456, spacing=GUE-like [conferma]
tools/data/notte_20260326_0330.md:14:  cellular_automata_cp_150: r=0.7452006980802792, spacing=GUE-like [conferma]
tools/data/notte_20260326_0330.md:17:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260326_0330.md:18:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260326_0330.md:19:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260326_0330.md:20:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260326_0330.md:52:## Fase 4: Cross-domain
tools/data/operator_directives_consumed/operator_directive_20260509_0819.md:4:Non inseguire direttamente GUE/Poisson, Vc, hamming, phase-shift o un null
tools/data/operator_directives_consumed/operator_directive_20260509_1409.md:18:Trasferire il gate `denominator_state` al confine `BOUNDARY`: 8 domini GUE,
tools/data/operator_directives_consumed/operator_directive_20260509_1409.md:19:5 Poisson. Il risultato valido e' uno di questi:
tools/data/operator_directives_consumed/operator_directive_20260509_1409.md:31:- Non usare GUE/Poisson come risposta binaria; usali come perimetro di
tools/data/operator_directives_consumed/operator_directive_20260509_1409.md:42:- `tools/exp_two_channel_cross_domain.py`
tools/data/operator_directives_consumed/operator_directive_20260509_1409.md:50:- domain/window;
tools/data/operator_directives_consumed/operator_directive_20260509_1409.md:51:- source domain type (`GUE`, `Poisson`, `mixture`, `surrogate` o altro
tools/data/operator_directives_consumed/operator_directive_20260514_1631.md:39:- Wigner-Dyson / GUE level statistics;
tools/data/operator_directives_consumed/operator_directive_20260514_1631.md:40:- Poisson level statistics;
tools/data/operator_directives_consumed/operator_directive_20260514_1631.md:55:GUE / spettri quantistici caotici
tools/data/operator_directives_consumed/operator_directive_20260514_1631.md:56:  -> SR,L1,triple_var + null Poisson span-matched
tools/data/operator_directives_consumed/operator_directive_20260514_1631.md:62:- `SR` attivo in GUE e assorbito verso Anderson localizzato;
tools/data/reports/cycle_20260305_0844.json:32:            "GUE": 0.29670833202771496,
tools/data/reports/cycle_20260305_0844.json:34:            "Poisson": 0.510008332027715,
tools/data/reports/cycle_20260305_0844.json:43:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:45:            "GUE": 0.1637341019241806,
tools/data/reports/cycle_20260305_0844.json:47:            "Poisson": 0.37703410192418063,
tools/data/reports/cycle_20260305_0844.json:56:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:58:            "GUE": 0.07108013924144507,
tools/data/reports/cycle_20260305_0844.json:60:            "Poisson": 0.2843801392414451,
tools/data/reports/cycle_20260305_0844.json:69:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:71:            "GUE": 0.0013531361002089293,
tools/data/reports/cycle_20260305_0844.json:73:            "Poisson": 0.21194686389979112,
tools/data/reports/cycle_20260305_0844.json:84:            "GUE": 0.033692181448734315,
tools/data/reports/cycle_20260305_0844.json:86:            "Poisson": 0.17960781855126573,
tools/data/reports/cycle_20260305_0844.json:97:            "GUE": 0.06412167049004891,
tools/data/reports/cycle_20260305_0844.json:99:            "Poisson": 0.14917832950995114,
tools/data/reports/cycle_20260305_0844.json:110:            "GUE": 0.09263337719183284,
tools/data/reports/cycle_20260305_0844.json:112:            "Poisson": 0.1206666228081672,
tools/data/reports/cycle_20260305_0844.json:123:            "GUE": 0.11916312020873215,
tools/data/reports/cycle_20260305_0844.json:125:            "Poisson": 0.09413687979126789,
tools/data/reports/cycle_20260305_0844.json:136:            "GUE": 0.14296513348744533,
tools/data/reports/cycle_20260305_0844.json:138:            "Poisson": 0.07033486651255472,
tools/data/reports/cycle_20260305_0844.json:147:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:149:            "GUE": 0.2041358611525424,
tools/data/reports/cycle_20260305_0844.json:151:            "Poisson": 0.009164138847457648,
tools/data/reports/cycle_20260305_0844.json:160:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:162:            "GUE": 0.2748295876655356,
tools/data/reports/cycle_20260305_0844.json:164:            "Poisson": 0.06152958766553557,
tools/data/reports/cycle_20260305_0844.json:173:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:175:            "GUE": 0.3640777020486299,
tools/data/reports/cycle_20260305_0844.json:177:            "Poisson": 0.15077770204862984,
tools/data/reports/cycle_20260305_0844.json:186:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:188:            "GUE": 0.43564800784619784,
tools/data/reports/cycle_20260305_0844.json:190:            "Poisson": 0.22234800784619782,
tools/data/reports/cycle_20260305_0844.json:199:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:201:            "GUE": 0.0013531361002089293,
tools/data/reports/cycle_20260305_0844.json:203:            "Poisson": 0.21194686389979112,
tools/data/reports/cycle_20260305_0844.json:212:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:214:            "GUE": 0.015680728701978786,
tools/data/reports/cycle_20260305_0844.json:216:            "Poisson": 0.19761927129802126,
tools/data/reports/cycle_20260305_0844.json:225:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:227:            "GUE": 0.029241086644125502,
tools/data/reports/cycle_20260305_0844.json:229:            "Poisson": 0.18405891335587454,
tools/data/reports/cycle_20260305_0844.json:240:            "GUE": 0.04273384302801908,
tools/data/reports/cycle_20260305_0844.json:242:            "Poisson": 0.17056615697198096,
tools/data/reports/cycle_20260305_0844.json:253:            "GUE": 0.05567668696247785,
tools/data/reports/cycle_20260305_0844.json:255:            "Poisson": 0.1576233130375222,
tools/data/reports/cycle_20260305_0844.json:266:            "GUE": 0.06821895426251079,
tools/data/reports/cycle_20260305_0844.json:268:            "Poisson": 0.14508104573748926,
tools/data/reports/cycle_20260305_0844.json:279:            "GUE": 0.08041041520559711,
tools/data/reports/cycle_20260305_0844.json:281:            "Poisson": 0.13288958479440294,
tools/data/reports/cycle_20260305_0844.json:292:            "GUE": 0.09263337719183284,
tools/data/reports/cycle_20260305_0844.json:294:            "Poisson": 0.1206666228081672,
tools/data/reports/cycle_20260305_0844.json:305:            "GUE": 0.10444251980628838,
tools/data/reports/cycle_20260305_0844.json:307:            "Poisson": 0.10885748019371166,
tools/data/reports/cycle_20260305_0844.json:318:            "GUE": 0.11551666300995106,
tools/data/reports/cycle_20260305_0844.json:320:            "Poisson": 0.09778333699004899,
tools/data/reports/cycle_20260305_0844.json:331:            "GUE": 0.12622818756544568,
tools/data/reports/cycle_20260305_0844.json:333:            "Poisson": 0.08707181243455436,
tools/data/reports/cycle_20260305_0844.json:344:            "GUE": 0.1363444703271271,
tools/data/reports/cycle_20260305_0844.json:346:            "Poisson": 0.07695552967287295,
tools/data/reports/cycle_20260305_0844.json:357:            "GUE": 0.14625965183538286,
tools/data/reports/cycle_20260305_0844.json:359:            "Poisson": 0.06704034816461718,
tools/data/reports/cycle_20260305_0844.json:370:            "GUE": 0.15586954772482753,
tools/data/reports/cycle_20260305_0844.json:372:            "Poisson": 0.05743045227517252,
tools/data/reports/cycle_20260305_0844.json:381:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:383:            "GUE": 0.16527431088573818,
tools/data/reports/cycle_20260305_0844.json:385:            "Poisson": 0.04802568911426186,
tools/data/reports/cycle_20260305_0844.json:405:            "GUE": 0.29670833202771496,
tools/data/reports/cycle_20260305_0844.json:407:            "Poisson": 0.510008332027715,
tools/data/reports/cycle_20260305_0844.json:416:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:418:            "GUE": 0.1637341019241806,
tools/data/reports/cycle_20260305_0844.json:420:            "Poisson": 0.37703410192418063,
tools/data/reports/cycle_20260305_0844.json:429:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:431:            "GUE": 0.07108013924144507,
tools/data/reports/cycle_20260305_0844.json:433:            "Poisson": 0.2843801392414451,
tools/data/reports/cycle_20260305_0844.json:442:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:444:            "GUE": 0.0013531361002089293,
tools/data/reports/cycle_20260305_0844.json:446:            "Poisson": 0.21194686389979112,
tools/data/reports/cycle_20260305_0844.json:457:            "GUE": 0.033692181448734315,
tools/data/reports/cycle_20260305_0844.json:459:            "Poisson": 0.17960781855126573,
tools/data/reports/cycle_20260305_0844.json:470:            "GUE": 0.06412167049004891,
tools/data/reports/cycle_20260305_0844.json:472:            "Poisson": 0.14917832950995114,
tools/data/reports/cycle_20260305_0844.json:483:            "GUE": 0.09263337719183284,
tools/data/reports/cycle_20260305_0844.json:485:            "Poisson": 0.1206666228081672,
tools/data/reports/cycle_20260305_0844.json:496:            "GUE": 0.11916312020873215,
tools/data/reports/cycle_20260305_0844.json:498:            "Poisson": 0.09413687979126789,
tools/data/reports/cycle_20260305_0844.json:509:            "GUE": 0.14296513348744533,
tools/data/reports/cycle_20260305_0844.json:511:            "Poisson": 0.07033486651255472,
tools/data/reports/cycle_20260305_0844.json:520:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:522:            "GUE": 0.2041358611525424,
tools/data/reports/cycle_20260305_0844.json:524:            "Poisson": 0.009164138847457648,
tools/data/reports/cycle_20260305_0844.json:533:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:535:            "GUE": 0.2748295876655356,
tools/data/reports/cycle_20260305_0844.json:537:            "Poisson": 0.06152958766553557,
tools/data/reports/cycle_20260305_0844.json:546:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:548:            "GUE": 0.3640777020486299,
tools/data/reports/cycle_20260305_0844.json:550:            "Poisson": 0.15077770204862984,
tools/data/reports/cycle_20260305_0844.json:559:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:561:            "GUE": 0.43564800784619784,
tools/data/reports/cycle_20260305_0844.json:563:            "Poisson": 0.22234800784619782,
tools/data/reports/cycle_20260305_0844.json:572:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:574:            "GUE": 0.0013531361002089293,
tools/data/reports/cycle_20260305_0844.json:576:            "Poisson": 0.21194686389979112,
tools/data/reports/cycle_20260305_0844.json:585:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:587:            "GUE": 0.015680728701978786,
tools/data/reports/cycle_20260305_0844.json:589:            "Poisson": 0.19761927129802126,
tools/data/reports/cycle_20260305_0844.json:598:          "class": "GUE",
tools/data/reports/cycle_20260305_0844.json:600:            "GUE": 0.029241086644125502,
tools/data/reports/cycle_20260305_0844.json:602:            "Poisson": 0.18405891335587454,
tools/data/reports/cycle_20260305_0844.json:613:            "GUE": 0.04273384302801908,
tools/data/reports/cycle_20260305_0844.json:615:            "Poisson": 0.17056615697198096,
tools/data/reports/cycle_20260305_0844.json:626:            "GUE": 0.05567668696247785,
tools/data/reports/cycle_20260305_0844.json:628:            "Poisson": 0.1576233130375222,
tools/data/reports/cycle_20260305_0844.json:639:            "GUE": 0.06821895426251079,
tools/data/reports/cycle_20260305_0844.json:641:            "Poisson": 0.14508104573748926,
tools/data/reports/cycle_20260305_0844.json:652:            "GUE": 0.08041041520559711,
tools/data/reports/cycle_20260305_0844.json:654:            "Poisson": 0.13288958479440294,
tools/data/reports/cycle_20260305_0844.json:665:            "GUE": 0.09263337719183284,
tools/data/reports/cycle_20260305_0844.json:667:            "Poisson": 0.1206666228081672,
tools/data/reports/cycle_20260305_0844.json:678:            "GUE": 0.10444251980628838,
tools/data/reports/cycle_20260305_0844.json:680:            "Poisson": 0.10885748019371166,
tools/data/reports/cycle_20260305_0844.json:691:            "GUE": 0.11551666300995106,
tools/data/reports/cycle_20260305_0844.json:693:            "Poisson": 0.09778333699004899,
tools/data/reports/cycle_20260305_0844.json:704:            "GUE": 0.12622818756544568,
tools/data/reports/cycle_20260305_0844.json:706:            "Poisson": 0.08707181243455436,
tools/data/reports/cycle_20260305_0844.json:717:            "GUE": 0.1363444703271271,
tools/data/reports/cycle_20260305_0844.json:719:            "Poisson": 0.07695552967287295,
tools/data/reports/cycle_20260305_0844.json:730:            "GUE": 0.14625965183538286,
tools/data/reports/cycle_20260305_0844.json:732:            "Poisson": 0.06704034816461718,
tools/data/reports/cycle_20260305_0844.json:743:            "GUE": 0.15586954772482753,
tools/data/reports/cycle_20260305_0844.json:745:            "Poisson": 0.05743045227517252,
tools/data/reports/cycle_20260305_0844.json:754:          "class": "Poisson",
tools/data/reports/cycle_20260305_0844.json:756:            "GUE": 0.16527431088573818,
tools/data/reports/cycle_20260305_0844.json:758:            "Poisson": 0.04802568911426186,
tools/data/operator_directives_consumed/operator_directive_20260514_1640.md:34:- Wigner-Dyson / GOE-GUE level statistics;
tools/data/operator_directives_consumed/operator_directive_20260514_1640.md:35:- Poisson level statistics;
tools/data/operator_directives_consumed/operator_directive_20260514_1640.md:43:1. distinguere almeno GOE e GUE, dichiarando la simmetria;
tools/data/notte_20260317_0330.md:4:  ising_2d_var_-0.1: r=0.9766837149507093, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260317_0330.md:5:  ising_2d_var_0.1: r=0.9984668415805404, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260317_0330.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260317_0330.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260317_0330.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260317_0330.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260317_0330.md:10:  brownian_motion_var_0.3: r=1.0, spacing=Poisson-like (⟨r⟩=0.3732286748513319)
tools/data/notte_20260317_0330.md:11:  brownian_motion_var_0.5: r=1.037037037037037, spacing=Poisson-like (⟨r⟩=0.3884337586965294)
tools/data/notte_20260317_0330.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260317_0330.md:13:  percolation_var_0.55: r=1.0357142857142858, spacing=Poisson-like (⟨r⟩=0.43363212915065535)
tools/data/notte_20260317_0330.md:14:  percolation_var_0.65: r=1.3836772983114447, spacing=Poisson-like (⟨r⟩=0.4818192957451693)
tools/data/notte_20260317_0330.md:44:## Fase 4: Cross-domain
tools/data/operator_directives_consumed/operator_directive_20260514_1701.md:16:- reasoning: La riparazione L6 richiesta dall'operatore e' stata completata senza cambiare contenuto scientifico: Bridge QA clean, health completed, e il verdict resta correttamente CONSTRAINT / FIT-READY TESTER. Non emerge una nuova dipendenza dall'operatore: il residuo era formale/contrattuale ed e' stato chiuso nel nodo regressivo del report. Il seme e' gia' avanzato a piano 125 con direzione viva sul confine GUE/Poisson, quindi il passo successivo e' riprendere il flusso sperimentale.
tools/data/reports/agent_20260515_1758.md:8:**observable_contract**: claim=`phi` resta terzo incluso fisico anche quando il potenziale binario viene sostituito dal coseno Aubry-Andre canonico; observable=`spacing_r` + `mean_ipr` con controllo di distinzione da silver/bronze; operator=`tools/exp_aubry_cosine_boundary_counter_gate.py`; generator=Hamiltoniana tight-binding 1D con potenziale coseno per beta phi/silver/bronze, periodico beta=1/2 e random onsite uniforme; denominator=N={89,144,233} x phase={0,0.25,0.5,0.75} x V=0.50..3.00 step 0.25, random_trials=6; non_possible=promuovere phi come boundary fisico se non si separa dai controlli irrazionali con spacing e localizzazione insieme; not_tested=limite asintotico, disordine correlato sperimentale, classi GUE/Poisson universali dirette.
tools/data/reports/agent_20260515_1758.md:23:- `why`: segue la direzione viva "8 domini GUE, 5 Poisson - il confine e' il terzo incluso operativo" verificando se il confine fisico aperto nel ritorno Aubry/Fibonacci sopravvive a un contro-perimetro canonicale.
tools/data/reports/agent_20260515_1758.md:36:- **Punto fisico sorgente**: transizione spettrale/localizzazione in reticoli quasi-periodici, usata come ritorno fisico del boundary GUE/Poisson.
tools/data/operator_directives_consumed/operator_directive_20260509_1437.md:35:  `shuffle_mean=0.372199`, `z=4.562844`, `Poisson -> Poisson`,
tools/data/operator_directives_consumed/operator_directive_20260509_1437.md:38:  `shuffle_mean=0.494932`, `z=31.390192`, `GUE -> GUE`,
tools/data/operator_directives_consumed/operator_directive_20260509_1437.md:41:  `shuffle_mean=0.099640`, `z=161.271569`, `GUE -> Poisson`,
tools/data/operator_directives_consumed/operator_directive_20260509_1437.md:59:- Non dichiarare una nuova legge GUE/Poisson.
tools/data/reports/agent_20260516_1117.md:8:**observable_contract**: claim=il gate BOUNDARY a due lettori trasferisce oltre RP solo se la stessa riga Anderson e' `stable_graph_bridge+classical_intermediate` su tutte le size e batte il feature-scramble null; observable=`two_reader_all_sizes` unito a `graph_bridge_frequency`, adjacent ratio, Brody q, mixture Wigner/Poisson, IPR, entropy; operator=Hamiltoniana Anderson 3D con disorder sweep, seed perturbation e kNN reader; generator=`H=sum_i eps_i |i><i| + hopping nearest-neighbor` su reticolo periodico `L^3`, `eps_i uniform[-W/2,W/2]`; denominator=11 disorder rows x 2 size x 2 seed x 3 k-reader, null 128 feature-scramble trial; non_possible=promozione fisica se il null ricostruisce almeno il conteggio osservato; not_tested=limite termodinamico, mobility-edge exponent, boundary conditions alternative, sparse large-L, spettri sperimentali.
tools/data/reports/agent_20260516_1117.md:11:- **Combo**: A9 terzo incluso + QxG continuo/discreto + nodo BOUNDARY del grafo + direzione seme "8 domini GUE, 5 Poisson".
tools/data/reports/agent_20260516_1117.md:19:- **Movimento A->M->B**: fisico A = crossover RP GUE/Poisson bloccato dal ciclo 11:11; matematica M = gate a due lettori con trasporto per size e null; fisico B = Anderson 3D mobility edge. Il ritorno fisico resta candidato non promosso.
tools/data/reports/agent_20260516_1117.md:25:- `seed_residue`: restano non testati il perimetro completo 8 GUE / 5 Poisson e spettri fisici reali.
tools/data/reports/agent_20260516_1117.md:29:- **Baseline noto piu vicino**: Anderson localization e mobility edge 3D; crossover Wigner-Dyson/Poisson; Brody interpolation; finite-size scaling della transizione metallico/localizzato.
tools/data/reports/agent_20260516_1117.md:41:- **Punto fisico sorgente**: crossover spettrale RP GUE/Poisson con residuo finito-size.
tools/data/reports/agent_20260516_1117.md:53:- **Classical reader**: adjacent ratio, Brody q, Wigner/Poisson mixture weight; `classical_intermediate` quando non cade negli endpoint.
tools/data/notte_20260303_0330.md:4:  ising_2d_var_-0.1: r=0.999764483716038, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260303_0330.md:5:  ising_2d_var_0.1: r=0.9962779970953693, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260303_0330.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260303_0330.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260303_0330.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260303_0330.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260303_0330.md:10:  brownian_motion_var_0.3: r=0.9895833333333333, spacing=Poisson-like (⟨r⟩=0.39037158456490495)
tools/data/notte_20260303_0330.md:11:  brownian_motion_var_0.5: r=1.0, spacing=Poisson-like (⟨r⟩=0.39619010656660225)
tools/data/notte_20260303_0330.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260303_0330.md:13:  percolation_var_0.55: r=1.0, spacing=Poisson-like (⟨r⟩=0.43344476133517995)
tools/data/notte_20260303_0330.md:14:  percolation_var_0.65: r=1.380952380952381, spacing=Poisson-like (⟨r⟩=0.45002661025974017)
tools/data/notte_20260303_0330.md:44:## Fase 4: Cross-domain
tools/data/reports/report_20260403_0330.md:17:- [✓] C1: Zeri zeta hanno spacing GUE (non Poisson)... → spacing=GUE-like, ⟨r⟩=0.6150
tools/data/reports/report_20260403_0330.md:22:- [✓] N2: Rule 30/110 hanno spacing >> GUE standard... → ⟨r⟩=1.0000 (GUE standard=0.60)
tools/data/reports/report_20260403_0330.md:25:- percolation_var_0.55: r=0.7543859649122806, spacing=Poisson-like
tools/data/reports/report_20260403_0330.md:26:- numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like
tools/data/reports/report_20260403_0330.md:27:- coupled_oscillators_var_50: r=1.0, spacing=Poisson-like
tools/data/reports/report_20260403_0330.md:28:- brownian_motion_var_0.5: r=1.0, spacing=Poisson-like
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:89:          "domain_window": "Anderson3D_W_2.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:98:          "source_domain_type": "metallic_wigner_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:105:          "domain_window": "Anderson3D_W_4.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:114:          "source_domain_type": "metallic_wigner_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:121:          "domain_window": "Anderson3D_W_8.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:130:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:137:          "domain_window": "Anderson3D_W_12.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:146:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:153:          "domain_window": "Anderson3D_W_14.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:162:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:169:          "domain_window": "Anderson3D_W_16.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:178:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:185:          "domain_window": "Anderson3D_W_16.50",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:194:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:201:          "domain_window": "Anderson3D_W_17.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:210:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:217:          "domain_window": "Anderson3D_W_20.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:226:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:233:          "domain_window": "Anderson3D_W_24.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:242:          "source_domain_type": "localized_poisson_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:249:          "domain_window": "Anderson3D_W_32.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:258:          "source_domain_type": "localized_poisson_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:379:          "domain_window": "Anderson3D_W_2.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:388:          "source_domain_type": "metallic_wigner_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:395:          "domain_window": "Anderson3D_W_4.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:404:          "source_domain_type": "metallic_wigner_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:411:          "domain_window": "Anderson3D_W_8.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:420:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:427:          "domain_window": "Anderson3D_W_12.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:436:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:443:          "domain_window": "Anderson3D_W_14.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:452:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:459:          "domain_window": "Anderson3D_W_16.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:468:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:475:          "domain_window": "Anderson3D_W_16.50",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:484:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:491:          "domain_window": "Anderson3D_W_17.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:500:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:507:          "domain_window": "Anderson3D_W_20.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:516:          "source_domain_type": "mobility_candidate",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:523:          "domain_window": "Anderson3D_W_24.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:532:          "source_domain_type": "localized_poisson_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:539:          "domain_window": "Anderson3D_W_32.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:548:          "source_domain_type": "localized_poisson_pole",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:590:      "domain_window": "Anderson3D_W_2.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:612:      "domain_window": "Anderson3D_W_4.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:634:      "domain_window": "Anderson3D_W_8.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:656:      "domain_window": "Anderson3D_W_12.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:678:      "domain_window": "Anderson3D_W_14.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:701:      "domain_window": "Anderson3D_W_16.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:725:      "domain_window": "Anderson3D_W_16.50",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:748:      "domain_window": "Anderson3D_W_17.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:770:      "domain_window": "Anderson3D_W_20.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:792:      "domain_window": "Anderson3D_W_24.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:814:      "domain_window": "Anderson3D_W_32.00",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:837:    "non_possible": "cross-domain transfer if no W row is stable_graph_bridge+classical_intermediate at every tested size",
tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json:839:    "observable": "two_reader_all_sizes from graph_bridge_frequency joined with adjacent ratio, Brody q, Wigner/Poisson mixture weight, IPR and participation entropy",
tools/data/reports/agent_20260417_0803.md:113:**CONSTRAINT on POISSON_CONVERGENCE**: The alpha drift (0.9 → 0.6) means the approach to Poisson is not just amplitude decay — the decorrelation structure itself changes. The Poisson crossover prediction (p* ~ 10^{12.6}) based on amplitude alone may need revision.
tools/data/reports/agent_20260417_0803.md:121:3. **Poisson crossover revision**: the amplitude-only prediction (A→0 at p*~10^{12.6}) assumed fixed alpha=1.0. With alpha drifting, the crossover might be different. The shape and amplitude evolve independently.
tools/data/observable_collinearity_breaking_20260506_1955.json:3:  "question": "When do canonical observable retention curves break collinearity across domains?",
tools/data/reports/evolution_20260506_0330.md:5:Il passo ha invertito su se stesso: il risultato del run precedente (rank audit 05-05, un solo asse sotto shuffle uniforme) è stato trattato come claim da falsificare, non come fatto acquisito. Ha progettato quattro perturbazioni strutturalmente distinte per separare ciò che lo shuffle uniforme collassava. Traiettoria pulita: domanda autologica → disegno sperimentale mirato → risultato che discrimina (GUE ~2D, primi ~1.3D). 522s, 23 tool call, zero errori. Il passo è stato netto.
tools/data/reports/evolution_20260506_0330.md:11:1. **GUE a N=253**: il campione è piccolo per costruzione (matrice 23x23). L'agente lo dichiara come caveat ma non ha tentato di salire (50x50 è fattibile nello stesso budget). Non è attrito grave — il sign flip in L2 è qualitativo e regge — ma la dimensione del campione resta il primo punto d'attacco per chi vuole declassare il risultato.
tools/data/reports/evolution_20260506_0330.md:17:Nessun fallimento. Il nodo regressivo minore è nella **costruzione del campione GUE**: la dimensione della matrice è fissata a 23x23 per default storico, non per necessità computazionale. Il vincolo vive nel template dell'esperimento, non nel run. Se il prossimo run tocca GUE, la condizione da portare è: dimensione matrice come parametro esplicito, non costante ereditata.
tools/data/reports/evolution_20260506_0330.md:23:2. **Dimensionalità perturbativa come invariante di dominio**: GUE ~2D, primi ~1.3D. Questa asimmetria è misurabile, falsificabile, e indipendente dall'osservabile scelto. È un candidato per il prossimo incrocio con la struttura mod-3 già vista nei run precedenti: la dimensionalità extra di GUE vive nella stessa direzione di mod-3 o in una ortogonale?
tools/data/reports/evolution_20260506_0330.md:25:3. **L2 come discriminatore di regime**: il sign flip di L2 sotto adjacent-swap vs large-gap-only in GUE è qualitativo. L2 non è solo un osservabile — è un operatore che separa regimi perturbativi. Questo apre la porta a una classificazione delle perturbazioni per firma osservabile, non per costruzione.
tools/data/reports/evolution_20260506_0330.md:29:Il ciclo seguente potrebbe incrociare la dimensionalità perturbativa (2D GUE vs 1.3D primi) con la struttura modulare (mod-3, residui): se il secondo asse di GUE è allineato o ortogonale alla direzione modulare, la mappa delle correlazioni guadagna una coordinata.
tools/data/seme_backup_b2_20260509_144841.json:2:  "old_direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_backup_b2_20260509_144841.json:3:  "new_direzione": "Falsificare la forma minima del gate BOUNDARY come operatore ordine/null/denominatore: test su perimetri reali o avversariali senza importare label GUE/Poisson",
tools/data/reports/report_20260328_0344.md:17:- [✓] C1: Zeri zeta hanno spacing GUE (non Poisson)... → spacing=GUE-like, ⟨r⟩=0.6150
tools/data/reports/report_20260328_0344.md:23:- [✓] N2: Rule 30/110 hanno spacing >> GUE standard... → ⟨r⟩=0.9348 (GUE standard=0.60)
tools/data/reports/report_20260328_0344.md:26:- brownian_motion_var_0.3: r=0.9882352941176471, spacing=Poisson-like
tools/data/reports/report_20260328_0344.md:27:- logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like
tools/data/reports/report_20260328_0344.md:28:- ising_2d_var_0.1: r=0.9908867676670138, spacing=GUE-like
tools/data/reports/report_20260328_0344.md:29:- logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like
tools/data/boundary_denominator_prescan_20260509_1430.json:3:  "question": "Does denominator_state transfer beyond V_c on the 8 GUE / 5 Poisson boundary perimeter?",
tools/data/boundary_denominator_prescan_20260509_1430.json:4:  "perimeter": "base autoricerca cycles 1..13: 8 GUE-like, 5 Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:8:    "operator": "row-aligned domain/window prescan",
tools/data/boundary_denominator_prescan_20260509_1430.json:26:    "by_source_domain_type": {
tools/data/boundary_denominator_prescan_20260509_1430.json:27:      "GUE": 8,
tools/data/boundary_denominator_prescan_20260509_1430.json:28:      "Poisson": 5
tools/data/boundary_denominator_prescan_20260509_1430.json:51:      "domain_window": "ising_2d:cycle_1",
tools/data/boundary_denominator_prescan_20260509_1430.json:52:      "domain": "ising_2d",
tools/data/boundary_denominator_prescan_20260509_1430.json:54:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1430.json:61:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:67:        "domain_key": "ising_2d",
tools/data/boundary_denominator_prescan_20260509_1430.json:76:      "domain_window": "pendolo_doppio:cycle_2",
tools/data/boundary_denominator_prescan_20260509_1430.json:77:      "domain": "pendolo_doppio",
tools/data/boundary_denominator_prescan_20260509_1430.json:79:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1430.json:86:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:92:        "domain_key": "pendolo_doppio",
tools/data/boundary_denominator_prescan_20260509_1430.json:101:      "domain_window": "numeri_primi:cycle_3",
tools/data/boundary_denominator_prescan_20260509_1430.json:102:      "domain": "numeri_primi",
tools/data/boundary_denominator_prescan_20260509_1430.json:104:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1430.json:111:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:117:        "domain_key": "primes",
tools/data/boundary_denominator_prescan_20260509_1430.json:126:      "domain_window": "zeta_zeros:cycle_4",
tools/data/boundary_denominator_prescan_20260509_1430.json:127:      "domain": "zeta_zeros",
tools/data/boundary_denominator_prescan_20260509_1430.json:129:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1430.json:136:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:142:        "domain_key": "zeta_zeros",
tools/data/boundary_denominator_prescan_20260509_1430.json:151:      "domain_window": "logistica_biforcazione:cycle_5",
tools/data/boundary_denominator_prescan_20260509_1430.json:152:      "domain": "logistica_biforcazione",
tools/data/boundary_denominator_prescan_20260509_1430.json:154:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1430.json:161:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:167:        "domain_key": "logistic",
tools/data/boundary_denominator_prescan_20260509_1430.json:176:      "domain_window": "string_vibration:cycle_6",
tools/data/boundary_denominator_prescan_20260509_1430.json:177:      "domain": "string_vibration",
tools/data/boundary_denominator_prescan_20260509_1430.json:179:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1430.json:186:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:192:        "domain_key": null,
tools/data/boundary_denominator_prescan_20260509_1430.json:201:      "domain_window": "random_matrix:cycle_7",
tools/data/boundary_denominator_prescan_20260509_1430.json:202:      "domain": "random_matrix",
tools/data/boundary_denominator_prescan_20260509_1430.json:204:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1430.json:211:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:217:        "domain_key": "gue",
tools/data/boundary_denominator_prescan_20260509_1430.json:226:      "domain_window": "cellular_automata:cycle_8",
tools/data/boundary_denominator_prescan_20260509_1430.json:227:      "domain": "cellular_automata",
tools/data/boundary_denominator_prescan_20260509_1430.json:229:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1430.json:236:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:242:        "domain_key": "cell_auto",
tools/data/boundary_denominator_prescan_20260509_1430.json:251:      "domain_window": "percolation:cycle_9",
tools/data/boundary_denominator_prescan_20260509_1430.json:252:      "domain": "percolation",
tools/data/boundary_denominator_prescan_20260509_1430.json:254:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1430.json:261:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:267:        "domain_key": "percolation",
tools/data/boundary_denominator_prescan_20260509_1430.json:276:      "domain_window": "coupled_oscillators:cycle_10",
tools/data/boundary_denominator_prescan_20260509_1430.json:277:      "domain": "coupled_oscillators",
tools/data/boundary_denominator_prescan_20260509_1430.json:279:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1430.json:286:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:292:        "domain_key": "coupled_osc",
tools/data/boundary_denominator_prescan_20260509_1430.json:301:      "domain_window": "reaction_diffusion:cycle_11",
tools/data/boundary_denominator_prescan_20260509_1430.json:302:      "domain": "reaction_diffusion",
tools/data/boundary_denominator_prescan_20260509_1430.json:304:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1430.json:311:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:317:        "domain_key": null,
tools/data/boundary_denominator_prescan_20260509_1430.json:326:      "domain_window": "brownian_motion:cycle_12",
tools/data/boundary_denominator_prescan_20260509_1430.json:327:      "domain": "brownian_motion",
tools/data/boundary_denominator_prescan_20260509_1430.json:329:      "source_domain_type": "Poisson",
tools/data/boundary_denominator_prescan_20260509_1430.json:336:        "label": "Poisson-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:342:        "domain_key": "brownian",
tools/data/boundary_denominator_prescan_20260509_1430.json:351:      "domain_window": "logistica_biforcazione_var_3.5699:cycle_13",
tools/data/boundary_denominator_prescan_20260509_1430.json:352:      "domain": "logistica_biforcazione_var_3.5699",
tools/data/boundary_denominator_prescan_20260509_1430.json:354:      "source_domain_type": "GUE",
tools/data/boundary_denominator_prescan_20260509_1430.json:361:        "label": "GUE-like",
tools/data/boundary_denominator_prescan_20260509_1430.json:367:        "domain_key": null,
tools/data/reports/agent_20260509_0846.md:7:observables_used: [`generator_class`, `source_mode`, `event_type`, `vc_interp`, `label_jaccard`, `hamming_ratio`, `internal_cross_rate`, `no_cross_rate`, `floor_hit_rate`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
tools/data/notte_20260312_0330.md:4:  ising_2d_var_-0.1: r=0.9908745521490876, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260312_0330.md:5:  ising_2d_var_0.1: r=1.6755418202488377, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260312_0330.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260312_0330.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260312_0330.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260312_0330.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260312_0330.md:10:  brownian_motion_var_0.3: r=0.22824007651841227, spacing=Poisson-like (⟨r⟩=0.38919713749813906)
tools/data/notte_20260312_0330.md:11:  brownian_motion_var_0.5: r=1.121711664935964, spacing=Poisson-like (⟨r⟩=0.3831196498969426)
tools/data/notte_20260312_0330.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260312_0330.md:13:  percolation_var_0.55: r=1.037037037037037, spacing=Poisson-like (⟨r⟩=0.41840391114320896)
tools/data/notte_20260312_0330.md:14:  percolation_var_0.65: r=1.0357142857142858, spacing=Poisson-like (⟨r⟩=0.48785515925635364)
tools/data/notte_20260312_0330.md:44:## Fase 4: Cross-domain
tools/data/reports/evolution_20260425_0330.md:5:Il passo ha seguito una consecutio pulita: il risultato TWO_KINDS_GUE (distribuzione vs ordinamento) del 24/04 ha aperto una domanda precisa — "in quale canale vive la memoria Markov?" — e l'agente l'ha colta senza deviare. La traiettoria è stata: separare i canali (tercile vs mod-6), misurare ciascuno indipendentemente, confrontare attraverso i tipi GUE. 36 tool calls in 16 minuti, zero errori, nessun tool rimasto senza risposta. Il passo ha prodotto una discriminazione netta (140x) che non era visibile nei risultati precedenti dove i canali erano mescolati.
tools/data/reports/evolution_20260425_0330.md:17:1. **Saturation depth come asse indipendente.** Il 14% di saturazione delle string vibrations vs il 44% dei primi vs il 100% del logistic è un dato nuovo che non è ancora entrato nel vocabolario del seme. Non è un finding — è una coordinata. Il prossimo ciclo potrebbe chiedersi: la profondità di saturazione ha una firma sotto M? Se sì, è un terzo asse dopo tipo-GUE e canale-memoria.
tools/data/reports/evolution_20260425_0330.md:19:2. **L'eterogeneità della classe Poisson.** Il run ha notato che il r-statistic classifica come Poisson domini con memoria Markov da 0% a 99%. Questo non falsifica il r-test — lo confina. Il confine GUE/Poisson misurato dal r-test è una proiezione 1D di uno spazio almeno 2D. Il passo successivo naturale: esiste una firma composita (r + saturazione) che separa senza ambiguità?
tools/data/reports/evolution_20260425_0330.md:21:3. **Assenza di canale algebrico nell'ordering-GUE.** Il run l'ha affermato ma non l'ha falsificato attivamente. La domanda regressiva è: esiste un equivalente strutturale del mod-6 per eigenvalue spacings? (es. mod-N sulla parte intera degli spacings normalizzati). Se no, il risultato si rafforza. Se sì, il 140x si ridimensiona. Un test a costo quasi zero.
tools/data/reports/agent_20260508_2019.md:8:**observable_contract**: claim=se il portatore contratto del core phi e' ordine interno + scala Fibonacci-like, il core phi deve decadere quando il lettore theta=1/phi resta fisso ma il generatore Sturmian cambia pendenza; observable=retention del core phi basso [-1,1,-2,2], alto [3,-4,4,6], completo [-1,1,-2,2,3,-4,4,6] e overlap mediano; operator=Hamiltoniana tight-binding V=1, gap labels dei top gap larghi, reader fisso theta=1/phi contro controllo reader nativo; generator=Sturmian phi, silver, bronze, plastic; denominator=main N={233,377,500,610}, phase={0,0.25,0.5,0.75}, threshold={1.75,2.0,2.25}, top_k=12, |n|<=34; seedcheck N={144,288,466,754}, phase={0.125,0.375,0.625,0.875}, threshold={1.9,2.1}; not_tested=gap_ratio, boundary esatto del supertile, domini GUE/Poisson reali, automa formale della sostituzione.
tools/data/reports/agent_20260418_0330.md:115:3. **Revised Poisson crossover**: If the dipolar regime narrows (k* shrinks) with scale, then at the Poisson crossover (p*~10^{13}), k* might be just 1-2 lags — meaning only the nearest-neighbor anti-correlation survives. The approach to Poisson is not just amplitude decay but REGIME NARROWING.
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:444:        "label": "Metrica primi g=(p/2)², curvatura GUE r=0.503",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:445:        "label_en": "Metrica primi g=(p/2)², curvatura GUE r=0.503",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:447:        "full_text": "Metrica primi g=(p/2)², curvatura GUE r=0.503, z=22.5",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:488:        "findings": "**VALUE_STABLE / TOOL CONTRACT TRANSFER**.\nIl tester diventa interfaccia riusabile su questo perimetro: legge un nuovo spettro fisico, conserva le definizioni del registry, produce stati componente e lascia trace. Il risultato non diventa legge fisica: Anderson 3D W4/W16.5 resta non-Poisson contro n",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:683:        "label": "Agent Report - Rafforzamento tester fisico GOE/GUE N-curve",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:684:        "label_en": "Agent Report - Rafforzamento tester fisico GOE/GUE N-curve",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:685:        "label_short": "Agent Report - Rafforzamento tester fisico GOE/GUE N-curve",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:686:        "label_short_en": "Agent Report - Rafforzamento tester fisico GOE/GUE N-curve",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:690:        "findings": "1. **Verificato**: `SR` coincide con adjacent gap ratio e separa GOE/GUE nel verso fisico atteso: GUE > GOE > Poisson.\n2. **Verificato**: `component_state(SR,L1,triple_var)` resta leggibile fra `N=128` e `N=192`; non collassa per cambio taglia minimo.\n3. **Verificato**: Anderson 1D `W=6` resta bordo",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1368:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1403:      "tensions": "TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GOE-GUE-Poisson-Anderson",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1406:      "findings": "**VALUE_STABLE / TOOL CONTRACT TRANSFER**.\nIl tester diventa interfaccia riusabile su questo perimetro: legge un nuovo spettro fisico, conserva le definizioni del registry, produce stati componente e lascia trace. Il risultato non diventa legge fisica: Anderson 3D W4/W16.5 resta non-Poisson contro null, ma il bordo diretto separa solo `triple_var`; `SR,L1` restano insufficienti nel setup `L=6`.",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1407:      "content_preview": "# Agent Report - Interfaccia component_state su bordo Anderson 3D\n**Date**: 2026-05-14 18:50  \n**Piano**: 126  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GOE-GUE-Poisson-Anderson  \n**verdict**: VALUE_STABLE / TOOL CONTRACT TRANSFER - il tester `component_state(SR,L1,triple_var)` legge un nuovo spettro fisico Anderson 3D senza cambiare definizioni osservabili e senza perdere il rimbalzo fisico A -> matematica -> fisico B. Il ritorno fisico e' strumentale: W4 e W16.5 r",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1408:      "content_full": "# Agent Report - Interfaccia component_state su bordo Anderson 3D\n**Date**: 2026-05-14 18:50  \n**Piano**: 126  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GOE-GUE-Poisson-Anderson  \n**verdict**: VALUE_STABLE / TOOL CONTRACT TRANSFER - il tester `component_state(SR,L1,triple_var)` legge un nuovo spettro fisico Anderson 3D senza cambiare definizioni osservabili e senza perdere il rimbalzo fisico A -> matematica -> fisico B. Il ritorno fisico e' strumentale: W4 e W16.5 restano active contro Poisson, ma il contrasto diretto separa solo `triple_var`; `SR` e `L1` non chiudono il bordo 3D a `L=6`.  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, component_state, focus_signature, sign_swap_p, cohen_d_delta]  \ntool_contract_ref: `tools/data/tool_contracts/component_state_SR_L1_triple_var_fit_ready_20260514_1649.json`  \npreflight_anchor: `20260514_1640` VALUE_STABLE, Veritas COLLASSO rho=0.9325, falsifier coherent=true zero flag  \nnot_promoted_as_physics_law: true  \nssp_value: yes\n\n## Source directive\n\nQuesto ciclo segue la direttiva one-shot del 2026-05-14: ripartire da `20260514_1640`, non dal ramo `20260514_1701`, usare `component_state_SR_L1_triple_var_fit_ready_20260514_1649` come tool contract, e formulare una domanda stretta sulla riusabilita' del tester per leggere un nuovo spettro fisico. Il ramo quasiperiodico/Sturmian resta `vault`, non direzione primaria.\n\n## Prima impressione\n\nIl tester non deve predire la transizione Anderson 3D. Deve mostrare se uno spettro fisico nuovo puo' entrare nell'interfaccia e tornare come stato componente auditabile. Se il bordo non separa su `SR`, quello e' il contenuto: il tool trasferisce, la legge no.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + ponte QxG continuo/discreto + tensione BOUNDARY GUE/Poisson + nodo fisico Anderson 3D.\n- **Dipolo / punto-zero**: caos metallico / localizzazione critica. Punto-zero: Poisson span-matched, perche' ogni spettro torna leggibile solo se il null fisico-matematico resta esplicito.\n- **Piano superiore**: geometria spettrale dei campi disordinati; il bordo e' letto come componente attiva/assorbita, non come fit di transizione.\n- **Proto-ipotesi**: `component_state(SR,L1,triple_var)` e' interfaccia riusabile se un nuovo spettro fisico ordinato produce component states contro Poisson e contrasto diretto dichiarato senza cambiare definizioni dal registry.\n- **Possibile / non-possibile**: possibile = usare il tool su spettro fisico B e ottenere output auditabile; non-possibile = dichiarare transizione Anderson 3D o legge universale quando `SR,L1` non separano il contrasto diretto.\n- **Proiezione**: genero 24 spettri Anderson 3D tight-binding con condizioni periodiche, `L=6`, 12 repliche per `W=4.0` e `W=16.5`; poi li passo all'interfaccia `--input-spectrum` del tester 16:49.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: l'esperimento resta nel perimetro GOE/GUE/Poisson-Anderson indicato dalla direttiva e testa il passaggio tool da 1D/WD a un nuovo bordo fisico 3D.\n- `not_drift`: non usa `20260514_1701` come guida, non torna a `V_c`, fit phi, gap label o grammatica Sturmian; usa il ramo 1701 solo come `vault`.\n\n## Claim Under Test\n\n> Il tester `component_state(SR,L1,triple_var)` puo' diventare interfaccia riusabile per leggere un nuovo spettro fisico senza perdere il rimbalzo fisico A -> matematica -> fisico B.\n\n## Physical A\n\n- **Fonte fisica A**: classi spettrali Wigner-Dyson GOE/GUE gia' rafforzate nel report `20260514_1640`.\n- **Significato fisico dichiarato**: GOE = simmetria reale/time-reversal; GUE = unitaria/no time-reversal; Poisson = livelli indipendenti/null span-matched.\n- **Stato ancora usato**: ancora stabile come anchor, non rimisurato qui.\n\n## Math Transducer\n\n- **Osservabili canonici**: `SR`, `L1`, `triple_var` da `tools/observables_registry.py`; anche `SR2,L2` restano nel payload per completezza del tool.\n- **Definizioni non cambiate**: `SR` = adjacent spacing ratio canonico; `L1` = autocorrelazione lag-1; `triple_var` = varianza raw delle somme di triple consecutive.\n- **Null**: Poisson span-matched con stesso numero di gap centrali utilizzabili.\n- **Gate componente**: `active` se `sign_swap_p <= 0.01` e `|cohen_d_delta| >= 0.5`.\n- **Tool operativo**: `python3 tools/exp_physical_sr_residue_bounce.py --input-spectrum tools/data/anderson3d_component_state_interface_input_20260514_1850.json --output tools/data/component_state_anderson3d_interface_20260514_1850.json --seed 202605141851 --null-reps 64 --central-fraction 0.5 --sign-trials 8192`\n\n## Physical B\n\n- **Dominio fisico B**: Anderson 3D tight-binding finite-size, condizioni periodiche.\n- **Perimetro**: `L=6` (`216` livelli per spettro), 12 repliche per classe, disordini `W=4.0` e `W=16.5`.\n- **Uso fisico dichiarato**: `W=4.0` come candidato metallico finite-size; `W=16.5` come bordo critico/localizzato dichiarato.\n- **Contro-perimetro**: non e' dato sperimentale, non e' limite termodinamico, non e' unfolding dedicato, non misura many-body localization.\n\n## Component State Result\n\n| class | samples vs null | focus active | SR real/null/delta | p(SR) | d(SR) | L1 delta | p(L1) | d(L1) | triple delta | p(triple) | d(triple) |\n|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|\n| Anderson 3D W4 metallic candidate | 768 | SR,L1,triple_var | 0.538429 / 0.383960 / +0.154470 | 0.000122 | +3.657 | -0.224752 | 0.000122 | -2.236 | -2.327689 | 0.000122 | -3.494 |\n| Anderson 3D W16.5 critical boundary | 768 | SR,L1,triple_var | 0.509807 / 0.386906 / +0.122901 | 0.000122 | +2.741 | -0.142338 | 0.000122 | -0.945 | -1.969355 | 0.000122 | -2.504 |\n\n### Direct Contrast\n\n| contrast | paired | SR diff | p(SR) | d(SR) | SR state | L1 diff | p(L1) | d(L1) | triple diff | p(triple) | d(triple) | triple state |\n|---|---:|---:|---:|---:|---|---:|---:|---:|---:|---:|---:|---|\n| W16.5 minus W4 | 12 | -0.028623 | 0.067497 | -0.577 | not_separated | +0.087281 | 0.067253 | +0.590 | not_separated | +0.360642 | 0.003906 | +1.188 | separated |\n\n## Resulting Bounce\n\n- **Verificato**: l'interfaccia accetta un payload esterno con 24 spettri fisici e produce `poisson_contrast`, `direct_contrasts`, `component_state` e trace.\n- **Verificato**: entrambi i regimi Anderson 3D sono non-Poisson sulle tre osservabili focus.\n- **Verificato**: il contrasto diretto W16.5-W4 separa `triple_var` ma non separa `SR` e `L1` al gate dichiarato.\n- **Inferito dal perimetro**: il tool trasferisce a fisico B; il bordo 3D non e' chiuso dal piano `SR,L1` in questo setup finite-size.\n- **Non verificato**: transizione Anderson 3D, limite `L -> inf`, spettro sperimentale, unfolding dedicato.\n\n## Contamination Classification\n\n- `skill_reclassification`: report `20260514_1649` riclassificato come tool contract, non come scoperta pubblicabile.\n- `vault`: ramo `20260514_1701` Grammar-vs-Scale Boundary Gate conservato come contro-perimetro, non seguito.\n- `candidate`: Anderson 3D puo' diventare prossimo seme solo come audit di taglia/unfolding, non come legge.\n- `discard_or_counter_perimeter`: usare `SR` da solo per classificare W4/W16.5 a `L=6` e' scartato: p=0.067497.\n- `operator_directive`: vincolo one-shot di ripartire da `20260514_1640` e non dalla deriva `1701`.\n\n## Non Possible\n\n- `non_possible`: promuovere il risultato a `physics_law`.\n- `non_possible`: integrare arco di grafo senza review operatore.\n- `non_possible`: dire che `SR,L1` classificano il bordo Anderson 3D nel perimetro `L=6`, perche' il contrasto diretto non separa.\n- `non_possible`: usare il ramo `20260514_1701` come traiettoria primaria.\n- `non_possible`: accettare spettri con meno di 12 gap centrali utilizzabili; qui ogni spettro ha 107 gap centrali.\n\n## Trace Path\n\n- `input_spectrum`: `tools/data/anderson3d_component_state_interface_input_20260514_1850.json`\n- `result`: `tools/data/component_state_anderson3d_interface_20260514_1850.json`\n- `trace`: `tools/data/component_state_anderson3d_interface_20260514_1850.trace.jsonl`\n- `trace_rows`: 1536\n- `trace_schema`: `event,label,expected_class,null_rep,n_levels,n_gaps,real,null,delta`\n\n## Verdict\n\n**VALUE_STABLE / TOOL CONTRACT TRANSFER**.\n\nIl tester diventa interfaccia riusabile su questo perimetro: legge un nuovo spettro fisico, conserva le definizioni del registry, produce stati componente e lascia trace. Il risultato non diventa legge fisica: Anderson 3D W4/W16.5 resta non-Poisson contro null, ma il bordo diretto separa solo `triple_var`; `SR,L1` restano insufficienti nel setup `L=6`.\n\n## Bicono della scoperta\n\n- **Due radici**: simmetria Wigner-Dyson GOE/GUE / bordo disordinato Anderson 3D.\n- **Singolare**: Poisson span-matched come punto-zero che rende confrontabili fisico A e fisico B.\n- **Invariante di passaggio**: output `component_state` su `SR,L1,triple_var` con trace auditabile.\n- **Campo di possibilita**: possibile usare il tester come interfaccia spettrale riusabile; non-possibile promuovere la separazione 3D senza curva in `L` e unfolding.\n\n## Consecutio\n\nIl prossimo seme possibile non e' \"Anderson 3D confermato\". E' un audit del tool su fisico B con taglie multiple e denominatore dichiarato: `L=5,6,7` o unfolding locale, stesso contract, stesso null. Se `SR,L1` restano non_separated e `triple_var` resta separated, il tool mostra che il bordo 3D entra prima nella componente di profondita' che nel piano pair-statistics.\n\n## Auto-Audit Finale\n\n- **Resta tool**: `component_state_SR_L1_triple_var_fit_ready_20260514_1649` come interfaccia per spettri ordinati.\n- **Resta vault**: `20260514_1701` e la grammatica Sturmian-scale.\n- **Puo' diventare prossimo seme**: audit Anderson 3D multi-size/unfolding solo se formulato come verifica del tool, non come legge fisica.\n- **Cosa non e' stato fatto**: nessuna modifica al registry, nessuna promozione physics_law, nessuna integrazione grafo.\n",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1436:      "tensions": "TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY GUE-Poisson",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1440:      "content_preview": "# Agent Report - Grammar-vs-Scale Boundary Gate\n**Date**: 2026-05-14 17:01  \n**Piano**: 125  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY GUE-Poisson  \n**verdict**: CONSTRAINT - il `gap_ratio` resta osservabile sensibile a scala/fase; la grammatica locale sopravvive come vincolo Sturmian-family, non come firma phi isolata.\nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [gap_ratio_first_two, top2_ratio, large_gap_count, label_set, grammar_excess_total, zero_excess_",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1441:      "content_full": "# Agent Report - Grammar-vs-Scale Boundary Gate\n**Date**: 2026-05-14 17:01  \n**Piano**: 125  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY GUE-Poisson  \n**verdict**: CONSTRAINT - il `gap_ratio` resta osservabile sensibile a scala/fase; la grammatica locale sopravvive come vincolo Sturmian-family, non come firma phi isolata.\nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [gap_ratio_first_two, top2_ratio, large_gap_count, label_set, grammar_excess_total, zero_excess_rate]  \n**observable_contract**: claim=il residuo `gap_ratio(phi)` sopravvive solo se distingue grammatica Sturmian da mero effetto scala/densita e non collassa in controllo metallico o block shuffle; observable=`gap_ratio_first_two` + `grammar_excess_total` + `zero_excess_rate`; operator=`tools/exp_quasiperiodic_grammar_scale_gate.py`; generator=Sturmian phi/silver/bronze, balanced random phi-density, block shuffle phi-density; denominator=3 N x 3 fasi x 3 soglie per domini metallici, 4 trial per null; non_possible=claim phi-specific se silver/bronze o block shuffle trasportano la stessa grammatica; not_tested=`V_c` fit, beta atlas globale, dati fisici esterni, retention mediana/stable labels.\n\n## Respiro fuori-tempo\n\n- **Combo**: A9 terzo incluso + A11 combo + ponte QxG continuo/discreto + tensione `TENS_SCALE_TRASCENDENZA_LIMITE` + direzione viva BOUNDARY GUE/Poisson.\n- **Dipolo / punto-zero**: grammatica Sturmian / effetto scala-densita. Punto-zero: gap spettrale grande, perche' lo stesso evento puo' essere letto come rapporto numerico oppure come posizione in una grammatica simbolica.\n- **Piano superiore**: algebra/topologia assiomatica del linguaggio Sturmian: complessita' p(k), right-special factors e difetto palindromico attorno ai gap selezionati.\n- **Operatori laterali scelti**: `operator algebra` per leggere lo spettro tridiagonale; `boundary operator` per trattare il gap grande come bordo; `same density random` per separare grammatica da densita.\n- **Contaminazione cognitiva**: KSAR usato come reiterazione regressiva del kernel 16:56: non correggere il source, assorbire il residuo e riproiettarlo in una domanda falsificabile. CE-none: il campo vivo non espone un archivio CE operativo in questo ciclo oltre al richiamo storico CE-0117 del source; non viene inventata una voce.\n- **Proto-ipotesi**: il confine non vive nel valore singolo `gap_ratio`; vive nella differenza tra gap numerico che oscilla e grammatica locale che resta o cade sotto null.\n- **Possibile / non-possibile**: possibile = separare random-density da grammatica ordinata; non-possibile = promuovere `phi` come isolato se silver, bronze o block shuffle conservano la stessa grammatica.\n- **Proiezione**: misuro insieme `gap_ratio_first_two` e `grammar_excess_total` sugli stessi eventi di gap, con count grezzi per ogni denominatore.\n\n## Source directive\n\nLa direttiva one-shot chiedeva di assorbire il source cycle `20260514_1656`, non correggerlo, e risolvere la flag L8 rendendo tracciabile la deviazione locale se presente. Questo ciclo non promuove ne' sincronizza il source; usa il contratto minimo del repair come audit: claim corretto, count grezzi, `gap_ratio` dichiarato come testato, controlli non-zero formulati in modo scoped, auto-audit finale.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: riprende la direzione viva sul confine GUE/Poisson attraverso il nodo indicato da `dnd_scenario.py`, `TENS_SCALE_TRASCENDENZA_LIMITE`, distinguendo grammatica da scala.\n- `not_drift`: non torna al repair L6 come contenuto, non promuove QxG, non integra graph completion, non usa `V_c` fit locale come scorciatoia.\n- `deliberate_counter_perimeter`: false\n- `why_counter_perimeter`: non applicabile; la direttiva e' stata usata come contratto di audit, non come deviazione contro la direzione viva.\n\n## Claim Under Test\n\n> Il claim realmente testato ora: `gap_ratio(phi)` e' un segnale utile solo se il suo scarto dai controlli metallici resta distinguibile dalla grammatica locale che quei controlli possono trasportare. Il ciclo non testa una legge fisica QxG e non ripara il report 16:56.\n\n## Question\n\nQuando il gap spettrale grande viene letto sia come rapporto numerico sia come finestra grammaticale, cosa sopravvive: phi, la famiglia Sturmian, o solo la densita/scala?\n\n## Ritorno fisico\n\n- **Punto fisico sorgente**: confine GUE/Poisson come transizione fra repulsione spettrale e indipendenza.\n- **Attraversamento matematico**: Hamiltoniana quasiperiodica tridiagonale con potenziale Sturmian e lettura dei gap tramite IDS/label.\n- **Punto fisico di ritorno**: esperimenti di catene quasiperiodiche 1D/fotoniche dove i gap spettrali distinguono ordine quasiperiodico da disorder density-matched.\n- **Controllo concretezza**: il ritorno fisico e' misura di spettri/gap in reticoli quasiperiodici o multilayer fotonici, non categoria astratta di confine.\n- **Relazione nuova**: il `gap_ratio` da solo indica instabilita di scala; la grammatica locale indica se il gap appartiene a una lingua ordinata.\n- **Osservabile/test fisico possibile**: misurare gap principali in campioni Fibonacci/silver e in campioni disorder density-matched, poi confrontare ratio e grammatica IDS.\n- **Se fallisce**: resta vincolo matematico su osservabili quasiperiodici; non scoperta fisica promuovibile.\n\n## Experiment Design\n\n- Script nuovo: `tools/exp_quasiperiodic_grammar_scale_gate.py`, nato perche' i tool densi `exp_quasiperiodic_gap_ratio_denominator.py` e `exp_gap_label_symbolic_grammar_gate.py` sono andati in timeout sul perimetro 17:01.\n- Eigensolver: `scipy.linalg.eigvalsh_tridiagonal`, stessa Hamiltoniana tridiagonale ma senza matrice densa.\n- Scope: N = 233, 377, 610; fasi = 0, 0.25, 0.5; soglie = 1.75, 2.0, 2.25; `top_k=12`; finestra grammaticale 55; k = 3,4,5,6.\n- Null baseline: `balanced_random_phi_density` e `block_shuffle_phi_density`, 4 trial per condizione.\n- Denominatori: domini metallici 27 condizioni ciascuno; null 108 condizioni ciascuno; finestre grammaticali 324 per dominio metallico, 1296 per balanced random, 1279 per block shuffle.\n- Come serve la combo: se `gap_ratio` discrimina ma la grammatica non discrimina phi dai controlli, il claim cade a vincolo scoped; se random-density conserva la grammatica, cade anche il vincolo grammaticale.\n\n## Results\n\n| mode | conditions | first_two_ratio median | grammar_excess median | zero_excess hits/total | zero_excess rate |\n|---|---:|---:|---:|---:|---:|\n| phi | 27 | 0.4509 | 0.0 | 324/324 | 1.000 |\n| silver | 27 | 1.3300 | 0.0 | 324/324 | 1.000 |\n| bronze | 27 | 1.0094 | 0.0 | 315/324 | 0.972 |\n| block_shuffle_phi_density | 108 | 0.8373 | 0.0 | 1183/1279 | 0.925 |\n| balanced_random_phi_density | 108 | 1.1447 | 103.0 | 0/1296 | 0.000 |\n\nMatched metallic comparisons:\n\n| comparison | hits/total | rate |\n|---|---:|---:|\n| phi first_two_ratio < silver | 21/27 | 0.778 |\n| phi first_two_ratio < bronze | 19/27 | 0.704 |\n| phi first_two_ratio < both | 15/27 | 0.556 |\n\nTimeout telemetry:\n\n| attempted tool | outcome |\n|---|---|\n| `exp_quasiperiodic_gap_ratio_denominator.py` broad perimetro | no output before manual reduction |\n| `exp_gap_label_symbolic_grammar_gate.py` broad perimetro | no output before manual reduction |\n| reduced dense tools with `timeout 90` | timeout code 124 |\n| tridiagonal gate | completed |\n\n## Key Findings\n\n1. **Verificato**: `gap_ratio(phi)` resta inferiore ai controlli metallici solo in 15/27 confronti con entrambi; non e' un discriminatore hard.\n2. **Verificato**: la grammatica zero-excess separa phi/silver/bronze e block-shuffle da balanced random-density. Random-density ha 0/1296 finestre zero-excess.\n3. **Vincolo**: la grammatica non isola phi. Silver trasporta 324/324 finestre zero-excess, bronze 315/324, block shuffle 1183/1279.\n4. **Inferito**: il contenuto vivo non e' `phi ha gap_ratio speciale`, ma `il gap numerico deve essere letto insieme alla grammatica che lo genera`.\n\n## Verdict\n\n**CONSTRAINT**.\n\nSopravvive un vincolo, non una scoperta phi-specific: `gap_ratio` misura una deviazione sensibile a scala/fase; la grammatica locale elimina il null random-density ma resta condivisa da controlli metallici e block-shuffle. Il confine operativo e' grammar-vs-density, non phi-vs-nonphi.\n\n## Bicono della scoperta\n\n- **Due radici**: rapporto numerico del gap / grammatica locale del gap.\n- **Singolare**: gap spettrale grande come punto-zero, prima della lettura ratio o label.\n- **Invariante di passaggio**: la finestra grammaticale zero-excess sopravvive alla famiglia Sturmian e cade nel random-density.\n- **Campo di possibilita**: possibile costruire un gate grammar-vs-density per il confine quasiperiodico; non-possibile usare `gap_ratio(phi)` come legge isolata o come promozione QxG.\n\n## Auto-audit source flags\n\n- **L8 source flag**: risolta. Il report dichiara `relation`, `why`, `not_drift`, e `deliberate_counter_perimeter=false` per rendere leggibile che non c'e' deviazione locale contro la direzione viva.\n- **Claim Under Test corretto**: risolto. Il claim non e' il repair L6 e non e' il source report; e' il test grammar-vs-scale.\n- **Rate/frequenze con count grezzi**: risolto. Tutti i rate principali riportano hits/total.\n- **Controlli non-zero scoped**: risolto. Silver, bronze e block shuffle trasportano sottostruttura; il wording resta vincolo scoped.\n- **Retention mediana vs stable labels**: non applicabile; osservabili non usati.\n- **gap_ratio**: tested.\n\n## Consecutio\n\nIl ciclo successivo non deve cercare un fit di `V_c` prima di isolare il livello giusto: densita random cade, grammatica Sturmian-family resta, phi resta solo come un membro con `gap_ratio` piu basso in parte del perimetro. La prossima domanda e' quale perturbazione rompe silver/block-shuffle senza rompere phi, oppure se il confine vero e' famiglia quasiperiodica vs disorder.\n\n## Ricadute pratiche\n\nssp_value: no. Lo script e' strumento interno di falsificazione; non e' ancora demo/prodotto.\n\n## Files\n\n- `tools/exp_quasiperiodic_grammar_scale_gate.py`\n- `tools/data/quasiperiodic_grammar_scale_gate_20260514_1701.json`\n- `tools/data/reports/agent_20260514_1701.md`\n",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1492:      "content_full": "# Agent Report - Repair L6 Fit-Ready Contract\n**Date**: 2026-05-14 16:56  \n**Piano**: 122  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / QxG fit-ready tester L6 repair  \n**verdict**: CONSTRAINT / FIT-READY TESTER - il contenuto scientifico del report 16:49 resta invariato; viene riparato il residuo L6 e reso tracciabile il contratto fit-ready gia' prodotto.\nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [component_state, SR, L1, triple_var, transfer_blank_fall, fit_ready_contract_presence]\n**observable_contract**: claim=il report 16:49 diventa fit-ready per falsifier e graph completion solo se espone anche la contaminazione cognitiva che ha trasformato il deposito in strumento; observable=`component_state(SR,L1,triple_var)` + `fit_ready_contract_presence`; operator=report-level audit + `tools/graph_completion_compiler.py`; generator=nessun nuovo dominio, riuso `tools/data/component_state_fit_ready_20260514_1649.json`; denominator=report 16:49 + artifact fit-ready 16:49 + audit temporaneo graph completion; non_possible=cambiare contenuto scientifico, aggiungere domini o promuovere automaticamente il grafo; not_tested=nuovi dataset fisici, nuova separazione GOE/GUE, integrazione live del grafo.\n\n## Source directive\n\nQuesto ciclo segue la direttiva operatore one-shot `repair L6 fit-ready`: ripartire da `tools/data/reports/agent_20260514_1649.md`, non cambiare contenuto scientifico, non aggiungere domini, includere `## Contaminazione cognitiva`, riferire `tools/data/component_state_fit_ready_20260514_1649.json`, e lasciare il verdict massimo a `CONSTRAINT / FIT-READY TESTER`.\n\n## Prima impressione\n\nIl problema non era il tester: era la traccia mancante del movimento che lo aveva fatto passare da deposito locale a contratto riusabile. La riparazione vive nel report, non nel dato fisico.\n\n## Respiro fuori-tempo\n\n- **Combo**: A14 cascata + A11 combo + ponte QxG continuo/discreto + graph completion 16:49 + residuo L6 del falsifier.\n- **Dipolo / punto-zero**: risultato locale / artifact fit-ready. Punto-zero: `component_state`, perche' e' lo stesso vettore che passa da misura del deposito a interfaccia del tester.\n- **Piano superiore**: grafo della conoscenza e contratto di consumo: il graph completion deve vedere input/output, transfer/blank/fall, trace e contro-perimetro.\n- **Proto-ipotesi**: un artifact fit-ready non e' solo un file con soglie; e' un contratto con traccia cognitiva che dice quale trasformazione ha cambiato il ruolo del deposito.\n- **Possibile / non-possibile**: possibile = rendere il candidato leggibile da falsifier e graph completion come contratto fit-ready; non-possibile = promuovere QxG o aggiungere evidenza fisica nuova.\n- **Proiezione**: audit del report 16:49 e compilazione temporanea del graph completion contro l'artifact gia' prodotto.\n\n## Contaminazione cognitiva\n\n- **CE-0117**: usato come cascata della possibilita': il deposito fisico 16:40 passa da risultato misurato a potenziale strumento, poi a contratto fit-ready consumabile.\n- **KSAR**: usato come reiterazione del kernel senza cambiare ramo: il ciclo non apre un dominio nuovo, ripete il kernel `component_state(SR,L1,triple_var)` finche' il contratto dichiara transfer, blank, fall e trace.\n- **Trasformazione del contratto**: da risultato locale -> artifact fit-ready con transfer/blank/fall e trace.\n\n## Aderenza alla direzione\n\n- `relation`: local_regression\n- `why`: la regressione e' obbligata dalla direttiva: ripara il residuo L6 che impediva al report 16:49 di essere coerente per falsifier e leggibile come fit-ready contract.\n- `not_drift`: non torna a `V_c`, primi, fit locali o nuovi domini; opera solo sul contratto gia' prodotto e sul suo riconoscimento.\n\n## Experiment Design\n\nEsperimento minimo, non fisico:\n\n1. Leggere `tools/data/reports/falsifier_20260514_1649.json` per isolare il residuo.\n2. Verificare che `tools/data/component_state_fit_ready_20260514_1649.json` contenga i campi del contratto.\n3. Eseguire `python tools/graph_completion_compiler.py --cycle 20260514_1649 --out-dir /tmp/graph_completion_audit_1656` per testare il consumo dell'artifact senza mutare il grafo live.\n\n## Results\n\n### Residuo L6\n\nVerificato: il falsifier 16:49 era incoerente solo per L6 medium. Evidenza riportata dal falsifier: mancava una riga o sezione `Contaminazione cognitiva` con voce CE/KSAR o `CE-none:` verificabile.\n\n### Artifact fit-ready\n\nVerificato: `tools/data/component_state_fit_ready_20260514_1649.json` contiene:\n\n| field | state |\n|---|---|\n| `tester_id` | present |\n| `input_contract` | present |\n| `output_contract` | present |\n| `thresholds` | present |\n| `component_states` | present |\n| `transfer_blank_fall` | present |\n| `counter_perimeter` | present |\n| `trace_ref` | present |\n| `graph_candidate_ref` | present |\n| `not_promoted_as_physics_law` | `true` |\n\n### Graph completion audit\n\nVerificato su output temporaneo: il compilatore corrente riconosce `tools/data/component_state_fit_ready_20260514_1649.json` come fit-ready artifact.\n\n| check | result |\n|---|---|\n| `has_fit_ready_contract` | `true` |\n| `fit_ready_contract_present` | `true` |\n| artifact consumed | `tools/data/component_state_fit_ready_20260514_1649.json` |\n| graph live mutation | none |\n| graph promotion | none |\n\nIl `ready_count` resta `0` nell'audit temporaneo perche' il report 16:49 aveva falsifier non coerente e il grafo live non viene promosso in questo ciclo. Questa e' una sospensione corretta, non un fall del contratto.\n\n## Transfer / blank / fall\n\n- `transfer`: `SR,L1,triple_var` restano trasferiti dal deposito 16:40 al tester `component_state` come contratto input/output con trace.\n- `blank`: il ponte QxG resta non integrato; nessun dato fisico nuovo e nessuna legge fisica vengono aggiunti.\n- `fall`: il contratto cade se un ciclo successivo rimuove trace, transfer/blank/fall o contro-perimetro, oppure se usa l'artifact per promuovere il grafo senza decisione operatore.\n\n## Evidence tier\n\n- **Verificato**: il report 16:49 manca di `## Contaminazione cognitiva`, `CE-0117` e `KSAR`.\n- **Verificato**: l'artifact 16:49 ha i campi fit-ready richiesti.\n- **Verificato**: il graph completion compiler, eseguito in `/tmp`, riconosce l'artifact come fit-ready contract.\n- **Inferito**: aggiungere la sezione L6 nel report ripara il residuo del falsifier senza cambiare il contenuto scientifico.\n- **Non verificato**: esito del falsifier automatico su questo report, perche' richiede il ciclo valutativo successivo.\n\n## Trace path\n\n- `source_report`: `tools/data/reports/agent_20260514_1649.md`\n- `source_falsifier`: `tools/data/reports/falsifier_20260514_1649.json`\n- `fit_ready_artifact`: `tools/data/component_state_fit_ready_20260514_1649.json`\n- `source_graph_completion`: `tools/data/graph_completion/graph_completion_20260514_1649.json`\n- `temporary_graph_audit`: `/tmp/graph_completion_audit_1656/graph_completion_20260514_1649.json`\n\n## Key Findings\n\n1. **Verificato**: il residuo L6 era formale-operativo, non scientifico.\n2. **Verificato**: `component_state_fit_ready_20260514_1649.json` e' fit-ready per il compilatore corrente.\n3. **Vincolo**: il grafo QxG resta aperto e non viene promosso automaticamente.\n\n## Verdict\n\n**CONSTRAINT / FIT-READY TESTER**.\n\nIl cycle ripara il contratto del report 16:49 per L6: nomina CE-0117 e KSAR, dichiara la trasformazione da risultato locale ad artifact fit-ready con transfer/blank/fall e trace, e conserva il boundary `not_integrated_operator_decision_required`.\n\n## Bicono della scoperta\n\n- **Due radici**: report fit-ready 16:49 / residuo L6 del falsifier.\n- **Singolare**: `Contaminazione cognitiva`, la traccia che rende visibile la trasformazione del deposito in strumento.\n- **Invariante di passaggio**: un artifact fit-ready deve portare contratto tecnico e traccia del movimento che lo rende riusabile.\n- **Campo di possibilita**: possibile consumare il contratto nel graph completion; non-possibile promuovere il ponte QxG senza decisione operatore e nuovo perimetro di falsificazione.\n\n## Consecutio\n\nIl prossimo ciclo puo' rigenerare falsifier e graph completion su questo report. Se risultano coerenti, il grafo deve restare in stato `fit_ready_contract_not_integrated` o equivalente: decisione operatore prima di qualunque promozione.\n\n## Ricadute pratiche\n\nssp_value: yes. La riparazione rende l'artifact fit-ready consumabile dalla pipeline senza aggiungere domini o numeri: `tools/data/component_state_fit_ready_20260514_1649.json`.\n\n## Files\n\n- `tools/data/reports/agent_20260514_1656.md`\n- `tools/data/reports/agent_20260514_1649.md`\n- `tools/data/component_state_fit_ready_20260514_1649.json`\n",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1527:      "verdict": "**CONSTRAINT / FIT-READY TESTER**.\n\n`component_state(SR,L1,triple_var)` e' fit-ready come strumento: riceve uno spettro ordinato, produce stato componente, contrasto Poisson e contrasto diretto quando",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1528:      "verdict_en": "**CONSTRAINT / FIT-READY TESTER**.\n\n`component_state(SR,L1,triple_var)` e' fit-ready come strumento: riceve uno spettro ordinato, produce stato componente, contrasto Poisson e contrasto diretto quando",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1531:      "content_full": "# Agent Report - Component State Fit-Ready Tester\n**Date**: 2026-05-14 16:49  \n**Piano**: 122  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / QxG fit-ready tester  \n**verdict**: CONSTRAINT / FIT-READY TESTER - `component_state(SR,L1,triple_var)` viene trasformato in contratto integrabile e interfaccia unica per spettro ordinato. Non integra il grafo e non promuove una legge fisica.\nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, component_state, poisson_contrast, direct_contrast]\n**observable_contract**: claim=il candidato QxG 16:40 diventa fit-ready solo se espone input, output, soglie, trace, transfer/blank/fall e contro-perimetro; observable=`component_state(SR,L1,triple_var)` piu `poisson_contrast` e `direct_contrast`; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=nessun nuovo dominio, riuso deposito GOE/GUE/Anderson 16:40 e smoke test sintetico minimo; denominator=artifact JSON fit-ready + interfaccia su spettro ordinato; non_possible=integrare automaticamente il grafo o chiamare legge fisica il tester; not_tested=dati sperimentali, Anderson 3D, many-body localization, unfolding dedicato, limite asintotico.\n\n## Source directive\n\nQuesto ciclo segue il candidato `QxG` ready dal graph completion 1640 (`tools/data/graph_completion/graph_completion_20260514_1640.json`). Il compito non e' scoprire nuova fisica: e' rendere il tester `component_state(SR,L1,triple_var)` integrabile come artifact fit-ready e come strumento con interfaccia unica. Vincolo seguito: non aggiungere nuovi domini, non tornare ai primi, non integrare automaticamente il grafo.\n\n## Prima impressione\n\nIl tester smette di essere un risultato locale quando dichiara come entra uno spettro, come esce uno stato componente, e dove cade. Il contenuto del ciclo e' il contratto, non un nuovo numero.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + ponte QxG continuo/discreto + candidato graph completion 16:40 + direzione BOUNDARY GUE/Poisson.\n- **Dipolo / punto-zero**: deposito fisico 16:40 / strumento integrabile. Punto-zero: `component_state`, perche' conserva lo stesso vettore ma cambia ruolo da risultato a interfaccia.\n- **Piano superiore**: grafo della conoscenza e bicono operativo: il bordo QxG resta contract-ready-not-integrated.\n- **Proto-ipotesi**: un tester fisico diventa fit-ready quando il transfer e il fall sono parte dell'output contract, non quando accumula un altro dominio.\n- **Possibile / non-possibile**: possibile = passare uno spettro ordinato e ottenere stato componente, contrasto Poisson e contrasto diretto se classi presenti; non-possibile = usare l'artifact come ponte QxG integrato o legge fisica.\n- **Proiezione**: aggiunta una modalita' `--input-spectrum` allo script esistente e prodotto un artifact JSON dedicato.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: la direttiva one-shot sostituisce l'espansione fisica esterna e chiede di rendere fit-ready il candidato QxG 16:40.\n- `not_drift`: non torna a `prime-minus-mod6`, `V_c`, fit locali o label aritmetiche; usa il report 16:40 come deposito sorgente e non apre nuovi domini.\n\n## Experiment Design\n\n- Modifica minima allo script necessario: `tools/exp_physical_sr_residue_bounce.py`.\n- Nuova interfaccia:\n  `python tools/exp_physical_sr_residue_bounce.py --input-spectrum SPECTRUM.json --expected-class CLASS --output OUT.json`\n- Payload accettati: lista JSON di livelli, oggetto JSON con `levels`/`spectrum`, oggetto con `spectra` multipli (`label`, `expected_class`, `levels`), oppure file numerico leggibile da `numpy.loadtxt`.\n- Output: `component_state`, `poisson_contrast`, `direct_contrasts` quando almeno due classi/label sono presenti, trace JSONL.\n- Artifact prodotto:\n  `tools/data/component_state_fit_ready_20260514_1649.json`\n- Smoke test piccolo:\n  `python tools/exp_physical_sr_residue_bounce.py --input-spectrum /tmp/component_state_input_smoke_1649.json --output tools/data/component_state_interface_smoke_20260514_1649.json --seed 202605141649 --null-reps 16 --sign-trials 512 --central-fraction 0.5`\n\n## Results\n\n### Artifact fit-ready\n\n`tools/data/component_state_fit_ready_20260514_1649.json` contiene i campi richiesti:\n\n| field | state |\n|---|---|\n| `tester_id` | present |\n| `input_contract` | present |\n| `output_contract` | present |\n| `thresholds` | present |\n| `component_states` | present |\n| `transfer_blank_fall` | present |\n| `counter_perimeter` | present |\n| `trace_ref` | present |\n| `graph_candidate_ref` | present |\n| `not_promoted_as_physics_law` | `true` |\n\n### Soglie\n\n| threshold | value |\n|---|---:|\n| `sign_swap_p_max` | 0.01 |\n| `abs_cohen_d_min` | 0.5 |\n| `min_usable_central_gaps` | 12 |\n| `default_null_reps` | 64 |\n| `default_central_fraction` | 0.5 |\n\n### Component states sorgente 16:40\n\n| class | SR | L1 | triple_var | source |\n|---|---|---|---|---|\n| GOE time reversal symmetric | active | active | active | `physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.json` |\n| GUE unitary no time reversal | active | active | active | `physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.json` |\n| Anderson 1D W6 | absorbed | absorbed | active | `physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.json` |\n\n### Smoke interface\n\nVerificato: la nuova modalita' produce `poisson_contrast`, `component_state`, `direct_contrasts` e trace per un payload multi-spettro.\n\n| class | focus_signature | SR state vs Poisson | note |\n|---|---|---|---|\n| GOE smoke | SR,L1,triple_var | active | plumbing verificato, non evidenza fisica nuova |\n| GUE smoke | SR,L1,triple_var | active | plumbing verificato, non evidenza fisica nuova |\n\nIl `direct_contrast` dello smoke e' presente ma non promosso: un solo spettro per classe non fornisce una distribuzione indipendente per separazione fisica. La separazione GOE/GUE fit-ready resta quella del deposito 16:40 con 64 repliche per taglia.\n\n## Transfer / blank / fall\n\n- `transfer`: `SR,L1,triple_var` passano dal deposito matematico-fisico allo strumento come stati componente contro Poisson e, se esistono classi, come contrasto diretto.\n- `blank`: il grafo QxG resta non integrato; restano vuoti dati sperimentali, GSE, Anderson 3D, many-body localization, unfolding dedicato e limite asintotico.\n- `fall`: il tester cade se GOE/GUE non separano `SR` nel contrasto diretto, se le classi caotiche assorbono tutti gli osservabili focus contro Poisson, o se Anderson `W=6` mantiene `SR` active sotto le soglie dichiarate.\n\n## Evidence tier\n\n- **Verificato**: lo script compila (`python -m py_compile tools/exp_physical_sr_residue_bounce.py`).\n- **Verificato**: l'artifact fit-ready e' scritto in `tools/data/component_state_fit_ready_20260514_1649.json`.\n- **Verificato**: l'interfaccia `--input-spectrum` produce output e trace su payload multi-spettro.\n- **Verificato da deposito 16:40**: GOE/GUE hanno `SR,L1,triple_var` active; Anderson `W=6` assorbe `SR` e conserva `triple_var`.\n- **Inferito**: il candidato QxG e' pronto per decisione operatore come contratto, non come integrazione automatica.\n- **Non verificato**: robustezza su dati esterni, unfolding dedicato, classi fisiche non presenti nel deposito 16:40.\n\n## Trace path\n\n- `fit_ready_artifact`: `tools/data/component_state_fit_ready_20260514_1649.json`\n- `graph_candidate_ref`: `tools/data/graph_completion/graph_completion_20260514_1640.json`\n- `source_result`: `tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.json`\n- `source_trace`: `tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.trace.jsonl`\n- `smoke_output`: `tools/data/component_state_interface_smoke_20260514_1649.json`\n- `smoke_trace`: `tools/data/component_state_interface_smoke_20260514_1649.trace.jsonl`\n\n## Key Findings\n\n1. **Verificato**: il tester ha ora un contratto input/output esplicito e una modalita' CLI unica per spettri ordinati.\n2. **Verificato**: l'artifact dichiara soglie, stati componente sorgente, trace, counter-perimeter e `not_promoted_as_physics_law=true`.\n3. **Verificato**: il graph candidate QxG resta `contract_ready_not_integrated`; nessuna integrazione automatica viene fatta.\n4. **Vincolo**: il contrasto diretto richiede piu' di uno spettro indipendente per classe per diventare evidenza, mentre resta sempre riportato come output quando classi/label sono presenti.\n\n## Verdict\n\n**CONSTRAINT / FIT-READY TESTER**.\n\n`component_state(SR,L1,triple_var)` e' fit-ready come strumento: riceve uno spettro ordinato, produce stato componente, contrasto Poisson e contrasto diretto quando il payload contiene classi. Il candidato QxG resta pronto per decisione operatore, non integrato nel grafo e non promosso a legge fisica.\n\n## Bicono della scoperta\n\n- **Due radici**: deposito fisico verificato 16:40 / contratto integrabile.\n- **Singolare**: `component_state`, stesso vettore letto come output dello strumento.\n- **Invariante di passaggio**: soglie, trace e fall condition accompagnano il tester oltre il singolo run.\n- **Campo di possibilita**: possibile usare il tester in pipeline o decisione grafo; non-possibile promuoverlo senza nuovi perimetri fisici esterni.\n\n## Consecutio\n\nIl prossimo passo e' decisione operatore o valutatore: integrare il riferimento nel grafo QxG come contratto candidate, oppure chiedere falsificazione esterna con dataset fisico. Il tester e' pronto per quel bivio.\n\n## Ricadute pratiche\n\nssp_value: yes. L'output e' uno strumento riusabile e un artifact fit-ready per pipeline/grafo: `tools/data/component_state_fit_ready_20260514_1649.json`.\n\n## Files\n\n- `tools/exp_physical_sr_residue_bounce.py`\n- `tools/data/component_state_fit_ready_20260514_1649.json`\n- `tools/data/component_state_interface_smoke_20260514_1649.json`\n- `tools/data/component_state_interface_smoke_20260514_1649.trace.jsonl`\n- `tools/data/reports/agent_20260514_1649.md`\n",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1562:      "title": "Agent Report - Rafforzamento tester fisico GOE/GUE N-curve",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1563:      "title_en": "Agent Report - Rafforzamento tester fisico GOE/GUE N-curve",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1565:      "tensions": "TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GOE-GUE-Poisson-Anderson",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1566:      "verdict": "**CONSTRAINT / TESTER OPERATIVO RAFFORZATO**.\n\nIl ciclo rafforza lo strumento, non il claim fisico. `component_state(SR,L1,triple_var)` ora ha un denominatore piu' robusto: distingue GOE e GUE tramite",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1567:      "verdict_en": "**CONSTRAINT / TESTER OPERATIVO RAFFORZATO**.\n\nIl ciclo rafforza lo strumento, non il claim fisico. `component_state(SR,L1,triple_var)` ora ha un denominatore piu' robusto: distingue GOE e GUE tramite",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1568:      "findings": "1. **Verificato**: `SR` coincide con adjacent gap ratio e separa GOE/GUE nel verso fisico atteso: GUE > GOE > Poisson.\n2. **Verificato**: `component_state(SR,L1,triple_var)` resta leggibile fra `N=128` e `N=192`; non collassa per cambio taglia minimo.\n3. **Verificato**: Anderson 1D `W=6` resta bordo finite-size: `SR` e' absorbed, `triple_var` resta active.\n4. **Inferito**: il tester 16:31 passa da",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1569:      "content_preview": "# Agent Report - Rafforzamento tester fisico GOE/GUE N-curve\n**Date**: 2026-05-14 16:40  \n**Piano**: 121  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GOE-GUE-Poisson-Anderson  \n**verdict**: CONSTRAINT / TESTER OPERATIVO RAFFORZATO - `component_state(SR,L1,triple_var)` resta leggibile su un denominatore fisico piu' robusto: distingue GOE e GUE per simmetria su `SR`, conserva la curva in `N=128,192`, e mantiene Anderson 1D `W=6` come bordo finite-size dove `SR` viene as",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1570:      "content_full": "# Agent Report - Rafforzamento tester fisico GOE/GUE N-curve\n**Date**: 2026-05-14 16:40  \n**Piano**: 121  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GOE-GUE-Poisson-Anderson  \n**verdict**: CONSTRAINT / TESTER OPERATIVO RAFFORZATO - `component_state(SR,L1,triple_var)` resta leggibile su un denominatore fisico piu' robusto: distingue GOE e GUE per simmetria su `SR`, conserva la curva in `N=128,192`, e mantiene Anderson 1D `W=6` come bordo finite-size dove `SR` viene assorbito e `triple_var` resta residuo operativo. Non e' una nuova legge fisica.  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, component_state, focus_signature, sign_swap_p, cohen_d_delta, adjacent_gap_ratio]  \n**observable_contract**: claim=il tester L8 16:31 si rafforza solo se resta leggibile fra classi Wigner-Dyson distinte e fra due taglie; observable=`component_state(SR,L1,triple_var)` con `SR` = adjacent gap ratio canonico piu contrasto diretto GUE-GOE; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GOE reale simmetrico, GUE hermitiano complesso, Anderson 1D `W=6`, null Poisson span-matched; denominator=2 taglie `N={128,192}`, 64 repliche per taglia e dominio, 384 eventi trace, finestra centrale 0.5; non_possible=promuovere il pattern a legge fisica nuova o usare Anderson 1D come transizione universale; not_tested=dati sperimentali, unfolding dedicato, Anderson 3D, many-body localization, limite asintotico.\n\n## Source directive\n\nQuesto ciclo prosegue il tester L8 del report `tools/data/reports/agent_20260514_1631.md`. Non apre una nuova legge fisica e non ritorna a `prime-minus-mod6`. Il vincolo seguito e': rafforzare il tester operativo `component_state(SR,L1,triple_var)` su denominatore fisico piu' robusto distinguendo GOE/GUE, facendo una piccola curva in `N`, mantenendo Anderson 1D `W=6` come bordo finite-size, e confrontando il tester con adjacent gap ratio.\n\n## Prima impressione\n\nIl tester non deve dire \"fisica nuova\". Deve dire se lo stesso vettore resta leggibile quando il denominatore fisico smette di essere una sola classe. La separazione GOE/GUE su `SR` e il collasso di `SR` a `W=6` sono lo stesso bordo letto da due lati: simmetria caotica e assorbimento localizzato.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + ponte QxG continuo/discreto + direzione BOUNDARY GUE/Poisson + nodo fisico Wigner-Dyson/Anderson.\n- **Dipolo / punto-zero**: simmetria Wigner-Dyson GOE/GUE / indipendenza Poisson-localizzata. Punto-zero: adjacent gap ratio `SR`, perche' e' insieme osservabile canonico del tester e baseline fisica standard.\n- **Piano superiore**: geometria spettrale dei campi, con simmetria come vincolo e localizzazione come bordo.\n- **Operatori laterali scelti**: gauge/simmetria, spettro di Hamiltoniana, bordo finite-size. Entrano perche' obbligano il tester a passare da una sola classe GUE a classi di simmetria distinte e a un bordo disordinato.\n- **Contaminazione cognitiva**: CE-0001/KSAR usato come reiterazione del kernel 16:31: non cambiare ramo, far girare il tester su denominatore piu' esterno. CE-0117 usato per la cascata della possibilita': conservare strumento riusabile, tagliare promozione a scoperta fisica.\n- **Proto-ipotesi**: `component_state(SR,L1,triple_var)` e' un tester di leggibilita' del bordo spettrale: `SR` discrimina simmetria caotica e viene assorbito al bordo Anderson `W=6`; `triple_var` conserva un residuo operativo locale.\n- **Possibile / non-possibile**: possibile = usare il tester come diagnostica compatta su spettri ordinati con classe di simmetria dichiarata; non-possibile = chiamare universale una curva a due taglie o trattare Anderson 1D come transizione fisica generale.\n- **Proiezione**: misuro GOE, GUE e Anderson `W=6` a `N=128,192`; ogni dominio viene confrontato con Poisson span-matched, poi GUE viene confrontato direttamente con GOE.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: il ciclo segue la direzione viva perche' rafforza il frame GUE/Poisson-Anderson indicato dal valutatore e rende `component_state(SR,L1,triple_var)` piu' falsificabile.\n- `not_drift`: non torna a `prime-minus-mod6`, `V_c`, fit locali o label aritmetiche; il deposito precedente resta solo origine del tester, non perimetro misurato.\n\n## Claim Under Test\n\n> Il tester `component_state(SR,L1,triple_var)` resta operativo quando il denominatore fisico separa GOE e GUE: `SR` legge la classe di simmetria Wigner-Dyson, viene assorbito nel bordo Anderson 1D `W=6`, e `triple_var` resta residuo locale nel bordo finite-size.\n\n## Question\n\nIl tester L8 16:31 distingue una classe GOE da una classe GUE su due taglie senza perdere il bordo Anderson `W=6`?\n\n## Ritorno fisico\n\n- **Punto fisico sorgente**: statistiche Wigner-Dyson/GUE e Poisson usate nel report 16:31 come baseline del rimbalzo fisico.\n- **Attraversamento matematico**: adjacent gap ratio e osservabili canonici `SR,L1,triple_var` su gap normalizzati centrali.\n- **Punto fisico di ritorno**: classi di simmetria GOE beta=1 reale-simmetrica e GUE beta=2 hermitiana complessa, piu Anderson 1D disordinato `W=6`.\n- **Relazione nuova**: il tester non misura solo chaotic-vs-Poisson; misura anche se la simmetria Wigner-Dyson lascia una differenza leggibile prima del bordo localizzato.\n- **Osservabile/test fisico possibile**: applicare lo stesso output a spettri con simmetria nota e verificare se `SR` separa beta=1/beta=2 mentre `triple_var` resta tracciabile nel crossover disordinato.\n- **Se fallisce**: `ritorno_fisico_assente` se GOE/GUE non si separano o se Anderson `W=6` non assorbe `SR`; in quel caso il tester resta solo scaffold sintetico.\n\n## Nearest known baseline\n\n- **Wigner-Dyson / GOE level statistics**: classe beta=1, matrici reali simmetriche, simmetria di inversione temporale.\n- **Wigner-Dyson / GUE level statistics**: classe beta=2, matrici hermitiane complesse, assenza di simmetria di inversione temporale.\n- **Poisson level statistics**: livelli indipendenti, null operativo span-matched.\n- **Anderson localization / finite-size disorder crossover**: Anderson 1D `W=6` e' bordo finite-size, non transizione universale.\n- **Adjacent gap ratio**: `SR` canonico = media di `min(g_i,g_{i+1})/max(g_i,g_{i+1})`, confronto standard senza unfolding fine.\n\n## Experiment Design\n\n- Modifica minima allo script: aggiunti `goe_levels`, parametro `--ns`, trace con `n/symmetry`, riepiloghi per taglia e contrasto diretto GUE-GOE.\n- Run: `python tools/exp_physical_sr_residue_bounce.py --output tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.json --seed 202605141640 --ns 128 192 --reps 64 --central-fraction 0.5 --disorders 6 --sign-trials 8192`\n- Perimetro: GOE, GUE, Anderson 1D `W=6`; due taglie; 64 repliche per taglia e dominio.\n- Null: Poisson span-matched con stesso count di gap.\n- Gate componente: `active` se `sign_swap_p <= 0.01` e `|cohen_d_delta| >= 0.5`; altrimenti `absorbed`.\n- Trace: 384 eventi JSONL.\n\n## Results\n\n### Aggregato su N=128,192\n\n| domain | samples | focus active | SR real/null/delta | p(SR) | d(SR) | L1 delta | p(L1) | d(L1) | triple delta | p(triple) | d(triple) |\n|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|\n| GOE beta=1 | 128 | SR,L1,triple_var | 0.5340 / 0.3875 / 0.1465 | 0.000122 | 2.543 | -0.2594 | 0.000122 | -1.772 | -2.4571 | 0.000122 | -2.719 |\n| GUE beta=2 | 128 | SR,L1,triple_var | 0.6019 / 0.3838 / 0.2181 | 0.000122 | 4.120 | -0.2717 | 0.000122 | -1.867 | -2.5591 | 0.000122 | -3.292 |\n| Anderson 1D W=6 | 128 | triple_var | 0.3875 / 0.3871 / 0.0003 | 0.950446 | 0.006 | -0.0656 | 0.000122 | -0.460 | -0.6374 | 0.000122 | -0.683 |\n\n### Curva in N\n\n| domain | N | samples | focus active | SR real | SR delta | p(SR) | d(SR) | triple delta | p(triple) | d(triple) |\n|---|---:|---:|---|---:|---:|---:|---:|---:|---:|---:|\n| GOE beta=1 | 128 | 64 | SR,L1,triple_var | 0.5302 | 0.1406 | 0.000122 | 2.177 | -2.6110 | 0.000122 | -2.541 |\n| GUE beta=2 | 128 | 64 | SR,L1,triple_var | 0.6005 | 0.2207 | 0.000122 | 3.635 | -2.6750 | 0.000122 | -3.122 |\n| Anderson 1D W=6 | 128 | 64 | triple_var | 0.3908 | -0.0007 | 0.930428 | -0.011 | -0.6946 | 0.000122 | -0.622 |\n| GOE beta=1 | 192 | 64 | SR,L1,triple_var | 0.5379 | 0.1525 | 0.000122 | 3.079 | -2.3032 | 0.000122 | -3.129 |\n| GUE beta=2 | 192 | 64 | SR,L1,triple_var | 0.6034 | 0.2155 | 0.000122 | 4.883 | -2.4432 | 0.000122 | -3.615 |\n| Anderson 1D W=6 | 192 | 64 | triple_var | 0.3841 | 0.0013 | 0.824118 | 0.029 | -0.5801 | 0.000122 | -0.816 |\n\n### Contrasto diretto GUE-GOE\n\n| contrast | paired | SR diff GUE-GOE | p(SR) | d(SR) | SR state | triple diff | p(triple) | d(triple) | triple state |\n|---|---:|---:|---:|---:|---|---:|---:|---:|---|\n| N128 | 64 | 0.0704 | 0.000122 | 1.299 | separated | -0.2100 | 0.000122 | -1.898 | separated |\n| N192 | 64 | 0.0655 | 0.000122 | 1.633 | separated | -0.2030 | 0.000122 | -2.088 | separated |\n\n## Evidence tier\n\n- **Verificato / strong per tester**: GOE e GUE sono entrambi active contro Poisson span-matched su `SR,L1,triple_var`.\n- **Verificato / class separation**: GUE-GOE si separa su `SR` in entrambe le taglie (`+0.0704` a `N=128`, `+0.0655` a `N=192`, p=0.000122).\n- **Verificato / size readability**: il pattern resta leggibile nelle due taglie: GUE ha `SR` circa 0.6005/0.6034, GOE circa 0.5302/0.5379.\n- **Verificato / operational boundary**: Anderson `W=6` assorbe `SR` in entrambe le taglie (`p=0.930428` a `N=128`, `p=0.824118` a `N=192`) mentre `triple_var` resta active.\n- **Inferito dal perimetro**: il tester distingue simmetria caotica e bordo localizzato nel setup sintetico.\n- **Non verificato**: dati sperimentali, unfolding dedicato, classi GSE, Anderson 3D, many-body localization, limite asintotico.\n\n## Trace path\n\n- `evidence_tier`: strong per tester operativo, non per legge fisica.\n- `trace_path`: `tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.trace.jsonl`\n- `trace_rows`: 384\n- `trace_schema`: `event,label,symmetry,rep,n,n_gaps,real,null,delta`\n\n## Key Findings\n\n1. **Verificato**: `SR` coincide con adjacent gap ratio e separa GOE/GUE nel verso fisico atteso: GUE > GOE > Poisson.\n2. **Verificato**: `component_state(SR,L1,triple_var)` resta leggibile fra `N=128` e `N=192`; non collassa per cambio taglia minimo.\n3. **Verificato**: Anderson 1D `W=6` resta bordo finite-size: `SR` e' absorbed, `triple_var` resta active.\n4. **Inferito**: il tester 16:31 passa da \"GUE contro Poisson\" a \"simmetria Wigner-Dyson contro bordo Poisson-localizzato\".\n5. **Ambiguo dichiarato**: la stabilita' su due taglie non e' limite asintotico; e' leggibilita' operativa minima.\n\n## Verdict\n\n**CONSTRAINT / TESTER OPERATIVO RAFFORZATO**.\n\nIl ciclo rafforza lo strumento, non il claim fisico. `component_state(SR,L1,triple_var)` ora ha un denominatore piu' robusto: distingue GOE e GUE tramite adjacent gap ratio, resta leggibile su due taglie, e mantiene Anderson `W=6` come bordo in cui `SR` viene assorbito prima del residuo `triple_var`.\n\n## Bicono della scoperta\n\n- **Due radici**: simmetria Wigner-Dyson GOE/GUE / indipendenza Poisson-localizzata.\n- **Singolare**: adjacent gap ratio `SR`, punto-zero che e' insieme baseline fisica e componente del tester.\n- **Invariante di passaggio**: `SR` separa GOE-GUE ma cade su Anderson `W=6`; `triple_var` conserva residuo locale nel bordo finite-size.\n- **Campo di possibilita**: possibile applicare il tester a spettri con simmetria dichiarata e denominatore tracciato; non-possibile dichiarare nuova legge fisica o transizione universale con questo perimetro.\n\n## Consecutio\n\nIl prossimo passo non e' aggiungere dominio per ampiezza. E' rendere il tester leggibile come strumento: interfaccia unica per spettro ordinato, classe attesa opzionale, output `component_state`, contrasto Poisson e, se due classi sono presenti, contrasto diretto. La promozione resta `soluzione/tool`, non `scoperta fisica`.\n\n## Ricadute pratiche\n\nssp_value: yes. Il ciclo produce un tester piu' riusabile: dato uno spettro ordinato o un ensemble, calcola `SR,L1,triple_var`, confronta Poisson span-matched, separa GOE/GUE se presenti, e ritorna `component_state` con trace auditabile.\n\n## Files\n\n- `tools/exp_physical_sr_residue_bounce.py`\n- `tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.json`\n- `tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.trace.jsonl`\n- `tools/data/reports/agent_20260514_1640.md`\n",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1576:          "text": "> Il tester `component_state(SR,L1,triple_var)` resta operativo quando il denominatore fisico separa GOE e GUE: `SR` legge la classe di simmetria Wign"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1582:          "text": "Il tester L8 16:31 distingue una classe GOE da una classe GUE su due taglie senza perdere il bordo Anderson `W=6`?"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1588:          "text": "- Modifica minima allo script: aggiunti `goe_levels`, parametro `--ns`, trace con `n/symmetry`, riepiloghi per taglia e contrasto diretto GUE-GOE.\n- Run: `python tools/exp_physical_sr_residue_bounce.p"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1616:      "tensions": "TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GUE-Anderson",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1619:      "findings": "1. **Verificato**: `SR` in GUE e' adjacent gap ratio Wigner-Dyson/GUE-like, non osservabile inventato.\n2. **Verificato**: a `W=6`, `SR` e `L1` sono absorbed dal gate, mentre `triple_var` resta active.\n3. **Verificato**: il confronto Poisson span-matched basta come baseline operativa minima, ma non sostituisce letteratura, dati o unfolding.\n4. **Inferito**: il deposito `prime-minus-mod6` genera un ",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1620:      "content_preview": "# Agent Report - Chiusura tester rimbalzo fisico W=6\n**Date**: 2026-05-14 16:31  \n**Piano**: 121  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GUE-Anderson  \n**verdict**: CONSTRAINT / TESTER OPERATIVO - il rimbalzo fisico 16:12 regge come tester riusabile: `SR` e' active in GUE e absorbed nel bordo Anderson `W=6`, mentre `triple_var` resta active come residuo intermedio. Non e' una nuova legge fisica.  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1621:      "content_full": "# Agent Report - Chiusura tester rimbalzo fisico W=6\n**Date**: 2026-05-14 16:31  \n**Piano**: 121  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GUE-Anderson  \n**verdict**: CONSTRAINT / TESTER OPERATIVO - il rimbalzo fisico 16:12 regge come tester riusabile: `SR` e' active in GUE e absorbed nel bordo Anderson `W=6`, mentre `triple_var` resta active come residuo intermedio. Non e' una nuova legge fisica.  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, component_state, focus_signature, sign_swap_p, cohen_d_delta, adjacent_gap_ratio]  \n**observable_contract**: claim=il risultato 16:12 va riformulato come tester operativo del confine repulsione/Poisson, non come scoperta fisica; observable=`component_state(SR,L1,triple_var)` con `SR` = adjacent gap ratio canonico; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GUE hermitiano e Anderson 1D `W=6`; denominator=96 repliche per dominio, 95 gap centrali per spettro, 192 eventi trace; null=Poisson span-matched stesso count; non_possible=claim fisico nuovo o legge di transizione se il confronto resta sintetico, finite-size e senza dati sperimentali/unfolding dedicato.\n\n## Source directive\n\nQuesto ciclo segue la direttiva one-shot di chiusura del rimbalzo fisico concreto. Il counter-perimeter e' intenzionale: uscire dal bacino `prime-minus-mod6` per verificare se il deposito produce un ponte fisico. Il vincolo seguito e' chiudere il residuo del falsifier sul report `agent_20260514_1612.md`: rendere visibile la fonte della deviazione dalla direzione viva, nominare la baseline classica vicina, e riformulare il risultato come tester operativo.\n\n## Prima impressione\n\nIl punto-zero non e' \"i primi somigliano alla fisica\". Il punto-zero e' il bordo dove la repulsione dei livelli smette di decidere la classe e lascia un residuo di memoria locale. A `W=6`, `SR` cade; `triple_var` resta. Questo basta per un tester, non per una legge.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + ponte QxG continuo/discreto + direzione BOUNDARY GUE/Poisson + tensione `TENS_SCALE_TRASCENDENZA_LIMITE`.\n- **Dipolo / punto-zero**: repulsione spettrale caotica / indipendenza Poisson-localizzata. Punto-zero: Anderson `W=6`, dove adjacent gap ratio si avvicina al null ma una misura di triple resta leggibile.\n- **Piano superiore**: geometria spettrale dei campi, letta come bordo operativo fra statistiche Wigner-Dyson e Poisson.\n- **Proto-ipotesi**: `component_state(SR,L1,triple_var)` non nomina una nuova fisica; nomina un tester di crossover finite-size: nearest-neighbor repulsion viene assorbita prima della memoria locale di triple.\n- **Possibile / non-possibile**: possibile = riusare il tester su spettri ordinati fisici o simulati; non-possibile = promuovere il pattern sintetico a legge fisica senza baseline, classe di simmetria, unfolding e dati esterni.\n- **Proiezione**: rerun focalizzato `GUE -> Poisson span-matched -> Anderson 1D W=6`, con 96 repliche e trace JSONL.\n\n## Contaminazione cognitiva\n\nCE-0001/KSAR usato come reiterazione del kernel 16:12: non cambiare ramo, far diventare il deposito un tester riusabile. CE-0117 usato per la cascata della possibilita': il ciclo conserva solo il passaggio che apre misura ulteriore e taglia la promozione a fisica nuova.\n\n## Aderenza alla direzione\n\n- `relation`: deliberate_counter_perimeter\n- `why`: serve la direzione viva perche' tratta il confine GUE/Poisson come terzo incluso operativo e concentra il bordo `W=6` dove `SR,L1` cedono e `triple_var` resta.\n- `not_drift`: non ritorna a `prime-minus-mod6`, `V_c`, fit locali o label aritmetici; il deposito aritmetico resta solo fonte della domanda, non destinazione.\n\n## Nearest known baseline\n\nLa baseline classica piu' vicina e' la statistica dei livelli quantistici:\n\n- **Wigner-Dyson / GUE level statistics**: repulsione dei livelli in sistemi quantistici caotici senza simmetria di inversione temporale.\n- **Poisson level statistics**: livelli indipendenti, tipici del limite integrabile/localizzato.\n- **Anderson localization / finite-size disorder crossover**: in 1D il disordine porta verso localizzazione; qui `W=6` e' usato come bordo finite-size, non come transizione universale.\n- **Adjacent gap ratio**: `SR` canonico del registry, cioe' media di `min(g_i,g_{i+1})/max(g_i,g_{i+1})`, usato come confronto standard senza unfolding fine.\n\nQuindi il claim massimo ammesso e': riuso operativo / tester riusabile / ponte osservabile.\n\n## Claim Under Test\n\n> Il vettore `component_state(SR,L1,triple_var)` resta leggibile come tester operativo del confine GUE-Anderson: `SR` e' active in GUE, viene assorbito al bordo Anderson `W=6`, e `triple_var` puo' restare active nella zona intermedia.\n\n## Experiment Design\n\n- Base: report `agent_20260514_1612.md`, stesso script e stesse definizioni canoniche.\n- Rerun: `python tools/exp_physical_sr_residue_bounce.py --output tools/data/physical_sr_residue_bounce_20260514_1631_w6.json --seed 202605141631 --n 192 --reps 96 --central-fraction 0.5 --disorders 6 --sign-trials 8192`\n- Ensemble: GUE hermitiano `N=192`; Anderson 1D tight-binding `N=192`, `W=6`.\n- Finestra: 50% centrale, 95 gap normalizzati per media.\n- Null: Poisson span-matched con stesso count.\n- Gate componente: `active` se `sign_swap_p <= 0.01` e `|cohen_d_delta| >= 0.5`; altrimenti `absorbed`.\n- Trace: 192 eventi JSONL.\n\n## Results\n\n| domain | samples | focus active | SR real/null/delta | p(SR) | d(SR) | L1 delta | p(L1) | d(L1) | triple delta | p(triple) | d(triple) |\n|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|\n| GUE chaotic proxy | 96 | SR,L1,triple_var | 0.5950 / 0.3880 / 0.2070 | 0.000122 | 4.284 | -0.3179 | 0.000122 | -2.527 | -2.6163 | 0.000122 | -3.263 |\n| Anderson 1D W=6 | 96 | triple_var | 0.3955 / 0.3849 / 0.0106 | 0.028439 | 0.229 | -0.0333 | 0.022092 | -0.243 | -0.5510 | 0.000122 | -0.544 |\n\n## Evidence tier\n\n- **Verificato / strong per tester**: GUE mantiene `SR` active contro Poisson span-matched (`delta=0.2070`, `p=0.000122`, `d=4.284`).\n- **Verificato / operational boundary**: Anderson `W=6` assorbe `SR` nel gate dichiarato (`p=0.028439`, `d=0.229`), pur avendo delta positivo piccolo. Il linguaggio corretto e' assorbito, non zero.\n- **Verificato / moderate residual**: `triple_var` resta active a `W=6` (`p=0.000122`, `d=-0.544`). E' residuo operativo intermedio, non prova di classe fisica nuova.\n- **Inferito dal perimetro**: il tester distingue repulsione nearest-neighbor e memoria locale di triple nel setup sintetico GUE/Anderson.\n- **Non verificato**: dati sperimentali, Anderson 3D, many-body localization, GOE/GSE, unfolding dedicato, robuste curve di taglia `N`.\n\n## Autopsy lab-native della trace\n\nIl run produce `tools/data/physical_sr_residue_bounce_20260514_1631_w6.trace.jsonl` con 192 righe: 96 GUE e 96 Anderson `W=6`. Il deposito e' leggibile senza API esterne e senza dipendenza dall'operatore. Il residuo del falsifier 16:12 non era nei numeri, ma nel nome del risultato: `PHYSICAL BOUNCE PRESENT` poteva suonare come promozione fisica. Il nodo regressivo e' il claim header; va chiuso come `TESTER OPERATIVO`.\n\n## Key Findings\n\n1. **Verificato**: `SR` in GUE e' adjacent gap ratio Wigner-Dyson/GUE-like, non osservabile inventato.\n2. **Verificato**: a `W=6`, `SR` e `L1` sono absorbed dal gate, mentre `triple_var` resta active.\n3. **Verificato**: il confronto Poisson span-matched basta come baseline operativa minima, ma non sostituisce letteratura, dati o unfolding.\n4. **Inferito**: il deposito `prime-minus-mod6` genera un tester trasferibile solo perche' viene spogliato del claim aritmetico e proiettato su un fenomeno fisico nominato.\n5. **Ambiguo dichiarato**: Anderson 1D e' finite-size disorder crossover; non viene usato come transizione di fase universale.\n\n## Verdict\n\n**CONSTRAINT / TESTER OPERATIVO**.\n\nIl risultato 16:12 regge come ponte osservabile e strumento di misura riusabile. Non regge come `NEW` fisico. La forma corretta e': `component_state(SR,L1,triple_var)` testa se uno spettro conserva repulsione nearest-neighbor contro Poisson e se lascia un residuo di memoria locale nella zona intermedia.\n\n## Bicono della scoperta\n\n- **Due radici**: Wigner-Dyson/GUE level statistics / Poisson level statistics.\n- **Singolare**: null Poisson span-matched su stesso count.\n- **Invariante di passaggio**: `SR` cade prima di `triple_var` nel bordo `W=6`.\n- **Campo di possibilita**: applicare il tester a spettri simulati o sperimentali con denominatore dichiarato.\n- **Campo non-possibile**: chiamare scoperta fisica un pattern che resta sintetico, finite-size e baseline-minimal.\n\n## Consecutio\n\nIl passo successivo valido non e' tornare ai primi. E' portare lo stesso tester su un denominatore fisico piu' forte: GOE/GUE scelto per simmetria, Anderson 3D o many-body localization se serve una transizione reale, curve in `N`, e confronto con adjacent gap ratio standard piu' unfolding controllato.\n\n## Ricadute pratiche\n\nssp_value: yes. Il ciclo chiude un tester riusabile: dato uno spettro ordinato, calcola `SR,L1,triple_var`, genera un null Poisson span-matched, e restituisce `component_state` come lettura operativa del bordo repulsione/localizzazione.\n\n## Files\n\n- `tools/exp_physical_sr_residue_bounce.py`\n- `tools/data/physical_sr_residue_bounce_20260514_1631_w6.json`\n- `tools/data/physical_sr_residue_bounce_20260514_1631_w6.trace.jsonl`\n- `tools/data/reports/agent_20260514_1631.md`\n",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1627:          "text": "> Il vettore `component_state(SR,L1,triple_var)` resta leggibile come tester operativo del confine GUE-Anderson: `SR` e' active in GUE, viene assorbit"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1639:          "text": "| domain | samples | focus active | SR real/null/delta | p(SR) | d(SR) | L1 delta | p(L1) | d(L1) | triple delta | p(triple) | d(triple) |\n|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|\n|"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1651:          "text": "Il passo successivo valido non e' tornare ai primi. E' portare lo stesso tester su un denominatore fisico piu' forte: GOE/GUE scelto per simmetria, An"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1662:      "verdict": "**CONSTRAINT / PHYSICAL BOUNCE PRESENT**.\n\nIl rimbalzo fisico esiste come test: GUE -> span-matched Poisson -> Anderson 1D. Il risultato non cristallizza una nuova legge fisica. Formalizza un ponte in",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1663:      "verdict_en": "**CONSTRAINT / PHYSICAL BOUNCE PRESENT**.\n\nIl rimbalzo fisico esiste come test: GUE -> span-matched Poisson -> Anderson 1D. Il risultato non cristallizza una nuova legge fisica. Formalizza un ponte in",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1664:      "findings": "1. **Verificato**: nel proxy GUE, `SR` resta attivo contro Poisson span-matched (`delta=0.2055`, `p=0.000244`, `d=4.872`).\n2. **Verificato**: nel ritorno Anderson localizzato `W=12`, `SR` viene assorbito (`delta=-0.0038`, `p=0.585062`, `d=-0.076`).\n3. **Verificato**: la zona intermedia `W=6` separa componenti: `SR` assorbito, `triple_var` attivo.\n4. **Inferito dal perimetro**: il deposito prime-mi",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1665:      "content_preview": "# Agent Report - Rimbalzo fisico del residuo SR\n**Date**: 2026-05-14 16:12  \n**Piano**: 120  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / deliberate_counter_perimeter fisico L8  \n**verdict**: CONSTRAINT - il trasduttore `SR` assorbito vs residuo `L1,triple_var` produce un test fisico concreto su spettri GUE/Anderson; nel run sintetico il ritorno fisico e' presente ma resta proxy numerico, non misura sperimentale  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1666:      "content_full": "# Agent Report - Rimbalzo fisico del residuo SR\n**Date**: 2026-05-14 16:12  \n**Piano**: 120  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / deliberate_counter_perimeter fisico L8  \n**verdict**: CONSTRAINT - il trasduttore `SR` assorbito vs residuo `L1,triple_var` produce un test fisico concreto su spettri GUE/Anderson; nel run sintetico il ritorno fisico e' presente ma resta proxy numerico, non misura sperimentale  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, component_state, focus_signature, sign_swap_p, cohen_d_delta]  \n**observable_contract**: claim=il cedimento selettivo di `SR` puo' essere formulato come test fisico A->B; observable=componenti canoniche attive/assorbite contro null Poisson span-matched; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GUE hermitiano e Hamiltoniano Anderson 1D tight-binding; denominator=48 repliche per dominio, 95 gap centrali per spettro; non_possible=rimbalzo fisico assente se non si nomina B concreto oppure se `SR` non discrimina GUE da Anderson localizzato; not_tested=dati sperimentali reali, unfolding fine, classi di simmetria GOE/GSE, many-body localization.\n\n## Prima impressione\n\nIl risultato non chiede un altro ingrandimento dei primi. Chiede se la componente che cade (`SR`) e quelle che resistono (`L1,triple_var`) nominano una distinzione fisica: repulsione spettrale presente o assorbita dal bordo Poisson.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + ponte QxG continuo/discreto + tensione `TENS_SCALE_TRASCENDENZA_LIMITE` + deposito `prime_minus_mod6_z_vector`.\n- **Dipolo / punto-zero**: caos quantistico / localizzazione. Punto-zero: stesso numero di livelli e stesso span con null Poisson span-matched.\n- **Piano superiore**: geometria spettrale dei campi; il bordo non e' una classe aritmetica ma un lettore di repulsione/indipendenza nei gap energetici.\n- **Proto-ipotesi**: `SR` misura la repulsione locale assorbibile quando lo spettro torna Poisson; `L1,triple_var` misurano memoria di sequenza oltre il solo nearest-neighbor ratio. Il deposito prime-minus-mod6 diventa trasduttore, non destinazione.\n- **Possibile / non-possibile**: possibile = formulare un test fisico su spettri misurabili; non-possibile = dichiarare claim fisico se il ritorno resta \"sistema discreto\" o \"confine\" senza Hamiltoniano concreto.\n- **Proiezione**: GUE come sorgente fisica A; null Poisson span-matched; Anderson 1D con disordine `W=0.5,2,6,12` come ritorno fisico B.\n\n## Contaminazione cognitiva\n\nCE-0117 usato come cascata della possibilita': il ciclo non resta nel potenziale aritmetico, ma attraversa struttura matematica e torna a un setup fisico. CE-0001/KSAR usato per trasformare il kernel 16:05 in strumento riusabile invece di riscrivere solo un'analogia.\n\n## Aderenza alla direzione\n\n- `relation`: deliberate_counter_perimeter\n- `why`: la direttiva operatore chiede di non proseguire come ottimizzazione locale prime-minus-mod6; il ciclo usa il cedimento `SR` vs `L1,triple_var` come trasduttore e lo porta su spettri fisici.\n- `not_drift`: il deposito prime-minus-mod6 non e' destinazione; decide solo quale domanda portare a GUE/Anderson.\n\n## Ritorno fisico\n\n- **Punto fisico sorgente concreto**: spettri energetici di sistemi quantistici caotici modellati da GUE, proxy per billiard o sistemi senza simmetria di inversione temporale.\n- **Attraversamento matematico**: null Poisson span-matched con osservabili canonici `SR,L1,triple_var`; e' l'analogo fisico del contro-bordo che prova ad assorbire la componente nearest-neighbor.\n- **Punto fisico di ritorno concreto**: Hamiltoniano tight-binding Anderson 1D con disordine crescente, interrogabile tramite spacing degli autovalori e transizione verso statistiche Poisson/localizzate.\n- **Relazione nuova o limite**: il run mostra una formulazione fisica del cedimento selettivo: `SR` e' attivo nel GUE e assorbito nel limite Anderson localizzato `W=12`. A `W=6`, `SR` e `L1` sono assorbiti mentre `triple_var` resta attivo: il ritorno fisico separa nearest-neighbor repulsion e memoria di triple locali.\n- **Osservabile/test fisico possibile**: misurare spettri energetici in un sistema Anderson-like, costruire un ensemble di finestre spettrali, confrontare `SR,L1,triple_var` contro null Poisson span-matched con sign-swap row-local.\n- **Stato finale**: `rimbalzo_fisico_presente`.\n\n## Claim Under Test\n\n> Il cedimento selettivo di `SR` osservato nel deposito prime-minus-mod6 puo' tornare come criterio fisico: `SR` resta attivo in spettri caotici GUE e viene assorbito in spettri Anderson localizzati contro un null Poisson span-matched.\n\n## Experiment Design\n\n- Script: `tools/exp_physical_sr_residue_bounce.py`.\n- Ensemble: GUE hermitiano `N=192`, Anderson 1D `N=192`.\n- Repliche: 48 per dominio.\n- Finestra: 50% centrale dello spettro, 95 gap normalizzati per media.\n- Null: livelli Poisson uniformi span-matched con stesso count.\n- Gate componente: `active` se `sign_swap_p <= 0.01` e `|cohen_d_delta| >= 0.5`; altrimenti `absorbed`.\n- Trace: 240 eventi JSONL, uno per replica/dominio.\n\n## Results\n\n| domain | samples | focus active | SR real/null/delta | p(SR) | L1 delta | p(L1) | triple delta | p(triple) |\n|---|---:|---|---:|---:|---:|---:|---:|---:|\n| GUE chaotic proxy | 48 | SR,L1,triple_var | 0.5936 / 0.3881 / 0.2055 | 0.000244 | -0.3047 | 0.000244 | -2.4262 | 0.000244 |\n| Anderson W=0.5 | 48 | SR,L1,triple_var | 0.6573 / 0.3903 / 0.2671 | 0.000244 | -0.3240 | 0.000244 | -2.5721 | 0.000244 |\n| Anderson W=2 | 48 | SR,L1,triple_var | 0.4364 / 0.3774 / 0.0589 | 0.000244 | -0.1373 | 0.000244 | -1.6244 | 0.000244 |\n| Anderson W=6 | 48 | triple_var | 0.3984 / 0.3824 / 0.0160 | 0.035392 | -0.0589 | 0.002929 | -0.7407 | 0.000244 |\n| Anderson W=12 | 48 | [] | 0.3798 / 0.3836 / -0.0038 | 0.585062 | -0.0262 | 0.168904 | -0.4147 | 0.002685 |\n\nNota gate: a `W=6`, `L1` ha p sotto soglia ma effect `d=-0.443`, quindi e' assorbito dal gate dichiarato. A `W=12`, `triple_var` ha p sotto soglia ma effect `d=-0.442`, quindi non supera il gate.\n\n## Key Findings\n\n1. **Verificato**: nel proxy GUE, `SR` resta attivo contro Poisson span-matched (`delta=0.2055`, `p=0.000244`, `d=4.872`).\n2. **Verificato**: nel ritorno Anderson localizzato `W=12`, `SR` viene assorbito (`delta=-0.0038`, `p=0.585062`, `d=-0.076`).\n3. **Verificato**: la zona intermedia `W=6` separa componenti: `SR` assorbito, `triple_var` attivo.\n4. **Inferito dal perimetro**: il deposito prime-minus-mod6 produce un osservabile fisico formulabile: non \"i primi sono fisica\", ma \"la componente `SR` boundary-sensitive corrisponde al test di repulsione spettrale contro Poisson\".\n5. **Ambiguo dichiarato**: Anderson 1D non ha vera transizione estesa/localizzata nel limite infinito; qui il risultato e' un finite-size disorder crossover, non claim universale sulla transizione.\n\n## Verdict\n\n**CONSTRAINT / PHYSICAL BOUNCE PRESENT**.\n\nIl rimbalzo fisico esiste come test: GUE -> span-matched Poisson -> Anderson 1D. Il risultato non cristallizza una nuova legge fisica. Formalizza un ponte interrogabile: quando lo spettro torna localizzato/Poisson, `SR` viene assorbito; nella zona di crossover, `triple_var` puo' restare come residuo oltre nearest-neighbor.\n\n## Bicono della scoperta\n\n- **Due radici**: repulsione spettrale caotica / assorbimento Poisson localizzato.\n- **Singolare**: null Poisson span-matched con stesso count.\n- **Invariante di passaggio**: `component_state` attivo/assorbito per `SR,L1,triple_var`.\n- **Campo di possibilita**: usare il vettore a due strati come test su spettri fisici reali.\n- **Campo non-possibile**: chiamare fisico un rimbalzo che resta solo analogia aritmetica.\n\n## Consecutio\n\nIl prossimo ciclo fisico deve sostituire il proxy sintetico con un denominatore piu vicino al laboratorio: GOE/GUE scelto per simmetria dichiarata, Anderson 3D o many-body localization se si vuole una transizione fisica vera, unfolding controllato e confronto con dati o letteratura. Il deposito prime-minus-mod6 resta utile solo come generatore di osservabili, non come prova del dominio fisico.\n\n## Ricadute pratiche\n\nssp_value: yes. Lo script crea un tester riusabile per spettri ordinati fisici: basta sostituire il generatore di livelli con dati sperimentali o simulazioni esterne e il contratto `component_state` resta identico.\n\n## Files\n\n- `tools/exp_physical_sr_residue_bounce.py`\n- `tools/data/physical_sr_residue_bounce_20260514_1612.json`\n- `tools/data/physical_sr_residue_bounce_20260514_1612.trace.jsonl`\n- `tools/data/reports/agent_20260514_1612.md`\n",
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1672:          "text": "> Il cedimento selettivo di `SR` osservato nel deposito prime-minus-mod6 puo' tornare come criterio fisico: `SR` resta attivo in spettri caotici GUE e"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1678:          "text": "- Script: `tools/exp_physical_sr_residue_bounce.py`.\n- Ensemble: GUE hermitiano `N=192`, Anderson 1D `N=192`.\n- Repliche: 48 per dominio.\n- Finestra: 50% centrale dello spettro, 95 gap normalizzati pe"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1684:          "text": "| domain | samples | focus active | SR real/null/delta | p(SR) | L1 delta | p(L1) | triple delta | p(triple) |\n|---|---:|---|---:|---:|---:|---:|---:|---:|\n| GUE chaotic proxy | 48 | SR,L1,triple_var "
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1690:          "text": "**CONSTRAINT / PHYSICAL BOUNCE PRESENT**.\n\nIl rimbalzo fisico esiste come test: GUE -> span-matched Poisson -> Anderson 1D. Il risultato non cristalli"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1696:          "text": "Il prossimo ciclo fisico deve sostituire il proxy sintetico con un denominatore piu vicino al laboratorio: GOE/GUE scelto per simmetria dichiarata, An"
tools/data/restore_backups/pre_restore_20260514_1330/lab_graph.json:1711:      "content_full": "# Agent Report - Limite di scala prime-minus-mod6\n**Date**: 2026-05-14 16:05  \n**Piano**: 119  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / prime-minus-mod6 scale limit (0.6)  \n**verdict**: PARTIAL - `prime_minus_mod6_z_vector(SR,L1,triple_var)` replica completo a 4096/8192; a 16384 cade `SR` contro `mod6_span_matched` con denominatore valido  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, prime_minus_mod6_z_vector, provider, offset, row_id, window_gaps, source_mode, case_state, row_local_label_swap_p, denominator_contract, trace_jsonl_event]  \n**/rosenzweig_porter_bridge_physical_audit_20260515_1933.json:1059:        "source_domain_type": "GUE_pole"
tools/data/rosenzweig_porter_bridge_physical_audit_20260515_1933.json:1065:        "domain_window": "RP_lambda_1.000",
tools/data/rosenzweig_porter_bridge_physical_audit_20260515_1933.json:1078:        "source_domain_type": "GUE_pole"
tools/data/lab_errori.json:74:    "problema": "**Imprecisa.**\n\nLa metrica e rQ² sono corrette. Ma l'argomento \"RN → QxG\" è fuorviante.\n\nRN è un oggetto **GxE** (gravità + elettromagnetismo) — la soluzione di Einstein-Maxwell. L'instabilità di blueshift all'orizzonte interno (r₋) è un fenomeno **classico** (mass inflation, Poisson-Israel 1990), n",
tools/data/component_state_interface_smoke_input_20260514_1649.json:15:      "expected_class": "GUE",
tools/data/ciclo_memoria.json:433:  "direzione_corrente": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/notte_20260308_0330.md:4:  ising_2d_var_-0.1: r=0.988516052701351, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260308_0330.md:5:  ising_2d_var_0.1: r=2.108462262337216, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260308_0330.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260308_0330.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260308_0330.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260308_0330.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260308_0330.md:10:  brownian_motion_var_0.3: r=0.9866666666666667, spacing=Poisson-like (⟨r⟩=0.3946125234002666)
tools/data/notte_20260308_0330.md:11:  brownian_motion_var_0.5: r=1.273726990198422, spacing=Poisson-like (⟨r⟩=0.38077490693533794)
tools/data/notte_20260308_0330.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260308_0330.md:13:  percolation_var_0.55: r=0.816358024691358, spacing=Poisson-like (⟨r⟩=0.4515939359855778)
tools/data/notte_20260308_0330.md:14:  percolation_var_0.65: r=1.1276595744680853, spacing=Poisson-like (⟨r⟩=0.39640179313546897)
tools/data/notte_20260308_0330.md:44:## Fase 4: Cross-domain
tools/data/component_state_fit_ready_20260514_1649.json:19:    "GUE_unitary_no_time_reversal": {
tools/data/component_state_fit_ready_20260514_1649.json:29:    "declared": "single ordered spectrum or small class-labeled set; no new physical domain generation",
tools/data/component_state_fit_ready_20260514_1649.json:32:      "class-labeled input where direct_contrast is not separated on SR despite declared GOE/GUE classes",
tools/data/component_state_fit_ready_20260514_1649.json:40:    "optional_expected_class": "class label used for grouped Poisson contrast and direct class contrast",
tools/data/component_state_fit_ready_20260514_1649.json:53:    "poisson_contrast": "real spectrum versus span-matched Poisson null",
tools/data/component_state_fit_ready_20260514_1649.json:72:    "fall": "Tester falls if GOE/GUE direct SR separation disappears, if Poisson contrast absorbs all focus observables in chaotic classes, or if Anderson W6 keeps SR active under the declared threshold.",
tools/data/component_state_fit_ready_20260514_1649.json:73:    "transfer": "SR,L1,triple_var pass from the mathematical deposit into a physical spectrum tester as component states against Poisson and, when classes exist, direct class contrast."
tools/data/tension_to_theory.json:29:    "POISSON_CONVERGENCE":                { "theories": ["T", "Q"],   "note_it": "convergenza Poisson — statistica ↔ quantistica",                                            "note_en": "Poisson convergence — statistics ↔ quantum" },
tools/data/tension_to_theory.json:35:    "COMP_DOMAIN_PHOTONIC_METRIC_TENSOR": { "theories": ["E", "G"],   "note_it": "dominio fotonico + metric — EM + geometria",                                                "note_en": "photonic domain + metric — EM + geometry" },
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:71:    "generator": "GUE matrices, Poisson exponential spacings, RP H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:75:    "operator": "calibrate GUE/Poisson endpoint centroids; score RP rows by balanced distance to both endpoint centroids; compare to feature-scrambled RP rows"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24372:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24378:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24384:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24390:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24396:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24402:        "source_id": "test_GUE_N128_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24403:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24415:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24421:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24427:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24433:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24439:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24445:        "source_id": "test_GUE_N128_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24446:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24458:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24464:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24470:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24476:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24482:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24488:        "source_id": "test_GUE_N128_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24489:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24501:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24507:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24513:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24519:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24525:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24531:        "source_id": "test_GUE_N128_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24532:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24544:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24550:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24556:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24562:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24568:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24574:        "source_id": "test_GUE_N128_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24575:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24587:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24593:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24599:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24605:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24611:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24617:        "source_id": "test_GUE_N128_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24618:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24630:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24636:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24642:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24648:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24654:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24660:        "source_id": "test_GUE_N160_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24661:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24673:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24679:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24685:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24691:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24697:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24703:        "source_id": "test_GUE_N160_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24704:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24716:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24722:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24728:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24734:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24740:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24746:        "source_id": "test_GUE_N160_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24747:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24759:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24765:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24771:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24777:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24783:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24789:        "source_id": "test_GUE_N160_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24790:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24802:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24808:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24814:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24820:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24826:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24832:        "source_id": "test_GUE_N160_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24833:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24845:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24851:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24857:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24863:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24869:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24875:        "source_id": "test_GUE_N160_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24876:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24888:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24894:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24900:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24906:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24912:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24918:        "source_id": "test_GUE_N192_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24919:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24931:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24937:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24943:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24949:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24955:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24961:        "source_id": "test_GUE_N192_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24962:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24974:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24980:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24986:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24992:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:24998:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25004:        "source_id": "test_GUE_N192_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25005:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25017:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25023:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25029:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25035:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25041:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25047:        "source_id": "test_GUE_N192_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25048:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25060:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25066:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25072:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25078:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25084:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25090:        "source_id": "test_GUE_N192_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25091:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25103:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25109:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25115:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25121:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25127:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25133:        "source_id": "test_GUE_N192_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25134:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25146:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25152:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25158:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25164:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25170:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25176:        "source_id": "test_GUE_N224_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25177:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25189:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25195:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25201:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25207:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25213:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25219:        "source_id": "test_GUE_N224_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25220:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25232:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25238:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25244:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25250:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25256:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25262:        "source_id": "test_GUE_N224_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25263:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25275:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25281:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25287:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25293:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25299:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25305:        "source_id": "test_GUE_N224_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25306:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25318:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25324:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25330:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25336:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25342:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25348:        "source_id": "test_GUE_N224_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25349:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25361:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25367:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25373:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25379:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25385:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25391:        "source_id": "test_GUE_N224_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25392:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25404:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25410:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25416:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25422:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25428:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25434:        "source_id": "test_GUE_N256_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25435:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25447:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25453:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25459:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25465:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25471:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25477:        "source_id": "test_GUE_N256_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25478:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25490:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25496:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25502:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25508:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25514:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25520:        "source_id": "test_GUE_N256_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25521:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25533:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25539:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25545:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25551:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25557:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25563:        "source_id": "test_GUE_N256_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25564:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25576:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25582:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25588:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25594:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25600:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25606:        "source_id": "test_GUE_N256_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25607:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25619:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25625:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25631:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25637:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25643:            "predicted": "GUE",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25649:        "source_id": "test_GUE_N256_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25650:        "source_type": "GUE"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25662:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25668:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25674:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25680:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25686:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25692:        "source_id": "test_Poisson_N128_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25693:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25705:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25711:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25717:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25723:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25729:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25735:        "source_id": "test_Poisson_N128_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25736:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25748:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25754:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25760:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25766:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25772:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25778:        "source_id": "test_Poisson_N128_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25779:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25791:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25797:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25803:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25809:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25815:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25821:        "source_id": "test_Poisson_N128_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25822:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25834:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25840:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25846:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25852:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25858:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25864:        "source_id": "test_Poisson_N128_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25865:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25877:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25883:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25889:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25895:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25901:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25907:        "source_id": "test_Poisson_N128_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25908:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25920:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25926:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25932:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25938:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25944:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25950:        "source_id": "test_Poisson_N160_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25951:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25963:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25969:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25975:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25981:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25987:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25993:        "source_id": "test_Poisson_N160_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:25994:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26006:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26012:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26018:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26024:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26030:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26036:        "source_id": "test_Poisson_N160_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26037:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26049:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26055:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26061:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26067:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26073:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26079:        "source_id": "test_Poisson_N160_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26080:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26092:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26098:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26104:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26110:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26116:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26122:        "source_id": "test_Poisson_N160_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26123:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26135:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26141:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26147:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26153:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26159:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26165:        "source_id": "test_Poisson_N160_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26166:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26178:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26184:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26190:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26196:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26202:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26208:        "source_id": "test_Poisson_N192_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26209:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26221:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26227:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26233:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26239:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26245:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26251:        "source_id": "test_Poisson_N192_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26252:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26264:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26270:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26276:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26282:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26288:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26294:        "source_id": "test_Poisson_N192_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26295:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26307:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26313:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26319:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26325:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26331:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26337:        "source_id": "test_Poisson_N192_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26338:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26350:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26356:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26362:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26368:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26374:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26380:        "source_id": "test_Poisson_N192_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26381:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26393:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26399:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26405:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26411:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26417:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26423:        "source_id": "test_Poisson_N192_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26424:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26436:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26442:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26448:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26454:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26460:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26466:        "source_id": "test_Poisson_N224_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26467:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26479:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26485:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26491:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26497:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26503:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26509:        "source_id": "test_Poisson_N224_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26510:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26522:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26528:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26534:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26540:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26546:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26552:        "source_id": "test_Poisson_N224_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26553:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26565:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26571:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26577:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26583:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26589:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26595:        "source_id": "test_Poisson_N224_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26596:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26608:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26614:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26620:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26626:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26632:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26638:        "source_id": "test_Poisson_N224_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26639:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26651:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26657:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26663:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26669:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26675:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26681:        "source_id": "test_Poisson_N224_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26682:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26694:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26700:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26706:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26712:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26718:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26724:        "source_id": "test_Poisson_N256_s0",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26725:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26737:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26743:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26749:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26755:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26761:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26767:        "source_id": "test_Poisson_N256_s1",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26768:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26780:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26786:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26792:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26798:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26804:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26810:        "source_id": "test_Poisson_N256_s2",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26811:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26823:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26829:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26835:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26841:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26847:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26853:        "source_id": "test_Poisson_N256_s3",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26854:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26866:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26872:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26878:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26884:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26890:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26896:        "source_id": "test_Poisson_N256_s4",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26897:        "source_type": "Poisson"
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26909:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26915:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26921:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26927:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26933:            "predicted": "Poisson",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26939:        "source_id": "test_Poisson_N256_s5",
tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json:26940:        "source_type": "Poisson"
tools/data/notte_20260322_0330.md:4:  ising_2d_var_-0.1: r=0.9533708497068641, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260322_0330.md:5:  ising_2d_var_0.1: r=0.99991253722176, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260322_0330.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260322_0330.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260322_0330.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260322_0330.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260322_0330.md:10:  brownian_motion_var_0.3: r=1.0, spacing=Poisson-like (⟨r⟩=0.3891607218310259)
tools/data/notte_20260322_0330.md:11:  brownian_motion_var_0.5: r=0.5735641227380016, spacing=Poisson-like (⟨r⟩=0.3863528241175028)
tools/data/notte_20260322_0330.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260322_0330.md:13:  percolation_var_0.55: r=1.0, spacing=Poisson-like (⟨r⟩=0.3706649615579767)
tools/data/notte_20260322_0330.md:14:  percolation_var_0.65: r=1.0434782608695652, spacing=Poisson-like (⟨r⟩=0.4771540450594074)
tools/data/notte_20260322_0330.md:46:## Fase 4: Cross-domain
tools/data/aubry_v2_generator_scaling_gate_20260515_1816.json:304:  "summary_by_domain": {
tools/data/prime_sr_persistent_boundary_20260512_0330_seedcheck.json:43:    "generator": "prime gaps from dnd_autoricerca row_spacings and direct sieve; controls from composite gaps, mod6 candidates, Cramer-like events, GUE random matrix blocks, logistic return intervals",
tools/data/prime_sr_persistent_boundary_20260512_0330_seedcheck.json:44:    "denominator": "8 prime row-local windows plus 20 non-prime controls (3 deterministic families x 4 offsets + 4 stochastic GUE/logistic cases each by default)",
tools/data/prime_sr_persistent_boundary_20260512_0330_seedcheck.json:46:    "not_tested": "global beta atlas, V_c, gap_ratio, source GUE/Poisson labels, analytic origin of SR"
tools/data/endpoint_stability_filter_20260516_1045.json:134:    "claim": "GUE/Poisson endpoints are valid filters for the boundary if both poles stay stable across reader/window/size/seed stress under a calibrated endpoint classifier",
tools/data/endpoint_stability_filter_20260516_1045.json:135:    "denominator": "domain x size x test seed source rows; each source row contains all readers",
tools/data/endpoint_stability_filter_20260516_1045.json:136:    "generator": "GUE matrices and Poisson exponential spacings",
tools/data/endpoint_stability_filter_20260516_1045.json:140:    "operator": "calibrate endpoint centroids on held-out GUE/Poisson controls, then stress test readers on independent seeds"
tools/data/endpoint_stability_filter_20260516_1045.json:187:  "question": "Do GUE and Poisson remain endpoint-stable under the reader family before RP boundary residue is tested again?",
tools/data/endpoint_stability_filter_20260516_1045.json:205:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:208:      "source_id": "test_GUE_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:209:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:228:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:231:      "source_id": "test_GUE_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:232:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:251:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:254:      "source_id": "test_GUE_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:255:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:274:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:277:      "source_id": "test_GUE_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:278:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:297:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:300:      "source_id": "test_GUE_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:301:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:320:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:323:      "source_id": "test_Poisson_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:324:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:343:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:346:      "source_id": "test_Poisson_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:347:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:366:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:369:      "source_id": "test_Poisson_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:370:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:389:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:392:      "source_id": "test_Poisson_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:393:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:412:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:415:      "source_id": "test_Poisson_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:416:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:435:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:438:      "source_id": "test_GUE_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:439:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:458:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:461:      "source_id": "test_GUE_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:462:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:481:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:484:      "source_id": "test_GUE_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:485:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:504:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:507:      "source_id": "test_GUE_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:508:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:527:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:530:      "source_id": "test_GUE_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:531:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:550:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:553:      "source_id": "test_Poisson_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:554:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:573:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:576:      "source_id": "test_Poisson_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:577:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:596:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:599:      "source_id": "test_Poisson_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:600:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:619:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:622:      "source_id": "test_Poisson_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:623:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:642:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:645:      "source_id": "test_Poisson_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:646:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:665:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:668:      "source_id": "test_GUE_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:669:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:688:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:691:      "source_id": "test_GUE_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:692:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:711:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:714:      "source_id": "test_GUE_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:715:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:734:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:737:      "source_id": "test_GUE_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:738:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:757:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:760:      "source_id": "test_GUE_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:761:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:780:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:783:      "source_id": "test_Poisson_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:784:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:803:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:806:      "source_id": "test_Poisson_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:807:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:826:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:829:      "source_id": "test_Poisson_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:830:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:849:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:852:      "source_id": "test_Poisson_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:853:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:872:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:875:      "source_id": "test_Poisson_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:876:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:895:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:898:      "source_id": "test_GUE_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:899:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:918:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:921:      "source_id": "test_GUE_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:922:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:941:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:944:      "source_id": "test_GUE_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:945:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:964:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:967:      "source_id": "test_GUE_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:968:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:987:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:990:      "source_id": "test_GUE_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:991:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1010:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1013:      "source_id": "test_Poisson_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:1014:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1033:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1036:      "source_id": "test_Poisson_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:1037:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1056:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1059:      "source_id": "test_Poisson_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:1060:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1079:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1082:      "source_id": "test_Poisson_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:1083:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1102:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1105:      "source_id": "test_Poisson_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:1106:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1125:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1128:      "source_id": "test_GUE_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1129:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1148:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1151:      "source_id": "test_GUE_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1152:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1171:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1174:      "source_id": "test_GUE_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1175:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1194:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1197:      "source_id": "test_GUE_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1198:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1217:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1220:      "source_id": "test_GUE_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1221:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1240:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1243:      "source_id": "test_Poisson_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1244:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1263:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1266:      "source_id": "test_Poisson_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1267:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1286:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1289:      "source_id": "test_Poisson_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1290:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1309:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1312:      "source_id": "test_Poisson_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1313:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1332:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1335:      "source_id": "test_Poisson_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:1336:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1355:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1358:      "source_id": "test_GUE_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1359:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1378:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1381:      "source_id": "test_GUE_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1382:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1401:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1404:      "source_id": "test_GUE_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1405:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1424:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1427:      "source_id": "test_GUE_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1428:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1447:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1450:      "source_id": "test_GUE_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1451:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1470:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1473:      "source_id": "test_Poisson_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1474:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1493:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1496:      "source_id": "test_Poisson_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1497:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1516:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1519:      "source_id": "test_Poisson_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1520:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1539:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1542:      "source_id": "test_Poisson_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1543:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1562:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1565:      "source_id": "test_Poisson_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:1566:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1585:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1588:      "source_id": "test_GUE_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1589:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1608:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1611:      "source_id": "test_GUE_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1612:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1631:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1634:      "source_id": "test_GUE_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1635:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1654:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1657:      "source_id": "test_GUE_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1658:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1677:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1680:      "source_id": "test_GUE_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1681:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1700:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1703:      "source_id": "test_Poisson_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1704:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1723:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1726:      "source_id": "test_Poisson_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1727:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1746:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1749:      "source_id": "test_Poisson_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1750:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1769:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1772:      "source_id": "test_Poisson_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1773:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1792:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1795:      "source_id": "test_Poisson_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:1796:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1815:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1818:      "source_id": "test_GUE_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:1819:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1838:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1841:      "source_id": "test_GUE_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:1842:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1861:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1864:      "source_id": "test_GUE_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:1865:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1884:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1887:      "source_id": "test_GUE_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:1888:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1907:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1910:      "source_id": "test_GUE_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:1911:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:1930:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1933:      "source_id": "test_Poisson_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:1934:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1953:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1956:      "source_id": "test_Poisson_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:1957:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1976:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1979:      "source_id": "test_Poisson_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:1980:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:1999:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2002:      "source_id": "test_Poisson_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:2003:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2022:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2025:      "source_id": "test_Poisson_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:2026:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2045:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2048:      "source_id": "test_GUE_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2049:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2068:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2071:      "source_id": "test_GUE_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2072:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2091:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2094:      "source_id": "test_GUE_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2095:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2114:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2117:      "source_id": "test_GUE_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2118:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2137:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2140:      "source_id": "test_GUE_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2141:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2160:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2163:      "source_id": "test_Poisson_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2164:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2183:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2186:      "source_id": "test_Poisson_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2187:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2206:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2209:      "source_id": "test_Poisson_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2210:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2229:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2232:      "source_id": "test_Poisson_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2233:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2252:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2255:      "source_id": "test_Poisson_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:2256:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2275:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2278:      "source_id": "test_GUE_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2279:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2298:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2301:      "source_id": "test_GUE_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2302:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2321:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2324:      "source_id": "test_GUE_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2325:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2344:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2347:      "source_id": "test_GUE_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2348:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2367:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2370:      "source_id": "test_GUE_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2371:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2390:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2393:      "source_id": "test_Poisson_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2394:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2413:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2416:      "source_id": "test_Poisson_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2417:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2436:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2439:      "source_id": "test_Poisson_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2440:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2459:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2462:      "source_id": "test_Poisson_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2463:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2482:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2485:      "source_id": "test_Poisson_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:2486:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2505:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2508:      "source_id": "test_GUE_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2509:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2528:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2531:      "source_id": "test_GUE_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2532:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2551:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2554:      "source_id": "test_GUE_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2555:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2574:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2577:      "source_id": "test_GUE_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2578:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2597:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2600:      "source_id": "test_GUE_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2601:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2620:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2623:      "source_id": "test_Poisson_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2624:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2643:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2646:      "source_id": "test_Poisson_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2647:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2666:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2669:      "source_id": "test_Poisson_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2670:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2689:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2692:      "source_id": "test_Poisson_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2693:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2712:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2715:      "source_id": "test_Poisson_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:2716:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2735:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2738:      "source_id": "test_GUE_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2739:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2758:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2761:      "source_id": "test_GUE_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2762:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2781:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2784:      "source_id": "test_GUE_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2785:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2804:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2807:      "source_id": "test_GUE_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2808:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2827:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2830:      "source_id": "test_GUE_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2831:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2850:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2853:      "source_id": "test_Poisson_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2854:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2873:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2876:      "source_id": "test_Poisson_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2877:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2896:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2899:      "source_id": "test_Poisson_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2900:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2919:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2922:      "source_id": "test_Poisson_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2923:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2942:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2945:      "source_id": "test_Poisson_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:2946:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:2965:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2968:      "source_id": "test_GUE_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:2969:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2988:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:2991:      "source_id": "test_GUE_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:2992:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3011:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3014:      "source_id": "test_GUE_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:3015:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3034:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3037:      "source_id": "test_GUE_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:3038:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3057:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3060:      "source_id": "test_GUE_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:3061:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3080:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3083:      "source_id": "test_Poisson_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:3084:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3103:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3106:      "source_id": "test_Poisson_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:3107:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3126:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3129:      "source_id": "test_Poisson_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:3130:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3149:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3152:      "source_id": "test_Poisson_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:3153:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3172:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3175:      "source_id": "test_Poisson_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:3176:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3195:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3198:      "source_id": "test_GUE_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3199:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3218:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3221:      "source_id": "test_GUE_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3222:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3241:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3244:      "source_id": "test_GUE_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3245:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3264:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3267:      "source_id": "test_GUE_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3268:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3287:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3290:      "source_id": "test_GUE_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3291:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3310:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3313:      "source_id": "test_Poisson_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3314:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3333:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3336:      "source_id": "test_Poisson_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3337:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3356:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3359:      "source_id": "test_Poisson_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3360:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3379:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3382:      "source_id": "test_Poisson_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3383:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3402:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3405:      "source_id": "test_Poisson_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:3406:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3425:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3428:      "source_id": "test_GUE_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3429:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3448:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3451:      "source_id": "test_GUE_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3452:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3471:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3474:      "source_id": "test_GUE_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3475:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3494:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3497:      "source_id": "test_GUE_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3498:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3517:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3520:      "source_id": "test_GUE_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3521:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3540:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3543:      "source_id": "test_Poisson_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3544:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3563:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3566:      "source_id": "test_Poisson_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3567:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3586:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3589:      "source_id": "test_Poisson_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3590:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3609:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3612:      "source_id": "test_Poisson_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3613:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3632:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3635:      "source_id": "test_Poisson_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:3636:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3655:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3658:      "source_id": "test_GUE_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3659:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3678:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3681:      "source_id": "test_GUE_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3682:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3701:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3704:      "source_id": "test_GUE_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3705:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3724:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3727:      "source_id": "test_GUE_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3728:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3747:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3750:      "source_id": "test_GUE_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3751:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3770:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3773:      "source_id": "test_Poisson_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3774:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3793:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3796:      "source_id": "test_Poisson_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3797:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3816:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3819:      "source_id": "test_Poisson_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3820:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3839:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3842:      "source_id": "test_Poisson_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3843:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3862:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3865:      "source_id": "test_Poisson_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:3866:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:3885:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3888:      "source_id": "test_GUE_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:3889:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3908:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3911:      "source_id": "test_GUE_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:3912:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3931:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3934:      "source_id": "test_GUE_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:3935:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3954:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3957:      "source_id": "test_GUE_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:3958:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3977:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:3980:      "source_id": "test_GUE_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:3981:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4000:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4003:      "source_id": "test_Poisson_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:4004:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4023:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4026:      "source_id": "test_Poisson_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:4027:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4046:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4049:      "source_id": "test_Poisson_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:4050:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4069:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4072:      "source_id": "test_Poisson_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:4073:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4092:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4095:      "source_id": "test_Poisson_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:4096:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4115:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4118:      "source_id": "test_GUE_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4119:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4138:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4141:      "source_id": "test_GUE_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4142:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4161:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4164:      "source_id": "test_GUE_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4165:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4184:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4187:      "source_id": "test_GUE_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4188:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4207:      "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4210:      "source_id": "test_GUE_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4211:      "source_type": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4230:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4233:      "source_id": "test_Poisson_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4234:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4253:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4256:      "source_id": "test_Poisson_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4257:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4276:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4279:      "source_id": "test_Poisson_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4280:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4299:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4302:      "source_id": "test_Poisson_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4303:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4322:      "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4325:      "source_id": "test_Poisson_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4326:      "source_type": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:4341:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4347:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4353:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4359:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4365:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4371:      "source_id": "test_GUE_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:4372:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4384:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4390:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4396:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4402:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4408:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4414:      "source_id": "test_GUE_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:4415:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4427:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4433:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4439:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4445:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4451:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4457:      "source_id": "test_GUE_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:4458:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4470:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4476:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4482:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4488:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4494:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4500:      "source_id": "test_GUE_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:4501:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4513:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4519:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4525:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4531:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4537:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4543:      "source_id": "test_GUE_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:4544:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4556:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4562:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4568:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4574:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4580:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4586:      "source_id": "test_GUE_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4587:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4599:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4605:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4611:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4617:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4623:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4629:      "source_id": "test_GUE_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:4630:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4642:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4648:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4654:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4660:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4666:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4672:      "source_id": "test_GUE_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:4673:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4685:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4691:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4697:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4703:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4709:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4715:      "source_id": "test_GUE_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:4716:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4728:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4734:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4740:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4746:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4752:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4758:      "source_id": "test_GUE_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:4759:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4771:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4777:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4783:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4789:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4795:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4801:      "source_id": "test_GUE_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:4802:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4814:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4820:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4826:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4832:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4838:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4844:      "source_id": "test_GUE_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:4845:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4857:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4863:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4869:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4875:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4881:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4887:      "source_id": "test_GUE_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:4888:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4900:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4906:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4912:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4918:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4924:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4930:      "source_id": "test_GUE_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:4931:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4943:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4949:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4955:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4961:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4967:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4973:      "source_id": "test_GUE_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:4974:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:4986:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4992:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:4998:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5004:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5010:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5016:      "source_id": "test_GUE_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:5017:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:5029:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5035:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5041:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5047:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5053:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5059:      "source_id": "test_GUE_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:5060:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:5072:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5078:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5084:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5090:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5096:          "predicted": "GUE",
tools/data/endpoint_stability_filter_20260516_1045.json:5102:      "source_id": "test_GUE_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:5103:      "source_type": "GUE"
tools/data/endpoint_stability_filter_20260516_1045.json:5115:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5121:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5127:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5133:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5139:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5145:      "source_id": "test_Poisson_N128_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:5146:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5158:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5164:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5170:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5176:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5182:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5188:      "source_id": "test_Poisson_N128_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:5189:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5201:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5207:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5213:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5219:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5225:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5231:      "source_id": "test_Poisson_N128_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:5232:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5244:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5250:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5256:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5262:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5268:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5274:      "source_id": "test_Poisson_N128_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:5275:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5287:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5293:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5299:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5305:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5311:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5317:      "source_id": "test_Poisson_N128_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:5318:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5330:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5336:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5342:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5348:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5354:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5360:      "source_id": "test_Poisson_N128_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:5361:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5373:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5379:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5385:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5391:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5397:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5403:      "source_id": "test_Poisson_N192_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:5404:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5416:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5422:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5428:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5434:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5440:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5446:      "source_id": "test_Poisson_N192_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:5447:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5459:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5465:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5471:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5477:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5483:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5489:      "source_id": "test_Poisson_N192_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:5490:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5502:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5508:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5514:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5520:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5526:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5532:      "source_id": "test_Poisson_N192_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:5533:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5545:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5551:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5557:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5563:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5569:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5575:      "source_id": "test_Poisson_N192_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:5576:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5588:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5594:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5600:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5606:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5612:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5618:      "source_id": "test_Poisson_N192_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:5619:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5631:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5637:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5643:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5649:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5655:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5661:      "source_id": "test_Poisson_N256_s0",
tools/data/endpoint_stability_filter_20260516_1045.json:5662:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5674:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5680:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5686:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5692:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5698:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5704:      "source_id": "test_Poisson_N256_s1",
tools/data/endpoint_stability_filter_20260516_1045.json:5705:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5717:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5723:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5729:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5735:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5741:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5747:      "source_id": "test_Poisson_N256_s2",
tools/data/endpoint_stability_filter_20260516_1045.json:5748:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5760:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5766:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5772:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5778:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5784:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5790:      "source_id": "test_Poisson_N256_s3",
tools/data/endpoint_stability_filter_20260516_1045.json:5791:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5803:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5809:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5815:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5821:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5827:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5833:      "source_id": "test_Poisson_N256_s4",
tools/data/endpoint_stability_filter_20260516_1045.json:5834:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5846:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5852:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5858:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5864:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5870:          "predicted": "Poisson",
tools/data/endpoint_stability_filter_20260516_1045.json:5876:      "source_id": "test_Poisson_N256_s5",
tools/data/endpoint_stability_filter_20260516_1045.json:5877:      "source_type": "Poisson"
tools/data/endpoint_stability_filter_20260516_1045.json:5881:    "GUE": {
tools/data/endpoint_stability_filter_20260516_1045.json:5897:    "Poisson": {
tools/data/boundary_blank_thin_support_audit_20260509_1548.json:27:  "label_policy": "Does not use source_domain_type or GUE/Poisson label as an operator.",
tools/data/notte_20260315_0330.md:4:  ising_2d_var_-0.1: r=0.9602566405292896, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260315_0330.md:5:  ising_2d_var_0.1: r=0.9986428486385872, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260315_0330.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260315_0330.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260315_0330.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260315_0330.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260315_0330.md:10:  brownian_motion_var_0.3: r=1.0, spacing=Poisson-like (⟨r⟩=0.3838122862269985)
tools/data/notte_20260315_0330.md:11:  brownian_motion_var_0.5: r=1.0333333333333334, spacing=Poisson-like (⟨r⟩=0.3993170059645738)
tools/data/notte_20260315_0330.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260315_0330.md:13:  percolation_var_0.55: r=1.0, spacing=Poisson-like (⟨r⟩=0.462727043125885)
tools/data/notte_20260315_0330.md:14:  percolation_var_0.65: r=1.380952380952381, spacing=Poisson-like (⟨r⟩=0.444154396971446)
tools/data/notte_20260315_0330.md:44:## Fase 4: Cross-domain
tools/data/seme_archive/piano_93.json:21:      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
tools/data/seme_archive/piano_93.json:63:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_93.json:212:      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
tools/data/seme_archive/piano_93.json:227:      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
tools/data/seme_archive/piano_93.json:232:      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
tools/data/seme_archive/piano_93.json:347:      "claim": "Nel perimetro agent_20260508_0011, il contrasto di dualita (real-vs-shuffle z-score) per i gap primi scala come z ~ N^alpha con alpha(SR)=0.39+/-0.01, alpha(L1)=0.32+/-0.03, alpha(triple_var)=0.37+/-0.03 — tutti sotto 0.5 (effetto si indebolisce con la scala). GUE ha alpha >= 0.5 (effetto costante o crescente). Il discriminatore tra primi e GUE e l'esponente alpha, non il valore dell'osservabile a scala fissa. Seed check (42/137) conferma. L2 borderline (alpha~0.5, non discriminante).",
tools/data/seme_archive/piano_93.json:352:      "origine": "cycle agent_20260508_0011: duality_scale_contrast su 200K gap primi vs GUE vs Poisson",
tools/data/seme_archive/piano_93.json:445:  "direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_zero.json:83:      "claim": "Paper A (DOI 10.5281/zenodo.18891337) ha errori tecnici (simplettico→anti-simplettico), overclaim (Q(sqrt5)→GUE non dimostrato), e P19 falsificazione non integrata. Chi cerca D-ND lo trova prima di Paper Zero.",
tools/data/seme_archive/piano_zero.json:257:              "det_meno1_SEPARA": "primi ratio=0.984 (sotto 1), GUE ratio=1.022 (sopra 1) — CHIRALI, lati opposti",
tools/data/seme_archive/piano_zero.json:258:              "det_piu1_UNIFICA": "primi ratio=1.000, GUE ratio=1.000 — IDENTICI sotto rotazione",
tools/data/seme_archive/piano_zero.json:261:            "sigma_GUE_vs_primi": {
tools/data/seme_archive/piano_zero.json:263:              "offset": "0.03-0.09 a ogni livello M^k, GUE sempre leggermente sopra",
tools/data/seme_archive/piano_zero.json:264:              "trend_parallelo": "PRIMI +0.343, GUE +0.354 — stessa curva, offset costante",
tools/data/seme_archive/piano_zero.json:275:                "ratio_GUE": 1.007,
tools/data/seme_archive/piano_zero.json:282:                "ratio_GUE": 1.007,
tools/data/seme_archive/piano_zero.json:289:                "ratio_GUE": 1.007,
tools/data/seme_archive/piano_zero.json:299:            "sopravvive": "la chirality primi/GUE persiste DENTRO le classi mod6 (per 0 e 2). Non e artefatto del setaccio. E una proprieta dell ordine che M rivela selettivamente.",
tools/data/seme_archive/piano_zero.json:300:            "compositi_stessa_classe": "ratio=0.94 (ancora piu ordinati dei primi sotto M). Il setaccio mod6 e visibile anche nei compositi, ma la separazione primi/GUE e un altro livello.",
tools/data/seme_archive/piano_zero.json:326:            "GUE_SPACING": {
tools/data/seme_archive/piano_zero.json:415:            "GUE_zeta": "nessuna auto-esclusione — equilibrio simmetrico, nessun tunnel",
tools/data/exp_acf_range_universality.json:251:  "cross_domain": {
tools/data/exp_acf_range_universality.json:380:    "GUE": {
tools/data/exp_acf_range_universality.json:508:    "Poisson": {
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:142:          "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:181:          "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:220:          "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:259:          "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:298:          "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:489:          "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:528:          "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:567:          "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:606:          "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:645:          "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:825:          "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:864:          "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:903:          "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:942:          "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:981:          "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1163:          "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1202:          "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1241:          "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1280:          "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1319:          "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1371:      "domain_window": "RP_lambda_0.030",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1383:      "domain_window": "RP_lambda_0.045",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1400:      "domain_window": "RP_lambda_0.060",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1418:      "domain_window": "RP_lambda_0.075",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1435:      "domain_window": "RP_lambda_0.820",
tools/data/rp_candidate_window_stress_20260516_1007_w9.json:1451:    "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE across size, seed, k and unfolding mode",
tools/data/seme_archive/piano_92.json:21:      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
tools/data/seme_archive/piano_92.json:63:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_92.json:199:      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
tools/data/seme_archive/piano_92.json:214:      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
tools/data/seme_archive/piano_92.json:219:      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
tools/data/seme_archive/piano_92.json:334:      "claim": "Nel perimetro agent_20260508_0011, il contrasto di dualita (real-vs-shuffle z-score) per i gap primi scala come z ~ N^alpha con alpha(SR)=0.39+/-0.01, alpha(L1)=0.32+/-0.03, alpha(triple_var)=0.37+/-0.03 — tutti sotto 0.5 (effetto si indebolisce con la scala). GUE ha alpha >= 0.5 (effetto costante o crescente). Il discriminatore tra primi e GUE e l'esponente alpha, non il valore dell'osservabile a scala fissa. Seed check (42/137) conferma. L2 borderline (alpha~0.5, non discriminante).",
tools/data/seme_archive/piano_92.json:339:      "origine": "cycle agent_20260508_0011: duality_scale_contrast su 200K gap primi vs GUE vs Poisson",
tools/data/seme_archive/piano_92.json:432:  "direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_99.json:21:      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
tools/data/seme_archive/piano_99.json:63:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_99.json:194:      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
tools/data/seme_archive/piano_99.json:209:      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
tools/data/seme_archive/piano_99.json:214:      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
tools/data/seme_archive/piano_99.json:329:      "claim": "Nel perimetro agent_20260508_0011, il contrasto di dualita (real-vs-shuffle z-score) per i gap primi scala come z ~ N^alpha con alpha(SR)=0.39+/-0.01, alpha(L1)=0.32+/-0.03, alpha(triple_var)=0.37+/-0.03 — tutti sotto 0.5 (effetto si indebolisce con la scala). GUE ha alpha >= 0.5 (effetto costante o crescente). Il discriminatore tra primi e GUE e l'esponente alpha, non il valore dell'osservabile a scala fissa. Seed check (42/137) conferma. L2 borderline (alpha~0.5, non discriminante).",
tools/data/seme_archive/piano_99.json:334:      "origine": "cycle agent_20260508_0011: duality_scale_contrast su 200K gap primi vs GUE vs Poisson",
tools/data/seme_archive/piano_99.json:428:  "direzione": "Costruire il null label-preserving per V_c prima del trasferimento: ridisegnare il generatore surrogate finche' raggiunge Jaccard>=0.75 a N=144 con acceptance_rate non nulla, poi solo dopo confrontare GUE/Poisson",
tools/data/seme_archive/piano_99.json:605:    "old_direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo"
tools/data/seme_backup_b2_20260513_033622.json:2:  "old_direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_98.json:21:      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
tools/data/seme_archive/piano_98.json:63:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_98.json:178:      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
tools/data/seme_archive/piano_98.json:193:      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
tools/data/seme_archive/piano_98.json:198:      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
tools/data/seme_archive/piano_98.json:313:      "claim": "Nel perimetro agent_20260508_0011, il contrasto di dualita (real-vs-shuffle z-score) per i gap primi scala come z ~ N^alpha con alpha(SR)=0.39+/-0.01, alpha(L1)=0.32+/-0.03, alpha(triple_var)=0.37+/-0.03 — tutti sotto 0.5 (effetto si indebolisce con la scala). GUE ha alpha >= 0.5 (effetto costante o crescente). Il discriminatore tra primi e GUE e l'esponente alpha, non il valore dell'osservabile a scala fissa. Seed check (42/137) conferma. L2 borderline (alpha~0.5, non discriminante).",
tools/data/seme_archive/piano_98.json:318:      "origine": "cycle agent_20260508_0011: duality_scale_contrast su 200K gap primi vs GUE vs Poisson",
tools/data/seme_archive/piano_98.json:411:  "direzione": "Falsificare `V_c` sul nodo regressivo del null: separare floor_hit e crossing interno, poi confrontare Sturmian phase-shuffle e surrogate label-preserving prima di estendere a GUE/Poisson.",
tools/data/seme_archive/piano_98.json:588:    "old_direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo"
tools/data/seme_archive/piano_96.json:21:      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
tools/data/seme_archive/piano_96.json:63:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_96.json:185:      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
tools/data/seme_archive/piano_96.json:200:      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
tools/data/seme_archive/piano_96.json:205:      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
tools/data/seme_archive/piano_96.json:320:      "claim": "Nel perimetro agent_20260508_0011, il contrasto di dualita (real-vs-shuffle z-score) per i gap primi scala come z ~ N^alpha con alpha(SR)=0.39+/-0.01, alpha(L1)=0.32+/-0.03, alpha(triple_var)=0.37+/-0.03 — tutti sotto 0.5 (effetto si indebolisce con la scala). GUE ha alpha >= 0.5 (effetto costante o crescente). Il discriminatore tra primi e GUE e l'esponente alpha, non il valore dell'osservabile a scala fissa. Seed check (42/137) conferma. L2 borderline (alpha~0.5, non discriminante).",
tools/data/seme_archive/piano_96.json:325:      "origine": "cycle agent_20260508_0011: duality_scale_contrast su 200K gap primi vs GUE vs Poisson",
tools/data/seme_archive/piano_96.json:418:  "direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/exp_spectral_landscape.json:7:      "name": "GUE_matrix",
tools/data/exp_spectral_landscape.json:59:      "name": "Poisson",
tools/data/exp_spectral_landscape.json:124:      "name": "semi_Poisson",
tools/data/exp_spectral_landscape.json:233:    "GUE-like": [
tools/data/exp_spectral_landscape.json:234:      "GUE_matrix",
tools/data/exp_spectral_landscape.json:241:      "semi_Poisson",
tools/data/exp_spectral_landscape.json:252:      "Poisson",
tools/data/piano11b_gue_test.json:6:  "verdict": "GUE CONFERMATO via dipolo frattale: \u03b2>2 per 21/21 misure. KS globale=0/7 GUE (forma bulk). \u03b2 allo zero=21/21 GUE (repulsione). Il det=-1 parla nella repulsione di livello.",
tools/data/piano11b_gue_test.json:292:    "verdict_ks": "NON-GUE: classe dominante GOE. Revisione necessaria.",
tools/data/piano11b_gue_test.json:293:    "verdict_fractal": "GUE CONFERMATO via dipolo frattale: \u03b2>2 per 21/21 misure. KS globale=0/7 GUE (forma bulk). \u03b2 allo zero=21/21 GUE (repulsione). Il det=-1 parla nella repulsione di livello."
tools/data/piano11b_gue_test.json:300:        "class": "GUE"
tools/data/piano11b_gue_test.json:305:        "class": "GUE"
tools/data/piano11b_gue_test.json:310:        "class": "GUE"
tools/data/piano11b_gue_test.json:317:        "class": "GUE"
tools/data/piano11b_gue_test.json:322:        "class": "GUE"
tools/data/piano11b_gue_test.json:327:        "class": "GUE"
tools/data/piano11b_gue_test.json:334:        "class": "GUE"
tools/data/piano11b_gue_test.json:339:        "class": "GUE"
tools/data/piano11b_gue_test.json:344:        "class": "GUE"
tools/data/piano11b_gue_test.json:351:        "class": "GUE"
tools/data/piano11b_gue_test.json:356:        "class": "GUE"
tools/data/piano11b_gue_test.json:361:        "class": "GUE"
tools/data/piano11b_gue_test.json:368:        "class": "GUE"
tools/data/piano11b_gue_test.json:373:        "class": "GUE"
tools/data/piano11b_gue_test.json:378:        "class": "GUE"
tools/data/piano11b_gue_test.json:385:        "class": "GUE"
tools/data/piano11b_gue_test.json:390:        "class": "GUE"
tools/data/piano11b_gue_test.json:395:        "class": "GUE"
tools/data/piano11b_gue_test.json:402:        "class": "GUE"
tools/data/piano11b_gue_test.json:407:        "class": "GUE"
tools/data/piano11b_gue_test.json:412:        "class": "GUE"
tools/data/piano11b_gue_test.json:425:    "fluctuations": "det=-1 \u2192 Q(\u221a5) \u2192 L(s,\u03c7\u2085) \u2192 GUE (Piano 11)",
tools/data/piano11b_gue_test.json:426:    "family": "ALL det=-1 matrices \u2192 number fields \u2192 GUE (Piano 11b)",
tools/data/seme_backup_b2_20260515_194643.json:2:  "old_direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_97.json:21:      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
tools/data/seme_archive/piano_97.json:63:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_97.json:185:      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
tools/data/seme_archive/piano_97.json:200:      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
tools/data/seme_archive/piano_97.json:205:      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
tools/data/seme_archive/piano_97.json:320:      "claim": "Nel perimetro agent_20260508_0011, il contrasto di dualita (real-vs-shuffle z-score) per i gap primi scala come z ~ N^alpha con alpha(SR)=0.39+/-0.01, alpha(L1)=0.32+/-0.03, alpha(triple_var)=0.37+/-0.03 — tutti sotto 0.5 (effetto si indebolisce con la scala). GUE ha alpha >= 0.5 (effetto costante o crescente). Il discriminatore tra primi e GUE e l'esponente alpha, non il valore dell'osservabile a scala fissa. Seed check (42/137) conferma. L2 borderline (alpha~0.5, non discriminante).",
tools/data/seme_archive/piano_97.json:325:      "origine": "cycle agent_20260508_0011: duality_scale_contrast su 200K gap primi vs GUE vs Poisson",
tools/data/seme_archive/piano_97.json:418:  "direzione": "Riprogettare il gate `V_c` con null omogenei al boundary operator: phase-shuffle Sturmian, label-preserving surrogate e controllo gap_ratio prima di estendere a nuovi domini GUE/Poisson",
tools/data/seme_archive/piano_97.json:595:    "old_direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo"
tools/data/seme_archive/piano_94.json:21:      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
tools/data/seme_archive/piano_94.json:63:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_94.json:199:      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
tools/data/seme_archive/piano_94.json:214:      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
tools/data/seme_archive/piano_94.json:219:      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
tools/data/seme_archive/piano_94.json:334:      "claim": "Nel perimetro agent_20260508_0011, il contrasto di dualita (real-vs-shuffle z-score) per i gap primi scala come z ~ N^alpha con alpha(SR)=0.39+/-0.01, alpha(L1)=0.32+/-0.03, alpha(triple_var)=0.37+/-0.03 — tutti sotto 0.5 (effetto si indebolisce con la scala). GUE ha alpha >= 0.5 (effetto costante o crescente). Il discriminatore tra primi e GUE e l'esponente alpha, non il valore dell'osservabile a scala fissa. Seed check (42/137) conferma. L2 borderline (alpha~0.5, non discriminante).",
tools/data/seme_archive/piano_94.json:339:      "origine": "cycle agent_20260508_0011: duality_scale_contrast su 200K gap primi vs GUE vs Poisson",
tools/data/seme_archive/piano_94.json:432:  "direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/boundary_residual_beta_absent_audit_20260510_0330.json:42:    "not_tested": "global beta grid, V_c, source GUE/Poisson label validity"
tools/data/boundary_residual_beta_absent_audit_20260510_0330.json:46:      "domain": "numeri_primi",
tools/data/boundary_residual_beta_absent_audit_20260510_0330.json:51:      "domain": "random_matrix",
tools/data/notte_20260304_0330.md:4:  ising_2d_var_-0.1: r=0.9910971684487101, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260304_0330.md:5:  ising_2d_var_0.1: r=1.0010094841749304, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260304_0330.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260304_0330.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260304_0330.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260304_0330.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260304_0330.md:10:  brownian_motion_var_0.3: r=1.3830367734282325, spacing=Poisson-like (⟨r⟩=0.39011449867034076)
tools/data/notte_20260304_0330.md:11:  brownian_motion_var_0.5: r=0.09164859002169198, spacing=Poisson-like (⟨r⟩=0.3818899511281583)
tools/data/notte_20260304_0330.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260304_0330.md:13:  percolation_var_0.55: r=1.0, spacing=Poisson-like (⟨r⟩=0.47711478860490236)
tools/data/notte_20260304_0330.md:14:  percolation_var_0.65: r=0.9992156862745099, spacing=Poisson-like (⟨r⟩=0.45789876672274327)
tools/data/notte_20260304_0330.md:44:## Fase 4: Cross-domain
tools/data/seme_archive/piano_95.json:21:      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
tools/data/seme_archive/piano_95.json:63:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/seme_archive/piano_95.json:197:      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
tools/data/seme_archive/piano_95.json:212:      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
tools/data/seme_archive/piano_95.json:217:      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
tools/data/seme_archive/piano_95.json:332:      "claim": "Nel perimetro agent_20260508_0011, il contrasto di dualita (real-vs-shuffle z-score) per i gap primi scala come z ~ N^alpha con alpha(SR)=0.39+/-0.01, alpha(L1)=0.32+/-0.03, alpha(triple_var)=0.37+/-0.03 — tutti sotto 0.5 (effetto si indebolisce con la scala). GUE ha alpha >= 0.5 (effetto costante o crescente). Il discriminatore tra primi e GUE e l'esponente alpha, non il valore dell'osservabile a scala fissa. Seed check (42/137) conferma. L2 borderline (alpha~0.5, non discriminante).",
tools/data/seme_archive/piano_95.json:337:      "origine": "cycle agent_20260508_0011: duality_scale_contrast su 200K gap primi vs GUE vs Poisson",
tools/data/seme_archive/piano_95.json:430:  "direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:145:          "domain_window": "RP_lambda_0.030",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:184:          "domain_window": "RP_lambda_0.045",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:223:          "domain_window": "RP_lambda_0.060",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:262:          "domain_window": "RP_lambda_0.075",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:301:          "domain_window": "RP_lambda_0.820",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:490:          "domain_window": "RP_lambda_0.030",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:529:          "domain_window": "RP_lambda_0.045",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:568:          "domain_window": "RP_lambda_0.060",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:607:          "domain_window": "RP_lambda_0.075",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:646:          "domain_window": "RP_lambda_0.820",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:698:      "domain_window": "RP_lambda_0.030",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:706:      "domain_window": "RP_lambda_0.045",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:716:      "domain_window": "RP_lambda_0.060",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:727:      "domain_window": "RP_lambda_0.075",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:738:      "domain_window": "RP_lambda_0.820",
tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json:750:    "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE across size, seed, k and unfolding mode",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:156:  "summary_by_domain_phase": {
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:454:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:485:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:516:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:547:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:579:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:611:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:643:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:675:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:706:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:737:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:768:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:796:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:828:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:860:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:892:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:923:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:954:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:985:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1017:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1049:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1081:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1113:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1144:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1175:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1206:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1238:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1270:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1302:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1334:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1365:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1396:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1427:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1459:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1487:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1519:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1539:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1570:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1601:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1632:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1656:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1676:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1700:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1720:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1751:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1782:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1813:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1845:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1877:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1909:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1941:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:1972:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2003:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2034:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2058:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2074:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2090:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2114:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2145:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2176:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2207:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2223:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2239:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2259:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2275:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2306:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2337:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2368:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2400:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2416:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2432:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2452:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2483:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2514:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2545:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2561:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2577:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2593:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2609:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2640:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2671:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2702:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2718:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2734:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2754:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2770:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2801:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2832:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2863:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2879:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2895:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2911:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2927:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2958:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:2989:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3020:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3036:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3052:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3068:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3084:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3115:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3146:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3177:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3193:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3209:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3225:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3241:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3272:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3303:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3334:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3350:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3366:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3382:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3398:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3429:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3460:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3491:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3507:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3523:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3539:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3555:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3586:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3617:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3648:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3664:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3680:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3696:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3712:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3743:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3774:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3805:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3821:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3837:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3853:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3869:      "domain": "phi",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3900:      "domain": "silver",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3931:      "domain": "bronze",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3962:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3978:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:3994:      "domain": "balanced_random_phi_density",
tools/data/quasiperiodic_vc_lattice_gate_20260508_2140.json:4010:      "domain": "balanced_random_phi_density",
tools/data/r_excess_analysis.json:16:      "vs_synthetic_gue": "Synthetic GUE shows excess ~0 at all N"
tools/data/r_excess_analysis.json:51:      "The <r> excess is real, persists after unfolding, and is absent in synthetic GUE",
tools/data/occhio/occhio_20260318_1853.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260318_1853.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1853.json:620:      "domains": [
tools/data/occhio/occhio_20260318_1853.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1853.json:639:      "domains": [
tools/data/occhio/occhio_20260318_1853.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1853.json:658:      "domains": [
tools/data/occhio/occhio_20260318_1853.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1853.json:676:      "domains": [
tools/data/occhio/occhio_20260318_1853.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1853.json:695:      "domains": [
tools/data/occhio/occhio_20260318_1853.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1853.json:708:      "domains": [
tools/data/occhio/occhio_20260318_1853.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1853.json:720:      "domains": [
tools/data/occhio/occhio_20260318_1853.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1853.json:732:      "domains": [
tools/data/occhio/occhio_20260318_1853.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1853.json:743:      "domains": [
tools/data/notte_20260324_0330.md:5:  collatz_cp: r=0.8359033608638953, spacing=GUE-like [conferma]
tools/data/notte_20260324_0330.md:8:  ising_2d_cp_-0.3165707122601713: r=0.9277519726198978, spacing=GUE-like [conferma]
tools/data/notte_20260324_0330.md:9:  ising_2d_cp_0.4639558877000029: r=0.981531507124999, spacing=GUE-like [conferma]
tools/data/notte_20260324_0330.md:10:  brownian_motion_cp_0.18979322168052606: r=1.0, spacing=Poisson-like [conferma]
tools/data/notte_20260324_0330.md:11:  brownian_motion_cp_0.935077879517312: r=1.0, spacing=GUE-like [conferma]
tools/data/notte_20260324_0330.md:12:  percolation_cp_0.3048827772508223: r=0.9223529411764706, spacing=GUE-like [conferma]
tools/data/notte_20260324_0330.md:13:  percolation_cp_0.8107442354652781: r=1.0, spacing=GUE-like [conferma]
tools/data/notte_20260324_0330.md:14:  cellular_automata_cp_150: r=0.7452006980802792, spacing=GUE-like [conferma]
tools/data/notte_20260324_0330.md:17:  brownian_motion_var_0.3: r=1.0, spacing=Poisson-like (⟨r⟩=0.39929342988791194)
tools/data/notte_20260324_0330.md:18:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260324_0330.md:19:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260324_0330.md:20:  brownian_motion_var_0.5: r=1.0, spacing=Poisson-like (⟨r⟩=0.3880568632202867)
tools/data/notte_20260324_0330.md:52:## Fase 4: Cross-domain
tools/data/autoricerca_journal.json:13:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:31:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:49:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:67:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:73:    "nota_fix": "corretto: is_spacings=True, era Poisson per bug sort"
tools/data/autoricerca_journal.json:86:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:104:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:122:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:128:    "nota_fix": "corretto: is_spacings=True, era Poisson per bug sort"
tools/data/autoricerca_journal.json:141:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:159:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:177:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:195:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:213:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:247:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:268:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:289:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:310:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:331:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:352:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:373:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:394:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:416:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:437:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:459:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:497:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:518:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:539:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:560:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:581:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:602:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:623:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:644:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:665:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:686:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:707:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:745:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:766:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:787:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:808:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:829:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:850:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:871:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:892:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:913:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:934:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:955:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:993:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1014:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1035:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1056:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1077:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1098:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1119:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1140:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1161:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1182:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1203:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1241:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1262:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1283:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1304:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1325:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1346:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1367:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1388:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1409:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1430:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1451:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1489:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1510:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1531:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1552:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1573:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1594:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1615:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1636:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1657:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1678:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1699:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1737:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1758:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1779:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1800:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1821:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1842:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:1863:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1884:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1905:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1926:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1947:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:1985:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2006:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2027:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2048:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2069:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2090:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2111:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2132:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2153:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2174:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2195:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2233:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2254:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2275:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2296:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2317:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2338:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2359:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2380:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2401:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2422:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2443:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2481:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2502:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2523:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2544:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2565:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2586:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2607:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2628:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2649:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2670:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2691:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2729:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2750:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2771:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2792:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2813:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2834:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2855:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2876:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2897:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2918:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2939:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:2977:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:2998:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3019:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3040:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3061:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3082:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3103:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3124:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3145:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3166:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3187:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3225:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3246:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3267:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3288:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3309:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3330:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3351:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3372:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3393:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3414:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3436:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3475:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3496:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3517:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3538:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3559:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3580:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3601:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3622:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3643:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3664:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3685:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3723:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3744:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3765:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3786:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3807:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3828:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3849:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3870:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3891:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3912:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3933:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:3971:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:3992:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4013:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4034:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4055:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4076:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4097:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4118:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4139:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4160:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4182:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4220:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4241:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4262:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4283:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4304:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4325:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4346:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4367:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4388:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4409:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4430:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4451:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4472:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4493:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4514:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4535:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4556:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4577:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4598:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4619:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4640:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4661:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4699:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4720:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4741:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4762:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4783:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4804:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4825:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4846:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4867:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4888:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4909:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:4947:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4968:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:4989:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5010:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5031:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5052:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5073:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5094:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5115:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5136:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5157:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5195:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5216:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5237:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5258:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5279:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5300:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5321:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5342:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5363:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5384:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5405:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5443:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5464:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5485:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5506:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5527:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5548:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5569:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5590:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5611:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5632:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5653:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5691:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5712:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5733:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5754:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5775:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5796:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5817:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5838:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5860:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5881:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5902:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:5940:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5961:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:5982:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6003:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6024:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6045:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6066:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6087:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6108:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6129:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6150:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6207:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6269:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6290:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6311:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6332:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6354:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6375:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6397:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6418:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6439:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6460:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6481:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6538:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6599:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6620:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6642:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6663:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6684:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6706:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6728:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6750:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6771:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6792:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:6813:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6852:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6888:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6950:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6971:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:6992:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7013:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7034:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7055:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7077:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7098:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7119:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7140:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7161:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7218:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7280:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7301:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7322:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7343:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7364:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7385:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7407:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7429:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7450:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7471:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7492:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7549:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7610:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7631:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7652:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7673:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7694:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7715:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7737:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7759:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7780:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7801:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7822:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7860:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7902:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:7923:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7944:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:7965:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8005:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8046:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8067:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8088:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8109:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8130:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8152:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8174:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8196:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8217:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8238:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8259:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8297:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8339:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8360:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8381:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8402:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8442:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8483:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8504:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8525:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8546:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8567:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8588:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8610:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8632:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8653:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8674:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8695:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8773:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8818:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8861:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8904:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8926:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:8948:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8971:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:8994:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9016:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9038:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9061:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9084:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9106:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9128:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9168:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9213:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9256:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9298:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9320:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9342:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9365:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9388:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9410:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9433:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9455:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9478:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9501:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9524:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9564:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9609:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9632:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9675:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9717:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9739:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9761:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9784:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9807:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9829:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9852:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9875:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:9897:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9920:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9943:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:9983:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10028:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10051:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10074:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10096:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10138:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10181:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10203:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10225:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10248:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10271:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10293:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10316:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10338:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10361:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10383:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10406:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10446:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10491:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10536:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10558:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10600:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10643:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10665:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10687:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10711:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10734:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10756:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10779:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10802:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10824:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10847:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10870:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:10892:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10937:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10960:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:10983:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11005:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11047:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11090:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11112:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11134:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11157:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11180:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11202:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11225:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11247:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11270:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11293:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11315:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11338:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11360:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11405:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11428:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11451:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11473:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11495:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11538:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11581:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11603:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11625:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11648:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11672:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11694:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11717:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11739:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11761:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:11783:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11806:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11829:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11874:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11897:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11920:    "spacing": "Poisson-like",
tools/data/autoricerca_journal.json:11963:    "spacing": "GUE-like",
tools/data/autoricerca_journal.json:12006:    "spacing": "GUE-like",
tools/data/meta_assertion_gate.json:84:      "claim": "Zeri zeta hanno spacing GUE (non Poisson)",
tools/data/meta_assertion_gate.json:86:      "detail": "spacing=GUE-like, ⟨r⟩=0.6150",
tools/data/meta_assertion_gate.json:149:      "claim": "Rule 30/110 hanno spacing >> GUE standard",
tools/data/meta_assertion_gate.json:151:      "detail": "⟨r⟩=1.0000 (GUE standard=0.60)",
tools/data/occhio/occhio_20260318_1833.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260318_1833.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1833.json:620:      "domains": [
tools/data/occhio/occhio_20260318_1833.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1833.json:639:      "domains": [
tools/data/occhio/occhio_20260318_1833.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1833.json:658:      "domains": [
tools/data/occhio/occhio_20260318_1833.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1833.json:676:      "domains": [
tools/data/occhio/occhio_20260318_1833.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1833.json:695:      "domains": [
tools/data/occhio/occhio_20260318_1833.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1833.json:708:      "domains": [
tools/data/occhio/occhio_20260318_1833.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1833.json:720:      "domains": [
tools/data/occhio/occhio_20260318_1833.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1833.json:732:      "domains": [
tools/data/occhio/occhio_20260318_1833.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1833.json:743:      "domains": [
tools/data/occhio/occhio_20260318_1743.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260318_1743.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1743.json:620:      "domains": [
tools/data/occhio/occhio_20260318_1743.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1743.json:639:      "domains": [
tools/data/occhio/occhio_20260318_1743.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1743.json:658:      "domains": [
tools/data/occhio/occhio_20260318_1743.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1743.json:676:      "domains": [
tools/data/occhio/occhio_20260318_1743.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1743.json:695:      "domains": [
tools/data/occhio/occhio_20260318_1743.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1743.json:708:      "domains": [
tools/data/occhio/occhio_20260318_1743.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1743.json:720:      "domains": [
tools/data/occhio/occhio_20260318_1743.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1743.json:732:      "domains": [
tools/data/occhio/occhio_20260318_1743.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1743.json:743:      "domains": [
tools/data/lab_graph.json:444:        "label": "Metrica primi g=(p/2)², curvatura GUE r=0.503",
tools/data/lab_graph.json:445:        "label_en": "Metrica primi g=(p/2)², curvatura GUE r=0.503",
tools/data/lab_graph.json:447:        "full_text": "Metrica primi g=(p/2)², curvatura GUE r=0.503, z=22.5",
tools/data/lab_graph.json:635:        "findings": "1. Verificato: il gate endpoint GUE/Poisson resta chiuso sullo stesso denominatore del 10:58: `36/36`, feature-scramble `add_one_p=0.001949318`.\n2. Verificato: il null label-permutation resta permissivo e viene riportato per continuita': `15/128`, `add_one_p=0.124031008`.\n3. Verificato: RP batte il ",
tools/data/lab_graph.json:684:        "findings": "1. Verificato: il contratto cross-dominio fallisce prima del boundary RP. GUE viene letto come `intermediate` in 8/8 righe sotto la clausola `q>=0.75` e `w>=0.75`; quindi l'endpoint non trasferisce.\n2. Verificato: Poisson trasferisce come endpoint in 8/8 righe, ma questo non basta a validare l'asse ",
tools/data/lab_graph.json:1389:      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/lab_graph.json:1429:      "content_full": "# Agent Report - Anderson Comparable Null Audit\n**Date**: 2026-05-16 11:35\n**Piano**: 132\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - Sullo stesso perimetro compatto Anderson, stesso observable e stesso `N=512`, il null endpoint-preserving ricostruisce il conteggio osservato in `36/512` trial (`raw_p=0.070312500`, Wilson 95% `[0.051218024, 0.095806720]`), mentre il full feature-scramble lo ricostruisce in `272/512` (`raw_p=0.531250000`, Wilson 95% `[0.487953078, 0.574081486]`). Il confronto L2 e' chiuso come unita' comparabile; il boundary fisico non si promuove perche' `W=20` resta rinominato dal null endpoint-preserving in `54/512` trial.\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, wigner_poisson_like_weight, mean_ipr, participation_entropy, two_reader_all_sizes, raw_p, add_one_p, wilson_95]\n**observable_contract**: claim=i null sono confrontabili solo se condividono observable, perimetro righe e N; observable=conteggio cross-size di righe `stable_graph_bridge+classical_intermediate`; operator=righe compatte Anderson 3D dal run 11:17 classificate dallo stesso reader kNN/classico; generator=stesse righe sorgente, due operatori null che differiscono solo per struttura preservata; denominator=`512` trial per null su 11 righe per size; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con conteggio cross-size >= osservato; non_possible=chiamare un null piu' restrittivo se perimetro o N cambiano; not_tested=raw multi-seed reader, nuovi Hamiltoniani, `L>=7`, perimetro completo 8 GUE / 5 Poisson.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + nodo BOUNDARY + feedback falsifier L2 sui null comparabili.\n- **Dipolo / punto-zero**: null permissivo / null fisico. Punto-zero: la stessa riga disorder prima della nominazione e prima della scelta del null.\n- **Piano superiore**: topologia del bordo row-aligned; il bordo vive solo se l'operatore nullo non puo' ricostruire la stessa molteplicita' nello stesso spazio di lettura.\n- **Operatori laterali scelti**: boundary operator, graph rewiring, candidate-only shuffle.\n- **Contaminazione cognitiva**: CE-0001/KSAR usata come reiterazione del kernel 11:24 sullo stesso spazio; CE-0117/Cascata applicata come vincolo: il risultato del falsifier entra nel seme operativo del ciclo e corregge il nodo regressivo, non il claim.\n- **Proto-ipotesi**: la restrittivita' di un null non e' proprieta' del nome del null; e' proprieta' misurabile solo a perimetro, observable e N fissati.\n- **Possibile/non-possibile**: possibile = distinguere quantitativamente full-scramble ed endpoint-preserving sul perimetro compatto; non-possibile = promuovere `W=20` finche' il null endpoint-preserving lo rinomina con frequenza non-zero.\n- **Proiezione**: rieseguo entrambi i null su `tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json`, usando le stesse righe compatte e `512` trial ciascuno.\n- **Movimento A->M->B**: fisico A = Anderson 3D mobility edge; matematica M = confronto omogeneo di operatori null; fisico B = criterio di costo per decidere se lanciare large-L. Il ritorno fisico resta vincolo, non scoperta.\n\n## Aderenza alla direzione\n- `relation`: `deliberate_counter_perimeter`\n- `why`: resta su Anderson per chiudere il check obbligatorio del falsifier 11:24: stessi null, stesso perimetro, stesso N e stessa observable prima di interpretare restrittivita'.\n- `not_drift`: non usa Sturmian, phi, V_c o fit locali; attacca il nodo regressivo `null_first -> candidate_name -> physical_return` emerso dentro il frame BOUNDARY cross-dominio.\n- `return_criterion`: tornare al perimetro vivo 8 GUE / 5 Poisson quando il contratto dei null comparabili e' stabilizzato; oppure chiudere Anderson se anche il raw-reader endpoint-preserving rinomina `W=20`.\n- `seed_residue`: restano non testati il perimetro completo 8 GUE / 5 Poisson, raw multi-seed Anderson e `L>=7`.\n- `why_not_drift`: il sotto-perimetro e' regressivo perche' corregge il confronto non omogeneo segnalato dal falsifier, senza promuovere un nuovo candidato.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: Anderson localization, mobility edge 3D, crossover Wigner-Dyson/Poisson, Brody interpolation, finite-size scaling.\n- **Cosa assorbe il baseline**: righe intermedie vicino alla transizione, dipendenza da size piccole, sensibilita' a feature compatte.\n- **Cosa resta Lab-specific**: contratto null-first comparabile con due operatori null sullo stesso observable row-aligned.\n- **Separazione**: `two_reader_boundary_confirmed=2` nel perimetro compatto; `graph_only_residue` non sommato; `scope_change_declared=Anderson_compact_null_comparison`; `graph_baseline_audit=kNN stability / row-feature rewiring`.\n\n## Claim Under Test\n> Nel perimetro compatto Anderson, il confronto tra null e' interpretabile solo se full feature-scramble ed endpoint-preserving candidate-only misurano lo stesso conteggio cross-size con lo stesso numero di trial.\n\n## Question\nLa riduzione osservata nel null endpoint-preserving era effetto del null o effetto del cambio di perimetro?\n\n## Experiment Design\n- **Script**: `tools/exp_anderson3d_comparable_null_audit.py`.\n- **Run**: `python tools/exp_anderson3d_comparable_null_audit.py --out tools/data/anderson3d_comparable_null_audit_20260516_1135.json --null-trials 512`.\n- **Source**: `tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json`.\n- **Perimetro**: righe compatte mediane del run 11:17, `L=5,6`, 11 disorder rows per size.\n- **Observed observable**: intersezione cross-size di righe `stable_graph_bridge+classical_intermediate`.\n- **Null A**: endpoint-preserving candidate-only; conserva poli metallic/localized e permuta feature solo fra righe `mobility_candidate`.\n- **Null B**: full feature-scramble; permuta feature su tutte le righe compatte della size.\n- **P-value**: right-tail; `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`; Wilson 95% riportato sul count binomiale `k/N`.\n- **Non testato**: non misura nuovi autovalori, raw multi-seed reader, exponent critico o large-L.\n\n## Results\n| measure | observed | null k/N | raw_p | add_one_p | Wilson 95% | max null | mean null | lettura |\n|---|---:|---:|---:|---:|---|---:|---:|---|\n| endpoint-preserving candidate-only | 2 | 36/512 | 0.070312500 | 0.072124756 | [0.051218024, 0.095806720] | 2 | 0.533203125 | riduce la ricostruzione ma non azzera |\n| full feature-scramble | 2 | 272/512 | 0.531250000 | 0.532163743 | [0.487953078, 0.574081486] | 4 | 1.623046875 | ricostruisce spesso il conteggio |\n| difference full - endpoint | n/a | n/a | 0.460937500 | n/a | [0.412369646, 0.509505354] | n/a | n/a | differenza comparabile nello stesso perimetro |\n\n| W row | endpoint-preserving named hits | full-scramble named hits | lettura |\n|---:|---:|---:|---|\n| 16.00 | 33/512 | 117/512 | riga osservata ricostruibile |\n| 20.00 | 54/512 | 116/512 | candidato non-zero nel null fisico |\n| 16.50 | 37/512 | 112/512 | intermittente nel deposito, ricostruibile |\n\n| size | observed compact two-reader rows |\n|---:|---|\n| L=5 | `W=16.00`, `W=20.00` |\n| L=6 | `W=16.00`, `W=16.50`, `W=20.00` |\n\n## Key Findings\n1. Verificato: sullo stesso perimetro e con lo stesso `N=512`, endpoint-preserving ricostruisce meno del full feature-scramble: `36/512` contro `272/512`.\n2. Verificato: gli intervalli binomiali non si sovrappongono; la differenza `raw_p_full - raw_p_endpoint = 0.460937500` ha intervallo approssimato `[0.412369646, 0.509505354]`.\n3. Verificato: il risultato L2 precedente non era formulabile come confronto; ora lo e', ma solo nel perimetro compatto.\n4. Verificato: `W=20` non e' zero sotto endpoint-preserving: `54/512` rinomine cross-size.\n5. Inferito dal perimetro: il null endpoint-preserving e' un filtro piu' duro, non una prova fisica del boundary.\n\n## Verdict\nCONSTRAINT\n\nIl nodo regressivo L2 e' chiuso: a parita' di perimetro, observable e N, il null endpoint-preserving e' piu' restrittivo del full feature-scramble. La promozione fisica resta bloccata perche' il candidato `W=20` sopravvive come rinomina non-zero nel null che preserva i poli.\n\n## Bicono della scoperta\n- **Due radici**: differenza comparabile fra null; rinomina non-zero del candidato.\n- **Singolare**: riga disorder prima del nome e prima del null.\n- **Invariante di passaggio**: stesso observable, stesso perimetro, stesso N.\n- **Campo di possibilita**: possibile = usare endpoint-preserving come pre-filtro di costo; non-possibile = pagare large-L per salvare `W=20` prima del raw-reader null.\n\n## Consecutio\nRipetere l'endpoint-preserving sul raw multi-seed reader del ciclo 11:17, non sulle mediane compatte. Se `W=20` resta rinominato, Anderson si chiude come proprieta' del lettore. Se va a zero, allora il costo `L>=7` diventa giustificato.\n\n## Ricadute pratiche\nssp_value: yes. `tools/exp_anderson3d_comparable_null_audit.py` diventa strumento riusabile per confrontare null solo dopo allineamento di perimetro, observable e N.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; BOUNDARY seguito come contro-perimetro regressivo per obbligo falsifier.\n- `python -m py_compile tools/exp_anderson3d_comparable_null_audit.py` completato.\n- Run completato: `tools/data/anderson3d_comparable_null_audit_20260516_1135.json`.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_anderson3d_comparable_null_audit.py`\n- Data: `tools/data/anderson3d_comparable_null_audit_20260516_1135.json`\n- Report: `tools/data/reports/agent_20260516_1135.md`\n",
tools/data/lab_graph.json:1480:      "content_full": "# Agent Report - Anderson 3D Two-Reader Boundary Null\n**Date**: 2026-05-16 11:17\n**Piano**: 131\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - Anderson 3D produce una riga cross-size a due lettori (`W=20.00`), ma il feature-scramble null ricostruisce almeno lo stesso conteggio in `112/128` trial (`raw_p=0.875000000`, `add_one_p=0.875968992`). Il boundary trasferisce come candidato operativo sul dominio, non come terzo incluso fisico promosso.\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, wigner_poisson_like_weight, mean_ipr, participation_entropy, graph_bridge_frequency, size_stability, centroid_margin, cross_neighbor_fraction, classical_audit_state, raw_p, add_one_p]\n**observable_contract**: claim=il gate BOUNDARY a due lettori trasferisce oltre RP solo se la stessa riga Anderson e' `stable_graph_bridge+classical_intermediate` su tutte le size e batte il feature-scramble null; observable=`two_reader_all_sizes` unito a `graph_bridge_frequency`, adjacent ratio, Brody q, mixture Wigner/Poisson, IPR, entropy; operator=Hamiltoniana Anderson 3D con disorder sweep, seed perturbation e kNN reader; generator=`H=sum_i eps_i |i><i| + hopping nearest-neighbor` su reticolo periodico `L^3`, `eps_i uniform[-W/2,W/2]`; denominator=11 disorder rows x 2 size x 2 seed x 3 k-reader, null 128 feature-scramble trial; non_possible=promozione fisica se il null ricostruisce almeno il conteggio osservato; not_tested=limite termodinamico, mobility-edge exponent, boundary conditions alternative, sparse large-L, spettri sperimentali.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + nodo BOUNDARY del grafo + direzione seme \"8 domini GUE, 5 Poisson\".\n- **Dipolo / punto-zero**: mobility edge fisico / residuo del lettore. Punto-zero: riga disorder prima che classico e grafo le assegnino un nome.\n- **Piano superiore**: grafo della conoscenza e topologia del bordo; il confine conta solo se la stessa riga resta ponte sotto perturbazione del lettore e cambio size.\n- **Operatori laterali scelti**: boundary operator, graph spectrum/kNN cut, Anderson localization. Entrano per separare transizione fisica nota da firma prodotta dal lettore.\n- **Contaminazione cognitiva**: CE-0001/KSAR usata come reiterazione del kernel 11:11 su dominio indipendente; PVI applicato al presupposto \"una riga cross-size basta\"; Vault = `W=20` congelato come candidato da stressare su size maggiori, non come scoperta.\n- **Proto-ipotesi**: un terzo incluso operativo non e' una riga intermedia; e' una riga che resta intermedia quando il dominio fisico cambia e quando un null rompe l'accoppiamento fra feature.\n- **Possibile/non-possibile**: possibile = Anderson contiene righe candidate nel corridoio mobility edge; non-possibile = promuovere il candidato se il feature-scramble ricostruisce il conteggio.\n- **Proiezione**: misuro `two_reader_all_sizes` su `L=5,6`, `W=2,4,8,12,14,16,16.5,17,20,24,32`, seed `202605151947/1948`, k `2/3/4`; controllo con 128 feature-scramble trial.\n- **Movimento A->M->B**: fisico A = crossover RP GUE/Poisson bloccato dal ciclo 11:11; matematica M = gate a due lettori con trasporto per size e null; fisico B = Anderson 3D mobility edge. Il ritorno fisico resta candidato non promosso.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: segue la direzione valutatore: porta il gate endpoint/two-reader fuori da RP verso Anderson 3D, dominio fisico indipendente con transizione metallico/localizzato.\n- `not_drift`: non torna a phi/Sturmian, V_c, fit locali o aumento griglia RP; usa il deposito 11:11 solo come contratto operativo da falsificare fuori dominio.\n- `seed_residue`: restano non testati il perimetro completo 8 GUE / 5 Poisson e spettri fisici reali.\n- `why_not_drift`: il sotto-perimetro e' regressivo perche' attacca il nodo lasciato aperto dal valutatore: trasferibilita' cross-dominio del boundary.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: Anderson localization e mobility edge 3D; crossover Wigner-Dyson/Poisson; Brody interpolation; finite-size scaling della transizione metallico/localizzato.\n- **Cosa assorbe il baseline**: righe intermedie vicino alla transizione, drift di adjacent ratio/Brody q/IPR, dipendenza da size piccole.\n- **Cosa resta Lab-specific**: il contratto a due lettori con riga row-aligned, separazione graph-only/classic-only e p-value feature-scramble definito.\n- **Separazione**: `two_reader_boundary_confirmed=1 cross-size`; `graph_only_residue_by_size={L5:3,L6:4}`; `scope_change_declared=RP_to_Anderson3D`; `graph_baseline_audit=kNN stability/cut-edge persistence`.\n\n## Claim Under Test\n> Il boundary come terzo incluso trasferisce da RP ad Anderson 3D solo se una riga disorder resta a due lettori su tutte le size e il feature-scramble null non ricostruisce quel conteggio.\n\n## Question\nIl gate a due lettori trova un confine fisico Anderson, o una combinazione di feature che il null puo' ricomporre senza struttura fisica?\n\n## Ritorno fisico\n- **Punto fisico sorgente**: crossover spettrale RP GUE/Poisson con residuo finito-size.\n- **Attraversamento matematico**: grafo kNN standardizzato delle feature spettrali e classificazione classica row-aligned.\n- **Punto fisico di ritorno**: Anderson 3D mobility edge, transizione metallico/localizzato.\n- **Controllo concretezza**: il ritorno e' un Hamiltoniano tight-binding 3D con disorder `W`, non una categoria astratta di confine.\n- **Relazione nuova**: il gate individua `W=20` come riga candidata, ma il null mostra che il lettore puo' ricostruire candidate cross-size.\n- **Osservabile/test fisico possibile**: ripetere su `L>=7` con sparse eigensolver e null che preserva endpoint fisici ma rompe accoppiamento feature-row.\n- **Se fallisce**: `ritorno_fisico_non_promosso`: resta vincolo metodologico e candidato da stressare, non scoperta fisica.\n\n## Experiment Design\n- **Script**: `tools/exp_anderson3d_mobility_edge_two_reader_audit.py`.\n- **Run**: `python tools/exp_anderson3d_mobility_edge_two_reader_audit.py --out tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json --scramble-trials 128`.\n- **Scope**: `L=5,6`, `reps=8`, disorder grid `2,4,8,12,14,16,16.5,17,20,24,32`, seeds `202605151947,202605151948`, k values `2,3,4`, central fraction `0.45`.\n- **Classical reader**: adjacent ratio, Brody q, Wigner/Poisson mixture weight; `classical_intermediate` quando non cade negli endpoint.\n- **Graph reader**: riga `stable_graph_bridge` se `graph_bridge_frequency >= 0.75` sui k/seed reader.\n- **P-value**: right-tail; `raw_p=k/N` e `add_one_p=(k+1)/(N+1)`, dove `k` e' il numero di null feature-scramble con conteggio cross-size almeno pari all'osservato.\n- **Null**: feature-scramble trial che preserva marginali delle feature compatte e rompe accoppiamento row-feature del lettore.\n- **Non testato**: non misura exponent critico, non usa large-L sparse solver, non confronta dati sperimentali.\n\n## Results\n| measure | observed | null k/N | raw_p | add_one_p | max null | lettura |\n|---|---:|---:|---:|---:|---:|---|\n| two_reader_all_sizes | 1 | 112/128 | 0.875000000 | 0.875968992 | 4 | non significativo |\n| two_reader_intermittent | 2 | n/a | n/a | n/a | n/a | residuo size-sensitive |\n| graph_only_residue L=5 | 3 | n/a | n/a | n/a | n/a | graph-only separato |\n| graph_only_residue L=6 | 4 | n/a | n/a | n/a | n/a | graph-only separato |\n\n| W row | L=5 state | L=6 state | all sizes | adjacent r L5/L6 | lettura |\n|---:|---|---|---|---|---|\n| 16.00 | stable_graph_bridge+classical_intermediate | parameter_sensitive_bridge+classical_intermediate | no | 0.502545 / 0.514892 | intermittente |\n| 16.50 | parameter_sensitive_bridge+classical_wigner_endpoint | stable_graph_bridge+classical_intermediate | no | 0.520130 / 0.504157 | intermittente e reader-sensitive |\n| 20.00 | stable_graph_bridge+classical_intermediate | stable_graph_bridge+classical_intermediate | yes | 0.494405 / 0.491363 | candidato cross-size non promosso |\n| 24.00 | unstable_non_bridge+classical_intermediate | unstable_non_bridge+classical_intermediate | no | 0.468283 / 0.473644 | endpoint/localizzato non bridge |\n\n## Key Findings\n1. Verificato: `W=20.00` e' l'unica riga `stable_graph_bridge+classical_intermediate` su entrambe le size testate.\n2. Verificato: `W=16.00` e `W=16.50` sono candidate intermittenti, quindi non trasportano il gate in modo cross-size.\n3. Verificato: il null feature-scramble assorbe il conteggio osservato: `112/128` trial arrivano ad almeno `1` candidato, con massimo null `4`.\n4. Verificato: esiste residuo graph-only separato (`3` righe a `L=5`, `4` a `L=6`); non viene sommato al boundary a due lettori.\n5. Inferito dal perimetro: Anderson 3D e' un contro-perimetro utile, ma il risultato attuale misura fragilita' del lettore piu' che terzo incluso fisico.\n\n## Verdict\nCONSTRAINT\n\nIl gate trasferisce abbastanza da nominare `W=20` come candidato Anderson, ma il null feature-scramble lo ricostruisce. La possibilita' ammessa e' \"corridoio Anderson da stressare\"; la possibilita' non ammessa e' \"boundary fisico promosso\". Il prossimo ciclo deve aumentare indipendenza del null o la size fisica, non ripetere il conteggio su `L=5,6`.\n\n## Bicono della scoperta\n- **Due radici**: riga cross-size osservata; ricostruzione da null.\n- **Singolare**: disorder row prima della doppia lettura classico/grafo.\n- **Invariante di passaggio**: row alignment e p-value dichiarato (`raw_p`, `add_one_p`) restano il filtro.\n- **Campo di possibilita**: possibile = usare Anderson come stress test cross-dominio del gate; non-possibile = promuovere il boundary senza battere il null.\n\n## Consecutio\nPortare il candidato `W=20` a un audit piu' duro: `L>=7` con sparse eigensolver oppure null endpoint-preserving che mantiene i poli metallic/localized e rompe solo l'accoppiamento delle righe candidate. Se anche li' il null ricostruisce, il boundary resta proprieta' del lettore.\n\n## Ricadute pratiche\nssp_value: yes. `tools/exp_anderson3d_mobility_edge_two_reader_audit.py` ora include un feature-scramble null con `raw_p` e `add_one_p`; il dato `tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json` diventa regressione negativa riusabile.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; BOUNDARY seguito per contratto vivo valutatore.\n- `python -m py_compile tools/exp_anderson3d_mobility_edge_two_reader_audit.py` completato.\n- Run completato: `tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json`.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_anderson3d_mobility_edge_two_reader_audit.py`\n- Data: `tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json`\n- Report: `tools/data/reports/agent_20260516_1117.md`\n",
tools/data/lab_graph.json:1531:      "content_full": "# Agent Report - Endpoint-Gated RP Size Ladder\n**Date**: 2026-05-16 11:11\n**Piano**: 130\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - Il residuo RP endpoint-gated batte il null feature-scramble nel conteggio globale (`10/210`, `raw_p=0/512`, `add_one_p=1/513=0.001949318`), ma non trasporta la size: `N=128` produce `8/42`, `N=160` produce `2/42`, `N=192/224/256` producono `0/42`. Il boundary resta residuo finito-size/lettore, non terzo incluso fisico promosso.\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var, brody_q, berry_robnick_like_gue_weight, endpoint_stable, endpoint_feature_scramble_null_counts, rp_boundary_candidate, centroid_distance_balance, rp_feature_scramble_null_counts, raw_p, add_one_p, size_transport_count]\n**observable_contract**: claim=RP e' boundary endpoint-gated solo se il conteggio candidato batte il null e una finestra lambda resta non-zero attraverso la ladder size preregistrata; observable=`rp_boundary_candidate` per source row, `size_transport_count`, raw/add-one p-values; operator=stesso lettore endpoint 11:04, stessa soglia `4/5 reader`, stessa distanza bilanciata dai centroidi GUE/Poisson, griglia `N x lambda x seed`; generator=GUE, Poisson, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=endpoint 60 source rows x 5 reader, RP 5 size x 7 lambda x 6 seed = 210 source rows x 5 reader; non_possible=terzo incluso fisico se le candidate non arrivano almeno a `N=192` o se il null ricostruisce il conteggio; not_tested=Anderson 3D, spettri sperimentali, limite N infinito, unfolded alternatives oltre il reader 11:04.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + nodo BOUNDARY del grafo + direzione seme \"8 domini GUE, 5 Poisson\".\n- **Dipolo / punto-zero**: residuo finito-size / boundary fisico. Punto-zero: source row RP prima che il lettore la leghi a `N`.\n- **Piano superiore**: topologia assiomatica del bordo. Il boundary operator deve trasportare l'identita' del bordo lungo la scala, non solo trovare una riga intermedia.\n- **Operatori laterali scelti**: boundary operator, parallel transport, finite-size scaling. Entrano per distinguere \"conteggio sopra null\" da \"bordo che resta bordo cambiando scala\".\n- **Contaminazione cognitiva**: CE-0019 usata come contratto combo prima della misura; CE-0001/KSAR usata per reiterare il gate 11:04 senza cambiare lettore; CE-0117 usata per trattenere il residuo come possibilita' solo se supera la size ladder.\n- **Proto-ipotesi**: un terzo incluso operativo non e' un picco locale; deve mantenere almeno una finestra lambda non-zero mentre `N` aumenta dentro la stessa lettura endpoint-gated.\n- **Possibile/non-possibile**: possibile = residuo RP finito-size reale del lettore endpoint; non-possibile = boundary fisico se il supporto cade a zero da `N=192`.\n- **Proiezione**: misuro `rp_boundary_candidate` su size `128/160/192/224/256`, lambda `0.030/0.045/0.060/0.075/0.090/0.105/0.120`, 6 seed, contro feature-scramble null.\n- **Movimento A->M->B**: fisico A = crossover spettrale Rosenzweig-Porter GUE/Poisson; matematica M = trasporto del bordo in spazio osservabile endpoint-gated; fisico B non emerge. Il ciclo consegna un vincolo di non-promozione.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: segue il vincolo valutatore: restare nello stesso frame BOUNDARY e verificare trasporto endpoint/size su domini indipendenti prima di promuovere RP.\n- `not_drift`: non torna a phi/Sturmian, V_c, fit locali o ricerca nuova di lambda; mantiene il gate endpoint 11:04 e cambia solo scala/lambda.\n- `seed_residue`: restano non testati il perimetro largo 8 GUE / 5 Poisson come domini indipendenti, Anderson 3D e spettri fisici reali.\n- `why_not_drift`: il sotto-perimetro e' regressivo perche' chiude il nodo lasciato dal report 11:04: finite-size/reader calibration vs boundary che si sposta con `N`.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: Rosenzweig-Porter crossover, Brody interpolation, Berry-Robnik-like mixture, finite-size spectral crossover GUE/Poisson.\n- **Cosa assorbe il baseline**: la presenza di righe intermedie RP in size finite e la dipendenza da `N`.\n- **Cosa resta Lab-specific**: il contratto endpoint-gated con p-value definito e decisione di non-promozione se il trasporto size fallisce.\n- **Separazione**: `two_reader_boundary_confirmed=[]`; `graph_only_residue=0`; `scope_change_declared=endpoint_gated_size_ladder`; `graph_baseline_audit=non_applicabile:no_graph_reader`.\n\n## Claim Under Test\n> RP e' terzo incluso endpoint-gated solo se il residuo sopra null si trasporta oltre `N=128` dentro una ladder size/lambda preregistrata.\n\n## Question\nIl residuo `N=128` del ciclo 11:04 e' un bordo che si sposta con la scala, oppure una firma finito-size del lettore endpoint?\n\n## Ritorno fisico\n- **Punto fisico sorgente**: crossover spettrale Rosenzweig-Porter tra Poisson e GUE.\n- **Attraversamento matematico**: distanza bilanciata dai centroidi endpoint e trasporto lungo una ladder size.\n- **Punto fisico di ritorno**: assente come nuova misura fisica; il ritorno resta un vincolo sul protocollo prima di Anderson 3D o spettri sperimentali.\n- **Controllo concretezza**: nessun setup fisico nuovo viene promosso.\n- **Relazione nuova**: il conteggio sopra null non basta; serve supporto stratificato per size.\n- **Osservabile/test fisico possibile**: applicare lo stesso contratto a Anderson 3D mobility edge o spettri sperimentali solo dopo un supporto non-zero su size maggiori.\n- **Se fallisce**: `ritorno_fisico_assente`: resta vincolo metodologico, non scoperta fisica promuovibile.\n\n## Experiment Design\n- **Script riusato**: `tools/exp_endpoint_gated_rp_boundary.py`.\n- **Run**: `python tools/exp_endpoint_gated_rp_boundary.py --out tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json --sizes 128,160,192,224,256 --rp-lambdas 0.030,0.045,0.060,0.075,0.090,0.105,0.120 --test-seeds 202605161105,202605161106,202605161107,202605161108,202605161109,202605161110 --rp-scramble-seed 202605161111`.\n- **Endpoint gate**: pass osservato se endpoint GUE/Poisson resta stabile e feature-scramble `add_one_p<=0.05`.\n- **RP candidate**: source row passa se almeno `4/5` reader hanno `centroid_distance_balance >= 0.85` e `bridge_distance` in `[0.35, 2.75]`.\n- **P-value**: right-tail; `raw_p=k/N` e `add_one_p=(k+1)/(N+1)`, dove `k` e' il numero di null trial con candidate count almeno pari all'osservato.\n- **Null RP**: 512 feature-scramble trial; dentro ogni reader, ogni feature viene permutata indipendentemente fra righe RP. Preserva marginali per feature/reader, rompe accoppiamento multivariato source row.\n- **Non testato**: non misura Anderson 3D, non misura spettri reali, non prova limite infinito.\n\n## Results\n| gate | observed | null k/N | raw_p | add_one_p | max null | lettura |\n|---|---:|---:|---:|---:|---:|---|\n| Endpoint feature-scramble | 60/60 | 0/512 | 0.000000000 | 0.001949318 | 4 | endpoint chiuso |\n| Endpoint label permutation | 60/60 | 24/128 | 0.187500000 | 0.193798450 | 60 | null permissivo, solo continuita' |\n| RP feature-scramble | 10/210 | 0/512 | 0.000000000 | 0.001949318 | 1 | conteggio sopra null |\n\n| size | candidates | total | lambda hits | lettura |\n|---:|---:|---:|---|---|\n| 128 | 8 | 42 | 0.030:3, 0.045:2, 0.060:1, 0.075:1, 0.090:1 | residuo concentrato |\n| 160 | 2 | 42 | 0.030:1, 0.105:1 | residuo intermittente |\n| 192 | 0 | 42 | none | blank |\n| 224 | 0 | 42 | none | blank |\n| 256 | 0 | 42 | none | blank |\n\n| lambda | candidates | total | size support |\n|---:|---:|---:|---|\n| 0.030 | 4 | 30 | N=128,160 |\n| 0.045 | 2 | 30 | N=128 |\n| 0.060 | 1 | 30 | N=128 |\n| 0.075 | 1 | 30 | N=128 |\n| 0.090 | 1 | 30 | N=128 |\n| 0.105 | 1 | 30 | N=160 |\n| 0.120 | 0 | 30 | none |\n\n## Key Findings\n1. Verificato: il gate endpoint resta chiuso sul nuovo perimetro size: `60/60`, feature-scramble `raw_p=0/512`, `add_one_p=0.001949318`.\n2. Verificato: il null label-permutation resta permissivo e viene riportato per continuita': `24/128`, `add_one_p=0.193798450`.\n3. Verificato: il conteggio globale RP e' sopra il null feature-scramble: `10/210`, null max `1/210`, `raw_p=0/512`, `add_one_p=0.001949318`.\n4. Verificato: il supporto size non trasporta. Nessuna lambda ha candidate a `N=192`, `N=224` o `N=256`.\n5. Inferito dal perimetro: il nodo regressivo e' finite-size/reader calibration. Il residuo e' reale contro questo null, ma non e' boundary fisico stabile.\n\n## Verdict\nCONSTRAINT\n\nRP resta un residuo endpoint-gated sopra null, ma la size ladder lo blocca. La possibilita' ammessa e' \"firma finito-size del lettore endpoint\"; la possibilita' non ammessa e' \"terzo incluso fisico RP\". Il prossimo ciclo deve uscire dal pooled RP: applicare lo stesso contratto endpoint/size a un dominio indipendente, preferibilmente Anderson 3D mobility edge o uno spettro fisico reale, mantenendo separati count globale e trasporto per size.\n\n## Bicono della scoperta\n- **Due radici**: residuo sopra null; trasporto size assente.\n- **Singolare**: riga RP prima del nome `candidate` e prima del legame con `N`.\n- **Invariante di passaggio**: p-value dichiarato (`raw_p`, `add_one_p`) e denominatore source row x reader row-aligned.\n- **Campo di possibilita**: possibile = audit endpoint-gated come filtro finito-size; non-possibile = promuovere RP a boundary fisico senza supporto `N>=192`.\n\n## Consecutio\nIl prossimo ciclo non deve aumentare la griglia RP. Deve portare il contratto endpoint/size su un dominio indipendente: Anderson 3D mobility edge, o spettro fisico reale se disponibile. Se anche il dominio indipendente mostra count sopra null ma zero trasporto size, il boundary resta protocollo di filtro; se sopravvive su size, il terzo incluso torna candidato fisico.\n\n## Ricadute pratiche\nssp_value: yes. `tools/exp_endpoint_gated_rp_boundary.py` resta gate riusabile; il nuovo dato `tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json` aggiunge un caso di non-promozione per size transport.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; direzione BOUNDARY seguita per contratto vivo.\n- `python -m py_compile tools/exp_endpoint_gated_rp_boundary.py` completato.\n- Run completato: `tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json`.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_endpoint_gated_rp_boundary.py`\n- Data: `tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json`\n- Report: `tools/data/reports/agent_20260516_1111.md`\n",
tools/data/lab_graph.json:1580:      "findings": "1. Verificato: il gate endpoint GUE/Poisson resta chiuso sullo stesso denominatore del 10:58: `36/36`, feature-scramble `add_one_p=0.001949318`.\n2. Verificato: il null label-permutation resta permissivo e viene riportato per continuita': `15/128`, `add_one_p=0.124031008`.\n3. Verificato: RP batte il null feature-scramble sul conteggio globale: osservato `6/54`, null max `1/54`, `raw_p=0/512`, `add_",
tools/data/lab_graph.json:1581:      "content_preview": "# Agent Report - Endpoint-Gated RP Boundary\n**Date**: 2026-05-16 11:04\n**Piano**: 129\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - Il gate endpoint GUE/Poisson resta chiuso (`36/36`, feature-scramble `raw_p=0/512=0.0`, `add_one_p=1/513=0.001949318`). RP produce 6/54 righe terzo-incluse contro null massimo 1/54 (`raw_p=0/512=0.0`, `add_one_p=1/513=0.001949318`), ma tutte le candidate sono a `N=128`; `N=192` e `N=256` restano blank. Il residuo RP e' finito-size, non boundary fisi",
tools/data/lab_graph.json:1582:      "content_full": "# Agent Report - Endpoint-Gated RP Boundary\n**Date**: 2026-05-16 11:04\n**Piano**: 129\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - Il gate endpoint GUE/Poisson resta chiuso (`36/36`, feature-scramble `raw_p=0/512=0.0`, `add_one_p=1/513=0.001949318`). RP produce 6/54 righe terzo-incluse contro null massimo 1/54 (`raw_p=0/512=0.0`, `add_one_p=1/513=0.001949318`), ma tutte le candidate sono a `N=128`; `N=192` e `N=256` restano blank. Il residuo RP e' finito-size, non boundary fisico promosso.\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var, brody_q, berry_robnick_like_gue_weight, endpoint_stable, endpoint_feature_scramble_null_counts, rp_boundary_candidate, centroid_distance_balance, rp_feature_scramble_null_counts, raw_p, add_one_p]\n**observable_contract**: claim=RP e' terzo incluso endpoint-gated solo se il gate GUE/Poisson resta chiuso e le righe RP bilanciate fra i centroidi endpoint battono il null feature-scramble row-aligned; observable=`endpoint_stable`, `centroid_distance_balance`, `rp_boundary_candidate`, raw/add-one p-values; operator=centroidi endpoint GUE/Poisson calibrati, score RP per distanza bilanciata da entrambi i poli, null che preserva marginali per reader e rompe accoppiamento feature-riga; generator=GUE, Poisson, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=endpoint 36 source rows x 5 reader, RP 3 lambda x 3 size x 6 seed = 54 source rows x 5 reader; non_possible=terzo incluso se endpoint gate fallisce o null RP ricostruisce il numero osservato; not_tested=Anderson 3D, spettri sperimentali, limite N infinito, universalita analitica, nuova ricerca lambda.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + nodo BOUNDARY del grafo + tensione seme \"8 domini GUE, 5 Poisson\".\n- **Dipolo / punto-zero**: endpoint chiuso / boundary intermedio. Punto-zero: vettore osservabile prima della distanza dai due centroidi.\n- **Piano superiore**: topologia assiomatica del bordo. Il boundary operator non legge RP finche' i poli GUE/Poisson non sono invarianti.\n- **Operatori laterali scelti**: boundary operator e parallel transport. Il primo decide il passaggio endpoint -> terzo incluso; il secondo chiede se la posizione RP si trasporta fra reader e size.\n- **Contaminazione cognitiva**: CE-0019 metabolizzata come combo prima della misura; CE-0001/KSAR usata per reiterare il gate 10:58 invece di cercare una nuova lambda; CE-0117 usata per trattenere la possibilita' solo se apre un boundary non assorbito dal null.\n- **Proto-ipotesi**: dopo endpoint chiuso, RP e' terzo incluso se una riga resta bilanciata fra i due endpoint in almeno 4/5 reader e il null feature-scramble non ricostruisce quel conteggio.\n- **Possibile/non-possibile**: possibile = leggere RP come boundary finito-size controllato; non-possibile = promuoverlo a confine fisico se il supporto non attraversa le size.\n- **Proiezione**: misuro `rp_boundary_candidate` su lambda `0.045/0.060/0.075`, size `128/192/256`, 6 seed.\n- **Movimento A->M->B**: fisico A = crossover spettrale GUE/Poisson/RP; matematica M = distanza bilanciata da centroidi endpoint in spazio osservabile; fisico B non emerge. Il ciclo consegna un vincolo di size-stability prima del rimbalzo fisico.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: usa il filtro endpoint GUE/Poisson chiuso nel ciclo 10:58 e tenta il rientro controllato nel boundary RP come terzo incluso operativo.\n- `not_drift`: non torna a phi/Sturmian, V_c, fit locali o graph-only; RP viene letto solo dopo endpoint gate e contro null row-aligned.\n- `seed_residue`: restano non testati gli 8 domini GUE / 5 Poisson originali come perimetro largo, Anderson 3D e spettri fisici reali.\n- `why_not_drift`: il sotto-perimetro e' regressivo perche' verifica se il prerequisito endpoint abilita il terzo incluso senza cancellare il residuo del seme.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: Rosenzweig-Porter crossover, Brody interpolation, Berry-Robnik-like mixture, finite-size spectral crossover GUE/Poisson.\n- **Cosa assorbe il baseline**: una finestra RP puo' collocarsi fra statistiche GUE e Poisson in size finite.\n- **Cosa resta Lab-specific**: il contratto endpoint-gated: il terzo incluso viene letto solo dopo endpoint-null chiuso e con p-value raw/add-one dichiarato.\n- **Separazione**: `two_reader_boundary_confirmed=[]`; `graph_only_residue=0`; `scope_change_declared=endpoint_gated_rp_boundary`; `graph_baseline_audit=non_applicabile:no_graph_reader`.\n\n## Claim Under Test\n> RP e' boundary endpoint-gated se il gate GUE/Poisson resta chiuso e le righe RP bilanciate fra centroidi endpoint battono il null feature-scramble row-aligned.\n\n## Experiment Design\n- **Script nuovo**: `tools/exp_endpoint_gated_rp_boundary.py`.\n- **Run**: `python tools/exp_endpoint_gated_rp_boundary.py --out tools/data/endpoint_gated_rp_boundary_20260516_1104.json`.\n- **Endpoint gate**: stesso perimetro 10:58, 36 source rows; pass se `36/36` endpoint-stable e feature-scramble `add_one_p<=0.05`.\n- **RP boundary candidate**: una source row RP passa se almeno `4/5` reader hanno `centroid_distance_balance >= 0.85` e bridge distance in `[0.35, 2.75]`.\n- **P-value**: right-tail; `raw_p=k/N` e `add_one_p=(k+1)/(N+1)`, dove `k` e' il numero di null trial con candidate count almeno pari all'osservato.\n- **Null RP**: 512 feature-scramble trial; dentro ogni reader, ogni feature viene permutata indipendentemente fra righe RP. Preserva marginali per feature/reader, rompe accoppiamento multivariato source row.\n\n## Results\n| gate | observed | null k/N | raw_p | add_one_p | max null | lettura |\n|---|---:|---:|---:|---:|---:|---|\n| Endpoint feature-scramble | 36/36 | 0/512 | 0.000000000 | 0.001949318 | 2 | endpoint chiuso |\n| Endpoint label permutation | 36/36 | 15/128 | 0.117187500 | 0.124031008 | 36 | null permissivo, solo continuita' |\n| RP feature-scramble | 6/54 | 0/512 | 0.000000000 | 0.001949318 | 1 | residuo sopra null |\n\n| lambda | candidates | total | median balance | median bridge distance |\n|---:|---:|---:|---:|---:|\n| 0.045 | 2 | 18 | 0.614182 | 0.675690 |\n| 0.060 | 3 | 18 | 0.632778 | 0.777805 |\n| 0.075 | 1 | 18 | 0.588828 | 0.655661 |\n\n| size | candidates | total | lettura |\n|---:|---:|---:|---|\n| 128 | 6 | 18 | residuo concentrato |\n| 192 | 0 | 18 | blank |\n| 256 | 0 | 18 | blank |\n\n## Key Findings\n1. Verificato: il gate endpoint GUE/Poisson resta chiuso sullo stesso denominatore del 10:58: `36/36`, feature-scramble `add_one_p=0.001949318`.\n2. Verificato: il null label-permutation resta permissivo e viene riportato per continuita': `15/128`, `add_one_p=0.124031008`.\n3. Verificato: RP batte il null feature-scramble sul conteggio globale: osservato `6/54`, null max `1/54`, `raw_p=0/512`, `add_one_p=0.001949318`.\n4. Verificato: il supporto non trasferisce su size. Tutte le 6 candidate sono a `N=128`; `N=192` e `N=256` hanno `0/18`.\n5. Inferito dal perimetro: il boundary RP rientra come residuo finito-size endpoint-gated, non come terzo incluso fisico stabile.\n\n## Verdict\nCONSTRAINT\n\nIl terzo incluso RP esiste nel perimetro endpoint-gated solo come residuo `N=128`. Il null non lo assorbe, ma la size-stability lo blocca. Il prossimo ciclo deve separare due possibilita': residuo finito-size reale del lettore endpoint oppure boundary che si sposta con N. Non promuovere RP, Anderson 3D o sito pubblico finche' il residuo non sopravvive a una curva size preregistrata.\n\n## Bicono della scoperta\n- **Due radici**: endpoint GUE/Poisson chiuso; RP bilanciato ma non size-stable.\n- **Singolare**: source row RP prima della distanza dai centroidi endpoint.\n- **Invariante di passaggio**: raw/add-one p-value dichiarati e stesso denominatore source row x reader.\n- **Campo di possibilita**: possibile = boundary finito-size endpoint-gated; non-possibile = boundary fisico promosso senza trasferimento a `N=192/256`.\n\n## Consecutio\nIl prossimo ciclo deve testare size-persistence del residuo endpoint-gated: fissare il criterio `4/5 reader`, mantenere il feature-scramble null, aumentare o riallineare le size, e chiedere se la finestra candidata resta non-zero fuori da `N=128`. Se resta `N=128` only, il nodo regressivo e' finite-size/reader calibration; se compare su size maggiori, il boundary torna candidato fisico.\n\n## Ricadute pratiche\nssp_value: yes. `tools/exp_endpoint_gated_rp_boundary.py` diventa gate riusabile: impedisce di chiamare RP \"terzo incluso\" senza endpoint chiuso, p-value definito e audit size.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; direzione BOUNDARY seguita per contratto vivo.\n- `python -m py_compile tools/exp_endpoint_gated_rp_boundary.py` completato.\n- Primo run fallito per import errato di `parse_floats`; riparato nel nodo regressivo dello script e rilanciato.\n- Run completato: `tools/data/endpoint_gated_rp_boundary_20260516_1104.json`.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_endpoint_gated_rp_boundary.py`\n- Data: `tools/data/endpoint_gated_rp_boundary_20260516_1104.json`\n- Report: `tools/data/reports/agent_20260516_1104.md`\n",
tools/data/lab_graph.json:1588:          "text": "> RP e' boundary endpoint-gated se il gate GUE/Poisson resta chiuso e le righe RP bilanciate fra centroidi endpoint battono il null feature-scramble r"
tools/data/lab_graph.json:1625:      "findings": "1. Verificato: il contratto cross-dominio fallisce prima del boundary RP. GUE viene letto come `intermediate` in 8/8 righe sotto la clausola `q>=0.75` e `w>=0.75`; quindi l'endpoint non trasferisce.\n2. Verificato: Poisson trasferisce come endpoint in 8/8 righe, ma questo non basta a validare l'asse reader perche' l'altro polo cade.\n3. Verificato: RP `0.045/0.060/0.075` resta `intermediate` in tutt",
tools/data/lab_graph.json:1626:      "content_preview": "# Agent Report - Boundary Unfolding Transfer Matrix\n**Date**: 2026-05-16 10:31\n**Piano**: 128\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - `window_mode/unfolding` non trasferisce come asse cross-dominio nel perimetro dichiarato. Poisson resta endpoint su 8/8 righe, ma GUE non resta endpoint sotto la clausola classica a due lettori e RP produce 0/24 residui sopra i null row-aligned. Il boundary reader-axis resta ipotesi da riparare al nodo regressivo del lettore, non claim fisic",
tools/data/lab_graph.json:1627:      "content_full": "# Agent Report - Boundary Unfolding Transfer Matrix\n**Date**: 2026-05-16 10:31\n**Piano**: 128\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - `window_mode/unfolding` non trasferisce come asse cross-dominio nel perimetro dichiarato. Poisson resta endpoint su 8/8 righe, ma GUE non resta endpoint sotto la clausola classica a due lettori e RP produce 0/24 residui sopra i null row-aligned. Il boundary reader-axis resta ipotesi da riparare al nodo regressivo del lettore, non claim fisico.\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var, brody_q, berry_robnick_like_gue_weight, reader_sensitivity, endpoint_transfer_stable, reader_residue_pass, row_aligned_p, permutation_null_scores, position_shift_null_scores]\n**observable_contract**: claim=`window_mode/unfolding` e' coordinata del boundary se gli endpoint GUE/Poisson trasferiscono mentre le righe RP boundary espongono residuo reader-specific contro null row-aligned; observable=reader_sensitivity del vettore spettrale canonico tra global_mean, exact_local e odd_coerced; operator=stessa riga di gap letta con piu unfolding/window modes; generator=matrici GUE, gap Poisson esponenziali, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=domain x size x seed, null da permutazione e shift circolare sulla stessa riga; non_possible=asse reader come boundary se un endpoint si frattura o RP non batte i null; not_tested=spettri sperimentali, N infinito, Anderson 3D, prova analitica di universalita.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + boundary operator/topologia del bordo + tensione BOUNDARY.\n- **Dipolo / punto-zero**: polo fisico stabile / lettore che decide. Punto-zero: la stessa sequenza di gap prima che global/local/odd-coerced la leggano.\n- **Piano superiore**: topologia assiomatica del bordo. Il boundary operator e' trattato come mappa fra lettori, non come parametro tecnico.\n- **Operatori laterali scelti**: boundary operator e parallel transport. Il primo decide se il bordo e' oggetto; il secondo chiede se l'identita' del dominio trasporta fra lettori.\n- **Contaminazione cognitiva**: CE-0019 usata come vincolo di respiro pre-esperimento; CE-0001/KSAR usata per reiterare il kernel 10:19 senza cercare un'altra lambda.\n- **Proto-ipotesi**: se `window_mode/unfolding` e' asse reale del confine, GUE e Poisson trasferiscono come poli mentre RP boundary mostra residuo specifico del lettore sopra i null row-aligned.\n- **Possibile/non-possibile**: possibile = reader axis come coordinata cross-dominio; non-possibile = endpoint GUE fratturato o RP reader residue assorbito dai null.\n- **Proiezione**: misuro `reader_sensitivity` e stato classico per righe GUE, Poisson e RP `0.045/0.060/0.075`, con null di permutazione e shift sulla stessa riga.\n- **Movimento A->M->B**: fisico A = crossover GUE/Poisson/RP finito; matematica M = matrice row-aligned `(domain, N, seed, reader)`; fisico B non emerge. Il ciclo consegna un vincolo sul lettore, non un rimbalzo fisico.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: porta l'asse `window_mode`/unfolding fuori dalla sola lambda RP e lo testa su GUE, Poisson e RP con null row-aligned.\n- `not_drift`: non cerca una lambda stabile, non usa phi/Sturmian/V_c, non promuove righe graph-only; il risultato cade se endpoints o RP non rispettano il contratto.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: unfolding sensitivity negli spettri finiti, Rosenzweig-Porter crossover, Brody interpolation, Berry-Robnik mixture, kNN stability sul grafo di osservabili.\n- **Cosa assorbe il baseline**: la dipendenza delle statistiche spettrali finite dalla normalizzazione locale dei gap.\n- **Cosa resta Lab-specific**: il contratto row-aligned che separa endpoint transfer e RP reader residue nella stessa matrice di lettori.\n- **Separazione**: `two_reader_boundary_confirmed=[]`; `graph_only_residue=0`; `scope_change_declared=reader_axis_cross_domain`; `graph_baseline_audit=permutation_null + position_shift_null`.\n\n## Claim Under Test\n> `window_mode/unfolding` trasferisce come coordinata del boundary se Poisson e GUE restano endpoint e RP `0.045/0.060/0.075` mostra residuo reader-specific sopra null row-aligned.\n\n## Experiment Design\n- **Script nuovo**: `tools/exp_boundary_unfolding_transfer_matrix.py`.\n- **Run**: `python tools/exp_boundary_unfolding_transfer_matrix.py --out tools/data/boundary_unfolding_transfer_matrix_20260516_1031.json`\n- **Righe**: size `128/192`, seed `4`, domini `GUE`, `Poisson`, RP lambda `0.045/0.060/0.075`.\n- **Reader**: `global_mean`, `exact_local` windows `9/12`, `odd_coerced` windows `9/12`.\n- **Null row-aligned**: 32 permutazioni dei gap per riga + 8 shift circolari per riga.\n- **Soglia preregistrata RP**: `reader_sensitivity >= 0.75`, `row_aligned_p <= 0.05`, almeno due stati reader diversi.\n- **Soglia endpoint audit**: tutti gli stati reader devono matchare l'endpoint dichiarato; `endpoint_max_sensitivity=0.75` registrato come audit, non forzato nel pass.\n\n## Results\n| group | observed | null | p / audit | median reader_sensitivity | lettura |\n|---|---:|---:|---:|---:|---|\n| GUE endpoint transfer | 0/8 | 0/256 | left-tail approx 0.000000 | 2.105328 | non trasferisce sotto clausola a due lettori |\n| Poisson endpoint transfer | 8/8 | 0/256 | left-tail approx 1.000000 | 2.444532 | trasferisce come endpoint |\n| RP reader residue | 0/24 | 551/960 | 1.000000 | 2.426735 | residuo assorbito dai null |\n\n### Endpoint Rows\n| source | example states across readers | example q/w global | endpoint_transfer |\n|---|---|---|---|\n| GUE | intermediate, intermediate, intermediate, intermediate, intermediate | q=1.000000, w=0.526667 | 0/8 |\n| Poisson | poisson_endpoint, poisson_endpoint, poisson_endpoint, poisson_endpoint, poisson_endpoint | q=0.046667, w=0.033333 | 8/8 |\n\n### RP Lambda Audit\n| lambda | reader_residue_pass | total | median reader_sensitivity | states |\n|---:|---:|---:|---:|---|\n| 0.045 | 0 | 8 | 2.377442 | all readers intermediate |\n| 0.060 | 0 | 8 | 2.489847 | all readers intermediate |\n| 0.075 | 0 | 8 | 2.375018 | all readers intermediate |\n\n## Key Findings\n1. Verificato: il contratto cross-dominio fallisce prima del boundary RP. GUE viene letto come `intermediate` in 8/8 righe sotto la clausola `q>=0.75` e `w>=0.75`; quindi l'endpoint non trasferisce.\n2. Verificato: Poisson trasferisce come endpoint in 8/8 righe, ma questo non basta a validare l'asse reader perche' l'altro polo cade.\n3. Verificato: RP `0.045/0.060/0.075` resta `intermediate` in tutte le letture e produce 0/24 `reader_residue_pass`; i null hanno 551/960 score >= osservato, quindi il residuo reader-specific non emerge.\n4. Inferito dal perimetro: la sensibilita' del vettore osservabile e' alta in tutti i gruppi, ma non discrimina boundary. Il nodo regressivo e' la definizione del lettore/classificatore, non la scelta di lambda.\n\n## Verdict\nCONSTRAINT\n\n`window_mode/unfolding` non diventa coordinata cross-dominio nel perimetro 10:31. La matrice conserva informazione utile perche' mostra dove cade: il lettore a due clausole classiche rompe GUE e i null assorbono RP. Il prossimo ciclo non deve cercare una cresta RP; deve riparare il lettore endpoint o cambiare dominio di ritorno con endpoint verificati prima del boundary.\n\n## Bicono della scoperta\n- **Due radici**: endpoint transfer; reader residue RP.\n- **Singolare**: riga di gap prima dell'unfolding.\n- **Invariante di passaggio**: stesso denominatore row-aligned per osservato e null.\n- **Campo di possibilita**: possibile = audit del lettore prima della promozione del boundary; non-possibile = dichiarare terzo incluso cross-dominio con GUE endpoint non trasferito.\n\n## Consecutio\nIl prossimo passo utile e' regressivo: prima validare endpoint GUE/Poisson con un lettore che non trasformi GUE in intermedio, poi rieseguire la matrice RP. Se la clausola classica resta `q AND w`, il boundary reader-axis e' bloccato. Se la clausola diventa endpoint-validata su baseline GUE indipendente, la domanda torna falsificabile.\n\n## Ricadute pratiche\nssp_value: yes. `tools/exp_boundary_unfolding_transfer_matrix.py` e' uno strumento riusabile per testare trasferibilita' del lettore su domini, size, seed, windows e null row-aligned.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; direzione BOUNDARY seguita per contratto vivo.\n- `python -m py_compile tools/exp_boundary_unfolding_transfer_matrix.py` completato.\n- Run completato: `tools/data/boundary_unfolding_transfer_matrix_20260516_1031.json`.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_boundary_unfolding_transfer_matrix.py`\n- Data: `tools/data/boundary_unfolding_transfer_matrix_20260516_1031.json`\n- Report: `tools/data/reports/agent_20260516_1031.md`\n",
tools/data/lab_graph.json:1633:          "text": "> `window_mode/unfolding` trasferisce come coordinata del boundary se Poisson e GUE restano endpoint e RP `0.045/0.060/0.075` mostra residuo reader-sp"
tools/data/lab_graph.json:1645:          "text": "| group | observed | null | p / audit | median reader_sensitivity | lettura |\n|---|---:|---:|---:|---:|---|\n| GUE endpoint transfer | 0/8 | 0/256 | left-tail approx 0.000000 | 2.105328 | non trasferis"
tools/data/lab_graph.json:1657:          "text": "Il prossimo passo utile e' regressivo: prima validare endpoint GUE/Poisson con un lettore che non trasformi GUE in intermedio, poi rieseguire la matri"
tools/data/lab_graph.json:1672:      "content_full": "# Agent Report - RP Exact Local-Window Size Stress\n**Date**: 2026-05-16 10:19\n**Piano**: 127\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - `RP_lambda_0.060` non sopravvive come terzo incluso operativo quando `local_window=9/10/11/12` viene trattata come finestra esatta e N viene esteso oltre 192. Passa 5/8 celle; cade a `N=224` per finestre 9/10/11. Il confine RP resta asse dipendente dall'operatore di unfolding.\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, berry_robnick_like_gue_weight, mean_ipr, observed_successes, label_shuffle_successes, position_shift_successes, Wilson intervals, binomial-tail p-values, min_lift_against_nulls, threshold_pass, exact_local_window]\n**observable_contract**: claim=`RP_lambda_0.060` e' cresta persistente solo se batte entrambi i null row-aligned su ogni `local_window` esatta 9/10/11/12 e su size oltre 192; observable=two-reader raw-count threshold per lambda x exact local_window x size; operator=unfolding locale a larghezza esatta, senza coercizione dispari; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=lambda sentinels `0.030/0.045/0.060/0.075/0.820`, size `224/256`, seed x k = `4 x 3`, label null `768`, position null `48`; non_possible=boundary a lambda singola se una finestra o size dichiarata fallisce soglia; not_tested=N infinito, finestre oltre 12, kernel di unfolding alternativi, spettri sperimentali, Anderson 3D.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + boundary operator topologico + tensione BOUNDARY/RP.\n- **Dipolo / punto-zero**: cresta lambda / lettore di unfolding. Punto-zero: la stessa cella RP prima che la finestra esatta decida pass o non-pass.\n- **Piano superiore**: topologia assiomatica del bordo; la larghezza locale e' coordinata del boundary, non opzione tecnica.\n- **Operatori laterali scelti**: boundary operator e parallel transport. Il primo dichiara il bordo come oggetto; il secondo chiede se la riga `0.060` trasporta identita' tra finestre.\n- **Contaminazione cognitiva**: CE-0001/KSAR metabolizzata come reiterazione del kernel 10:07 senza promozione; CE-0019 usata per rendere il respiro pre-esperimento vincolo e non linguaggio post-hoc.\n- **Proto-ipotesi**: se `local_window` e' asse del boundary, le finestre pari devono essere coordinate reali; collassarle alla dispari inferiore cancella informazione.\n- **Proiezione**: misuro count grezzi e null per `window=9/10/11/12`, conservando le finestre pari come larghezze esatte.\n- **Movimento A->M->B**: fisico A = crossover RP finito; matematica M = matrice `(lambda, local_window, N)` con null row-aligned; fisico B non emerge. Il ciclo resta vincolo sul lettore finite-size, non avanzamento fisico autonomo.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: stressa esattamente la transizione `local_window=9 -> 11` su `RP_lambda_0.060`, estendendo N oltre 192 e includendo 10/12 come finestre non collassate.\n- `not_drift`: non ritorna a phi, Sturmian, V_c o fit locali; usa solo il perimetro RP e il gate raw-count/null richiesto dal campo vivo.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: Rosenzweig-Porter crossover, Brody interpolation, Berry-Robnik mixture, unfolding sensitivity in spettri finiti.\n- **Cosa assorbe il baseline**: la dipendenza dalla procedura di unfolding in size finite.\n- **Cosa resta Lab-specific**: il contratto row-aligned con due lettori, count grezzi e null espliciti per decidere se una riga puo essere chiamata terzo incluso.\n- **Separazione**: `two_reader_boundary_confirmed=[]` all-window per `0.060`; `graph_only_residue=0` non promosso; `scope_change_declared=exact_local_window`; `graph_baseline_audit=label shuffle + position shift`.\n\n## Claim Under Test\n> `RP_lambda_0.060` resta thresholded su tutte le finestre esatte `9/10/11/12` e su size `224/256`.\n\n## Experiment Design\n- **Script nuovo**: `tools/exp_rp_exact_local_window_matrix.py`.\n- **Motivo dello script**: `tools/exp_rp_unfolding_sensitivity_audit.py` forza le finestre pari alla dispari inferiore; quindi `10 -> 9` e `12 -> 11`. Il nuovo wrapper conserva le finestre pari senza modificare lo script storico.\n- **Run**: `python tools/exp_rp_exact_local_window_matrix.py --out tools/data/rp_exact_local_window_matrix_20260516_1019.json`\n- **Soglia preregistrata**: observed rate `>=0.75`, lift contro ogni null `>=0.10`, p-value contro ogni null `<=0.05`, stato `classical_intermediate`, pass su tutte le size e finestre dichiarate.\n\n## Results\n| local_window | all-size thresholded rows | lettura |\n|---:|---|---|\n| 9 | `RP_lambda_0.045` | `0.060` cade a N=224 |\n| 10 | `RP_lambda_0.075` | finestra pari distingue il bordo da 9 |\n| 11 | `RP_lambda_0.045` | `0.060` cade a N=224 |\n| 12 | `RP_lambda_0.060`, `RP_lambda_0.075` | `0.060` passa solo qui all-size |\n\n### RP_lambda_0.060 Raw Counts\n| window | N | observed | label null | position null | max p | min lift | state |\n|---:|---:|---:|---:|---:|---:|---:|---|\n| 9 | 224 | 5/12 | 377/768 | 20/48 | 0.788049 | -0.074219 | fail |\n| 9 | 256 | 12/12 | 432/768 | 24/48 | 0.001003 | 0.437500 | pass |\n| 10 | 224 | 8/12 | 387/768 | 20/48 | 0.201489 | 0.162760 | positive_lift_unthresholded |\n| 10 | 256 | 12/12 | 423/768 | 23/48 | 0.000779 | 0.449219 | pass |\n| 11 | 224 | 8/12 | 392/768 | 20/48 | 0.214615 | 0.156250 | positive_lift_unthresholded |\n| 11 | 256 | 12/12 | 423/768 | 23/48 | 0.000779 | 0.449219 | pass |\n| 12 | 224 | 12/12 | 435/768 | 23/48 | 0.001090 | 0.433594 | pass |\n| 12 | 256 | 12/12 | 423/768 | 23/48 | 0.000779 | 0.449219 | pass |\n\n### Sentinel Comparison\n| window | lambda | N=224 | N=256 | persistence |\n|---:|---:|---|---|---:|\n| 9 | 0.045 | `11/12`, max p `0.004797`, lift `0.395833`, pass | `9/12`, max p `0.049053`, lift `0.278646`, pass | 2/2 |\n| 9 | 0.060 | `5/12`, max p `0.788049`, lift `-0.074219`, fail | `12/12`, max p `0.001003`, lift `0.437500`, pass | 1/2 |\n| 9 | 0.075 | `12/12`, max p `0.001594`, lift `0.415365`, pass | `9/12`, max p `0.076849`, lift `0.246094`, positive_lift_unthresholded | 1/2 |\n| 10 | 0.045 | `11/12`, max p `0.002494`, lift `0.428385`, pass | `9/12`, max p `0.053866`, lift `0.272135`, positive_lift_unthresholded | 1/2 |\n| 10 | 0.060 | `8/12`, max p `0.201489`, lift `0.162760`, positive_lift_unthresholded | `12/12`, max p `0.000779`, lift `0.449219`, pass | 1/2 |\n| 10 | 0.075 | `12/12`, max p `0.001003`, lift `0.437500`, pass | `12/12`, max p `0.000463`, lift `0.472656`, pass | 2/2 |\n| 11 | 0.045 | `12/12`, max p `0.001090`, lift `0.433594`, pass | `9/12`, max p `0.038862`, lift `0.294271`, pass | 2/2 |\n| 11 | 0.060 | `8/12`, max p `0.214615`, lift `0.156250`, positive_lift_unthresholded | `12/12`, max p `0.000779`, lift `0.449219`, pass | 1/2 |\n| 11 | 0.075 | `12/12`, max p `0.000976`, lift `0.438802`, pass | `9/12`, max p `0.057974`, lift `0.266927`, positive_lift_unthresholded | 1/2 |\n| 12 | 0.045 | `12/12`, max p `0.000209`, lift `0.506510`, pass | `9/12`, max p `0.053866`, lift `0.272135`, positive_lift_unthresholded | 1/2 |\n| 12 | 0.060 | `12/12`, max p `0.001090`, lift `0.433594`, pass | `12/12`, max p `0.000779`, lift `0.449219`, pass | 2/2 |\n| 12 | 0.075 | `12/12`, max p `0.001003`, lift `0.437500`, pass | `12/12`, max p `0.000825`, lift `0.446615`, pass | 2/2 |\n\n## Key Findings\n1. Verificato: `RP_lambda_0.060` non e all-window invariant nel perimetro esteso; passa 5/8 celle e fallisce la clausola di persistenza.\n2. Verificato: la rottura non e solo p-value debole. A `window=9,N=224` `0.060` ha `5/12` observed contro null `377/768` e `20/48`, lift minimo `-0.074219`, quindi e hard fail.\n3. Verificato: le finestre pari sono informative. `window=10` non replica `9`, e `window=12` non replica `11`; lo script storico perdeva questa distinzione forzando finestre dispari.\n4. Verificato: nessuna lambda candidata mantiene identita' stabile su tutte le finestre. All-size row: `0.045` a 9/11, `0.075` a 10, `0.060+0.075` a 12.\n5. Inferito dal perimetro: il boundary RP finito e una superficie discreta `(lambda, N, local_window, kernel_unfolding)`, non una cresta lambda trasportabile.\n\n## Verdict\nCONSTRAINT\n\n`RP_lambda_0.060` resta una coordinata utile, non un terzo incluso operativo. Il passaggio `9 -> 11` non produce stabilita': a N=224 la riga cade in entrambe le finestre e la pari 10 mostra lo stesso limite come `positive_lift_unthresholded`. La pari 12 riaccende `0.060`, ma questo e' dipendenza dal lettore, non invarianza.\n\n## Bicono della scoperta\n- **Due radici**: riga lambda; larghezza esatta dell'unfolding.\n- **Singolare**: cella row-aligned prima del threshold.\n- **Invariante di passaggio**: count grezzi + due null + p-value + pass su tutte le finestre dichiarate.\n- **Campo di possibilita**: possibile = trattare l'unfolding locale come parte del generatore sperimentale; non-possibile = promuovere `0.060` senza dichiarare kernel e larghezza.\n\n## Consecutio\nIl prossimo ciclo RP utile non deve cercare un'altra riga stabile. Deve separare kernel di unfolding da larghezza: confrontare esatto, odd-coerced e kernel pesato sulle stesse celle, oppure uscire da RP e portare il contratto su Anderson 3D con `local_window` atomico nel claim. Finche il kernel decide la riga, il boundary e strumento finite-size, non scoperta fisica.\n\n## Ricadute pratiche\nssp_value: yes. `tools/exp_rp_exact_local_window_matrix.py` rende riusabile la matrice multi-window con finestre pari conservate; evita che un wrapper futuro confonda 10 con 9 e 12 con 11.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; direzione RP seguita per contratto vivo.\n- `python -m py_compile tools/exp_rp_exact_local_window_matrix.py` completato.\n- Run completato: `tools/data/rp_exact_local_window_matrix_20260516_1019.json`.\n- Output per finestra: `tools/data/rp_exact_local_window_matrix_20260516_1019_w9.json`, `tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json`, `tools/data/rp_exact_local_window_matrix_20260516_1019_w11.json`, `tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json`.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_rp_exact_local_window_matrix.py`\n- Data: `tools/data/rp_exact_local_window_matrix_20260516_1019.json`\n- Report: `tools/data/reports/agent_20260516_1019.md`\n",
tools/data/lab_graph.json:1717:      "content_full": "# Agent Report - RP Local-Window Persistence Curve\n**Date**: 2026-05-16 10:07\n**Piano**: 126\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - nel perimetro finito RP nessuna riga lambda resta terzo incluso operativo all-window. `RP_lambda_0.060` e' la cresta di persistenza (`7/8` celle local-window pass), ma cade a `window=11, N=160`; quindi non diventa invariante. Il confine RP e' classe dipendente dall'operatore `local_window`.\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, berry_robnick_like_gue_weight, mean_ipr, observed_successes, label_shuffle_successes, position_shift_successes, Wilson intervals, binomial-tail p-values, min_lift_against_nulls, threshold_pass, local_window]\n**observable_contract**: claim=`local_window` e' asse del boundary RP, non parametro tecnico; observable=two-reader raw-count threshold per lambda x size x local_window; operator=curva di persistenza su `window={5,7,9,11}`; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=lambda sentinels `0.030/0.045/0.060/0.075/0.820`, size `160/192`, observed denominator `12` per cell, label null `768`, position null `48`; non_possible=terzo incluso RP all-window se una riga fallisce in una finestra o size; not_tested=N oltre 192, finestre pari/oltre 11, Anderson 3D, spettri sperimentali, molti seed.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + boundary operator topologico + tensione BOUNDARY/RP.\n- **Dipolo / punto-zero**: lambda stabile / lettore di unfolding. Punto-zero: la stessa riga RP prima che la finestra locale la renda pass, positive-lift o fail.\n- **Piano superiore**: topologia assiomatica del bordo; `local_window` opera come granularita' del bordo, non come normalizzazione.\n- **Proto-ipotesi**: il confine RP finito non e' una lambda, ma una curva di persistenza nel piano `(lambda, local_window)` letta a size fissate.\n- **Possibile/non-possibile**: possibile = usare `0.060` come cresta da stressare su N maggiori; non-possibile = chiamare `0.060` terzo incluso all-window nel perimetro attuale.\n- **Proiezione**: completare la matrice `window={5,7,9,11}` con le finestre interne `7/9`, riusando gli estremi `5/11` gia' verificati nel ciclo 09:38.\n\n## Contaminazione cognitiva\nCE-0019 metabolizzata: il ciclo usa il \"Respiro fuori-tempo\" come vincolo pre-esperimento, non come linguaggio retroattivo. CE-0001/KSAR applicato come kernel reiterativo: il risultato 09:38 non viene promosso, viene riusato come estremi della curva e chiuso con due run minimi interni.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: misura direttamente se esistono invarianti all-window o se il boundary RP resta dipendente dall'operatore di unfolding `local_window`.\n- `not_drift`: non torna a phi, Sturmian, V_c o vecchi generatori; usa solo il perimetro RP candidate/sentinels richiesto dalla consecutio viva.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: Rosenzweig-Porter crossover, Brody interpolation, Berry-Robnik mixture, unfolding sensitivity nei crossover spettrali finiti.\n- **Cosa assorbe il baseline**: la sensibilita' alla procedura di unfolding e' attesa in spettri finiti.\n- **Cosa resta Lab-specific**: il contratto row-aligned con due lettori, count grezzi e null per decidere se una riga puo' essere chiamata terzo incluso.\n- **Separazione**: `two_reader_boundary_confirmed=[]` all-window; `graph_only_residue=0`; `scope_change_declared=local_window-as-boundary-axis`; `graph_baseline_audit=label shuffle + position shift`.\n\n## Claim Under Test\n> Nel perimetro RP finito esiste almeno una riga lambda che resta thresholded su tutte le finestre locali `5/7/9/11` e su entrambe le size `160/192`.\n\n## Experiment Design\n- **Script riusato**: `tools/exp_rp_unfolding_sensitivity_audit.py`.\n- **Nuovi run**:\n  - `python tools/exp_rp_unfolding_sensitivity_audit.py --out tools/data/rp_candidate_window_stress_20260516_1007_w7.json --sizes 160,192 --lambdas 0.03,0.045,0.06,0.075,0.82 --position-offsets 1,2,3,4 --local-window 7`\n  - `python tools/exp_rp_unfolding_sensitivity_audit.py --out tools/data/rp_candidate_window_stress_20260516_1007_w9.json --sizes 160,192 --lambdas 0.03,0.045,0.06,0.075,0.82 --position-offsets 1,2,3,4 --local-window 9`\n- **Estremi riusati**: `tools/data/rp_candidate_window_stress_20260516_0938_w5.json`, `tools/data/rp_candidate_window_stress_20260516_0938_w11.json`.\n- **Soglia preregistrata**: observed rate `>=0.75`, lift contro ogni null `>=0.10`, p-value contro ogni null `<=0.05`, stato `classical_intermediate`, pass su tutte le size e finestre.\n\n## Results\n| local_window | all-mode thresholded rows | stato |\n|---:|---|---|\n| 5 | `RP_lambda_0.060` | cresta passa |\n| 7 | `RP_lambda_0.060` | cresta passa |\n| 9 | `RP_lambda_0.060` | cresta passa |\n| 11 | `[]` | nessuna riga all-mode |\n\n### Local-Window Row Counts\n| window | lambda | N=160 | N=192 | persistence |\n|---:|---|---|---|---:|\n| 5 | 0.045 | `9/12`, null `372/768`, `24/48`, max p `0.072998`, lift `0.250000`, positive_lift_unthresholded | `12/12`, null `376/768`, `20/48`, max p `0.000190`, lift `0.510417`, pass | 1/2 |\n| 7 | 0.045 | `6/12`, null `293/768`, `21/48`, max p `0.437758`, lift `0.062500`, positive_lift_unthresholded | `12/12`, null `414/768`, `24/48`, max p `0.000602`, lift `0.460938`, pass | 1/2 |\n| 9 | 0.045 | `3/12`, null `352/768`, `23/48`, max p `0.972944`, lift `-0.229167`, fail | `12/12`, null `401/768`, `24/48`, max p `0.000411`, lift `0.477865`, pass | 1/2 |\n| 11 | 0.045 | `6/12`, null `337/768`, `20/48`, max p `0.441425`, lift `0.061198`, positive_lift_unthresholded | `11/12`, null `411/768`, `24/48`, max p `0.006303`, lift `0.381510`, pass | 1/2 |\n| 5 | 0.060 | `9/12`, null `357/768`, `20/48`, max p `0.044580`, lift `0.285156`, pass | `10/12`, null `381/768`, `18/48`, max p `0.018062`, lift `0.337240`, pass | 2/2 |\n| 7 | 0.060 | `9/12`, null `318/768`, `20/48`, max p `0.020559`, lift `0.333333`, pass | `12/12`, null `368/768`, `17/48`, max p `0.000147`, lift `0.520833`, pass | 2/2 |\n| 9 | 0.060 | `9/12`, null `341/768`, `20/48`, max p `0.032377`, lift `0.305990`, pass | `9/12`, null `329/768`, `14/48`, max p `0.025102`, lift `0.321615`, pass | 2/2 |\n| 11 | 0.060 | `9/12`, null `382/768`, `23/48`, max p `0.070513`, lift `0.252604`, positive_lift_unthresholded | `12/12`, null `380/768`, `15/48`, max p `0.000215`, lift `0.505208`, pass | 1/2 |\n| 5 | 0.075 | `9/12`, null `403/768`, `23/48`, max p `0.100007`, lift `0.225260`, positive_lift_unthresholded | `12/12`, null `360/768`, `21/48`, max p `0.000113`, lift `0.531250`, pass | 1/2 |\n| 7 | 0.075 | `8/12`, null `438/768`, `24/48`, max p `0.356501`, lift `0.096354`, positive_lift_unthresholded | `9/12`, null `331/768`, `15/48`, max p `0.026214`, lift `0.319010`, pass | 1/2 |\n| 9 | 0.075 | `12/12`, null `415/768`, `20/48`, max p `0.000620`, lift `0.459635`, pass | `6/12`, null `265/768`, `12/48`, max p `0.202007`, lift `0.154948`, positive_lift_unthresholded | 1/2 |\n| 11 | 0.075 | `9/12`, null `419/768`, `23/48`, max p `0.127896`, lift `0.204427`, positive_lift_unthresholded | `9/12`, null `340/768`, `18/48`, max p `0.031714`, lift `0.307292`, pass | 1/2 |\n\n### Persistence Summary\n| lambda | pass cells / 8 | fail cells | interpretation |\n|---:|---:|---|---|\n| 0.045 | 4/8 | `window=9,N=160` hard fail | high-size echo, not boundary |\n| 0.060 | 7/8 | none hard; `window=11,N=160` positive_lift_unthresholded | persistence crest, not all-window invariant |\n| 0.075 | 4/8 | none hard; multiple p-threshold misses | adjacent coordinate-sensitive ridge |\n\n## Key Findings\n1. Verificato: nessuna riga supera tutte le finestre `5/7/9/11` e tutte le size `160/192`.\n2. Verificato: `RP_lambda_0.060` e' la riga piu persistente (`7/8` pass), ma non chiude il gate perche' a `window=11,N=160` ha `9/12`, label null `382/768`, position null `23/48`, max p `0.070513`, quindi resta `positive_lift_unthresholded`.\n3. Verificato: `RP_lambda_0.045` non va salvata come candidate storica; mostra un hard fail a `window=9,N=160` (`3/12`, lift `-0.229167`, max p `0.972944`).\n4. Verificato: `RP_lambda_0.075` non sostituisce `0.060`; alterna celle pass e celle non-thresholded, con persistenza `4/8`.\n5. Inferito dal perimetro: il terzo incluso RP finito non e' nella riga lambda. Vive nella dipendenza strutturale fra granularita' del lettore e riga candidata.\n\n## Verdict\nCONSTRAINT\n\nIl perimetro finito attuale dichiara assenza di terzo incluso RP all-window. `0.060` resta una cresta empirica utile per il prossimo stress, ma non e' un invariante. La riparazione regressiva e' completata: `local_window` entra nel claim come asse atomico, non come nota tecnica.\n\n## Bicono della scoperta\n- **Due radici**: riga lambda; operatore di unfolding.\n- **Singolare**: la cella row-aligned prima che il lettore locale decida pass/non-pass.\n- **Invariante di passaggio**: count grezzi + p-value contro due null + pass su tutte le finestre.\n- **Campo di possibilita**: possibile = stressare la cresta `0.060` su N maggiori e finestre piu larghe; non-possibile = promuovere un boundary RP a lambda singola nel perimetro `N<=192`.\n\n## Consecutio\nIl prossimo ciclo non deve cercare un'altra lambda nello stesso perimetro. Deve cambiare asse fisico: o stressare `0.060` su N maggiori con `window=11/13/15`, oppure rimbalzare su Anderson 3D usando `local_window` come parte dichiarata del lettore. Se resta su RP finito, il claim corretto e' curva di persistenza, non boundary row.\n\n## Ricadute pratiche\nssp_value: yes. Lo strumento `tools/exp_rp_unfolding_sensitivity_audit.py` resta riusabile; il prossimo miglioramento pratico e' un wrapper che accetta una lista di `local_window` e produce direttamente la tabella di persistenza.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; direzione BOUNDARY/RP seguita per contratto vivo del campo.\n- `python -m py_compile tools/exp_rp_unfolding_sensitivity_audit.py` completato.\n- Run `window=7` completato: `tools/data/rp_candidate_window_stress_20260516_1007_w7.json`.\n- Run `window=9` completato: `tools/data/rp_candidate_window_stress_20260516_1007_w9.json`.\n- Estremi `window=5/11` letti dai dati verificati del ciclo 09:38.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_rp_unfolding_sensitivity_audit.py`\n- Data: `tools/data/rp_candidate_window_stress_20260516_1007_w7.json`\n- Data: `tools/data/rp_candidate_window_stress_20260516_1007_w9.json`\n- Data reused: `tools/data/rp_candidate_window_stress_20260516_0938_w5.json`\n- Data reused: `tools/data/rp_candidate_window_stress_20260516_0938_w11.json`\n- Report: `tools/data/reports/agent_20260516_1007.md`\n",
tools/data/lab_graph.json:1762:      "content_full": "# Agent Report - RP Candidate Local-Window Stress Gate\n**Date**: 2026-05-16 09:38\n**Piano**: 125\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT/FALSIFICATION - `RP_lambda_0.045` non resta terzo incluso operativo quando il perimetro viene ristretto a candidate row + sentinels, size maggiori e unfolding locali alternativi. La riga che passa con local-window 5 e `0.060`; con local-window 11 non passa nessuna riga all-mode.\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, berry_robnick_like_gue_weight, mean_ipr, observed_successes, label_shuffle_successes, position_shift_successes, Wilson intervals, binomial-tail p-values, min_lift_against_nulls, threshold_pass, unfolding_mode, local_window]\n**observable_contract**: claim=`RP_lambda_0.045` resta boundary solo se batte label-shuffle e position-shift su size maggiori e su finestre locali alternative; observable=two-reader raw-count threshold per lambda, size, unfolding mode e local_window; operator=stress del gate 09:21 con candidate row preregistrata e sentinelle; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=candidate row `0.045`, sentinelle `0.030/0.060/0.075/0.820`, size `160/192`, seed x k = `4 x 3`; non_possible=terzo incluso stabile se la candidate row cade in una finestra locale o se una sentinella prende il ruolo; not_tested=altre finestre locali, piu seed, N oltre 192, Anderson 3D, spettri sperimentali.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + grafo/cut come lettore + tensione BOUNDARY.\n- **Dipolo / punto-zero**: boundary robusto / boundary dipendente dalla coordinata di smoothing. Punto-zero: la stessa riga lambda prima che la larghezza dell'unfolding locale scelga il confine.\n- **Piano superiore**: topologia assiomatica del bordo; la finestra locale e un operatore di bordo, non una normalizzazione neutra.\n- **Operatori laterali scelti**: boundary operator, filtrazione per scala locale, same-spectrum coordinate stress.\n- **Contaminazione cognitiva**: CE-0022 metabolizzata dal campo vivo come vincolo anti-ritorno a Sturmian; YSN DeltaLink=`candidate boundary / smoothing-scale`; Cornelius gene=`WINDOW_WIDTH_IS_PERIMETER`: DICHIARA CANDIDATE, CAMBIA FINESTRA, NON SALVARE LA RIGA.\n- **Proto-ipotesi**: il terzo incluso RP non e una lambda promossa dal ciclo precedente; e la classe di righe che resta all-size quando il bordo viene filtrato da piu larghezze locali.\n- **Possibile/non-possibile**: possibile = trattare la larghezza locale come parametro fisico del boundary; non-possibile = cristallizzare `0.045` come nucleo RP stabile nel perimetro attuale.\n- **Proiezione**: run separati con local_window `5` e `11`, size `160/192`, candidate row `0.045`, sentinelle `0.030/0.060/0.075/0.820`.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: testa direttamente il confine RP indicato dal valutatore, con `RP_lambda_0.045` come candidate row e `0.060` come sentinella coordinata-sensibile.\n- `not_drift`: non ritorna a phi, Sturmian, V_c o deposito locale; cambia solo size e larghezza di unfolding sul perimetro GUE/Poisson RP.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: Rosenzweig-Porter, Brody interpolation, Berry-Robnik mixture, unfolding sensitivity nei crossover spettrali.\n- **Cosa viene assorbito dal baseline**: la dipendenza dalla procedura di unfolding e attesa nei crossover finiti.\n- **Cosa resta Lab-specific**: il contratto row-aligned `candidate + sentinels`, con count grezzi e null prima della parola boundary.\n- **Separazione richiesta**: `two_reader_boundary_confirmed = []` sul perimetro all-window; `graph_only_residue = 0`; `scope_change_declared = local_window width promoted to perimeter`; `graph_baseline_audit = label shuffle + position shift + local-window stress`.\n\n## Claim Under Test\n> `RP_lambda_0.045` resta terzo incluso operativo quando il gate 09:21 viene ripetuto su size maggiori e local-window unfolding alternativi.\n\n## Question\nLa candidate row `0.045` sopravvive quando la larghezza dell'unfolding locale cambia, oppure il boundary RP e ancora coordinata-dipendente?\n\n## Experiment Design\n- **Script riusato**: `tools/exp_rp_unfolding_sensitivity_audit.py`.\n- **Runs**:\n  - `python tools/exp_rp_unfolding_sensitivity_audit.py --out tools/data/rp_candidate_window_stress_20260516_0938_w5.json --sizes 160,192 --lambdas 0.03,0.045,0.06,0.075,0.82 --position-offsets 1,2,3,4 --local-window 5`\n  - `python tools/exp_rp_unfolding_sensitivity_audit.py --out tools/data/rp_candidate_window_stress_20260516_0938_w11.json --sizes 160,192 --lambdas 0.03,0.045,0.06,0.075,0.82 --position-offsets 1,2,3,4 --local-window 11`\n- **Soglia preregistrata**: `observed_rate >= 0.75`, lift contro ogni null `>= 0.10`, p-value contro ogni null `<= 0.05`, stato `classical_intermediate`, pass su tutte le size e su ogni unfolding testato.\n- **Denominatori per size/mode**: observed `12`; label-shuffle `768`; position-shift `48`.\n\n## Results\n| local window | all-mode thresholded rows | state |\n|---:|---|---|\n| 5 | `RP_lambda_0.060` | candidate 0.045 cade; 0.060 passa solo in questa finestra |\n| 11 | `[]` | nessuna riga all-mode |\n\n### Candidate + Sentinels Counts\n| window | mode | size | lambda | observed | label null | label p | position null | position p | min lift | state |\n|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---|\n| 5 | global_mean | 160 | 0.045 | 9/12 | 303/768 | 0.013796 | 17/48 | 0.006140 | 0.355469 | pass |\n| 5 | global_mean | 192 | 0.045 | 12/12 | 287/768 | 0.000007 | 15/48 | 0.000001 | 0.626302 | pass |\n| 5 | local_window | 160 | 0.045 | 9/12 | 372/768 | 0.059037 | 24/48 | 0.072998 | 0.250000 | positive_lift_unthresholded |\n| 5 | local_window | 192 | 0.045 | 12/12 | 376/768 | 0.000190 | 20/48 | 0.000027 | 0.510417 | pass |\n| 5 | local_window | 160 | 0.060 | 9/12 | 357/768 | 0.044580 | 20/48 | 0.020559 | 0.285156 | pass |\n| 5 | local_window | 192 | 0.060 | 10/12 | 381/768 | 0.018062 | 18/48 | 0.001580 | 0.337240 | pass |\n| 11 | local_window | 160 | 0.045 | 6/12 | 337/768 | 0.441425 | 20/48 | 0.379769 | 0.061198 | positive_lift_unthresholded |\n| 11 | local_window | 192 | 0.045 | 11/12 | 411/768 | 0.006303 | 24/48 | 0.003174 | 0.381510 | pass |\n| 11 | local_window | 160 | 0.060 | 9/12 | 382/768 | 0.070513 | 23/48 | 0.054871 | 0.252604 | positive_lift_unthresholded |\n| 11 | local_window | 192 | 0.060 | 12/12 | 380/768 | 0.000215 | 15/48 | 0.000001 | 0.505208 | pass |\n\nLe sentinelle endpoint `0.030` e `0.820` hanno `0/12` observed in ogni size/mode e non entrano nel boundary.\n\n## Key Findings\n1. Verificato: `RP_lambda_0.045` non e all-window stable. Cade a N=160 sia con local_window 5 (`9/12`, p null massimi `0.072998`) sia con local_window 11 (`6/12`, p null massimi `0.441425`).\n2. Verificato: `RP_lambda_0.060` non e solo global-mean artifact nel perimetro window 5: passa local_window 5 su N=160 e N=192. Cade pero con window 11 a N=160 (`9/12`, label p `0.070513`, position p `0.054871`).\n3. Verificato: con window 11 nessuna riga passa `global_mean + local_window` su tutte le size. Il boundary non sopravvive come riga singola nel perimetro multi-window.\n4. Inferito dal perimetro: la coordinata regressiva mancante nel ciclo 09:21 era `local_window width`. La finestra locale non e parametro tecnico secondario: decide quale lambda puo essere chiamata boundary.\n\n## Verdict\nCONSTRAINT/FALSIFICATION\n\nIl claim \"`RP_lambda_0.045` e terzo incluso operativo unfolding-stable\" cade nel perimetro 09:38. Non va salvato spostando il focus su `0.060`: anche `0.060` e window-sensitive. La formulazione corretta e: nel RP finito il boundary two-reader resta una risposta del triplo `(lambda, size, local_window)`, non una riga lambda cristallizzabile.\n\n## Bicono della scoperta\n- **Due radici**: lambda-boundary; smoothing-boundary.\n- **Singolare**: stessa riga candidata sotto cambiamento della larghezza locale.\n- **Invariante di passaggio**: raw counts + null p-value + all-size + all-window.\n- **Campo di possibilita**: possibile = progettare il boundary come curva in `(lambda, local_window, N)`; non-possibile = promuovere `0.045` o `0.060` come nucleo stabile senza dichiarare la larghezza locale.\n\n## Consecutio\nRiparare al nodo regressivo del perimetro: il prossimo ciclo deve trattare `local_window` come asse del boundary, non come opzione. Eseguire una matrice piccola `window={5,7,9,11}` x `N={160,192}` x candidate/sentinels e riportare una curva di persistenza per lambda; solo dopo tentare il rimbalzo Anderson 3D.\n\n## Ricadute pratiche\nssp_value: yes. Lo strumento `tools/exp_rp_unfolding_sensitivity_audit.py` resta riusabile; il nuovo uso mostra che deve accettare esplicitamente matrici di `local_window` o essere wrapped da un runner di stress.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; direzione BOUNDARY/RP seguita per contratto vivo del campo.\n- `python -m py_compile tools/exp_rp_unfolding_sensitivity_audit.py` completato.\n- Run window 5 completato: `tools/data/rp_candidate_window_stress_20260516_0938_w5.json`.\n- Run window 11 completato: `tools/data/rp_candidate_window_stress_20260516_0938_w11.json`.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_rp_unfolding_sensitivity_audit.py`\n- Data: `tools/data/rp_candidate_window_stress_20260516_0938_w5.json`\n- Data: `tools/data/rp_candidate_window_stress_20260516_0938_w11.json`\n- Report: `tools/data/reports/agent_20260516_0938.md`\n",
tools/data/lab_graph.json:1813:      "content_full": "# Agent Report - RP Unfolding Sensitivity Audit\n**Date**: 2026-05-16 09:21\n**Piano**: 124\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT/FINDING - la finestra RP `0.045-0.060` non resta intera sotto unfolding alternativo. `RP_lambda_0.045` resta terzo incluso operativo in entrambi gli unfolding; `RP_lambda_0.060` e unfolding-sensitive.\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, berry_robnick_like_gue_weight, mean_ipr, observed_successes, label_shuffle_successes, position_shift_successes, Wilson intervals, binomial-tail p-values, min_lift_against_nulls, threshold_pass, unfolding_mode]\n**observable_contract**: claim=la finestra RP finita e unfolding-stable solo se le stesse righe lambda battono label-shuffle e position-shift sotto normalizzazione globale e locale; observable=thresholded two-reader raw-count pass per lambda, size e unfolding mode; operator=repeat del gate RP 08:20 con `global_mean` e `local_window`; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE su size, seed, k e unfolding mode; denominator=11 lambda per size/mode, observed denominator 12, label-null 768, position-null 120; non_possible=boundary unfolding-stable se una lambda promossa cade sotto local-window; not_tested=N piu grande, finestre locali diverse da 7, spettri sperimentali, Anderson 3D, many-body RP.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + grafo/cut come lettore + tensione BOUNDARY \"8 domini GUE, 5 Poisson\".\n- **Dipolo / punto-zero**: finestra fisica stabile / artefatto di unfolding. Punto-zero: la stessa riga lambda prima che l'unfolding scelga il confine al posto del dato.\n- **Piano superiore**: geometria dei campi e grafo della conoscenza; il confine e un trasporto tra poli che deve sopravvivere al cambio di coordinate spettrali.\n- **Operatori laterali scelti**: Hamiltonian flow, local unfolding, kNN graph cut.\n- **Contaminazione cognitiva**: CE-0019 usata per fissare combo prima della misura; CE-0022 usata per scegliere operatori senza tornare a Sturmian. YSN DeltaLink=`finestra RP / cambio di unfolding`; Cornelius gene=`UNFOLDING_BEFORE_UNIVERSALITY`: RIPETI GATE, CAMBIA COORDINATA, CONTA, TAGLIA FINESTRA.\n- **Proto-ipotesi**: il terzo incluso RP non e la regione intermedia intera; e la riga che resta classically-intermediate e graph-thresholded quando cambia la normalizzazione degli spacing.\n- **Proiezione**: misura su lambda RP, size 64/96/128, 4 seed, k=2/3/4, 64 label-shuffle per lettura, 10 position-shift, due unfolding mode.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: l'esperimento resta sul confine GUE/Poisson come terzo incluso operativo e stressa il finding fisico controllato del ciclo 08:20.\n- `not_drift`: non usa Sturmian, phi/silver/bronze, V_c o generatori locali; cambia solo la coordinata di unfolding sullo stesso perimetro RP row-aligned.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: Rosenzweig-Porter, Brody interpolation, Berry-Robnik mixture, unfolding sensitivity nei crossover spettrali.\n- **Cosa viene assorbito dal baseline**: una finestra intermedia e attesa; la dipendenza dall'unfolding e un controllo standard prima di promuovere universalita.\n- **Cosa resta Lab-specific**: il contratto `classical_intermediate + graph-thresholded + raw counts + unfolding stability` prima della parola boundary.\n- **Separazione richiesta**: `two_reader_boundary_confirmed = RP_lambda_0.045`; `unfolding_sensitive = RP_lambda_0.060`; `graph_only_residue = 0`; `graph_baseline_audit = label shuffle + position shift + unfolding switch`.\n\n## Claim Under Test\n> Nel Rosenzweig-Porter finito, una riga del confine e terzo incluso operativo solo se resta all-size thresholded sotto global mean unfolding e local-window unfolding.\n\n## Question\nLa finestra RP `0.045-0.060` del ciclo 08:20 sopporta un unfolding alternativo, o una delle due righe era coordinata-dipendente?\n\n## Ritorno fisico\n- **Punto fisico sorgente**: transizione spettrale Poisson/GUE nel Rosenzweig-Porter diagonal-plus-GUE.\n- **Attraversamento matematico**: cambio di coordinata sugli spacing, da global mean a local-window unfolding, con lo stesso grafo kNN e gli stessi null row-aligned.\n- **Punto fisico di ritorno**: una finestra finita in cui il boundary non dipende dalla normalizzazione locale degli spacing.\n- **Relazione nuova**: il boundary RP stabile e piu stretto della finestra globale: `0.045` resta, `0.060` cade.\n- **Osservabile/test fisico possibile**: ripetere `0.045` su size maggiori o su unfolding locali diversi; trattare `0.060` come coordinata sensibile.\n- **Se fallisce**: se `0.045` cade con size maggiori o altri unfolding, il risultato diventa vincolo finito, non ponte fisico.\n\n## Experiment Design\n- **Script**: `tools/exp_rp_unfolding_sensitivity_audit.py`.\n- **Run**: `python tools/exp_rp_unfolding_sensitivity_audit.py --out tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json`.\n- **Size**: 64, 96, 128.\n- **Lambdas**: 0, 0.03, 0.045, 0.06, 0.075, 0.10, 0.18, 0.32, 0.68, 0.82, 1.0.\n- **Unfolding modes**: `global_mean`, `local_window` con window=7.\n- **Denominatori per size/mode**: observed `12` = 4 seed x 3 k; label-shuffle `768` = 12 x 64; position-shift `120` = 12 x 10.\n- **Soglia preregistrata**: observed rate `>=0.75`, lift minimo contro ciascun null `>=0.10`, p-value `<=0.05` contro ciascun null, `classical_intermediate`, pass su tutte le size e su entrambi gli unfolding.\n\n## Results\n| lambda | global pass sizes | global min obs | global min lift | global max null p | local pass sizes | local min obs | local min lift | local max null p | state |\n|---:|---|---:|---:|---:|---|---:|---:|---:|---|\n| 0.045 | 64,96,128 | 1.000000 | 0.523438 | 0.000137 | 64,96,128 | 0.750000 | 0.332031 | 0.021029 | unfolding_stable |\n| 0.060 | 64,96,128 | 0.750000 | 0.343750 | 0.017103 | [] | 0.000000 | -0.350000 | 1.000000 | unfolding_sensitive |\n| 0.075 | 64,128 | 0.666667 | 0.273437 | 0.051823 | [] | 0.000000 | -0.300000 | 1.000000 | intermittent/global_only |\n\n### Row Counts\n| mode | size | lambda | observed | label null | label p | position null | position p | min lift | pass |\n|---|---:|---:|---:|---:|---:|---:|---:|---:|---|\n| global_mean | 64 | 0.045 | 12/12 | 353/768 | 0.000089 | 32/120 | 0.000000 | 0.540365 | yes |\n| global_mean | 96 | 0.045 | 12/12 | 352/768 | 0.000086 | 44/120 | 0.000006 | 0.541667 | yes |\n| global_mean | 128 | 0.045 | 12/12 | 366/768 | 0.000137 | 34/120 | 0.000000 | 0.523438 | yes |\n| local_window | 64 | 0.045 | 12/12 | 353/768 | 0.000089 | 36/120 | 0.000001 | 0.540365 | yes |\n| local_window | 96 | 0.045 | 12/12 | 355/768 | 0.000095 | 44/120 | 0.000006 | 0.537760 | yes |\n| local_window | 128 | 0.045 | 9/12 | 321/768 | 0.021029 | 48/120 | 0.015267 | 0.332031 | yes |\n| local_window | 64 | 0.060 | 4/12 | 319/768 | 0.805893 | 56/120 | 0.889085 | -0.133333 | no |\n| local_window | 96 | 0.060 | 4/12 | 355/768 | 0.883142 | 53/120 | 0.852526 | -0.128906 | no |\n| local_window | 128 | 0.060 | 0/12 | 231/768 | 1.000000 | 42/120 | 1.000000 | -0.350000 | no |\n\n## Key Findings\n1. Verificato: `RP_lambda_0.045` passa in `global_mean` e `local_window` su tutte le size. Il punto debole e local-window N=128 con `9/12`, ma resta sopra soglia con max null p=`0.021029` e min lift=`0.332031`.\n2. Verificato: `RP_lambda_0.060` passa in global_mean su tutte le size, ma cade in local-window con `4/12`, `4/12`, `0/12`; i p-value locali sono alti e il lift minimo diventa negativo.\n3. Verificato: `RP_lambda_0.075` non era all-size neppure in global_mean e cade interamente in local-window.\n4. Inferito dal perimetro: il boundary fisico controllato non e la finestra `0.045-0.060`; il nucleo unfolding-stable e `0.045`, mentre `0.060` e una coordinata utile ma non invariante.\n\n## Verdict\nCONSTRAINT/FINDING\n\nIl finding 08:20 viene ristretto al nodo regressivo giusto: non \"finestra RP `0.045-0.060` stabile\", ma \"`RP_lambda_0.045` e terzo incluso operativo unfolding-stable nel perimetro finito testato\". `RP_lambda_0.060` resta boundary global-mean, non boundary invariantoide. Il prossimo ciclo deve stressare `0.045`, non salvare `0.060`.\n\n## Bicono della scoperta\n- **Due radici**: boundary robusto; boundary coordinata-dipendente.\n- **Singolare**: stessa riga lambda sotto cambio di unfolding.\n- **Invariante di passaggio**: `classical_intermediate + raw-count threshold + all-size + all-unfolding`.\n- **Campo di possibilita**: possibile = usare `0.045` come nucleo RP per size/unfolding stress; non-possibile = promuovere `0.060` come stabile senza qualificare global_mean.\n\n## Consecutio\nPortare `RP_lambda_0.045` su un controllo piu duro: size maggiore oppure seconda finestra locale. Se regge, rimbalzo fisico B su Anderson 3D con gate raw-count; se cade, cristallizzare `finite_RP_lambda_0.045_boundary` come vincolo di perimetro.\n\n## Ricadute pratiche\nssp_value: yes. `tools/exp_rp_unfolding_sensitivity_audit.py` e uno stress-test riusabile per separare boundary stabile da boundary dipendente dalla normalizzazione degli spacing.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale su TRASCENDENZA_LIMITE; direzione BOUNDARY ha prevalso per contratto vivo del campo.\n- `python -m py_compile tools/exp_rp_unfolding_sensitivity_audit.py` completato.\n- `python tools/exp_rp_unfolding_sensitivity_audit.py --out tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json` completato.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_rp_unfolding_sensitivity_audit.py`\n- Data: `tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json`\n- Report: `tools/data/reports/agent_20260516_0921.md`\n",
tools/data/lab_graph.json:1864:      "content_full": "# Agent Report - Anderson 3D Mobility-Edge Two-Reader Audit\n**Date**: 2026-05-15 19:47  \n**Piano**: 123  \n**Tension explored**: BOUNDARY (0.8)  \n**verdict**: CONSTRAINT - il gate two-reader trasferisce fuori da Rosenzweig-Porter su Anderson 3D solo come riga finita W=20; le righe W=16/16.5 sono mobility-edge candidate ma non size-stable.  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, wigner_poisson_like_weight, mean_ipr, participation_entropy, graph_bridge_frequency, size_stability, centroid_margin, cross_neighbor_fraction, classical_audit_state]  \n**observable_contract**: claim=il gate BOUNDARY trasferisce oltre RP solo se la stessa riga Anderson W resta stable_graph_bridge+classical_intermediate su tutte le taglie testate; observable=two_reader_all_sizes da graph_bridge_frequency unita ad adjacent ratio, Brody q, peso Wigner/Poisson, IPR ed entropia di partecipazione; operator=Hamiltoniana Anderson 3D tight-binding periodica, sweep disorder, perturbazione seed+kNN; generator=H=sum_i eps_i |i><i| + hopping primi vicini su L^3, eps_i uniform[-W/2,W/2]; denominator=11 righe W identiche su L={5,6}; non_possible=trasferimento cross-dominio se nessuna riga W e stable_graph_bridge+classical_intermediate in tutte le taglie; not_tested=limite termodinamico, esponente critico, boundary conditions alternative, sparse large-L, spettri sperimentali.\n\n## Prima impressione\nIl gate attraversa il dominio, ma non cade sul numero noto W_c. Il lettore grafico vede anche lato metallico come ponte; il boundary a due lettori sopravvive solo dove il lettore classico smette di chiamare endpoint.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + Anderson localization/mobility edge + tensione seme \"trasferire il gate two-reader size-stable fuori da RP\".\n- **Dipolo / punto-zero**: polo metallico Wigner-Dyson / polo localizzato Poisson. Punto-zero: riga W in cui graph bridge e intermediacy classica concordano attraversando la taglia.\n- **Piano superiore**: geometria del campo Hamiltoniano disordinato; il disorder W non vale come soglia nota, vale come riga row-aligned letta da due strumenti.\n- **Operatori laterali scelti**: spettro Hamiltoniano, Anderson localization, grafo kNN. Entrano per spostare il gate da RP a un flusso fisico con mobility edge.\n- **Contaminazione cognitiva**: CE-0019 `Respiro fuori-tempo` usata per fissare combo prima dei numeri; CE-0022 `Palette operatoria espansa del Lab` usata con operatori spettro/localizzazione/grafo; YSN DeltaLink=`RP_lambda / Anderson_W`; Cornelius gene=`Anderson_Two_Reader`: GENERA W, DIAGONALIZZA L^3, MISURA classico, COSTRUISCI grafo, INTERSECA taglie.\n- **Proto-ipotesi**: un boundary fisico trasferibile non conserva il parametro RP; conserva il contratto row-aligned tra lettore classico e lettore grafico. Se la riga cade sul lato endpoint, e residuo del lettore.\n- **Proiezione**: sweep W su L={5,6}, seed={202605151947,202605151948}, k={2,3,4}; la riga sopravvive solo se e stable_graph_bridge+classical_intermediate in entrambe le taglie.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: il ciclo applica lo stesso gate two-reader size-stable a un secondo flusso fisico row-aligned, Anderson 3D/mobility-edge, dopo RP.\n- `not_drift`: non torna a phi/Sturmian, V_c o a un deposito RP; RP resta solo contratto operativo, non sorgente del risultato.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: transizione Anderson 3D Wigner-Dyson/Poisson con mobility edge/disorder criticale finito vicino a W_c nel modello tight-binding.\n- **Cosa viene assorbito dal baseline**: W=8,12,14,17 sono stable graph bridge ma endpoint Wigner per il lettore classico; sono lato metallico/finite-size, non boundary Lab.\n- **Cosa resta Lab-specific**: il contratto two-reader row-aligned come audit finito. Non e una nuova stima di W_c.\n- **Cosa resta artifact/classificazione grafica**: `graph_only_residue_by_size = {L5: 3, L6: 4}`; questi residui non vengono sommati al boundary a due lettori.\n- **Correzione L3/L5 richiesta**: `two_reader_boundary_confirmed = 1`; `graph_only_residue = 3/4 by size`; `scope_change_declared = true`; `graph_baseline_audit = kNN stability + adjacent-r/Brody/Wigner-Poisson/IPR row-aligned`.\n\n## Claim Under Test\n> Il gate two-reader size-stable attraversa da Rosenzweig-Porter ad Anderson 3D se una riga W resta insieme ponte grafico stabile e intermedia classica su L={5,6}.\n\n## Question\nIl boundary come intersezione lettore classico + lettore grafico attraversa il dominio Anderson, oppure resta specifico del flusso RP?\n\n## Ritorno fisico\n- **Punto fisico sorgente**: crossover RP tra Poisson e Wigner-Dyson/GUE-like.\n- **Attraversamento matematico**: contratto row-aligned a due lettori, con grafo kNN perturbato e audit spettrale classico.\n- **Punto fisico di ritorno**: Anderson 3D tight-binding con transizione metallico/localizzato.\n- **Relazione nuova**: il gate trasferisce come procedura di audit finite-size, ma la riga fisica si sposta: non `lambda=0.060`, bensi disorder W=20 nel perimetro L={5,6}.\n- **Osservabile/test fisico possibile**: ripetere con L maggiori e sparse eigensolver vicino al centro banda; il segnale e la convergenza o caduta della riga W=20 rispetto a W=16/16.5.\n- **Se fallisce**: se W=20 cade con L maggiori e W=16/16.5 diventa stabile, il ciclo attuale resta scaffold finite-size; se nessuna riga resta a due lettori, il trasferimento Anderson e falsificato.\n\n## Experiment Design\n- **Script**: `tools/exp_anderson3d_mobility_edge_two_reader_audit.py`.\n- **Run**: `python tools/exp_anderson3d_mobility_edge_two_reader_audit.py --out tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json`.\n- **Denominatore**: 11 righe W: 2, 4, 8, 12, 14, 16, 16.5, 17, 20, 24, 32.\n- **Taglie**: L={5,6}, sites={125,216}; reps=8; central fraction=0.45.\n- **Perturbazione grafo**: seed={202605151947,202605151948}, k={2,3,4}; 6 letture grafiche per taglia.\n- **Contratto osservabile-operatore**: il ciclo testa trasferimento cross-dominio del gate; non testa stima asintotica di W_c o scaling critico.\n\n## Results\n| summary | value |\n|---|---:|\n| sizes analyzed | 2 |\n| disorder rows | 11 |\n| two_reader_all_sizes | 1 |\n| two_reader_intermittent | 2 |\n| graph_only_residue L=5 | 3 |\n| graph_only_residue L=6 | 4 |\n\n| L | two-reader rows | graph-only residue | classic-only residue |\n|---:|---|---:|---:|\n| 5 | W=16.00, W=20.00 | 3 | 3 |\n| 6 | W=16.50, W=20.00 | 4 | 4 |\n\n| row | cross-size state | min graph frequency | max graph frequency | adjacent r by L |\n|---|---|---:|---:|---|\n| W=16.00 | intermittent two-reader | 0.667 | 0.833 | 0.502545, 0.514892 |\n| W=16.50 | intermittent two-reader | 0.500 | 1.000 | 0.520130, 0.504157 |\n| W=20.00 | two-reader all sizes | 1.000 | 1.000 | 0.494405, 0.491363 |\n\n| row | size states |\n|---|---|\n| W=8.00 | L5/L6 stable_graph_bridge+classical_wigner_endpoint |\n| W=12.00 | L5/L6 stable_graph_bridge+classical_wigner_endpoint |\n| W=14.00 | L5 parameter_sensitive_bridge+classical_wigner_endpoint; L6 stable_graph_bridge+classical_wigner_endpoint |\n| W=17.00 | L5/L6 stable_graph_bridge+classical_wigner_endpoint |\n| W=20.00 | L5/L6 stable_graph_bridge+classical_intermediate |\n\n## Key Findings\n1. Verificato: `Anderson3D_W_20.00` e l'unica riga stable_graph_bridge+classical_intermediate in entrambe le taglie testate.\n2. Verificato: `W=16.00` e `W=16.50` sono righe intermittenti; si alternano tra ponte stabile e ponte parametrico/classico intermedio.\n3. Verificato: il grafo produce residui endpoint Wigner stabili su W=8,12,17 e parzialmente W=14. Questi sono `graph_only_residue`, non two-reader boundary.\n4. Inferito dal perimetro: la riga W=20 sopra il mobility edge noto segnala finite-size/local-unfolding sensitivity; il gate trasferisce come audit, non come nuova stima critica.\n\n## Verdict\nCONSTRAINT\n\nIl gate two-reader attraversa Anderson 3D nel perimetro finito, ma non chiude il mobility edge. La riga promuovibile e operativa, non fisica-asintotica: `W=20` e il punto in cui i due lettori concordano su L={5,6}; `W=16/16.5` resta il contro-perimetro da stressare con L maggiori.\n\n## Bicono della scoperta\n- **Due radici**: riga W a due lettori; residuo grafico endpoint Wigner.\n- **Singolare**: disorder row-aligned prima della classificazione metallico/localizzato.\n- **Invariante di passaggio**: concordanza `stable_graph_bridge + classical_intermediate` su taglie multiple.\n- **Campo di possibilita**: possibile = usare il gate come audit finite-size Anderson/RP; non-possibile = identificare il mobility edge da ponte grafico senza audit classico o da una taglia sola.\n\n## Consecutio\nIl prossimo ciclo utile non aggiunge metriche. Deve aumentare la taglia o usare sparse eigensolver vicino al centro banda per decidere se W=20 e shift finito del lettore o se W=16/16.5 diventa la riga two-reader quando il sistema si avvicina al limite.\n\n## Ricadute pratiche\nssp_value: yes. Lo script e riusabile per audit two-reader su flussi Anderson 3D e restituisce righe all-size, righe intermittenti, residui graph-only e classic-only.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale `TENS_SCALE_TRASCENDENZA_LIMITE`; la direzione viva BOUNDARY ha prevalso per aderenza esplicita al campo.\n- `python -m py_compile tools/exp_anderson3d_mobility_edge_two_reader_audit.py` completato.\n- `python tools/exp_anderson3d_mobility_edge_two_reader_audit.py --out tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json` completato.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_anderson3d_mobility_edge_two_reader_audit.py`\n- Data: `tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json`\n- Report: `tools/data/reports/agent_20260515_1947.md`\n",
tools/data/lab_graph.json:1915:      "content_full": "# Agent Report - RP Boundary Size-Stability Audit\n**Date**: 2026-05-15 19:40  \n**Piano**: 122  \n**Tension explored**: BOUNDARY (0.8)  \n**verdict**: CONSTRAINT - la riga Rosenzweig-Porter `lambda=0.060` sopravvive come unico boundary a due lettori su N={64,96,128}; le righe adiacenti sono intermittenti.  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, berry_robnick_like_gue_weight, mean_ipr, graph_bridge_frequency, size_stability, centroid_margin, cross_neighbor_fraction, classical_audit_state]  \n**observable_contract**: claim=il gate RP a due lettori e fisico solo se la stessa riga lambda resta stabile attraversando le taglie; observable=two_reader_all_sizes da graph_bridge_frequency unita a Brody q, peso Wigner/Poisson, SR e IPR; operator=flusso Rosenzweig-Porter diagonal-plus-GUE ripetuto su N, seed e perturbazioni kNN; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=11 righe lambda identiche su N={64,96,128}; non_possible=claim fisico two-reader se nessuna riga e stable_graph_bridge+classical_intermediate in tutte le taglie; not_tested=limite N infinito, unfolding alternativi, Anderson/mobility edge, varianti many-body.\n\n## Prima impressione\nIl confine RP non si allarga quando cambia la taglia. Il punto-zero resta `lambda=0.060`; `0.045` e `0.075` sono bordo mobile del lettore, non boundary.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + flusso Hamiltoniano RP + tensione BOUNDARY \"8 domini GUE, 5 Poisson\".\n- **Dipolo / punto-zero**: polo Poisson diagonale / polo GUE. Punto-zero: riga lambda che resta insieme ponte grafico stabile e intermedia classica su piu taglie.\n- **Piano superiore**: geometria del campo Hamiltoniano con audit di scala; la riga non vale perche appare in un run, vale se attraversa N senza perdere il doppio lettore.\n- **Operatori laterali scelti**: spettro Hamiltoniano, flusso/stabilita, grafo kNN. Entrano per trasformare il residuo 19:33 in stress di scala, non in nuova metrica.\n- **Contaminazione cognitiva**: CE-0019 `Respiro fuori-tempo` usata per costruire la combo prima dei numeri; CE-0022 `Palette operatoria espansa del Lab` usata con operatori spettro/flusso/grafo; YSN DeltaLink=`riga finita / riga size-stable`; Cornelius gene=`RP_Size_Gate`: GENERA taglia, MISURA classico, COSTRUISCI grafo, INTERSECA righe, SEPARA intermittenti.\n- **Proto-ipotesi**: il terzo incluso operativo nel flusso RP e una riga size-stable; una fascia lambda che compare solo in alcune taglie appartiene al lettore, non al boundary.\n- **Proiezione**: stessa griglia lambda su N={64,96,128}, seed={202605151940,202605151941}, k={2,3,4}; la riga sopravvive solo se e `stable_graph_bridge+classical_intermediate` in tutte le taglie.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: il ciclo resta sul confine GUE/Poisson e testa il terzo incluso operativo dentro un flusso Hamiltoniano controllato, con separazione tra endpoint, riga a due lettori e residui del grafo.\n- `not_drift`: non usa phi/Sturmian, V_c o il report 18:26 bloccato; usa il 19:33 solo come nodo regressivo da stressare su taglia.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: crossover Rosenzweig-Porter / Wigner-Dyson-GUE vs Poisson, letto con adjacent gap ratio, Brody q e mistura Wigner/Poisson.\n- **Cosa viene assorbito dal baseline**: la fascia classica intermedia ampia: 8 righe classic-only per ogni taglia non sono finding Lab.\n- **Cosa resta Lab-specific**: il contratto two-reader size-stable come audit operativo finite-size. Non e una scoperta RP nuova.\n- **Cosa resta artifact/classificazione grafica**: `RP_lambda_0.045` e `RP_lambda_0.075` sono intermittenti; appaiono in alcune taglie o con frequenza insufficiente.\n- **Correzione L3/L5 richiesta**: `two_reader_boundary_confirmed = 1`; `graph_only_residue = 0`; `scope_change_declared = true`; `graph_baseline_audit = kNN stability + size sweep + Brody/Berry-like row-aligned`. Non sommo le righe classic-only al boundary a due lettori.\n\n## Claim Under Test\n> Nel flusso Rosenzweig-Porter, il BOUNDARY fisico e la riga lambda che resta `stable_graph_bridge+classical_intermediate` su tutte le taglie testate.\n\n## Question\nLa riga `RP_lambda_0.060` del 19:33 sopravvive come boundary size-stable, oppure era un punto finito dipendente da N=96?\n\n## Ritorno fisico\n- **Punto fisico sorgente**: transizione spettrale tra indipendenza/localizzazione Poisson e repulsione GUE.\n- **Attraversamento matematico**: Hamiltoniana diagonal-plus-GUE, osservabili sui gap, Brody/Berry-like e grafo kNN perturbato su taglie multiple.\n- **Punto fisico di ritorno**: un audit finite-size per localizzare la riga di crossover RP che ha concordanza tra lettore classico e lettore grafico.\n- **Relazione nuova**: il gate fisico non e il numero di righe intermedie, ma l'intersezione size-stable delle righe a due lettori.\n- **Osservabile/test fisico possibile**: ripetere su N maggiori o su Anderson 3D multi-size; il segnale e la persistenza della stessa riga a due lettori.\n- **Se fallisce**: se `lambda=0.060` cade con N maggiori o unfolding alternativi, il gate RP resta scaffold finite-size e non criterio fisico promuovibile.\n\n## Experiment Design\n- **Script**: `tools/exp_rp_boundary_size_stability_audit.py`.\n- **Run**: `python tools/exp_rp_boundary_size_stability_audit.py --out tools/data/rp_boundary_size_stability_audit_20260515_1940.json`.\n- **Denominatore**: 11 righe lambda: 0, 0.03, 0.045, 0.06, 0.075, 0.10, 0.18, 0.32, 0.68, 0.82, 1.0.\n- **Taglie**: N={64,96,128}; reps=12; central fraction=0.6.\n- **Perturbazione grafo**: seed={202605151940,202605151941}, k={2,3,4}; 6 letture grafiche per taglia.\n- **Contratto osservabile-operatore**: il ciclo testa stabilita cross-size del gate RP; non testa universalita asintotica, altre normalizzazioni di unfolding o sistemi Anderson.\n\n## Results\n| summary | value |\n|---|---:|\n| sizes analyzed | 3 |\n| lambda rows | 11 |\n| two_reader_all_sizes | 1 |\n| two_reader_intermittent | 2 |\n| graph_only_residue | 0 |\n\n| N | two-reader rows | graph-only residue | classic-only residue |\n|---:|---|---:|---:|\n| 64 | RP_lambda_0.060, RP_lambda_0.075 | 0 | 8 |\n| 96 | RP_lambda_0.045, RP_lambda_0.060 | 0 | 8 |\n| 128 | RP_lambda_0.045, RP_lambda_0.060 | 0 | 8 |\n\n| row | cross-size state | min graph frequency | max graph frequency |\n|---|---|---:|---:|\n| RP_lambda_0.045 | intermittent two-reader | 0.500 | 1.000 |\n| RP_lambda_0.060 | two-reader all sizes | 0.833 | 1.000 |\n| RP_lambda_0.075 | intermittent two-reader | 0.333 | 1.000 |\n\n## Key Findings\n1. Verificato: `RP_lambda_0.060` e l'unica riga `stable_graph_bridge+classical_intermediate` in tutte le taglie testate.\n2. Verificato: `RP_lambda_0.045` e intermittente; e stabile a N=96 e N=128, ma solo parameter-sensitive a N=64.\n3. Verificato: `RP_lambda_0.075` e intermittente; e stabile a N=64, ma parameter-sensitive a N=96 e N=128.\n4. Verificato: `graph_only_residue = 0` su tutte le taglie. Il residuo Lab-specific graph-only non rientra nel flusso RP size-sweep.\n5. Verificato: ogni taglia produce 8 righe classic-only. La fascia classica ampia e baseline di crossover, non terzo incluso operativo.\n\n## Verdict\nCONSTRAINT\n\nIl gate RP a due lettori sopravvive nel perimetro finito come una sola riga size-stable: `lambda=0.060`. Le righe `0.045` e `0.075` delimitano il bordo mobile del lettore. Il claim promuovibile resta operativo e stretto: boundary fisico RP = intersezione cross-size di ponte grafico stabile e intermediacy classica, non fascia classica e non residuo graph-only.\n\n## Bicono della scoperta\n- **Due radici**: riga a due lettori size-stable; fascia classica intermedia.\n- **Singolare**: lambda row-aligned prima della classificazione per taglia.\n- **Invariante di passaggio**: `stable_graph_bridge + classical_intermediate` presente in ogni N testato.\n- **Campo di possibilita**: possibile = audit finite-size di crossover RP/Anderson con intersezione cross-size; non-possibile = chiamare boundary una riga intermittente o una fascia classic-only.\n\n## Consecutio\nIl prossimo ciclo utile porta lo stesso contratto su Anderson 3D multi-size o aumenta N/reps su RP. La domanda non e aggiungere metriche: e vedere se `lambda=0.060` resta riga fisica o si sposta quando il controllo diventa piu vicino al limite asintotico.\n\n## Ricadute pratiche\nssp_value: yes. Lo script e riusabile per stressare gate GUE/Poisson controllati su taglie multiple e restituisce direttamente righe all-size, righe intermittenti, residui graph-only e residui classic-only.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale `TENS_SCALE_TRASCENDENZA_LIMITE`; la direzione viva BOUNDARY ha prevalso per aderenza al campo.\n- `python -m py_compile tools/exp_rp_boundary_size_stability_audit.py` completato.\n- `python tools/exp_rp_boundary_size_stability_audit.py --out tools/data/rp_boundary_size_stability_audit_20260515_1940.json` completato.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_rp_boundary_size_stability_audit.py`\n- Data: `tools/data/rp_boundary_size_stability_audit_20260515_1940.json`\n- Report: `tools/data/reports/agent_20260515_1940.md`\n",
tools/data/lab_graph.json:1966:      "content_full": "# Agent Report - Rosenzweig-Porter Physical Bridge Audit\n**Date**: 2026-05-15 19:33  \n**Piano**: 121  \n**Tension explored**: BOUNDARY (0.8)  \n**verdict**: CONSTRAINT - il gate a due lettori trasferisce sul flusso Rosenzweig-Porter solo in una riga stabile; il residuo Lab-specific graph-only cade a zero nel perimetro fisico controllato.  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, SR_local_rigidity, brody_q, berry_robnick_like_gue_weight, mean_ipr, graph_bridge_frequency, centroid_margin, cross_neighbor_fraction, classical_audit_state]  \n**observable_contract**: claim=il BOUNDARY a due lettori trasferisce a un crossover fisico controllato solo dove stabilita grafica e intermediacy classica concordano sulla stessa riga lambda; observable=graph_bridge_frequency unito a Brody q, peso Wigner/Poisson, SR e IPR; operator=flusso Hamiltoniano Rosenzweig-Porter diagonal-plus-GUE con perturbazione kNN; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=13 righe lambda x 3 seed x k={2,3,4}; non_possible=claim Lab-specific graph-only se ogni ponte grafico stabile e anche intermedio classico, oppure claim fisico se dominano righe classic-only; not_tested=universalita asintotica RP, unfolding alternativi, spettri sperimentali, many-body localization.\n\n## Prima impressione\nIl confine fisico non eredita i tre residui graph-only del perimetro Lab. Quando il sistema ha un parametro Hamiltoniano vero, il grafo trova un solo punto-zero stretto e il lettore classico vede una fascia piu larga.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + grafo/crossover spettrale + tensione BOUNDARY \"8 domini GUE, 5 Poisson\".\n- **Dipolo / punto-zero**: polo diagonale Poisson / polo GUE. Punto-zero: riga lambda in cui il flusso e tra i due poli senza essere endpoint.\n- **Piano superiore**: geometria del campo Hamiltoniano; il parametro lambda e il grafo non decidono separatamente, devono convergere sulla stessa riga.\n- **Proto-ipotesi**: il residuo graph-only del perimetro composito Lab non e una legge del boundary; in un flusso fisico controllato sopravvive solo se resta graph bridge senza essere gia spiegato dal crossover classico.\n- **Possibile/non-possibile**: possibile = usare `graph_bridge_frequency + classical_audit_state` come audit fisico finite-size; non-possibile = promuovere graph-only bridge senza Hamiltoniana controllata o sommare classic-only e graph-only.\n- **Proiezione**: 13 lambda Rosenzweig-Porter, tre seed, kNN k=2/3/4, Brody/Berry-like e grafo sulle stesse righe.\n\n### Contaminazione cognitiva\n- **CE-0019 metabolizzata**: `tools/data/cognitive_enzymes_archive.md`, voce `CE-0019 - Respiro fuori-tempo`. Enzima usato: combo prima della misura; impedisce di ripetere il deposito 13 righe e forza il rientro in un flusso fisico.\n- **CE-0022 metabolizzata**: `tools/data/cognitive_enzymes_archive.md`, voce `CE-0022 - Palette operatoria espansa del Lab`. Operatori scelti: spettro Hamiltoniano, grafo, controllo/null; scartati operatori che producevano solo analogia.\n- **YSN DeltaLink**: `residuo graph-only Lab / flusso Hamiltoniano controllato`.\n- **Cornelius gene**: `RP_Two_Reader_Audit`: GENERA lambda, MISURA classico, COSTRUISCI grafo, STRESSA k/seed, SEPARA residui.\n- **KSAR step**: reiterazione del kernel 19:15 su un dominio fisico nuovo; nessuna promozione del residuo prima del test.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: l'esperimento porta il perimetro vivo GUE/Poisson su un sistema Rosenzweig-Porter controllato e testa il confine come terzo incluso operativo con due lettori.\n- `not_drift`: non usa phi/Sturmian, V_c o il report 18:26 bloccato; usa la consecutio 19:15 solo come ponte verso Hamiltoniana fisica row-aligned.\n\n## Re-discovery audit\n- **Baseline noto piu vicino**: crossover Rosenzweig-Porter / Wigner-Dyson-GUE vs Poisson, letto con adjacent gap ratio, Brody q e mistura Wigner/Poisson.\n- **Cosa viene assorbito dal baseline**: la riga `RP_lambda_0.060` e classica e grafica insieme; non e scoperta fisica nuova, e il punto finito in cui i due lettori concordano.\n- **Cosa resta Lab-specific**: nessun `stable_graph_bridge+endpoint` resta. `graph_only_residue = 0`.\n- **Cosa resta artifact/classificazione grafica**: `RP_lambda_0.100` e ponte parametrico, non stabile; dipende da k e seed.\n- **Cosa resta classic-only**: 11 righe sono intermedie per il lettore classico senza ponte grafico stabile. Questo e crossover scalare o discordanza del lettore Berry-like, non terzo incluso operativo.\n- **Correzione L3/L5 richiesta**: `two_reader_boundary_confirmed = 1`; `graph_only_residue = 0`; `scope_change_declared = true`; `graph_baseline_audit = kNN stability + Brody/Berry-like row-aligned`. Non sommo le 11 righe classic-only al boundary a due lettori.\n\n## Claim Under Test\n> Nel flusso Rosenzweig-Porter controllato, il BOUNDARY a due lettori sopravvive solo dove una riga lambda e insieme ponte grafico stabile e intermedia classica.\n\n## Question\nIl residuo graph-only del perimetro Lab sopravvive fuori dal deposito composito, oppure il crossover fisico lo assorbe?\n\n## Ritorno fisico\n- **Punto fisico sorgente**: transizione spettrale tra indipendenza/localizzazione Poisson e repulsione GUE.\n- **Attraversamento matematico**: Hamiltoniana diagonal-plus-GUE, osservabili canonici sui gap, Brody/Berry-like e grafo kNN perturbato.\n- **Punto fisico di ritorno**: il gate a due lettori diventa un audit finite-size del punto di crossover, non un claim graph-only autonomo.\n- **Osservabile/test fisico possibile**: ripetere su Anderson 3D multi-size o RP con unfolding locale; il segnale da cercare e stabilita della riga a due lettori, non crescita del numero di intermedi classici.\n- **Se fallisce**: se lambda 0.060 sparisce con N/reps maggiori, il gate fisico diventa solo scaffold; se emergono graph-only stabili, il residuo Lab rientra come candidato da isolare.\n\n## Experiment Design\n- **Script**: `tools/exp_rosenzweig_porter_bridge_physical_audit.py`.\n- **Run**: `python tools/exp_rosenzweig_porter_bridge_physical_audit.py --out tools/data/rosenzweig_porter_bridge_physical_audit_20260515_1933.json`.\n- **Hamiltoniana**: `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`, `N=96`, `reps=24`, central fraction 0.6.\n- **Denominatore**: 13 righe lambda: 0, 0.01, 0.03, 0.06, 0.10, 0.18, 0.32, 0.50, 0.68, 0.82, 0.90, 0.97, 1.0.\n- **Perturbazione grafo**: seed={202605151933,202605151934,202605151935}, k={2,3,4}, 9 letture.\n- **Contratto osservabile-operatore**: il ciclo testa trasferimento del gate composito su un flusso fisico; non testa limite asintotico, unfolding dedicato o dati sperimentali.\n\n## Results\n| summary | value |\n|---|---:|\n| rows analyzed | 13 |\n| graph reader runs | 9 |\n| two_reader_boundary_confirmed | 1 |\n| graph_only_residue | 0 |\n| classic_only_residue | 11 |\n\n| composite state | count |\n|---|---:|\n| stable_graph_bridge+classical_intermediate | 1 |\n| parameter_sensitive_bridge+classical_intermediate | 1 |\n| unstable_non_bridge+classical_intermediate | 10 |\n| unstable_non_bridge+classical_poisson_endpoint | 1 |\n\n| row | graph frequency | classical state | Brody q | Wigner/Poisson weight | SR |\n|---|---:|---|---:|---:|---:|\n| RP_lambda_0.000 | 0.000 | classical_poisson_endpoint | 0.000 | 0.000 | 0.383 |\n| RP_lambda_0.030 | 0.000 | classical_intermediate | 0.427 | 0.300 | 0.510 |\n| RP_lambda_0.060 | 1.000 | classical_intermediate | 0.540 | 0.373 | 0.528 |\n| RP_lambda_0.100 | 0.667 | classical_intermediate | 0.653 | 0.420 | 0.524 |\n| RP_lambda_0.180 | 0.222 | classical_intermediate | 0.813 | 0.460 | 0.534 |\n| RP_lambda_0.500 | 0.000 | classical_intermediate | 0.900 | 0.493 | 0.535 |\n| RP_lambda_1.000 | 0.000 | classical_intermediate | 0.980 | 0.507 | 0.534 |\n\n## Key Findings\n1. Verificato: `RP_lambda_0.060` e l'unica riga `stable_graph_bridge+classical_intermediate`, 9/9 letture grafiche.\n2. Verificato: `RP_lambda_0.100` e ponte parametrico, 6/9 letture; non entra nel boundary confermato.\n3. Verificato: `graph_only_residue = 0`. I tre residui graph-only del perimetro Lab 19:15 non trasferiscono come residui autonomi nel flusso RP.\n4. Verificato: il lettore classico e largo: marca 11/13 righe come `classical_intermediate`. Questa fascia e baseline di crossover o discordanza del lettore scalare, non finding Lab.\n5. Inferito dal perimetro: il nodo regressivo corregge il contratto da \"ponte grafico stabile\" a \"riga fisica a due lettori\"; il grafo da solo non basta.\n\n## Verdict\nCONSTRAINT\n\nIl boundary fisico esiste nel perimetro RP finito come una riga a due lettori: `lambda=0.060`. Il residuo graph-only non sopravvive. La parte nuova del ciclo non e una scoperta RP, ma il vincolo operativo: il gate Lab-specific deve perdere autorita quando un flusso Hamiltoniano controllato lo assorbe nel crossover classico.\n\n## Bicono della scoperta\n- **Due radici**: crossover classico scalare; ponte grafico stabile.\n- **Singolare**: lambda row-aligned prima della promozione a boundary.\n- **Invariante di passaggio**: concordanza `stable_graph_bridge + classical_intermediate`.\n- **Campo di possibilita**: audit fisico finite-size su RP/Anderson con due lettori.\n- **Campo non-possibile**: residuo graph-only come legge del confine in assenza di sopravvivenza su Hamiltoniana controllata.\n\n## Consecutio\nIl prossimo ciclo utile non deve aumentare il numero di metriche. Deve stressare la riga `RP_lambda_0.060` su taglie/repliche o portare lo stesso contratto su Anderson 3D multi-size. Il criterio e semplice: se la riga a due lettori resta, il gate diventa strumento fisico finite-size; se cade, BOUNDARY torna a scaffold di classificazione.\n\n## Ricadute pratiche\nssp_value: yes. Lo script e riusabile come audit fisico two-reader per flussi Hamiltoniani controllati e separa automaticamente conferma a due lettori, graph-only residue e classic-only residue.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante locale `TENS_SCALE_TRASCENDENZA_LIMITE`; la direzione viva BOUNDARY ha prevalso per aderenza al campo.\n- `python -m py_compile tools/exp_rosenzweig_porter_bridge_physical_audit.py` completato.\n- `python tools/exp_rosenzweig_porter_bridge_physical_audit.py --out tools/data/rosenzweig_porter_bridge_physical_audit_20260515_1933.json` completato.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_rosenzweig_porter_bridge_physical_audit.py`\n- Data: `tools/data/rosenzweig_porter_bridge_physical_audit_20260515_1933.json`\n- Report: `tools/data/reports/agent_20260515_1933.md`\n",
tools/data/lab_graph.json:2015:      "findings": "1. Verificato: il denominatore resta quello richiesto, 13 righe con 8 GUE e 5 Poisson.\n2. Verificato: un solo nodo ponte del grafo e' anche intermedio classico: `numeri_primi:cycle_3`.\n3. Verificato: tre nodi ponte sono graph-only: `percolation:cycle_9`, `reaction_diffusion:cycle_11`, `logistica_biforcazione_var_3.5699:cycle_13`.\n4. Verificato: quattro righe sono classic-only intermediate senza es",
tools/data/lab_graph.json:2017:      "content_full": "# Agent Report - Boundary Classical Crossover Audit\n**Date**: 2026-05-15 19:04\n**Piano**: 120\n**Tension explored**: BOUNDARY (0.8)\n**verdict**: CONSTRAINT - i nodi ponte del gate 18:55 non collassano su un parametro classico unico; Brody/Berry-Robnik-like spiegano `numeri_primi`, ma lasciano tre bridge graph-only e quattro intermedi classici non-bridge.\nobservables_registry: none; classical audit coordinates plus prior graph observables\nobservables_used: [brody_q, berry_robnick_like_gue_weight, mixture_ks, graph_boundary_state_from_1855, centroid_margin_from_1855, cross_neighbor_fraction_from_1855]\n**observable_contract**: claim=il bridge Lab conserva residuo dopo confronto con scalari classici di crossover; observable=Brody q row-aligned, peso GUE Berry-Robnik-like, stato ponte del grafo 18:55; operator=classical scalar audit sulle stesse 13 righe BOUNDARY; generator=row_spacings(domain) + boundary_graph_curvature_gate_20260515_1855; denominator=13 righe, 8 GUE e 5 Poisson; non_possible=bridge Lab-specific se ogni graph bridge e' anche intermedio classico e non esiste classic-only intermediate; not_tested=flusso Hamiltoniano Rosenzweig-Porter vero, unfolding fisico alternativo, universalita asintotica.\n\n## Respiro fuori-tempo\n- **Combo**: A9 terzo incluso + QxG continuo/discreto + grafo/crossover spettrale + tensione BOUNDARY \"8 domini GUE, 5 Poisson\".\n- **Dipolo / punto-zero**: repulsione spettrale / indipendenza spettrale. Punto-zero: riga di dominio prima che venga letta come label, parametro Brody o nodo del grafo.\n- **Piano superiore**: grafo della conoscenza con audit assiomatico su baseline note; la domanda non e' \"quanto vale q\", ma se q esaurisce il ponte.\n- **Proto-ipotesi**: il terzo incluso operativo non coincide con un singolo scalare di crossover. Se coincide, il bridge Lab e' re-discovery di Brody/Berry-Robnik; se diverge, il contenuto Lab e' nella relazione tra geometria locale e scalare classico.\n- **Possibile/non-possibile**: possibile = usare nodi ponte come righe fisiche candidate oltre la classificazione GUE/Poisson; non-possibile = rivendicare un nuovo crossover se i nodi ponte sono solo Brody/Berry-Robnik rietichettato.\n- **Proiezione**: stimo Brody q e peso GUE di una mistura Poisson/GUE-surmise per ciascuna delle 13 righe gia' classificate dal grafo 18:55.\n\n### Contaminazione cognitiva\n- **YSN DeltaLink**: il DeltaLink usato e' `crossover classico / grafo Lab`: la sorpresa cercata e' il disaccordo, non la conferma dei nodi ponte.\n- **Cornelius gene**: `Classical_Audit_Gate`: \"Un ponte Lab sopravvive solo dopo il lettore classico piu vicino.\" Operatori: FITTA scalare noto; ALLINEA righe; ISOLA residuo.\n- **KSAR step**: perturbazione = feedback falsifier L5; focalizzazione = una sola domanda, \"i bridge collassano su Brody/Berry-Robnik?\"; proiezione = audit row-aligned sulle 13 righe.\n- **PVI attack**: un revisore esterno puo' dire che `third_included_candidate` e' solo un nome Lab per un crossover Brody. Il test attacca esattamente quel presupposto.\n- **Vault**: Rosenzweig-Porter vero resta fuori perimetro; va riattivato solo con Hamiltoniane interpolate, non con fit di CDF su righe gia' generate.\n- **CE-none:tools/data/agent_field_live.md+tools/LAB_COGNITIVE_CONTAMINATION.md/2026-05-15T19:07Z**: nessuna voce `CE-*` concreta e' presente nel campo letto; usati adapter YSN/Cornelius/KSAR documentati, senza inventare archivio enzimi.\n\n## Aderenza alla direzione\n- `relation`: `follows_direction`\n- `why`: il ciclo resta sul perimetro vivo 8 GUE / 5 Poisson e verifica se il confine come terzo incluso e' nuovo rispetto ai crossover classici.\n- `not_drift`: non usa il report Sturmian bloccato, non misura V_c, non usa phi/silver/bronze; il gate 18:55 e' usato come denominatore row-aligned da auditare, non come autorita' conclusiva.\n\n## Re-discovery audit\n- **Baseline noto piu' vicino**: Brody distribution per interpolazione Poisson-Wigner; Berry-Robnik per mistura regolare/caotica. Rosenzweig-Porter e' nominato come famiglia di crossover Hamiltoniano, non fit eseguito in questo ciclo.\n- **Cosa viene assorbito dal baseline**: `numeri_primi:cycle_3` e' sia graph bridge sia intermedio classico (`brody_q=0.465`, `w_GUE=0.275`). Su questa riga il Lab non aggiunge fenomeno oltre il fatto che lo stesso campione e' ponte in due lettori.\n- **Cosa resta Lab-specific**: `percolation:cycle_9`, `reaction_diffusion:cycle_11`, `logistica_biforcazione_var_3.5699:cycle_13` sono graph-only bridge: il grafo li mette al confine ma Brody/mixture li legge endpoint-like.\n- **Cosa limita il claim Lab**: quattro righe sono classic-only intermediate (`zeta_zeros`, `random_matrix`, `cellular_automata`, `brownian_motion`) senza diventare terzo incluso nel grafo. Quindi il parametro classico non basta, ma nemmeno il grafo sostituisce il baseline classico.\n- **Risultante audit**: il boundary operativo e' una relazione a due lettori: scalar crossover + posizione nel grafo. Uno dei due da solo perde informazione.\n\n## Claim Under Test\n> Nel perimetro 8/5, il terzo incluso operativo non e' riducibile a Brody q o a una mistura Poisson/GUE-surmise; il residuo vive nel disaccordo row-aligned tra scalare classico e grafo osservabile.\n\n## Question\nI nodi ponte del grafo 18:55 sono re-discovery di un crossover classico, oppure producono una distinzione residua?\n\n## Ritorno fisico\n- **Punto fisico sorgente**: transizione spettrale tra caos quantistico repulsivo e indipendenza/localizzazione Poisson.\n- **Attraversamento matematico**: fit Brody e mistura Poisson/GUE-surmise sulle stesse righe gia' lette dal grafo kNN.\n- **Punto fisico di ritorno**: negli spettri finiti, una finestra non e' boundary perche' ha q intermedio; e' boundary quando q intermedio e posizione multi-feature del grafo vengono confrontati e il residuo resta nominabile.\n- **Osservabile/test fisico possibile**: su finestre energetiche sperimentali, calcolare q Brody, peso mistura e kNN multi-feature; separare bridge coincidenti, graph-only e classic-only.\n- **Se fallisce**: se su dati fisici indipendenti graph-only e classic-only spariscono, il gate Lab si riduce a baseline classico e il terzo incluso non trasferisce.\n\n## Experiment Design\n- **Script**: `tools/exp_boundary_classical_crossover_audit.py`.\n- **Input graph**: `tools/data/boundary_graph_curvature_gate_20260515_1855.json`.\n- **Run**: `python tools/exp_boundary_classical_crossover_audit.py --out tools/data/boundary_classical_crossover_audit_20260515_1904.json`.\n- **Denominatore**: 13 righe row-aligned dal perimetro BOUNDARY, 8 GUE e 5 Poisson.\n- **Fit Brody**: grid likelihood su q in [0,1], spacings normalizzati a media 1.\n- **Fit Berry-Robnik-like**: griglia su peso GUE in mistura CDF `w*GUE_surmise + (1-w)*Poisson`, selezionata per KS minimo.\n- **Contratto osservabile-operatore**: il ciclo testa concordanza/disaccordo tra scalare classico e graph state; non testa V_c, denominatori Sturmian, unfolding fisico alternativo o Rosenzweig-Porter Hamiltoniano.\n\n## Results\n| audit state | count |\n|---|---:|\n| classic_and_graph_bridge | 1 |\n| graph_only_bridge | 3 |\n| classic_only_intermediate | 4 |\n| endpoint_like | 5 |\n\n| row | label | graph_state | Brody q | w_GUE | KS | audit_state |\n|---|---|---|---:|---:|---:|---|\n| ising_2d:cycle_1 | GUE | class_interior | 0.090 | 0.070 | 0.428636 | endpoint_like |\n| pendolo_doppio:cycle_2 | Poisson | cut_edge | 0.000 | 0.000 | 0.268279 | endpoint_like |\n| numeri_primi:cycle_3 | GUE | third_included_candidate | 0.465 | 0.275 | 0.148459 | classic_and_graph_bridge |\n| zeta_zeros:cycle_4 | GUE | cut_edge | 1.000 | 0.530 | 0.133555 | classic_only_intermediate |\n| logistica_biforcazione:cycle_5 | GUE | class_interior | 0.000 | 0.000 | 0.998064 | endpoint_like |\n| string_vibration:cycle_6 | Poisson | cut_edge | 0.000 | 0.000 | 0.060129 | endpoint_like |\n| random_matrix:cycle_7 | GUE | cut_edge | 0.975 | 0.475 | 0.119491 | classic_only_intermediate |\n| cellular_automata:cycle_8 | GUE | class_interior | 1.000 | 0.435 | 0.416708 | classic_only_intermediate |\n| percolation:cycle_9 | Poisson | third_included_candidate | 0.025 | 0.025 | 0.054635 | graph_only_bridge |\n| coupled_oscillators:cycle_10 | Poisson | class_interior | 0.000 | 0.000 | 0.079806 | endpoint_like |\n| reaction_diffusion:cycle_11 | GUE | third_included_candidate | 0.000 | 0.000 | 0.174423 | graph_only_bridge |\n| brownian_motion:cycle_12 | Poisson | cut_edge | 0.205 | 0.250 | 0.026002 | classic_only_intermediate |\n| logistica_biforcazione_var_3.5699:cycle_13 | GUE | third_included_candidate | 0.000 | 0.000 | 0.969277 | graph_only_bridge |\n\n## Key Findings\n1. Verificato: il denominatore resta quello richiesto, 13 righe con 8 GUE e 5 Poisson.\n2. Verificato: un solo nodo ponte del grafo e' anche intermedio classico: `numeri_primi:cycle_3`.\n3. Verificato: tre nodi ponte sono graph-only: `percolation:cycle_9`, `reaction_diffusion:cycle_11`, `logistica_biforcazione_var_3.5699:cycle_13`.\n4. Verificato: quattro righe sono classic-only intermediate senza essere terzo incluso nel grafo: `zeta_zeros:cycle_4`, `random_matrix:cycle_7`, `cellular_automata:cycle_8`, `brownian_motion:cycle_12`.\n5. Inferito: il terzo incluso non e' uno scalare di crossover. E' una discrepanza controllata fra lettore classico e posizione multi-osservabile.\n\n## Verdict\nCONSTRAINT\n\nIl boundary trasferisce come audit a due lettori. Brody/Berry-Robnik-like e grafo misurano aspetti diversi dello stesso confine; nessuno dei due chiude il terzo incluso da solo.\n\n## Bicono della scoperta\n- **Due radici**: parametro classico di crossover; nodo ponte del grafo Lab.\n- **Singolare**: riga di dominio row-aligned prima della classificazione.\n- **Invariante di passaggio**: disaccordo nominabile tra `classic_and_graph`, `graph_only`, `classic_only`, `endpoint_like`.\n- **Campo di possibilita**: possibile = costruire un gate fisico che richiede doppia lettura prima di chiamare boundary; non-possibile = promuovere il grafo 18:55 come scoperta autonoma senza baseline classico.\n\n## Consecutio\nIl prossimo ciclo utile non deve aggiungere una terza metrica locale. Deve portare il gate a due lettori su un sistema fisico controllato: Rosenzweig-Porter, Anderson/mobility edge o Aubry-Andre con finestre energetiche. Il risultato da cercare e' se `graph_only` e `classic_only` sopravvivono fuori dal perimetro composito del Lab.\n\n## Ricadute pratiche\nssp_value: yes. Lo script crea un audit riusabile per separare re-discovery classica, residuo Lab e endpoint-like in ogni perimetro GUE/Poisson row-aligned.\n\n## Telemetria\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante `TENS_SCALE_TRASCENDENZA_LIMITE`, ma la direzione viva del campo impone il perimetro BOUNDARY 8/5.\n- `python -m py_compile tools/exp_boundary_classical_crossover_audit.py` completato.\n- `python tools/exp_boundary_classical_crossover_audit.py --out tools/data/boundary_classical_crossover_audit_20260515_1904.json` completato.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n- Script: `tools/exp_boundary_classical_crossover_audit.py`\n- Data: `tools/data/boundary_classical_crossover_audit_20260515_1904.json`\n- Report: `tools/data/reports/agent_20260515_1904.md`\n",
tools/data/lab_graph.json:2023:          "text": "> Nel perimetro 8/5, il terzo incluso operativo non e' riducibile a Brody q o a una mistura Poisson/GUE-surmise; il residuo vive nel disaccordo row-al"
tools/data/lab_graph.json:2041:          "text": "| audit state | count |\n|---|---:|\n| classic_and_graph_bridge | 1 |\n| graph_only_bridge | 3 |\n| classic_only_intermediate | 4 |\n| endpoint_like | 5 |\n\n| row | label | graph_state | Brody q | w_GUE | K"
tools/data/lab_graph.json:2068:      "content_full": "# Agent Report - V=2 Generator Scaling Gate\n**Date**: 2026-05-15 18:16  \n**Piano**: 119  \n**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY  \n**verdict**: CONSTRAINT - a V=2 il confine trasferisce come generatore binario ordinato: `phi_sturmian_binary` separa dallo shuffle di densita, ma non chiude una specificita phi contro silver/bronze Sturmian.  \nobservables_registry: none; dedicated observables only  \nobservables_used: [mean_pr_tau, mean_ipr_tau, spacing_r, mean_ipr, participation_entropy]  \n**observable_contract**: claim=V=2 e' baseline fisica del confine Aubry-Andre e distingue il tipo di generatore; observable=slope log-log `tau` della mean participation ratio piu spacing/IPR anchors; operator=`tools/exp_aubry_v2_generator_scaling_gate.py`; generator=tight-binding 1D con potenziali `sturmian_binary`, `cosine`, `periodic_ab`, `density_shuffle`, `random_uniform`; denominator=N={89,144,233,377} x phase={0,0.25,0.5,0.75} x generator rows, con 4 trial per null random; non_possible=promuovere un claim phi-specific se tau(V=2) non separa dai controlli Sturmian non-phi; not_tested=limite asintotico, altri V, mobility edge, dati sperimentali, qualita PSD dei surrogate 18:07.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + QxG continuo/discreto + baseline fisica Aubry-Andre V=2 + tensione viva `TENS_SCALE_TRASCENDENZA_LIMITE`.\n- **Dipolo / punto-zero**: generatore continuo coseno / generatore discreto binario. Punto-zero = Hamiltoniana tight-binding a V=2 prima che il potenziale venga letto come transizione self-dual, parola Sturmian o disorder.\n- **Piano superiore**: geometria dei campi su reticolo; il bordo e' nella legge di generazione del campo onsite, non nel solo fit di `V_c`.\n- **Operatori laterali scelti**: boundary condition, eigenvector localization, non-phi generator control.\n- **Contaminazione cognitiva**: CE-none: il ciclo non ha introdotto adapter semantico; ha usato il baseline fisico V=2 come vincolo regressivo per evitare un nuovo strato linguistico sopra i risultati 17:45-18:07.\n- **Proto-ipotesi**: se il confine e' proprieta del generatore, allora a V=2 la crescita della partecipazione degli autostati separa classi di generatore; se e' phi-specific, `phi_sturmian_binary` deve separare anche dai controlli Sturmian non-phi.\n- **Proiezione**: diagonalizzo la stessa Hamiltoniana tridiagonale con potenziali binari e continui; il tau della participation ratio misura se gli autostati scalano come estesi, critici o localizzati nel perimetro V=2.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: testa il confine come proprieta del generatore usando Sturmian/binario vs coseno Aubry-Andre vs controlli irrazionali, con baseline fisica esplicita V=2.\n- `not_drift`: non rifitta `V_c`, non riapre prime/mod6, non usa selector legacy; il vecchio deposito viene usato solo come perimetro fisico della misura.\n\n## Claim Under Test\n\n> A V=2, il boundary si conserva come proprieta del generatore: binario Sturmian, coseno continuo e null disorder hanno tau di partecipazione distinti; la specificita phi sopravvive solo se phi binario separa anche dai controlli Sturmian non-phi.\n\n## Question\n\nIl baseline V=2 legge un confine phi-specific, oppure legge una classe piu larga di generatori binari ordinati distinta dal coseno continuo e dal disorder?\n\n## Ritorno fisico\n\n- **Punto fisico sorgente**: modello Aubry-Andre tight-binding 1D, dove il coseno quasiperiodico ha transizione self-dual nota a V=2.\n- **Attraversamento matematico**: sostituzione controllata del potenziale onsite con parole Sturmian binarie, coseni irrazionali, periodico AB e null disorder; misura dello scaling finito della participation ratio.\n- **Punto fisico di ritorno**: reticoli fotonici o cold atoms con potenziale onsite programmabile, dove si puo confrontare un coseno quasiperiodico con una parola binaria Sturmian alla stessa ampiezza V=2.\n- **Controllo concretezza**: il ritorno e' IPR/participation ratio degli autostati di una Hamiltoniana tridiagonale, non una categoria astratta di confine.\n- **Relazione nuova**: V=2 non trasferisce come firma phi isolata; trasferisce come separatore fra ordine binario quasiperiodico, coseno continuo e disorder.\n- **Osservabile/test fisico possibile**: preparare potenziali `phi_sturmian_binary`, `silver_sturmian_binary`, `phi_cosine` e `density_shuffle` a V=2; misurare spreading o profili modali e stimare tau di partecipazione su taglie crescenti.\n- **Se fallisce**: `ritorno_fisico_assente` per claim phi-specific; resta vincolo di classe-generatore, non scoperta phi promuovibile.\n\n## Experiment Design\n\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante `TENS_SCALE_TRASCENDENZA_LIMITE`.\n- `python -m py_compile tools/exp_aubry_v2_generator_scaling_gate.py` completato.\n- Run: `python tools/exp_aubry_v2_generator_scaling_gate.py --out tools/data/aubry_v2_generator_scaling_gate_20260515_1816.json`.\n- Nearest-known baseline: Aubry-Andre continuo, transizione self-dual a V=2; per questo il ciclo non promuove il risultato come nuovo fenomeno fisico, ma come gate di generatore.\n- Perimetro: 176 righe totali; N={89,144,233,377}; phases={0,0.25,0.5,0.75}; random_trials=4.\n- Contratto osservabile-operatore: il ciclo testa tau finito della participation ratio a V=2; non testa `gap_ratio`, `V_c` asintotico, PSD surrogate quality, ne universalita GUE/Poisson.\n\n## Results\n\n| domain | mean_pr_tau | median spacing_r | median mean_ipr | median mean_pr | median participation_entropy |\n|---|---:|---:|---:|---:|---:|\n| periodic_ab | 0.9937 | 0.9298 | 0.0134 | 80.9477 | 0.8730 |\n| phi_sturmian_binary | 0.8048 | 0.3608 | 0.0452 | 30.3199 | 0.7240 |\n| silver_sturmian_binary | 0.7268 | 0.3774 | 0.0510 | 23.7245 | 0.7037 |\n| bronze_sturmian_binary | 0.6399 | 0.4004 | 0.0487 | 30.4225 | 0.7218 |\n| phi_cosine | 0.5689 | 0.3013 | 0.0961 | 13.6849 | 0.6111 |\n| silver_cosine | 0.5819 | 0.3108 | 0.0878 | 14.5649 | 0.6226 |\n| bronze_cosine | 0.6104 | 0.3478 | 0.0868 | 15.7257 | 0.6237 |\n| phi_binary_density_shuffle | 0.0527 | 0.3875 | 0.1403 | 9.1779 | 0.4677 |\n| random_uniform | 0.0306 | 0.4011 | 0.1834 | 6.8468 | 0.4180 |\n\n| classification field | value |\n|---|---:|\n| v2_baseline | 2.0 |\n| phi_binary_tau | 0.8048 |\n| phi_cosine_tau | 0.5689 |\n| density_shuffle_tau | 0.0527 |\n| silver_binary_tau | 0.7268 |\n| bronze_binary_tau | 0.6399 |\n| cosine_class_tau_span | 0.0414 |\n| phi_binary_separates_from_shuffle | true |\n| phi_binary_separates_from_nonphi_binary | false |\n\n## Key Findings\n\n1. **Verificato**: `phi_sturmian_binary` a V=2 separa dal null di densita: tau 0.8048 contro 0.0527.\n2. **Verificato**: i coseni irrazionali formano una classe stretta nel perimetro misurato: tau span 0.0414.\n3. **Verificato**: il binario Sturmian non e' phi-specific nel gate impostato: phi tau 0.8048, silver 0.7268, bronze 0.6399; la soglia `min_tau_delta=0.08` non viene superata contro silver.\n4. **Inferito**: V=2 distingue ordine binario quasiperiodico da disorder e da coseno continuo; non autorizza il claim che phi sia il generatore unico del confine.\n\n## Verdict\n\n**CONSTRAINT**.\n\nLa formulazione valida e': a V=2 il boundary e' proprieta della classe del generatore, non del solo phi. Il binario Sturmian produce scaling piu esteso del coseno continuo e del disorder, ma il controllo silver resta troppo vicino per chiamarlo phi-specific.\n\n## Bicono della scoperta\n\n- **Due radici**: coseno continuo self-dual / parola binaria quasiperiodica.\n- **Singolare**: Hamiltoniana tight-binding a V=2 prima della scelta della grammatica onsite.\n- **Invariante di passaggio**: tau della participation ratio come lettore del tipo di generatore.\n- **Campo di possibilita**: possibile = progettare test fisici che separano coseno, binario ordinato e disorder alla stessa ampiezza V=2; non-possibile = promuovere `phi` come boundary autonomo finche silver/bronze restano nello stesso corridoio di tau.\n\n## Consecutio\n\nIl prossimo ciclo deve isolare il corridoio Sturmian non-phi: aumentare N o usare approssimanti denominatore-allineati per chiedere se la vicinanza phi/silver e' finite-size, effetto di fase, o proprieta comune delle parole meccaniche binarie. Non serve tornare a `V_c` prima di chiudere questo corridoio.\n\n## Ricadute pratiche\n\nssp_value: yes. Lo script e' un gate riusabile per setup fotonici/cold-atom: confronta generatori onsite diversi alla stessa baseline V=2 e restituisce tau, spacing e IPR in un JSON unico.\n\n## Telemetria\n\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- Preflight post-report: `python tools/lab_preflight_agent.py --cycle 20260515_1816 --json` => `ARTIFACT_USEFUL_NOT_PUBLISHABLE`, recommended_action=`KEEP_ARTIFACT_STOP_REPORT_PROMOTION`, stable_anchor=`20260515_1712`.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n\n- `tools/exp_aubry_v2_generator_scaling_gate.py`\n- `tools/data/aubry_v2_generator_scaling_gate_20260515_1816.json`\n- `tools/data/reports/agent_20260515_1816.md`\n",
tools/data/lab_graph.json:2092:          "text": "| domain | mean_pr_tau | median spacing_r | median mean_ipr | median mean_pr | median participation_entropy |\n|---|---:|---:|---:|---:|---:|\n| periodic_ab | 0.9937 | 0.9298 | 0.0134 | 80.9477 | 0.8730"
tools/data/lab_graph.json:2119:      "content_full": "# Agent Report - Aubry Cosine Boundary Counter-Gate\n**Date**: 2026-05-15 17:58  \n**Piano**: 118  \n**Tension explored**: BOUNDARY / TENS_SCALE_TRASCENDENZA_LIMITE  \n**verdict**: CONSTRAINT - nel potenziale Aubry-Andre coseno `phi` non chiude un boundary privilegiato; la finestra binaria 17:45 dipende dalla grammatica Sturmian, non dal solo irrazionale phi.  \nobservables_registry: none; dedicated observables only  \nobservables_used: [spacing_r, mean_ipr, median_ipr, participation_entropy]  \n**observable_contract**: claim=`phi` resta terzo incluso fisico anche quando il potenziale binario viene sostituito dal coseno Aubry-Andre canonico; observable=`spacing_r` + `mean_ipr` con controllo di distinzione da silver/bronze; operator=`tools/exp_aubry_cosine_boundary_counter_gate.py`; generator=Hamiltoniana tight-binding 1D con potenziale coseno per beta phi/silver/bronze, periodico beta=1/2 e random onsite uniforme; denominator=N={89,144,233} x phase={0,0.25,0.5,0.75} x V=0.50..3.00 step 0.25, random_trials=6; non_possible=promuovere phi come boundary fisico se non si separa dai controlli irrazionali con spacing e localizzazione insieme; not_tested=limite asintotico, disordine correlato sperimentale, classi GUE/Poisson universali dirette.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + QxG continuo/discreto + modello Aubry-Andre come ponte fisico tra quasi-periodicita e localizzazione + tensione viva `BOUNDARY`.\n- **Dipolo / punto-zero**: grammatica binaria Sturmian / potenziale coseno continuo. Punto-zero = Hamiltoniana row-local prima che il confine venga attribuito a phi o alla forma del potenziale.\n- **Piano superiore**: geometria dei campi su reticolo; il generatore non e' solo parametro, e' forma del campo che decide quale bordo puo' essere letto.\n- **Operatori laterali scelti**: Hamiltonian spectrum, mobility edge/localization transition, non-phi generator control.\n- **Contaminazione cognitiva**: CE-0001/KSAR usato come reiterazione regressiva del deposito 17:45: togliere la grammatica binaria e osservare cosa sopravvive. CE-0038 usato come equilibrio tra poli, reso falsificabile dal controllo silver/bronze.\n- **Proto-ipotesi**: se `phi` e' boundary fisico e non solo effetto della codifica binaria, nel coseno Aubry-Andre deve restare insieme tra periodico e random e deve separarsi da silver/bronze su spacing e localizzazione.\n- **Proiezione**: diagonalizzo Hamiltoniane tight-binding coseno e confronto mediane row-aligned per V, N, fase e generatore; il gate accetta solo se `phi` e' intermedio e distinto dai controlli irrazionali.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: segue la direzione viva \"8 domini GUE, 5 Poisson - il confine e' il terzo incluso operativo\" verificando se il confine fisico aperto nel ritorno Aubry/Fibonacci sopravvive a un contro-perimetro canonicale.\n- `not_drift`: non riapre prime/mod6, non usa selector legacy, non rifitta `V_c`; attacca il nodo regressivo lasciato dal ciclo 17:45: forma binaria del potenziale vs boundary fisico.\n\n## Claim Under Test\n\n> Nel potenziale Aubry-Andre coseno, `phi` resta terzo incluso fisico tra periodico e random solo se `spacing_r` e localizzazione lo collocano insieme nel segmento periodico-random e lo separano da silver/bronze.\n\n## Question\n\nIl confine `phi` osservato nel ritorno binario 17:45 sopravvive nel coseno Aubry-Andre, oppure il contenuto era nella grammatica Sturmian del potenziale?\n\n## Ritorno fisico\n\n- **Punto fisico sorgente**: transizione spettrale/localizzazione in reticoli quasi-periodici, usata come ritorno fisico del boundary GUE/Poisson.\n- **Attraversamento matematico**: Hamiltoniane tridiagonali con potenziale coseno irrazionale, controlli periodico e random onsite.\n- **Punto fisico di ritorno**: modello Aubry-Andre canonico con transizione di localizzazione attesa attorno a V=2 per hopping unitario.\n- **Controllo concretezza**: il ritorno non e' \"confine\" astratto; e' spettro e autostati di un tight-binding 1D misurabile in reticoli fotonici o cold atoms.\n- **Relazione nuova**: la finestra binaria 17:45 non trasferisce automaticamente alla classe Aubry-Andre coseno; il generatore del potenziale diventa parte atomica del claim.\n- **Osservabile/test fisico possibile**: misurare spacing ratio e IPR nello stesso reticolo quasi-periodico variando V e confrontando beta phi con beta silver/bronze.\n- **Se fallisce**: `ritorno_fisico_assente` per la promozione phi-specifica nel coseno; resta vincolo sul denominatore, non scoperta fisica promuovibile.\n\n## Experiment Design\n\n- `python tools/dnd_scenario.py --best` eseguito: massimo discriminante `TENS_SCALE_TRASCENDENZA_LIMITE`.\n- `python -m py_compile tools/exp_aubry_cosine_boundary_counter_gate.py` completato.\n- Run: `python tools/exp_aubry_cosine_boundary_counter_gate.py --out tools/data/aubry_cosine_boundary_counter_gate_20260515_1758.json`.\n- Perimetro deterministico: 132 righe per ciascun generatore phi/silver/bronze/periodic.\n- Perimetro random: 792 righe onsite uniforme.\n- Gate: `phi_joint_boundary = spacing_r_between and mean_ipr_between and separated_from_random and phi_distinct_from_irrational_controls`.\n- La misura serve la combo perche' rende non-possibile attribuire il boundary a phi se silver/bronze seguono la stessa classe fisica.\n\n## Results\n\n| V | joint | distinct_controls | r_between | ipr_between | sep_random | phi_r | silver_r | bronze_r | random_r | phi_ipr | silver_ipr | bronze_ipr | random_ipr |\n|---:|---|---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---:|\n| 0.50 | false | false | true | true | false | 0.860 | 0.876 | 0.860 | 0.529 | 0.0154 | 0.0153 | 0.0156 | 0.0252 |\n| 0.75 | false | false | true | true | true | 0.821 | 0.852 | 0.821 | 0.467 | 0.0185 | 0.0179 | 0.0189 | 0.0436 |\n| 1.00 | false | false | true | true | true | 0.786 | 0.814 | 0.781 | 0.436 | 0.0218 | 0.0202 | 0.0226 | 0.0677 |\n| 1.25 | false | false | true | true | true | 0.741 | 0.755 | 0.737 | 0.418 | 0.0256 | 0.0225 | 0.0272 | 0.0948 |\n| 1.50 | false | false | true | true | true | 0.675 | 0.688 | 0.694 | 0.412 | 0.0313 | 0.0269 | 0.0338 | 0.1205 |\n| 1.75 | false | false | true | true | true | 0.572 | 0.581 | 0.597 | 0.408 | 0.0421 | 0.0388 | 0.0447 | 0.1558 |\n| 2.00 | false | false | false | true | true | 0.302 | 0.313 | 0.366 | 0.409 | 0.1070 | 0.0983 | 0.0981 | 0.1816 |\n| 2.25 | false | true | true | false | false | 0.430 | 0.386 | 0.354 | 0.401 | 0.2815 | 0.2637 | 0.2543 | 0.2151 |\n| 2.50 | false | true | true | false | true | 0.437 | 0.471 | 0.367 | 0.397 | 0.3658 | 0.3571 | 0.3402 | 0.2442 |\n| 2.75 | false | false | true | false | true | 0.475 | 0.483 | 0.358 | 0.398 | 0.4232 | 0.4227 | 0.4012 | 0.2684 |\n| 3.00 | false | false | true | false | true | 0.500 | 0.499 | 0.379 | 0.390 | 0.4666 | 0.4724 | 0.4482 | 0.3016 |\n\n## Key Findings\n\n1. **Verificato**: `phi_joint_boundary_v=[]`. Nessun valore di V chiude insieme intermedieta, separazione dal random e distinzione dai controlli irrazionali.\n2. **Verificato**: da V=0.75 a V=1.75 `phi` e' tra periodico e random sia in `spacing_r` sia in `mean_ipr`, ma resta quasi coincidente con silver/bronze; il boundary e' classe quasi-periodica, non privilegio phi.\n3. **Verificato**: a V=2.00 `spacing_r(phi)=0.302` esce dal segmento periodico-random mentre `mean_ipr` resta intermedio; la transizione coseno rompe il gate congiunto.\n4. **Verificato**: a V=2.25 e V=2.50 `phi` si distingue dai controlli, ma non e' piu' boundary congiunto: `mean_ipr_between=false` e a V=2.25 cade anche la separazione dal random.\n5. **Inferito**: il risultato 17:45 trasferisce come vincolo sul generatore binario, non come claim phi-specifico universale del modello Aubry-Andre.\n\n## Verdict\n\n**CONSTRAINT**.\n\nIl contro-perimetro coseno falsifica la promozione `phi` come terzo incluso fisico autonomo. Nel perimetro misurato il boundary congiunto non sopravvive quando la grammatica binaria viene rimossa. La formulazione valida diventa: `phi` e' candidato boundary nel potenziale binario Sturmian 17:45; nel coseno Aubry-Andre il contenuto si sposta alla classe quasi-periodica e alla transizione di localizzazione, non a phi come generatore privilegiato.\n\n## Bicono della scoperta\n\n- **Due radici**: potenziale binario Sturmian / potenziale coseno Aubry-Andre.\n- **Singolare**: Hamiltoniana tight-binding prima della scelta della forma del campo.\n- **Invariante di passaggio**: ogni ritorno fisico del boundary deve dichiarare forma del potenziale, controlli irrazionali e gate joint spacing/localizzazione.\n- **Campo di possibilita**: possibile = separare boundary di grammatica da boundary di classe fisica; non-possibile = promuovere `phi` come ritorno fisico se silver/bronze condividono la stessa risposta.\n\n## Consecutio\n\nIl prossimo ciclo non deve allargare `phi` nel coseno. Deve isolare il residuo binario: stessa Hamiltoniana, stesso denominatore, ma ablazione della grammatica Sturmian tramite surrogate che preservano densita, autocorrelazione corta e spettro del potenziale. Se la finestra V=0.50..1.25 sopravvive solo alla grammatica completa, il finding e' `boundary-as-grammar`; se sopravvive a surrogate piu deboli, il finding diventa classe di correlazione del potenziale.\n\n## Ricadute pratiche\n\nssp_value: yes. Lo script e' un counter-gate riusabile per impedire che demo o visualizzazioni del boundary promuovano `phi` senza controlli irrazionali nel modello fisico scelto.\n\n## Telemetria\n\n- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.\n- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.\n- Nessun update del seme.\n- Nessuna promozione e nessun public sync.\n\n## Files\n\n- `tools/exp_aubry_cosine_boundary_counter_gate.py`\n- `tools/data/aubry_cosine_boundary_counter_gate_20260515_1758.json`\n- `tools/data/reports/agent_20260515_1758.md`\n",
tools/data/lab_graph.json:2221:      "content_full": "# Agent Report - SR Residual Width Audit\n**Date**: 2026-05-14 13:30  \n**Piano**: 117  \n**Tension explored**: BOUNDARY / prime-vs-mod6 residual (0.8)  \n**verdict**: CONSTRAINT - il residuo prime-specific dopo mod6 e' robusto come delta z vettoriale row-local; `SR` binario non e' un osservabile stabile del confine  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, window_gaps, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p, trace_jsonl_event]  \n**observable_contract**: claim=`prime_minus_mod6_z_delta(SR,L1,triple_var)` sopravvive a seed, provider e ampiezza finestra; observable=delta z paired prime-minus-mod6 per `SR,L1,triple_var` piu audit `has_SR`; operator=`tools/exp_prime_vs_mod6_sr_boundary.py`; generator=prime gaps da `row_spacings(\"numeri_primi\")` e `direct_sieve`, antagonisti `6k +/- 1` index-aligned e span-matched; denominator=3 ampiezze finestra x 2 provider x 4 offsets, paired contro 2 antagonisti mod6; non_possible=residuo prime-specific se il label-swap assorbe il delta z o se il delta collassa a presenza binaria `SR`; not_tested=origine analitica del delta, scale oltre 2048 gap, beta atlas globale, `V_c`, `gap_ratio`.\n\n## Prima impressione\n\nIl confine non sta nella presenza di `SR`. Sta nel fatto che la stessa riga provider-offset, attraversata da prime a `6k +/- 1`, conserva una differenza di intensita su tre osservabili mentre il verdict binario cambia con l'ampiezza.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + QxG continuo/discreto + BOUNDARY + direzione `SR_residual_intensity_after_mod6`.\n- **Dipolo / punto-zero**: lattice candidato `6k +/- 1` / selezione prime. Punto-zero: riga provider-offset condivisa; la primalita e' l'unica selezione aggiunta.\n- **Piano superiore**: topologia assiomatica del bordo: un boundary operator non decide per presenza/assenza, ma per differenziale che resta dopo sottrazione del pre-bordo.\n- **Operatori laterali scelti**: boundary operator, perche' il bordo e' il luogo della sottrazione prime-minus-mod6; parallel transport, perche' provider e offset trasportano la stessa riga tra due classi senza cambiare denominatore.\n- **Contaminazione cognitiva**: CE-0001 / KSAR usato per reiterare il kernel del cycle 03:30; CE-0117 usato come cascata della possibilita': presenza `SR` -> delta z `SR` -> vettore `SR,L1,triple_var`.\n- **Proto-ipotesi**: il residuo prime-specific non e' una label, e' un differenziale vettoriale row-local; quando la finestra cambia, `has_SR` oscilla, ma il delta z resta il passaggio.\n- **Possibile / non-possibile**: possibile = formalizzare `prime_minus_mod6_z_vector` come osservabile dedicato; non-possibile = promuovere `SR` binario o il verdict nominale dello script a discriminatore del confine.\n- **Proiezione**: tre ampiezze finestra (`512,1024,2048`), stessi due provider, quattro offset per run, due antagonisti mod6, label-swap row-local e trace JSONL completa.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: testa la robustezza del delta z row-local prime-minus-mod6 su piu ampiezze finestra, mantenendo provider, offset, label-swap audit e trace JSONL.\n- `not_drift`: non torna a `V_c`, GUE/Poisson, fit o vecchi depositi; stressa solo il residuo nominato dal valutatore dopo sottrazione mod6.\n\n## Claim Under Test\n\n> Dopo sottrazione del pre-bordo `6k +/- 1`, la selezione prime non genera `SR` come presenza; lascia un vettore di intensita row-local su `SR,L1,triple_var`.\n\n## Question\n\nIl delta z prime-minus-mod6 resta significativo quando cambia l'ampiezza della finestra, oppure era un artefatto del contratto 1024-gap del cycle 03:30?\n\n## Experiment Design\n\n- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`.\n- Run: `window_gaps=512,1024,2048`; seeds `202605141330,202605141331,202605141332`.\n- Rows per run: 8 prime windows = 2 provider x 4 offset.\n- Antagonisti: `mod6_index_aligned` e `mod6_span_matched`, paired per `row_id`.\n- Null: label-swap row-local, 4096 trials per pair audit.\n- Trace: JSONL scritto per tutti e tre i run.\n\n## Results\n\n| window | pair | prime SR | prime focus | Jaccard | SR delta | p(SR delta) | z_SR delta | p(z_SR) | z_L1 delta | p(z_L1) | z_triple_var delta | p(z_triple) | script verdict |\n|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|\n| 512 | mod6_index | 5/8 | 2/8 | 0.250 | -0.250 | 0.6195 | 20.494 | 0.0095 | 21.866 | 0.0095 | 8.480 | 0.0095 | SR_NOT_DECISIVE |\n| 512 | mod6_span | 5/8 | 2/8 | 0.377 | -0.250 | 0.5038 | 13.993 | 0.0085 | 10.099 | 0.0085 | 7.505 | 0.0085 | SR_NOT_DECISIVE |\n| 1024 | mod6_index | 8/8 | 5/8 | 0.481 | 0.000 | 1.0000 | 29.480 | 0.0061 | 31.105 | 0.0061 | 11.745 | 0.0061 | SR_PREBOUNDARY |\n| 1024 | mod6_span | 8/8 | 5/8 | 0.377 | 0.250 | 0.4921 | 19.921 | 0.0076 | 15.302 | 0.0076 | 13.142 | 0.0076 | SR_PREBOUNDARY |\n| 2048 | mod6_index | 8/8 | 7/8 | 0.556 | 0.125 | 1.0000 | 41.634 | 0.0088 | 43.574 | 0.0088 | 17.173 | 0.0088 | SR_PRIME_SPECIFIC |\n| 2048 | mod6_span | 8/8 | 7/8 | 0.537 | 0.250 | 0.5040 | 28.624 | 0.0068 | 23.917 | 0.0068 | 17.491 | 0.0068 | SR_PRIME_SPECIFIC |\n\n## Key Findings\n\n1. **Verificato**: `has_SR` non replica come osservabile del residuo. A 512 gap i primi hanno `SR=5/8`; a 1024 e 2048 hanno `SR=8/8`. Il delta binario ha p non significativo o 1.0000.\n2. **Verificato**: il delta z `SR` replica in tutti i sei pair audit: `p=0.0061..0.0095`.\n3. **Verificato**: il delta z non e' solo `SR`. `L1` replica con `p=0.0061..0.0095`; `triple_var` replica con `p=0.0061..0.0095`.\n4. **Verificato**: il verdict nominale dello script oscilla con `window_gaps` (`not_decisive`, `preboundary`, `prime_specific`). Quell'oscillazione e' informazione sullo script: il verdict e' ancora centrato su commonality/binario, non sul vettore di intensita.\n5. **Inferito dal perimetro**: l'osservabile dedicato da formalizzare e' `prime_minus_mod6_z_vector(SR,L1,triple_var)`, con `has_SR` relegato ad audit negativo.\n\n## Verdict\n\n**CONSTRAINT / VECTOR RESIDUE**.\n\nNel perimetro 512-2048 gap, due provider, quattro offset, due antagonisti mod6, il residuo prime-specific sopravvive come delta z vettoriale row-local. Non sopravvive come presenza binaria di `SR`, ne come verdict nominale dello script.\n\n## Bicono\n\n- **Due radici**: pre-bordo mod6 / selezione prime.\n- **Singolare**: riga provider-offset paired.\n- **Invariante di passaggio**: delta z positivo su `SR,L1,triple_var`.\n- **Campo di possibilita**: osservabile dedicato `prime_minus_mod6_z_vector`.\n- **Campo non-possibile**: `SR` binario come firma prime-specific dopo mod6.\n\n## Consecutio\n\nIl prossimo ciclo deve correggere il nodo regressivo dello script: il `verdict()` non deve decidere dalla commonality di `SR`, ma da un contratto vettoriale dichiarato (`SR,L1,triple_var`, segno del delta, p label-swap, denominatore row-local). Dopo questa correzione, scalare oltre 2048 gap e separare `mod6_index_aligned` da `mod6_span_matched` come antagonisti con ruoli diversi.\n\n## Ricadute pratiche\n\nssp_value: yes. Le tre trace JSONL rendono auditabile il residuo senza riaprire i JSON aggregati; il prossimo passaggio pratico e' aggiornare lo script per emettere un verdict vettoriale, non binario.\n\n## Files\n\n- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json`\n- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl`\n- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json`\n- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl`\n- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json`\n- `tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl`\n- `tools/data/reports/agent_20260514_1330.md`\n",
tools/data/lab_graph.json:2272:      "content_full": "# Agent Report - Prime vs Mod6 SR Boundary\n**Date**: 2026-05-13 03:30  \n**Piano**: 116  \n**Tension explored**: BOUNDARY (0.8)  \n**verdict**: CONSTRAINT - `SR` appartiene al pre-bordo aritmetico mod6; la selezione prime resta visibile solo come gradiente di intensita row-local  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, provider, offset, row_id, source_mode, case_state, sr_rate, focus_signature_count, signature_jaccard, row_local_label_swap_p]  \n**observable_contract**: claim=`SR` e prime-specific solo se resta piu comune/forte nelle finestre prime dopo sottrazione di candidati `6k +/- 1` row-local; observable=`SR` e firma `[SR,L1,triple_var]` in `coherent_one_sided_observables` + delta z paired; operator=`exp_prime_vs_mod6_sr_boundary.py`; generator=prime gaps da `row_spacings(\"numeri_primi\")` e `direct_sieve`, mod6 da `index_aligned` e `span_matched`; denominator=8 finestre prime paired con 8 mod6_index_aligned e 8 mod6_span_matched; non_possible=prime-specific SR se SR e comune o pari nel contro-perimetro mod6, oppure se il label-swap row-local assorbe i delta; not_tested=`V_c`, `gap_ratio`, beta atlas globale, origine analitica del trasferimento mod6.\n\n## Prima impressione\n\nIl bordo non cade tra primi e non-primi: cade tra selezione prime e lattice candidato `6k +/- 1`. `SR` vede il lattice prima della primalita; il gate non deve chiedere \"SR nei primi?\", ma \"cosa resta di SR dopo aver sottratto il pre-bordo?\".\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + QxG continuo/discreto + BOUNDARY + consecutio `prime_vs_mod6_SR_boundary`.\n- **Dipolo / punto-zero**: primi selezionati / candidati mod6 non selezionati. Punto-zero: la riga ordinata locale `6k +/- 1`, dove `SR` puo nominare pre-bordo aritmetico senza nominare primalita.\n- **Piano superiore**: topologia assiomatica del bordo: una sezione osservabile attraversa due lati; la specificita vive solo nel residuo dopo sottrazione del lato comune.\n- **Proto-ipotesi**: `SR` non e firma atomica dei primi; e una sezione del pre-bordo aritmetico. La selezione prime si manifesta come differenza di intensita z rispetto al lattice candidato.\n- **Possibile / non-possibile**: possibile = isolare una coordinata di selezione prime come gradiente dentro mod6; non-possibile = usare presenza binaria di `SR` come claim prime-specific.\n- **Proiezione**: stesso gate ordine/null, finestre 1024, offset 0/512/1024/1536, due provider prime, due antagonisti mod6, audit label-swap dentro ogni row_id.\n\n### Contaminazione cognitiva\n\n- **KSAR / CE-0001**: usato come reiterazione del kernel del ciclo precedente: non allargare i controlli, ripetere il gate sul nodo regressivo `mod6_candidates`.\n- **PVI attack**: il presupposto attaccato e \"SR persistente implica primalita\". Il contro-presupposto e \"SR misura la griglia 6k +/- 1 prima della selezione prime\".\n- **Vault**: `span_matched` va conservato come controllo: misura stesso intervallo numerico e stesso denominatore, ma introduce downsample dei candidati; non diventa invariante.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: esegue esattamente `prime_vs_mod6_SR_boundary`, con denominatore row-local e shuffle audit label-preserving sul confronto prime/mod6.\n- `not_drift`: non torna a GUE/Poisson, `V_c`, fit o controlli larghi; il solo antagonista decisivo e il pre-bordo `6k +/- 1`.\n\n## Claim Under Test\n\n> `SR` appartiene ai primi solo se, a stesso provider/offset, resta piu specifico delle due versioni mod6: `index_aligned` e `span_matched`.\n\n## Experiment Design\n\n- Prime: 2 provider (`dnd_autoricerca`, `direct_sieve`) x 4 offset x 1024 gap.\n- Mod6 index-aligned: candidati `6k +/- 1` alla stessa riga di gap e stesso offset.\n- Mod6 span-matched: candidati `6k +/- 1` nello stesso span numerico del blocco prime direct-sieve, downsampled a 1025 punti.\n- Gate: `n_replicates=8`, `n_beta=9`, `n_baseline=16`, `z_min=2.0`.\n- Main seed: `202605130330`; seed check: `202605130331`.\n- Null audit: label-swap row-local, 4096 trial, scambio prime/mod6 solo dentro ogni provider/offset.\n\n## Results\n\nMain run:\n\n| class | cases | SR hits | focus [SR,L1,triple_var] | common obs | mean z SR | mean z L1 | mean z triple_var |\n|---|---:|---:|---:|---|---:|---:|---:|\n| prime | 8 | 8 | 5 | SR | -5.130 | -3.619 | -3.460 |\n| mod6_index_aligned | 8 | 8 | 7 | L1,SR | -34.013 | -34.013 | -15.369 |\n| mod6_span_matched | 8 | 5 | 4 | [] | -24.206 | -18.848 | -16.614 |\n\nSeed check:\n\n| class | cases | SR hits | focus [SR,L1,triple_var] | common obs | mean z SR | mean z L1 | mean z triple_var |\n|---|---:|---:|---:|---|---:|---:|---:|\n| prime | 8 | 6 | 4 | [] | -5.605 | -3.866 | -3.648 |\n| mod6_index_aligned | 8 | 8 | 7 | L1,SR | -33.683 | -33.683 | -15.288 |\n| mod6_span_matched | 8 | 8 | 8 | L1,SR,SR2,triple_var | -26.112 | -20.160 | -17.299 |\n\nRow-local label-swap audit:\n\n| pair | seed | mean signature Jaccard | mean SR delta | p(SR delta) | mean z_SR delta | p(z_SR delta) |\n|---|---:|---:|---:|---:|---:|---:|\n| prime - mod6_index | 202605130330 | 0.613 | 0.000 | 1.0000 | 28.884 | 0.0073 |\n| prime - mod6_span | 202605130330 | 0.460 | 0.375 | 0.2502 | 19.077 | 0.0103 |\n| prime - mod6_index | 202605130331 | 0.375 | -0.250 | 0.5055 | 28.078 | 0.0071 |\n| prime - mod6_span | 202605130331 | 0.431 | -0.250 | 0.5021 | 20.506 | 0.0095 |\n\n## Key Findings\n\n1. **Verificato**: la presenza binaria di `SR` non e prime-specific. Main: prime `8/8`, mod6_index `8/8`; seed check: prime `6/8`, mod6_index `8/8`, mod6_span `8/8`.\n2. **Verificato**: il label-swap row-local assorbe `SR` come count. `p(SR delta)` vale 1.0000 / 0.5055 per mod6_index e 0.2502 / 0.5021 per mod6_span.\n3. **Verificato**: il label-swap non assorbe il delta z di `SR`. `p(z_SR delta)` resta 0.0071-0.0103 in entrambe le seed e per entrambi gli antagonisti.\n4. **Verificato**: mod6 e piu intenso, non piu debole. `mean z SR` e circa -34 / -26 in mod6 contro -5 nei primi. Il residuo prime non e \"piu SR\"; e selezione attenuata dentro un pre-bordo piu rigido.\n5. **Inferito dal perimetro**: la coordinata utile non e `has_SR`; e `z_delta_SR` paired, insieme a `z_delta_L1` e `z_delta_triple_var`, come misura di quanto la selezione prime rompe il lattice candidato.\n\n## Verdict\n\n**CONSTRAINT / REDIRECT**.\n\nFormula non valida:\n\n`SR` come firma prime-specific atomica.\n\nFormula valida nel perimetro:\n\n`SR` appartiene al pre-bordo aritmetico `6k +/- 1`; la selezione prime resta come gradiente di intensita row-local rispetto a mod6. Il boundary operativo e quindi `mod6_preboundary -> prime_selection`, non `prime -> generic_nonprime`.\n\n## Bicono della scoperta\n\n- **Due radici**: lattice candidato `6k +/- 1` / sequenza prime selezionata.\n- **Singolare**: riga row-local dove `SR` e gia presente prima che la primalita selezioni.\n- **Invariante di passaggio**: la presenza di `SR` attraversa il confine; la magnitudine z cambia in modo replicato.\n- **Campo di possibilita**: possibile = cercare un osservabile di selezione come differenza prime-minus-mod6; non-possibile = classificare il bordo con presenza/assenza di `SR`.\n\n## Lenti counter-pole applicate\n\n- **L1/L4**: nessun \"solo\", \"mai\", \"zero\" usato per `SR`: i count mostrano controesempi.\n- **L3**: cambio dichiarato: claim da presenza `SR` a gradiente `z_delta_SR` dopo falsificazione del nodo prime-specific.\n- **L5**: nessun tag NEW; il risultato resta compatibile con bias noti dei gap dei primi mod q. Il report misura un gate del Lab, non rivendica una scoperta aritmetica classica.\n- **L6**: CE-0001/KSAR e PVI dichiarati nella contaminazione cognitiva.\n- **L7**: non-possibile dichiarato nel contratto e nel bicono.\n\n## Consecutio\n\nIl prossimo taglio non deve chiedere se `SR` c'e. Deve costruire un osservabile di selezione: `prime_minus_mod6_z_delta` su `SR,L1,triple_var`, con span-matched conservato come controllo fragile e index-aligned come antagonista primario. Se il delta resta replicato su piu finestre e scale, il claim diventa: la primalita attenua/rompe la rigidita del pre-bordo mod6 invece di generare `SR` da sola.\n\n## Ricadute pratiche\n\nssp_value: yes. `tools/exp_prime_vs_mod6_sr_boundary.py` e uno strumento riusabile per audit row-local prime/mod6 con label-swap null.\n\n## Files\n\n- Script: `tools/exp_prime_vs_mod6_sr_boundary.py`\n- Data: `tools/data/prime_vs_mod6_sr_boundary_20260513_0330.json`\n- Seed check: `tools/data/prime_vs_mod6_sr_boundary_20260513_0330_seedcheck.json`\n- Report: `tools/data/reports/agent_20260513_0330.md`\n",
tools/data/lab_graph.json:2317:      "content_full": "# Agent Report - Prime SR Persistent Boundary\n**Date**: 2026-05-12 03:30  \n**Piano**: 115  \n**Tension explored**: BOUNDARY (0.8)  \n**verdict**: CONSTRAINT - `prime_SR_persistent_boundary` non chiude come firma prime-specific atomica  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, provider, offset, case_state, sr_rate, common_one_sided_observables, prime_control_common_obs_jaccard]  \n**observable_contract**: claim=`prime_SR_persistent_boundary` regge solo se le finestre prime conservano `SR` come osservabile one-sided comune attraverso provider e offset, mentre controlli non-prime ampliati non condividono persistenza SR piena; observable=`SR` in `coherent_one_sided_observables` + firma comune one-sided; operator=`exp_prime_sr_persistent_boundary.py`; generator=primi via `row_spacings(\"numeri_primi\")` e `prime_gap_sequence`, controlli via composite gaps, candidati mod6, eventi Cramer-like, GUE blocks, logistic return intervals; denominator=8 finestre prime row-local + 20 controlli non-prime; non_possible=claim prime-specific se `SR` prime scende sotto 8/8, se la firma comune prime non e' `[SR]`, o se una sottofamiglia controllo condivide persistenza SR piena; not_tested=atlante beta globale, `V_c`, `gap_ratio`, origine analitica di SR.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + QxG continuo/discreto + BOUNDARY come passaggio 8 GUE / 5 Poisson + residuo `prime_SR_persistent_boundary`.\n- **Dipolo / punto-zero**: firma dei primi / firma del pre-bordo non-prime. Punto-zero: la sequenza ordinata row-local dove `SR` puo' essere supporto d'ordine senza essere specifica dei primi.\n- **Piano superiore**: topologia assiomatica del bordo: `SR` e' una sezione che attraversa provider, offset e controlli; la specie vive solo se la sezione non attraversa il contro-perimetro.\n- **Operatori laterali scelti**: boundary operator, generatori non equivalenti, null label-preserving row-local. Entrano per separare supporto osservabile, carta beta e dominio sorgente.\n- **Contaminazione cognitiva**: CE-0001/KSAR usato come reiterazione del kernel emerso: non ridisegnare l'atlante, ripassare lo stesso gate su un contro-perimetro piu' largo. PVI: il presupposto attaccato e' \"SR persistente nei primi implica prime-specific\".\n- **Proto-ipotesi**: `SR` e' un bordo prime solo se sopravvive come comune nei primi e fallisce come comune nei generatori non-prime che preservano parti del pre-bordo aritmetico.\n- **Proiezione**: stesso gate canonico ordine/null, stesso size 1024, due provider prime, quattro offset, controlli compositi/mod6/Cramer/GUE/logistic.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: testa direttamente la direzione viva `prime_SR_persistent_boundary`, separando supporto osservabile `SR` da blank beta e ampliando i controlli non-prime.\n- `not_drift`: non torna a `V_c`, fit, gap label o beta atlas; usa lo stesso gate solo per falsificare la specificita' prime.\n\n## Claim Under Test\n\n> `SR` e' una firma di confine prime-specific se resta comune in 8/8 finestre prime provider-neutral/offset-shift e nessuna sottofamiglia non-prime mostra persistenza SR piena.\n\n## Question\n\nQuando il blank beta e' rimosso dal nome, `SR` resta bordo dei primi o appartiene a un pre-bordo piu' largo visibile anche nei generatori non-prime?\n\n## Experiment Design\n\n- Prime: 2 provider (`dnd_autoricerca`, `direct_sieve`) x 4 offset (`0`, `512`, `1024`, `1536`) x 1024 gap.\n- Controlli: composite gaps, mod6 candidates, Cramer-like events su 4 offset; 4 GUE random matrix blocks; 4 logistic return interval rows.\n- Parametri main: `n_replicates=8`, `n_beta=9`, `n_baseline=16`, `z_min=2.0`, seed `202605120330`.\n- Seed check: stesso perimetro, seed `202605120331`.\n- Null baseline: permutazione marginal-preserving dentro il gate canonico ordine/null.\n- Nodo regressivo corretto nello strumento: `common_one_sided_observables` ora include i casi vuoti nell'intersezione; prima i `support_falls` potevano gonfiare il common.\n\n## Results\n\nMain run:\n\n| family | cases | SR hits | common obs | blank | beta recovered | support falls | endpoint mean |\n|---|---:|---:|---|---:|---:|---:|---:|\n| prime | 8 | 7 | [] | 7 | 1 | 0 | 2.726 |\n| all controls | 20 | 5 | [] | 2 | 8 | 10 | 1.815 |\n| composite_gaps | 4 | 0 | [] | 0 | 3 | 1 | 2.271 |\n| cramer_like | 4 | 0 | [] | 0 | 0 | 4 | 0.000 |\n| logistic_return_intervals | 4 | 0 | [] | 0 | 0 | 4 | 0.000 |\n| mod6_candidates | 4 | 2 | [] | 0 | 3 | 1 | 3.440 |\n| random_matrix | 4 | 3 | L2,triple_var | 2 | 2 | 0 | 3.364 |\n\nSeed check:\n\n| family | cases | SR hits | common obs | blank | beta recovered | support falls | endpoint mean |\n|---|---:|---:|---|---:|---:|---:|---:|\n| prime | 8 | 7 | [] | 4 | 3 | 1 | 2.474 |\n| all controls | 20 | 8 | [] | 5 | 8 | 7 | 2.418 |\n| mod6_candidates | 4 | 4 | L1,SR,triple_var | 0 | 3 | 1 | 4.077 |\n\nPrime case details, main:\n\n| case | state | one-sided obs | beta |\n|---|---|---|---|\n| dnd_autoricerca offset 0 | beta_absent_blank | SR | [] |\n| dnd_autoricerca offset 512 | beta_absent_blank | L1,triple_var | [] |\n| dnd_autoricerca offset 1024 | beta_absent_blank | SR,L1 | [] |\n| dnd_autoricerca offset 1536 | beta_absent_blank | SR,L1,triple_var | [] |\n| direct_sieve offset 0 | beta_absent_blank | SR | [] |\n| direct_sieve offset 512 | beta_absent_blank | SR,L1,triple_var | [] |\n| direct_sieve offset 1024 | beta_chart_recovered | SR,L1,triple_var | 0.2 |\n| direct_sieve offset 1536 | beta_absent_blank | SR,L1,triple_var | [] |\n\n## Key Findings\n\n1. **Verificato**: `SR` non resta in 8/8 finestre prime. Main e seed check danno entrambi `SR=7/8`; la firma comune prime e' vuota.\n2. **Verificato**: il blank beta non torna come supporto stabile. Main ha 7/8 blank, seed check scende a 4/8 con 3 beta recovery e 1 support fall.\n3. **Verificato**: i controlli ampliati non sono blank, ma non sono muti. Main: controlli `SR=5/20`; seed check: `SR=8/20`.\n4. **Verificato**: `mod6_candidates` collide nel seed check con `SR=4/4` e common `[L1, SR, triple_var]`. Questo sposta `SR` dal dominio prime al pre-bordo aritmetico `6k +/- 1` nel perimetro testato.\n5. **Inferito dal perimetro dichiarato**: la parte robusta non e' \"SR e' prime-specific\"; e' \"SR misura una memoria d'ordine aritmetica che i primi condividono con un contro-perimetro mod6 in alcune repliche\".\n\n## Verdict\n\n**CONSTRAINT / FALSIFIED scoped**.\n\nFormula non valida:\n\n`prime_SR_persistent_boundary` come firma atomica prime-specific.\n\nFormula valida nel perimetro:\n\n`SR` e' forte nei primi ma non persistente come comune 8/8; quando il contro-perimetro include candidati `6k +/- 1`, `SR` puo' trasferire fuori dai primi. Il boundary non vive tra prime e non-prime generico; vive tra primi e pre-bordo aritmetico.\n\n## Bicono della scoperta\n\n- **Due radici**: primi come sequenza selezionata / candidati mod6 come pre-bordo non selezionato.\n- **Singolare**: l'ordine aritmetico row-local prima della primalita'; qui `SR` non sa ancora se appartiene ai primi o al loro supporto candidato.\n- **Invariante di passaggio**: il gate ordine/null vede memoria in `SR`, ma la specificita' prime non sopravvive al contro-perimetro mod6.\n- **Campo di possibilita'**: possibile = testare il boundary come selezione prime dentro il pre-bordo `6k +/- 1`; non-possibile = usare `SR` da solo come firma prime-specific.\n\n## Consecutio\n\nIl prossimo ciclo deve spostare il nodo regressivo: non \"prime vs controlli generici\", ma \"primi vs candidati mod6 row-aligned\". Il test utile e' sottrarre il pre-bordo: misurare cosa resta in `SR`, `L1` e `triple_var` quando i primi sono confrontati con candidati `6k +/- 1` a stesso offset e stessa densita' locale.\n\n## Ricadute pratiche\n\nssp_value: yes. `tools/exp_prime_sr_persistent_boundary.py` diventa audit riusabile per distinguere persistenza osservabile, specificita' di dominio e collisione col pre-bordo aritmetico.\n\n## Files\n\n- Script: `tools/exp_prime_sr_persistent_boundary.py`\n- Data: `tools/data/prime_sr_persistent_boundary_20260512_0330.json`\n- Seed check: `tools/data/prime_sr_persistent_boundary_20260512_0330_seedcheck.json`\n- Report: `tools/data/reports/agent_20260512_0330.md`\n",
tools/data/lab_graph.json:2335:          "text": "- Prime: 2 provider (`dnd_autoricerca`, `direct_sieve`) x 4 offset (`0`, `512`, `1024`, `1536`) x 1024 gap.\n- Controlli: composite gaps, mod6 candidates, Cramer-like events su 4 offset; 4 GUE random m"
tools/data/lab_graph.json:2368:      "content_full": "# Agent Report - Boundary Residual Beta-Absent Audit\n**Date**: 2026-05-10 03:30  \n**Piano**: 114  \n**Tension explored**: BOUNDARY (0.8)  \n**verdict**: CONSTRAINT - il residuo beta-absent non e' una classe unica chiusa  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var, window_state, blank_window_rate, full_signature_jaccard, common_window_obs_jaccard]  \n**observable_contract**: claim=le due righe residue beta-absent sono strutturali solo se `beta_absent_blank` persiste in finestre row-local da 1024 gap; observable=`window_state` + firma degli osservabili one-sided; operator=`exp_boundary_residual_beta_absent_audit.py`; generator=`numeri_primi` da `dnd_autoricerca.genera_segnale` e `random_matrix` da `gue_spacing_blocks`; denominator=2 righe aperte BOUNDARY, full row + 4 finestre row-local da 1024 gap; non_possible=classe residua unica se una riga recupera beta o perde supporto nelle finestre row-local; not_tested=griglia beta globale, fit `V_c`, validita' label sorgente GUE/Poisson.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A9 terzo incluso + A11 combo + QxG continuo/discreto + BOUNDARY 13 righe + residui `numeri_primi:cycle_3` / `random_matrix:cycle_7`.\n- **Dipolo / punto-zero**: blank strutturale / blank da atlante. Punto-zero: la stessa misura row-local da 1024 gap che decide se la beta manca per struttura o riappare per scelta di finestra.\n- **Piano superiore**: topologia assiomatica del bordo: la classe globale cade se una carta locale riapre la coordinata beta.\n- **Operatori laterali scelti**: boundary operator, chart locale, filtrazione. Il boundary operator separa supporto e beta; la chart locale testa la finestra senza rifare il mondo; la filtrazione conserva il denominatore row-aligned.\n- **Contaminazione cognitiva**: CE-0019 usato come contratto combo prima della misura; CE-0022 usato come boundary operator + chart locale; KSAR usato come reiterazione sul deposito 15:32-18:39 senza ridisegnare il perimetro.\n- **Proto-ipotesi**: il residuo medio/forte beta-absent e' una classe unica solo se entrambi i target restano blank in tutte le finestre row-local e conservano una firma osservabile compatibile.\n- **Proiezione**: applico il gate canonico ordine/null alle sole due righe residue, poi confronto persistenza del blank e Jaccard delle firme one-sided.\n\n## Aderenza alla direzione\n\n- `relation`: follows_direction\n- `why`: attacca direttamente i due residui beta-absent medio/forti lasciati dal valutatore dopo `thin_persist_rows=0/13`.\n- `not_drift`: non usa `V_c`, non usa label GUE/Poisson come campo decisionale, non rigenera la griglia beta globale.\n\n## Claim Under Test\n\n> I due residui `numeri_primi:cycle_3` e `random_matrix:cycle_7` formano una classe unica `medium/strong beta-absent` se il blank persiste in tutte le finestre row-local da 1024 gap e le firme one-sided restano compatibili.\n\n## Question\n\nI due blank residui sono lo stesso operatore di confine, due classi distinte, o un artefatto da denominatore/atlante?\n\n## Experiment Design\n\n- Perimetro atomico: `numeri_primi:cycle_3`, `random_matrix:cycle_7`.\n- Scope: full row + 4 finestre consecutive da 1024 gap per ciascun target.\n- Parametri: `n_replicates=12`, `n_beta=11`, `n_baseline=24`, `z_min=2.0`, seed `202605100330`.\n- Null baseline: permutazione marginal-preserving usata dal gate canonico gia' adottato nei report BOUNDARY.\n- Non misurato: `gap_ratio`, `V_c`, nuova griglia beta globale, validita' delle label sorgente GUE/Poisson.\n- Criterio di caduta: una riga recupera beta o perde supporto in una finestra row-local; in quel caso il residuo non e' classe unica chiusa.\n\n## Results\n\n| row | full state | full one-sided | window blanks | beta recovered | support falls | common window obs | mean endpoint | mean stable coherent |\n|---|---:|---|---:|---:|---:|---|---:|---:|\n| numeri_primi:cycle_3 | beta_absent_blank | SR,L1,triple_var | 4/4 | 0 | 0 | SR | 2.761 | 2.563 |\n| random_matrix:cycle_7 | beta_absent_blank | SR,SR2,L1,L2,triple_var | 3/4 | 1 | 0 | L2 | 2.987 | 3.083 |\n\n| comparison | value |\n|---|---:|\n| full_signature_jaccard | 0.600 |\n| common_window_obs_jaccard | 0.000 |\n| random_matrix recovered beta | window_4 -> beta [0.4] |\n\n## Key Findings\n\n1. **Verificato: `numeri_primi:cycle_3` resta beta-absent in 4/4 finestre.** Il supporto non cade; l'osservabile comune di finestra e' `SR`.\n2. **Verificato: `random_matrix:cycle_7` non resta beta-absent in 4/4 finestre.** La quarta finestra recupera beta `[0.4]` con supporto vivo (`SR2,L1,L2,triple_var`).\n3. **Verificato: le firme comuni di finestra divergono.** `common_window_obs_jaccard=0.000`: primi conserva `SR`, random matrix conserva `L2`.\n4. **Inferito dal perimetro dichiarato: il residuo beta-absent non e' una classe unica chiusa.** Una parte e' blank persistente row-local, una parte e' chart-sensitive.\n\n## Verdict\n\n**CONSTRAINT**.\n\nNel perimetro delle due righe residue e finestre da 1024 gap, `medium/strong beta-absent` si scinde:\n\n`numeri_primi:cycle_3` = blank persistente row-local.  \n`random_matrix:cycle_7` = blank forte ma chart-sensitive, con beta `[0.4]` recuperata in 1/4 finestre.\n\nFormula valida:\n\n`beta_absent_residue` non matura come classe unica; diventa un audit a due stati: `prime_persistent_blank` / `random_matrix_chart_sensitive_blank`.\n\n## Bicono della scoperta\n\n- **Due radici**: blank persistente / blank chart-sensitive.\n- **Singolare**: supporto ordine/null vivo senza coordinata beta globale.\n- **Invariante di passaggio**: il supporto non cade in nessuna delle 8 finestre; cio' che cambia e' la coordinata beta e la firma osservabile.\n- **Campo di possibilità**: possibile = chiudere la tassonomia BOUNDARY con due sotto-stati residui; non-possibile = promuovere `medium/strong beta-absent` come specie unica del confine.\n\n## Consecutio\n\nIl prossimo ciclo non deve riaprire il thin blank. Deve sigillare il nuovo audit a due stati:\n\n- `prime_persistent_blank`: testare se `SR` resta l'osservabile comune sotto seed/window shift.\n- `random_matrix_chart_sensitive_blank`: testare se beta `[0.4]` e' coordinata locale stabile o evento di una singola finestra.\n\n## Ricadute pratiche\n\nssp_value: yes. Lo script e' uno strumento riusabile per audit row-local di residui BOUNDARY senza rigenerare fit globali.\n\n## Files\n\n- Script: `tools/exp_boundary_residual_beta_absent_audit.py`\n- Data: `tools/data/boundary_residual_beta_absent_audit_20260510_0330.json`\n- Report: `tools/data/reports/agent_20260510_0330.md`\n",
tools/data/occhio/occhio_20260318_1856.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260318_1856.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1856.json:620:      "domains": [
tools/data/occhio/occhio_20260318_1856.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1856.json:639:      "domains": [
tools/data/occhio/occhio_20260318_1856.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1856.json:658:      "domains": [
tools/data/occhio/occhio_20260318_1856.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1856.json:676:      "domains": [
tools/data/occhio/occhio_20260318_1856.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1856.json:695:      "domains": [
tools/data/occhio/occhio_20260318_1856.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1856.json:708:      "domains": [
tools/data/occhio/occhio_20260318_1856.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1856.json:720:      "domains": [
tools/data/occhio/occhio_20260318_1856.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1856.json:732:      "domains": [
tools/data/occhio/occhio_20260318_1856.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1856.json:743:      "domains": [
tools/data/occhio/occhio_20260318_1843.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260318_1843.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1843.json:620:      "domains": [
tools/data/occhio/occhio_20260318_1843.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1843.json:639:      "domains": [
tools/data/occhio/occhio_20260318_1843.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1843.json:658:      "domains": [
tools/data/occhio/occhio_20260318_1843.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1843.json:676:      "domains": [
tools/data/occhio/occhio_20260318_1843.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1843.json:695:      "domains": [
tools/data/occhio/occhio_20260318_1843.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1843.json:708:      "domains": [
tools/data/occhio/occhio_20260318_1843.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1843.json:720:      "domains": [
tools/data/occhio/occhio_20260318_1843.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1843.json:732:      "domains": [
tools/data/occhio/occhio_20260318_1843.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1843.json:743:      "domains": [
tools/data/notte_20260331_0330.md:4:  Direzione: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo in
tools/data/notte_20260331_0330.md:5:  [confine_inesplorato] BOUNDARY: 8 domini GUE, 5 Poisson — il confine è il terzo incluso oper
tools/data/notte_20260331_0330.md:8:  logistica_biforcazione_cp_3.57: r=1.0, spacing=Poisson-like [VINCOLO] [NULL:non-disc]
tools/data/notte_20260331_0330.md:10:  logistica_biforcazione_cp_3.765: r=1.0, spacing=Poisson-like [VINCOLO] [NULL:non-disc]
tools/data/notte_20260331_0330.md:12:  collatz_cp: r=0.8740629685157423, spacing=GUE-like [conferma]
tools/data/notte_20260331_0330.md:14:  ising_2d_cp_-0.47801326011314715: r=0.8591691474753246, spacing=GUE-like [conferma]
tools/data/notte_20260331_0330.md:15:  ising_2d_cp_0.30696337890028147: r=0.835757106387861, spacing=GUE-like [conferma]
tools/data/notte_20260331_0330.md:16:  brownian_motion_cp_0.14336009606062766: r=1.0, spacing=Poisson-like [VINCOLO] [NULL:non-disc]
tools/data/notte_20260331_0330.md:17:  brownian_motion_cp_0.9343416664453827: r=1.2000000000000002, spacing=Poisson-like [VINCOLO] [NULL:non-disc]
tools/data/notte_20260331_0330.md:18:  percolation_cp_0.3346796213807732: r=0.8522727272727272, spacing=GUE-like [conferma]
tools/data/notte_20260331_0330.md:19:  percolation_cp_0.8762349717424142: r=1.0, spacing=GUE-like [conferma]
tools/data/notte_20260331_0330.md:20:  cellular_automata_cp_90: r=0.6458196181698486, spacing=GUE-like [conferma]
tools/data/notte_20260331_0330.md:32:  Campo dopo Fase 0: 6 GUE / 4 Poisson
tools/data/notte_20260331_0330.md:36:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094) [NULL:non-disc]
tools/data/notte_20260331_0330.md:37:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260331_0330.md:38:  ising_2d_var_0.1: r=0.9990577358068202, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260331_0330.md:39:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286) [NULL:non-disc]
tools/data/notte_20260331_0330.md:71:## Fase 4: Cross-domain
tools/data/notte_20260331_0330.md:89:  GUE: 8 | Poisson: 6 | Vincoli: 13 | Anomalie: 11
tools/data/notte_20260331_0330.md:91:  Domini GUE: collatz_cp, ising_2d_cp_-0.47801326011314715, ising_2d_cp_0.30696337890028147, percolation_cp_0.3346796213807732, percolation_cp_0.8762349717424142, cellular_automata_cp_90, cellular_automata_var_30, ising_2d_var_0.1
tools/data/notte_20260331_0330.md:92:  Domini Poisson: logistica_biforcazione_cp_3.57, logistica_biforcazione_cp_3.765, brownian_motion_cp_0.14336009606062766, brownian_motion_cp_0.9343416664453827, logistica_biforcazione_var_3.57, coupled_oscillators_var_50
tools/data/evolution/evolution_20260514_1612.md:3:Il report osserva il passo come traiettoria `prime-minus-mod6 -> trasduttore -> GUE/Anderson`, individua l’attrito nel tier di evidenza non dichiarato prima della misura, e mette in consecutio il prossimo perimetro: `W=6`, `evidence_tier` esplicito, autopsy dalla trace lab-native.
tools/data/occhio/occhio_20260319_1435.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260319_1435.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1435.json:620:      "domains": [
tools/data/occhio/occhio_20260319_1435.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1435.json:639:      "domains": [
tools/data/occhio/occhio_20260319_1435.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1435.json:658:      "domains": [
tools/data/occhio/occhio_20260319_1435.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1435.json:676:      "domains": [
tools/data/occhio/occhio_20260319_1435.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1435.json:695:      "domains": [
tools/data/occhio/occhio_20260319_1435.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1435.json:708:      "domains": [
tools/data/occhio/occhio_20260319_1435.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1435.json:720:      "domains": [
tools/data/occhio/occhio_20260319_1435.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1435.json:732:      "domains": [
tools/data/occhio/occhio_20260319_1435.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1435.json:743:      "domains": [
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:146:          "domain_window": "RP_lambda_0.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:185:          "domain_window": "RP_lambda_0.030",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:224:          "domain_window": "RP_lambda_0.045",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:263:          "domain_window": "RP_lambda_0.060",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:302:          "domain_window": "RP_lambda_0.075",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:341:          "domain_window": "RP_lambda_0.100",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:380:          "domain_window": "RP_lambda_0.180",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:419:          "domain_window": "RP_lambda_0.320",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:458:          "domain_window": "RP_lambda_0.680",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:497:          "domain_window": "RP_lambda_0.820",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:536:          "domain_window": "RP_lambda_1.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:729:          "domain_window": "RP_lambda_0.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:768:          "domain_window": "RP_lambda_0.030",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:807:          "domain_window": "RP_lambda_0.045",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:846:          "domain_window": "RP_lambda_0.060",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:885:          "domain_window": "RP_lambda_0.075",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:924:          "domain_window": "RP_lambda_0.100",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:963:          "domain_window": "RP_lambda_0.180",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1002:          "domain_window": "RP_lambda_0.320",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1041:          "domain_window": "RP_lambda_0.680",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1080:          "domain_window": "RP_lambda_0.820",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1119:          "domain_window": "RP_lambda_1.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1309:          "domain_window": "RP_lambda_0.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1348:          "domain_window": "RP_lambda_0.030",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1387:          "domain_window": "RP_lambda_0.045",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1426:          "domain_window": "RP_lambda_0.060",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1465:          "domain_window": "RP_lambda_0.075",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1504:          "domain_window": "RP_lambda_0.100",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1543:          "domain_window": "RP_lambda_0.180",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1582:          "domain_window": "RP_lambda_0.320",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1621:          "domain_window": "RP_lambda_0.680",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1660:          "domain_window": "RP_lambda_0.820",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1699:          "domain_window": "RP_lambda_1.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1879:          "domain_window": "RP_lambda_0.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1918:          "domain_window": "RP_lambda_0.030",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1957:          "domain_window": "RP_lambda_0.045",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:1996:          "domain_window": "RP_lambda_0.060",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2035:          "domain_window": "RP_lambda_0.075",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2074:          "domain_window": "RP_lambda_0.100",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2113:          "domain_window": "RP_lambda_0.180",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2152:          "domain_window": "RP_lambda_0.320",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2191:          "domain_window": "RP_lambda_0.680",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2230:          "domain_window": "RP_lambda_0.820",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2269:          "domain_window": "RP_lambda_1.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2445:          "domain_window": "RP_lambda_0.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2484:          "domain_window": "RP_lambda_0.030",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2523:          "domain_window": "RP_lambda_0.045",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2562:          "domain_window": "RP_lambda_0.060",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2601:          "domain_window": "RP_lambda_0.075",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2640:          "domain_window": "RP_lambda_0.100",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2679:          "domain_window": "RP_lambda_0.180",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2718:          "domain_window": "RP_lambda_0.320",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2757:          "domain_window": "RP_lambda_0.680",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2796:          "domain_window": "RP_lambda_0.820",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:2835:          "domain_window": "RP_lambda_1.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3004:          "domain_window": "RP_lambda_0.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3043:          "domain_window": "RP_lambda_0.030",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3082:          "domain_window": "RP_lambda_0.045",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3121:          "domain_window": "RP_lambda_0.060",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3160:          "domain_window": "RP_lambda_0.075",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3199:          "domain_window": "RP_lambda_0.100",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3238:          "domain_window": "RP_lambda_0.180",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3277:          "domain_window": "RP_lambda_0.320",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3316:          "domain_window": "RP_lambda_0.680",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3355:          "domain_window": "RP_lambda_0.820",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3394:          "domain_window": "RP_lambda_1.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3445:      "domain_window": "RP_lambda_0.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3457:      "domain_window": "RP_lambda_0.030",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3469:      "domain_window": "RP_lambda_0.045",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3489:      "domain_window": "RP_lambda_0.060",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3505:      "domain_window": "RP_lambda_0.075",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3520:      "domain_window": "RP_lambda_0.100",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3532:      "domain_window": "RP_lambda_0.180",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3544:      "domain_window": "RP_lambda_0.320",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3556:      "domain_window": "RP_lambda_0.680",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3568:      "domain_window": "RP_lambda_0.820",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3580:      "domain_window": "RP_lambda_1.000",
tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json:3596:    "generator": "H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE across size, seed, k and unfolding mode",
tools/data/evolution/evolution_20260506_0330.md:3:Sintesi: passo netto, autologico (ha falsificato il proprio risultato precedente). Attrito minimo (GUE piccolo per default ereditato, autopsy con testo stale). Possibilità forte: la dimensionalità perturbativa come nuovo invariante di dominio, incrociabile con la struttura modulare.
tools/data/occhio/occhio_20260319_1445.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260319_1445.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1445.json:620:      "domains": [
tools/data/occhio/occhio_20260319_1445.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1445.json:639:      "domains": [
tools/data/occhio/occhio_20260319_1445.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1445.json:658:      "domains": [
tools/data/occhio/occhio_20260319_1445.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1445.json:676:      "domains": [
tools/data/occhio/occhio_20260319_1445.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1445.json:695:      "domains": [
tools/data/occhio/occhio_20260319_1445.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1445.json:708:      "domains": [
tools/data/occhio/occhio_20260319_1445.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1445.json:720:      "domains": [
tools/data/occhio/occhio_20260319_1445.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1445.json:732:      "domains": [
tools/data/occhio/occhio_20260319_1445.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1445.json:743:      "domains": [
tools/data/occhio/occhio_20260319_1417.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260319_1417.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1417.json:620:      "domains": [
tools/data/occhio/occhio_20260319_1417.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1417.json:639:      "domains": [
tools/data/occhio/occhio_20260319_1417.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1417.json:658:      "domains": [
tools/data/occhio/occhio_20260319_1417.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1417.json:676:      "domains": [
tools/data/occhio/occhio_20260319_1417.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1417.json:695:      "domains": [
tools/data/occhio/occhio_20260319_1417.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1417.json:708:      "domains": [
tools/data/occhio/occhio_20260319_1417.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1417.json:720:      "domains": [
tools/data/occhio/occhio_20260319_1417.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1417.json:732:      "domains": [
tools/data/occhio/occhio_20260319_1417.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260319_1417.json:743:      "domains": [
tools/data/evolution/evolution_20260425_0330.md:1:Report scritto. Sintesi: passo netto, nessun attrito, consecutio rispettata. Il run ha separato due canali di memoria Markov nei primi (algebrico 140x > statistico) e mostrato che l'ordering-GUE ne ha solo uno. Tre possibilità emergenti: saturazione come terzo asse, eterogeneità Poisson come confine del r-test, e falsificazione attiva dell'assenza di canale algebrico nell'ordering-GUE.
tools/data/occhio/occhio_20260318_1904.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260318_1904.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1904.json:620:      "domains": [
tools/data/occhio/occhio_20260318_1904.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1904.json:639:      "domains": [
tools/data/occhio/occhio_20260318_1904.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1904.json:658:      "domains": [
tools/data/occhio/occhio_20260318_1904.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1904.json:676:      "domains": [
tools/data/occhio/occhio_20260318_1904.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1904.json:695:      "domains": [
tools/data/occhio/occhio_20260318_1904.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1904.json:708:      "domains": [
tools/data/occhio/occhio_20260318_1904.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1904.json:720:      "domains": [
tools/data/occhio/occhio_20260318_1904.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1904.json:732:      "domains": [
tools/data/occhio/occhio_20260318_1904.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1904.json:743:      "domains": [
tools/data/evolution/evolution_20260515_1855.md:3:Il report osserva il passo 18:55 come rientro corretto sul seme BOUNDARY 8 GUE / 5 Poisson, individua l’attrito nel contratto pre-esperimento (`baseline_nota`, `CE_audit`, `step_trace`) e lascia una consecutio concreta: audit dei nodi ponte contro crossover GUE-Poisson classici.
tools/data/occhio/occhio_20260318_1849.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260318_1849.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1849.json:620:      "domains": [
tools/data/occhio/occhio_20260318_1849.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1849.json:639:      "domains": [
tools/data/occhio/occhio_20260318_1849.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1849.json:658:      "domains": [
tools/data/occhio/occhio_20260318_1849.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1849.json:676:      "domains": [
tools/data/occhio/occhio_20260318_1849.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1849.json:695:      "domains": [
tools/data/occhio/occhio_20260318_1849.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1849.json:708:      "domains": [
tools/data/occhio/occhio_20260318_1849.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1849.json:720:      "domains": [
tools/data/occhio/occhio_20260318_1849.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1849.json:732:      "domains": [
tools/data/occhio/occhio_20260318_1849.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1849.json:743:      "domains": [
tools/data/evolution/evolution_20260508_2019.md:3:Ho mantenuto il report breve e centrato sul passo: traiettoria reader/generator, attrito da autopsy senza jsonl, nodo regressivo nel contratto di avvio e nella condizione di uscita dal banco phi, consecutio verso un `reader_generator_gate` trasferito al confine GUE/Poisson.
tools/data/learning_curve_100k.json:26:      "class": "GUE",
tools/data/learning_curve_100k.json:32:      "class": "GUE",
tools/data/learning_curve_100k.json:38:      "class": "GUE",
tools/data/learning_curve_100k.json:44:      "class": "GUE",
tools/data/learning_curve_100k.json:56:    "fd_class": "GUE",
tools/data/learning_curve_100k.json:57:    "verdict": "LIKELY GUE: \u03b2\u2192GUE, KS\u2192GOE (finite-height effect, Piano 11c)",
tools/data/occhio/occhio_20260318_1852.json:3:  "context": "Zero signature across domains \u2014 phi-crossings CV analysis",
tools/data/occhio/occhio_20260318_1852.json:618:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1852.json:620:      "domains": [
tools/data/occhio/occhio_20260318_1852.json:637:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1852.json:639:      "domains": [
tools/data/occhio/occhio_20260318_1852.json:656:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1852.json:658:      "domains": [
tools/data/occhio/occhio_20260318_1852.json:674:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1852.json:676:      "domains": [
tools/data/occhio/occhio_20260318_1852.json:693:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1852.json:695:      "domains": [
tools/data/occhio/occhio_20260318_1852.json:706:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1852.json:708:      "domains": [
tools/data/occhio/occhio_20260318_1852.json:718:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1852.json:720:      "domains": [
tools/data/occhio/occhio_20260318_1852.json:730:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1852.json:732:      "domains": [
tools/data/occhio/occhio_20260318_1852.json:741:      "type": "cross_domain_operator",
tools/data/occhio/occhio_20260318_1852.json:743:      "domains": [
tools/data/seme_backup_b2_20260515_180327.json:2:  "old_direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
tools/data/notte_20260306_0330.md:4:  ising_2d_var_-0.1: r=0.9618098462163317, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260306_0330.md:5:  ising_2d_var_0.1: r=0.9905364716330192, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260306_0330.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260306_0330.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260306_0330.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260306_0330.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260306_0330.md:10:  brownian_motion_var_0.3: r=1.0, spacing=Poisson-like (⟨r⟩=0.40716210665181113)
tools/data/notte_20260306_0330.md:11:  brownian_motion_var_0.5: r=1.1993212669683257, spacing=Poisson-like (⟨r⟩=0.39848592435784913)
tools/data/notte_20260306_0330.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260306_0330.md:13:  percolation_var_0.55: r=1.0, spacing=Poisson-like (⟨r⟩=0.42469524388230473)
tools/data/notte_20260306_0330.md:14:  percolation_var_0.65: r=1.0, spacing=Poisson-like (⟨r⟩=0.4501286869364695)
tools/data/notte_20260306_0330.md:44:## Fase 4: Cross-domain
tools/data/perturbation_dimensionality_audit.json:3:  "question": "Is the GUE second perturbation axis stable across independent ensembles and sample-size controls?",
tools/data/perturbation_dimensionality_audit.json:39:  "fixed_domains": {
tools/data/boundary_bridge_stability_audit_20260515_1915.json:5:    "denominator": "13 rows: 8 GUE and 5 Poisson, repeated across graph-reader parameter grid",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:49:      "domain": "brownian_motion",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:50:      "domain_window": "brownian_motion:cycle_12",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:55:      "source_domain_type": "Poisson",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:64:      "domain": "cellular_automata",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:65:      "domain_window": "cellular_automata:cycle_8",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:70:      "source_domain_type": "GUE",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:79:      "domain": "coupled_oscillators",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:80:      "domain_window": "coupled_oscillators:cycle_10",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:85:      "source_domain_type": "Poisson",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:94:      "domain": "ising_2d",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:95:      "domain_window": "ising_2d:cycle_1",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:100:      "source_domain_type": "GUE",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:109:      "domain": "logistica_biforcazione",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:110:      "domain_window": "logistica_biforcazione:cycle_5",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:115:      "source_domain_type": "GUE",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:124:      "domain": "logistica_biforcazione_var_3.5699",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:125:      "domain_window": "logistica_biforcazione_var_3.5699:cycle_13",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:130:      "source_domain_type": "GUE",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:139:      "domain": "numeri_primi",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:140:      "domain_window": "numeri_primi:cycle_3",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:145:      "source_domain_type": "GUE",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:154:      "domain": "pendolo_doppio",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:155:      "domain_window": "pendolo_doppio:cycle_2",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:160:      "source_domain_type": "Poisson",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:169:      "domain": "percolation",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:170:      "domain_window": "percolation:cycle_9",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:175:      "source_domain_type": "Poisson",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:184:      "domain": "random_matrix",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:185:      "domain_window": "random_matrix:cycle_7",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:190:      "source_domain_type": "GUE",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:199:      "domain": "reaction_diffusion",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:200:      "domain_window": "reaction_diffusion:cycle_11",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:205:      "source_domain_type": "GUE",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:214:      "domain": "string_vibration",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:215:      "domain_window": "string_vibration:cycle_6",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:220:      "source_domain_type": "Poisson",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:229:      "domain": "zeta_zeros",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:230:      "domain_window": "zeta_zeros:cycle_4",
tools/data/boundary_bridge_stability_audit_20260515_1915.json:235:      "source_domain_type": "GUE",
tools/data/notte_20260320_0330.md:4:  ising_2d_var_-0.1: r=0.9811019213055721, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260320_0330.md:5:  ising_2d_var_0.1: r=0.9951420369672802, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260320_0330.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260320_0330.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260320_0330.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260320_0330.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260320_0330.md:10:  brownian_motion_var_0.3: r=1.0149253731343284, spacing=Poisson-like (⟨r⟩=0.3935592399692033)
tools/data/notte_20260320_0330.md:11:  brownian_motion_var_0.5: r=1.0, spacing=Poisson-like (⟨r⟩=0.39857620187545184)
tools/data/notte_20260320_0330.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260320_0330.md:13:  percolation_var_0.55: r=0.9655172413793103, spacing=Poisson-like (⟨r⟩=0.47237797827873335)
tools/data/notte_20260320_0330.md:14:  percolation_var_0.65: r=0.9642857142857143, spacing=Poisson-like (⟨r⟩=0.4251485991244417)
tools/data/notte_20260320_0330.md:44:## Fase 4: Cross-domain
tools/data/evolution/evolution_20260516_1031.md:3:Ho mantenuto il focus sul passo: spostamento da lambda RP a lettore, attrito telemetrico `completed_no_jsonl`, nodo regressivo nel pre-contratto `endpoint_reader_invariance` vs `RP_reader_residue`, e consecutio sul filtro GUE/Poisson prima di tornare a RP.
tools/data/notte_20260315_0749.md:4:  ising_2d_var_-0.1: r=0.9917140139075722, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260315_0749.md:5:  ising_2d_var_0.1: r=1.2487805121596578, spacing=GUE-like (⟨r⟩=1.0)
tools/data/notte_20260315_0749.md:6:  numeri_primi_var_100000: r=0.8615840174827735, spacing=GUE-like (⟨r⟩=0.9609375)
tools/data/notte_20260315_0749.md:7:  logistica_biforcazione_var_3.57: r=1.0, spacing=Poisson-like (⟨r⟩=0.35930230610663094)
tools/data/notte_20260315_0749.md:8:  logistica_biforcazione_var_3.9: r=1.000545256270447, spacing=Poisson-like (⟨r⟩=0.3914428894887236)
tools/data/notte_20260315_0749.md:9:  cellular_automata_var_30: r=0.8703941780326052, spacing=GUE-like (⟨r⟩=0.8649999999999983)
tools/data/notte_20260315_0749.md:10:  brownian_motion_var_0.3: r=0.990909090909091, spacing=Poisson-like (⟨r⟩=0.3830376668120655)
tools/data/notte_20260315_0749.md:11:  brownian_motion_var_0.5: r=1.0, spacing=Poisson-like (⟨r⟩=0.38666236411128574)
tools/data/notte_20260315_0749.md:12:  coupled_oscillators_var_50: r=1.0, spacing=Poisson-like (⟨r⟩=0.45756422661060286)
tools/data/notte_20260315_0749.md:13:  percolation_var_0.55: r=0.6340378197997775, spacing=Poisson-like (⟨r⟩=0.4578693904490548)
tools/data/notte_20260315_0749.md:14:  percolation_var_0.65: r=1.0, spacing=Poisson-like (⟨r⟩=0.4600532522260183)
tools/data/notte_20260315_0749.md:44:## Fase 4: Cross-domain
tools/data/spettro_zeta_results.json:8:  "stat_class": "GUE",
tools/data/spettro_zeta_results.json:632:        "vs_GUE": {
tools/data/spettro_zeta_results.json:636:        "vs_Poisson": {
tools/data/spettro_zeta_results.json:646:        "vs_GUE": {
tools/data/spettro_zeta_results.json:650:        "vs_Poisson": {
tools/data/spettro_zeta_results.json:660:        "vs_GUE": {
tools/data/spettro_zeta_results.json:664:        "vs_Poisson": {
tools/data/spettro_zeta_results.json:678:        "GUE_ref": 0.178
tools/data/spettro_zeta_results.json:1208:      "stat_class": "GUE",
tools/data/graph_completion/graph_completion_20260515_1745.json:11:    "observable_contract": "claim=`phi` e' stato fisico di confine tra ordine periodico e disordine random solo se statistica spettrale e localizzazione concordano; observable=`spacing_r` + `mean_ipr`/`participation_entropy`; operator=`tools/exp_aubry_boundary_phase_transport_gate.py`; generator=Hamiltoniana tight-binding binaria con sequenze phi/silver/bronze, periodico AB e random bilanciato a densita phi; denominator=N={89,144,233} x phase={0,0.25,0.5,0.75} x V=0.50..2.50 step 0.25 x generator, random_trials=6; non_possible=promuovere confine fisico da una sola osservabile, da phase0, o da un valore critico aggregato; not_tested=limite asintotico, modello Aubry-Andre coseno canonico, dati sperimentali, classi GUE/Poisson universali dirette.",
tools/data/graph_completion/graph_completion_20260515_1745.json:118:      "observable_contract": "claim=`phi` e' stato fisico di confine tra ordine periodico e disordine random solo se statistica spettrale e localizzazione concordano; observable=`spacing_r` + `mean_ipr`/`participation_entropy`; operator=`tools/exp_aubry_boundary_phase_transport_gate.py`; generator=Hamiltoniana tight-binding binaria con sequenze phi/silver/bronze, periodico AB e random bilanciato a densita phi; denominator=N={89,144,233} x phase={0,0.25,0.5,0.75} x V=0.50..2.50 step 0.25 x generator, random_trials=6; non_possible=promuovere confine fisico da una sola osservabile, da phase0, o da un valore critico aggregato; not_tested=limite asintotico, modello Aubry-Andre coseno canonico, dati sperimentali, classi GUE/Poisson universali dirette.",
tools/data/graph_completion/graph_completion_20260515_1745.json:128:            "suggestion": "Nel prossimo ciclo aggiungere una sezione `nearest_known_result` e confrontare esplicitamente: Aubry-Andre coseno canonico, Fibonacci quasicrystal localization/spectral statistics, GUE/Poisson crossover. Riformulare `relazione nuova` come `nuova nel lab/per questo gate` se non supera quel confronto."
tools/data/graph_completion/graph_completion_20260515_1745.json:134:            "evidence": "Contro `seme.json.direzione` il report aderisce: porta il confine GUE/Poisson in spacing/localizzazione. Pero' `lab_data.json.direzione` diverge come residuo pubblico/pre-gate su VECTOR RESIDUE e non viene nominato esplicitamente; il report cita solo prime/mod6 in forma generica.",
tools/data/graph_completion/graph_completion_20260511_0330.json:11:    "observable_contract": "claim=`prime_persistent_blank` e' isolato solo se `numeri_primi:cycle_3` resta `beta_absent_blank` attraverso provider, offset row-local e seed shift con `SR` come osservabile one-sided comune; observable=`case_state` + firma osservabili one-sided focalizzata su `SR`; operator=`exp_prime_persistent_blank_gate.py`; generator=primi via `row_spacings(\"numeri_primi\")` e `prime_gap_sequence`, controlli via GUE random matrix blocks e logistic return intervals; denominator=8 finestre prime da 1024 gap (2 provider x 4 offset) + 8 controlli cross-dominio; non_possible=`prime_persistent_blank` se una finestra prime recupera beta/perde supporto o se i controlli condividono la stessa firma blank-SR; not_tested=atlante beta globale, `V_c`, `gap_ratio`, validita' label sorgente GUE/Poisson.",
tools/data/graph_completion/graph_completion_20260511_0330.json:110:      "observable_contract": "claim=`prime_persistent_blank` e' isolato solo se `numeri_primi:cycle_3` resta `beta_absent_blank` attraverso provider, offset row-local e seed shift con `SR` come osservabile one-sided comune; observable=`case_state` + firma osservabili one-sided focalizzata su `SR`; operator=`exp_prime_persistent_blank_gate.py`; generator=primi via `row_spacings(\"numeri_primi\")` e `prime_gap_sequence`, controlli via GUE random matrix blocks e logistic return intervals; denominator=8 finestre prime da 1024 gap (2 provider x 4 offset) + 8 controlli cross-dominio; non_possible=`prime_persistent_blank` se una finestra prime recupera beta/perde supporto o se i controlli condividono la stessa firma blank-SR; not_tested=atlante beta globale, `V_c`, `gap_ratio`, validita' label sorgente GUE/Poisson.",
tools/data/graph_completion/graph_completion_20260511_0330.json:126:            "evidence": "Il seme/lab_data indicano direzione BOUNDARY su `8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo`; il ciclo usa 4 GUE + 4 logistic controlli e resta sul residuo `numeri_primi:cycle_3`. La deviazione verso prime-residue e logistic e' motivata, ma non dichiarata come `deliberate_counter_perimeter` rispetto al perimetro 8 GUE/5 Poisson.",
tools/data/graph_completion/graph_completion_20260511_0330.json:127:            "suggestion": "Nel prossimo ciclo dichiarare esplicitamente se `prime_persistent_blank` e' contro-perimetro deliberato della direzione GUE/Poisson, oppure tornare al perimetro richiesto con 8 GUE e 5 Poisson come domini principali."
tools/data/graph_completion/graph_completion_20260516_1031.json:10:    "verdict": "CONSTRAINT - `window_mode/unfolding` non trasferisce come asse cross-dominio nel perimetro dichiarato. Poisson resta endpoint su 8/8 righe, ma GUE non resta endpoint sotto la clausola classica a due lettori e RP produce 0/24 residui sopra i null row-aligned. Il boundary reader-axis resta ipotesi da riparare al nodo regressivo del lettore, non claim fisico.",
tools/data/graph_completion/graph_completion_20260516_1031.json:11:    "observable_contract": "claim=`window_mode/unfolding` e' coordinata del boundary se gli endpoint GUE/Poisson trasferiscono mentre le righe RP boundary espongono residuo reader-specific contro null row-aligned; observable=reader_sensitivity del vettore spettrale canonico tra global_mean, exact_local e odd_coerced; operator=stessa riga di gap letta con piu unfolding/window modes; generator=matrici GUE, gap Poisson esponenziali, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=domain x size x seed, null da permutazione e shift circolare sulla stessa riga; non_possible=asse reader come boundary se un endpoint si frattura o RP non batte i null; not_tested=spettri sperimentali, N infinito, Anderson 3D, prova analitica di universalita.",
tools/data/graph_completion/graph_completion_20260516_1031.json:12:    "claim_under_test": "`window_mode/unfolding` trasferisce come coordinata del boundary se Poisson e GUE restano endpoint e RP `0.045/0.060/0.075` mostra residuo reader-specific sopra null row-aligned.",
tools/data/graph_completion/graph_completion_20260516_1031.json:14:    "consecutio": "Il prossimo passo utile e' regressivo: prima validare endpoint GUE/Poisson con un lettore che non trasformi GUE in intermedio, poi rieseguire la matrice RP. Se la clausola classica resta `q AND w`, il boundary reader-axis e' bloccato. Se la clausola diventa endpoint-validata su baseline GUE indipendente, la domanda torna falsificabile.",
tools/data/graph_completion/graph_completion_20260516_1031.json:80:      "raw": "possibile = audit del lettore prima della promozione del boundary; non-possibile = dichiarare terzo incluso cross-dominio con GUE endpoint non trasferito.",
tools/data/graph_completion/graph_completion_20260516_1031.json:118:        "possible": "possibile = audit del lettore prima della promozione del boundary; non-possibile = dichiarare terzo incluso cross-dominio con GUE endpoint non trasferito.",
tools/data/graph_completion/graph_completion_20260516_1031.json:121:      "observable_contract": "claim=`window_mode/unfolding` e' coordinata del boundary se gli endpoint GUE/Poisson trasferiscono mentre le righe RP boundary espongono residuo reader-specific contro null row-aligned; observable=reader_sensitivity del vettore spettrale canonico tra global_mean, exact_local e odd_coerced; operator=stessa riga di gap letta con piu unfolding/window modes; generator=matrici GUE, gap Poisson esponenziali, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=domain x size x seed, null da permutazione e shift circolare sulla stessa riga; non_possible=asse reader come boundary se un endpoint si frattura o RP non batte i null; not_tested=spettri sperimentali, N infinito, Anderson 3D, prova analitica di universalita.",
tools/data/graph_completion/graph_completion_20260516_0921.json:11:    "observable_contract": "claim=la finestra RP finita e unfolding-stable solo se le stesse righe lambda battono label-shuffle e position-shift sotto normalizzazione globale e locale; observable=thresholded two-reader raw-count pass per lambda, size e unfolding mode; operator=repeat del gate RP 08:20 con `global_mean` e `local_window`; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE su size, seed, k e unfolding mode; denominator=11 lambda per size/mode, observed denominator 12, label-null 768, position-null 120; non_possible=boundary unfolding-stable se una lambda promossa cade sotto local-window; not_tested=N piu grande, finestre locali diverse da 7, spettri sperimentali, Anderson 3D, many-body RP.",
tools/data/graph_completion/graph_completion_20260516_0921.json:116:      "observable_contract": "claim=la finestra RP finita e unfolding-stable solo se le stesse righe lambda battono label-shuffle e position-shift sotto normalizzazione globale e locale; observable=thresholded two-reader raw-count pass per lambda, size e unfolding mode; operator=repeat del gate RP 08:20 con `global_mean` e `local_window`; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE su size, seed, k e unfolding mode; denominator=11 lambda per size/mode, observed denominator 12, label-null 768, position-null 120; non_possible=boundary unfolding-stable se una lambda promossa cade sotto local-window; not_tested=N piu grande, finestre locali diverse da 7, spettri sperimentali, Anderson 3D, many-body RP.",
tools/data/graph_completion/graph_completion_20260509_1516.json:11:    "observable_contract": "claim=il gate `coherent/null/beta` del BOUNDARY sintetico trasferisce sul perimetro semi-reale base; observable=one-sided canonical observables, stable counts ai poli, endpoint distance e ambiguous beta; operator=`exp_semireal_boundary_transfer_gate.py`; generator=13 righe `boundary_denominator_prescan_full_20260509_1500` ricostruite da `dnd_autoricerca`; denominator=13 righe base BOUNDARY, 8 GUE-like e 5 Poisson-like, beta layers 0.0..1.0, 12 replicates, 24 shuffle baselines; non_possible=dichiarare beta 0.3 coordinata universale o transfer completo quando 2/13 righe cadono; not_tested=nuovi domini, nuovi spettri, fit `V_c`, limite asintotico.",
tools/data/graph_completion/graph_completion_20260509_1516.json:93:      "observable_contract": "claim=il gate `coherent/null/beta` del BOUNDARY sintetico trasferisce sul perimetro semi-reale base; observable=one-sided canonical observables, stable counts ai poli, endpoint distance e ambiguous beta; operator=`exp_semireal_boundary_transfer_gate.py`; generator=13 righe `boundary_denominator_prescan_full_20260509_1500` ricostruite da `dnd_autoricerca`; denominator=13 righe base BOUNDARY, 8 GUE-like e 5 Poisson-like, beta layers 0.0..1.0, 12 replicates, 24 shuffle baselines; non_possible=dichiarare beta 0.3 coordinata universale o transfer completo quando 2/13 righe cadono; not_tested=nuovi domini, nuovi spettri, fit `V_c`, limite asintotico.",
tools/data/graph_completion/graph_completion_20260509_1516.json:101:            "claim": "porta la direzione BOUNDARY dal sintetico controllato al perimetro cross-dominio semi-reale 8 GUE / 5 Poisson",
tools/data/graph_completion/graph_completion_20260509_1516.json:102:            "evidence": "lab_data.json dichiara la direzione viva: \"test su perimetri reali o avversariali senza importare label GUE/Poisson\". Il report invece struttura input e adesione come 8 GUE-like e 5 Poisson-like, quindi importa proprio la label che la direzione chiedeva di non importare.",
tools/data/graph_completion/graph_completion_20260509_1516.json:103:            "suggestion": "Nel prossimo ciclo ripetere il gate su features domain-native senza usare `source_domain_type` GUE/Poisson nella classificazione o nel claim; se le label restano solo metadata, dichiarare `deliberate_counter_perimeter` con `why` e mostrare che non entrano nell'operatore."
tools/data/graph_completion/graph_completion_20260509_1516.json:154:              "operator": "row-aligned domain/window prescan",
tools/data/graph_completion/graph_completion_20260509_1516.json:171:              "by_source_domain_type": {
tools/data/graph_completion/graph_completion_20260509_1516.json:172:                "GUE": 8,
tools/data/graph_completion/graph_completion_20260509_1516.json:173:                "Poisson": 5
tools/data/graph_completion/graph_completion_20260514_1631.json:9:    "tension": "TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GUE-Anderson",
tools/data/graph_completion/graph_completion_20260514_1631.json:10:    "verdict": "CONSTRAINT / TESTER OPERATIVO - il rimbalzo fisico 16:12 regge come tester riusabile: `SR` e' active in GUE e absorbed nel bordo Anderson `W=6`, mentre `triple_var` resta active come residuo intermedio. Non e' una nuova legge fisica.",
tools/data/graph_completion/graph_completion_20260514_1631.json:11:    "observable_contract": "claim=il risultato 16:12 va riformulato come tester operativo del confine repulsione/Poisson, non come scoperta fisica; observable=`component_state(SR,L1,triple_var)` con `SR` = adjacent gap ratio canonico; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GUE hermitiano e Anderson 1D `W=6`; denominator=96 repliche per dominio, 95 gap centrali per spettro, 192 eventi trace; null=Poisson span-matched stesso count; non_possible=claim fisico nuovo o legge di transizione se il confronto resta sintetico, finite-size e senza dati sperimentali/unfolding dedicato.",
tools/data/graph_completion/graph_completion_20260514_1631.json:12:    "claim_under_test": "Il vettore `component_state(SR,L1,triple_var)` resta leggibile come tester operativo del confine GUE-Anderson: `SR` e' active in GUE, viene assorbito al bordo Anderson `W=6`, e `triple_var` puo' restare active nella zona intermedia.",
tools/data/graph_completion/graph_completion_20260514_1631.json:14:    "consecutio": "Il passo successivo valido non e' tornare ai primi. E' portare lo stesso tester su un denominatore fisico piu' forte: GOE/GUE scelto per simmetria, Anderson 3D o many-body localization se serve una transizione reale, curve in `N`, e confronto con adjacent gap ratio standard piu' unfolding controllato.",
tools/data/graph_completion/graph_completion_20260514_1631.json:53:    "radici": "Wigner-Dyson/GUE level statistics / Poisson level statistics.",
tools/data/graph_completion/graph_completion_20260514_1631.json:54:    "singolare": "null Poisson span-matched su stesso count.",
tools/data/graph_completion/graph_completion_20260514_1631.json:92:        "dipole": "Wigner-Dyson/GUE level statistics / Poisson level statistics.",
tools/data/graph_completion/graph_completion_20260514_1631.json:93:        "point_zero": "null Poisson span-matched su stesso count.",
tools/data/graph_completion/graph_completion_20260514_1631.json:98:      "observable_contract": "claim=il risultato 16:12 va riformulato come tester operativo del confine repulsione/Poisson, non come scoperta fisica; observable=`component_state(SR,L1,triple_var)` con `SR` = adjacent gap ratio canonico; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GUE hermitiano e Anderson 1D `W=6`; denominator=96 repliche per dominio, 95 gap centrali per spettro, 192 eventi trace; null=Poisson span-matched stesso count; non_possible=claim fisico nuovo o legge di transizione se il confronto resta sintetico, finite-size e senza dati sperimentali/unfolding dedicato.",
tools/data/graph_completion/graph_completion_20260516_1117.json:11:    "observable_contract": "claim=il gate BOUNDARY a due lettori trasferisce oltre RP solo se la stessa riga Anderson e' `stable_graph_bridge+classical_intermediate` su tutte le size e batte il feature-scramble null; observable=`two_reader_all_sizes` unito a `graph_bridge_frequency`, adjacent ratio, Brody q, mixture Wigner/Poisson, IPR, entropy; operator=Hamiltoniana Anderson 3D con disorder sweep, seed perturbation e kNN reader; generator=`H=sum_i eps_i |i><i| + hopping nearest-neighbor` su reticolo periodico `L^3`, `eps_i uniform[-W/2,W/2]`; denominator=11 disorder rows x 2 size x 2 seed x 3 k-reader, null 128 feature-scramble trial; non_possible=promozione fisica se il null ricostruisce almeno il conteggio osservato; not_tested=limite termodinamico, mobility-edge exponent, boundary conditions alternative, sparse large-L, spettri sperimentali.",
tools/data/graph_completion/graph_completion_20260516_1117.json:116:      "observable_contract": "claim=il gate BOUNDARY a due lettori trasferisce oltre RP solo se la stessa riga Anderson e' `stable_graph_bridge+classical_intermediate` su tutte le size e batte il feature-scramble null; observable=`two_reader_all_sizes` unito a `graph_bridge_frequency`, adjacent ratio, Brody q, mixture Wigner/Poisson, IPR, entropy; operator=Hamiltoniana Anderson 3D con disorder sweep, seed perturbation e kNN reader; generator=`H=sum_i eps_i |i><i| + hopping nearest-neighbor` su reticolo periodico `L^3`, `eps_i uniform[-W/2,W/2]`; denominator=11 disorder rows x 2 size x 2 seed x 3 k-reader, null 128 feature-scramble trial; non_possible=promozione fisica se il null ricostruisce almeno il conteggio osservato; not_tested=limite termodinamico, mobility-edge exponent, boundary conditions alternative, sparse large-L, spettri sperimentali.",
tools/data/graph_completion/graph_completion_20260516_1019.json:11:    "observable_contract": "claim=`RP_lambda_0.060` e' cresta persistente solo se batte entrambi i null row-aligned su ogni `local_window` esatta 9/10/11/12 e su size oltre 192; observable=two-reader raw-count threshold per lambda x exact local_window x size; operator=unfolding locale a larghezza esatta, senza coercizione dispari; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=lambda sentinels `0.030/0.045/0.060/0.075/0.820`, size `224/256`, seed x k = `4 x 3`, label null `768`, position null `48`; non_possible=boundary a lambda singola se una finestra o size dichiarata fallisce soglia; not_tested=N infinito, finestre oltre 12, kernel di unfolding alternativi, spettri sperimentali, Anderson 3D.",
tools/data/graph_completion/graph_completion_20260516_1019.json:116:      "observable_contract": "claim=`RP_lambda_0.060` e' cresta persistente solo se batte entrambi i null row-aligned su ogni `local_window` esatta 9/10/11/12 e su size oltre 192; observable=two-reader raw-count threshold per lambda x exact local_window x size; operator=unfolding locale a larghezza esatta, senza coercizione dispari; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=lambda sentinels `0.030/0.045/0.060/0.075/0.820`, size `224/256`, seed x k = `4 x 3`, label null `768`, position null `48`; non_possible=boundary a lambda singola se una finestra o size dichiarata fallisce soglia; not_tested=N infinito, finestre oltre 12, kernel di unfolding alternativi, spettri sperimentali, Anderson 3D.",
tools/data/graph_completion/graph_completion_20260516_1135.json:11:    "observable_contract": "claim=i null sono confrontabili solo se condividono observable, perimetro righe e N; observable=conteggio cross-size di righe `stable_graph_bridge+classical_intermediate`; operator=righe compatte Anderson 3D dal run 11:17 classificate dallo stesso reader kNN/classico; generator=stesse righe sorgente, due operatori null che differiscono solo per struttura preservata; denominator=`512` trial per null su 11 righe per size; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con conteggio cross-size >= osservato; non_possible=chiamare un null piu' restrittivo se perimetro o N cambiano; not_tested=raw multi-seed reader, nuovi Hamiltoniani, `L>=7`, perimetro completo 8 GUE / 5 Poisson.",
tools/data/graph_completion/graph_completion_20260516_1135.json:116:      "observable_contract": "claim=i null sono confrontabili solo se condividono observable, perimetro righe e N; observable=conteggio cross-size di righe `stable_graph_bridge+classical_intermediate`; operator=righe compatte Anderson 3D dal run 11:17 classificate dallo stesso reader kNN/classico; generator=stesse righe sorgente, due operatori null che differiscono solo per struttura preservata; denominator=`512` trial per null su 11 righe per size; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con conteggio cross-size >= osservato; non_possible=chiamare un null piu' restrittivo se perimetro o N cambiano; not_tested=raw multi-seed reader, nuovi Hamiltoniani, `L>=7`, perimetro completo 8 GUE / 5 Poisson.",
tools/data/graph_completion/graph_completion_20260515_1807.json:132:            "evidence": "Il report lavora su Hamiltoniane Aubry-Andre/Sturmian, statistiche spettrali e surrogate IAAFT, ma non ancora il risultato classico piu vicino o il limite noto rispetto al quale la relazione sarebbe nuova. Il testo evita universalita GUE/Poisson, ma usa comunque 'Relazione nuova'.",
tools/data/graph_completion/graph_completion_20260515_1947.json:11:    "observable_contract": "claim=il gate BOUNDARY trasferisce oltre RP solo se la stessa riga Anderson W resta stable_graph_bridge+classical_intermediate su tutte le taglie testate; observable=two_reader_all_sizes da graph_bridge_frequency unita ad adjacent ratio, Brody q, peso Wigner/Poisson, IPR ed entropia di partecipazione; operator=Hamiltoniana Anderson 3D tight-binding periodica, sweep disorder, perturbazione seed+kNN; generator=H=sum_i eps_i |i><i| + hopping primi vicini su L^3, eps_i uniform[-W/2,W/2]; denominator=11 righe W identiche su L={5,6}; non_possible=trasferimento cross-dominio se nessuna riga W e stable_graph_bridge+classical_intermediate in tutte le taglie; not_tested=limite termodinamico, esponente critico, boundary conditions alternative, sparse large-L, spettri sperimentali.",
tools/data/graph_completion/graph_completion_20260515_1947.json:121:      "observable_contract": "claim=il gate BOUNDARY trasferisce oltre RP solo se la stessa riga Anderson W resta stable_graph_bridge+classical_intermediate su tutte le taglie testate; observable=two_reader_all_sizes da graph_bridge_frequency unita ad adjacent ratio, Brody q, peso Wigner/Poisson, IPR ed entropia di partecipazione; operator=Hamiltoniana Anderson 3D tight-binding periodica, sweep disorder, perturbazione seed+kNN; generator=H=sum_i eps_i |i><i| + hopping primi vicini su L^3, eps_i uniform[-W/2,W/2]; denominator=11 righe W identiche su L={5,6}; non_possible=trasferimento cross-dominio se nessuna riga W e stable_graph_bridge+classical_intermediate in tutte le taglie; not_tested=limite termodinamico, esponente critico, boundary conditions alternative, sparse large-L, spettri sperimentali.",
tools/data/graph_completion/graph_completion_20260514_1612.json:10:    "verdict": "CONSTRAINT - il trasduttore `SR` assorbito vs residuo `L1,triple_var` produce un test fisico concreto su spettri GUE/Anderson; nel run sintetico il ritorno fisico e' presente ma resta proxy numerico, non misura sperimentale",
tools/data/graph_completion/graph_completion_20260514_1612.json:11:    "observable_contract": "claim=il cedimento selettivo di `SR` puo' essere formulato come test fisico A->B; observable=componenti canoniche attive/assorbite contro null Poisson span-matched; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GUE hermitiano e Hamiltoniano Anderson 1D tight-binding; denominator=48 repliche per dominio, 95 gap centrali per spettro; non_possible=rimbalzo fisico assente se non si nomina B concreto oppure se `SR` non discrimina GUE da Anderson localizzato; not_tested=dati sperimentali reali, unfolding fine, classi di simmetria GOE/GSE, many-body localization.",
tools/data/graph_completion/graph_completion_20260514_1612.json:12:    "claim_under_test": "Il cedimento selettivo di `SR` osservato nel deposito prime-minus-mod6 puo' tornare come criterio fisico: `SR` resta attivo in spettri caotici GUE e viene assorbito in spettri Anderson localizzati contro un null Poisson span-matched.",
tools/data/graph_completion/graph_completion_20260514_1612.json:14:    "consecutio": "Il prossimo ciclo fisico deve sostituire il proxy sintetico con un denominatore piu vicino al laboratorio: GOE/GUE scelto per simmetria dichiarata, Anderson 3D o many-body localization se si vuole una transizione fisica vera, unfolding controllato e confronto con dati o letteratura. Il deposito prime-minus-mod6 resta utile solo come generatore di osservabili, non come prova del dominio fisico.",
tools/data/graph_completion/graph_completion_20260514_1612.json:53:    "radici": "repulsione spettrale caotica / assorbimento Poisson localizzato.",
tools/data/graph_completion/graph_completion_20260514_1612.json:54:    "singolare": "null Poisson span-matched con stesso count.",
tools/data/graph_completion/graph_completion_20260514_1612.json:92:        "dipole": "repulsione spettrale caotica / assorbimento Poisson localizzato.",
tools/data/graph_completion/graph_completion_20260514_1612.json:93:        "point_zero": "null Poisson span-matched con stesso count.",
tools/data/graph_completion/graph_completion_20260514_1612.json:98:      "observable_contract": "claim=il cedimento selettivo di `SR` puo' essere formulato come test fisico A->B; observable=componenti canoniche attive/assorbite contro null Poisson span-matched; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GUE hermitiano e Hamiltoniano Anderson 1D tight-binding; denominator=48 repliche per dominio, 95 gap centrali per spettro; non_possible=rimbalzo fisico assente se non si nomina B concreto oppure se `SR` non discrimina GUE da Anderson localizzato; not_tested=dati sperimentali reali, unfolding fine, classi di simmetria GOE/GSE, many-body localization.",
tools/data/graph_completion/graph_completion_20260514_1612.json:107:            "evidence": "Nei dati forniti, `lab_data.json` dichiara come direzione: \"Formalizzare il limite di scala del vettore prime-minus-mod6: micro-trace provider-indipendente, min_paired_rows pre-dichiarato, replica 4096/8192 e primo test oltre 8192 solo se il denominatore resta stabile\". Il report invece esegue un trasferimento GUE/Anderson con N=192 e 48 repliche, senza micro-trace 4096/8192 ne' min_paired_rows. La deviazione e' dichiarata, ma il `why` cita una direttiva operatore non visibile nei file forniti.",
tools/data/graph_completion/graph_completion_20260514_1612.json:114:            "evidence": "La struttura GUE -> Poisson -> Anderson localizzato ricade nel quadro classico delle statistiche spettrali Wigner-Dyson/GUE contro Poisson e della localizzazione Anderson. Il report dice che non cristallizza una nuova legge fisica, ma non nomina il risultato classico piu' vicino come baseline del ponte.",
tools/data/graph_completion/graph_completion_20260514_1612.json:115:            "suggestion": "Esplicitare che il test e' un riuso operativo di statistiche spettrali note, non scoperta fisica: confrontare `SR,L1,triple_var` con baseline standard come adjacent gap ratio / Wigner-Dyson vs Poisson / Anderson localization level statistics."
tools/data/graph_completion/graph_completion_20260514_1850.json:9:    "tension": "TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GOE-GUE-Poisson-Anderson",
tools/data/graph_completion/graph_completion_20260514_1850.json:10:    "verdict": "VALUE_STABLE / TOOL CONTRACT TRANSFER - il tester `component_state(SR,L1,triple_var)` legge un nuovo spettro fisico Anderson 3D senza cambiare definizioni osservabili e senza perdere il rimbalzo fisico A -> matematica -> fisico B. Il ritorno fisico e' strumentale: W4 e W16.5 restano active contro Poisson, ma il contrasto diretto separa solo `triple_var`; `SR` e `L1` non chiudono il bordo 3D a `L=6`.",
tools/data/graph_completion/graph_completion_20260514_1850.json:53:    "radici": "simmetria Wigner-Dyson GOE/GUE / bordo disordinato Anderson 3D.",
tools/data/graph_completion/graph_completion_20260514_1850.json:54:    "singolare": "Poisson span-matched come punto-zero che rende confrontabili fisico A e fisico B.",
tools/data/graph_completion/graph_completion_20260514_1850.json:92:        "dipole": "simmetria Wigner-Dyson GOE/GUE / bordo disordinato Anderson 3D.",
tools/data/graph_completion/graph_completion_20260514_1850.json:93:        "point_zero": "Poisson span-matched come punto-zero che rende confrontabili fisico A e fisico B.",
tools/data/graph_completion/graph_completion_20260514_1850.json:156:              "transfer": "SR,L1,triple_var pass from the mathematical deposit into a physical spectrum tester as component states against Poisson and, when classes exist, direct class contrast.",
tools/data/graph_completion/graph_completion_20260514_1850.json:158:              "fall": "Tester falls if GOE/GUE direct SR separation disappears, if Poisson contrast absorbs all focus observables in chaotic classes, or if Anderson W6 keeps SR active under the declared threshold.",
tools/data/graph_completion/graph_completion_20260514_1850.json:160:                "declared": "single ordered spectrum or small class-labeled set; no new physical domain generation",
tools/data/graph_completion/graph_completion_20260514_1850.json:163:                  "class-labeled input where direct_contrast is not separated on SR despite declared GOE/GUE classes",
tools/data/graph_completion/graph_completion_20260514_1850.json:169:                "optional_expected_class": "class label used for grouped Poisson contrast and direct class contrast",
tools/data/graph_completion/graph_completion_20260514_1850.json:181:                "poisson_contrast": "real spectrum versus span-matched Poisson null",
tools/data/graph_completion/graph_completion_20260514_1850.json:213:                "GUE_unitary_no_time_reversal": {
tools/data/graph_completion/graph_completion_20260509_1556.json:11:    "observable_contract": "claim=`blank_thin_support` sopravvive solo se, dopo estensione del denominatore sorgente, resta supporto vivo sottile senza beta chart; observable=gate canonico one-sided + beta chart sulle tre righe short; operator=`exp_boundary_short_denominator_extension.py`; generator=`source-denominator extension` per `percolation`, `random_matrix`, `zeta_zeros`; denominator=3 righe short del report 15:48, estese a `n_gaps=1024`; non_possible=promuovere `blank_thin_support` se il supporto cade, si ispessisce o recupera beta; not_tested=redesign globale 13 righe, fit `V_c`, validita' della label GUE/Poisson sorgente.",
tools/data/graph_completion/graph_completion_20260509_1556.json:124:      "observable_contract": "claim=`blank_thin_support` sopravvive solo se, dopo estensione del denominatore sorgente, resta supporto vivo sottile senza beta chart; observable=gate canonico one-sided + beta chart sulle tre righe short; operator=`exp_boundary_short_denominator_extension.py`; generator=`source-denominator extension` per `percolation`, `random_matrix`, `zeta_zeros`; denominator=3 righe short del report 15:48, estese a `n_gaps=1024`; non_possible=promuovere `blank_thin_support` se il supporto cade, si ispessisce o recupera beta; not_tested=redesign globale 13 righe, fit `V_c`, validita' della label GUE/Poisson sorgente.",
tools/data/graph_completion/graph_completion_20260516_0938.json:11:    "observable_contract": "claim=`RP_lambda_0.045` resta boundary solo se batte label-shuffle e position-shift su size maggiori e su finestre locali alternative; observable=two-reader raw-count threshold per lambda, size, unfolding mode e local_window; operator=stress del gate 09:21 con candidate row preregistrata e sentinelle; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=candidate row `0.045`, sentinelle `0.030/0.060/0.075/0.820`, size `160/192`, seed x k = `4 x 3`; non_possible=terzo incluso stabile se la candidate row cade in una finestra locale o se una sentinella prende il ruolo; not_tested=altre finestre locali, piu seed, N oltre 192, Anderson 3D, spettri sperimentali.",
tools/data/graph_completion/graph_completion_20260516_0938.json:116:      "observable_contract": "claim=`RP_lambda_0.045` resta boundary solo se batte label-shuffle e position-shift su size maggiori e su finestre locali alternative; observable=two-reader raw-count threshold per lambda, size, unfolding mode e local_window; operator=stress del gate 09:21 con candidate row preregistrata e sentinelle; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=candidate row `0.045`, sentinelle `0.030/0.060/0.075/0.820`, size `160/192`, seed x k = `4 x 3`; non_possible=terzo incluso stabile se la candidate row cade in una finestra locale o se una sentinella prende il ruolo; not_tested=altre finestre locali, piu seed, N oltre 192, Anderson 3D, spettri sperimentali.",
tools/data/graph_completion/graph_completion_20260514_1656.json:11:    "observable_contract": "claim=il report 16:49 diventa fit-ready per falsifier e graph completion solo se espone anche la contaminazione cognitiva che ha trasformato il deposito in strumento; observable=`component_state(SR,L1,triple_var)` + `fit_ready_contract_presence`; operator=report-level audit + `tools/graph_completion_compiler.py`; generator=nessun nuovo dominio, riuso `tools/data/component_state_fit_ready_20260514_1649.json`; denominator=report 16:49 + artifact fit-ready 16:49 + audit temporaneo graph completion; non_possible=cambiare contenuto scientifico, aggiungere domini o promuovere automaticamente il grafo; not_tested=nuovi dataset fisici, nuova separazione GOE/GUE, integrazione live del grafo.",
tools/data/graph_completion/graph_completion_20260514_1656.json:93:      "observable_contract": "claim=il report 16:49 diventa fit-ready per falsifier e graph completion solo se espone anche la contaminazione cognitiva che ha trasformato il deposito in strumento; observable=`component_state(SR,L1,triple_var)` + `fit_ready_contract_presence`; operator=report-level audit + `tools/graph_completion_compiler.py`; generator=nessun nuovo dominio, riuso `tools/data/component_state_fit_ready_20260514_1649.json`; denominator=report 16:49 + artifact fit-ready 16:49 + audit temporaneo graph completion; non_possible=cambiare contenuto scientifico, aggiungere domini o promuovere automaticamente il grafo; not_tested=nuovi dataset fisici, nuova separazione GOE/GUE, integrazione live del grafo.",
tools/data/graph_completion/graph_completion_20260514_1656.json:102:            "evidence": "lab_data/seme dichiarano direzione viva cross-dominio: `8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo`. Il report giustifica la regressione locale con direttiva one-shot e fornisce `why`/`not_drift`, ma non marca esplicitamente la deviazione come `deliberate_counter_perimeter`.",
tools/data/graph_completion/graph_completion_20260514_1656.json:151:              "transfer": "SR,L1,triple_var pass from the mathematical deposit into a physical spectrum tester as component states against Poisson and, when classes exist, direct class contrast.",
tools/data/graph_completion/graph_completion_20260514_1656.json:153:              "fall": "Tester falls if GOE/GUE direct SR separation disappears, if Poisson contrast absorbs all focus observables in chaotic classes, or if Anderson W6 keeps SR active under the declared threshold.",
tools/data/graph_completion/graph_completion_20260514_1656.json:155:                "declared": "single ordered spectrum or small class-labeled set; no new physical domain generation",
tools/data/graph_completion/graph_completion_20260514_1656.json:158:                  "class-labeled input where direct_contrast is not separated on SR despite declared GOE/GUE classes",
tools/data/graph_completion/graph_completion_20260514_1656.json:164:                "optional_expected_class": "class label used for grouped Poisson contrast and direct class contrast",
tools/data/graph_completion/graph_completion_20260514_1656.json:176:                "poisson_contrast": "real spectrum versus span-matched Poisson null",
tools/data/graph_completion/graph_completion_20260514_1656.json:208:                "GUE_unitary_no_time_reversal": {
tools/data/graph_completion/graph_completion_20260509_1548.json:51:          "invariant": "failure mode row-aligned; non label GUE/Poisson e non beta 0.3 globale.",
tools/data/graph_completion/graph_completion_20260509_1548.json:58:          "operator": "row-aligned domain/window prescan",
tools/data/graph_completion/graph_completion_20260515_1758.json:11:    "observable_contract": "claim=`phi` resta terzo incluso fisico anche quando il potenziale binario viene sostituito dal coseno Aubry-Andre canonico; observable=`spacing_r` + `mean_ipr` con controllo di distinzione da silver/bronze; operator=`tools/exp_aubry_cosine_boundary_counter_gate.py`; generator=Hamiltoniana tight-binding 1D con potenziale coseno per beta phi/silver/bronze, periodico beta=1/2 e random onsite uniforme; denominator=N={89,144,233} x phase={0,0.25,0.5,0.75} x V=0.50..3.00 step 0.25, random_trials=6; non_possible=promuovere phi come boundary fisico se non si separa dai controlli irrazionali con spacing e localizzazione insieme; not_tested=limite asintotico, disordine correlato sperimentale, classi GUE/Poisson universali dirette.",
tools/data/graph_completion/graph_completion_20260515_1758.json:116:      "observable_contract": "claim=`phi` resta terzo incluso fisico anche quando il potenziale binario viene sostituito dal coseno Aubry-Andre canonico; observable=`spacing_r` + `mean_ipr` con controllo di distinzione da silver/bronze; operator=`tools/exp_aubry_cosine_boundary_counter_gate.py`; generator=Hamiltoniana tight-binding 1D con potenziale coseno per beta phi/silver/bronze, periodico beta=1/2 e random onsite uniforme; denominator=N={89,144,233} x phase={0,0.25,0.5,0.75} x V=0.50..3.00 step 0.25, random_trials=6; non_possible=promuovere phi come boundary fisico se non si separa dai controlli irrazionali con spacing e localizzazione insieme; not_tested=limite asintotico, disordine correlato sperimentale, classi GUE/Poisson universali dirette.",
tools/data/graph_completion/graph_completion_20260515_1734.json:11:    "observable_contract": "claim=`phi` fotonico manifesta un confine fisico tra ordine periodico e disordine random; observable=statistiche della trasmissione in lambda (`stopband_fraction`, `spectral_entropy`, `peak_spacing_r`); operator=`tools/exp_photonic_boundary_third_included_gate.py`; generator=multistrati quarter-wave fixed-thickness phi/silver/bronze/periodic/balanced_random; denominator=N={55,89,144} x phase={0,0.25,0.5,0.75}, random_trials=12, lambda=0.65..1.85 su 241 punti; non_possible=terzo incluso fotonico chiuso se `phi` non resta dentro il segmento periodico-random su stopband ed entropia o se collassa nel random; not_tested=modello Maxwell completo con interfacce fisiche calibrate, misure sperimentali, GUE/Poisson universality diretta.",
tools/data/graph_completion/graph_completion_20260515_1734.json:118:      "observable_contract": "claim=`phi` fotonico manifesta un confine fisico tra ordine periodico e disordine random; observable=statistiche della trasmissione in lambda (`stopband_fraction`, `spectral_entropy`, `peak_spacing_r`); operator=`tools/exp_photonic_boundary_third_included_gate.py`; generator=multistrati quarter-wave fixed-thickness phi/silver/bronze/periodic/balanced_random; denominator=N={55,89,144} x phase={0,0.25,0.5,0.75}, random_trials=12, lambda=0.65..1.85 su 241 punti; non_possible=terzo incluso fotonico chiuso se `phi` non resta dentro il segmento periodico-random su stopband ed entropia o se collassa nel random; not_tested=modello Maxwell completo con interfacce fisiche calibrate, misure sperimentali, GUE/Poisson universality diretta.",
tools/data/graph_completion/graph_completion_20260509_1532.json:11:    "observable_contract": "claim=la matrice BOUNDARY semi-reale va separata in due assi: `support_transfer` e `beta_coordinate_transfer`; observable=stato row-aligned del supporto ordine/null e stato locale della beta ambigua; operator=`exp_boundary_two_axis_matrix.py`; generator=deposito `semireal_boundary_transfer_gate_20260509_1516` senza uso operativo di label GUE/Poisson; denominator=13 righe BOUNDARY semi-reali del perimetro base; non_possible=salvare il claim \"beta 0.3 universale\" quando solo 4/13 righe hanno beta 0.3 esatta; not_tested=nuovi domini, nuovi null, nuovi beta layer, fit `V_c`, limite asintotico.",
tools/data/graph_completion/graph_completion_20260509_1532.json:14:    "consecutio": "Il prossimo ciclo deve attaccare i quattro stati beta, non il supporto gia' separato: `beta_0_3_exact`, `beta_0_3_local_nonunique`, `local_beta_other`, `support_without_beta_blank`. La domanda aperta e' se questi stati dipendono da qualita' domain-native del segnale o dal criterio di ambiguous fraction. Non va reintrodotta la label GUE/Poisson come scorciatoia.",
tools/data/graph_completion/graph_completion_20260509_1532.json:55:    "invariante": "separazione tra supporto e coordinata; non label GUE/Poisson e non beta comune.",
tools/data/graph_completion/graph_completion_20260509_1532.json:94:        "invariant": "separazione tra supporto e coordinata; non label GUE/Poisson e non beta comune.",
tools/data/graph_completion/graph_completion_20260509_1532.json:98:      "observable_contract": "claim=la matrice BOUNDARY semi-reale va separata in due assi: `support_transfer` e `beta_coordinate_transfer`; observable=stato row-aligned del supporto ordine/null e stato locale della beta ambigua; operator=`exp_boundary_two_axis_matrix.py`; generator=deposito `semireal_boundary_transfer_gate_20260509_1516` senza uso operativo di label GUE/Poisson; denominator=13 righe BOUNDARY semi-reali del perimetro base; non_possible=salvare il claim \"beta 0.3 universale\" quando solo 4/13 righe hanno beta 0.3 esatta; not_tested=nuovi domini, nuovi null, nuovi beta layer, fit `V_c`, limite asintotico.",
tools/data/graph_completion/graph_completion_20260512_0330.json:11:    "observable_contract": "claim=`prime_SR_persistent_boundary` regge solo se le finestre prime conservano `SR` come osservabile one-sided comune attraverso provider e offset, mentre controlli non-prime ampliati non condividono persistenza SR piena; observable=`SR` in `coherent_one_sided_observables` + firma comune one-sided; operator=`exp_prime_sr_persistent_boundary.py`; generator=primi via `row_spacings(\"numeri_primi\")` e `prime_gap_sequence`, controlli via composite gaps, candidati mod6, eventi Cramer-like, GUE blocks, logistic return intervals; denominator=8 finestre prime row-local + 20 controlli non-prime; non_possible=claim prime-specific se `SR` prime scende sotto 8/8, se la firma comune prime non e' `[SR]`, o se una sottofamiglia controllo condivide persistenza SR piena; not_tested=atlante beta globale, `V_c`, `gap_ratio`, origine analitica di SR.",
tools/data/graph_completion/graph_completion_20260512_0330.json:87:      "observable_contract": "claim=`prime_SR_persistent_boundary` regge solo se le finestre prime conservano `SR` come osservabile one-sided comune attraverso provider e offset, mentre controlli non-prime ampliati non condividono persistenza SR piena; observable=`SR` in `coherent_one_sided_observables` + firma comune one-sided; operator=`exp_prime_sr_persistent_boundary.py`; generator=primi via `row_spacings(\"numeri_primi\")` e `prime_gap_sequence`, controlli via composite gaps, candidati mod6, eventi Cramer-like, GUE blocks, logistic return intervals; denominator=8 finestre prime row-local + 20 controlli non-prime; non_possible=claim prime-specific se `SR` prime scende sotto 8/8, se la firma comune prime non e' `[SR]`, o se una sottofamiglia controllo condivide persistenza SR piena; not_tested=atlante beta globale, `V_c`, `gap_ratio`, origine analitica di SR.",
tools/data/graph_completion/graph_completion_20260512_0330.json:103:            "evidence": "I file strutturali danno come direzione viva `Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo`. Il report usa 4 GUE random matrix blocks e controlli logistici/Cramer/mod6/compositi, ma non mostra 8 domini GUE né 5 Poisson. La deviazione verso prime/mod6 è dichiarata come BOUNDARY, ma non come `deliberate_counter_perimeter` rispetto alla direzione GUE/Poisson visibile in `lab_data.json`.",
tools/data/graph_completion/graph_completion_20260512_0330.json:104:            "suggestion": "Esplicitare se `prime_SR_persistent_boundary` è una sotto-direzione autorizzata dal campo vivo; altrimenti nel prossimo ciclo riallineare il contratto a 8 domini GUE / 5 Poisson oppure dichiarare `deliberate_counter_perimeter` con `why` e `not_drift` verificabili."
tools/data/graph_completion/graph_completion_20260514_1640.json:7:    "title": "Agent Report - Rafforzamento tester fisico GOE/GUE N-curve",
tools/data/graph_completion/graph_completion_20260514_1640.json:9:    "tension": "TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY fisico GOE-GUE-Poisson-Anderson",
tools/data/graph_completion/graph_completion_20260514_1640.json:10:    "verdict": "CONSTRAINT / TESTER OPERATIVO RAFFORZATO - `component_state(SR,L1,triple_var)` resta leggibile su un denominatore fisico piu' robusto: distingue GOE e GUE per simmetria su `SR`, conserva la curva in `N=128,192`, e mantiene Anderson 1D `W=6` come bordo finite-size dove `SR` viene assorbito e `triple_var` resta residuo operativo. Non e' una nuova legge fisica.",
tools/data/graph_completion/graph_completion_20260514_1640.json:11:    "observable_contract": "claim=il tester L8 16:31 si rafforza solo se resta leggibile fra classi Wigner-Dyson distinte e fra due taglie; observable=`component_state(SR,L1,triple_var)` con `SR` = adjacent gap ratio canonico piu contrasto diretto GUE-GOE; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GOE reale simmetrico, GUE hermitiano complesso, Anderson 1D `W=6`, null Poisson span-matched; denominator=2 taglie `N={128,192}`, 64 repliche per taglia e dominio, 384 eventi trace, finestra centrale 0.5; non_possible=promuovere il pattern a legge fisica nuova o usare Anderson 1D come transizione universale; not_tested=dati sperimentali, unfolding dedicato, Anderson 3D, many-body localization, limite asintotico.",
tools/data/graph_completion/graph_completion_20260514_1640.json:12:    "claim_under_test": "Il tester `component_state(SR,L1,triple_var)` resta operativo quando il denominatore fisico separa GOE e GUE: `SR` legge la classe di simmetria Wigner-Dyson, viene assorbito nel bordo Anderson 1D `W=6`, e `triple_var` resta residuo locale nel bordo finite-size.",
tools/data/graph_completion/graph_completion_20260514_1640.json:13:    "question": "Il tester L8 16:31 distingue una classe GOE da una classe GUE su due taglie senza perdere il bordo Anderson `W=6`?",
tools/data/graph_completion/graph_completion_20260514_1640.json:14:    "consecutio": "Il prossimo passo non e' aggiungere dominio per ampiezza. E' rendere il tester leggibile come strumento: interfaccia unica per spettro ordinato, classe attesa opzionale, output `component_state`, contrasto Poisson e, se due classi sono presenti, contrasto diretto. La promozione resta `soluzione/tool`, non `scoperta fisica`.",
tools/data/graph_completion/graph_completion_20260514_1640.json:53:    "radici": "simmetria Wigner-Dyson GOE/GUE / indipendenza Poisson-localizzata.",
tools/data/graph_completion/graph_completion_20260514_1640.json:55:    "invariante": "`SR` separa GOE-GUE ma cade su Anderson `W=6`; `triple_var` conserva residuo locale nel bordo finite-size.",
tools/data/graph_completion/graph_completion_20260514_1640.json:92:        "dipole": "simmetria Wigner-Dyson GOE/GUE / indipendenza Poisson-localizzata.",
tools/data/graph_completion/graph_completion_20260514_1640.json:94:        "invariant": "`SR` separa GOE-GUE ma cade su Anderson `W=6`; `triple_var` conserva residuo locale nel bordo finite-size.",
tools/data/graph_completion/graph_completion_20260514_1640.json:98:      "observable_contract": "claim=il tester L8 16:31 si rafforza solo se resta leggibile fra classi Wigner-Dyson distinte e fra due taglie; observable=`component_state(SR,L1,triple_var)` con `SR` = adjacent gap ratio canonico piu contrasto diretto GUE-GOE; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=GOE reale simmetrico, GUE hermitiano complesso, Anderson 1D `W=6`, null Poisson span-matched; denominator=2 taglie `N={128,192}`, 64 repliche per taglia e dominio, 384 eventi trace, finestra centrale 0.5; non_possible=promuovere il pattern a legge fisica nuova o usare Anderson 1D come transizione universale; not_tested=dati sperimentali, unfolding dedicato, Anderson 3D, many-body localization, limite asintotico.",
tools/data/graph_completion/graph_completion_20260515_1904.json:11:    "observable_contract": "claim=il bridge Lab conserva residuo dopo confronto con scalari classici di crossover; observable=Brody q row-aligned, peso GUE Berry-Robnik-like, stato ponte del grafo 18:55; operator=classical scalar audit sulle stesse 13 righe BOUNDARY; generator=row_spacings(domain) + boundary_graph_curvature_gate_20260515_1855; denominator=13 righe, 8 GUE e 5 Poisson; non_possible=bridge Lab-specific se ogni graph bridge e' anche intermedio classico e non esiste classic-only intermediate; not_tested=flusso Hamiltoniano Rosenzweig-Porter vero, unfolding fisico alternativo, universalita asintotica.",
tools/data/graph_completion/graph_completion_20260515_1904.json:12:    "claim_under_test": "Nel perimetro 8/5, il terzo incluso operativo non e' riducibile a Brody q o a una mistura Poisson/GUE-surmise; il residuo vive nel disaccordo row-aligned tra scalare classico e grafo osservabile.",
tools/data/graph_completion/graph_completion_20260515_1904.json:121:      "observable_contract": "claim=il bridge Lab conserva residuo dopo confronto con scalari classici di crossover; observable=Brody q row-aligned, peso GUE Berry-Robnik-like, stato ponte del grafo 18:55; operator=classical scalar audit sulle stesse 13 righe BOUNDARY; generator=row_spacings(domain) + boundary_graph_curvature_gate_20260515_1855; denominator=13 righe, 8 GUE e 5 Poisson; non_possible=bridge Lab-specific se ogni graph bridge e' anche intermedio classico e non esiste classic-only intermediate; not_tested=flusso Hamiltoniano Rosenzweig-Porter vero, unfolding fisico alternativo, universalita asintotica.",
tools/data/graph_completion/graph_completion_20260509_1409.json:11:    "observable_contract": "claim=`denominator_state` puo' trasferire oltre `V_c` solo dove la riga domain/window ha osservabile definito e null/surrogate row-aligned; observable=`spacing_r` + availability del null shuffle; operator=prescan sui 13 domini base del deposito autoricerca, non fit parametrico; generator=perimetro 8 GUE-like / 5 Poisson-like dei cycle 1..13; denominator=`boundary_shuffle_audit` quando presente; non_possible=dichiarare transfer nei domini senza null/surrogate; not_tested=nuovi spettri, nuovi domini, fit `V_c`, famiglia AICc, QxG chiuso.",
tools/data/graph_completion/graph_completion_20260509_1409.json:12:    "claim_under_test": "Nel perimetro BOUNDARY 8 GUE / 5 Poisson, il gate `denominator_state` trasferisce oltre `V_c` solo se identifica le righe con null/surrogate disponibile e lascia blank le righe senza contro-perimetro.",
tools/data/graph_completion/graph_completion_20260509_1409.json:54:    "singolare": "domain/window prima della classificazione GUE/Poisson.",
tools/data/graph_completion/graph_completion_20260509_1409.json:93:        "point_zero": "domain/window prima della classificazione GUE/Poisson.",
tools/data/graph_completion/graph_completion_20260509_1409.json:98:      "observable_contract": "claim=`denominator_state` puo' trasferire oltre `V_c` solo dove la riga domain/window ha osservabile definito e null/surrogate row-aligned; observable=`spacing_r` + availability del null shuffle; operator=prescan sui 13 domini base del deposito autoricerca, non fit parametrico; generator=perimetro 8 GUE-like / 5 Poisson-like dei cycle 1..13; denominator=`boundary_shuffle_audit` quando presente; non_possible=dichiarare transfer nei domini senza null/surrogate; not_tested=nuovi spettri, nuovi domini, fit `V_c`, famiglia AICc, QxG chiuso.",
tools/data/graph_completion/graph_completion_20260509_1409.json:150:              "operator": "row-aligned domain/window prescan",
tools/data/graph_completion/graph_completion_20260509_1409.json:165:              "by_source_domain_type": {
tools/data/graph_completion/graph_completion_20260509_1409.json:166:                "GUE": 8,
tools/data/graph_completion/graph_completion_20260509_1409.json:167:                "Poisson": 5
tools/data/graph_completion/graph_completion_20260516_1104.json:10:    "verdict": "CONSTRAINT - Il gate endpoint GUE/Poisson resta chiuso (`36/36`, feature-scramble `raw_p=0/512=0.0`, `add_one_p=1/513=0.001949318`). RP produce 6/54 righe terzo-incluse contro null massimo 1/54 (`raw_p=0/512=0.0`, `add_one_p=1/513=0.001949318`), ma tutte le candidate sono a `N=128`; `N=192` e `N=256` restano blank. Il residuo RP e' finito-size, non boundary fisico promosso.",
tools/data/graph_completion/graph_completion_20260516_1104.json:11:    "observable_contract": "claim=RP e' terzo incluso endpoint-gated solo se il gate GUE/Poisson resta chiuso e le righe RP bilanciate fra i centroidi endpoint battono il null feature-scramble row-aligned; observable=`endpoint_stable`, `centroid_distance_balance`, `rp_boundary_candidate`, raw/add-one p-values; operator=centroidi endpoint GUE/Poisson calibrati, score RP per distanza bilanciata da entrambi i poli, null che preserva marginali per reader e rompe accoppiamento feature-riga; generator=GUE, Poisson, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=endpoint 36 source rows x 5 reader, RP 3 lambda x 3 size x 6 seed = 54 source rows x 5 reader; non_possible=terzo incluso se endpoint gate fallisce o null RP ricostruisce il numero osservato; not_tested=Anderson 3D, spettri sperimentali, limite N infinito, universalita analitica, nuova ricerca lambda.",
tools/data/graph_completion/graph_completion_20260516_1104.json:12:    "claim_under_test": "RP e' boundary endpoint-gated se il gate GUE/Poisson resta chiuso e le righe RP bilanciate fra centroidi endpoint battono il null feature-scramble row-aligned.",
tools/data/graph_completion/graph_completion_20260516_1104.json:58:          "possible": "possibile = audit del lettore prima della promozione del boundary; non-possibile = dichiarare terzo incluso cross-dominio con GUE endpoint non trasferito.",
tools/data/graph_completion/graph_completion_20260516_1104.json:76:    "radici": "endpoint GUE/Poisson chiuso; RP bilanciato ma non size-stable.",
tools/data/graph_completion/graph_completion_20260516_1104.json:115:        "dipole": "endpoint GUE/Poisson chiuso; RP bilanciato ma non size-stable.",
tools/data/graph_completion/graph_completion_20260516_1104.json:121:      "observable_contract": "claim=RP e' terzo incluso endpoint-gated solo se il gate GUE/Poisson resta chiuso e le righe RP bilanciate fra i centroidi endpoint battono il null feature-scramble row-aligned; observable=`endpoint_stable`, `centroid_distance_balance`, `rp_boundary_candidate`, raw/add-one p-values; operator=centroidi endpoint GUE/Poisson calibrati, score RP per distanza bilanciata da entrambi i poli, null che preserva marginali per reader e rompe accoppiamento feature-riga; generator=GUE, Poisson, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=endpoint 36 source rows x 5 reader, RP 3 lambda x 3 size x 6 seed = 54 source rows x 5 reader; non_possible=terzo incluso se endpoint gate fallisce o null RP ricostruisce il numero osservato; not_tested=Anderson 3D, spettri sperimentali, limite N infinito, universalita analitica, nuova ricerca lambda.",
tools/data/graph_completion/graph_completion_20260509_1839.json:11:    "observable_contract": "claim=la tassonomia delle transizioni post-estensione scala se nessuna delle 13 righe resta `thin_persists`; observable=`transition_class` row-aligned sulle 13 righe; operator=`exp_boundary_transition_taxonomy_13rows.py`; generator=composizione dei depositi 15:32, 15:38, 15:56 e prescan 15:00 senza rigenerare segnali; denominator=13 righe BOUNDARY semi-reali; non_possible=promuovere `blank_thin_support` come specie autonoma se `thin_persist_rows=0`; not_tested=nuova griglia beta, nuovi null, fit `V_c`, validita' label GUE/Poisson sorgente.",
tools/data/graph_completion/graph_completion_20260509_1839.json:124:      "observable_contract": "claim=la tassonomia delle transizioni post-estensione scala se nessuna delle 13 righe resta `thin_persists`; observable=`transition_class` row-aligned sulle 13 righe; operator=`exp_boundary_transition_taxonomy_13rows.py`; generator=composizione dei depositi 15:32, 15:38, 15:56 e prescan 15:00 senza rigenerare segnali; denominator=13 righe BOUNDARY semi-reali; non_possible=promuovere `blank_thin_support` come specie autonoma se `thin_persist_rows=0`; not_tested=nuova griglia beta, nuovi null, fit `V_c`, validita' label GUE/Poisson sorgente.",
tools/data/graph_completion/graph_completion_20260509_1444.json:11:    "observable_contract": "claim=il gate BOUNDARY trasferisce fuori dal perimetro base come operatore `null_state -> transfer_state -> denominator_state`; observable=stable canonical observables contro permutation null e layer classification; operator=`exp_denominator_gate_transfer_matrix.py`; generator=`DUALITA_golden`, `R_periodic_triad`, `T_markov_alternating`, `E_ar1_continuity`; denominator=4 perimetri sintetici QxG continuo/discreto, 4096 gaps, 24 replicates, 11 beta layers, 40 shuffle baselines; non_possible=chiamare chiusura QxG, legge GUE/Poisson o endpoint-stable universale; not_tested=perimetro fisico reale, fit `V_c`, nuovi domini autoricerca.",
tools/data/graph_completion/graph_completion_20260509_1444.json:55:    "invariante": "osservabile one-sided contro null permutato; non il label GUE/Poisson e non un set canonico completo.",
tools/data/graph_completion/graph_completion_20260509_1444.json:94:        "invariant": "osservabile one-sided contro null permutato; non il label GUE/Poisson e non un set canonico completo.",
tools/data/graph_completion/graph_completion_20260509_1444.json:98:      "observable_contract": "claim=il gate BOUNDARY trasferisce fuori dal perimetro base come operatore `null_state -> transfer_state -> denominator_state`; observable=stable canonical observables contro permutation null e layer classification; operator=`exp_denominator_gate_transfer_matrix.py`; generator=`DUALITA_golden`, `R_periodic_triad`, `T_markov_alternating`, `E_ar1_continuity`; denominator=4 perimetri sintetici QxG continuo/discreto, 4096 gaps, 24 replicates, 11 beta layers, 40 shuffle baselines; non_possible=chiamare chiusura QxG, legge GUE/Poisson o endpoint-stable universale; not_tested=perimetro fisico reale, fit `V_c`, nuovi domini autoricerca.",
tools/data/graph_completion/graph_completion_20260509_1400.json:11:    "observable_contract": "claim=il fit parametrico di `V_c` puo' entrare solo sulle righe `complete` o `contaminated` del gate fit-ready; observable=famiglia di modello migliore tra cinque forme semplici, separata da stato denominatore e massa esclusa; operator=confronto AICc su `vc_median_fit_ready` dal deposito 13:37, senza ricomputare spettri; generator=classi `reference_order`, `order_memory`, `periodic_closure`, `random_dispersion`; denominator=JSON `vc_fit_ready_scale_table_20260509_1337`, N={89,144,233,377}, soglie r={0.48,0.50,0.52}, livelli `per_mode_best` e `accepted_candidates`; non_possible=righe `broken` escluse dal fit e righe sotto `V_c=1` impediscono il claim osservato \"converge a 1 dall'alto\"; not_tested=nuovi N, nuovi generatori, nuovi spettri, GUE/Poisson transfer, gap_ratio, fit a tre parametri con asintoto libero.",
tools/data/graph_completion/graph_completion_20260509_1400.json:124:      "observable_contract": "claim=il fit parametrico di `V_c` puo' entrare solo sulle righe `complete` o `contaminated` del gate fit-ready; observable=famiglia di modello migliore tra cinque forme semplici, separata da stato denominatore e massa esclusa; operator=confronto AICc su `vc_median_fit_ready` dal deposito 13:37, senza ricomputare spettri; generator=classi `reference_order`, `order_memory`, `periodic_closure`, `random_dispersion`; denominator=JSON `vc_fit_ready_scale_table_20260509_1337`, N={89,144,233,377}, soglie r={0.48,0.50,0.52}, livelli `per_mode_best` e `accepted_candidates`; non_possible=righe `broken` escluse dal fit e righe sotto `V_c=1` impediscono il claim osservato \"converge a 1 dall'alto\"; not_tested=nuovi N, nuovi generatori, nuovi spettri, GUE/Poisson transfer, gap_ratio, fit a tre parametri con asintoto libero.",
tools/data/graph_completion/graph_completion_20260514_1649.json:11:    "observable_contract": "claim=il candidato QxG 16:40 diventa fit-ready solo se espone input, output, soglie, trace, transfer/blank/fall e contro-perimetro; observable=`component_state(SR,L1,triple_var)` piu `poisson_contrast` e `direct_contrast`; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=nessun nuovo dominio, riuso deposito GOE/GUE/Anderson 16:40 e smoke test sintetico minimo; denominator=artifact JSON fit-ready + interfaccia su spettro ordinato; non_possible=integrare automaticamente il grafo o chiamare legge fisica il tester; not_tested=dati sperimentali, Anderson 3D, many-body localization, unfolding dedicato, limite asintotico.",
tools/data/graph_completion/graph_completion_20260514_1649.json:49:          "dipole": "simmetria Wigner-Dyson GOE/GUE / indipendenza Poisson-localizzata.",
tools/data/graph_completion/graph_completion_20260514_1649.json:51:          "invariant": "`SR` separa GOE-GUE ma cade su Anderson `W=6`; `triple_var` conserva residuo locale nel bordo finite-size.",
tools/data/graph_completion/graph_completion_20260514_1649.json:116:      "observable_contract": "claim=il candidato QxG 16:40 diventa fit-ready solo se espone input, output, soglie, trace, transfer/blank/fall e contro-perimetro; observable=`component_state(SR,L1,triple_var)` piu `poisson_contrast` e `direct_contrast`; operator=`tools/exp_physical_sr_residue_bounce.py`; generator=nessun nuovo dominio, riuso deposito GOE/GUE/Anderson 16:40 e smoke test sintetico minimo; denominator=artifact JSON fit-ready + interfaccia su spettro ordinato; non_possible=integrare automaticamente il grafo o chiamare legge fisica il tester; not_tested=dati sperimentali, Anderson 3D, many-body localization, unfolding dedicato, limite asintotico.",
tools/data/graph_completion/graph_completion_20260514_1649.json:125:            "evidence": "La lente L6 richiede che la contaminazione cognitiva nomini almeno una voce CE-*, YSN, Cornelius, KSAR, PVI/Vault usata nella combo, oppure dichiari 'CE-none:' con motivo specifico. Nel report fornito compaiono A2, A9, A11, ponte QxG, graph completion 16:40 e direzione BOUNDARY GUE/Poisson, ma nessun metabolizzatore cognitivo esplicito.",
tools/data/graph_completion/graph_completion_20260515_1940.json:11:    "observable_contract": "claim=il gate RP a due lettori e fisico solo se la stessa riga lambda resta stabile attraversando le taglie; observable=two_reader_all_sizes da graph_bridge_frequency unita a Brody q, peso Wigner/Poisson, SR e IPR; operator=flusso Rosenzweig-Porter diagonal-plus-GUE ripetuto su N, seed e perturbazioni kNN; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=11 righe lambda identiche su N={64,96,128}; non_possible=claim fisico two-reader se nessuna riga e stable_graph_bridge+classical_intermediate in tutte le taglie; not_tested=limite N infinito, unfolding alternativi, Anderson/mobility edge, varianti many-body.",
tools/data/graph_completion/graph_completion_20260515_1940.json:116:      "observable_contract": "claim=il gate RP a due lettori e fisico solo se la stessa riga lambda resta stabile attraversando le taglie; observable=two_reader_all_sizes da graph_bridge_frequency unita a Brody q, peso Wigner/Poisson, SR e IPR; operator=flusso Rosenzweig-Porter diagonal-plus-GUE ripetuto su N, seed e perturbazioni kNN; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=11 righe lambda identiche su N={64,96,128}; non_possible=claim fisico two-reader se nessuna riga e stable_graph_bridge+classical_intermediate in tutte le taglie; not_tested=limite N infinito, unfolding alternativi, Anderson/mobility edge, varianti many-body.",
tools/data/graph_completion/graph_completion_20260515_1724.json:11:    "observable_contract": "claim=`V_c(phi)` converge a 1.0 solo se il perimetro esteso riduce fase e taglia a una traiettoria comune; observable=valori `vc` e compressione reticolare (`distinct_vc`, `repeat_rate`, `mode_rate`) per phi/silver/bronze/random; operator=`tools/exp_quasiperiodic_vc_lattice_gate.py`; generator=sequenze Sturmian phi/silver/bronze + balanced random a densita phi; denominator=N={89,144,233,377,610,987}, phase={0,0.125,0.25,0.375,0.5,0.625,0.75,0.875}, random_trials=8, V grid 0.5..3.0 step 0.025, threshold r<0.5; non_possible=promuovere `V_c(phi)->1` o fit power-law comune quando phase0 alterna valori e il dominio completo conserva 20 valori distinti; not_tested=limite asintotico oltre N=987, griglia V piu fine, modello fisico di Aubry-Andre, gap-label core, GUE/Poisson universalita.",
tools/data/graph_completion/graph_completion_20260515_1724.json:116:      "observable_contract": "claim=`V_c(phi)` converge a 1.0 solo se il perimetro esteso riduce fase e taglia a una traiettoria comune; observable=valori `vc` e compressione reticolare (`distinct_vc`, `repeat_rate`, `mode_rate`) per phi/silver/bronze/random; operator=`tools/exp_quasiperiodic_vc_lattice_gate.py`; generator=sequenze Sturmian phi/silver/bronze + balanced random a densita phi; denominator=N={89,144,233,377,610,987}, phase={0,0.125,0.25,0.375,0.5,0.625,0.75,0.875}, random_trials=8, V grid 0.5..3.0 step 0.025, threshold r<0.5; non_possible=promuovere `V_c(phi)->1` o fit power-law comune quando phase0 alterna valori e il dominio completo conserva 20 valori distinti; not_tested=limite asintotico oltre N=987, griglia V piu fine, modello fisico di Aubry-Andre, gap-label core, GUE/Poisson universalita.",
tools/data/graph_completion/graph_completion_20260516_1111.json:11:    "observable_contract": "claim=RP e' boundary endpoint-gated solo se il conteggio candidato batte il null e una finestra lambda resta non-zero attraverso la ladder size preregistrata; observable=`rp_boundary_candidate` per source row, `size_transport_count`, raw/add-one p-values; operator=stesso lettore endpoint 11:04, stessa soglia `4/5 reader`, stessa distanza bilanciata dai centroidi GUE/Poisson, griglia `N x lambda x seed`; generator=GUE, Poisson, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=endpoint 60 source rows x 5 reader, RP 5 size x 7 lambda x 6 seed = 210 source rows x 5 reader; non_possible=terzo incluso fisico se le candidate non arrivano almeno a `N=192` o se il null ricostruisce il conteggio; not_tested=Anderson 3D, spettri sperimentali, limite N infinito, unfolded alternatives oltre il reader 11:04.",
tools/data/graph_completion/graph_completion_20260516_1111.json:93:      "observable_contract": "claim=RP e' boundary endpoint-gated solo se il conteggio candidato batte il null e una finestra lambda resta non-zero attraverso la ladder size preregistrata; observable=`rp_boundary_candidate` per source row, `size_transport_count`, raw/add-one p-values; operator=stesso lettore endpoint 11:04, stessa soglia `4/5 reader`, stessa distanza bilanciata dai centroidi GUE/Poisson, griglia `N x lambda x seed`; generator=GUE, Poisson, RP `H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE`; denominator=endpoint 60 source rows x 5 reader, RP 5 size x 7 lambda x 6 seed = 210 source rows x 5 reader; non_possible=terzo incluso fisico se le candidate non arrivano almeno a `N=192` o se il null ricostruisce il conteggio; not_tested=Anderson 3D, spettri sperimentali, limite N infinito, unfolded alternatives oltre il reader 11:04.",
tools/data/graph_completion/latest.json:11:    "observable_contract": "claim=i null sono confrontabili solo se condividono observable, perimetro righe e N; observable=conteggio cross-size di righe `stable_graph_bridge+classical_intermediate`; operator=righe compatte Anderson 3D dal run 11:17 classificate dallo stesso reader kNN/classico; generator=stesse righe sorgente, due operatori null che differiscono solo per struttura preservata; denominator=`512` trial per null su 11 righe per size; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con conteggio cross-size >= osservato; non_possible=chiamare un null piu' restrittivo se perimetro o N cambiano; not_tested=raw multi-seed reader, nuovi Hamiltoniani, `L>=7`, perimetro completo 8 GUE / 5 Poisson.",
tools/data/graph_completion/latest.json:116:      "observable_contract": "claim=i null sono confrontabili solo se condividono observable, perimetro righe e N; observable=conteggio cross-size di righe `stable_graph_bridge+classical_intermediate`; operator=righe compatte Anderson 3D dal run 11:17 classificate dallo stesso reader kNN/classico; generator=stesse righe sorgente, due operatori null che differiscono solo per struttura preservata; denominator=`512` trial per null su 11 righe per size; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con conteggio cross-size >= osservato; non_possible=chiamare un null piu' restrittivo se perimetro o N cambiano; not_tested=raw multi-seed reader, nuovi Hamiltoniani, `L>=7`, perimetro completo 8 GUE / 5 Poisson.",
tools/data/graph_completion/graph_completion_20260509_1427.json:11:    "observable_contract": "claim=il blank-pair test decide se due righe BOUNDARY senza null entrano nel transfer; observable=`spacing_r` originale contro permutation null row-aligned; operator=`exp_boundary_blank_null_audit.py` + prescan row-aligned; generator=`dnd_autoricerca.genera_segnale` per `zeta_zeros` e `pendolo_doppio`; denominator=13 righe base autoricerca 8 GUE-like / 5 Poisson-like; non_possible=dichiarare complete `zeta_zeros` con soli 199 gap o dichiarare cambio classe su `pendolo_doppio`; not_tested=fit `V_c`, nuovi spettri, nuova legge GUE/Poisson, chiusura QxG.",
tools/data/graph_completion/graph_completion_20260509_1427.json:13:    "question": "Il null row-aligned per una coppia blank GUE/Poisson decide `blank -> transfers`, `blank -> falls` o `blank remains blank`?",
tools/data/graph_completion/graph_completion_20260509_1427.json:54:    "singolare": "la riga domain/window prima della decisione del gate.",
tools/data/graph_completion/graph_completion_20260509_1427.json:55:    "invariante": "il null row-aligned decide il passaggio; la classe GUE/Poisson non viene riscritta.",
tools/data/graph_completion/graph_completion_20260509_1427.json:93:        "point_zero": "la riga domain/window prima della decisione del gate.",
tools/data/graph_completion/graph_completion_20260509_1427.json:94:        "invariant": "il null row-aligned decide il passaggio; la classe GUE/Poisson non viene riscritta.",
tools/data/graph_completion/graph_completion_20260509_1427.json:98:      "observable_contract": "claim=il blank-pair test decide se due righe BOUNDARY senza null entrano nel transfer; observable=`spacing_r` originale contro permutation null row-aligned; operator=`exp_boundary_blank_null_audit.py` + prescan row-aligned; generator=`dnd_autoricerca.genera_segnale` per `zeta_zeros` e `pendolo_doppio`; denominator=13 righe base autoricerca 8 GUE-like / 5 Poisson-like; non_possible=dichiarare complete `zeta_zeros` con soli 199 gap o dichiarare cambio classe su `pendolo_doppio`; not_tested=fit `V_c`, nuovi spettri, nuova legge GUE/Poisson, chiusura QxG.",
tools/data/graph_completion/graph_completion_20260509_1427.json:150:              "operator": "row-aligned domain/window prescan",
tools/data/graph_completion/graph_completion_20260509_1427.json:168:              "by_source_domain_type": {
tools/data/graph_completion/graph_completion_20260509_1427.json:169:                "GUE": 8,
tools/data/graph_completion/graph_completion_20260509_1427.json:170:                "Poisson": 5
tools/data/graph_completion/graph_completion_20260514_1605.json:108:            "claim": "\"relation: follows_direction\" e \"not_drift: non torna a V_c, fit, label locali o GUE/Poisson; misura esclusivamente il limite del vettore prime-minus-mod6.\"",
tools/data/graph_completion/graph_completion_20260514_1605.json:109:            "evidence": "lab_data direzione dice: \"Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo\". Il report dichiara di non misurare GUE/Poisson e resta nel deposito prime-minus-mod6 senza marcare la deviazione come deliberate_counter_perimeter.",
tools/data/graph_completion/graph_completion_20260514_1605.json:110:            "suggestion": "Riformulare aderenza come deliberate_counter_perimeter con why/not_drift verificabili, oppure collegare prime-minus-mod6 al confine GUE/Poisson tramite un ponte misurabile nel prossimo ciclo."
tools/data/graph_completion/graph_completion_20260509_1538.json:11:    "observable_contract": "claim=le righe non-esatte della matrice BOUNDARY 15:32 vanno lette row-aligned senza usare label GUE/Poisson; observable=stato beta + forza supporto + telemetria denominatore/null; operator=`exp_boundary_row_aligned_nonexact_audit.py`; generator=matrice `boundary_two_axis_matrix_20260509_1532` + prescan `boundary_denominator_prescan_full_20260509_1500`; denominator=13 righe totali, 11 support-transfer, 7 support-transfer non esatte; non_possible=forzare il conteggio a 6 o trattare beta 0.3 come ascissa comune; not_tested=nuovi domini, nuovi null, nuova griglia beta, fit `V_c`.",
tools/data/graph_completion/graph_completion_20260509_1538.json:49:    "invariante": "failure mode row-aligned; non label GUE/Poisson e non beta 0.3 globale.",
tools/data/graph_completion/graph_completion_20260509_1538.json:89:        "invariant": "failure mode row-aligned; non label GUE/Poisson e non beta 0.3 globale.",
tools/data/graph_completion/graph_completion_20260509_1538.json:93:      "observable_contract": "claim=le righe non-esatte della matrice BOUNDARY 15:32 vanno lette row-aligned senza usare label GUE/Poisson; observable=stato beta + forza supporto + telemetria denominatore/null; operator=`exp_boundary_row_aligned_nonexact_audit.py`; generator=matrice `boundary_two_axis_matrix_20260509_1532` + prescan `boundary_denominator_prescan_full_20260509_1500`; denominator=13 righe totali, 11 support-transfer, 7 support-transfer non esatte; non_possible=forzare il conteggio a 6 o trattare beta 0.3 come ascissa comune; not_tested=nuovi domini, nuovi null, nuova griglia beta, fit `V_c`.",
tools/data/graph_completion/graph_completion_20260509_1538.json:146:              "operator": "row-aligned domain/window prescan",
tools/data/graph_completion/graph_completion_20260509_1538.json:163:              "by_source_domain_type": {
tools/data/graph_completion/graph_completion_20260509_1538.json:164:                "GUE": 8,
tools/data/graph_completion/graph_completion_20260509_1538.json:165:                "Poisson": 5
tools/data/graph_completion/graph_completion_20260509_1437.json:11:    "observable_contract": "claim=il residual blank test decide se i 3 blank residui BOUNDARY entrano nel transfer; observable=`spacing_r` originale contro permutation null row-aligned; operator=`exp_boundary_blank_null_audit.py` + `exp_boundary_denominator_prescan.py`; generator=`dnd_autoricerca.genera_segnale` per `string_vibration`, `reaction_diffusion`, `logistica_biforcazione_var_3.5699`; denominator=13 righe base autoricerca 8 GUE-like / 5 Poisson-like; non_possible=dichiarare chiusura QxG, nuova legge GUE/Poisson, o complete `reaction_diffusion` con 499 gap; not_tested=fit `V_c`, nuovi spettri, nuovi domini.",
tools/data/graph_completion/graph_completion_20260509_1437.json:56:          "point_zero": "la riga domain/window prima della decisione del gate.",
tools/data/graph_completion/graph_completion_20260509_1437.json:57:          "invariant": "il null row-aligned decide il passaggio; la classe GUE/Poisson non viene riscritta.",
tools/data/graph_completion/graph_completion_20260509_1437.json:64:          "operator": "row-aligned domain/window prescan",
tools/data/graph_completion/graph_completion_20260509_1437.json:87:    "invariante": "disponibilita del null leggibile; non l'etichetta GUE/Poisson e non il fit `V_c`.",
tools/data/graph_completion/graph_completion_20260509_1437.json:126:        "invariant": "disponibilita del null leggibile; non l'etichetta GUE/Poisson e non il fit `V_c`.",
tools/data/graph_completion/graph_completion_20260509_1437.json:130:      "observable_contract": "claim=il residual blank test decide se i 3 blank residui BOUNDARY entrano nel transfer; observable=`spacing_r` originale contro permutation null row-aligned; operator=`exp_boundary_blank_null_audit.py` + `exp_boundary_denominator_prescan.py`; generator=`dnd_autoricerca.genera_segnale` per `string_vibration`, `reaction_diffusion`, `logistica_biforcazione_var_3.5699`; denominator=13 righe base autoricerca 8 GUE-like / 5 Poisson-like; non_possible=dichiarare chiusura QxG, nuova legge GUE/Poisson, o complete `reaction_diffusion` con 499 gap; not_tested=fit `V_c`, nuovi spettri, nuovi domini.",
tools/data/graph_completion/graph_completion_20260509_1437.json:183:              "operator": "row-aligned domain/window prescan",
tools/data/graph_completion/graph_completion_20260509_1437.json:200:              "by_source_domain_type": {
tools/data/graph_completion/graph_completion_20260509_1437.json:201:                "GUE": 8,
tools/data/graph_completion/graph_completion_20260509_1437.json:202:                "Poisson": 5
tools/data/graph_completion/graph_completion_20260515_1933.json:11:    "observable_contract": "claim=il BOUNDARY a due lettori trasferisce a un crossover fisico controllato solo dove stabilita grafica e intermediacy classica concordano sulla stessa riga lambda; observable=graph_bridge_frequency unito a Brody q, peso Wigner/Poisson, SR e IPR; operator=flusso Hamiltoniano Rosenzweig-Porter diagonal-plus-GUE con perturbazione kNN; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=13 righe lambda x 3 seed x k={2,3,4}; non_possible=claim Lab-specific graph-only se ogni ponte grafico stabile e anche intermedio classico, oppure claim fisico se dominano righe classic-only; not_tested=universalita asintotica RP, unfolding alternativi, spettri sperimentali, many-body localization.",
tools/data/graph_completion/graph_completion_20260515_1933.json:121:      "observable_contract": "claim=il BOUNDARY a due lettori trasferisce a un crossover fisico controllato solo dove stabilita grafica e intermediacy classica concordano sulla stessa riga lambda; observable=graph_bridge_frequency unito a Brody q, peso Wigner/Poisson, SR e IPR; operator=flusso Hamiltoniano Rosenzweig-Porter diagonal-plus-GUE con perturbazione kNN; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=13 righe lambda x 3 seed x k={2,3,4}; non_possible=claim Lab-specific graph-only se ogni ponte grafico stabile e anche intermedio classico, oppure claim fisico se dominano righe classic-only; not_tested=universalita asintotica RP, unfolding alternativi, spettri sperimentali, many-body localization.",
tools/data/graph_completion/graph_completion_20260514_1701.json:9:    "tension": "TENS_SCALE_TRASCENDENZA_LIMITE / BOUNDARY GUE-Poisson",
tools/data/graph_completion/graph_completion_20260514_1701.json:120:            "claim": "\"relation: follows_direction\" e \"direzione viva BOUNDARY GUE/Poisson\"",
tools/data/graph_completion/graph_completion_20260514_1701.json:121:            "evidence": "Il seme/lab_data dichiarano direzione: '8 domini GUE, 5 Poisson — il confine e' il terzo incluso operativo'. Il report usa Hamiltoniane quasiperiodiche Sturmian, controlli metallici, balanced random e block shuffle; non misura statistiche GUE/Poisson ne' gli 8/5 domini. La deviazione e' motivata come ritorno fisico, ma `deliberate_counter_perimeter=false` rende il drift non completamente tracciato.",
tools/data/graph_completion/graph_completion_20260514_1701.json:122:            "suggestion": "Dichiarare `deliberate_counter_perimeter=true` oppure aggiungere un check minimo GUE/Poisson esplicito: nearest-neighbor spacing/r-statistics sui tre generatori e mapping verso GUE/Poisson, con confronto ai domini richiesti dal seme."
tools/data/graph_completion/graph_completion_20260510_0330.json:11:    "observable_contract": "claim=le due righe residue beta-absent sono strutturali solo se `beta_absent_blank` persiste in finestre row-local da 1024 gap; observable=`window_state` + firma degli osservabili one-sided; operator=`exp_boundary_residual_beta_absent_audit.py`; generator=`numeri_primi` da `dnd_autoricerca.genera_segnale` e `random_matrix` da `gue_spacing_blocks`; denominator=2 righe aperte BOUNDARY, full row + 4 finestre row-local da 1024 gap; non_possible=classe residua unica se una riga recupera beta o perde supporto nelle finestre row-local; not_tested=griglia beta globale, fit `V_c`, validita' label sorgente GUE/Poisson.",
tools/data/graph_completion/graph_completion_20260510_0330.json:116:      "observable_contract": "claim=le due righe residue beta-absent sono strutturali solo se `beta_absent_blank` persiste in finestre row-local da 1024 gap; observable=`window_state` + firma degli osservabili one-sided; operator=`exp_boundary_residual_beta_absent_audit.py`; generator=`numeri_primi` da `dnd_autoricerca.genera_segnale` e `random_matrix` da `gue_spacing_blocks`; denominator=2 righe aperte BOUNDARY, full row + 4 finestre row-local da 1024 gap; non_possible=classe residua unica se una riga recupera beta o perde supporto nelle finestre row-local; not_tested=griglia beta globale, fit `V_c`, validita' label sorgente GUE/Poisson.",
tools/data/graph_completion/graph_completion_20260516_1007.json:11:    "observable_contract": "claim=`local_window` e' asse del boundary RP, non parametro tecnico; observable=two-reader raw-count threshold per lambda x size x local_window; operator=curva di persistenza su `window={5,7,9,11}`; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=lambda sentinels `0.030/0.045/0.060/0.075/0.820`, size `160/192`, observed denominator `12` per cell, label null `768`, position null `48`; non_possible=terzo incluso RP all-window se una riga fallisce in una finestra o size; not_tested=N oltre 192, finestre pari/oltre 11, Anderson 3D, spettri sperimentali, molti seed.",
tools/data/graph_completion/graph_completion_20260516_1007.json:116:      "observable_contract": "claim=`local_window` e' asse del boundary RP, non parametro tecnico; observable=two-reader raw-count threshold per lambda x size x local_window; operator=curva di persistenza su `window={5,7,9,11}`; generator=H(lambda)=sqrt(1-lambda)D+sqrt(lambda)GUE; denominator=lambda sentinels `0.030/0.045/0.060/0.075/0.820`, size `160/192`, observed denominator `12` per cell, label null `768`, position null `48`; non_possible=terzo incluso RP all-window se una riga fallisce in una finestra o size; not_tested=N oltre 192, finestre pari/oltre 11, Anderson 3D, spettri sperimentali, molti seed.",

codex
La consecutio più recente è netta: attaccare `numeri_primi:cycle_3` con un null row-local label-preserving sullo stesso lettore a due canali. Ora leggo lo script e l'artefatto 11:40 per mantenere lo stesso denominatore e non cambiare osservabile.
exec
/bin/bash -lc "sed -n '1,260p' tools/exp_boundary_bridge_stability_audit.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""
Stability audit for the BOUNDARY two-reader gate.

The audit keeps the 13 row-aligned GUE/Poisson denominator and reruns the graph
reader across small perturbations of k, spacing length, and shuffle seed. It then
joins those frequencies with the classical crossover audit states.
"""

from __future__ import annotations

import argparse
import json
from pathlib import Path
from typing import Any

from exp_boundary_graph_curvature_gate import (
    compute_observables,
    classify_geometry,
    load_scope,
    row_spacings,
    shuffle_z,
    standardized_matrix,
)


def load_json(path: Path) -> dict[str, Any]:
    with path.open(encoding="utf-8") as f:
        data = json.load(f)
    if not isinstance(data, dict):
        raise ValueError(f"{path} must contain a JSON object")
    return data


def parse_ints(raw: str) -> list[int]:
    values = [int(part.strip()) for part in raw.split(",") if part.strip()]
    if not values:
        raise ValueError("empty integer list")
    return values


def classical_map(path: Path) -> dict[str, dict[str, Any]]:
    audit = load_json(path)
    rows = audit.get("rows", [])
    if not isinstance(rows, list):
        raise ValueError(f"{path} does not contain rows")
    return {row["domain_window"]: row for row in rows}


def classify_frequency(freq: float) -> str:
    if freq >= 0.75:
        return "stable_graph_bridge"
    if freq >= 0.25:
        return "parameter_sensitive_bridge"
    return "unstable_non_bridge"


def run(args: argparse.Namespace) -> dict[str, Any]:
    ks = parse_ints(args.k_values)
    n_gaps_values = parse_ints(args.n_gaps_values)
    seeds = parse_ints(args.seeds)
    classical = classical_map(Path(args.classical_audit))

    source_rows = load_scope(Path(args.scope))
    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
    selected = sorted(selected, key=lambda row: int(row["cycle"]))
    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}

    runs = []
    row_hits: dict[str, dict[str, Any]] = {}
    total_runs = 0

    for k in ks:
        for n_gaps in n_gaps_values:
            for seed in seeds:
                total_runs += 1
                import numpy as np

                rng = np.random.default_rng(seed)
                graph_rows = []
                for source in selected:
                    gaps = gap_cache[source["domain_window"]]
                    if len(gaps) < args.min_gaps:
                        continue
                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
                    obs = compute_observables(gaps)
                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
                    graph_rows.append(
                        {
                            "domain_window": source["domain_window"],
                            "domain": source["domain"],
                            "cycle": source["cycle"],
                            "source_domain_type": source["source_domain_type"],
                            "n_gaps": int(len(gaps)),
                            "observables": {key: round(value, 9) for key, value in obs.items()},
                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
                        }
                    )
                graph = {
                    "summary": {},
                    "geometry": classify_geometry(graph_rows, standardized_matrix(graph_rows), k),
                }
                graph["summary"]["third_included_candidates"] = graph["geometry"]["third_included_candidates"]
                graph["summary"]["edge_counts"] = graph["geometry"]["edge_counts"]
                candidates = set(graph["summary"]["third_included_candidates"])
                runs.append(
                    {
                        "k": k,
                        "n_gaps": n_gaps,
                        "seed": seed,
                        "third_included_candidates": sorted(candidates),
                        "cross_edges": graph["summary"]["edge_counts"]["cross_label"],
                    }
                )
                for row in graph["geometry"]["rows"]:
                    name = row["domain_window"]
                    if name not in row_hits:
                        row_hits[name] = {
                            "domain_window": name,
                            "domain": row["domain"],
                            "source_domain_type": row["source_domain_type"],
                            "hit_count": 0,
                            "cut_edge_count": 0,
                            "margin_values": [],
                            "cross_fraction_values": [],
                        }
                    if row["boundary_state"] == "third_included_candidate":
                        row_hits[name]["hit_count"] += 1
                    if row["boundary_state"] == "cut_edge":
                        row_hits[name]["cut_edge_count"] += 1
                    row_hits[name]["margin_values"].append(float(row["centroid_margin"]))
                    row_hits[name]["cross_fraction_values"].append(float(row["cross_neighbor_fraction"]))

    rows = []
    counts: dict[str, int] = {}
    for name in sorted(row_hits):
        item = row_hits[name]
        hit_frequency = item["hit_count"] / total_runs
        cut_frequency = item["cut_edge_count"] / total_runs
        classic = classical.get(name, {})
        stability_state = classify_frequency(hit_frequency)
        composite_state = f"{stability_state}+{classic.get('audit_state', 'missing_classical_audit')}"
        row = {
            "domain_window": name,
            "domain": item["domain"],
            "source_domain_type": item["source_domain_type"],
            "graph_bridge_hits": item["hit_count"],
            "graph_bridge_frequency": round(hit_frequency, 6),
            "cut_edge_frequency": round(cut_frequency, 6),
            "mean_margin": round(sum(item["margin_values"]) / len(item["margin_values"]), 6),
            "mean_cross_neighbor_fraction": round(
                sum(item["cross_fraction_values"]) / len(item["cross_fraction_values"]), 6
            ),
            "stability_state": stability_state,
            "classical_audit_state": classic.get("audit_state"),
            "brody_q": classic.get("brody_q"),
            "berry_robnick_like_gue_weight": classic.get("berry_robnick_like_gue_weight"),
            "composite_state": composite_state,
        }
        rows.append(row)
        counts[composite_state] = counts.get(composite_state, 0) + 1

    stable_graph_only = [
        row["domain_window"]
        for row in rows
        if row["stability_state"] == "stable_graph_bridge" and row["classical_audit_state"] == "graph_only_bridge"
    ]
    stable_classic_and_graph = [
        row["domain_window"]
        for row in rows
        if row["stability_state"] == "stable_graph_bridge"
        and row["classical_audit_state"] == "classic_and_graph_bridge"
    ]
    classic_only_stable_graph_absent = [
        row["domain_window"]
        for row in rows
        if row["stability_state"] == "unstable_non_bridge"
        and row["classical_audit_state"] == "classic_only_intermediate"
    ]

    output = {
        "experiment": "boundary_bridge_stability_audit",
        "question": "Do BOUNDARY graph bridge rows survive small graph-reader perturbations after the classical audit?",
        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit coordinates joined",
        "observables_used": [
            "graph_bridge_frequency",
            "cut_edge_frequency",
            "mean_centroid_margin",
            "mean_cross_neighbor_fraction",
            "classical_audit_state",
            "brody_q",
            "berry_robnick_like_gue_weight",
        ],
        "params": {
            "scope": args.scope,
            "classical_audit": args.classical_audit,
            "k_values": ks,
            "n_gaps_values": n_gaps_values,
            "seeds": seeds,
            "n_shuffle": args.n_shuffle,
            "min_gaps": args.min_gaps,
            "total_runs": total_runs,
        },
        "observable_contract": {
            "claim": "a two-reader boundary row is operational only if graph bridge status is stable enough to survive reader perturbation and remains classically audited",
            "observable": "graph bridge hit frequency joined with Brody/Berry-Robnik-like audit state",
            "operator": "parameter perturbation over kNN graph reader with row-aligned classical audit join",
            "generator": "boundary_graph_curvature_gate over the 13-row BOUNDARY denominator",
            "denominator": "13 rows: 8 GUE and 5 Poisson, repeated across graph-reader parameter grid",
            "non_possible": "stable Lab bridge if bridge frequency collapses under k/n_gaps/seed perturbation",
            "not_tested": "new physical Hamiltonian flow, alternative unfolding, asymptotic scaling beyond this finite denominator",
        },
        "summary": {
            "rows_analyzed": len(rows),
            "graph_reader_runs": total_runs,
            "composite_counts": counts,
            "stable_graph_only": stable_graph_only,
            "stable_classic_and_graph": stable_classic_and_graph,
            "classic_only_stable_graph_absent": classic_only_stable_graph_absent,
            "lab_residue_after_stability": bool(stable_graph_only or classic_only_stable_graph_absent),
        },
        "rows": rows,
        "runs": runs,
    }

    out = Path(args.out)
    out.parent.mkdir(parents=True, exist_ok=True)
    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
    print(json.dumps(output["summary"], indent=2, sort_keys=True))
    return output


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
    parser.add_argument("--k-values", default="2,3,4")
    parser.add_argument("--n-gaps-values", default="512,1024,2048")
    parser.add_argument("--seeds", default="20260515,20260516,20260517")
    parser.add_argument("--n-shuffle", type=int, default=32)
    parser.add_argument("--min-gaps", type=int, default=64)
    parser.add_argument("--out", default="tools/data/boundary_bridge_stability_audit_20260515_1915.json")
    args = parser.parse_args()
    run(args)


if __name__ == "__main__":
    main()

exec
/bin/bash -lc "sed -n '1,220p' tools/data/boundary_bridge_stability_audit_20260516_1140.json" in /opt/MM_D-ND
 succeeded in 0ms:
{
  "experiment": "boundary_bridge_stability_audit",
  "observable_contract": {
    "claim": "a two-reader boundary row is operational only if graph bridge status is stable enough to survive reader perturbation and remains classically audited",
    "denominator": "13 rows: 8 GUE and 5 Poisson, repeated across graph-reader parameter grid",
    "generator": "boundary_graph_curvature_gate over the 13-row BOUNDARY denominator",
    "non_possible": "stable Lab bridge if bridge frequency collapses under k/n_gaps/seed perturbation",
    "not_tested": "new physical Hamiltonian flow, alternative unfolding, asymptotic scaling beyond this finite denominator",
    "observable": "graph bridge hit frequency joined with Brody/Berry-Robnik-like audit state",
    "operator": "parameter perturbation over kNN graph reader with row-aligned classical audit join"
  },
  "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit coordinates joined",
  "observables_used": [
    "graph_bridge_frequency",
    "cut_edge_frequency",
    "mean_centroid_margin",
    "mean_cross_neighbor_fraction",
    "classical_audit_state",
    "brody_q",
    "berry_robnick_like_gue_weight"
  ],
  "params": {
    "classical_audit": "tools/data/boundary_classical_crossover_audit_20260515_1904.json",
    "k_values": [
      2,
      3,
      4
    ],
    "min_gaps": 64,
    "n_gaps_values": [
      512,
      1024,
      2048
    ],
    "n_shuffle": 32,
    "scope": "tools/data/boundary_denominator_prescan_full_20260509_1500.json",
    "seeds": [
      20260515,
      20260516,
      20260517
    ],
    "total_runs": 27
  },
  "question": "Do BOUNDARY graph bridge rows survive small graph-reader perturbations after the classical audit?",
  "rows": [
    {
      "berry_robnick_like_gue_weight": 0.25,
      "brody_q": 0.205,
      "classical_audit_state": "classic_only_intermediate",
      "composite_state": "unstable_non_bridge+classic_only_intermediate",
      "cut_edge_frequency": 0.666667,
      "domain": "brownian_motion",
      "domain_window": "brownian_motion:cycle_12",
      "graph_bridge_frequency": 0.185185,
      "graph_bridge_hits": 5,
      "mean_cross_neighbor_fraction": 0.4097,
      "mean_margin": 0.296366,
      "source_domain_type": "Poisson",
      "stability_state": "unstable_non_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.435,
      "brody_q": 1.0,
      "classical_audit_state": "classic_only_intermediate",
      "composite_state": "unstable_non_bridge+classic_only_intermediate",
      "cut_edge_frequency": 0.037037,
      "domain": "cellular_automata",
      "domain_window": "cellular_automata:cycle_8",
      "graph_bridge_frequency": 0.0,
      "graph_bridge_hits": 0,
      "mean_cross_neighbor_fraction": 0.006173,
      "mean_margin": 0.277997,
      "source_domain_type": "GUE",
      "stability_state": "unstable_non_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.0,
      "brody_q": 0.0,
      "classical_audit_state": "endpoint_like",
      "composite_state": "unstable_non_bridge+endpoint_like",
      "cut_edge_frequency": 1.0,
      "domain": "coupled_oscillators",
      "domain_window": "coupled_oscillators:cycle_10",
      "graph_bridge_frequency": 0.0,
      "graph_bridge_hits": 0,
      "mean_cross_neighbor_fraction": 0.322928,
      "mean_margin": 0.55152,
      "source_domain_type": "Poisson",
      "stability_state": "unstable_non_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.07,
      "brody_q": 0.09,
      "classical_audit_state": "endpoint_like",
      "composite_state": "unstable_non_bridge+endpoint_like",
      "cut_edge_frequency": 0.074074,
      "domain": "ising_2d",
      "domain_window": "ising_2d:cycle_1",
      "graph_bridge_frequency": 0.0,
      "graph_bridge_hits": 0,
      "mean_cross_neighbor_fraction": 0.014815,
      "mean_margin": 0.317229,
      "source_domain_type": "GUE",
      "stability_state": "unstable_non_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.0,
      "brody_q": 0.0,
      "classical_audit_state": "endpoint_like",
      "composite_state": "parameter_sensitive_bridge+endpoint_like",
      "cut_edge_frequency": 0.0,
      "domain": "logistica_biforcazione",
      "domain_window": "logistica_biforcazione:cycle_5",
      "graph_bridge_frequency": 0.62963,
      "graph_bridge_hits": 17,
      "mean_cross_neighbor_fraction": 0.345679,
      "mean_margin": 0.10875,
      "source_domain_type": "GUE",
      "stability_state": "parameter_sensitive_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.0,
      "brody_q": 0.0,
      "classical_audit_state": "graph_only_bridge",
      "composite_state": "stable_graph_bridge+graph_only_bridge",
      "cut_edge_frequency": 0.0,
      "domain": "logistica_biforcazione_var_3.5699",
      "domain_window": "logistica_biforcazione_var_3.5699:cycle_13",
      "graph_bridge_frequency": 1.0,
      "graph_bridge_hits": 27,
      "mean_cross_neighbor_fraction": 0.522222,
      "mean_margin": 0.104961,
      "source_domain_type": "GUE",
      "stability_state": "stable_graph_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.275,
      "brody_q": 0.465,
      "classical_audit_state": "classic_and_graph_bridge",
      "composite_state": "stable_graph_bridge+classic_and_graph_bridge",
      "cut_edge_frequency": 0.0,
      "domain": "numeri_primi",
      "domain_window": "numeri_primi:cycle_3",
      "graph_bridge_frequency": 1.0,
      "graph_bridge_hits": 27,
      "mean_cross_neighbor_fraction": 0.258642,
      "mean_margin": 0.109211,
      "source_domain_type": "GUE",
      "stability_state": "stable_graph_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.0,
      "brody_q": 0.0,
      "classical_audit_state": "endpoint_like",
      "composite_state": "unstable_non_bridge+endpoint_like",
      "cut_edge_frequency": 0.62963,
      "domain": "pendolo_doppio",
      "domain_window": "pendolo_doppio:cycle_2",
      "graph_bridge_frequency": 0.0,
      "graph_bridge_hits": 0,
      "mean_cross_neighbor_fraction": 0.216314,
      "mean_margin": 0.266014,
      "source_domain_type": "Poisson",
      "stability_state": "unstable_non_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.025,
      "brody_q": 0.025,
      "classical_audit_state": "graph_only_bridge",
      "composite_state": "stable_graph_bridge+graph_only_bridge",
      "cut_edge_frequency": 0.0,
      "domain": "percolation",
      "domain_window": "percolation:cycle_9",
      "graph_bridge_frequency": 1.0,
      "graph_bridge_hits": 27,
      "mean_cross_neighbor_fraction": 0.886949,
      "mean_margin": 0.133945,
      "source_domain_type": "Poisson",
      "stability_state": "stable_graph_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.475,
      "brody_q": 0.975,
      "classical_audit_state": "classic_only_intermediate",
      "composite_state": "parameter_sensitive_bridge+classic_only_intermediate",
      "cut_edge_frequency": 0.333333,
      "domain": "random_matrix",
      "domain_window": "random_matrix:cycle_7",
      "graph_bridge_frequency": 0.666667,
      "graph_bridge_hits": 18,
      "mean_cross_neighbor_fraction": 0.308348,
      "mean_margin": 0.134784,
      "source_domain_type": "GUE",
      "stability_state": "parameter_sensitive_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.0,
      "brody_q": 0.0,
      "classical_audit_state": "graph_only_bridge",
      "composite_state": "stable_graph_bridge+graph_only_bridge",
      "cut_edge_frequency": 0.0,
      "domain": "reaction_diffusion",
      "domain_window": "reaction_diffusion:cycle_11",
      "graph_bridge_frequency": 1.0,
      "graph_bridge_hits": 27,
      "mean_cross_neighbor_fraction": 0.792593,
      "mean_margin": 0.126971,
      "source_domain_type": "GUE",
      "stability_state": "stable_graph_bridge"
    },
    {
      "berry_robnick_like_gue_weight": 0.0,
      "brody_q": 0.0,
      "classical_audit_state": "endpoint_like",
      "composite_state": "unstable_non_bridge+endpoint_like",
      "cut_edge_frequency": 0.740741,
      "domain": "string_vibration",
      "domain_window": "string_vibration:cycle_6",
      "graph_bridge_frequency": 0.0,
      "graph_bridge_hits": 0,

exec
/bin/bash -lc "sed -n '1,220p' tools/data/boundary_classical_crossover_audit_20260515_1904.json" in /opt/MM_D-ND
 succeeded in 0ms:
{
  "experiment": "boundary_classical_crossover_audit",
  "observable_contract": {
    "claim": "Lab bridge rows retain residue after comparison with classical crossover scalars",
    "denominator": "13 rows: 8 GUE and 5 Poisson",
    "generator": "row_spacings(domain) with graph states imported from boundary_graph_curvature_gate",
    "non_possible": "Lab-specific bridge if every graph bridge is exactly a classical intermediate and no classical-only intermediate appears",
    "not_tested": "true Rosenzweig-Porter Hamiltonian flow, physical unfolding alternatives, asymptotic universality",
    "observable": "row-aligned Brody q, Berry-Robnik-like GUE mixture weight, graph bridge state",
    "operator": "classical scalar audit over the same 13 BOUNDARY rows used by the graph gate"
  },
  "observables_registry": "none; classical audit coordinates plus prior graph observables",
  "observables_used": [
    "brody_q",
    "berry_robnick_like_gue_weight",
    "mixture_ks",
    "graph_boundary_state_from_1855",
    "centroid_margin_from_1855",
    "cross_neighbor_fraction_from_1855"
  ],
  "params": {
    "graph": "tools/data/boundary_graph_curvature_gate_20260515_1855.json",
    "grid_size": 201,
    "n_gaps": 2048,
    "out": "tools/data/boundary_classical_crossover_audit_20260515_1904.json"
  },
  "question": "Do graph bridge rows collapse to standard Brody/Berry-Robnik-like crossover coordinates?",
  "rows": [
    {
      "audit_state": "endpoint_like",
      "berry_robnick_like_gue_weight": 0.07,
      "brody_nll": 318.752193,
      "brody_q": 0.09,
      "centroid_margin": 0.335497,
      "cross_neighbor_fraction": 0.0,
      "domain": "ising_2d",
      "domain_window": "ising_2d:cycle_1",
      "graph_state": "class_interior",
      "mixture_ks": 0.428636,
      "n_spacings": 322,
      "source_domain_type": "GUE"
    },
    {
      "audit_state": "endpoint_like",
      "berry_robnick_like_gue_weight": 0.0,
      "brody_nll": 2048.0,
      "brody_q": 0.0,
      "centroid_margin": 0.299159,
      "cross_neighbor_fraction": 0.333333,
      "domain": "pendolo_doppio",
      "domain_window": "pendolo_doppio:cycle_2",
      "graph_state": "cut_edge",
      "mixture_ks": 0.268279,
      "n_spacings": 2048,
      "source_domain_type": "Poisson"
    },
    {
      "audit_state": "classic_and_graph_bridge",
      "berry_robnick_like_gue_weight": 0.275,
      "brody_nll": 1826.209184,
      "brody_q": 0.465,
      "centroid_margin": 0.222754,
      "cross_neighbor_fraction": 0.25,
      "domain": "numeri_primi",
      "domain_window": "numeri_primi:cycle_3",
      "graph_state": "third_included_candidate",
      "mixture_ks": 0.148459,
      "n_spacings": 2048,
      "source_domain_type": "GUE"
    },
    {
      "audit_state": "classic_only_intermediate",
      "berry_robnick_like_gue_weight": 0.53,
      "brody_nll": 121.495704,
      "brody_q": 1.0,
      "centroid_margin": 0.30764,
      "cross_neighbor_fraction": 0.333333,
      "domain": "zeta_zeros",
      "domain_window": "zeta_zeros:cycle_4",
      "graph_state": "cut_edge",
      "mixture_ks": 0.133555,
      "n_spacings": 199,
      "source_domain_type": "GUE"
    },
    {
      "audit_state": "endpoint_like",
      "berry_robnick_like_gue_weight": 0.0,
      "brody_nll": 691.194523,
      "brody_q": 0.0,
      "centroid_margin": 0.163262,
      "cross_neighbor_fraction": 0.0,
      "domain": "logistica_biforcazione",
      "domain_window": "logistica_biforcazione:cycle_5",
      "graph_state": "class_interior",
      "mixture_ks": 0.998064,
      "n_spacings": 2048,
      "source_domain_type": "GUE"
    },
    {
      "audit_state": "endpoint_like",
      "berry_robnick_like_gue_weight": 0.0,
      "brody_nll": 2048.0,
      "brody_q": 0.0,
      "centroid_margin": 0.550789,
      "cross_neighbor_fraction": 0.5,
      "domain": "string_vibration",
      "domain_window": "string_vibration:cycle_6",
      "graph_state": "cut_edge",
      "mixture_ks": 0.060129,
      "n_spacings": 2048,
      "source_domain_type": "Poisson"
    },
    {
      "audit_state": "classic_only_intermediate",
      "berry_robnick_like_gue_weight": 0.475,
      "brody_nll": 137.982517,
      "brody_q": 0.975,
      "centroid_margin": 0.352347,
      "cross_neighbor_fraction": 0.166667,
      "domain": "random_matrix",
      "domain_window": "random_matrix:cycle_7",
      "graph_state": "cut_edge",
      "mixture_ks": 0.119491,
      "n_spacings": 199,
      "source_domain_type": "GUE"
    },
    {
      "audit_state": "classic_only_intermediate",
      "berry_robnick_like_gue_weight": 0.435,
      "brody_nll": 52.124605,
      "brody_q": 1.0,
      "centroid_margin": 0.411955,
      "cross_neighbor_fraction": 0.0,
      "domain": "cellular_automata",
      "domain_window": "cellular_automata:cycle_8",
      "graph_state": "class_interior",
      "mixture_ks": 0.416708,
      "n_spacings": 108,
      "source_domain_type": "GUE"
    },
    {
      "audit_state": "graph_only_bridge",
      "berry_robnick_like_gue_weight": 0.025,
      "brody_nll": 193.90387,
      "brody_q": 0.025,
      "centroid_margin": 0.088647,
      "cross_neighbor_fraction": 1.0,
      "domain": "percolation",
      "domain_window": "percolation:cycle_9",
      "graph_state": "third_included_candidate",
      "mixture_ks": 0.054635,
      "n_spacings": 194,
      "source_domain_type": "Poisson"
    },
    {
      "audit_state": "endpoint_like",
      "berry_robnick_like_gue_weight": 0.0,
      "brody_nll": 2002.0,
      "brody_q": 0.0,
      "centroid_margin": 0.560662,
      "cross_neighbor_fraction": 0.0,
      "domain": "coupled_oscillators",
      "domain_window": "coupled_oscillators:cycle_10",
      "graph_state": "class_interior",
      "mixture_ks": 0.079806,
      "n_spacings": 2002,
      "source_domain_type": "Poisson"
    },
    {
      "audit_state": "graph_only_bridge",
      "berry_robnick_like_gue_weight": 0.0,
      "brody_nll": 499.0,
      "brody_q": 0.0,
      "centroid_margin": 0.114771,
      "cross_neighbor_fraction": 0.75,
      "domain": "reaction_diffusion",
      "domain_window": "reaction_diffusion:cycle_11",
      "graph_state": "third_included_candidate",
      "mixture_ks": 0.174423,
      "n_spacings": 499,
      "source_domain_type": "GUE"
    },
    {
      "audit_state": "classic_only_intermediate",
      "berry_robnick_like_gue_weight": 0.25,
      "brody_nll": 1997.987436,
      "brody_q": 0.205,
      "centroid_margin": 0.438315,
      "cross_neighbor_fraction": 0.25,
      "domain": "brownian_motion",
      "domain_window": "brownian_motion:cycle_12",
      "graph_state": "cut_edge",
      "mixture_ks": 0.026002,
      "n_spacings": 2048,
      "source_domain_type": "Poisson"
    },
    {
      "audit_state": "graph_only_bridge",
      "berry_robnick_like_gue_weight": 0.0,
      "brody_nll": 1826.006965,
      "brody_q": 0.0,
      "centroid_margin": 0.217275,
      "cross_neighbor_fraction": 0.25,
      "domain": "logistica_biforcazione_var_3.5699",
      "domain_window": "logistica_biforcazione_var_3.5699:cycle_13",
      "graph_state": "third_included_candidate",
      "mixture_ks": 0.969277,
      "n_spacings": 2048,
      "source_domain_type": "GUE"
    }
  ],
  "source_graph": "tools/data/boundary_graph_curvature_gate_20260515_1855.json",
  "summary": {
    "audit_counts": {
      "classic_and_graph_bridge": 1,
      "classic_only_intermediate": 4,
      "endpoint_like": 5,
      "graph_only_bridge": 3
    },
    "classic_and_graph_bridge": [

exec
/bin/bash -lc "sed -n '1,180p' tools/data/boundary_denominator_prescan_full_20260509_1500.json" in /opt/MM_D-ND
 succeeded in 0ms:
{
  "experiment": "boundary_denominator_prescan",
  "question": "Does denominator_state transfer beyond V_c on the 8 GUE / 5 Poisson boundary perimeter?",
  "perimeter": "base autoricerca cycles 1..13: 8 GUE-like, 5 Poisson-like",
  "observable_contract": {
    "claim": "denominator_state gate transfer beyond V_c",
    "observable": "spacing_r label row with shuffle/null availability",
    "operator": "row-aligned domain/window prescan",
    "null": "boundary_shuffle_audit shuffle r-statistic when present",
    "non_possible": "claiming transfer where null/surrogate is absent",
    "extra_null_audits": [
      "tools/data/boundary_blank_null_audit_20260509_1430.json",
      "tools/data/boundary_blank_null_audit_residual_20260509_1500.json"
    ]
  },
  "summary": {
    "n_rows": 13,
    "by_transfer": {
      "transfers": 13
    },
    "by_denominator_state": {
      "contaminated": 5,
      "complete": 8
    },
    "by_source_domain_type": {
      "GUE": 8,
      "Poisson": 5
    },
    "transfer_scope": [
      "ising_2d:cycle_1",
      "pendolo_doppio:cycle_2",
      "numeri_primi:cycle_3",
      "zeta_zeros:cycle_4",
      "logistica_biforcazione:cycle_5",
      "string_vibration:cycle_6",
      "random_matrix:cycle_7",
      "cellular_automata:cycle_8",
      "percolation:cycle_9",
      "coupled_oscillators:cycle_10",
      "reaction_diffusion:cycle_11",
      "brownian_motion:cycle_12",
      "logistica_biforcazione_var_3.5699:cycle_13"
    ],
    "blank_scope": [],
    "falls_scope": []
  },
  "rows": [
    {
      "domain_window": "ising_2d:cycle_1",
      "domain": "ising_2d",
      "cycle": 1,
      "source_domain_type": "GUE",
      "denominator_state": "contaminated",
      "excluded_mass": 0.81,
      "observable": {
        "name": "spacing_r",
        "defined": true,
        "value": 0.9022289766970617,
        "label": "GUE-like",
        "n_points": 5000
      },
      "null_surrogate": {
        "name": "shuffle_r_statistic",
        "status": "shuffle z=-0.10; class_change=False",
        "domain_key": "ising_2d",
        "n_gaps": 95,
        "r_shuffled_mean": 0.9859,
        "z_score": -0.1,
        "class_changes": false
      },
      "transfer": "transfers"
    },
    {
      "domain_window": "pendolo_doppio:cycle_2",
      "domain": "pendolo_doppio",
      "cycle": 2,
      "source_domain_type": "Poisson",
      "denominator_state": "complete",
      "excluded_mass": 0.0,
      "observable": {
        "name": "spacing_r",
        "defined": true,
        "value": 0.38610398536946516,
        "label": "Poisson-like",
        "n_points": 5009
      },
      "null_surrogate": {
        "name": "shuffle_r_statistic",
        "status": "shuffle z=27.92; class_change=False",
        "domain_key": "pendolo_doppio",
        "n_gaps": 5008,
        "r_shuffled_mean": 0.292437,
        "z_score": 27.919656,
        "class_changes": false
      },
      "transfer": "transfers"
    },
    {
      "domain_window": "numeri_primi:cycle_3",
      "domain": "numeri_primi",
      "cycle": 3,
      "source_domain_type": "GUE",
      "denominator_state": "complete",
      "excluded_mass": 0.0,
      "observable": {
        "name": "spacing_r",
        "defined": true,
        "value": 0.8862068965517241,
        "label": "GUE-like",
        "n_points": 5132
      },
      "null_surrogate": {
        "name": "shuffle_r_statistic",
        "status": "shuffle z=-26.60; class_change=False",
        "domain_key": "primes",
        "n_gaps": 99999,
        "r_shuffled_mean": 0.4813,
        "z_score": -26.6,
        "class_changes": false
      },
      "transfer": "transfers"
    },
    {
      "domain_window": "zeta_zeros:cycle_4",
      "domain": "zeta_zeros",
      "cycle": 4,
      "source_domain_type": "GUE",
      "denominator_state": "contaminated",
      "excluded_mass": 0.602,
      "observable": {
        "name": "spacing_r",
        "defined": true,
        "value": 0.615,
        "label": "GUE-like",
        "n_points": 199
      },
      "null_surrogate": {
        "name": "shuffle_r_statistic",
        "status": "shuffle z=-2.31; class_change=False",
        "domain_key": "zeta_zeros",
        "n_gaps": 199,
        "r_shuffled_mean": 0.641885,
        "z_score": -2.310593,
        "class_changes": false
      },
      "transfer": "transfers"
    },
    {
      "domain_window": "logistica_biforcazione:cycle_5",
      "domain": "logistica_biforcazione",
      "cycle": 5,
      "source_domain_type": "GUE",
      "denominator_state": "complete",
      "excluded_mass": 0.0,
      "observable": {
        "name": "spacing_r",
        "defined": true,
        "value": 0.997077776975089,
        "label": "GUE-like",
        "n_points": 5000
      },
      "null_surrogate": {
        "name": "shuffle_r_statistic",
        "status": "shuffle z=61.60; class_change=False",
        "domain_key": "logistic",
        "n_gaps": 99999,
        "r_shuffled_mean": 0.3423,
        "z_score": 61.6,
        "class_changes": false
      },
      "transfer": "transfers"
    },
    {
      "domain_window": "string_vibration:cycle_6",
      "domain": "string_vibration",
      "cycle": 6,
      "source_domain_type": "Poisson",
      "denominator_state": "complete",
      "excluded_mass": 0.0,
      "observable": {

exec
/bin/bash -lc "sed -n '1,260p' tools/exp_boundary_graph_curvature_gate.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""
Graph-curvature gate for the 8 GUE / 5 Poisson BOUNDARY perimeter.

The unit is the row-aligned domain/window from the base BOUNDARY perimeter.
Labels are kept as audit metadata; the geometry is built from observables:
canonical registry values, explicit spectral rigidity, and shuffle z values.
"""

from __future__ import annotations

import argparse
import json
import math
from pathlib import Path
from typing import Any

import numpy as np

from exp_semireal_boundary_transfer_gate import row_spacings
from observables_registry import (
    OBSERVABLES_CANONICAL,
    OBSERVABLES_REGISTRY_VERSION,
    SR_local_rigidity,
)


OBS_NAMES = list(OBSERVABLES_CANONICAL.keys())
FEATURE_NAMES = OBS_NAMES + ["SR_local_rigidity"] + [f"z_{name}" for name in OBS_NAMES]


def load_scope(path: Path) -> list[dict[str, Any]]:
    with path.open() as f:
        data = json.load(f)
    rows = data.get("rows", [])
    if not isinstance(rows, list):
        raise ValueError(f"{path} does not contain rows")
    return rows


def finite(value: Any) -> bool:
    return isinstance(value, (int, float)) and math.isfinite(float(value))


def compute_observables(gaps: np.ndarray) -> dict[str, float]:
    values = {name: float(fn(gaps)) for name, fn in OBSERVABLES_CANONICAL.items()}
    values["SR_local_rigidity"] = float(SR_local_rigidity(gaps))
    return values


def shuffle_z(
    gaps: np.ndarray,
    original: dict[str, float],
    n_shuffle: int,
    rng: np.random.Generator,
) -> dict[str, float]:
    samples = {name: [] for name in OBS_NAMES}
    for _ in range(n_shuffle):
        shuffled = rng.permutation(gaps)
        obs = compute_observables(shuffled)
        for name in OBS_NAMES:
            samples[name].append(obs[name])

    z = {}
    for name in OBS_NAMES:
        arr = np.asarray(samples[name], dtype=float)
        sd = float(np.std(arr, ddof=1)) if len(arr) > 1 else 0.0
        mean = float(np.mean(arr)) if len(arr) else 0.0
        z[name] = float((original[name] - mean) / sd) if sd > 1e-15 else 0.0
    return z


def standardized_matrix(rows: list[dict[str, Any]]) -> np.ndarray:
    matrix = []
    for row in rows:
        obs = row["observables"]
        z = row["shuffle_z"]
        matrix.append([obs[name] for name in OBS_NAMES] + [obs["SR_local_rigidity"]] + [z[name] for name in OBS_NAMES])
    x = np.asarray(matrix, dtype=float)
    center = np.mean(x, axis=0)
    scale = np.std(x, axis=0, ddof=1)
    scale[scale <= 1e-15] = 1.0
    return (x - center) / scale


def build_knn_edges(x: np.ndarray, k: int) -> list[tuple[int, int, float]]:
    n = len(x)
    distances = np.linalg.norm(x[:, None, :] - x[None, :, :], axis=2)
    edges: set[tuple[int, int]] = set()
    for i in range(n):
        nearest = np.argsort(distances[i])[1 : k + 1]
        for j in nearest:
            edges.add((min(i, int(j)), max(i, int(j))))
    return [(i, j, float(distances[i, j])) for i, j in sorted(edges)]


def classify_geometry(rows: list[dict[str, Any]], x: np.ndarray, k: int) -> dict[str, Any]:
    labels = [row["source_domain_type"] for row in rows]
    gue_idx = [i for i, label in enumerate(labels) if label == "GUE"]
    poi_idx = [i for i, label in enumerate(labels) if label == "Poisson"]
    if not gue_idx or not poi_idx:
        raise ValueError("scope must include both GUE and Poisson rows")

    c_gue = np.mean(x[gue_idx], axis=0)
    c_poi = np.mean(x[poi_idx], axis=0)
    edges = build_knn_edges(x, k)
    degree = {i: 0 for i in range(len(rows))}
    for i, j, _ in edges:
        degree[i] += 1
        degree[j] += 1

    row_out = []
    third_rows = []
    for i, row in enumerate(rows):
        d_gue = float(np.linalg.norm(x[i] - c_gue))
        d_poi = float(np.linalg.norm(x[i] - c_poi))
        denom = d_gue + d_poi
        centroid_coord = float((d_gue - d_poi) / denom) if denom > 1e-15 else 0.0
        centroid_margin = float(abs(d_gue - d_poi) / denom) if denom > 1e-15 else 0.0
        incident = [(a, b, dist) for a, b, dist in edges if a == i or b == i]
        cross = 0
        cross_curvatures = []
        same_curvatures = []
        for a, b, _ in incident:
            other = b if a == i else a
            curvature = 4 - degree[a] - degree[b]
            if labels[other] != labels[i]:
                cross += 1
                cross_curvatures.append(curvature)
            else:
                same_curvatures.append(curvature)
        cross_fraction = float(cross / len(incident)) if incident else 0.0
        state = "class_interior"
        if cross_fraction > 0 and centroid_margin < 0.25:
            state = "third_included_candidate"
            third_rows.append(row["domain_window"])
        elif cross_fraction > 0:
            state = "cut_edge"
        row_out.append(
            {
                "domain_window": row["domain_window"],
                "domain": row["domain"],
                "source_domain_type": row["source_domain_type"],
                "degree": degree[i],
                "centroid_coord": round(centroid_coord, 6),
                "centroid_margin": round(centroid_margin, 6),
                "cross_neighbor_fraction": round(cross_fraction, 6),
                "cross_edge_curvature_mean": round(float(np.mean(cross_curvatures)), 6) if cross_curvatures else None,
                "same_edge_curvature_mean": round(float(np.mean(same_curvatures)), 6) if same_curvatures else None,
                "boundary_state": state,
            }
        )

    cross_edges = [
        {
            "a": rows[i]["domain_window"],
            "b": rows[j]["domain_window"],
            "distance": round(dist, 6),
            "forman_unweighted": 4 - degree[i] - degree[j],
        }
        for i, j, dist in edges
        if labels[i] != labels[j]
    ]
    same_edges = [
        {"distance": dist, "forman_unweighted": 4 - degree[i] - degree[j]}
        for i, j, dist in edges
        if labels[i] == labels[j]
    ]

    return {
        "feature_names": FEATURE_NAMES,
        "k": k,
        "label_counts": {
            "GUE": len(gue_idx),
            "Poisson": len(poi_idx),
        },
        "edge_counts": {
            "total": len(edges),
            "cross_label": len(cross_edges),
            "same_label": len(same_edges),
        },
        "curvature": {
            "cross_edge_mean": round(float(np.mean([e["forman_unweighted"] for e in cross_edges])), 6) if cross_edges else None,
            "same_edge_mean": round(float(np.mean([e["forman_unweighted"] for e in same_edges])), 6) if same_edges else None,
        },
        "third_included_candidates": third_rows,
        "rows": row_out,
        "cross_edges": cross_edges,
    }


def run(args: argparse.Namespace) -> dict[str, Any]:
    rng = np.random.default_rng(args.seed)
    scope = load_scope(Path(args.scope))
    selected = [row for row in scope if row.get("source_domain_type") in {"GUE", "Poisson"}]
    selected = sorted(selected, key=lambda row: int(row["cycle"]))

    rows = []
    errors = []
    for source in selected:
        try:
            gaps = row_spacings(source["domain"])
            if len(gaps) < args.min_gaps:
                errors.append(
                    {
                        "domain_window": source["domain_window"],
                        "error": f"insufficient gaps {len(gaps)} < {args.min_gaps}",
                    }
                )
                continue
            gaps = gaps[: args.n_gaps] if len(gaps) > args.n_gaps else gaps
            obs = compute_observables(gaps)
            z = shuffle_z(gaps, obs, args.n_shuffle, rng)
            rows.append(
                {
                    "domain_window": source["domain_window"],
                    "domain": source["domain"],
                    "cycle": source["cycle"],
                    "source_domain_type": source["source_domain_type"],
                    "n_gaps": int(len(gaps)),
                    "observables": {key: round(value, 9) for key, value in obs.items()},
                    "shuffle_z": {key: round(value, 6) for key, value in z.items()},
                }
            )
        except Exception as exc:  # noqa: BLE001 - row-level telemetry is part of the result.
            errors.append(
                {
                    "domain_window": source.get("domain_window"),
                    "error": type(exc).__name__,
                    "message": str(exc),
                }
            )

    x = standardized_matrix(rows)
    geometry = classify_geometry(rows, x, args.k)
    output = {
        "experiment": "boundary_graph_curvature_gate",
        "question": "Does the 8 GUE / 5 Poisson perimeter expose a graph boundary row instead of a clean two-class split?",
        "observables_registry": OBSERVABLES_REGISTRY_VERSION,
        "observables_used": FEATURE_NAMES,
        "params": vars(args),
        "source_scope": args.scope,
        "observable_contract": {
            "claim": "the boundary is operational when row geometry produces cross-label graph nodes with low centroid margin",
            "observable": "kNN graph position, cross-neighbor fraction, centroid margin, unweighted Forman edge curvature",
            "operator": "row-aligned domain/window graph in canonical+rigidity+shuffle-z feature space",
            "generator": "dnd_autoricerca row_spacings via semireal boundary transfer gate",
            "denominator": "base BOUNDARY rows with source_domain_type in {GUE, Poisson}",
            "non_possible": "third-included boundary if all cross-label edges vanish or only high-margin class interiors cross",
            "not_tested": "V_c, Sturmian denominators, analytic source of each domain label",
        },
        "summary": {
            "rows_analyzed": len(rows),
            "errors": len(errors),
            "third_included_candidate_count": len(geometry["third_included_candidates"]),
            "third_included_candidates": geometry["third_included_candidates"],
            "edge_counts": geometry["edge_counts"],
            "curvature": geometry["curvature"],
        },
        "geometry": geometry,

exec
/bin/bash -lc "sed -n '260,560p' tools/exp_boundary_graph_curvature_gate.py" in /opt/MM_D-ND
 succeeded in 0ms:
        "geometry": geometry,
        "rows": rows,
        "errors": errors,
    }

    out = Path(args.out)
    out.parent.mkdir(parents=True, exist_ok=True)
    out.write_text(json.dumps(output, indent=2) + "\n", encoding="utf-8")

    print(f"observables_registry={OBSERVABLES_REGISTRY_VERSION}")
    print(f"observables_used={FEATURE_NAMES}")
    print(f"rows_analyzed={len(rows)} errors={len(errors)}")
    print(f"label_counts={geometry['label_counts']}")
    print(f"edge_counts={geometry['edge_counts']}")
    print(f"curvature={geometry['curvature']}")
    print(f"third_included_candidates={geometry['third_included_candidates']}")
    for row in geometry["rows"]:
        print(
            f"{row['domain_window']}\t{row['source_domain_type']}\t"
            f"margin={row['centroid_margin']:.3f}\tcross={row['cross_neighbor_fraction']:.3f}\t"
            f"state={row['boundary_state']}"
        )
    print(f"saved={out}")
    return output


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
    parser.add_argument("--n-gaps", type=int, default=2048)
    parser.add_argument("--min-gaps", type=int, default=64)
    parser.add_argument("--n-shuffle", type=int, default=64)
    parser.add_argument("--k", type=int, default=3)
    parser.add_argument("--seed", type=int, default=20260515)
    parser.add_argument("--out", default="tools/data/boundary_graph_curvature_gate_20260515_1855.json")
    args = parser.parse_args()
    run(args)


if __name__ == "__main__":
    main()

codex
Farò un esperimento piccolo ma falsificabile: tengo fisse le 13 righe e le 27 letture del graph-reader, poi permuto solo le etichette GUE/Poisson preservando il conteggio 8/5. Il candidato `numeri_primi:cycle_3` regge solo se la sua posizione non è ricostruita spesso dal null di etichetta.
apply patch
patch: completed
/opt/MM_D-ND/tools/exp_boundary_prime_label_null_audit.py
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

codex
Lo script è aggiunto e mantiene fisso il lettore precedente; prima lo compilo, poi lancio i 512 null. Se il null ricostruisce spesso il `27/27`, il ciclo deve chiudere come vincolo e non come ritorno fisico.
exec
/bin/bash -lc 'python -m py_compile tools/exp_boundary_prime_label_null_audit.py' in /opt/MM_D-ND
 succeeded in 0ms:
exec
/bin/bash -lc 'python tools/exp_boundary_prime_label_null_audit.py --out tools/data/boundary_prime_label_null_audit_20260516_1148.json --null-trials 512' in /opt/MM_D-ND
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

codex
Il run sta ancora girando: il costo viene dal riclassificare 27 letture per ciascuna delle 512 permutazioni. Attendo l'uscita invece di interrompere, perché il denominatore era preregistrato nel contratto.
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

codex
È più lento del previsto ma non bloccato: lo script non stampa progress fino alla fine. Lascio finire per evitare di cambiare a metà il numero di trial o il null definito.
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

 succeeded in 122515ms:
{
  "null": {
    "add_one_p": 0.649122807,
    "any_row_eq_27": 506,
    "examples": [
      {
        "stable_27_rows": [
          "cellular_automata:cycle_8",
          "coupled_oscillators:cycle_10",
          "ising_2d:cycle_1",
          "pendolo_doppio:cycle_2"
        ],
        "target_hits": 0,
        "target_label": "GUE",
        "trial": 0
      },
      {
        "stable_27_rows": [
          "brownian_motion:cycle_12",
          "logistica_biforcazione_var_3.5699:cycle_13",
          "numeri_primi:cycle_3",
          "pendolo_doppio:cycle_2",
          "percolation:cycle_9",
          "random_matrix:cycle_7",
          "reaction_diffusion:cycle_11",
          "zeta_zeros:cycle_4"
        ],
        "target_hits": 27,
        "target_label": "Poisson",
        "trial": 1
      },
      {
        "stable_27_rows": [
          "cellular_automata:cycle_8",
          "coupled_oscillators:cycle_10",
          "ising_2d:cycle_1",
          "logistica_biforcazione:cycle_5",
          "logistica_biforcazione_var_3.5699:cycle_13",
          "pendolo_doppio:cycle_2",
          "percolation:cycle_9",
          "string_vibration:cycle_6"
        ],
        "target_hits": 24,
        "target_label": "GUE",
        "trial": 2
      },
      {
        "stable_27_rows": [
          "brownian_motion:cycle_12",
          "logistica_biforcazione_var_3.5699:cycle_13",
          "numeri_primi:cycle_3",
          "pendolo_doppio:cycle_2",
          "percolation:cycle_9",
          "random_matrix:cycle_7",
          "reaction_diffusion:cycle_11",
          "zeta_zeros:cycle_4"
        ],
        "target_hits": 27,
        "target_label": "GUE",
        "trial": 3
      },
      {
        "stable_27_rows": [
          "brownian_motion:cycle_12",
          "coupled_oscillators:cycle_10",
          "logistica_biforcazione:cycle_5",
          "logistica_biforcazione_var_3.5699:cycle_13",
          "percolation:cycle_9",
          "string_vibration:cycle_6"
        ],
        "target_hits": 15,
        "target_label": "Poisson",
        "trial": 4
      },
      {
        "stable_27_rows": [
          "brownian_motion:cycle_12",
          "cellular_automata:cycle_8",
          "coupled_oscillators:cycle_10",
          "ising_2d:cycle_1",
          "logistica_biforcazione:cycle_5",
          "numeri_primi:cycle_3",
          "pendolo_doppio:cycle_2",
          "random_matrix:cycle_7",
          "string_vibration:cycle_6",
          "zeta_zeros:cycle_4"
        ],
        "target_hits": 27,
        "target_label": "GUE",
        "trial": 5
      },
      {
        "stable_27_rows": [
          "logistica_biforcazione:cycle_5",
          "logistica_biforcazione_var_3.5699:cycle_13",
          "percolation:cycle_9"
        ],
        "target_hits": 18,
        "target_label": "GUE",
        "trial": 6
      },
      {
        "stable_27_rows": [
          "coupled_oscillators:cycle_10",
          "ising_2d:cycle_1",
          "logistica_biforcazione:cycle_5",
          "pendolo_doppio:cycle_2"
        ],
        "target_hits": 9,
        "target_label": "GUE",
        "trial": 7
      }
    ],
    "raw_p": 0.6484375,
    "target_eq_27": 220,
    "target_eq_27_with_target_label": {
      "GUE": 112,
      "Poisson": 108
    },
    "target_ge_observed": 332,
    "target_hits_distribution": {
      "0": 37,
      "1": 1,
      "10": 3,
      "11": 1,
      "12": 14,
      "15": 9,
      "16": 12,
      "18": 57,
      "19": 2,
      "2": 1,
      "21": 15,
      "22": 3,
      "24": 16,
      "25": 19,
      "27": 220,
      "3": 9,
      "4": 4,
      "5": 1,
      "6": 14,
      "7": 9,
      "9": 65
    },
    "target_label_distribution": {
      "GUE": 307,
      "Poisson": 205
    },
    "wilson_95": [
      0.606114599,
      0.68854958
    ]
  },
  "observed": {
    "stable_27_rows": [
      "logistica_biforcazione_var_3.5699:cycle_13",
      "percolation:cycle_9",
      "reaction_diffusion:cycle_11"
    ],
    "target": "numeri_primi:cycle_3",
    "target_classical_audit": {
      "audit_state": "classic_and_graph_bridge",
      "berry_robnick_like_gue_weight": 0.275,
      "brody_nll": 1826.209184,
      "brody_q": 0.465,
      "centroid_margin": 0.222754,
      "cross_neighbor_fraction": 0.25,
      "domain": "numeri_primi",
      "domain_window": "numeri_primi:cycle_3",
      "graph_state": "third_included_candidate",
      "mixture_ks": 0.148459,
      "n_spacings": 2048,
      "source_domain_type": "GUE"
    },
    "target_frequency": 0.666666667,
    "target_hits": 18,
    "target_source_label": "GUE"
  }
}

exec
/bin/bash -lc "python - <<'PY'
import json
p='tools/data/boundary_prime_label_null_audit_20260516_1148.json'
d=json.load(open(p))
print(d['observed']['target_hits'])
print([r for r in d['observed'].get('per_run', [])[:3]])
PY" in /opt/MM_D-ND
 succeeded in 0ms:
18
[]

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

exec
/bin/bash -lc "python - <<'PY'
import json
p='tools/data/boundary_prime_label_null_audit_20260516_1148.json'
d=json.load(open(p))
print(d['params'])
print(d['observed'])
PY" in /opt/MM_D-ND
 succeeded in 0ms:
{'classical_audit': 'tools/data/boundary_classical_crossover_audit_20260515_1904.json', 'k_values': [2, 3, 4], 'min_gaps': 64, 'n_gaps_values': [512, 1024, 2048], 'n_shuffle': 32, 'null_seed': 20260516, 'null_trials': 512, 'scope': 'tools/data/boundary_denominator_prescan_full_20260509_1500.json', 'seeds': [20260515, 20260516, 20260517], 'target': 'numeri_primi:cycle_3'}
{'stable_27_rows': ['logistica_biforcazione_var_3.5699:cycle_13', 'percolation:cycle_9', 'reaction_diffusion:cycle_11'], 'target': 'numeri_primi:cycle_3', 'target_classical_audit': {'audit_state': 'classic_and_graph_bridge', 'berry_robnick_like_gue_weight': 0.275, 'brody_nll': 1826.209184, 'brody_q': 0.465, 'centroid_margin': 0.222754, 'cross_neighbor_fraction': 0.25, 'domain': 'numeri_primi', 'domain_window': 'numeri_primi:cycle_3', 'graph_state': 'third_included_candidate', 'mixture_ks': 0.148459, 'n_spacings': 2048, 'source_domain_type': 'GUE'}, 'target_frequency': 0.666666667, 'target_hits': 18, 'target_source_label': 'GUE'}

exec
/bin/bash -lc 'python tools/exp_boundary_bridge_stability_audit.py --out /tmp/bridge_test.json' in /opt/MM_D-ND
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

 succeeded in 116649ms:
{
  "classic_only_stable_graph_absent": [
    "cellular_automata:cycle_8"
  ],
  "composite_counts": {
    "parameter_sensitive_bridge+classic_only_intermediate": 3,
    "parameter_sensitive_bridge+endpoint_like": 1,
    "stable_graph_bridge+classic_and_graph_bridge": 1,
    "stable_graph_bridge+graph_only_bridge": 3,
    "unstable_non_bridge+classic_only_intermediate": 1,
    "unstable_non_bridge+endpoint_like": 4
  },
  "graph_reader_runs": 27,
  "lab_residue_after_stability": true,
  "rows_analyzed": 13,
  "stable_classic_and_graph": [
    "numeri_primi:cycle_3"
  ],
  "stable_graph_only": [
    "logistica_biforcazione_var_3.5699:cycle_13",
    "percolation:cycle_9",
    "reaction_diffusion:cycle_11"
  ]
}

codex
Sto verificando una dissonanza: il nuovo script ricalcola il target a `18/27`, mentre il report 11:40 riportava `27/27`. Prima di scrivere il report tratto questa come finding/telemetria, non la arrotondo: sto rieseguendo il baseline 11:40 per capire se è riproducibile nello stesso ambiente.
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

exec
/bin/bash -lc "python - <<'PY'
import json
b=json.load(open('/tmp/bridge_test.json'))
for r in b['rows']:
 if r['domain_window']=='numeri_primi:cycle_3': print('bridge', r)
p=json.load(open('tools/data/boundary_prime_label_null_audit_20260516_1148.json'))
print('prime observed', p['observed'])
PY" in /opt/MM_D-ND
 succeeded in 0ms:
bridge {'berry_robnick_like_gue_weight': 0.275, 'brody_q': 0.465, 'classical_audit_state': 'classic_and_graph_bridge', 'composite_state': 'stable_graph_bridge+classic_and_graph_bridge', 'cut_edge_frequency': 0.0, 'domain': 'numeri_primi', 'domain_window': 'numeri_primi:cycle_3', 'graph_bridge_frequency': 1.0, 'graph_bridge_hits': 27, 'mean_cross_neighbor_fraction': 0.250617, 'mean_margin': 0.103332, 'source_domain_type': 'GUE', 'stability_state': 'stable_graph_bridge'}
prime observed {'stable_27_rows': ['logistica_biforcazione_var_3.5699:cycle_13', 'percolation:cycle_9', 'reaction_diffusion:cycle_11'], 'target': 'numeri_primi:cycle_3', 'target_classical_audit': {'audit_state': 'classic_and_graph_bridge', 'berry_robnick_like_gue_weight': 0.275, 'brody_nll': 1826.209184, 'brody_q': 0.465, 'centroid_margin': 0.222754, 'cross_neighbor_fraction': 0.25, 'domain': 'numeri_primi', 'domain_window': 'numeri_primi:cycle_3', 'graph_state': 'third_included_candidate', 'mixture_ks': 0.148459, 'n_spacings': 2048, 'source_domain_type': 'GUE'}, 'target_frequency': 0.666666667, 'target_hits': 18, 'target_source_label': 'GUE'}

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

exec
/bin/bash -lc "python - <<'PY'
import argparse
from exp_boundary_prime_label_null_audit import load_reader_rows, geometry_hits, TARGET
args=argparse.Namespace(scope='tools/data/boundary_denominator_prescan_full_20260509_1500.json',classical_audit='tools/data/boundary_classical_crossover_audit_20260515_1904.json',k_values='2,3,4',n_gaps_values='512,1024,2048',seeds='20260515,20260516,20260517',n_shuffle=32,min_gaps=64)
sel,runs=load_reader_rows(args)
miss=[]
for run in runs:
    hits=geometry_hits(run['rows'], run['k'])
    if TARGET not in hits:
        miss.append((run['k'], run['n_gaps'], run['seed'], sorted(hits)))
print('misses', len(miss), miss)
PY" in /opt/MM_D-ND/tools
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

 exited 1 in 108ms:
exec
/bin/bash -lc "PYTHONPATH=tools python - <<'PY'
import argparse
from exp_boundary_prime_label_null_audit import load_reader_rows, geometry_hits, TARGET
args=argparse.Namespace(scope='tools/data/boundary_denominator_prescan_full_20260509_1500.json',classical_audit='tools/data/boundary_classical_crossover_audit_20260515_1904.json',k_values='2,3,4',n_gaps_values='512,1024,2048',seeds='20260515,20260516,20260517',n_shuffle=32,min_gaps=64)
sel,runs=load_reader_rows(args)
miss=[]
for run in runs:
    hits=geometry_hits(run['rows'], run['k'])
    if TARGET not in hits:
        miss.append((run['k'], run['n_gaps'], run['seed'], sorted(hits)))
print('misses', len(miss), miss)
PY" in /opt/MM_D-ND
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

 succeeded in 115138ms:
misses 0 []

exec
/bin/bash -lc 'python tools/exp_boundary_prime_label_null_audit.py --out /tmp/prime_null_test.json --null-trials 1' in /opt/MM_D-ND
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

 succeeded in 127901ms:
{
  "null": {
    "add_one_p": 0.5,
    "any_row_eq_27": 1,
    "examples": [
      {
        "stable_27_rows": [
          "cellular_automata:cycle_8",
          "coupled_oscillators:cycle_10",
          "ising_2d:cycle_1"
        ],
        "target_hits": 0,
        "target_label": "GUE",
        "trial": 0
      }
    ],
    "raw_p": 0.0,
    "target_eq_27": 0,
    "target_eq_27_with_target_label": {
      "GUE": 0,
      "Poisson": 0
    },
    "target_ge_observed": 0,
    "target_hits_distribution": {
      "0": 1
    },
    "target_label_distribution": {
      "GUE": 1,
      "Poisson": 0
    },
    "wilson_95": [
      0.0,
      0.793450686
    ]
  },
  "observed": {
    "stable_27_rows": [
      "logistica_biforcazione_var_3.5699:cycle_13",
      "numeri_primi:cycle_3",
      "percolation:cycle_9",
      "reaction_diffusion:cycle_11",
      "zeta_zeros:cycle_4"
    ],
    "target": "numeri_primi:cycle_3",
    "target_classical_audit": {
      "audit_state": "classic_and_graph_bridge",
      "berry_robnick_like_gue_weight": 0.275,
      "brody_nll": 1826.209184,
      "brody_q": 0.465,
      "centroid_margin": 0.222754,
      "cross_neighbor_fraction": 0.25,
      "domain": "numeri_primi",
      "domain_window": "numeri_primi:cycle_3",
      "graph_state": "third_included_candidate",
      "mixture_ks": 0.148459,
      "n_spacings": 2048,
      "source_domain_type": "GUE"
    },
    "target_frequency": 1.0,
    "target_hits": 27,
    "target_source_label": "GUE"
  }
}

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

codex
La riesecuzione baseline ora riproduce il candidato a `27/27`; il primo artefatto 11:48 conteneva una dissonanza interna e lo sovrascrivo con un run pulito sullo stesso contratto. Questa è una riparazione regressiva del dato, non un cambio di ipotesi.
exec
/bin/bash -lc 'python tools/exp_boundary_prime_label_null_audit.py --out tools/data/boundary_prime_label_null_audit_20260516_1148.json --null-trials 512' in /opt/MM_D-ND
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

 succeeded in 129147ms:
{
  "null": {
    "add_one_p": 0.495126706,
    "any_row_eq_27": 508,
    "examples": [
      {
        "stable_27_rows": [
          "brownian_motion:cycle_12",
          "coupled_oscillators:cycle_10",
          "ising_2d:cycle_1",
          "logistica_biforcazione:cycle_5"
        ],
        "target_hits": 0,
        "target_label": "GUE",
        "trial": 0
      },
      {
        "stable_27_rows": [
          "brownian_motion:cycle_12",
          "logistica_biforcazione_var_3.5699:cycle_13",
          "numeri_primi:cycle_3",
          "pendolo_doppio:cycle_2",
          "percolation:cycle_9",
          "random_matrix:cycle_7",
          "reaction_diffusion:cycle_11",
          "zeta_zeros:cycle_4"
        ],
        "target_hits": 27,
        "target_label": "Poisson",
        "trial": 1
      },
      {
        "stable_27_rows": [
          "cellular_automata:cycle_8",
          "coupled_oscillators:cycle_10",
          "logistica_biforcazione:cycle_5",
          "logistica_biforcazione_var_3.5699:cycle_13",
          "numeri_primi:cycle_3",
          "percolation:cycle_9",
          "string_vibration:cycle_6",
          "zeta_zeros:cycle_4"
        ],
        "target_hits": 27,
        "target_label": "GUE",
        "trial": 2
      },
      {
        "stable_27_rows": [
          "logistica_biforcazione_var_3.5699:cycle_13",
          "numeri_primi:cycle_3",
          "pendolo_doppio:cycle_2",
          "random_matrix:cycle_7",
          "reaction_diffusion:cycle_11",
          "zeta_zeros:cycle_4"
        ],
        "target_hits": 27,
        "target_label": "GUE",
        "trial": 3
      },
      {
        "stable_27_rows": [
          "brownian_motion:cycle_12",
          "coupled_oscillators:cycle_10",
          "logistica_biforcazione:cycle_5",
          "logistica_biforcazione_var_3.5699:cycle_13",
          "string_vibration:cycle_6"
        ],
        "target_hits": 21,
        "target_label": "Poisson",
        "trial": 4
      },
      {
        "stable_27_rows": [
          "brownian_motion:cycle_12",
          "cellular_automata:cycle_8",
          "coupled_oscillators:cycle_10",
          "ising_2d:cycle_1",
          "logistica_biforcazione:cycle_5",
          "numeri_primi:cycle_3",
          "pendolo_doppio:cycle_2",
          "random_matrix:cycle_7",
          "string_vibration:cycle_6",
          "zeta_zeros:cycle_4"
        ],
        "target_hits": 27,
        "target_label": "GUE",
        "trial": 5
      },
      {
        "stable_27_rows": [
          "brownian_motion:cycle_12",
          "logistica_biforcazione:cycle_5",
          "numeri_primi:cycle_3",
          "percolation:cycle_9",
          "reaction_diffusion:cycle_11"
        ],
        "target_hits": 27,
        "target_label": "GUE",
        "trial": 6
      },
      {
        "stable_27_rows": [
          "coupled_oscillators:cycle_10",
          "logistica_biforcazione:cycle_5",
          "pendolo_doppio:cycle_2"
        ],
        "target_hits": 9,
        "target_label": "GUE",
        "trial": 7
      }
    ],
    "raw_p": 0.494140625,
    "target_eq_27": 253,
    "target_eq_27_with_target_label": {
      "GUE": 141,
      "Poisson": 112
    },
    "target_ge_observed": 253,
    "target_hits_distribution": {
      "0": 36,
      "1": 4,
      "10": 1,
      "12": 16,
      "15": 5,
      "18": 38,
      "19": 5,
      "20": 1,
      "21": 35,
      "24": 24,
      "27": 253,
      "3": 9,
      "5": 1,
      "6": 9,
      "7": 1,
      "8": 2,
      "9": 72
    },
    "target_label_distribution": {
      "GUE": 307,
      "Poisson": 205
    },
    "wilson_95": [
      0.45103927,
      0.53732925
    ]
  },
  "observed": {
    "stable_27_rows": [
      "logistica_biforcazione_var_3.5699:cycle_13",
      "numeri_primi:cycle_3",
      "percolation:cycle_9"
    ],
    "target": "numeri_primi:cycle_3",
    "target_classical_audit": {
      "audit_state": "classic_and_graph_bridge",
      "berry_robnick_like_gue_weight": 0.275,
      "brody_nll": 1826.209184,
      "brody_q": 0.465,
      "centroid_margin": 0.222754,
      "cross_neighbor_fraction": 0.25,
      "domain": "numeri_primi",
      "domain_window": "numeri_primi:cycle_3",
      "graph_state": "third_included_candidate",
      "mixture_ks": 0.148459,
      "n_spacings": 2048,
      "source_domain_type": "GUE"
    },
    "target_frequency": 1.0,
    "target_hits": 27,
    "target_source_label": "GUE"
  }
}

exec
/bin/bash -lc 'git status --short' in /opt/MM_D-ND
 succeeded in 0ms:
 M applications/INDEX.draft.json
 M docs/guides/lab_current_state_logic_2026-05-08.md
 M tools/LAB_AGENT_CONTEXT.md
 M tools/build_agent_field.py
 M tools/build_lab_graph.py
 M tools/data/agent_field_live.md
 M tools/data/b2_apply_log.jsonl
 M tools/data/ciclo_memoria.json
 M tools/data/consecutio.json
 M tools/data/consecutio_processata.json
 M tools/data/domandatore_pre_cycle.json
 M tools/data/domande_fondamentali.json
 M tools/data/g1_log.jsonl
 M tools/data/g2_log.jsonl
 M tools/data/graph_completion/latest.json
 M tools/data/incrocio_risultato.json
 M tools/data/knowledge_state.json
 M tools/data/lab_bridge_issues.jsonl
 M tools/data/lab_data.json
 M tools/data/lab_graph.json
 M tools/data/lab_health.json
 M tools/data/lab_session_log.jsonl
 M tools/data/pipeline_state.json
 M tools/data/ponti_evoluti.json
 M tools/data/repairs/repair_run_log.jsonl
 M tools/data/reports/latest.md
 M tools/data/seme.json
 D tools/data/seme_archive/piano_37.json
 D tools/data/seme_archive/piano_38.json
 D tools/data/seme_archive/piano_4.json
 D tools/data/seme_archive/piano_5.json
 D tools/data/seme_archive/piano_6.json
 D tools/data/seme_archive/piano_7.json
 D tools/data/seme_archive/piano_8.json
 D tools/data/seme_archive/piano_9.json
 M tools/data/seme_backup_pre_run.json
 M tools/data/tm1_figures/tensions.json
 M tools/data/tm1_figures/tensions_raw.json
 M tools/data/valutatore_log.jsonl
 M tools/evolution_report.md
 M tools/graph_completion_compiler.py
 M tools/lab_aeternitas.py
 M tools/lab_agent.sh
 M tools/lab_falsifier.py
 M tools/lab_session_logger.py
?? applications/scoperte/20260513_0330_prime-vs-mod6-sr-boundary_auto/
?? applications/scoperte/20260514_1330_sr-residual-width-audit_auto/
?? applications/scoperte/20260514_1631_chiusura-tester-rimbalzo-fisico-w6_auto/
?? applications/scoperte/20260514_1640_rafforzamento-tester-fisico-goegue-n-curve_auto/
?? applications/scoperte/20260515_1712_primemod6-generative-null-w2048_auto/
?? applications/scoperte/20260515_1816_v2-generator-scaling-gate_auto/
?? applications/scoperte/20260515_1904_boundary-classical-crossover-audit_auto/
?? applications/scoperte/20260515_1933_rosenzweig-porter-physical-bridge-audit_auto/
?? applications/scoperte/20260515_1940_rp-boundary-size-stability-audit_auto/
?? applications/scoperte/20260515_1947_anderson-3d-mobility-edge-two-reader_auto/
?? applications/scoperte/20260516_0921_rp-unfolding-sensitivity-audit_auto/
?? applications/scoperte/20260516_0938_rp-candidate-local-window-stress-gate_auto/
?? applications/scoperte/20260516_1007_rp-local-window-persistence-curve_auto/
?? applications/scoperte/20260516_1019_rp-exact-local-window-size-stress_auto/
?? applications/scoperte/20260516_1031_boundary-unfolding-transfer-matrix_auto/
?? applications/scoperte/20260516_1104_endpoint-gated-rp-boundary_auto/
?? applications/scoperte/20260516_1111_endpoint-gated-rp-size-ladder_auto/
?? applications/scoperte/20260516_1117_anderson-3d-two-reader-boundary-null_auto/
?? applications/scoperte/20260516_1135_anderson-comparable-null-audit_auto/
?? applications/soluzioni/20260513_0330_prime-vs-mod6-sr-boundary/
?? applications/soluzioni/20260514_1330_sr-residual-width-audit/
?? applications/soluzioni/20260514_1631_chiusura-tester-rimbalzo-fisico-w6/
?? applications/soluzioni/20260514_1640_rafforzamento-tester-fisico-goegue-n-curve/
?? applications/soluzioni/20260515_1712_primemod6-generative-null-w2048/
?? applications/soluzioni/20260515_1816_v2-generator-scaling-gate/
?? applications/soluzioni/20260515_1904_boundary-classical-crossover-audit/
?? applications/soluzioni/20260515_1933_rosenzweig-porter-physical-bridge-audit/
?? applications/soluzioni/20260515_1940_rp-boundary-size-stability-audit/
?? applications/soluzioni/20260515_1947_anderson-3d-mobility-edge-two-reader/
?? applications/soluzioni/20260516_0921_rp-unfolding-sensitivity-audit/
?? applications/soluzioni/20260516_0938_rp-candidate-local-window-stress-gate/
?? applications/soluzioni/20260516_1007_rp-local-window-persistence-curve/
?? applications/soluzioni/20260516_1019_rp-exact-local-window-size-stress/
?? applications/soluzioni/20260516_1031_boundary-unfolding-transfer-matrix/
?? applications/soluzioni/20260516_1104_endpoint-gated-rp-boundary/
?? applications/soluzioni/20260516_1111_endpoint-gated-rp-size-ladder/
?? applications/soluzioni/20260516_1117_anderson-3d-two-reader-boundary-null/
?? applications/soluzioni/20260516_1135_anderson-comparable-null-audit/
?? docs/guides/lab_preflight_agent_2026-05-14.md
?? docs/operations/
?? tools/build_lab_data.py
?? tools/build_safe_agent_field_preview.py
?? tools/compose_filtered_field_preview.py
?? tools/compose_supervised_entry_preview.py
?? tools/data/aeternitas/aeternitas_20260512_033539.json
?? tools/data/aeternitas/aeternitas_20260513_033605.json
?? tools/data/aeternitas/aeternitas_20260514_033420.json
?? tools/data/aeternitas/aeternitas_20260514_133424.json
?? tools/data/aeternitas/aeternitas_20260514_150454.json
?? tools/data/aeternitas/aeternitas_20260514_161058.json
?? tools/data/aeternitas/aeternitas_20260514_161719.json
?? tools/data/aeternitas/aeternitas_20260514_163527.json
?? tools/data/aeternitas/aeternitas_20260514_164509.json
?? tools/data/aeternitas/aeternitas_20260514_165437.json
?? tools/data/aeternitas/aeternitas_20260514_170109.json
?? tools/data/aeternitas/aeternitas_20260514_171152.json
?? tools/data/aeternitas/aeternitas_20260514_185450.json
?? tools/data/aeternitas/aeternitas_20260515_162727.json
?? tools/data/aeternitas/aeternitas_20260515_165116.json
?? tools/data/aeternitas/aeternitas_20260515_170328.json
?? tools/data/aeternitas/aeternitas_20260515_171005.json
?? tools/data/aeternitas/aeternitas_20260515_171725.json
?? tools/data/aeternitas/aeternitas_20260515_172913.json
?? tools/data/aeternitas/aeternitas_20260515_174023.json
?? tools/data/aeternitas/aeternitas_20260515_175045.json
?? tools/data/aeternitas/aeternitas_20260515_180306.json
?? tools/data/aeternitas/aeternitas_20260515_181257.json
?? tools/data/aeternitas/aeternitas_20260515_182126.json
?? tools/data/aeternitas/aeternitas_20260515_183111.json
?? tools/data/aeternitas/aeternitas_20260515_190118.json
?? tools/data/aeternitas/aeternitas_20260515_191018.json
?? tools/data/aeternitas/aeternitas_20260515_192915.json
?? tools/data/aeternitas/aeternitas_20260515_193919.json
?? tools/data/aeternitas/aeternitas_20260515_194625.json
?? tools/data/aeternitas/aeternitas_20260515_195317.json
?? tools/data/aeternitas/aeternitas_20260516_033848.json
?? tools/data/aeternitas/aeternitas_20260516_0720.json
?? tools/data/aeternitas/aeternitas_20260516_0820.json
?? tools/data/aeternitas/aeternitas_20260516_0921.json
?? tools/data/aeternitas/aeternitas_20260516_0938.json
?? tools/data/aeternitas/aeternitas_20260516_1007.json
?? tools/data/aeternitas/aeternitas_20260516_1019.json
?? tools/data/aeternitas/aeternitas_20260516_1031.json
?? tools/data/aeternitas/aeternitas_20260516_1045.json
?? tools/data/aeternitas/aeternitas_20260516_1058.json
?? tools/data/aeternitas/aeternitas_20260516_1104.json
?? tools/data/aeternitas/aeternitas_20260516_1111.json
?? tools/data/aeternitas/aeternitas_20260516_1117.json
?? tools/data/aeternitas/aeternitas_20260516_1124.json
?? tools/data/aeternitas/aeternitas_20260516_1135.json
?? tools/data/aeternitas/aeternitas_20260516_1140.json
?? tools/data/agent_field_entry_supervised.md
?? tools/data/anderson3d_comparable_null_audit_20260516_1135.json
?? tools/data/anderson3d_component_state_interface_input_20260514_1850.json
?? tools/data/anderson3d_endpoint_preserving_null_20260516_1124.json
?? tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json
?? tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json
?? tools/data/aubry_binary_grammar_surrogate_gate_20260515_1807.json
?? tools/data/aubry_boundary_phase_transport_gate_20260515_1745.json
?? tools/data/aubry_cosine_boundary_counter_gate_20260515_1758.json
?? tools/data/aubry_v2_generator_scaling_gate_20260515_1816.json
?? tools/data/biconi/bicono_20260512_0330.json
?? tools/data/biconi/bicono_20260513_0330.json
?? tools/data/biconi/bicono_20260514_0330.json
?? tools/data/biconi/bicono_20260514_1330.json
?? tools/data/biconi/bicono_20260514_1458.json
?? tools/data/biconi/bicono_20260514_1605.json
?? tools/data/biconi/bicono_20260514_1612.json
?? tools/data/biconi/bicono_20260514_1631.json
?? tools/data/biconi/bicono_20260514_1640.json
?? tools/data/biconi/bicono_20260514_1649.json
?? tools/data/biconi/bicono_20260514_1656.json
?? tools/data/biconi/bicono_20260514_1701.json
?? tools/data/biconi/bicono_20260514_1850.json
?? tools/data/biconi/bicono_20260515_1623.json
?? tools/data/biconi/bicono_20260515_1647.json
?? tools/data/biconi/bicono_20260515_1659.json
?? tools/data/biconi/bicono_20260515_1705.json
?? tools/data/biconi/bicono_20260515_1712.json
?? tools/data/biconi/bicono_20260515_1724.json
?? tools/data/biconi/bicono_20260515_1734.json
?? tools/data/biconi/bicono_20260515_1745.json
?? tools/data/biconi/bicono_20260515_1758.json
?? tools/data/biconi/bicono_20260515_1807.json
?? tools/data/biconi/bicono_20260515_1816.json
?? tools/data/biconi/bicono_20260515_1826.json
?? tools/data/biconi/bicono_20260515_1855.json
?? tools/data/biconi/bicono_20260515_1904.json
?? tools/data/biconi/bicono_20260515_1915.json
?? tools/data/biconi/bicono_20260515_1933.json
?? tools/data/biconi/bicono_20260515_1940.json
?? tools/data/biconi/bicono_20260515_1947.json
?? tools/data/biconi/bicono_20260516_0330.json
?? tools/data/biconi/bicono_20260516_0720.json
?? tools/data/biconi/bicono_20260516_0820.json
?? tools/data/biconi/bicono_20260516_0921.json
?? tools/data/biconi/bicono_20260516_0938.json
?? tools/data/biconi/bicono_20260516_1007.json
?? tools/data/biconi/bicono_20260516_1019.json
?? tools/data/biconi/bicono_20260516_1031.json
?? tools/data/biconi/bicono_20260516_1045.json
?? tools/data/biconi/bicono_20260516_1058.json
?? tools/data/biconi/bicono_20260516_1104.json
?? tools/data/biconi/bicono_20260516_1111.json
?? tools/data/biconi/bicono_20260516_1117.json
?? tools/data/biconi/bicono_20260516_1124.json
?? tools/data/biconi/bicono_20260516_1135.json
?? tools/data/biconi/bicono_20260516_1140.json
?? tools/data/boundary_bridge_stability_audit_20260515_1915.json
?? tools/data/boundary_bridge_stability_audit_20260516_1140.json
?? tools/data/boundary_classical_crossover_audit_20260515_1904.json
?? tools/data/boundary_graph_curvature_gate_20260515_1855.json
?? tools/data/boundary_graph_null_audit_20260516_0330.json
?? tools/data/boundary_graph_residue_threshold_audit_20260516_0720.json
?? tools/data/boundary_prime_label_null_audit_20260516_1148.json
?? tools/data/boundary_unfolding_transfer_matrix_20260516_1031.json
?? tools/data/component_state_anderson3d_interface_20260514_1850.json
?? tools/data/component_state_anderson3d_interface_20260514_1850.trace.jsonl
?? tools/data/component_state_fit_ready_20260514_1649.json
?? tools/data/component_state_interface_smoke_20260514_1649.json
?? tools/data/component_state_interface_smoke_20260514_1649.trace.jsonl
?? tools/data/component_state_interface_smoke_input_20260514_1649.json
?? tools/data/domandatore/domandatore_20260512_0330.json
?? tools/data/domandatore/domandatore_20260512_0345.json
?? tools/data/domandatore/domandatore_20260513_0330.json
?? tools/data/domandatore/domandatore_20260513_0345.json
?? tools/data/domandatore/domandatore_20260514_0330.json
?? tools/data/domandatore/domandatore_20260514_0345.json
?? tools/data/domandatore/domandatore_20260514_1330.json
?? tools/data/domandatore/domandatore_20260514_1458.json
?? tools/data/domandatore/domandatore_20260515_0345.json
?? tools/data/domandatore/domandatore_20260515_1623.json
?? tools/data/domandatore/domandatore_20260515_1647.json
?? tools/data/domandatore/domandatore_20260515_1659.json
?? tools/data/domandatore/domandatore_20260516_0345.json
?? tools/data/endpoint_feature_scramble_null_20260516_1058.json
?? tools/data/endpoint_gated_rp_boundary_20260516_1104.json
?? tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json
?? tools/data/endpoint_stability_filter_20260516_1045.json
?? tools/data/evolution/evolution_20260512_0330.md
?? tools/data/evolution/evolution_20260513_0330.md
?? tools/data/evolution/evolution_20260514_0330.md
?? tools/data/evolution/evolution_20260514_1330.md
?? tools/data/evolution/evolution_20260514_1458.md
?? tools/data/evolution/evolution_20260514_1605.md
?? tools/data/evolution/evolution_20260514_1612.md
?? tools/data/evolution/evolution_20260514_1631.md
?? tools/data/evolution/evolution_20260514_1640.md
?? tools/data/evolution/evolution_20260514_1649.md
?? tools/data/evolution/evolution_20260514_1656.md
?? tools/data/evolution/evolution_20260514_1701.md
?? tools/data/evolution/evolution_20260514_1850.md
?? tools/data/evolution/evolution_20260515_1623.md
?? tools/data/evolution/evolution_20260515_1647.md
?? tools/data/evolution/evolution_20260515_1659.md
?? tools/data/evolution/evolution_20260515_1705.md
?? tools/data/evolution/evolution_20260515_1712.md
?? tools/data/evolution/evolution_20260515_1724.md
?? tools/data/evolution/evolution_20260515_1734.md
?? tools/data/evolution/evolution_20260515_1745.md
?? tools/data/evolution/evolution_20260515_1758.md
?? tools/data/evolution/evolution_20260515_1807.md
?? tools/data/evolution/evolution_20260515_1816.md
?? tools/data/evolution/evolution_20260515_1826.md
?? tools/data/evolution/evolution_20260515_1855.md
?? tools/data/evolution/evolution_20260515_1904.md
?? tools/data/evolution/evolution_20260515_1915.md
?? tools/data/evolution/evolution_20260515_1933.md
?? tools/data/evolution/evolution_20260515_1940.md
?? tools/data/evolution/evolution_20260515_1947.md
?? tools/data/evolution/evolution_20260516_0330.md
?? tools/data/evolution/evolution_20260516_0720.md
?? tools/data/evolution/evolution_20260516_0820.md
?? tools/data/evolution/evolution_20260516_0921.md
?? tools/data/evolution/evolution_20260516_0938.md
?? tools/data/evolution/evolution_20260516_1007.md
?? tools/data/evolution/evolution_20260516_1019.md
?? tools/data/evolution/evolution_20260516_1031.md
?? tools/data/evolution/evolution_20260516_1045.md
?? tools/data/evolution/evolution_20260516_1058.md
?? tools/data/evolution/evolution_20260516_1104.md
?? tools/data/evolution/evolution_20260516_1111.md
?? tools/data/evolution/evolution_20260516_1117.md
?? tools/data/evolution/evolution_20260516_1124.md
?? tools/data/evolution/evolution_20260516_1135.md
?? tools/data/evolution/evolution_20260516_1140.md
?? tools/data/graph_completion/graph_completion_20260512_0330.json
?? tools/data/graph_completion/graph_completion_20260513_0330.json
?? tools/data/graph_completion/graph_completion_20260514_0330.json
?? tools/data/graph_completion/graph_completion_20260514_1330.json
?? tools/data/graph_completion/graph_completion_20260514_1458.json
?? tools/data/graph_completion/graph_completion_20260514_1605.json
?? tools/data/graph_completion/graph_completion_20260514_1612.json
?? tools/data/graph_completion/graph_completion_20260514_1631.json
?? tools/data/graph_completion/graph_completion_20260514_1640.json
?? tools/data/graph_completion/graph_completion_20260514_1649.json
?? tools/data/graph_completion/graph_completion_20260514_1656.json
?? tools/data/graph_completion/graph_completion_20260514_1701.json
?? tools/data/graph_completion/graph_completion_20260514_1850.json
?? tools/data/graph_completion/graph_completion_20260515_1623.json
?? tools/data/graph_completion/graph_completion_20260515_1647.json
?? tools/data/graph_completion/graph_completion_20260515_1659.json
?? tools/data/graph_completion/graph_completion_20260515_1705.json
?? tools/data/graph_completion/graph_completion_20260515_1712.json
?? tools/data/graph_completion/graph_completion_20260515_1724.json
?? tools/data/graph_completion/graph_completion_20260515_1734.json
?? tools/data/graph_completion/graph_completion_20260515_1745.json
?? tools/data/graph_completion/graph_completion_20260515_1758.json
?? tools/data/graph_completion/graph_completion_20260515_1807.json
?? tools/data/graph_completion/graph_completion_20260515_1816.json
?? tools/data/graph_completion/graph_completion_20260515_1904.json
?? tools/data/graph_completion/graph_completion_20260515_1933.json
?? tools/data/graph_completion/graph_completion_20260515_1940.json
?? tools/data/graph_completion/graph_completion_20260515_1947.json
?? tools/data/graph_completion/graph_completion_20260516_0921.json
?? tools/data/graph_completion/graph_completion_20260516_0938.json
?? tools/data/graph_completion/graph_completion_20260516_1007.json
?? tools/data/graph_completion/graph_completion_20260516_1019.json
?? tools/data/graph_completion/graph_completion_20260516_1031.json
?? tools/data/graph_completion/graph_completion_20260516_1104.json
?? tools/data/graph_completion/graph_completion_20260516_1111.json
?? tools/data/graph_completion/graph_completion_20260516_1117.json
?? tools/data/graph_completion/graph_completion_20260516_1135.json
?? tools/data/incrocio_20260512_0330.json
?? tools/data/incrocio_20260513_0330.json
?? tools/data/incrocio_20260514_0330.json
?? tools/data/incrocio_20260514_1330.json
?? tools/data/incrocio_20260514_1458.json
?? tools/data/incrocio_20260514_1605.json
?? tools/data/incrocio_20260514_1612.json
?? tools/data/incrocio_20260514_1631.json
?? tools/data/incrocio_20260514_1640.json
?? tools/data/incrocio_20260514_1649.json
?? tools/data/incrocio_20260514_1656.json
?? tools/data/incrocio_20260514_1701.json
?? tools/data/incrocio_20260514_1850.json
?? tools/data/incrocio_20260515_1623.json
?? tools/data/incrocio_20260515_1647.json
?? tools/data/incrocio_20260515_1659.json
?? tools/data/incrocio_20260515_1705.json
?? tools/data/incrocio_20260515_1712.json
?? tools/data/incrocio_20260515_1724.json
?? tools/data/incrocio_20260515_1734.json
?? tools/data/incrocio_20260515_1745.json
?? tools/data/incrocio_20260515_1758.json
?? tools/data/incrocio_20260515_1807.json
?? tools/data/incrocio_20260515_1816.json
?? tools/data/incrocio_20260515_1826.json
?? tools/data/incrocio_20260515_1855.json
?? tools/data/incrocio_20260515_1904.json
?? tools/data/incrocio_20260515_1915.json
?? tools/data/incrocio_20260515_1933.json
?? tools/data/incrocio_20260515_1940.json
?? tools/data/incrocio_20260515_1947.json
?? tools/data/incrocio_20260516_0330.json
?? tools/data/incrocio_20260516_0720.json
?? tools/data/incrocio_20260516_0820.json
?? tools/data/incrocio_20260516_0921.json
?? tools/data/incrocio_20260516_0938.json
?? tools/data/incrocio_20260516_1007.json
?? tools/data/incrocio_20260516_1019.json
?? tools/data/incrocio_20260516_1031.json
?? tools/data/incrocio_20260516_1045.json
?? tools/data/incrocio_20260516_1058.json
?? tools/data/incrocio_20260516_1104.json
?? tools/data/incrocio_20260516_1111.json
?? tools/data/incrocio_20260516_1117.json
?? tools/data/incrocio_20260516_1124.json
?? tools/data/incrocio_20260516_1135.json
?? tools/data/incrocio_20260516_1140.json
?? tools/data/incrocio_20260516_1148.json
?? tools/data/operator_directives_consumed/operator_directive_20260514_1612.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1631.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1640.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1649.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1656.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1701.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1850.md
?? tools/data/photonic_boundary_third_included_gate_20260515_1734.json
?? tools/data/physical_sr_residue_bounce_20260514_1612.json
?? tools/data/physical_sr_residue_bounce_20260514_1612.trace.jsonl
?? tools/data/physical_sr_residue_bounce_20260514_1631_w6.json
?? tools/data/physical_sr_residue_bounce_20260514_1631_w6.trace.jsonl
?? tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.json
?? tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.trace.jsonl
?? tools/data/preflight/
?? tools/data/prime_sr_persistent_boundary_20260512_0330.json
?? tools/data/prime_sr_persistent_boundary_20260512_0330_seedcheck.json
?? tools/data/prime_vs_mod6_sr_boundary_20260513_0330.json
?? tools/data/prime_vs_mod6_sr_boundary_20260513_0330_seedcheck.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w4096.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w4096.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w4096_dense.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w4096_dense.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w8192_dense.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w8192_dense.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w16384.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w16384.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w4096.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w4096.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w8192.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w8192.trace.jsonl
?? tools/data/promotions/promotion_20260513_0330.json
?? tools/data/promotions/promotion_20260514_1330.json
?? tools/data/promotions/promotion_20260514_1631.json
?? tools/data/promotions/promotion_20260514_1640.json
?? tools/data/promotions/promotion_20260514_1656.json
?? tools/data/promotions/promotion_20260515_1712.json
?? tools/data/promotions/promotion_20260515_1758.json
?? tools/data/promotions/promotion_20260515_1816.json
?? tools/data/promotions/promotion_20260515_1904.json
?? tools/data/promotions/promotion_20260515_1933.json
?? tools/data/promotions/promotion_20260515_1940.json
?? tools/data/promotions/promotion_20260515_1947.json
?? tools/data/promotions/promotion_20260516_0921.json
?? tools/data/promotions/promotion_20260516_0938.json
?? tools/data/promotions/promotion_20260516_1007.json
?? tools/data/promotions/promotion_20260516_1019.json
?? tools/data/promotions/promotion_20260516_1031.json
?? tools/data/promotions/promotion_20260516_1104.json
?? tools/data/promotions/promotion_20260516_1111.json
?? tools/data/promotions/promotion_20260516_1117.json
?? tools/data/promotions/promotion_20260516_1135.json
?? tools/data/quasiperiodic_grammar_scale_gate_20260514_1701.json
?? tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json
?? tools/data/repairs/repair_20260512_0330_decision.json
?? tools/data/repairs/repair_20260513_0330_decision.json
?? tools/data/repairs/repair_20260514_0330_decision.json
?? tools/data/repairs/repair_20260514_1330_decision.json
?? tools/data/repairs/repair_20260514_1458_decision.json
?? tools/data/repairs/repair_20260514_1605_decision.json
?? tools/data/repairs/repair_20260514_1612_decision.json
?? tools/data/repairs/repair_20260514_1631_decision.json
?? tools/data/repairs/repair_20260514_1640_decision.json
?? tools/data/repairs/repair_20260514_1649_decision.json
?? tools/data/repairs/repair_20260514_1656.json
?? tools/data/repairs/repair_20260514_1656.md
?? tools/data/repairs/repair_20260514_1656_decision.json
?? tools/data/repairs/repair_20260514_1850_decision.json
?? tools/data/reports/agent_20260512_0330.md
?? tools/data/reports/agent_20260513_0330.md
?? tools/data/reports/agent_20260514_0330.md
?? tools/data/reports/agent_20260514_1330.md
?? tools/data/reports/agent_20260514_1458.md
?? tools/data/reports/agent_20260514_1605.md
?? tools/data/reports/agent_20260514_1612.md
?? tools/data/reports/agent_20260514_1631.md
?? tools/data/reports/agent_20260514_1640.md
?? tools/data/reports/agent_20260514_1649.md
?? tools/data/reports/agent_20260514_1656.md
?? tools/data/reports/agent_20260514_1701.md
?? tools/data/reports/agent_20260514_1850.md
?? tools/data/reports/agent_20260515_1623.md
?? tools/data/reports/agent_20260515_1647.md
?? tools/data/reports/agent_20260515_1659.md
?? tools/data/reports/agent_20260515_1705.md
?? tools/data/reports/agent_20260515_1712.md
?? tools/data/reports/agent_20260515_1724.md
?? tools/data/reports/agent_20260515_1734.md
?? tools/data/reports/agent_20260515_1745.md
?? tools/data/reports/agent_20260515_1758.md
?? tools/data/reports/agent_20260515_1807.md
?? tools/data/reports/agent_20260515_1816.md
?? tools/data/reports/agent_20260515_1826.md
?? tools/data/reports/agent_20260515_1855.md
?? tools/data/reports/agent_20260515_1904.md
?? tools/data/reports/agent_20260515_1915.md
?? tools/data/reports/agent_20260515_1933.md
?? tools/data/reports/agent_20260515_1940.md
?? tools/data/reports/agent_20260515_1947.md
?? tools/data/reports/agent_20260516_0330.md
?? tools/data/reports/agent_20260516_0720.md
?? tools/data/reports/agent_20260516_0820.md
?? tools/data/reports/agent_20260516_0921.md
?? tools/data/reports/agent_20260516_0938.md
?? tools/data/reports/agent_20260516_1007.md
?? tools/data/reports/agent_20260516_1019.md
?? tools/data/reports/agent_20260516_1031.md
?? tools/data/reports/agent_20260516_1045.md
?? tools/data/reports/agent_20260516_1058.md
?? tools/data/reports/agent_20260516_1104.md
?? tools/data/reports/agent_20260516_1111.md
?? tools/data/reports/agent_20260516_1117.md
?? tools/data/reports/agent_20260516_1124.md
?? tools/data/reports/agent_20260516_1135.md
?? tools/data/reports/agent_20260516_1140.md
?? tools/data/reports/ddf_20260512_0405.json
?? tools/data/reports/ddf_20260513_0405.json
?? tools/data/reports/ddf_20260514_0405.json
?? tools/data/reports/ddf_20260515_0405.json
?? tools/data/reports/ddf_20260516_0405.json
?? tools/data/reports/falsifier_20260512_0330.json
?? tools/data/reports/falsifier_20260513_0330.json
?? tools/data/reports/falsifier_20260514_0330.json
?? tools/data/reports/falsifier_20260514_1330.json
?? tools/data/reports/falsifier_20260514_1458.json
?? tools/data/reports/falsifier_20260514_1605.json
?? tools/data/reports/falsifier_20260514_1612.json
?? tools/data/reports/falsifier_20260514_1631.json
?? tools/data/reports/falsifier_20260514_1640.json
?? tools/data/reports/falsifier_20260514_1649.json
?? tools/data/reports/falsifier_20260514_1656.json
?? tools/data/reports/falsifier_20260514_1701.json
?? tools/data/reports/falsifier_20260514_1850.json
?? tools/data/reports/falsifier_20260515_1623.json
?? tools/data/reports/falsifier_20260515_1647.json
?? tools/data/reports/falsifier_20260515_1659.json
?? tools/data/reports/falsifier_20260515_1705.json
?? tools/data/reports/falsifier_20260515_1712.json
?? tools/data/reports/falsifier_20260515_1712.raw.txt
?? tools/data/reports/falsifier_20260515_1724.json
?? tools/data/reports/falsifier_20260515_1734.json
?? tools/data/reports/falsifier_20260515_1745.json
?? tools/data/reports/falsifier_20260515_1758.json
?? tools/data/reports/falsifier_20260515_1807.json
?? tools/data/reports/falsifier_20260515_1816.json
?? tools/data/reports/falsifier_20260515_1826.json
?? tools/data/reports/falsifier_20260515_1855.json
?? tools/data/reports/falsifier_20260515_1904.json
?? tools/data/reports/falsifier_20260515_1915.json
?? tools/data/reports/falsifier_20260515_1933.json
?? tools/data/reports/falsifier_20260515_1940.json
?? tools/data/reports/falsifier_20260515_1947.json
?? tools/data/reports/falsifier_20260516_0330.json
?? tools/data/reports/falsifier_20260516_0720.json
?? tools/data/reports/falsifier_20260516_0820.json
?? tools/data/reports/falsifier_20260516_0921.json
?? tools/data/reports/falsifier_20260516_0921.raw.txt
?? tools/data/reports/falsifier_20260516_0938.json
?? tools/data/reports/falsifier_20260516_1007.json
?? tools/data/reports/falsifier_20260516_1019.json
?? tools/data/reports/falsifier_20260516_1031.json
?? tools/data/reports/falsifier_20260516_1045.json
?? tools/data/reports/falsifier_20260516_1058.json
?? tools/data/reports/falsifier_20260516_1104.json
?? tools/data/reports/falsifier_20260516_1111.json
?? tools/data/reports/falsifier_20260516_1117.json
?? tools/data/reports/falsifier_20260516_1124.json
?? tools/data/reports/falsifier_20260516_1135.json
?? tools/data/reports/falsifier_20260516_1140.json
?? tools/data/reports/loop_guard_20260512_0330.json
?? tools/data/reports/loop_guard_20260513_0330.json
?? tools/data/reports/loop_guard_20260514_0330.json
?? tools/data/reports/loop_guard_20260514_1330.json
?? tools/data/reports/loop_guard_20260514_1458.json
?? tools/data/reports/loop_guard_20260514_1605.json
?? tools/data/reports/loop_guard_20260514_1612.json
?? tools/data/reports/loop_guard_20260514_1631.json
?? tools/data/reports/loop_guard_20260514_1640.json
?? tools/data/reports/loop_guard_20260514_1649.json
?? tools/data/reports/loop_guard_20260514_1656.json
?? tools/data/reports/loop_guard_20260514_1701.json
?? tools/data/reports/loop_guard_20260514_1850.json
?? tools/data/reports/loop_guard_20260515_1623.json
?? tools/data/reports/loop_guard_20260515_1647.json
?? tools/data/reports/loop_guard_20260515_1659.json
?? tools/data/reports/loop_guard_20260515_1705.json
?? tools/data/reports/loop_guard_20260515_1712.json
?? tools/data/reports/loop_guard_20260515_1724.json
?? tools/data/reports/loop_guard_20260515_1734.json
?? tools/data/reports/loop_guard_20260515_1745.json
?? tools/data/reports/loop_guard_20260515_1758.json
?? tools/data/reports/loop_guard_20260515_1807.json
?? tools/data/reports/loop_guard_20260515_1816.json
?? tools/data/reports/loop_guard_20260515_1826.json
?? tools/data/reports/loop_guard_20260515_1855.json
?? tools/data/reports/loop_guard_20260515_1904.json
?? tools/data/reports/loop_guard_20260515_1915.json
?? tools/data/reports/loop_guard_20260515_1933.json
?? tools/data/reports/loop_guard_20260515_1940.json
?? tools/data/reports/loop_guard_20260515_1947.json
?? tools/data/reports/loop_guard_20260516_0330.json
?? tools/data/reports/loop_guard_20260516_0720.json
?? tools/data/reports/loop_guard_20260516_0820.json
?? tools/data/reports/loop_guard_20260516_0921.json
?? tools/data/reports/loop_guard_20260516_0938.json
?? tools/data/reports/loop_guard_20260516_1007.json
?? tools/data/reports/loop_guard_20260516_1019.json
?? tools/data/reports/loop_guard_20260516_1031.json
?? tools/data/reports/loop_guard_20260516_1045.json
?? tools/data/reports/loop_guard_20260516_1058.json
?? tools/data/reports/loop_guard_20260516_1104.json
?? tools/data/reports/loop_guard_20260516_1111.json
?? tools/data/reports/loop_guard_20260516_1117.json
?? tools/data/reports/loop_guard_20260516_1124.json
?? tools/data/reports/loop_guard_20260516_1135.json
?? tools/data/reports/loop_guard_20260516_1140.json
?? tools/data/reports/quarantine_manifest.json
?? tools/data/restore_backups/
?? tools/data/rosenzweig_porter_bridge_physical_audit_20260515_1933.json
?? tools/data/rp_boundary_raw_count_null_audit_20260516_0820.json
?? tools/data/rp_boundary_size_stability_audit_20260515_1940.json
?? tools/data/rp_candidate_window_stress_20260516_0938_w11.json
?? tools/data/rp_candidate_window_stress_20260516_0938_w5.json
?? tools/data/rp_candidate_window_stress_20260516_1007_w7.json
?? tools/data/rp_candidate_window_stress_20260516_1007_w9.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019_w11.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019_w9.json
?? tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json
?? tools/data/seme_backup_b2_20260512_033557.json
?? tools/data/seme_backup_b2_20260513_033622.json
?? tools/data/seme_backup_b2_20260514_150530.json
?? tools/data/seme_backup_b2_20260514_161119.json
?? tools/data/seme_backup_b2_20260515_180327.json
?? tools/data/seme_backup_b2_20260515_194643.json
?? tools/data/seme_backup_b2_20260516_094447.json
?? tools/data/seme_backup_b2_20260516_101425.json
?? tools/data/seme_backup_b2_20260516_102450.json
?? tools/data/sturmian_denominator_alignment_gate_20260515_1826.json
?? tools/data/tool_contracts/
?? tools/data/veritas/veritas_20260512_033539.json
?? tools/data/veritas/veritas_20260513_033605.json
?? tools/data/veritas/veritas_20260514_033420.json
?? tools/data/veritas/veritas_20260514_133424.json
?? tools/data/veritas/veritas_20260514_150454.json
?? tools/data/veritas/veritas_20260514_161058.json
?? tools/data/veritas/veritas_20260514_161719.json
?? tools/data/veritas/veritas_20260514_163527.json
?? tools/data/veritas/veritas_20260514_164509.json
?? tools/data/veritas/veritas_20260514_165437.json
?? tools/data/veritas/veritas_20260514_170109.json
?? tools/data/veritas/veritas_20260514_171152.json
?? tools/data/veritas/veritas_20260514_185450.json
?? tools/data/veritas/veritas_20260515_162727.json
?? tools/data/veritas/veritas_20260515_165116.json
?? tools/data/veritas/veritas_20260515_170328.json
?? tools/data/veritas/veritas_20260515_171005.json
?? tools/data/veritas/veritas_20260515_171725.json
?? tools/data/veritas/veritas_20260515_172913.json
?? tools/data/veritas/veritas_20260515_174023.json
?? tools/data/veritas/veritas_20260515_175045.json
?? tools/data/veritas/veritas_20260515_180306.json
?? tools/data/veritas/veritas_20260515_181257.json
?? tools/data/veritas/veritas_20260515_182126.json
?? tools/data/veritas/veritas_20260515_183111.json
?? tools/data/veritas/veritas_20260515_190118.json
?? tools/data/veritas/veritas_20260515_191018.json
?? tools/data/veritas/veritas_20260515_192915.json
?? tools/data/veritas/veritas_20260515_193919.json
?? tools/data/veritas/veritas_20260515_194625.json
?? tools/data/veritas/veritas_20260515_195317.json
?? tools/data/veritas/veritas_20260516_033848.json
?? tools/data/veritas/veritas_20260516_072533.json
?? tools/data/veritas/veritas_20260516_082608.json
?? tools/data/veritas/veritas_20260516_092735.json
?? tools/data/veritas/veritas_20260516_094423.json
?? tools/data/veritas/veritas_20260516_101403.json
?? tools/data/veritas/veritas_20260516_102427.json
?? tools/data/veritas/veritas_20260516_103737.json
?? tools/data/veritas/veritas_20260516_105525.json
?? tools/data/veritas/veritas_20260516_110354.json
?? tools/data/veritas/veritas_20260516_111042.json
?? tools/data/veritas/veritas_20260516_111633.json
?? tools/data/veritas/veritas_20260516_112343.json
?? tools/data/veritas/veritas_20260516_113001.json
?? tools/data/veritas/veritas_20260516_113946.json
?? tools/data/veritas/veritas_20260516_114656.json
?? tools/exp_anderson3d_comparable_null_audit.py
?? tools/exp_anderson3d_endpoint_preserving_null.py
?? tools/exp_anderson3d_mobility_edge_two_reader_audit.py
?? tools/exp_aubry_binary_grammar_surrogate_gate.py
?? tools/exp_aubry_boundary_phase_transport_gate.py
?? tools/exp_aubry_cosine_boundary_counter_gate.py
?? tools/exp_aubry_v2_generator_scaling_gate.py
?? tools/exp_boundary_bridge_stability_audit.py
?? tools/exp_boundary_classical_crossover_audit.py
?? tools/exp_boundary_graph_curvature_gate.py
?? tools/exp_boundary_graph_null_audit.py
?? tools/exp_boundary_graph_residue_threshold_audit.py
?? tools/exp_boundary_prime_label_null_audit.py
?? tools/exp_boundary_unfolding_transfer_matrix.py
?? tools/exp_endpoint_feature_scramble_null.py
?? tools/exp_endpoint_gated_rp_boundary.py
?? tools/exp_endpoint_stability_filter.py
?? tools/exp_photonic_boundary_third_included_gate.py
?? tools/exp_physical_sr_residue_bounce.py
?? tools/exp_prime_sr_persistent_boundary.py
?? tools/exp_prime_vs_mod6_sr_boundary.py
?? tools/exp_quasiperiodic_grammar_scale_gate.py
?? tools/exp_rosenzweig_porter_bridge_physical_audit.py
?? tools/exp_rp_boundary_raw_count_null_audit.py
?? tools/exp_rp_boundary_size_stability_audit.py
?? tools/exp_rp_exact_local_window_matrix.py
?? tools/exp_rp_unfolding_sensitivity_audit.py
?? tools/exp_sturmian_denominator_alignment_gate.py
?? tools/field_coherence_preflight.py
?? tools/field_rebuild_risk_map.py
?? tools/lab_cycle_monitor.py
?? tools/lab_preflight_agent.py
?? tools/lab_runtime_observer.py
?? tools/lab_surface_invariant_check.py
?? tools/lab_tool_contract.py
?? tools/prime_mod6_counter_null_audit.py
?? tools/prime_mod6_generative_null_audit.py
?? tools/prime_mod6_null_fairness_audit.py
?? tools/prime_mod6_pipeline_closeout.py
?? tools/selector_authority_matrix.py
?? tools/stale_field_source_map.py

exec
/bin/bash -lc "python - <<'PY'
import json
p='tools/data/boundary_prime_label_null_audit_20260516_1148.json'
d=json.load(open(p))
print(json.dumps({
 'observed': d['observed'],
 'null_summary': {k:d['null'][k] for k in ['target_ge_observed','target_eq_27','any_row_eq_27','raw_p','add_one_p','wilson_95','target_eq_27_with_target_label','target_label_distribution','target_hits_distribution']}
}, indent=2))
PY" in /opt/MM_D-ND
 succeeded in 0ms:
{
  "observed": {
    "stable_27_rows": [
      "logistica_biforcazione_var_3.5699:cycle_13",
      "numeri_primi:cycle_3",
      "percolation:cycle_9"
    ],
    "target": "numeri_primi:cycle_3",
    "target_classical_audit": {
      "audit_state": "classic_and_graph_bridge",
      "berry_robnick_like_gue_weight": 0.275,
      "brody_nll": 1826.209184,
      "brody_q": 0.465,
      "centroid_margin": 0.222754,
      "cross_neighbor_fraction": 0.25,
      "domain": "numeri_primi",
      "domain_window": "numeri_primi:cycle_3",
      "graph_state": "third_included_candidate",
      "mixture_ks": 0.148459,
      "n_spacings": 2048,
      "source_domain_type": "GUE"
    },
    "target_frequency": 1.0,
    "target_hits": 27,
    "target_source_label": "GUE"
  },
  "null_summary": {
    "target_ge_observed": 253,
    "target_eq_27": 253,
    "any_row_eq_27": 508,
    "raw_p": 0.494140625,
    "add_one_p": 0.495126706,
    "wilson_95": [
      0.45103927,
      0.53732925
    ],
    "target_eq_27_with_target_label": {
      "GUE": 141,
      "Poisson": 112
    },
    "target_label_distribution": {
      "GUE": 307,
      "Poisson": 205
    },
    "target_hits_distribution": {
      "0": 36,
      "1": 4,
      "10": 1,
      "12": 16,
      "15": 5,
      "18": 38,
      "19": 5,
      "20": 1,
      "21": 35,
      "24": 24,
      "27": 253,
      "3": 9,
      "5": 1,
      "6": 9,
      "7": 1,
      "8": 2,
      "9": 72
    }
  }
}

diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

codex
Il risultato è vincolo forte: il candidato prime resta `27/27` osservato, ma il null di etichetta lo ricostruisce in `253/512` trial. Scrivo il report come CONSTRAINT: il bridge a due lettori non passa ancora a ritorno fisico.
apply patch
patch: completed
/opt/MM_D-ND/tools/data/reports/agent_20260516_1148.md
diff --git a/tools/data/reports/agent_20260516_1148.md b/tools/data/reports/agent_20260516_1148.md
new file mode 100644
index 0000000000000000000000000000000000000000..229d6d03f3d0637db399a1fa41db2db308a05e79
--- /dev/null
+++ b/tools/data/reports/agent_20260516_1148.md
@@ -0,0 +1,108 @@
+# Agent Report - Prime Bridge Label Null Audit
+**Date**: 2026-05-16 11:48
+**Piano**: 133
+**Tension explored**: BOUNDARY (0.8)
+**verdict**: CONSTRAINT - Nel perimetro vivo `8 GUE / 5 Poisson`, il candidato `numeri_primi:cycle_3` resta bridge graph osservato in `27/27` letture, con audit classico `classic_and_graph_bridge`; ma il null label-count-preserving ricostruisce lo stesso `27/27` in `253/512` permutazioni (`raw_p=0.494140625`, Wilson 95% `[0.451039270, 0.537329250]`). Il candidato non diventa ritorno fisico: la posizione a due lettori resta troppo ricostruibile dalla geometria delle etichette 8/5.
+observables_registry: 1.0.0-2026-05-06 via boundary_graph_curvature_gate
+observables_used: [target_graph_bridge_hits, target_graph_bridge_frequency, label_count_preserving_null_hits, any_row_stable_27_under_null, classical_audit_state, brody_q, berry_robnick_like_gue_weight]
+**observable_contract**: claim=`numeri_primi:cycle_3` diventa ritorno fisico solo se il suo `27/27` bridge status non viene ricostruito frequentemente permutando solo le label GUE/Poisson; observable=hit count del target su 27 perturbazioni graph-reader; operator=null label-count-preserving sulle 13 righe BOUNDARY; generator=feature row-local fissate dal reader 11:40, solo `source_domain_type` permutato; denominator=13 righe, 27 letture, `512` permutazioni; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con `target_hits >= observed_target_hits`; non_possible=chiamare `numeri_primi:cycle_3` ritorno fisico se il null ricostruisce spesso `27/27`; not_tested=nuovi spettri, nuovo Hamiltoniano fisico, validita analitica delle label sorgente, scaling asintotico.
+
+## Respiro fuori-tempo
+- **Combo**: A9 terzo incluso + A11 combo + QxG continuo/discreto + nodo BOUNDARY `8 GUE / 5 Poisson` + grafo della conoscenza come lettore.
+- **Dipolo / punto-zero**: nome fisico del candidato / geometria etichettata. Punto-zero: la stessa riga `numeri_primi:cycle_3` prima che la label GUE/Poisson orienti centroidi e cross-neighbor.
+- **Piano superiore**: topologia del grafo row-aligned; il bordo vive solo dove il nome fisico costa piu del null di etichetta.
+- **Operatori laterali scelti**: graph curvature, label-count-preserving null, audit classico Brody/Berry-Robnik.
+- **Contaminazione cognitiva**: CE-0001/KSAR usata per reiterare il kernel del ciclo 11:40 senza cambiare denominatore; CE-0117/Cascata usata per far cadere il candidato nel null prima della promozione.
+- **Proto-ipotesi**: un bridge a due lettori non diventa fisico perche resta stabile; diventa fisico solo se la stabilita ha costo sotto null che preservano il perimetro.
+- **Possibile/non-possibile**: possibile = usare `numeri_primi:cycle_3` come candidato nominale del grafo 13-righe; non-possibile = promuoverlo come ritorno fisico quando il null ricostruisce `27/27` in circa meta dei trial.
+- **Proiezione**: rieseguo il reader 11:40, tengo fisse le feature delle 13 righe, permuto solo le label preservando `8/5`, e conto quante volte il target raggiunge l'osservato.
+- **Movimento A->M->B**: fisico A = statistiche prime dentro il confine GUE/Poisson; matematica M = null di etichetta su grafo kNN perturbato; fisico B = ritorno verso un null prime-specific. Il ritorno B resta domanda, non avanzamento.
+
+## Aderenza alla direzione
+- `relation`: `follows_direction`
+- `why`: l'esperimento attacca direttamente il perimetro vivo `8 GUE / 5 Poisson` e il candidato emerso dal ciclo 11:40.
+- `not_drift`: non torna a Sturmian, phi, V_c, fit locali o Anderson; il denominatore atomico resta 13 righe con 8 GUE e 5 Poisson.
+- `seed_residue`: restano non testati nuovi domini fisici, source-label validation analitica e scaling asintotico.
+
+## Re-discovery audit
+- **Baseline noto piu vicino**: Brody crossover, Berry-Robnik mixture, Rosenzweig-Porter crossover, kNN label stability, cluster-boundary stability.
+- **Cosa assorbe il baseline**: una riga intermedia puo apparire bridge quando le label definiscono centroidi e cross-neighbor del grafo.
+- **Cosa resta Lab-specific**: audit null-first del candidato a due lettori sullo stesso denominatore 8/5.
+- `two_reader_boundary_confirmed`: osservato `numeri_primi:cycle_3`, ma non promosso dopo null.
+- `graph_only_residue`: non sommato al boundary; nel rerun pulito restano `logistica_biforcazione_var_3.5699` e `percolation` come `27/27` graph-only, mentre il residuo graph-only precedente non e usato come autorita.
+- `scope_change_declared`: nessun cambio di scope.
+- `graph_baseline_audit`: label-count-preserving permutation null su kNN graph perturbato.
+
+## Claim Under Test
+> Nel perimetro `8 GUE / 5 Poisson`, `numeri_primi:cycle_3` e' un candidato fisico solo se il suo `27/27` bridge status non viene ricostruito frequentemente da permutazioni delle label che preservano il conteggio 8/5.
+
+## Question
+Il bridge prime a due lettori costa informazione fisica, oppure il grafo lo ricrea quando cambiano solo le label del perimetro?
+
+## Experiment Design
+- **Script**: `tools/exp_boundary_prime_label_null_audit.py`.
+- **Run**: `python tools/exp_boundary_prime_label_null_audit.py --out tools/data/boundary_prime_label_null_audit_20260516_1148.json --null-trials 512`.
+- **Scope**: `tools/data/boundary_denominator_prescan_full_20260509_1500.json`.
+- **Classical audit**: `tools/data/boundary_classical_crossover_audit_20260515_1904.json`.
+- **Reader grid**: `k=[2,3,4]`, `n_gaps=[512,1024,2048]`, seeds `[20260515,20260516,20260517]`, totale `27` letture.
+- **Null**: permuta `source_domain_type` fra le stesse 13 righe preservando `8` GUE e `5` Poisson; feature row-local, osservabili e shuffle-z restano fissati.
+- **P-value**: right-tail; `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null in cui `target_hits >= 27`.
+- **Non misurato**: nuovi autovalori, Cramer null, raw prime gaps alternativi, unfolding fisico, limite asintotico.
+
+## Results
+| measure | observed | null k/N | raw_p | add_one_p | Wilson 95% | lettura |
+|---|---:|---:|---:|---:|---|---|
+| `numeri_primi:cycle_3` target hits | 27/27 | 253/512 | 0.494140625 | 0.495126706 | [0.451039270, 0.537329250] | il null ricostruisce spesso il target pieno |
+| any row stable 27/27 under null | n/a | 508/512 | 0.992187500 | n/a | n/a | il grafo genera stabilita piena sotto label permutate |
+
+| target label in null | target 27/27 hits |
+|---|---:|
+| GUE | 141 |
+| Poisson | 112 |
+
+| target hit count under null | trials |
+|---:|---:|
+| 0 | 36 |
+| 9 | 72 |
+| 18 | 38 |
+| 21 | 35 |
+| 24 | 24 |
+| 27 | 253 |
+
+## Key Findings
+1. Verificato: il target osservato e' pieno (`27/27`) e resta `classic_and_graph_bridge` nel lettore classico.
+2. Verificato: il null ricostruisce `target_hits=27` in `253/512` trial; il valore osservato non e raro sotto permutazione delle label.
+3. Verificato: la ricostruzione non dipende dal target lasciato GUE: `141` hit pieni quando il target nullo e GUE, `112` quando e Poisson.
+4. Verificato: almeno una riga qualsiasi raggiunge `27/27` in `508/512` trial null; la stabilita graph-only e' un residuo del lettore, non evidenza fisica.
+5. Inferito dal perimetro: il nome `numeri_primi` non passa ancora dal grafo alla fisica; serve un null prime-specific che rompa ordine aritmetico senza usare label cross-dominio.
+
+## Verdict
+CONSTRAINT.
+
+Il candidato `numeri_primi:cycle_3` resta il miglior nome operativo del bordo a due lettori, ma il suo `27/27` non ha costo sufficiente sotto null di etichetta. Il terzo incluso operativo resta proprieta del grafo 13-righe finche un null fisico row-local sui primi non separa ordine aritmetico e geometria GUE/Poisson.
+
+## Bicono della scoperta
+- **Due radici**: bridge osservato pieno / ricostruzione piena sotto null.
+- **Singolare**: riga `numeri_primi:cycle_3` prima della label e prima del nome fisico.
+- **Invariante di passaggio**: stesso denominatore 13 righe, stesso reader 27 letture, stesso target.
+- **Campo di possibilita**: possibile = usare il target come candidato da stressare; non-possibile = promuoverlo come ritorno fisico dal solo graph-reader.
+
+## Consecutio
+Costruire un null prime-specific row-local sul target: preservare distribuzione dei gap e lunghezza finestra, rompere ordine aritmetico/log-temporale, e rieseguire il reader senza permutare label globali. Se il target resta `27/27` contro quel null, il ritorno fisico riapre; se cade, il candidato si chiude come artefatto del grafo 13-righe.
+
+## Ricadute pratiche
+ssp_value: yes. `tools/exp_boundary_prime_label_null_audit.py` diventa gate riusabile: nessun candidato two-reader puo passare a ritorno fisico senza costo contro label-count-preserving null.
+
+## Telemetria
+- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.
+- `python -m py_compile tools/exp_boundary_prime_label_null_audit.py` completato.
+- Run completato: `tools/data/boundary_prime_label_null_audit_20260516_1148.json`.
+- Primo artefatto 11:48 incoerente: target ricalcolato `18/27` contro baseline 11:40 `27/27`. Rerun baseline nello stesso ambiente ha riprodotto `27/27`; il file finale e stato sovrascritto con run pulito. La dissonanza resta telemetria: i residui graph-only non vengono usati come autorita.
+- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.
+- Nessun update del seme.
+- Nessuna promozione e nessun public sync.
+
+## Files
+- Script: `tools/exp_boundary_prime_label_null_audit.py`
+- Data: `tools/data/boundary_prime_label_null_audit_20260516_1148.json`
+- Report: `tools/data/reports/agent_20260516_1148.md`
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

diff --git a/tools/data/reports/agent_20260516_1148.md b/tools/data/reports/agent_20260516_1148.md
new file mode 100644
index 0000000000000000000000000000000000000000..229d6d03f3d0637db399a1fa41db2db308a05e79
--- /dev/null
+++ b/tools/data/reports/agent_20260516_1148.md
@@ -0,0 +1,108 @@
+# Agent Report - Prime Bridge Label Null Audit
+**Date**: 2026-05-16 11:48
+**Piano**: 133
+**Tension explored**: BOUNDARY (0.8)
+**verdict**: CONSTRAINT - Nel perimetro vivo `8 GUE / 5 Poisson`, il candidato `numeri_primi:cycle_3` resta bridge graph osservato in `27/27` letture, con audit classico `classic_and_graph_bridge`; ma il null label-count-preserving ricostruisce lo stesso `27/27` in `253/512` permutazioni (`raw_p=0.494140625`, Wilson 95% `[0.451039270, 0.537329250]`). Il candidato non diventa ritorno fisico: la posizione a due lettori resta troppo ricostruibile dalla geometria delle etichette 8/5.
+observables_registry: 1.0.0-2026-05-06 via boundary_graph_curvature_gate
+observables_used: [target_graph_bridge_hits, target_graph_bridge_frequency, label_count_preserving_null_hits, any_row_stable_27_under_null, classical_audit_state, brody_q, berry_robnick_like_gue_weight]
+**observable_contract**: claim=`numeri_primi:cycle_3` diventa ritorno fisico solo se il suo `27/27` bridge status non viene ricostruito frequentemente permutando solo le label GUE/Poisson; observable=hit count del target su 27 perturbazioni graph-reader; operator=null label-count-preserving sulle 13 righe BOUNDARY; generator=feature row-local fissate dal reader 11:40, solo `source_domain_type` permutato; denominator=13 righe, 27 letture, `512` permutazioni; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con `target_hits >= observed_target_hits`; non_possible=chiamare `numeri_primi:cycle_3` ritorno fisico se il null ricostruisce spesso `27/27`; not_tested=nuovi spettri, nuovo Hamiltoniano fisico, validita analitica delle label sorgente, scaling asintotico.
+
+## Respiro fuori-tempo
+- **Combo**: A9 terzo incluso + A11 combo + QxG continuo/discreto + nodo BOUNDARY `8 GUE / 5 Poisson` + grafo della conoscenza come lettore.
+- **Dipolo / punto-zero**: nome fisico del candidato / geometria etichettata. Punto-zero: la stessa riga `numeri_primi:cycle_3` prima che la label GUE/Poisson orienti centroidi e cross-neighbor.
+- **Piano superiore**: topologia del grafo row-aligned; il bordo vive solo dove il nome fisico costa piu del null di etichetta.
+- **Operatori laterali scelti**: graph curvature, label-count-preserving null, audit classico Brody/Berry-Robnik.
+- **Contaminazione cognitiva**: CE-0001/KSAR usata per reiterare il kernel del ciclo 11:40 senza cambiare denominatore; CE-0117/Cascata usata per far cadere il candidato nel null prima della promozione.
+- **Proto-ipotesi**: un bridge a due lettori non diventa fisico perche resta stabile; diventa fisico solo se la stabilita ha costo sotto null che preservano il perimetro.
+- **Possibile/non-possibile**: possibile = usare `numeri_primi:cycle_3` come candidato nominale del grafo 13-righe; non-possibile = promuoverlo come ritorno fisico quando il null ricostruisce `27/27` in circa meta dei trial.
+- **Proiezione**: rieseguo il reader 11:40, tengo fisse le feature delle 13 righe, permuto solo le label preservando `8/5`, e conto quante volte il target raggiunge l'osservato.
+- **Movimento A->M->B**: fisico A = statistiche prime dentro il confine GUE/Poisson; matematica M = null di etichetta su grafo kNN perturbato; fisico B = ritorno verso un null prime-specific. Il ritorno B resta domanda, non avanzamento.
+
+## Aderenza alla direzione
+- `relation`: `follows_direction`
+- `why`: l'esperimento attacca direttamente il perimetro vivo `8 GUE / 5 Poisson` e il candidato emerso dal ciclo 11:40.
+- `not_drift`: non torna a Sturmian, phi, V_c, fit locali o Anderson; il denominatore atomico resta 13 righe con 8 GUE e 5 Poisson.
+- `seed_residue`: restano non testati nuovi domini fisici, source-label validation analitica e scaling asintotico.
+
+## Re-discovery audit
+- **Baseline noto piu vicino**: Brody crossover, Berry-Robnik mixture, Rosenzweig-Porter crossover, kNN label stability, cluster-boundary stability.
+- **Cosa assorbe il baseline**: una riga intermedia puo apparire bridge quando le label definiscono centroidi e cross-neighbor del grafo.
+- **Cosa resta Lab-specific**: audit null-first del candidato a due lettori sullo stesso denominatore 8/5.
+- `two_reader_boundary_confirmed`: osservato `numeri_primi:cycle_3`, ma non promosso dopo null.
+- `graph_only_residue`: non sommato al boundary; nel rerun pulito restano `logistica_biforcazione_var_3.5699` e `percolation` come `27/27` graph-only, mentre il residuo graph-only precedente non e usato come autorita.
+- `scope_change_declared`: nessun cambio di scope.
+- `graph_baseline_audit`: label-count-preserving permutation null su kNN graph perturbato.
+
+## Claim Under Test
+> Nel perimetro `8 GUE / 5 Poisson`, `numeri_primi:cycle_3` e' un candidato fisico solo se il suo `27/27` bridge status non viene ricostruito frequentemente da permutazioni delle label che preservano il conteggio 8/5.
+
+## Question
+Il bridge prime a due lettori costa informazione fisica, oppure il grafo lo ricrea quando cambiano solo le label del perimetro?
+
+## Experiment Design
+- **Script**: `tools/exp_boundary_prime_label_null_audit.py`.
+- **Run**: `python tools/exp_boundary_prime_label_null_audit.py --out tools/data/boundary_prime_label_null_audit_20260516_1148.json --null-trials 512`.
+- **Scope**: `tools/data/boundary_denominator_prescan_full_20260509_1500.json`.
+- **Classical audit**: `tools/data/boundary_classical_crossover_audit_20260515_1904.json`.
+- **Reader grid**: `k=[2,3,4]`, `n_gaps=[512,1024,2048]`, seeds `[20260515,20260516,20260517]`, totale `27` letture.
+- **Null**: permuta `source_domain_type` fra le stesse 13 righe preservando `8` GUE e `5` Poisson; feature row-local, osservabili e shuffle-z restano fissati.
+- **P-value**: right-tail; `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null in cui `target_hits >= 27`.
+- **Non misurato**: nuovi autovalori, Cramer null, raw prime gaps alternativi, unfolding fisico, limite asintotico.
+
+## Results
+| measure | observed | null k/N | raw_p | add_one_p | Wilson 95% | lettura |
+|---|---:|---:|---:|---:|---|---|
+| `numeri_primi:cycle_3` target hits | 27/27 | 253/512 | 0.494140625 | 0.495126706 | [0.451039270, 0.537329250] | il null ricostruisce spesso il target pieno |
+| any row stable 27/27 under null | n/a | 508/512 | 0.992187500 | n/a | n/a | il grafo genera stabilita piena sotto label permutate |
+
+| target label in null | target 27/27 hits |
+|---|---:|
+| GUE | 141 |
+| Poisson | 112 |
+
+| target hit count under null | trials |
+|---:|---:|
+| 0 | 36 |
+| 9 | 72 |
+| 18 | 38 |
+| 21 | 35 |
+| 24 | 24 |
+| 27 | 253 |
+
+## Key Findings
+1. Verificato: il target osservato e' pieno (`27/27`) e resta `classic_and_graph_bridge` nel lettore classico.
+2. Verificato: il null ricostruisce `target_hits=27` in `253/512` trial; il valore osservato non e raro sotto permutazione delle label.
+3. Verificato: la ricostruzione non dipende dal target lasciato GUE: `141` hit pieni quando il target nullo e GUE, `112` quando e Poisson.
+4. Verificato: almeno una riga qualsiasi raggiunge `27/27` in `508/512` trial null; la stabilita graph-only e' un residuo del lettore, non evidenza fisica.
+5. Inferito dal perimetro: il nome `numeri_primi` non passa ancora dal grafo alla fisica; serve un null prime-specific che rompa ordine aritmetico senza usare label cross-dominio.
+
+## Verdict
+CONSTRAINT.
+
+Il candidato `numeri_primi:cycle_3` resta il miglior nome operativo del bordo a due lettori, ma il suo `27/27` non ha costo sufficiente sotto null di etichetta. Il terzo incluso operativo resta proprieta del grafo 13-righe finche un null fisico row-local sui primi non separa ordine aritmetico e geometria GUE/Poisson.
+
+## Bicono della scoperta
+- **Due radici**: bridge osservato pieno / ricostruzione piena sotto null.
+- **Singolare**: riga `numeri_primi:cycle_3` prima della label e prima del nome fisico.
+- **Invariante di passaggio**: stesso denominatore 13 righe, stesso reader 27 letture, stesso target.
+- **Campo di possibilita**: possibile = usare il target come candidato da stressare; non-possibile = promuoverlo come ritorno fisico dal solo graph-reader.
+
+## Consecutio
+Costruire un null prime-specific row-local sul target: preservare distribuzione dei gap e lunghezza finestra, rompere ordine aritmetico/log-temporale, e rieseguire il reader senza permutare label globali. Se il target resta `27/27` contro quel null, il ritorno fisico riapre; se cade, il candidato si chiude come artefatto del grafo 13-righe.
+
+## Ricadute pratiche
+ssp_value: yes. `tools/exp_boundary_prime_label_null_audit.py` diventa gate riusabile: nessun candidato two-reader puo passare a ritorno fisico senza costo contro label-count-preserving null.
+
+## Telemetria
+- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.
+- `python -m py_compile tools/exp_boundary_prime_label_null_audit.py` completato.
+- Run completato: `tools/data/boundary_prime_label_null_audit_20260516_1148.json`.
+- Primo artefatto 11:48 incoerente: target ricalcolato `18/27` contro baseline 11:40 `27/27`. Rerun baseline nello stesso ambiente ha riprodotto `27/27`; il file finale e stato sovrascritto con run pulito. La dissonanza resta telemetria: i residui graph-only non vengono usati come autorita.
+- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.
+- Nessun update del seme.
+- Nessuna promozione e nessun public sync.
+
+## Files
+- Script: `tools/exp_boundary_prime_label_null_audit.py`
+- Data: `tools/data/boundary_prime_label_null_audit_20260516_1148.json`
+- Report: `tools/data/reports/agent_20260516_1148.md`
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

exec
/bin/bash -lc "test -s tools/data/reports/agent_20260516_1148.md && sed -n '1,28p' tools/data/reports/agent_20260516_1148.md" in /opt/MM_D-ND
 succeeded in 0ms:
# Agent Report - Prime Bridge Label Null Audit
**Date**: 2026-05-16 11:48
**Piano**: 133
**Tension explored**: BOUNDARY (0.8)
**verdict**: CONSTRAINT - Nel perimetro vivo `8 GUE / 5 Poisson`, il candidato `numeri_primi:cycle_3` resta bridge graph osservato in `27/27` letture, con audit classico `classic_and_graph_bridge`; ma il null label-count-preserving ricostruisce lo stesso `27/27` in `253/512` permutazioni (`raw_p=0.494140625`, Wilson 95% `[0.451039270, 0.537329250]`). Il candidato non diventa ritorno fisico: la posizione a due lettori resta troppo ricostruibile dalla geometria delle etichette 8/5.
observables_registry: 1.0.0-2026-05-06 via boundary_graph_curvature_gate
observables_used: [target_graph_bridge_hits, target_graph_bridge_frequency, label_count_preserving_null_hits, any_row_stable_27_under_null, classical_audit_state, brody_q, berry_robnick_like_gue_weight]
**observable_contract**: claim=`numeri_primi:cycle_3` diventa ritorno fisico solo se il suo `27/27` bridge status non viene ricostruito frequentemente permutando solo le label GUE/Poisson; observable=hit count del target su 27 perturbazioni graph-reader; operator=null label-count-preserving sulle 13 righe BOUNDARY; generator=feature row-local fissate dal reader 11:40, solo `source_domain_type` permutato; denominator=13 righe, 27 letture, `512` permutazioni; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con `target_hits >= observed_target_hits`; non_possible=chiamare `numeri_primi:cycle_3` ritorno fisico se il null ricostruisce spesso `27/27`; not_tested=nuovi spettri, nuovo Hamiltoniano fisico, validita analitica delle label sorgente, scaling asintotico.

## Respiro fuori-tempo
- **Combo**: A9 terzo incluso + A11 combo + QxG continuo/discreto + nodo BOUNDARY `8 GUE / 5 Poisson` + grafo della conoscenza come lettore.
- **Dipolo / punto-zero**: nome fisico del candidato / geometria etichettata. Punto-zero: la stessa riga `numeri_primi:cycle_3` prima che la label GUE/Poisson orienti centroidi e cross-neighbor.
- **Piano superiore**: topologia del grafo row-aligned; il bordo vive solo dove il nome fisico costa piu del null di etichetta.
- **Operatori laterali scelti**: graph curvature, label-count-preserving null, audit classico Brody/Berry-Robnik.
- **Contaminazione cognitiva**: CE-0001/KSAR usata per reiterare il kernel del ciclo 11:40 senza cambiare denominatore; CE-0117/Cascata usata per far cadere il candidato nel null prima della promozione.
- **Proto-ipotesi**: un bridge a due lettori non diventa fisico perche resta stabile; diventa fisico solo se la stabilita ha costo sotto null che preservano il perimetro.
- **Possibile/non-possibile**: possibile = usare `numeri_primi:cycle_3` come candidato nominale del grafo 13-righe; non-possibile = promuoverlo come ritorno fisico quando il null ricostruisce `27/27` in circa meta dei trial.
- **Proiezione**: rieseguo il reader 11:40, tengo fisse le feature delle 13 righe, permuto solo le label preservando `8/5`, e conto quante volte il target raggiunge l'osservato.
- **Movimento A->M->B**: fisico A = statistiche prime dentro il confine GUE/Poisson; matematica M = null di etichetta su grafo kNN perturbato; fisico B = ritorno verso un null prime-specific. Il ritorno B resta domanda, non avanzamento.

## Aderenza alla direzione
- `relation`: `follows_direction`
- `why`: l'esperimento attacca direttamente il perimetro vivo `8 GUE / 5 Poisson` e il candidato emerso dal ciclo 11:40.
- `not_drift`: non torna a Sturmian, phi, V_c, fit locali o Anderson; il denominatore atomico resta 13 righe con 8 GUE e 5 Poisson.
- `seed_residue`: restano non testati nuovi domini fisici, source-label validation analitica e scaling asintotico.

## Re-discovery audit
- **Baseline noto piu vicino**: Brody crossover, Berry-Robnik mixture, Rosenzweig-Porter crossover, kNN label stability, cluster-boundary stability.

exec
/bin/bash -lc 'test -s tools/data/boundary_prime_label_null_audit_20260516_1148.json && python -m py_compile tools/exp_boundary_prime_label_null_audit.py' in /opt/MM_D-ND
 succeeded in 0ms:
diff --git a/tools/data/reports/agent_20260516_1148.md b/tools/data/reports/agent_20260516_1148.md
new file mode 100644
index 0000000000000000000000000000000000000000..229d6d03f3d0637db399a1fa41db2db308a05e79
--- /dev/null
+++ b/tools/data/reports/agent_20260516_1148.md
@@ -0,0 +1,108 @@
+# Agent Report - Prime Bridge Label Null Audit
+**Date**: 2026-05-16 11:48
+**Piano**: 133
+**Tension explored**: BOUNDARY (0.8)
+**verdict**: CONSTRAINT - Nel perimetro vivo `8 GUE / 5 Poisson`, il candidato `numeri_primi:cycle_3` resta bridge graph osservato in `27/27` letture, con audit classico `classic_and_graph_bridge`; ma il null label-count-preserving ricostruisce lo stesso `27/27` in `253/512` permutazioni (`raw_p=0.494140625`, Wilson 95% `[0.451039270, 0.537329250]`). Il candidato non diventa ritorno fisico: la posizione a due lettori resta troppo ricostruibile dalla geometria delle etichette 8/5.
+observables_registry: 1.0.0-2026-05-06 via boundary_graph_curvature_gate
+observables_used: [target_graph_bridge_hits, target_graph_bridge_frequency, label_count_preserving_null_hits, any_row_stable_27_under_null, classical_audit_state, brody_q, berry_robnick_like_gue_weight]
+**observable_contract**: claim=`numeri_primi:cycle_3` diventa ritorno fisico solo se il suo `27/27` bridge status non viene ricostruito frequentemente permutando solo le label GUE/Poisson; observable=hit count del target su 27 perturbazioni graph-reader; operator=null label-count-preserving sulle 13 righe BOUNDARY; generator=feature row-local fissate dal reader 11:40, solo `source_domain_type` permutato; denominator=13 righe, 27 letture, `512` permutazioni; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con `target_hits >= observed_target_hits`; non_possible=chiamare `numeri_primi:cycle_3` ritorno fisico se il null ricostruisce spesso `27/27`; not_tested=nuovi spettri, nuovo Hamiltoniano fisico, validita analitica delle label sorgente, scaling asintotico.
+
+## Respiro fuori-tempo
+- **Combo**: A9 terzo incluso + A11 combo + QxG continuo/discreto + nodo BOUNDARY `8 GUE / 5 Poisson` + grafo della conoscenza come lettore.
+- **Dipolo / punto-zero**: nome fisico del candidato / geometria etichettata. Punto-zero: la stessa riga `numeri_primi:cycle_3` prima che la label GUE/Poisson orienti centroidi e cross-neighbor.
+- **Piano superiore**: topologia del grafo row-aligned; il bordo vive solo dove il nome fisico costa piu del null di etichetta.
+- **Operatori laterali scelti**: graph curvature, label-count-preserving null, audit classico Brody/Berry-Robnik.
+- **Contaminazione cognitiva**: CE-0001/KSAR usata per reiterare il kernel del ciclo 11:40 senza cambiare denominatore; CE-0117/Cascata usata per far cadere il candidato nel null prima della promozione.
+- **Proto-ipotesi**: un bridge a due lettori non diventa fisico perche resta stabile; diventa fisico solo se la stabilita ha costo sotto null che preservano il perimetro.
+- **Possibile/non-possibile**: possibile = usare `numeri_primi:cycle_3` come candidato nominale del grafo 13-righe; non-possibile = promuoverlo come ritorno fisico quando il null ricostruisce `27/27` in circa meta dei trial.
+- **Proiezione**: rieseguo il reader 11:40, tengo fisse le feature delle 13 righe, permuto solo le label preservando `8/5`, e conto quante volte il target raggiunge l'osservato.
+- **Movimento A->M->B**: fisico A = statistiche prime dentro il confine GUE/Poisson; matematica M = null di etichetta su grafo kNN perturbato; fisico B = ritorno verso un null prime-specific. Il ritorno B resta domanda, non avanzamento.
+
+## Aderenza alla direzione
+- `relation`: `follows_direction`
+- `why`: l'esperimento attacca direttamente il perimetro vivo `8 GUE / 5 Poisson` e il candidato emerso dal ciclo 11:40.
+- `not_drift`: non torna a Sturmian, phi, V_c, fit locali o Anderson; il denominatore atomico resta 13 righe con 8 GUE e 5 Poisson.
+- `seed_residue`: restano non testati nuovi domini fisici, source-label validation analitica e scaling asintotico.
+
+## Re-discovery audit
+- **Baseline noto piu vicino**: Brody crossover, Berry-Robnik mixture, Rosenzweig-Porter crossover, kNN label stability, cluster-boundary stability.
+- **Cosa assorbe il baseline**: una riga intermedia puo apparire bridge quando le label definiscono centroidi e cross-neighbor del grafo.
+- **Cosa resta Lab-specific**: audit null-first del candidato a due lettori sullo stesso denominatore 8/5.
+- `two_reader_boundary_confirmed`: osservato `numeri_primi:cycle_3`, ma non promosso dopo null.
+- `graph_only_residue`: non sommato al boundary; nel rerun pulito restano `logistica_biforcazione_var_3.5699` e `percolation` come `27/27` graph-only, mentre il residuo graph-only precedente non e usato come autorita.
+- `scope_change_declared`: nessun cambio di scope.
+- `graph_baseline_audit`: label-count-preserving permutation null su kNN graph perturbato.
+
+## Claim Under Test
+> Nel perimetro `8 GUE / 5 Poisson`, `numeri_primi:cycle_3` e' un candidato fisico solo se il suo `27/27` bridge status non viene ricostruito frequentemente da permutazioni delle label che preservano il conteggio 8/5.
+
+## Question
+Il bridge prime a due lettori costa informazione fisica, oppure il grafo lo ricrea quando cambiano solo le label del perimetro?
+
+## Experiment Design
+- **Script**: `tools/exp_boundary_prime_label_null_audit.py`.
+- **Run**: `python tools/exp_boundary_prime_label_null_audit.py --out tools/data/boundary_prime_label_null_audit_20260516_1148.json --null-trials 512`.
+- **Scope**: `tools/data/boundary_denominator_prescan_full_20260509_1500.json`.
+- **Classical audit**: `tools/data/boundary_classical_crossover_audit_20260515_1904.json`.
+- **Reader grid**: `k=[2,3,4]`, `n_gaps=[512,1024,2048]`, seeds `[20260515,20260516,20260517]`, totale `27` letture.
+- **Null**: permuta `source_domain_type` fra le stesse 13 righe preservando `8` GUE e `5` Poisson; feature row-local, osservabili e shuffle-z restano fissati.
+- **P-value**: right-tail; `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null in cui `target_hits >= 27`.
+- **Non misurato**: nuovi autovalori, Cramer null, raw prime gaps alternativi, unfolding fisico, limite asintotico.
+
+## Results
+| measure | observed | null k/N | raw_p | add_one_p | Wilson 95% | lettura |
+|---|---:|---:|---:|---:|---|---|
+| `numeri_primi:cycle_3` target hits | 27/27 | 253/512 | 0.494140625 | 0.495126706 | [0.451039270, 0.537329250] | il null ricostruisce spesso il target pieno |
+| any row stable 27/27 under null | n/a | 508/512 | 0.992187500 | n/a | n/a | il grafo genera stabilita piena sotto label permutate |
+
+| target label in null | target 27/27 hits |
+|---|---:|
+| GUE | 141 |
+| Poisson | 112 |
+
+| target hit count under null | trials |
+|---:|---:|
+| 0 | 36 |
+| 9 | 72 |
+| 18 | 38 |
+| 21 | 35 |
+| 24 | 24 |
+| 27 | 253 |
+
+## Key Findings
+1. Verificato: il target osservato e' pieno (`27/27`) e resta `classic_and_graph_bridge` nel lettore classico.
+2. Verificato: il null ricostruisce `target_hits=27` in `253/512` trial; il valore osservato non e raro sotto permutazione delle label.
+3. Verificato: la ricostruzione non dipende dal target lasciato GUE: `141` hit pieni quando il target nullo e GUE, `112` quando e Poisson.
+4. Verificato: almeno una riga qualsiasi raggiunge `27/27` in `508/512` trial null; la stabilita graph-only e' un residuo del lettore, non evidenza fisica.
+5. Inferito dal perimetro: il nome `numeri_primi` non passa ancora dal grafo alla fisica; serve un null prime-specific che rompa ordine aritmetico senza usare label cross-dominio.
+
+## Verdict
+CONSTRAINT.
+
+Il candidato `numeri_primi:cycle_3` resta il miglior nome operativo del bordo a due lettori, ma il suo `27/27` non ha costo sufficiente sotto null di etichetta. Il terzo incluso operativo resta proprieta del grafo 13-righe finche un null fisico row-local sui primi non separa ordine aritmetico e geometria GUE/Poisson.
+
+## Bicono della scoperta
+- **Due radici**: bridge osservato pieno / ricostruzione piena sotto null.
+- **Singolare**: riga `numeri_primi:cycle_3` prima della label e prima del nome fisico.
+- **Invariante di passaggio**: stesso denominatore 13 righe, stesso reader 27 letture, stesso target.
+- **Campo di possibilita**: possibile = usare il target come candidato da stressare; non-possibile = promuoverlo come ritorno fisico dal solo graph-reader.
+
+## Consecutio
+Costruire un null prime-specific row-local sul target: preservare distribuzione dei gap e lunghezza finestra, rompere ordine aritmetico/log-temporale, e rieseguire il reader senza permutare label globali. Se il target resta `27/27` contro quel null, il ritorno fisico riapre; se cade, il candidato si chiude come artefatto del grafo 13-righe.
+
+## Ricadute pratiche
+ssp_value: yes. `tools/exp_boundary_prime_label_null_audit.py` diventa gate riusabile: nessun candidato two-reader puo passare a ritorno fisico senza costo contro label-count-preserving null.
+
+## Telemetria
+- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.
+- `python -m py_compile tools/exp_boundary_prime_label_null_audit.py` completato.
+- Run completato: `tools/data/boundary_prime_label_null_audit_20260516_1148.json`.
+- Primo artefatto 11:48 incoerente: target ricalcolato `18/27` contro baseline 11:40 `27/27`. Rerun baseline nello stesso ambiente ha riprodotto `27/27`; il file finale e stato sovrascritto con run pulito. La dissonanza resta telemetria: i residui graph-only non vengono usati come autorita.
+- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.
+- Nessun update del seme.
+- Nessuna promozione e nessun public sync.
+
+## Files
+- Script: `tools/exp_boundary_prime_label_null_audit.py`
+- Data: `tools/data/boundary_prime_label_null_audit_20260516_1148.json`
+- Report: `tools/data/reports/agent_20260516_1148.md`
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

codex
Eseguito il ciclo e scritto il report richiesto:

[tools/data/reports/agent_20260516_1148.md](/opt/MM_D-ND/tools/data/reports/agent_20260516_1148.md)

Artefatti prodotti:
- [tools/exp_boundary_prime_label_null_audit.py](/opt/MM_D-ND/tools/exp_boundary_prime_label_null_audit.py)
- [tools/data/boundary_prime_label_null_audit_20260516_1148.json](/opt/MM_D-ND/tools/data/boundary_prime_label_null_audit_20260516_1148.json)

Verdict: `CONSTRAINT`. Il candidato `numeri_primi:cycle_3` resta osservato a `27/27`, ma il null label-count-preserving lo ricostruisce in `253/512` trial, quindi non passa ancora a ritorno fisico.

Verifica: `py_compile` completato; report e JSON presenti.
diff --git a/tools/data/reports/agent_20260516_1148.md b/tools/data/reports/agent_20260516_1148.md
new file mode 100644
index 0000000000000000000000000000000000000000..229d6d03f3d0637db399a1fa41db2db308a05e79
--- /dev/null
+++ b/tools/data/reports/agent_20260516_1148.md
@@ -0,0 +1,108 @@
+# Agent Report - Prime Bridge Label Null Audit
+**Date**: 2026-05-16 11:48
+**Piano**: 133
+**Tension explored**: BOUNDARY (0.8)
+**verdict**: CONSTRAINT - Nel perimetro vivo `8 GUE / 5 Poisson`, il candidato `numeri_primi:cycle_3` resta bridge graph osservato in `27/27` letture, con audit classico `classic_and_graph_bridge`; ma il null label-count-preserving ricostruisce lo stesso `27/27` in `253/512` permutazioni (`raw_p=0.494140625`, Wilson 95% `[0.451039270, 0.537329250]`). Il candidato non diventa ritorno fisico: la posizione a due lettori resta troppo ricostruibile dalla geometria delle etichette 8/5.
+observables_registry: 1.0.0-2026-05-06 via boundary_graph_curvature_gate
+observables_used: [target_graph_bridge_hits, target_graph_bridge_frequency, label_count_preserving_null_hits, any_row_stable_27_under_null, classical_audit_state, brody_q, berry_robnick_like_gue_weight]
+**observable_contract**: claim=`numeri_primi:cycle_3` diventa ritorno fisico solo se il suo `27/27` bridge status non viene ricostruito frequentemente permutando solo le label GUE/Poisson; observable=hit count del target su 27 perturbazioni graph-reader; operator=null label-count-preserving sulle 13 righe BOUNDARY; generator=feature row-local fissate dal reader 11:40, solo `source_domain_type` permutato; denominator=13 righe, 27 letture, `512` permutazioni; p_value_definition=right-tail `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null con `target_hits >= observed_target_hits`; non_possible=chiamare `numeri_primi:cycle_3` ritorno fisico se il null ricostruisce spesso `27/27`; not_tested=nuovi spettri, nuovo Hamiltoniano fisico, validita analitica delle label sorgente, scaling asintotico.
+
+## Respiro fuori-tempo
+- **Combo**: A9 terzo incluso + A11 combo + QxG continuo/discreto + nodo BOUNDARY `8 GUE / 5 Poisson` + grafo della conoscenza come lettore.
+- **Dipolo / punto-zero**: nome fisico del candidato / geometria etichettata. Punto-zero: la stessa riga `numeri_primi:cycle_3` prima che la label GUE/Poisson orienti centroidi e cross-neighbor.
+- **Piano superiore**: topologia del grafo row-aligned; il bordo vive solo dove il nome fisico costa piu del null di etichetta.
+- **Operatori laterali scelti**: graph curvature, label-count-preserving null, audit classico Brody/Berry-Robnik.
+- **Contaminazione cognitiva**: CE-0001/KSAR usata per reiterare il kernel del ciclo 11:40 senza cambiare denominatore; CE-0117/Cascata usata per far cadere il candidato nel null prima della promozione.
+- **Proto-ipotesi**: un bridge a due lettori non diventa fisico perche resta stabile; diventa fisico solo se la stabilita ha costo sotto null che preservano il perimetro.
+- **Possibile/non-possibile**: possibile = usare `numeri_primi:cycle_3` come candidato nominale del grafo 13-righe; non-possibile = promuoverlo come ritorno fisico quando il null ricostruisce `27/27` in circa meta dei trial.
+- **Proiezione**: rieseguo il reader 11:40, tengo fisse le feature delle 13 righe, permuto solo le label preservando `8/5`, e conto quante volte il target raggiunge l'osservato.
+- **Movimento A->M->B**: fisico A = statistiche prime dentro il confine GUE/Poisson; matematica M = null di etichetta su grafo kNN perturbato; fisico B = ritorno verso un null prime-specific. Il ritorno B resta domanda, non avanzamento.
+
+## Aderenza alla direzione
+- `relation`: `follows_direction`
+- `why`: l'esperimento attacca direttamente il perimetro vivo `8 GUE / 5 Poisson` e il candidato emerso dal ciclo 11:40.
+- `not_drift`: non torna a Sturmian, phi, V_c, fit locali o Anderson; il denominatore atomico resta 13 righe con 8 GUE e 5 Poisson.
+- `seed_residue`: restano non testati nuovi domini fisici, source-label validation analitica e scaling asintotico.
+
+## Re-discovery audit
+- **Baseline noto piu vicino**: Brody crossover, Berry-Robnik mixture, Rosenzweig-Porter crossover, kNN label stability, cluster-boundary stability.
+- **Cosa assorbe il baseline**: una riga intermedia puo apparire bridge quando le label definiscono centroidi e cross-neighbor del grafo.
+- **Cosa resta Lab-specific**: audit null-first del candidato a due lettori sullo stesso denominatore 8/5.
+- `two_reader_boundary_confirmed`: osservato `numeri_primi:cycle_3`, ma non promosso dopo null.
+- `graph_only_residue`: non sommato al boundary; nel rerun pulito restano `logistica_biforcazione_var_3.5699` e `percolation` come `27/27` graph-only, mentre il residuo graph-only precedente non e usato come autorita.
+- `scope_change_declared`: nessun cambio di scope.
+- `graph_baseline_audit`: label-count-preserving permutation null su kNN graph perturbato.
+
+## Claim Under Test
+> Nel perimetro `8 GUE / 5 Poisson`, `numeri_primi:cycle_3` e' un candidato fisico solo se il suo `27/27` bridge status non viene ricostruito frequentemente da permutazioni delle label che preservano il conteggio 8/5.
+
+## Question
+Il bridge prime a due lettori costa informazione fisica, oppure il grafo lo ricrea quando cambiano solo le label del perimetro?
+
+## Experiment Design
+- **Script**: `tools/exp_boundary_prime_label_null_audit.py`.
+- **Run**: `python tools/exp_boundary_prime_label_null_audit.py --out tools/data/boundary_prime_label_null_audit_20260516_1148.json --null-trials 512`.
+- **Scope**: `tools/data/boundary_denominator_prescan_full_20260509_1500.json`.
+- **Classical audit**: `tools/data/boundary_classical_crossover_audit_20260515_1904.json`.
+- **Reader grid**: `k=[2,3,4]`, `n_gaps=[512,1024,2048]`, seeds `[20260515,20260516,20260517]`, totale `27` letture.
+- **Null**: permuta `source_domain_type` fra le stesse 13 righe preservando `8` GUE e `5` Poisson; feature row-local, osservabili e shuffle-z restano fissati.
+- **P-value**: right-tail; `raw_p=k/N`, `add_one_p=(k+1)/(N+1)`, con `k` = trial null in cui `target_hits >= 27`.
+- **Non misurato**: nuovi autovalori, Cramer null, raw prime gaps alternativi, unfolding fisico, limite asintotico.
+
+## Results
+| measure | observed | null k/N | raw_p | add_one_p | Wilson 95% | lettura |
+|---|---:|---:|---:|---:|---|---|
+| `numeri_primi:cycle_3` target hits | 27/27 | 253/512 | 0.494140625 | 0.495126706 | [0.451039270, 0.537329250] | il null ricostruisce spesso il target pieno |
+| any row stable 27/27 under null | n/a | 508/512 | 0.992187500 | n/a | n/a | il grafo genera stabilita piena sotto label permutate |
+
+| target label in null | target 27/27 hits |
+|---|---:|
+| GUE | 141 |
+| Poisson | 112 |
+
+| target hit count under null | trials |
+|---:|---:|
+| 0 | 36 |
+| 9 | 72 |
+| 18 | 38 |
+| 21 | 35 |
+| 24 | 24 |
+| 27 | 253 |
+
+## Key Findings
+1. Verificato: il target osservato e' pieno (`27/27`) e resta `classic_and_graph_bridge` nel lettore classico.
+2. Verificato: il null ricostruisce `target_hits=27` in `253/512` trial; il valore osservato non e raro sotto permutazione delle label.
+3. Verificato: la ricostruzione non dipende dal target lasciato GUE: `141` hit pieni quando il target nullo e GUE, `112` quando e Poisson.
+4. Verificato: almeno una riga qualsiasi raggiunge `27/27` in `508/512` trial null; la stabilita graph-only e' un residuo del lettore, non evidenza fisica.
+5. Inferito dal perimetro: il nome `numeri_primi` non passa ancora dal grafo alla fisica; serve un null prime-specific che rompa ordine aritmetico senza usare label cross-dominio.
+
+## Verdict
+CONSTRAINT.
+
+Il candidato `numeri_primi:cycle_3` resta il miglior nome operativo del bordo a due lettori, ma il suo `27/27` non ha costo sufficiente sotto null di etichetta. Il terzo incluso operativo resta proprieta del grafo 13-righe finche un null fisico row-local sui primi non separa ordine aritmetico e geometria GUE/Poisson.
+
+## Bicono della scoperta
+- **Due radici**: bridge osservato pieno / ricostruzione piena sotto null.
+- **Singolare**: riga `numeri_primi:cycle_3` prima della label e prima del nome fisico.
+- **Invariante di passaggio**: stesso denominatore 13 righe, stesso reader 27 letture, stesso target.
+- **Campo di possibilita**: possibile = usare il target come candidato da stressare; non-possibile = promuoverlo come ritorno fisico dal solo graph-reader.
+
+## Consecutio
+Costruire un null prime-specific row-local sul target: preservare distribuzione dei gap e lunghezza finestra, rompere ordine aritmetico/log-temporale, e rieseguire il reader senza permutare label globali. Se il target resta `27/27` contro quel null, il ritorno fisico riapre; se cade, il candidato si chiude come artefatto del grafo 13-righe.
+
+## Ricadute pratiche
+ssp_value: yes. `tools/exp_boundary_prime_label_null_audit.py` diventa gate riusabile: nessun candidato two-reader puo passare a ritorno fisico senza costo contro label-count-preserving null.
+
+## Telemetria
+- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.
+- `python -m py_compile tools/exp_boundary_prime_label_null_audit.py` completato.
+- Run completato: `tools/data/boundary_prime_label_null_audit_20260516_1148.json`.
+- Primo artefatto 11:48 incoerente: target ricalcolato `18/27` contro baseline 11:40 `27/27`. Rerun baseline nello stesso ambiente ha riprodotto `27/27`; il file finale e stato sovrascritto con run pulito. La dissonanza resta telemetria: i residui graph-only non vengono usati come autorita.
+- Worktree gia dirty prima del ciclo; ignorate modifiche non correlate.
+- Nessun update del seme.
+- Nessuna promozione e nessun public sync.
+
+## Files
+- Script: `tools/exp_boundary_prime_label_null_audit.py`
+- Data: `tools/data/boundary_prime_label_null_audit_20260516_1148.json`
+- Report: `tools/data/reports/agent_20260516_1148.md`
diff --git a/tools/exp_boundary_prime_label_null_audit.py b/tools/exp_boundary_prime_label_null_audit.py
new file mode 100644
index 0000000000000000000000000000000000000000..bfa7e6825097bd0e7ce02cd53d3888121a949280
--- /dev/null
+++ b/tools/exp_boundary_prime_label_null_audit.py
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+"""
+Label-count-preserving null audit for the BOUNDARY prime bridge.
+
+The audit keeps the row-local features and the same 27 graph-reader settings used
+by the stability audit, then permutes only the GUE/Poisson source labels while
+preserving the 8/5 count. This tests whether the named prime bridge depends on
+the physical source labels or is often reconstructed by label geometry alone.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from pathlib import Path
+from typing import Any
+
+import numpy as np
+
+from exp_boundary_graph_curvature_gate import (
+    classify_geometry,
+    compute_observables,
+    load_scope,
+    row_spacings,
+    shuffle_z,
+    standardized_matrix,
+)
+from exp_boundary_bridge_stability_audit import classical_map, parse_ints
+
+
+TARGET = "numeri_primi:cycle_3"
+
+
+def load_reader_rows(args: argparse.Namespace) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
+    ks = parse_ints(args.k_values)
+    n_gaps_values = parse_ints(args.n_gaps_values)
+    seeds = parse_ints(args.seeds)
+    source_rows = load_scope(Path(args.scope))
+    selected = [row for row in source_rows if row.get("source_domain_type") in {"GUE", "Poisson"}]
+    selected = sorted(selected, key=lambda row: int(row["cycle"]))
+    gap_cache = {row["domain_window"]: row_spacings(row["domain"]) for row in selected}
+
+    reader_runs = []
+    for k in ks:
+        for n_gaps in n_gaps_values:
+            for seed in seeds:
+                rng = np.random.default_rng(seed)
+                graph_rows = []
+                for source in selected:
+                    gaps = gap_cache[source["domain_window"]]
+                    if len(gaps) < args.min_gaps:
+                        continue
+                    gaps = gaps[:n_gaps] if len(gaps) > n_gaps else gaps
+                    obs = compute_observables(gaps)
+                    z = shuffle_z(gaps, obs, args.n_shuffle, rng)
+                    graph_rows.append(
+                        {
+                            "domain_window": source["domain_window"],
+                            "domain": source["domain"],
+                            "cycle": source["cycle"],
+                            "source_domain_type": source["source_domain_type"],
+                            "n_gaps": int(len(gaps)),
+                            "observables": {key: round(value, 9) for key, value in obs.items()},
+                            "shuffle_z": {key: round(value, 6) for key, value in z.items()},
+                        }
+                    )
+                reader_runs.append({"k": k, "n_gaps": n_gaps, "seed": seed, "rows": graph_rows})
+    return selected, reader_runs
+
+
+def geometry_hits(rows: list[dict[str, Any]], k: int) -> set[str]:
+    geometry = classify_geometry(rows, standardized_matrix(rows), k)
+    return set(geometry["third_included_candidates"])
+
+
+def relabel_rows(
+    rows: list[dict[str, Any]],
+    labels_by_name: dict[str, str],
+) -> list[dict[str, Any]]:
+    relabeled = []
+    for row in rows:
+        item = dict(row)
+        item["source_domain_type"] = labels_by_name[row["domain_window"]]
+        relabeled.append(item)
+    return relabeled
+
+
+def summarize_target(
+    reader_runs: list[dict[str, Any]],
+    labels_by_name: dict[str, str] | None = None,
+) -> dict[str, Any]:
+    target_hits = 0
+    any_stable_hits: dict[str, int] = {}
+    per_run = []
+    for run in reader_runs:
+        rows = run["rows"] if labels_by_name is None else relabel_rows(run["rows"], labels_by_name)
+        hits = geometry_hits(rows, run["k"])
+        if TARGET in hits:
+            target_hits += 1
+        for name in hits:
+            any_stable_hits[name] = any_stable_hits.get(name, 0) + 1
+        per_run.append(
+            {
+                "k": run["k"],
+                "n_gaps": run["n_gaps"],
+                "seed": run["seed"],
+                "target_hit": TARGET in hits,
+                "third_included_candidates": sorted(hits),
+            }
+        )
+    stable_27 = sorted(name for name, hits in any_stable_hits.items() if hits == len(reader_runs))
+    return {
+        "target_hits": target_hits,
+        "target_frequency": round(target_hits / len(reader_runs), 9),
+        "stable_27_rows": stable_27,
+        "per_run": per_run,
+    }
+
+
+def wilson_interval(k: int, n: int, z: float = 1.959963984540054) -> list[float]:
+    if n <= 0:
+        return [0.0, 0.0]
+    phat = k / n
+    denom = 1 + z * z / n
+    center = (phat + z * z / (2 * n)) / denom
+    margin = z * ((phat * (1 - phat) / n + z * z / (4 * n * n)) ** 0.5) / denom
+    return [round(max(0.0, center - margin), 9), round(min(1.0, center + margin), 9)]
+
+
+def run(args: argparse.Namespace) -> dict[str, Any]:
+    selected, reader_runs = load_reader_rows(args)
+    classical = classical_map(Path(args.classical_audit))
+    observed = summarize_target(reader_runs)
+
+    names = [row["domain_window"] for row in selected]
+    original_labels = {row["domain_window"]: row["source_domain_type"] for row in selected}
+    label_values = [original_labels[name] for name in names]
+    rng = np.random.default_rng(args.null_seed)
+
+    target_ge_observed = 0
+    target_eq_27 = 0
+    any_eq_27 = 0
+    target_hits_distribution: dict[str, int] = {}
+    target_label_distribution: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    target_eq_27_with_target_label: dict[str, int] = {"GUE": 0, "Poisson": 0}
+    null_examples = []
+
+    for trial in range(args.null_trials):
+        permuted = list(rng.permutation(label_values))
+        labels_by_name = dict(zip(names, permuted, strict=True))
+        summary = summarize_target(reader_runs, labels_by_name)
+        hits = summary["target_hits"]
+        target_hits_distribution[str(hits)] = target_hits_distribution.get(str(hits), 0) + 1
+        target_label = labels_by_name[TARGET]
+        target_label_distribution[target_label] += 1
+        if hits >= observed["target_hits"]:
+            target_ge_observed += 1
+        if hits == len(reader_runs):
+            target_eq_27 += 1
+            target_eq_27_with_target_label[target_label] += 1
+        if summary["stable_27_rows"]:
+            any_eq_27 += 1
+        if len(null_examples) < args.example_count and (hits == len(reader_runs) or summary["stable_27_rows"]):
+            null_examples.append(
+                {
+                    "trial": trial,
+                    "target_label": target_label,
+                    "target_hits": hits,
+                    "stable_27_rows": summary["stable_27_rows"],
+                }
+            )
+
+    output = {
+        "experiment": "boundary_prime_label_null_audit",
+        "question": "Does the prime two-reader bridge survive a label-count-preserving null on the same 13-row BOUNDARY reader?",
+        "observables_registry": "1.0.0-2026-05-06 via boundary_graph_curvature_gate; classical audit joined for target only",
+        "observables_used": [
+            "target_graph_bridge_hits",
+            "target_graph_bridge_frequency",
+            "label_count_preserving_null_hits",
+            "any_row_stable_27_under_null",
+            "classical_audit_state",
+            "brody_q",
+            "berry_robnick_like_gue_weight",
+        ],
+        "params": {
+            "scope": args.scope,
+            "classical_audit": args.classical_audit,
+            "k_values": parse_ints(args.k_values),
+            "n_gaps_values": parse_ints(args.n_gaps_values),
+            "seeds": parse_ints(args.seeds),
+            "n_shuffle": args.n_shuffle,
+            "min_gaps": args.min_gaps,
+            "null_trials": args.null_trials,
+            "null_seed": args.null_seed,
+            "target": TARGET,
+        },
+        "observable_contract": {
+            "claim": "the named prime bridge is physical only if its 27/27 graph-reader status is not commonly reconstructed when only the 8/5 labels are permuted",
+            "observable": "target row bridge hit count across the same 27 graph-reader perturbations",
+            "operator": "label-count-preserving permutation null over the 13 row-aligned BOUNDARY labels",
+            "generator": "fixed row-local feature vectors from boundary_graph_curvature_gate; only source_domain_type changes under null",
+            "denominator": "13 rows, 27 graph-reader reads, 512 null label permutations",
+            "p_value_definition": "right-tail raw_p=k/N and add_one_p=(k+1)/(N+1), k = null trials with target_hits >= observed target_hits",
+            "non_possible": "calling numeri_primi:cycle_3 a physical return if target 27/27 is reconstructed frequently by label permutations",
+            "not_tested": "new spectra, new physical Hamiltonian, analytic source-label validity, asymptotic scaling",
+        },
+        "observed": {
+            "target": TARGET,
+            "target_source_label": original_labels[TARGET],
+            "target_classical_audit": classical.get(TARGET),
+            "target_hits": observed["target_hits"],
+            "target_frequency": observed["target_frequency"],
+            "stable_27_rows": observed["stable_27_rows"],
+        },
+        "null": {
+            "target_ge_observed": target_ge_observed,
+            "target_eq_27": target_eq_27,
+            "any_row_eq_27": any_eq_27,
+            "raw_p": round(target_ge_observed / args.null_trials, 9),
+            "add_one_p": round((target_ge_observed + 1) / (args.null_trials + 1), 9),
+            "wilson_95": wilson_interval(target_ge_observed, args.null_trials),
+            "target_hits_distribution": dict(sorted(target_hits_distribution.items(), key=lambda item: int(item[0]))),
+            "target_label_distribution": target_label_distribution,
+            "target_eq_27_with_target_label": target_eq_27_with_target_label,
+            "examples": null_examples,
+        },
+    }
+    out = Path(args.out)
+    out.parent.mkdir(parents=True, exist_ok=True)
+    out.write_text(json.dumps(output, indent=2, sort_keys=True) + "\n", encoding="utf-8")
+    print(json.dumps({"observed": output["observed"], "null": output["null"]}, indent=2, sort_keys=True))
+    return output
+
+
+def main() -> None:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--scope", default="tools/data/boundary_denominator_prescan_full_20260509_1500.json")
+    parser.add_argument("--classical-audit", default="tools/data/boundary_classical_crossover_audit_20260515_1904.json")
+    parser.add_argument("--k-values", default="2,3,4")
+    parser.add_argument("--n-gaps-values", default="512,1024,2048")
+    parser.add_argument("--seeds", default="20260515,20260516,20260517")
+    parser.add_argument("--n-shuffle", type=int, default=32)
+    parser.add_argument("--min-gaps", type=int, default=64)
+    parser.add_argument("--null-trials", type=int, default=512)
+    parser.add_argument("--null-seed", type=int, default=20260516)
+    parser.add_argument("--example-count", type=int, default=8)
+    parser.add_argument("--out", default="tools/data/boundary_prime_label_null_audit_20260516_1148.json")
+    args = parser.parse_args()
+    run(args)
+
+
+if __name__ == "__main__":
+    main()

tokens used
100,924
Eseguito il ciclo e scritto il report richiesto:

[tools/data/reports/agent_20260516_1148.md](/opt/MM_D-ND/tools/data/reports/agent_20260516_1148.md)

Artefatti prodotti:
- [tools/exp_boundary_prime_label_null_audit.py](/opt/MM_D-ND/tools/exp_boundary_prime_label_null_audit.py)
- [tools/data/boundary_prime_label_null_audit_20260516_1148.json](/opt/MM_D-ND/tools/data/boundary_prime_label_null_audit_20260516_1148.json)

Verdict: `CONSTRAINT`. Il candidato `numeri_primi:cycle_3` resta osservato a `27/27`, ma il null label-count-preserving lo ricostruisce in `253/512` trial, quindi non passa ancora a ritorno fisico.

Verifica: `py_compile` completato; report e JSON presenti.
