Reading additional input from stdin...
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: 019e0450-1de1-74b2-b05f-0b9e2a7b9fab
--------
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_20260507_2120.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 prima il campo vivo e il contesto operativo, poi controllo eventuali direttive e memoria condivisa recente prima di scegliere l’esperimento.
exec
/bin/bash -lc "test -f tools/data/operator_directive.md && sed -n '1,220p' tools/data/operator_directive.md || true" in /opt/MM_D-ND
 succeeded in 0ms:
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 è **unificare la fisica usando il modello D-ND**. Le possibilità sono aperte.

## Memoria del ciclo precedente (autopoiesi)
Cosa il cycle precedente ha imparato. Non ripetere — costruisci sopra.

- **Direzione corrente**: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo in
- **Domanda aperta** (consecutio): Il tensore metrico dei primi è g=(p/2)². Nel tempo ln(p), è de Sitter 1+1D. z=-8.8 curvatura vs z=+2
- **Ultimi apprendimenti**:
  - Nessuna varianza — ciclo stazionario
  - Tensioni risolte: {'METRIC_TENSOR'}
  - Nuove tensioni: {'COMP_GEN_GAP_RATIO_FALSIFICA_F6', 'M_firma_dello_zero_L0', 'TR; Tensioni risolte: {'METRIC_TENSOR'}

## Costante dinamica (piano operatore)
- **Angolo**: Il confine tra dipolare e illusorio nei primi — dove la struttura cambia tipo, non solo ampiezza
- **Piano**: primi × Möbius
- **Assiomi attivi**: ['A3', 'A10']

## Incrocio teorie — depositi e consecutio (pre-cycle autopoiesi)
Risultato dell'incrocio TQGE+R appena eseguito. Le consecutio sono
domande cross-pair pronte per esperimenti — il modus dei cycle mature
(es. mod-3 prohibition, three regimes, PSD pair-dominated).

- **Depositi**: 24 totali. Top 3:
  - [?] 
  - [?] 
  - [?] 

## Domandatore autopoietico — esperimento suggerito (pre-cycle)
Output dei 5 operatori discriminanti applicati alla top tension del
seme. Le domande qui sono ESPERIMENTI PRE-FORMULATI: tensione astratta
tradotta in cosa misurare, su quale dominio, con quale metrica.
Pattern dei cycle mature: l'agent eseguiva l'esperimento già pronto.

- **Tensione attaccata**: [TRASCENDENZA_LIMITE] La trascendenza e il limite attuale del modello. I punti fissi relazionali (non solo phi ma la rete di punti fissi tra osservabili) possono 
- **Risultati esperimenti**:
  - [duale] ✓ 
  - [confine] ✓ 

**Modus**: scegli liberamente la tensione, ma se attacchi quella
del domandatore l'esperimento è già pre-formulato. Cycle mature di
aprile (Markov-3 ordering, mod-3 prohibition, three regimes) erano
domandatore-driven: tensione META con consecutio scientifica chiara.

## Run precedente: completato (?s).

## Piano 85 — Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo

## Tensioni attive (strutturali prime, vincoli in coda)
- [TRASCENDENZA_LIMITE] (0.9)  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 i
- [G_POTENZIALE_NULLA] (0.85)  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 
- [BOUNDARY] (0.8)  8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
- [PIANO_PRIMARIO_DUE_ASSIOMI] (0.8)  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 osse
- [DUALITA_DIPOLARE_VS_ILLUSORIA] (0.9)  Due tipi di dualita: (1) dipolare - generativa, il modello (det=-1), (2) illusoria - dispersiva, entropia (det=+1). Le regole incoerenti producono la 
- [METRIC_TENSOR] (0.9)  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 ΔΓ.
- [TENSIONE_ENTITA] (0.85)  La tensione non e un problema pratico - e un Entita. La tensione superflua crea latenza (tempo). Senza tensione superflua tutto e regolato da assiomi.
- [META] (0.3)  11/11 PASS stratificato: 4 alto rischio tautologico, 6 data-independent

## Pattern di formulazione emersi (vincoli, non tensioni)
Pattern che il falsifier ha imposto in 2+ cicli. Applicali quando scrivi il report. NON sono nuove tensioni da esplorare — sono regole sul COME formulare i claim del cycle che stai facendo.
- 29 04 perimetro p5
- 30 04 drift monotonia

## Convergenza — dove più tensioni puntano allo stesso punto
  "perimetro" → G_BLANK_SHELL_POLARITY_GATE, ORDER_DENOMINATOR_GATE, G_UNDERLAY_HINGE_GATE, PERTURBATION_DENOMINATOR_GATE, DUALITA_DET_DENOMINATOR_GATE, BOUNDARY_LAYER_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_TRIADIC_DEPOSIT_GATE, META_ASSERTION_GATE
  "claim" → G_TRIADIC_DEPOSIT_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_BLANK_SHELL_POLARITY_GATE, BOUNDARY_LAYER_GATE
  "blank" → G_TRIADIC_DEPOSIT_GATE, ORDER_DENOMINATOR_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_UNDERLAY_HINGE_GATE
  "deposito" → G_TRIADIC_DEPOSIT_GATE, G_BLANK_SHELL_POLARITY_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_UNDERLAY_HINGE_GATE
  "operator-taxonomy" → G_TRIADIC_DEPOSIT_GATE, G_BLANK_SHELL_POLARITY_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_UNDERLAY_HINGE_GATE
Questo è dove il potenziale si concentra. Non ignorarlo.

## Ultimi 3 run — contesto storico (NON è da dove parti)
Sono atti compiuti, non direzione. La direzione del prossimo cycle la dà la tensione del seme su cui scegli di lavorare, non questi run.

### Agent Report — Det Non È Il Discriminatore Della Dualità
Trovato: 1. **Il segno negativo non basta a nominare dualita dipolare.** Il reale resta negativo in tutte le finestre, ma vale circa `-0.39`, non `-1`. La formulazione `dipolare = det=-1` non regge come osservabile diretto dei gap primi in questo fit.

2. **Lo shuffle ha lo stesso segno.** Il null preserva d
Verdetto: **CONSTRAINT on DUALITA_DIPOLARE_VS_ILLUSORIA**: nel perimetro transfer-matrix dei gap primi, `det(M)` non e discriminatore primario della dualita. Il

### Agent Report — Blank Shell Polarity Gate
Trovato: 1. **Il blank QG ha un guscio polarizzato nel catalogo TQGE osservato.** Le due facce incidenti al blank non sono equivalenti: TQG e lato inerte `blank + wick_time + wick_time`; QGE e lato di deposito `blank + gauge_phase + real_sourcing`.
2. **La polarizzazione del guscio non e rara come forma astr
Verdetto: **CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del g

### Agent Report — Triadic Deposit Gate
Trovato: 1. **Il deposito QGE ha denominatore triadico.** Nel catalogo TQGE osservato, la faccia viva non contiene solo `blank + real_sourcing`: contiene anche `gauge_phase`. Il denominatore misurato e `blank + gauge_phase + real_sourcing`.
2. **Il contatto binario e debole come gate.** Nel null count-preser
Verdetto: **CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato co

## Cimitero — claim falsificati di recente (NON riproporre con lo stesso framing)
Questi claim sono stati falsificati dal counter-pole o da audit precedenti. Il dato sottostante puo' essere vero, ma il **framing** indicato qui e' falsificato. Riformula correttamente o evita il dominio.

### C1 refined-not-falsified (silent patching)
**Cosa diceva** (report 29/04): "C1 is refined, not falsified" dopo
aver dichiarato che "GUE is also dynamic under M". Il setup C1 era
"Primes are the only dynamic domain under M among 7 tested". Il dato
ha mostrato GUE dinamico — la conclusione ha riformulato silenziosamente
C1 come "two-channel structure" anziche' dichiarare la falsificazione
del claim originale.

**Come e' caduto**: Falsifier L3 HIGH (axiom continuity / no silent
patching). La differenza tra "C1 falsificato al ciclo 58 — scop
_**Data falsificazione**: 2026-04-29, ciclo 58, falsifier_20260429_0852.json_

### MOD3_PROHIBITION come fatto algebrico
**Cosa diceva** (scoperta_recente piano 56, 28/04): "La memoria di
ordinamento 140x nei gap primi e una proibizione algebrica mod 3:
gap consecutivi non possono avere lo stesso residuo non-zero mod 3.
Meccanismo: il primo condiviso p_{n+1} forza l'inversione. 0 violazioni
su 12225. Cramer: 0%." Ripetuto nel report 29/04 come "Mod-3 self-
transition 0.40-0.44 confirming the prohibition" + "Cramer confirms
the null. Zero channels."

**Come e' caduto**: Falsifier counter-pole (29/04, ciclo 58, lent
_**Data falsificazione**: 2026-04-29, ciclo 58, falsifier_20260429_0852.json_

### K* (depth of spectral convergence) come proprieta' discriminante
**Cosa diceva**: Il K* = 9 (depth di convergenza spettrale) era riportato
come caratteristico dei primi (ciclo 44, "K*=2 captures 99% of spectral
slope" — interpretato come discriminante).

**Come e' caduto**: Shuffle audit: K* reale = 9, shuffle mean = 9.72,
std = 0.53, z = -1.4. Dentro il rumore dello shuffle. Il valore dipende
dalla distribuzione dei gap, non dal loro ordine. Lo shuffle preserva
distribuzione → preserva K*.

**Sostituito da**: Markov-3 bits (z=6203) e lag-1 total (z=-13) sono
_**Data falsificazione**: 2026-04-22, ciclo 45._

### Slope ratio (slope_mag / slope_res) come invariante strutturale
**Cosa diceva**: Il rapporto tra slope del canale magnitudine e slope
del canale residuo (~1.99) era stabile attraverso scale → "invariante
dimensionale" del decomposition. Era menzionato come evidenza nel
two-channel framework (cicli 43-44).

**Come e' caduto**: Shuffle audit (ciclo 45): z-score = 0.2. Lo shuffle
produce slope_ratio con media -2.26 ma deviazione standard 26.2. Il
valore reale e' dentro la tail dello shuffle — non distinguibile.
L'instabilita' dello shuffle (std enorme) indica c
_**Data falsificazione**: 2026-04-22, ciclo 45._

### Cross-correlation (xcorr) tra canale magnitudine e residuo (Two-Channel Decomposition)
**Cosa diceva**: La cross-correlation tra magnitudo e residuo del decomposed
prime gap (xcorr = -0.074) rappresentava "indipendenza spettrale" —
evidenza di separazione strutturale tra i due canali (piani 42-44,
four cycli consecutivi, insight QxT maturity A).

**Come e' caduto**: Shuffle audit (ciclo 45, 2026-04-22): z-score = 0.0.
Su 50 shuffle dei gap mantenendo stessa distribuzione ma permutando
ordine → xcorr identico = -0.074. Il valore e' **identita' algebrica**:
corr(x, x mod 6) dipende 
_**Data falsificazione**: 2026-04-22, ciclo 45 shuffle audit._

**Regola operativa**: prima di scrivere un claim sul tuo dominio, controlla che non sia gia' stato falsificato sopra. Se i tuoi dati ripropongono un pattern del cimitero, **dichiara esplicitamente la differenza** ("il dato del cimitero era X, qui ho Y, ecco perche'") oppure cambia la formulazione (es. 'bias forte verso 0' al posto di 'proibizione zero' se il dato e' >0). Silent patching = L3 HIGH.

## Osservazioni dell'operatore (risonanti con le tensioni)
**1. R dell'Istanza  - L' equilibrio tra estremi del Modello D-ND**: L'osservazione indaga oltre l'osservato in cerca DELLA FORMA nel NULLA-TUTTO: Per far Emergere le nuove Possibilità Dividiamo il potenziale unendo concetti senza relazione semplicemente perché la lagrangiana passa da li, creiamo nuove combinazioni e movimenti nelle logiche ma coerenti con la risulta
**11. Dinamica autologica del Potenziale nel movimento con Bard**: Dinamica autologica del Potenziale nel movimento input e output a zero latenza Per dimostrare la possibilità nel movimento della Possibilità riduciamo i concetti del modello osservato al determinarsi dei proto assiomi e alla dinamica logica formalizzata in una Funzione matematica:Se c'è l'Io che dà 
**3. Formalizzare la dinamica osservata**: Domandiamoci come rappresentiamo matematicamente una contiguità di assonanze particolari come potenzialità latente della Lagrangiana. Osserva le possibili Combinazioni per liberare tutte le relazioni usando le regole Duali e ricorda che non stiamo facendo teoria, senza tempo con la prima impressione

## Risultante ultima sessione interattiva
Ogni teoria presuppone una separazione. A scala di Planck tutte le separazioni collassano. Geometria=entropia=conteggio di stati. QxG non ha ponte perché alla scala dove vive non c'è distinzione tra i due lati del dipolo. Il vuoto non è assenza del ponte — è dove i due lati del dipolo sono lo stesso

## Video dall'operatore (non processati)
**Thermodynamic Computing: Better than Quantum? (Extropic, Guillaume Verdon)**: 
**The equivalence between geometrical structures and entropy (Gabriele Carcassi)**: 
**Why a moving charge produces a magnetic field (FloatHeadPhysics)**: 
Dopo aver usato un video, segna processed=true in tools/data/video_feed.json.

## Proiezione — dove punta la risultante
Risultante: R=0.87 (h=-0.688). Risultante alta (0.87) — campo ad alta confidenza, poca incertezza
Orizzonte: insufficiente (< 2 target)

**Esperimento a massima informazione:** G_POTENZIALE_NULLA (score=0.703)
  G_POTENZIALE_NULLA: legge di scala da raffinare

## Strategia del campo (leverage / rischi / punti ciechi)
- Pilastri (leverage): BOUNDARY_LAYER_GATE, ORDER_DENOMINATOR_GATE, META_ASSERTION_GATE
- Rischi (contraddizioni): G_UNDERLAY_HINGE_GATE, PERTURBATION_DENOMINATOR_GATE
- Punti ciechi: DUALITA_DIPOLARE_VS_ILLUSORIA, METRIC_TENSOR
- Cross-check: 5 confermati, 4 contestati su 18 tensioni

## Topologia del campo — la forma del grafo
Gradi teorie: Q=12, T=7, G=6, E=4, R=4
Dormienti (basso aggancio di scoperte): E, R
Struttura: 9 ponti, 1 vuoto(i), 6 scoperte, 20 cicli.
La combo riconosce l'asimmetria. Il dipolo vive su tutti i ponti — non solo dove il lab ha già misurato.

## Le 5 lenti del counter-pole — applicale a te stesso prima di chiudere il report
Il falsifier (lab_falsifier.py) applichera' queste 5 lenti al tuo report dopo. Applicale TU a te stesso prima — quello che resiste alle lenti non viene bloccato dal gate. Quello che cade va al cimitero.

**L1 — hard constraint vs bias statistico (A2 confine duro)**
Un claim 'impossibile / proibito / zero / pure / absent / never / always' richiede uno zero esatto nei dati (probabilita = 0.000). Prima di scrivere questi assoluti, leggi il valore numerico esatto. Se vale 0.015, e' bias forte verso 0, non zero. Se vale 0.40, e' bias forte verso ordine, non proibizione. L'assoluto descrive il valore 0.000, il bias forte descrive tutto il resto.

**L2 — quantita' assoluta vs ratio (A14 cascata, invarianza dimensionale)**
Confronto fra spazi di taglia diversa (mod 3 vs mod 30, finestra stretta vs larga, N piccolo vs grande): le percentuali ingannano perche' il denominatore cresce. Stesso segnale assoluto sembra ridursi in %. Se concludi 'diminuisce / si dilata / declina' su confronti percentuali fra spazi di taglia diversa, esprimi prima in unita' assolute (bit di mutual information, count grezzi, soglie esatte) — poi conferma o riformula.

**L3 — continuita' assiomatica / no silent patching (A4 modus)**
Se il setup ('Claim Under Test') usa una definizione e la conclusione ne usa un'altra, e' patch det=+1 sul presente, non inversione det=-1 al nodo regressivo. Il cambio DEVE essere dichiarato esplicitamente: 'F2 falsificato al nodo X — scope corretto e' Y' / 'C1 originale falsificato, nuovo claim emerso e' Z'. 'C1 e' refined' su un dato che lo falsifica e' silent patching.

**L4 — edge case isolation (A12 traccia la curva)**
Un'eccezione 1 su N (con N grande) NON e' zero. Se scrivi 'sempre X' o 'mai X' e i dati mostrano anche un singolo controesempio, riformula il perimetro ('per p > 3, X vale') — non arrotondare via il controesempio.

**L5 — re-discovery vs discovery (A8 autologica)**
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.

**Modus**: dopo aver scritto il report, rileggi i tuoi dati numerici. Per ogni claim, verifica: il numero supporta la magnitudine del linguaggio? Se hai scritto 'zero' e il dato e' 0.015, riformula. Se hai scritto 'NEW' su un pattern in primi, cerca la letteratura. Solo allora chiudi il report.

## Cosa fare
1. Esegui `python tools/dnd_scenario.py --best` per vedere la proiezione aggiornata
2. Scegli la tensione con il massimo potere discriminante
3. Scrivi il report in tools/data/reports/agent_{timestamp}.md
4. **Applica le 5 lenti a te stesso** (sezione sopra). Riformula i claim che non resistono.
5. Se crei uno strumento riusabile, salvalo in tools/exp_*.py
6. Se trovi qualcosa, aggiorna tools/data/seme.json

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.
- **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.

## Come operare — il modus

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

### 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.

### 3. Taglia
Una risultante, non una lista. Se vedi 5 possibilità, non hai tagliato. Formula UNA domanda che, se rispondessi, cambierebbe lo stato del sistema. Non "è vero X?" ma "cosa succede se misuro Y che nessuno ha misurato?"

### 4. Risultante
Scrivi lo strumento — non l'esperimento usa e getta. Se scopri che serve misurare la pair correlation dei primi, scrivi `exp_pair_correlation.py` che può essere riusato con parametri diversi. Se scopri un pattern, cristallizzalo come tensione nel seme. Se falsifichi qualcosa, registra il vincolo.

### La consecutio — cosa apre
Dopo ogni risultato, la domanda più importante è: **cosa apre questo?** Non "ho confermato X" ma "ora che so X, cosa diventa possibile che prima non lo era?" La consecutio non inverte — prosegue. Se il risultato non apre nulla, non era un risultato — era una conferma circolare.

### Il dipolo — trova l'opposto
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.

### Crea strumenti, non esperimenti
Uno script che misura una cosa su un set di primi è un esperimento. Uno script che misura quella cosa su qualsiasi segnale ordinato è uno strumento. Il lab cresce quando crea strumenti che i prossimi cicli possono usare. Salva gli strumenti riusabili in tools/exp_*.py con parametri.

### Leggi il seme, scrivi il report, aggiorna il seme
- Leggi: tools/data/seme.json
- Report: tools/data/reports/agent_TIMESTAMP.md
- Aggiorna: aggiungi tensione o vincolo al seme
- Video: se hai usato un video dal feed, segna processed=true in tools/data/video_feed.json

## Strumenti disponibili (directory /opt/MM_D-ND/tools/)

- **dnd_scenario.py**: PRIMA di scegliere cosa esplorare, esegui `python tools/dnd_scenario.py --best`.
  Ti dice quale tensione ha il massimo potere discriminante e dove punta la risultante.
  Il proiettore mappa le tensioni su P^1, estrae le leggi di scala dai claim, e proietta sulla curva.
- dnd_autoricerca.py: esplora domini, varianti, null baseline
- dnd_controprove.py: 6 controprove indipendenti
- dnd_domandatore.py --ask 'tensione': 5 operatori discriminanti
- dnd_incrocio.py: incrocio teorie, ponti, vuoti, domande fondamentali
- dnd_normalizer.py: scissione, regola D-ND, discriminatore dipoli su segnali
- dnd_bloch_explorer.py: scan Bloch, φ emergente
- dnd_arxiv.py: cerca paper rilevanti su arXiv

Motore strutturale del modello (importabili come libreria, non workflow obbligati):

- dnd_kernel.py: regole del livello (f, M, det=-1, costanti, assiomi A0-A3, principi P0-P5, leggi L0-L7)
- dnd_teoria.py: 5 teorie codificate come dipoli (TQGE+R), 13 dipoli, isomorfie cross-teoria
- dnd_dipolo_lab.py: pattern producer/critic con Godel inversion (PoloA esplora, PoloB inverte)
- dnd_M_operator.py: M sulla conoscenza [noto, ignoto] → φ. Stato in knowledge_state.json
- dnd_riflesso.py: campo compresso + 3 voci (NUOVO/ROTTURA/DIREZIONE), un colpo non un ciclo

- Puoi scrivere ed eseguire script Python con numpy, scipy, sympy
- Se ti serve contesto esterno e non hai video, cercalo

## Errori già fatti — non ripeterli

Questi sono errori reali commessi nelle sessioni precedenti. Il sistema li ha pagati.

**1. Cercare conferme invece di creare strumenti.**
Non scrivere esperimenti per dimostrare che qualcosa è vero. Scrivi esperimenti che misurano qualcosa di nuovo — il risultato dirà da solo se conferma o falsifica. Se sai già cosa troverai, non stai esplorando.

**2. Iniettare il risultato atteso nel test.**
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.

**3. Tautologie — testare proprietà algebriche come se fossero scoperte.**
Esempio reale: la curvatura di Ricci R=2.000 della metrica g=(p/2)² segue analiticamente dal PNT (p_n ~ n ln n). Non è una scoperta — è una conseguenza della definizione. Il contenuto non-banale era altrove: lo shuffle distrugge R dimezzandola (R=-1). Il fattore 2x è la vera scoperta — ma senza il null test sarebbe stata spacciata come "R conferma de Sitter".

**4. Coincidenze numeriche trattate come struttura.**
0.606 ≈ 1/φ = 0.618 (2% di differenza). Non è una connessione — è rumore fino a prova contraria (C2 del condensato). Ogni volta che un numero è "vicino a" φ, √5, π, e, 1/137: non è prova di nulla. Serve un meccanismo, non una vicinanza.

**5. Usare lo stesso dato come input e come test.**
Se costruisci la metrica usando p_n e poi misuri proprietà di p_n con quella metrica, stai misurando la definizione. Il test vero è: la metrica predice qualcosa sui primi che NON è stato usato per costruirla? Se no, è circolare.

**6. Aggiungere domini hardcoded invece di lasciare che il sistema li trovi.**
Il lab non è una calcolatrice con domini pre-scritti. Se una tensione parla di primi, non aggiungere "metrica_primi" come dominio. Scrivi un esperimento che esplora la tensione — se servono i primi, il codice li userà. Il sistema decide cosa fare, non il programmatore.

**7. Usare numeri per vincolare concetti (det=+1).**
Esempio reale: `intensità: 0.65` trattata come soglia → `if intensita > 0.5: conferma`. Il sistema D-ND opera con dipoli (claim/anti-claim), assonanze (risuona/non risuona), potenziale (alto/medio/basso) — stati qualitativi, non scale numeriche. Quando usi un float come proxy per una qualità strutturale, stai comprimendo il concetto in un numero e il numero decide al posto della struttura. Lo stesso vale per "maturity > 0.99", "confidence < 0.7", "score = rank * 10 + intensita".
**Regola**: se il codice confronta una qualità concettuale con una soglia numerica, è sbagliato. Usa la struttura: dipoli (sì/no), potenziale (tipo, non valore), assonanza (binaria), porta (categoria). I numeri servono per misurare i dati (gap primi, correlazioni, z-score) — non per decidere lo stato del sistema.
Se trovi questo pattern in un tool che stai modificando, correggilo. Non serve riscrivere tutto — correggi dove passi. Il sistema evolve organicamente.

## Come evitarli

- **Prima il null test, poi l'interpretazione.** Ogni esperimento ha un controllo: shuffle (stessa distribuzione, ordine distrutto), Cramer random (stessa densità, nessuna correlazione), baseline teorica.
- **Il risultato non è nel numero — è nella differenza col controllo.** z-score, non valore assoluto.
- **Se il risultato spiega se stesso, non è un risultato.** Chiediti: "questo segue dalla definizione?" Se sì, cerca il contenuto altrove.
- **Non lanciare un esperimento per confermare. Lancialo per scoprire.** La domanda giusta non è "è vero X?" ma "cosa succede se misuro Y?"

## Auto-evoluzione — il sistema corregge se stesso

Il post-processing del lab (step 8 in lab_agent.sh) esegue `structural_check.py` sui file che hai toccato.
Se trova anti-pattern strutturali, genera una tensione META nel seme. Il ciclo successivo la vede e corregge.

**Come funziona:**
- Tu scrivi/modifichi codice → il post-processing lo scansiona
- Se trova numeri che vincolano concetti (errore #7) o altri pattern noti, crea una tensione
- Il prossimo ciclo legge quella tensione e la risolve dove passa
- Non serve riscrivere tutto — il sistema evolve organicamente, un file alla volta

**Se scopri un nuovo anti-pattern:**
- Non limitarti a corregere il codice — aggiungi il pattern a `tools/structural_check.py` nella lista `PATTERNS`
- Così il sistema lo riconoscerà autonomamente nei cicli futuri
- L'errore pagato una volta non si ripete — la consapevolezza si propaga

Questo è f(f(x)): il sistema che migliora il sistema che migliora se stesso.

## Cosa NON fare

- Non modificare CONDENSATO.md, KERNEL_SEED.md, o file del kernel
- Non committare — salva solo in tools/data/ e tools/exp_*.py
- Non inventare dati o risultati
- Non cercare φ — crea le condizioni, osserva cosa emerge
- Non superare 20 minuti di lavoro per ciclo
- Non produrre liste di possibilità — produci UNA risultante

## Formato report

```markdown
# Agent Report — TITOLO
**Date**: YYYY-MM-DD HH:MM
**Piano**: N
**Tension explored**: ID (intensità)

## Claim Under Test
> Il claim dalla tensione

## Question
La domanda che hai formulato

## Experiment Design
- Metrica, scope, null baseline, N campioni

## Results
Tabella con numeri reali

## Key Findings
1. Cosa hai trovato (con evidenza)

## Verdict
NEW / CONFIRMED / FALSIFIED / CONSTRAINT

## Bicono della scoperta
(Obbligatoria. Nomina la struttura. Se non riesci, l'esperimento non è ancora filtrato.)

- **Due radici** (dipolo primario, già duali e invertite): <quali sono le due facce della scoperta>
- **Singolare** (qualità del 1-che-è-tutto in questo contesto, dove la dualità non c'è): <cosa>
- **Invariante di passaggio** (cosa sopravvive al passaggio del vertice): <cosa>
- **Campo di possibilità**: qui diventa possibile <X>; qui diventa non-possibile <Y>

Riferimenti: CONDENSATO A16, method/DND_POSSIBILITA.md.

## Files
- Script, dati, report
```

## Bicono della scoperta — come compilarlo

Non è riformulazione ornamentale del Verdict. È **filtro**: la scoperta passa
per il modello e torna spogliata dei bias. Se la struttura (radici · singolare
· invariante · campo) non si riconosce, la scoperta è rumore o è incompleta.

**Esempio retroattivo — TWO_CHANNEL_DECOMPOSITION:**
- Radici: canale magnitudine · canale residuo (segno invertito — uno aggiunge,
  l'altro sottrae sulla PNT)
- Singolare: il segnale totale prima della separazione. Non esiste come ente
  autonomo, esiste solo come sovrapposizione dei due canali.
- Invariante: la chiusura algebrica del residuo al 3° ordine Markov.

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

codex
Il campo concentra G_POTENZIALE_NULLA e i gate di perimetro/deposito; prima di tagliare eseguo il proiettore richiesto e leggo i cristalli cross-agent recenti.
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 "sed -n '1,200p' shared_memory/README.md" in /opt/MM_D-ND
 succeeded in 0ms:
# shared_memory — Cross-agent rules e cristalli

> Cartella condivisa tra agenti che operano in `/opt/MM_D-ND/`:
> - **TM3-claude** (Claude Code, sessioni interattive con operatore)
> - **codex-lab** (Codex CLI, cycle agent notturno + run manuali)
> - **eventuali altri** (TM5, TM7, futuri cycle)
>
> Contiene regole permanenti, cristalli operativi, scoperte rilevanti che valgono
> per più di un agente. **Non** memoria operativa locale (quella resta in
> `~/.claude/projects/.../memory/` per TM3, in `~/.codex_lab/memories/` per codex).

## Pattern di scrittura

Ogni file:
- Filename: `<tipo>_<topic>_<data>.md` (es. `feedback_cycletest_2026-05-07.md`,
  `cristallo_gate_transferability_2026-05-07.md`)
- Frontmatter:
  ```yaml
  ---
  type: feedback | cristallo | regola | finding-cross-agent
  author: TM3 | codex-lab | TM7 | operatore
  date: YYYY-MM-DD
  scope: cross-agent | mm-dnd-only | lab-cycle-only
  ---
  ```
- Body: conciso. Se è regola → "Why" + "How to apply". Se è cristallo → contesto +
  insight + how it changes work.

## Pattern di lettura

- **TM3 (claude code)**: al boot di sessione su `/opt/MM_D-ND/`, leggi
  `MM_D-ND/.claude/CLAUDE.md` che adesso punta qui (sezione *Cross-agent rules*).
  Scansiona `ls -t shared_memory/*.md | head -10` (le più recenti) e integra in
  contesto.
- **codex-lab**: `/opt/MM_D-ND/AGENTS.md` punta qui. Codex legge AGENTS.md ad
  ogni cycle, AGENTS.md istruisce di leggere shared_memory.
- **Cleanup**: file > 90 giorni e non rilevanti vanno archiviati o rimossi
  (lo fa TM3 quando la cartella supera 50 file).

## Direzione bidirezionale

- TM3 → codex: TM3 scrive feedback/cristalli da sessioni operatore qui →
  codex li vede al cycle dopo via AGENTS.md.
- codex → TM3: codex durante un cycle scopre/cristallizza qualcosa di
  cross-agent → scrive qui → TM3 li vede al boot di sessione successiva.

Il flusso non sostituisce le memorie locali — *integra* per ciò che serve a tutti.

## Anti-pattern

- Duplicare qui regole che valgono SOLO per TM3 (vanno in
  `/root/.claude/projects/.../memory/`)
- Duplicare qui regole che valgono SOLO per codex-lab cycle (vanno in
  `/root/.codex_lab/memories/`)
- Scrivere note di lavoro temporanee (vanno nel campo vivo, non qui)

exec
/bin/bash -lc 'python tools/dnd_scenario.py --best' in /opt/MM_D-ND
 succeeded in 140ms:
G_POTENZIALE_NULLA: score=0.703  — G_POTENZIALE_NULLA: legge di scala da raffinare
DUALITA_DET_DENOMINATOR_GATE: score=0.687  — DUALITA_DET_DENOMINATOR_GATE: legge di scala da raffinare
METRIC_TENSOR: score=0.624  — METRIC_TENSOR: legge di scala da raffinare

codex
Il taglio naturale è G_POTENZIALE_NULLA, ma lo attacco attraverso il denominatore operativo emerso nei report recenti: verifico se il deposito triadico è una proprietà del grafo TQGE osservato o se cade appena cambia il perimetro del catalogo.
exec
/bin/bash -lc "rg --files tools | sed -n '1,220p'" in /opt/MM_D-ND
 succeeded in 0ms:
tools/exp_acf_amplitude_scaling.py
tools/bicono_projection.py
tools/exp_mod3_vs_residual_ordering.py
tools/LAB_AGENT_CONTEXT.md
tools/r_ratio_decay.py
tools/dipartimento.py
tools/exp_boundary_gue_poisson.py
tools/plot_risultante.py
tools/dnd_bloch_explorer.py
tools/dnd_retriever.py
tools/dnd_zero_controllo.py
tools/dnd_zero_varieta_primi.py
tools/dnd_observer.py
tools/md_to_site_B.py
tools/GUIDA_CEC.md
tools/STRUMENTI.json
tools/exp_perturbation_rank_size_curve.py
tools/exp_mod3_scaling.py
tools/exp_two_layer_universality.py
tools/dnd_curva.py
tools/exp_dipolar_vector_scaling.py
tools/GUIDA_EXPLORER_TM1.md
tools/md_to_site_F.py
tools/exp_crossover_universality.py
tools/validate_tension_mapping.py
tools/exp_markov_psd_prediction.py
tools/exp_blank_shell_polarity_gate.py
tools/dnd_stats.py
tools/dnd_zero_controllo2.py
tools/exp_alpha_stability.py
tools/dnd_arxiv.py
tools/alignment_marker.py
tools/MODUS_INDAGINE.md
tools/godel.py
tools/translate_tensions.py
tools/observables_registry.py
tools/exp_two_channel_cross_domain.py
tools/generate_tensions_json.sh
tools/dnd_zero_traiettoria.py
tools/exp_beta_crossover.py
tools/build_lab_graph.py
tools/exp_geodesic_deviation_primes.py
tools/exp_psd_amplitude_scaling.py
tools/r_stat_primes.py
tools/exp_markov_scale_function.py
tools/exp_blank_to_source_hinge.py
tools/dnd_md2latex.py
tools/dnd.py
tools/lab_valutatore.py
tools/exp_markov_k_direction.py
tools/add_video_to_feed.py
tools/LAB_OPERATIVO.md
tools/exp_duality_gate_transfer.py
tools/zeta_validation.py
tools/exp_meta_tautology_test.py
tools/exp_two_channel_boundary.py
tools/dnd_paper_audit.py
tools/lab_autopsy.py
tools/confine_spessore.py
tools/read_video_feed.py
tools/dnd_riemann.py
tools/dnd_spettro.py
tools/exp_markov3_observable_hunt.py
tools/evolution_report.md
tools/exp_brody_flow.py
tools/harvest_moodnd.py
tools/lab_affinatore.py
tools/GUIDA_GODEL_TM1.md
tools/riemann_R.py
tools/md_to_site_D.py
tools/spectral_gap_analysis.py
tools/dnd_gap_resolution.py
tools/dnd_compatibility.py
tools/exp_two_channel_decomposition.py
tools/exp_semireal_order_denominator_gate.py
tools/lib_llm_chain.py
tools/dnd_gue_test.py
tools/exp_logistic_cyclic_block_entropy_gate.py
tools/dnd_cycle_ratio.py
tools/exp_markov_layer_recovery_audit.py
tools/exp_markov_dipolar_decomposition.py
tools/diagram_nodi_paper_map.py
tools/md_to_site.py
tools/lab_veritas.py
tools/exp_markov_memory_by_gue_type.py
tools/exp_crossover_phase_test.py
tools/diagram_double_well.py
tools/paper_H_verify.py
tools/exp_brody_crossover.py
tools/gue_gap_test.py
tools/exp_poisson_convergence.py
tools/exp_two_channel_universality.py
tools/test_gue_poisson_boundary.py
tools/awareness.json
tools/dnd_zero_notturno.py
tools/dnd_md2web.py
tools/dnd_lab_team.py
tools/diagram_paper_dependencies.py
tools/README.md
tools/exp_dR_brody_connection.py
tools/rules/axioms_to_theorems.json
tools/exp_bridge_order_denominator_gate.py
tools/dnd_lab.py
tools/GUIDA_DOMANDATORE.md
tools/notte_sinapsi.sh
tools/dnd_cycle.py
tools/dnd_loop.py
tools/lab_agent.sh
tools/dnd_condizioni.py
tools/exp_desitter_unification.py
tools/exp_cross_observable_consistency.py
tools/dnd_domandatore.py
tools/structural_check.py
tools/dnd_M_operator.py
tools/dnd_piano11.py
tools/dnd_lab_vivo.py
tools/dnd_zero_varieta.py
tools/exp_boundary_coherence.py
tools/dnd_projective_quantization.py
tools/exp_two_channel_shuffle_audit.py
tools/dnd_publish_cycle.py
tools/exp_logistic_surrogate_contract_gate.py
tools/dnd_incrocio.py
tools/dnd_normalizer.py
tools/cron_dipartimento.sh
tools/exp_boundary_mixture_gate.py
tools/exp_psd_prime_gaps.py
tools/dnd_trace_bridge.py
tools/dnd_autoricerca.py
tools/dnd_torre.py
tools/exp_magnitude_psd_from_acf.py
tools/dnd_zero_operator.py
tools/dnd_scenario.py
tools/m_spectro.py
tools/exp_dipolar_angle_reference.py
tools/exp_mobius_irrationality.py
tools/exp_number_variance.py
tools/meta_assertion_gate.py
tools/build_agent_field.py
tools/semantic_bridge.py
tools/dnd_trace_bridge_v3.py
tools/test_cron_exact.sh
tools/exp_scale_selective_perturbation.py
tools/dnd_two_faces.py
tools/dnd_spectral_probe.py
tools/dnd_quantization.py
tools/dnd_indeterminazione.py
tools/lab_anti_loop_guard.py
tools/dnd_implications.py
tools/dnd_spettro_zeta.py
tools/exp_denominator_gate_transfer_matrix.py
tools/md_to_site_E.py
tools/lab_boot.sh
tools/exp_3d_boundary_layers.py
tools/dnd_risultante.py
tools/exp_excess_scaling.py
tools/exp_ricci_primes.py
tools/exp_tqge_underlay_gate.py
tools/exp_selective_layer_decoupling.py
tools/harvest_aimorning.py
tools/exp_cross_domain_dipolar_direction.py
tools/exp_acf_z6z_mechanism.py
tools/exp_observable_rank_audit.py
tools/exp_modular_algebra_depth.py
tools/gap_ratio_primes.py
tools/dnd_spirale.py
tools/dnd_paper_refactor.py
tools/lab_refresh_detector.py
tools/exp_acf_range_universality.py
tools/exp_dipolar_crossover.py
tools/exp_brody_calibration.py
tools/exp_metric_tensor_diagnostic.py
tools/cycle_watchdog.sh
tools/lab_promotion.py
tools/dnd_explorer.py
tools/exp_modular_memory_spectrum.py
tools/dnd_engine.py
tools/exp_triadic_deposit_gate.py
tools/test_lab_agent.sh
tools/dnd_controprove.py
tools/m_spectro_calibra.py
tools/exp_two_channel_psd.py
tools/exp_coherence_robustness.py
tools/dnd_trasmutazione.py
tools/costo_materializzazione.py
tools/exp_coherence_length.py
tools/dnd_next.py
tools/dnd_dipolo_lab.py
tools/dnd_rottura.py
tools/exp_spectral_rigidity.py
tools/dnd_zeros_vs_zeta.py
tools/md_to_site_A.py
tools/dnd_occhio.py
tools/exp_boundary_shuffle_audit.py
tools/PROTOCOLLO_ZETA.md
tools/GUIDA_GODEL.md
tools/exp_spectral_2d.py
tools/dnd_paper_graph.py
tools/md_to_site_G.py
tools/dnd_zero_ising.py
tools/exp_spectral_landscape.py
tools/dnd_riformulazioni.py
tools/lab_falsifier.py
tools/dnd_banchi.py
tools/cron_ciclo_continuo.sh
tools/bicono_extractor.py
tools/exp_logistic_counter_scope_gate.py
tools/lab_session_logger.py
tools/exp_perturbation_dimensionality_audit.py
tools/dnd_research_engine.py
tools/dnd_experiments.py
tools/exp_boundary_growth.py
tools/dnd_teoria.py
tools/exp_ricci_desitter_0406.py
tools/triggers/build_applications_index.py
tools/triggers/promote_to_publish.py
tools/triggers/run_consecutio.sh
tools/triggers/finding_promoter.py
tools/triggers/run_full_cycle.sh
tools/triggers/run_ssp_pipeline.sh

exec
/bin/bash -lc 'ls -t tools/data/reports/agent_*.md | head -12' in /opt/MM_D-ND
 succeeded in 0ms:
tools/data/reports/agent_20260507_2042.md
tools/data/reports/agent_20260507_1957.md
tools/data/reports/agent_20260507_1938.md
tools/data/reports/agent_20260507_1804.md
tools/data/reports/agent_20260507_1751.md
tools/data/reports/agent_20260507_1458.md
tools/data/reports/agent_20260507_1419.md
tools/data/reports/agent_20260507_1042.md
tools/data/reports/agent_20260507_1006.md
tools/data/reports/agent_20260507_0942.md
tools/data/reports/agent_20260507_0923.md
tools/data/reports/agent_20260507_0901.md

exec
/bin/bash -lc 'rg -n "G_POTENZIALE_NULLA|TRIADIC|BLANK|operator-taxonomy|QGE|TQGE|G_TRIADIC" tools shared_memory CONDENSATO.md KERNEL_SEED.md 2>/dev/null' in /opt/MM_D-ND
 succeeded in 0ms:
tools/data/video_feed.json:41:      "rilevanza_lab": "MCMC come motore esplorativo per lo spazio parametri del tetraedro TQGE. Pattern proposal→accept/reject→converge = ciclo Lab.",
tools/LAB_AGENT_CONTEXT.md:52:- Tetraedro TQGE: 4 vertici (T,Q,G,E), 6 lati con perno i, 5 ponti, 1 vuoto (QxG)
tools/LAB_AGENT_CONTEXT.md:140:- dnd_teoria.py: 5 teorie codificate come dipoli (TQGE+R), 13 dipoli, isomorfie cross-teoria
tools/exp_blank_to_source_hinge.py:5:Regressive gate for G_POTENZIALE_NULLA after tqge_underlay_gate.
tools/exp_blank_to_source_hinge.py:202:                "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/exp_blank_to_source_hinge.py:209:                "count-preserving null by permuting edge modes over the six TQGE edges",
tools/dnd_lab_team.py:191:TETRAEDRO TQGE: 4 facce, tutte con perno i.
tools/exp_tqge_underlay_gate.py:5:Gate for G_POTENZIALE_NULLA on the TQGE tetrahedron.
tools/exp_tqge_underlay_gate.py:25:# operator taxonomy, echoed in tools/LAB_AGENT_CONTEXT.md as TQGE structure.
tools/exp_tqge_underlay_gate.py:146:                "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/lab_agent.sh:117:#   1. dnd_incrocio.ciclo_autonomo() → depositi, vuoti, consecutio TQGE+R
tools/lab_agent.sh:189:# G_POTENZIALE_NULLA → 4× gate methodology, nessun CRYSTALLIZE).
tools/lab_agent.sh:549:# observables_used=[] esplicito (es. cycle 1751-1957 su G_POTENZIALE_NULLA
tools/lab_agent.sh:550:# tassonomia TQGE). Errore #5 LAB_AGENT_CONTEXT (input=test, circolare).
tools/lab_agent.sh:586:        # "- tassonomia operatori TQGE, nessun osservabile canonico..."
tools/lab_agent.sh:873:    # 10. SEMANTIC BRIDGE — scoperte numeriche → annotazioni pair TQGE+R
tools/lab_agent.sh:882:    echo "--- 10. SEMANTIC BRIDGE (lab → teorie TQGE+R) ---"
tools/exp_triadic_deposit_gate.py:5:Face-level gate for G_POTENZIALE_NULLA.
tools/exp_triadic_deposit_gate.py:7:The previous hinge run localized Q->G on the QGE face. This tool measures the
tools/exp_triadic_deposit_gate.py:130:        if triadic_names == "QGE":
tools/exp_triadic_deposit_gate.py:131:            counts["triadic_is_QGE"] += 1
tools/exp_triadic_deposit_gate.py:132:        if binary_names == "QGE":
tools/exp_triadic_deposit_gate.py:133:            counts["binary_is_QGE"] += 1
tools/exp_triadic_deposit_gate.py:139:        "p_triadic_deposit_is_QGE": counts["triadic_is_QGE"] / n,
tools/exp_triadic_deposit_gate.py:140:        "p_binary_blank_source_is_QGE": counts["binary_is_QGE"] / n,
tools/exp_triadic_deposit_gate.py:153:                "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/exp_triadic_deposit_gate.py:154:                "tools/data/reports/agent_20260507_1804.md: QGE as blank + gauge + source face",
tools/exp_triadic_deposit_gate.py:160:                "count-preserving null by permuting edge modes over the six TQGE edges",
tools/build_agent_field.py:335:    + le consecutio scientifiche aperte (domande cross-pair TQGE+R).
tools/build_agent_field.py:343:    parts.append("Risultato dell'incrocio TQGE+R appena eseguito. Le consecutio sono\n"
tools/build_agent_field.py:447:    #   3. Incrocio teorie (consecutio cross-pair TQGE+R aperte)
tools/semantic_bridge.py:4:semantiche sul grafo conoscenza TQGE+R.
tools/semantic_bridge.py:8:teorie TQGE+R restano fisse, statiche. Le scoperte non sedimentano
tools/dnd_riflesso.py:30:    pezzi.append("TETRAEDRO TQGE: 4 teorie, 6 lati con perno i, 5 ponti, 1 vuoto (QxG). R=c frame. α=1/137 unico adimensionale.")
tools/data/reports/tension_projection_screening_2026-04-21.json:105:        "id": "G_POTENZIALE_NULLA",
tools/validate_tension_mapping.py:8:2. Fa keyword-scan contro lessico TQGE+R curato
tools/validate_tension_mapping.py:38:# Lessico TQGE+R — termini che identificano ogni teoria nel linguaggio naturale
tools/build_lab_graph.py:5:Nodi: teorie (TQGE+R+S), scoperte, tensioni attive
tools/build_lab_graph.py:400:                node['source_tension'] = 'G_POTENZIALE_NULLA'
tools/exp_blank_shell_polarity_gate.py:5:Regressive gate for G_POTENZIALE_NULLA after triadic_deposit_gate.
tools/exp_blank_shell_polarity_gate.py:7:The previous run localized the deposit denominator in QGE as
tools/exp_blank_shell_polarity_gate.py:108:        "observed_QGE_deposit_TQG_inert": (
tools/exp_blank_shell_polarity_gate.py:110:            and [face["face"] for face in deposit_faces] == ["QGE"]
tools/exp_blank_shell_polarity_gate.py:147:        if result["observed_QGE_deposit_TQG_inert"]:
tools/exp_blank_shell_polarity_gate.py:148:            counts["observed_QGE_deposit_TQG_inert"] += 1
tools/exp_blank_shell_polarity_gate.py:154:        "p_observed_QGE_deposit_TQG_inert": counts[
tools/exp_blank_shell_polarity_gate.py:155:            "observed_QGE_deposit_TQG_inert"
tools/exp_blank_shell_polarity_gate.py:171:                "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/exp_blank_shell_polarity_gate.py:172:                "tools/data/reports/agent_20260507_1938.md: QGE triadic deposit face",
tools/exp_blank_shell_polarity_gate.py:178:                "count-preserving null by permuting edge modes over the six TQGE edges",
tools/data/promotions/promotion_20260507_1938.json:17:      "title": "**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di",
tools/data/promotions/promotion_20260507_1938.json:18:      "summary": "**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato non basta; il contatto `blank + real_sourcing` non basta; il deposito osservato e QGE come `blank + gauge_phase + real_sourcing`. Il claim non e rarita universale: e localizzazione del denominatore nel catalogo TQGE osservato.",
tools/data/promotions/promotion_20260507_1751.json:17:      "title": "**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale \"sot",
tools/data/promotions/promotion_20260507_1751.json:18:      "summary": "**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale \"sotto tutto\". G e il hinge locale tra QG blank e GE real_sourcing. La consecutio non e cercare un ponte QG generico; e misurare l'operatore di deposito che trasforma un blank quantistico-gravitazionale in sourcing reale.",
tools/lab_refresh_detector.py:6:Osservazione: le 10 coppie TQGE+R sono fisse; il lab produce ponti_evoluti
tools/lab_refresh_detector.py:11:- >= 1 ghost nuovo dall'ultimo refresh (shared_theories toccano TQGE+R) → TRIGGER
tools/lab_refresh_detector.py:95:    # Filter: shared_theories toccano TQGE+R
tools/data/promotions/promotion_20260507_1804.json:17:      "title": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di depos",
tools/data/promotions/promotion_20260507_1804.json:18:      "summary": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il blank, GE fornisce il sourcing reale, QE fornisce il lato gauge_phase. La faccia TQG e il contro-perimetro nativo: contiene QG blank ma resta senza deposito.",
tools/data/seme_backup_pre_run.json:123:      "id": "G_POTENZIALE_NULLA",
tools/data/seme_backup_pre_run.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_backup_pre_run.json:138:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_backup_pre_run.json:140:      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
tools/data/seme_backup_pre_run.json:146:      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/seme_backup_pre_run.json:147:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_backup_pre_run.json:150:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_backup_pre_run.json:152:      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
tools/data/seme_backup_pre_run.json:158:      "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/seme_backup_pre_run.json:159:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
tools/data/seme_backup_pre_run.json:162:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_backup_pre_run.json:164:      "origine": "cycle agent_20260507_1938: triadic_deposit_gate su facce TQGE",
tools/data/seme_backup_pre_run.json:170:      "id": "G_BLANK_SHELL_POLARITY_GATE",
tools/data/seme_backup_pre_run.json:171:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1957, il deposito Q->G va formulato come polarita del guscio blank: il lato QG apre TQG inerte (blank + wick_time + wick_time) e QGE depositante (blank + gauge_phase + real_sourcing). La polarizzazione astratta del guscio compare nel null count-preserving con p=0.2; l'assetto osservato QG/QGE/TQG compare con p=0.0167. Il claim valido e localizzazione di guscio, non rarita universale ne faccia QGE isolata.",
tools/data/seme_backup_pre_run.json:174:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_backup_pre_run.json:176:      "origine": "cycle agent_20260507_1957: blank_shell_polarity_gate su facce incidenti al blank TQGE",
tools/data/seme_backup_pre_run.json:218:    "Tensioni risolte: {'ORDER_DENOMINATOR_GATE', 'TRASCENDENZA_LIMITE', 'META_ASSERTION_GATE', 'DUALITA_DIPOLARE_VS_ILLUSORIA', 'BOUNDARY_LAYER_GATE', 'G_BLANK_SHELL_POLARITY_GATE', 'PERTURBATION_DENOMINATOR_GATE', 'TENSIONE_ENTITA', 'G_BLANK_TO_SOURCE_FACE_GATE', 'STRUCTURAL_CHECK_20260507', 'METRIC_TENSOR', 'G_POTENZIALE_NULLA', 'DUALITA_DET_DENOMINATOR_GATE', 'G_TRIADIC_DEPOSIT_GATE', 'PIANO_PRIMARIO_DUE_ASSIOMI', 'OBSERVABLE_REGISTRY', 'G_UNDERLAY_HINGE_GATE'}"
tools/data/valutatore_log.jsonl:42:{"ts": "2026-05-07T17:55:31.241833+00:00", "cycle_ref": "20260507_1751", "executed": false, "decision": "REDESIGN", "confidence": "medium", "reasoning": "Il ciclo ha falsificato la formulazione globale di G come underlay e ha prodotto una consecutio specifica: G come hinge locale tra QG blank e GE real_sourcing. Continuare sulla direzione corrente GUE/Poisson non attacca il nodo emerso; il prossimo ciclo deve testare l'operatore di deposito blank-to-source invece di accumulare dettaglio sul confine numerico.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Testare G_UNDERLAY_HINGE_GATE: cercare un osservabile di deposito che trasformi il blank QG in sourcing reale GE nel tetraedro TQGE, con controllo su facce senza QG come contro-perimetro", "reason": "La consecutio del ciclo non è un altro giro sul confine GUE/Poisson ma la verifica strutturale del hinge G emerso come nodo regressivo locale."}}, "notes": "Il redesign non cristallizza il claim: lo restringe a esperimento falsificabile. Vincoli minimi per il prossimo ciclo: usare TGE e TQE come controlli negativi, non usare centralità entropica come metrica primaria, dichiarare blank se non emerge osservabile canonico."}
tools/data/valutatore_log.jsonl:43:{"ts": "2026-05-07T18:09:10.088199+00:00", "cycle_ref": "20260507_1804", "executed": false, "decision": "NEXT_CYCLE", "confidence": "high", "reasoning": "Il ciclo ha prodotto una consecutio specifica e falsificabile: il deposito non vive nel ponte QG isolato ma nella faccia QGE come triade blank + gauge + source. Il null ha gia' impedito la cristallizzazione prematura del claim forte, quindi il passo corretto e' far girare un altro ciclo sul nuovo gate triadico invece di fermare o ridisegnare l'intera traiettoria.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Falsificare G_BLANK_TO_SOURCE_FACE_GATE su perimetri triadici: testare se blank + gauge + source produce deposito solo quando il source e' agganciato all'endpoint del blank, e cercare contro-esempi fuori da QGE.", "reason": "La nuova tensione e' matura come prossimo esperimento ma non come cristallizzazione; serve verifica cross-perimetro prima di promuoverla."}}, "notes": "Priorita' operativa: non ripetere il conteggio locale TQGE; costruire almeno un perimetro alternativo o surrogato strutturale che possa rompere il gate."}
tools/data/valutatore_log.jsonl:44:{"ts": "2026-05-07T19:43:12.823434+00:00", "cycle_ref": "20260507_1938", "executed": false, "decision": "NEXT_CYCLE", "confidence": "high", "reasoning": "Il ciclo ha prodotto una consecutio specifica e falsificabile: il denominatore non e' il ponte QG ma la faccia QGE con blank + gauge_phase + real_sourcing. Non richiede operatore perche' Bridge QA e health sono puliti, e la prossima mossa e' gia' indicata dall'Affinatore: testare se il gate di faccia regge quando il perimetro si estende a TQGE+R.", "action": {"type": "trigger_cycle", "detail": {"direction": "Estendere G_TRIADIC_DEPOSIT_GATE a TQGE+R", "tension": "G_TRIADIC_DEPOSIT_GATE", "experiment_hint": "verificare se il deposito resta una unita' di faccia con denominatore blank + gauge_phase + real_sourcing quando entra R, oppure se R rompe/localizza/sposta il gate", "avoid": "non trattare la rarita' numerica nel null come scoperta; usare il null solo come controllo anti-tautologico"}}, "notes": "Continuare nello stesso frame, ma il prossimo ciclo deve attaccare la trasferibilita' cross-perimetro del gate, non accumulare dettaglio locale su QGE."}
tools/data/valutatore_log.jsonl:45:{"ts": "2026-05-07T20:02:46.907451+00:00", "cycle_ref": "20260507_1957", "executed": false, "decision": "REDESIGN", "confidence": "medium", "reasoning": "Il ciclo ha prodotto una consecutio precisa: QG non basta come lato isolato, il nodo regressivo e' il guscio blank a due facce TQG/QGE. Pero' il risultato resta interno alla tassonomia TQGE e dichiara esplicitamente L5: non e' discovery fisica nuova; il passo successivo deve falsificare il gate su TQGE+R invece di accumulare dettaglio locale.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Falsificare G_BLANK_SHELL_POLARITY_GATE su perimetro TQGE+R: verificare se la polarita' blank-shell TQG inerte / QGE depositante sopravvive quando entra R, o se R sposta il denominatore regressivo.", "reason": "La consecutio del ciclo punta a TQGE+R; restare nel catalogo TQGE rischia deep-dive locale senza cross-dominio."}}, "notes": "Promuovere G_BLANK_SHELL_POLARITY_GATE come tensione attiva del prossimo ciclo; usare controlli count-preserving/shuffle e dichiarare esplicitamente se R conserva, rompe o rilocalizza il guscio blank."}
tools/data/agent_field_live.md:22:Risultato dell'incrocio TQGE+R appena eseguito. Le consecutio sono
tools/data/agent_field_live.md:53:- [G_POTENZIALE_NULLA] (0.85)  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 
tools/data/agent_field_live.md:67:  "perimetro" → G_BLANK_SHELL_POLARITY_GATE, ORDER_DENOMINATOR_GATE, G_UNDERLAY_HINGE_GATE, PERTURBATION_DENOMINATOR_GATE, DUALITA_DET_DENOMINATOR_GATE, BOUNDARY_LAYER_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_TRIADIC_DEPOSIT_GATE, META_ASSERTION_GATE
tools/data/agent_field_live.md:68:  "claim" → G_TRIADIC_DEPOSIT_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_BLANK_SHELL_POLARITY_GATE, BOUNDARY_LAYER_GATE
tools/data/agent_field_live.md:69:  "blank" → G_TRIADIC_DEPOSIT_GATE, ORDER_DENOMINATOR_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_UNDERLAY_HINGE_GATE
tools/data/agent_field_live.md:70:  "deposito" → G_TRIADIC_DEPOSIT_GATE, G_BLANK_SHELL_POLARITY_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_UNDERLAY_HINGE_GATE
tools/data/agent_field_live.md:71:  "operator-taxonomy" → G_TRIADIC_DEPOSIT_GATE, G_BLANK_SHELL_POLARITY_GATE, G_BLANK_TO_SOURCE_FACE_GATE, G_UNDERLAY_HINGE_GATE
tools/data/agent_field_live.md:84:Trovato: 1. **Il blank QG ha un guscio polarizzato nel catalogo TQGE osservato.** Le due facce incidenti al blank non sono equivalenti: TQG e lato inerte `blank + wick_time + wick_time`; QGE e lato di deposito `blank + gauge_phase + real_sourcing`.
tools/data/agent_field_live.md:86:Verdetto: **CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del g
tools/data/agent_field_live.md:89:Trovato: 1. **Il deposito QGE ha denominatore triadico.** Nel catalogo TQGE osservato, la faccia viva non contiene solo `blank + real_sourcing`: contiene anche `gauge_phase`. Il denominatore misurato e `blank + gauge_phase + real_sourcing`.
tools/data/agent_field_live.md:91:Verdetto: **CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato co
tools/data/agent_field_live.md:177:**Esperimento a massima informazione:** G_POTENZIALE_NULLA (score=0.703)
tools/data/agent_field_live.md:178:  G_POTENZIALE_NULLA: legge di scala da raffinare
tools/data/lab_data.json:78:      "id": "G_POTENZIALE_NULLA",
tools/data/lab_data.json:86:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sour",
tools/data/lab_data.json:89:      "porta": "G_POTENZIALE_NULLA"
tools/data/lab_data.json:92:      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/lab_data.json:93:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG",
tools/data/lab_data.json:96:      "porta": "G_POTENZIALE_NULLA"
tools/data/lab_data.json:99:      "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/lab_data.json:100:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real",
tools/data/lab_data.json:103:      "porta": "G_POTENZIALE_NULLA"
tools/data/lab_data.json:106:      "id": "G_BLANK_SHELL_POLARITY_GATE",
tools/data/lab_data.json:107:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1957, il deposito Q->G va formulato come polarita del guscio blank: il lato QG apre TQG inerte (blank + wick_time + wick_time) e QGE depositante (bl",
tools/data/lab_data.json:110:      "porta": "G_POTENZIALE_NULLA"
tools/data/lab_data.json:149:        "anti_claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G e vertice globale sotto tutto: Q, G ed E"
tools/data/lab_data.json:168:        "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/lab_data.json:176:        "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/lab_data.json:181:        "anti_claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate tr"
tools/data/lab_data.json:184:        "id": "G_BLANK_SHELL_POLARITY_GATE",
tools/data/lab_data.json:189:        "anti_claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1957, il deposito Q->G va formulato come polarit"
tools/data/lab_data.json:224:          "G_BLANK_SHELL_POLARITY_GATE",
tools/data/lab_data.json:225:          "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/lab_data.json:226:          "G_TRIADIC_DEPOSIT_GATE",
tools/data/lab_data.json:242:          "G_BLANK_SHELL_POLARITY_GATE",
tools/data/lab_data.json:243:          "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/lab_data.json:244:          "G_TRIADIC_DEPOSIT_GATE",
tools/data/lab_data.json:251:        "note": "10 dipoli risuonano: BOUNDARY_LAYER_GATE, DUALITA_DET_DENOMINATOR_GATE, G_BLANK_SHELL_POLARITY_GATE..."
tools/data/lab_data.json:259:          "G_BLANK_SHELL_POLARITY_GATE",
tools/data/lab_data.json:260:          "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/lab_data.json:261:          "G_TRIADIC_DEPOSIT_GATE",
tools/data/lab_data.json:268:        "note": "10 dipoli risuonano: BOUNDARY_LAYER_GATE, DUALITA_DET_DENOMINATOR_GATE, G_BLANK_SHELL_POLARITY_GATE..."
tools/data/lab_data.json:276:          "G_BLANK_SHELL_POLARITY_GATE",
tools/data/lab_data.json:277:          "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/lab_data.json:278:          "G_TRIADIC_DEPOSIT_GATE",
tools/data/lab_data.json:284:        "note": "9 dipoli risuonano: BOUNDARY_LAYER_GATE, DUALITA_DET_DENOMINATOR_GATE, G_BLANK_SHELL_POLARITY_GATE..."
tools/data/vincoli_decay_log.jsonl:1:{"timestamp": "2026-05-07T20:46:37.603315", "piano": 84, "tension_explored": "DUALITA_DIPOLARE_VS_ILLUSORIA", "warns": [{"id": "OBSERVABLE_REGISTRY", "counter": 4, "intensity": 1.0, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}, {"id": "PERTURBATION_DENOMINATOR_GATE", "counter": 4, "intensity": 0.95, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}, {"id": "BOUNDARY_LAYER_GATE", "counter": 4, "intensity": 0.93, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}, {"id": "ORDER_DENOMINATOR_GATE", "counter": 4, "intensity": 0.92, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}, {"id": "DUALITA_DET_DENOMINATOR_GATE", "counter": 4, "intensity": 0.86, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}, {"id": "META_ASSERTION_GATE", "counter": 4, "intensity": 0.88, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}, {"id": "G_UNDERLAY_HINGE_GATE", "counter": 4, "intensity": 0.84, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}, {"id": "G_BLANK_TO_SOURCE_FACE_GATE", "counter": 4, "intensity": 0.83, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}, {"id": "G_TRIADIC_DEPOSIT_GATE", "counter": 4, "intensity": 0.82, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}, {"id": "G_BLANK_SHELL_POLARITY_GATE", "counter": 4, "intensity": 0.81, "action": "WARN", "note": "B1 warn: vincolo stagnante 4p (archive a 5)"}], "n_archived": 0}
tools/data/triadic_deposit_gate_20260507_1938.json:5:      "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/data/triadic_deposit_gate_20260507_1938.json:6:      "tools/data/reports/agent_20260507_1804.md: QGE as blank + gauge + source face",
tools/data/triadic_deposit_gate_20260507_1938.json:12:      "count-preserving null by permuting edge modes over the six TQGE edges"
tools/data/triadic_deposit_gate_20260507_1938.json:26:        "triangle": "QGE",
tools/data/triadic_deposit_gate_20260507_1938.json:42:        "triangle": "QGE",
tools/data/triadic_deposit_gate_20260507_1938.json:148:        "triangle": "QGE",
tools/data/triadic_deposit_gate_20260507_1938.json:167:    "p_triadic_deposit_is_QGE": 0.05,
tools/data/triadic_deposit_gate_20260507_1938.json:168:    "p_binary_blank_source_is_QGE": 0.2,
tools/data/triadic_deposit_gate_20260507_1938.json:170:      "QGE": 6,
tools/data/triadic_deposit_gate_20260507_1938.json:177:      "QGE": 24,
tools/data/blank_shell_polarity_gate_20260507_1957.json:5:      "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/data/blank_shell_polarity_gate_20260507_1957.json:6:      "tools/data/reports/agent_20260507_1938.md: QGE triadic deposit face",
tools/data/blank_shell_polarity_gate_20260507_1957.json:12:      "count-preserving null by permuting edge modes over the six TQGE edges"
tools/data/blank_shell_polarity_gate_20260507_1957.json:41:        "face": "QGE",
tools/data/blank_shell_polarity_gate_20260507_1957.json:62:        "face": "QGE",
tools/data/blank_shell_polarity_gate_20260507_1957.json:92:    "observed_QGE_deposit_TQG_inert": true
tools/data/blank_shell_polarity_gate_20260507_1957.json:98:    "p_observed_QGE_deposit_TQG_inert": 0.016666666666666666,
tools/data/blank_shell_polarity_gate_20260507_1957.json:106:      "QGE": 6,
tools/data/blank_shell_polarity_gate_20260507_1957.json:113:      "QGE": 18,
tools/data/reports/agent_20260507_1957.md:4:**Tension explored**: G_POTENZIALE_NULLA (0.85)
tools/data/reports/agent_20260507_1957.md:6:**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260507_1957.md:12:Nel perimetro TQGE operator-taxonomy, il denominatore QGE e solo faccia triadica isolata, o il blank QG ha un guscio polarizzato: una faccia inerte `blank + wick_time + wick_time` e una faccia di deposito `blank + gauge_phase + real_sourcing`?
tools/data/reports/agent_20260507_1957.md:16:- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.
tools/data/reports/agent_20260507_1957.md:19:- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.
tools/data/reports/agent_20260507_1957.md:26:| Assetto osservato `QGE` deposito + `TQG` inerte | si | 2/120 = 0.0167 |
tools/data/reports/agent_20260507_1957.md:33:| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
tools/data/reports/agent_20260507_1957.md:45:1. **Il blank QG ha un guscio polarizzato nel catalogo TQGE osservato.** Le due facce incidenti al blank non sono equivalenti: TQG e lato inerte `blank + wick_time + wick_time`; QGE e lato di deposito `blank + gauge_phase + real_sourcing`.
tools/data/reports/agent_20260507_1957.md:47:3. **La localizzazione QG/QGE/TQG e piu stretta della sola polarizzazione.** L'assetto osservato in cui il blank e GQ, la faccia deposito e QGE, e la faccia inerte e TQG appare in 2/120 assegnazioni. Il denominatore non vive nel lato QG isolato: vive nella polarita delle due facce che quel lato apre.
tools/data/reports/agent_20260507_1957.md:50:**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del guscio blank. QG non e ponte generico; e lato comune tra TQG inerte e QGE depositante. Il gate triadico QGE resta il lato attivo del deposito, ma il nodo regressivo e il guscio a due facce del blank, non la faccia QGE isolata.
tools/data/reports/agent_20260507_1957.md:53:- **Due radici**: TQG inerte `blank + wick_time + wick_time` · QGE depositante `blank + gauge_phase + real_sourcing`
tools/data/reports/agent_20260507_1957.md:56:- **Campo di possibilita**: qui diventa possibile misurare G come polarita locale di guscio nei perimetri TQGE+R; qui diventa non-possibile trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG che lo polarizza.
tools/data/reports/agent_20260507_1751.md:1:# Agent Report — TQGE Underlay Gate
tools/data/reports/agent_20260507_1751.md:4:**Tension explored**: G_POTENZIALE_NULLA (0.85)
tools/data/reports/agent_20260507_1751.md:6:**observables_used**: [] — tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260507_1751.md:12:Nel tetraedro TQGE, G ha una firma operativa distinta dai vertici ordinari quando i sei lati sono classificati per tipo di operatore: Wick-tempo, fase-gauge, sourcing reale, blank?
tools/data/reports/agent_20260507_1751.md:16:- Scope: sei lati TQGE depositati nel contesto Lab.
tools/data/reports/agent_20260507_1751.md:28:| Triangoli vuoti | TQG, QGE | — |
tools/data/reports/agent_20260507_1751.md:43:2. **G e il solo hinge `blank + real_sourcing` nel perimetro TQGE.** Il vuoto QG e il sourcing reale GE si incontrano solo in G. Questo dato e verificato nel catalogo dei lati; il null mostra che la congiunzione non e rara in astratto, quindi il contenuto non e "unicita statistica", ma localizzazione del nodo regressivo.
tools/data/reports/agent_20260507_1751.md:44:3. **Il vuoto propaga per facce, non per tutto il tetraedro.** I triangoli TQG e QGE sono vuoti perche contengono QG; TGE e TQE restano pieni. G non rende possibili tutti i ponti: porta il punto dove il vuoto QG tocca il sourcing reale GE.
tools/data/reports/agent_20260507_1751.md:47:**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale "sotto tutto". G e il hinge locale tra QG blank e GE real_sourcing. La consecutio non e cercare un ponte QG generico; e misurare l'operatore di deposito che trasforma un blank quantistico-gravitazionale in sourcing reale.
tools/data/reports/agent_20260507_1751.md:53:- **Campo di possibilita**: qui diventa possibile cercare l'operatore di deposito Q->G come passaggio blank-to-source; qui diventa non-possibile trattare G come prova globale di underlay su tutti i lati TQGE.
tools/data/reports/falsifier_20260507_1957.json:9:      "claim": "\"CONSTRAINT ... QG non e ponte generico\" e \"qui diventa non-possibile trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG\"",
tools/data/reports/falsifier_20260507_1957.json:11:      "suggestion": "Riformulare come vincolo locale di report/perimetro: \"nel catalogo TQGE osservato QGE non va dichiarato denominatore completo senza TQG\". Nel prossimo ciclo testare se esistono cataloghi/permutazioni con QGE depositante senza guscio inerte prima di usare linguaggio di non-possibilita."
tools/data/reports/falsifier_20260507_1957.json:17:      "evidence": "L'esperimento osserva un solo catalogo TQGE e un null combinatorio; il null include contro-pattern non depositanti e alternative, ma non dimostra che ogni deposito richieda wick-wick sull'altra faccia. \"Richiede\" eccede i dati visibili.",
tools/data/reports/falsifier_20260507_1957.json:18:      "suggestion": "Separare osservato da universale: \"nel catalogo osservato il deposito QGE compare con blank condiviso e TQG wick-wick\". Aggiungere un check su tutti i perimetri TQGE+R o su cataloghi storici per cercare eccezioni."
tools/data/seme.json:123:      "id": "G_POTENZIALE_NULLA",
tools/data/seme.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme.json:138:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme.json:140:      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
tools/data/seme.json:146:      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/seme.json:147:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme.json:150:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme.json:152:      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
tools/data/seme.json:158:      "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/seme.json:159:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
tools/data/seme.json:162:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme.json:164:      "origine": "cycle agent_20260507_1938: triadic_deposit_gate su facce TQGE",
tools/data/seme.json:170:      "id": "G_BLANK_SHELL_POLARITY_GATE",
tools/data/seme.json:171:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1957, il deposito Q->G va formulato come polarita del guscio blank: il lato QG apre TQG inerte (blank + wick_time + wick_time) e QGE depositante (blank + gauge_phase + real_sourcing). La polarizzazione astratta del guscio compare nel null count-preserving con p=0.2; l'assetto osservato QG/QGE/TQG compare con p=0.0167. Il claim valido e localizzazione di guscio, non rarita universale ne faccia QGE isolata.",
tools/data/seme.json:174:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme.json:176:      "origine": "cycle agent_20260507_1957: blank_shell_polarity_gate su facce incidenti al blank TQGE",
tools/data/seme.json:218:    "Tensioni risolte: {'ORDER_DENOMINATOR_GATE', 'TRASCENDENZA_LIMITE', 'META_ASSERTION_GATE', 'DUALITA_DIPOLARE_VS_ILLUSORIA', 'BOUNDARY_LAYER_GATE', 'G_BLANK_SHELL_POLARITY_GATE', 'PERTURBATION_DENOMINATOR_GATE', 'TENSIONE_ENTITA', 'G_BLANK_TO_SOURCE_FACE_GATE', 'STRUCTURAL_CHECK_20260507', 'METRIC_TENSOR', 'G_POTENZIALE_NULLA', 'DUALITA_DET_DENOMINATOR_GATE', 'G_TRIADIC_DEPOSIT_GATE', 'PIANO_PRIMARIO_DUE_ASSIOMI', 'OBSERVABLE_REGISTRY', 'G_UNDERLAY_HINGE_GATE'}"
tools/data/blank_to_source_hinge_20260507_1804.json:5:      "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/data/blank_to_source_hinge_20260507_1804.json:12:      "count-preserving null by permuting edge modes over the six TQGE edges"
tools/data/blank_to_source_hinge_20260507_1804.json:72:        "triangle": "QGE",
tools/data/blank_to_source_hinge_20260507_1804.json:136:        "triangle": "QGE",
tools/data/blank_to_source_hinge_20260507_1804.json:176:      "QGE": 24,
tools/data/g2_log.jsonl:1:{"ts": "2026-05-07T20:42:29.511355+00:00", "cycle_ref": "20260507_2042", "recent_tensions": [{"cycle": "20260507_1957", "tension": "G_POTENZIALE_NULLA"}, {"cycle": "20260507_1938", "tension": "G_POTENZIALE_NULLA"}, {"cycle": "20260507_1804", "tension": "G_POTENZIALE_NULLA"}, {"cycle": "20260507_1751", "tension": "G_POTENZIALE_NULLA"}, {"cycle": "20260507_1458", "tension": "META"}], "ref_tension": "G_POTENZIALE_NULLA", "streak": 4, "augmented": true, "decision": "AUGMENTED"}
tools/data/g2_log.jsonl:2:{"ts": "2026-05-07T21:20:11.803726+00:00", "cycle_ref": "20260507_2120", "recent_tensions": [{"cycle": "20260507_2042", "tension": "DUALITA_DIPOLARE_VS_ILLUSORIA"}, {"cycle": "20260507_1957", "tension": "G_POTENZIALE_NULLA"}, {"cycle": "20260507_1938", "tension": "G_POTENZIALE_NULLA"}, {"cycle": "20260507_1804", "tension": "G_POTENZIALE_NULLA"}, {"cycle": "20260507_1751", "tension": "G_POTENZIALE_NULLA"}], "ref_tension": "DUALITA_DIPOLARE_VS_ILLUSORIA", "streak": 1, "augmented": false, "decision": "PASS"}
tools/data/biconi/bicono_20260507_1938.json:3:  "singolare": "QGE come faccia in cui il vuoto QG diventa depositabile perche passa attraverso gauge e sorgente.",
tools/data/biconi/bicono_20260507_1938.json:6:    "raw": "qui diventa possibile cercare gate di deposito come unita di faccia nei perimetri TQGE+R; qui diventa non-possibile usare l'adiacenza blank-source come denominatore sufficiente.",
tools/data/biconi/bicono_20260507_1938.json:7:    "possibile": "cercare gate di deposito come unita di faccia nei perimetri TQGE+R",
tools/data/reports/agent_20260507_0803.md:127:`G_POTENZIALE_NULLA`, but separate two quantities from the start:
tools/data/biconi/bicono_20260507_1804.json:3:  "singolare": "la faccia QGE, dove vuoto quantistico-gravitazionale, fase gauge e sorgente reale stanno nello stesso triangolo.",
tools/data/biconi/bicono_20260507_1751.json:6:    "raw": "qui diventa possibile cercare l'operatore di deposito Q->G come passaggio blank-to-source; qui diventa non-possibile trattare G come prova globale di underlay su tutti i lati TQGE.",
tools/data/biconi/bicono_20260507_1751.json:8:    "non_possibile": "trattare G come prova globale di underlay su tutti i lati TQGE"
tools/data/biconi/bicono_20260507_1957.json:2:  "radici": "TQG inerte `blank + wick_time + wick_time` · QGE depositante `blank + gauge_phase + real_sourcing`",
tools/data/biconi/bicono_20260507_1957.json:6:    "raw": "qui diventa possibile misurare G come polarita locale di guscio nei perimetri TQGE+R; qui diventa non-possibile trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG che lo polarizza.",
tools/data/biconi/bicono_20260507_1957.json:7:    "possibile": "misurare G come polarita locale di guscio nei perimetri TQGE+R",
tools/data/biconi/bicono_20260507_1957.json:8:    "non_possibile": "trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG che lo polarizza"
tools/data/seme_axioms.json:345:    "id": "TETRAEDRO_TQGE",
tools/data/seme_axioms.json:489:    "id": "G_POTENZIALE_NULLA",
tools/data/seme_axioms.json:598:    "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_axioms.json:606:    "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/seme_axioms.json:607:    "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_axioms.json:615:    "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/seme_axioms.json:616:    "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
tools/data/reports/agent_20260507_1804.md:4:**Tension explored**: G_POTENZIALE_NULLA (0.85)
tools/data/reports/agent_20260507_1804.md:6:**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260507_1804.md:16:- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.
tools/data/reports/agent_20260507_1804.md:19:- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.
tools/data/reports/agent_20260507_1804.md:29:| Faccia di deposito | QGE | 24/120 per ogni faccia; 24/120 none |
tools/data/reports/agent_20260507_1804.md:43:| QGE | blank + gauge_phase + real_sourcing | deposito |
tools/data/reports/agent_20260507_1804.md:49:1. **Q->G e orientabile solo come passaggio locale del lato blank.** Nel perimetro TQGE, Q e l'endpoint senza real_sourcing del blank; G e l'endpoint con real_sourcing. Il passaggio misurato e Q->G.
tools/data/reports/agent_20260507_1804.md:50:2. **L'orientabilita blank-to-source non e rara nel null.** Un lato blank adiacente a un lato real_sourcing appare in 0.8000 delle assegnazioni count-preserving. Quindi il claim forte non e "blank-to-source esiste"; il claim valido e "nel catalogo TQGE osservato, il blank-to-source cade su Q->G".
tools/data/reports/agent_20260507_1804.md:51:3. **Il deposito vive nella faccia QGE, non nel ponte QG.** QGE contiene `blank + gauge_phase + real_sourcing`; TQG contiene lo stesso blank ma nessuna sorgente. Il vuoto QG non basta: serve il terzo vertice E come sorgente reale agganciata a G.
tools/data/reports/agent_20260507_1804.md:54:**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il blank, GE fornisce il sourcing reale, QE fornisce il lato gauge_phase. La faccia TQG e il contro-perimetro nativo: contiene QG blank ma resta senza deposito.
tools/data/reports/agent_20260507_1804.md:58:- **Singolare**: la faccia QGE, dove vuoto quantistico-gravitazionale, fase gauge e sorgente reale stanno nello stesso triangolo.
tools/data/reports/agent_20260507_1804.md:65:- **L3**: il claim precedente non viene salvato come underlay globale. Il nodo regressivo e il denominatore relazionale: faccia QGE, non vertice G.
tools/data/alignment_markers.jsonl:7:{"event": "close", "ctx": "tm3", "closed_at": "2026-04-21T15:11:42.244430", "result": "Batch done. 30 tensioni → 10 canonical_multi (attivano bridge TQGE+R, QxT dominante con 5/10), 10 canonical_mono (1 teoria), 5 excluded (meta), 5 unmapped (composite/structural — richiedono review operatore). Coverage 83%. Report JSON salvato. Insight: QxT è pair dominante — coerente con cap saturato in conoscenza_teorie.", "opened_at": "2026-04-21T15:10:55.481246", "intent": "Batch projection delle 30 tensioni del seme su bicono_projection.py per screening"}
tools/data/reports/agent_20260505_1022.md:9:G_POTENZIALE_NULLA: score=0.703
tools/data/lab_registro.json:64:        "QxG è l'unico lato mancante della struttura chiusa TQGE",
tools/data/lab_registro.json:155:        "deposito": "α è il territorio, le dimensioni sono la mappa (Godel). α è l'unico numero libero nel tetraedro — tutto il resto è fissato dalla struttura. Le potenze di N=α/α_G producono le scale cosmologiche (Dirac). La vacuum catastrophe ≈ N³. Il numero di barioni ≈ N². Tutto scala con il rapporto EM/gravità — e quel rapporto richiede m_p, che viene da FUORI delle 5 costanti (QCD). Il tetraedro TQGE non contiene la massa del protone."
tools/data/lab_registro.json:167:        "struttura": "S non ha perno i → non estende il tetraedro TQGE. S opera dentro Q — è un contenuto, non una struttura. Come R è il frame, S è il contenuto di Q. Il tetraedro resta TQGE. S e R sono di natura diversa: R = frame (contiene ma non ruota), S = contenuto (opera dentro Q senza aggiungere struttura).",
tools/data/lab_registro.json:190:            "72.5° ≈ pentagonale: alla scala di Planck servono tutte e 5 le teorie (TQGE+R)",
tools/data/reports/mapping_validation_2026-04-21.json:320:    "tension": "G_POTENZIALE_NULLA",
tools/data/reports/agent_20260507_1938.md:4:**Tension explored**: G_POTENZIALE_NULLA (0.85)
tools/data/reports/agent_20260507_1938.md:6:**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var
tools/data/reports/agent_20260507_1938.md:12:Nel perimetro TQGE operator-taxonomy, il deposito Q->G richiede solo contatto `blank + real_sourcing`, o richiede la faccia completa `blank + gauge_phase + real_sourcing`?
tools/data/reports/agent_20260507_1938.md:16:- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.
tools/data/reports/agent_20260507_1938.md:19:- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.
tools/data/reports/agent_20260507_1938.md:24:| Faccia triadica `blank + gauge_phase + real_sourcing` | QGE | p(any)=0.2000; p(QGE)=0.0500 |
tools/data/reports/agent_20260507_1938.md:25:| Faccia binaria `blank + real_sourcing` | QGE | p(any)=0.8000; p(QGE)=0.2000 |
tools/data/reports/agent_20260507_1938.md:34:| QGE | blank + gauge_phase + real_sourcing | deposito triadico |
tools/data/reports/agent_20260507_1938.md:43:| triadic face QGE | 6/120 |
tools/data/reports/agent_20260507_1938.md:52:1. **Il deposito QGE ha denominatore triadico.** Nel catalogo TQGE osservato, la faccia viva non contiene solo `blank + real_sourcing`: contiene anche `gauge_phase`. Il denominatore misurato e `blank + gauge_phase + real_sourcing`.
tools/data/reports/agent_20260507_1938.md:54:3. **Le tre facce escluse separano i ruoli.** TQG porta il blank senza sorgente; TGE porta la sorgente senza blank; TQE porta gauge senza deposito. QGE e il solo punto del catalogo osservato dove i tre ruoli sono nella stessa faccia.
tools/data/reports/agent_20260507_1938.md:57:**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato non basta; il contatto `blank + real_sourcing` non basta; il deposito osservato e QGE come `blank + gauge_phase + real_sourcing`. Il claim non e rarita universale: e localizzazione del denominatore nel catalogo TQGE osservato.
tools/data/reports/agent_20260507_1938.md:61:- **Singolare**: QGE come faccia in cui il vuoto QG diventa depositabile perche passa attraverso gauge e sorgente.
tools/data/reports/agent_20260507_1938.md:63:- **Campo di possibilita**: qui diventa possibile cercare gate di deposito come unita di faccia nei perimetri TQGE+R; qui diventa non-possibile usare l'adiacenza blank-source come denominatore sufficiente.
tools/data/reports/agent_20260507_1938.md:66:- **L1**: nessun assoluto fuori perimetro. "Solo" e usato per il catalogo osservato TQGE; il null mostra altre facce triadiche possibili per permutazione.
tools/data/observatorio/domandatore_unTouched_20260507_095914.md:11:--- G_POTENZIALE_NULLA ---
tools/data/observatorio/domandatore_unTouched_20260507_095914.md:12:  TENSIONE: G_POTENZIALE_NULLA [0.85]
tools/data/observatorio/domandatore_unTouched_20260507_095914.md:15:    [duale   ] GEN_GAP_RATIO_FALSIFICA_G_POTENZIALE_NULLA: Il duale di "G e il potenziale di tutto come nulla - permett
tools/data/observatorio/domandatore_unTouched_20260507_095914.md:16:    [confine ] BOUNDARY_G_POTENZIALE_NULLA: Tra gli estremi del claim "G e il potenziale di tutto come n
tools/data/observatorio/domandatore_unTouched_20260507_095914.md:17:    [dominio ] DOMAIN_PHOTONIC_G_POTENZIALE_NULLA: L'effetto "G e il potenziale di tutto come nulla - " si mani
tools/data/observatorio/domandatore_unTouched_20260507_095914.md:18:    [rottura ] BREAK_G_POTENZIALE_NULLA: Il claim "G e il potenziale di tutto come nulla - permette i
tools/data/observatorio/domandatore_unTouched_20260507_095914.md:19:    [scala   ] SCALE_G_POTENZIALE_NULLA: L'effetto in "G e il potenziale di tutto come nulla - permet
tools/data/observatorio/lazarus_cimitero_20260507_100015.md:29:- G_POTENZIALE_NULLA — G come potenziale del nulla (X4 +G/-G come dipolo chirale → cimitero, ma il G come potenziale era citato anche lì)
tools/data/tqge_underlay_gate_20260507_1751.json:5:      "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/data/tqge_underlay_gate_20260507_1751.json:67:    "QGE"
tools/data/tension_to_theory.json:3:    "purpose_it": "Mapping semantico tensione → teorie TQGE+R coinvolte. Layer che traduce scoperte del lab numerico in annotazioni sulle pairs del grafo conoscenza. Curato da operatore/TM1, ispezionabile. Deterministico — no LLM.",
tools/data/tension_to_theory.json:4:    "purpose_en": "Semantic mapping of tensions to TQGE+R theories involved. Layer that translates numerical lab discoveries into annotations on the knowledge graph pairs. Curated by operator/TM1, inspectable. Deterministic — no LLM.",
tools/data/tension_to_theory.json:24:    "G_POTENZIALE_NULLA":                 { "theories": ["G"],        "note_it": "potenziale gravitazionale al nulla — singolarità",                                          "note_en": "gravitational potential at null — singularity" },
tools/data/evolution/evolution_20260507_1957.md:1:Ho aggiornato [evolution_report.md](/opt/MM_D-ND/tools/evolution_report.md) con un report breve da Affinatore: osserva il passo, segnala la sola latenza strutturale sulla traccia provider-agnostica, colloca il nodo regressivo nel deposito del cambio di denominatore, e chiude con una consecutio verso TQGE+R.
tools/data/evolution/evolution_20260507_1804.md:3:Il report osserva il passo come traiettoria: dal ponte QG isolato alla faccia QGE come denominatore triadico, con attrito minimo sul null generico e consecutio orientata a `blank + gauge + source`.
tools/data/lab_graph.json:456:        "source_tension": "G_POTENZIALE_NULLA",
tools/data/lab_graph.json:545:        "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del g",
tools/data/lab_graph.json:546:        "findings": "1. **Il blank QG ha un guscio polarizzato nel catalogo TQGE osservato.** Le due facce incidenti al blank non sono equivalenti: TQG e lato inerte `blank + wick_time + wick_time`; QGE e lato di deposito `blank + gauge_phase + real_sourcing`.\n2. **La polarizzazione del guscio non e rara come forma astr",
tools/data/lab_graph.json:547:        "annotation": "Vincolo: **CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy,",
tools/data/lab_graph.json:548:        "annotation_en": "Constraint: **CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy,",
tools/data/lab_graph.json:554:        "source_tension": "G_POTENZIALE_NULLA",
tools/data/lab_graph.json:594:        "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato co",
tools/data/lab_graph.json:595:        "findings": "1. **Il deposito QGE ha denominatore triadico.** Nel catalogo TQGE osservato, la faccia viva non contiene solo `blank + real_sourcing`: contiene anche `gauge_phase`. Il denominatore misurato e `blank + gauge_phase + real_sourcing`.\n2. **Il contatto binario e debole come gate.** Nel null count-preser",
tools/data/lab_graph.json:596:        "annotation": "Vincolo: **CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxo",
tools/data/lab_graph.json:597:        "annotation_en": "Constraint: **CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxo",
tools/data/lab_graph.json:603:        "source_tension": "G_POTENZIALE_NULLA",
tools/data/lab_graph.json:643:        "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG gen",
tools/data/lab_graph.json:644:        "findings": "1. **Q->G e orientabile solo come passaggio locale del lato blank.** Nel perimetro TQGE, Q e l'endpoint senza real_sourcing del blank; G e l'endpoint con real_sourcing. Il passaggio misurato e Q->G.\n2. **L'orientabilita blank-to-source non e rara nel null.** Un lato blank adiacente a un lato real_so",
tools/data/lab_graph.json:645:        "annotation": "Vincolo: **CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, ",
tools/data/lab_graph.json:646:        "annotation_en": "Constraint: **CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, ",
tools/data/lab_graph.json:652:        "source_tension": "G_POTENZIALE_NULLA",
tools/data/lab_graph.json:686:        "label": "TQGE Underlay Gate",
tools/data/lab_graph.json:687:        "label_en": "TQGE Underlay Gate",
tools/data/lab_graph.json:688:        "label_short": "TQGE Underlay Gate",
tools/data/lab_graph.json:689:        "label_short_en": "TQGE Underlay Gate",
tools/data/lab_graph.json:692:        "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale \"sotto tutto\". G e il hinge locale",
tools/data/lab_graph.json:693:        "findings": "1. **G non e il vertice unico della diversita operatoria.** Q, G ed E hanno tutti tre modi incidenti distinti. Il claim \"G sotto tutto\" non passa come centralita entropica locale.\n2. **G e il solo hinge `blank + real_sourcing` nel perimetro TQGE.** Il vuoto QG e il sourcing reale GE si incontrano so",
tools/data/lab_graph.json:694:        "annotation": "Vincolo: **CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come ",
tools/data/lab_graph.json:695:        "annotation_en": "Constraint: **CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come ",
tools/data/lab_graph.json:701:        "source_tension": "G_POTENZIALE_NULLA",
tools/data/lab_graph.json:1144:      "tensions": "G_POTENZIALE_NULLA (0.85)",
tools/data/lab_graph.json:1145:      "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del guscio blank. QG non e ponte generico; e lato comun",
tools/data/lab_graph.json:1146:      "verdict_en": "**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del guscio blank. QG non e ponte generico; e lato comun",
tools/data/lab_graph.json:1147:      "findings": "1. **Il blank QG ha un guscio polarizzato nel catalogo TQGE osservato.** Le due facce incidenti al blank non sono equivalenti: TQG e lato inerte `blank + wick_time + wick_time`; QGE e lato di deposito `blank + gauge_phase + real_sourcing`.\n2. **La polarizzazione del guscio non e rara come forma astratta.** Nel null count-preserving, il pattern `deposit_gauge_real + inert_wick_pair` appare in 24/12",
tools/data/lab_graph.json:1148:      "content_preview": "# Agent Report — Blank Shell Polarity Gate\n**Date**: 2026-05-07 19:57\n**Piano**: 83\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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 ",
tools/data/lab_graph.json:1149:      "content_full": "# Agent Report — Blank Shell Polarity Gate\n**Date**: 2026-05-07 19:57\n**Piano**: 83\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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.\n\n## Question\nNel perimetro TQGE operator-taxonomy, il denominatore QGE e solo faccia triadica isolata, o il blank QG ha un guscio polarizzato: una faccia inerte `blank + wick_time + wick_time` e una faccia di deposito `blank + gauge_phase + real_sourcing`?\n\n## Experiment Design\n- Strumento: `tools/exp_blank_shell_polarity_gate.py`\n- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.\n- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/data/reports/agent_20260507_1938.md`, `tools/data/triadic_deposit_gate_20260507_1938.json`.\n- Metrica: le due facce incidenti al lato `blank`; classificazione del lato non-blank di ciascuna faccia in `inert_wick_pair`, `deposit_gauge_real`, `source_without_gauge`, `gauge_without_source`.\n- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.\n\n## Results\n| Test | Osservato | Null count-preserving |\n|---|---:|---:|\n| Lato blank | GQ | p(blank edge = GQ)=0.1667 |\n| Guscio blank polarizzato `deposit_gauge_real + inert_wick_pair` | si | 24/120 = 0.2000 |\n| Assetto osservato `QGE` deposito + `TQG` inerte | si | 2/120 = 0.0167 |\n\nFacce del guscio blank osservato:\n\n| Faccia | Modi non-blank | Classe |\n|---|---|---|\n| TQG | wick_time + wick_time | inert_wick_pair |\n| QGE | gauge_phase + real_sourcing | deposit_gauge_real |\n\nPattern nel null:\n\n| Pattern guscio blank | Conteggio |\n|---|---:|\n| deposit_gauge_real + inert_wick_pair | 24/120 |\n| gauge_without_source + inert_wick_pair | 24/120 |\n| inert_wick_pair + source_without_gauge | 24/120 |\n| gauge_without_source + source_without_gauge | 48/120 |\n\n## Key Findings\n1. **Il blank QG ha un guscio polarizzato nel catalogo TQGE osservato.** Le due facce incidenti al blank non sono equivalenti: TQG e lato inerte `blank + wick_time + wick_time`; QGE e lato di deposito `blank + gauge_phase + real_sourcing`.\n2. **La polarizzazione del guscio non e rara come forma astratta.** Nel null count-preserving, il pattern `deposit_gauge_real + inert_wick_pair` appare in 24/120 assegnazioni. Il claim valido non e rarita universale della polarizzazione.\n3. **La localizzazione QG/QGE/TQG e piu stretta della sola polarizzazione.** L'assetto osservato in cui il blank e GQ, la faccia deposito e QGE, e la faccia inerte e TQG appare in 2/120 assegnazioni. Il denominatore non vive nel lato QG isolato: vive nella polarita delle due facce che quel lato apre.\n\n## Verdict\n**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del guscio blank. QG non e ponte generico; e lato comune tra TQG inerte e QGE depositante. Il gate triadico QGE resta il lato attivo del deposito, ma il nodo regressivo e il guscio a due facce del blank, non la faccia QGE isolata.\n\n## Bicono della scoperta\n- **Due radici**: TQG inerte `blank + wick_time + wick_time` · QGE depositante `blank + gauge_phase + real_sourcing`\n- **Singolare**: QG come lato comune dove il blank non decide da solo; apre due facce e la loro differenza determina il passaggio.\n- **Invariante di passaggio**: il deposito richiede il blank condiviso con una faccia gauge-source mentre l'altra faccia resta wick-wick.\n- **Campo di possibilita**: qui diventa possibile misurare G come polarita locale di guscio nei perimetri TQGE+R; qui diventa non-possibile trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG che lo polarizza.\n\n## Self-Falsifier Lenses\n- **L1**: nessun \"zero\", \"sempre\" o \"impossibile\" fuori perimetro. Il null mostra polarizzazioni alternative e pattern non polarizzati.\n- **L2**: confronto espresso in conteggi grezzi e probabilita sullo stesso spazio di 120 assegnazioni.\n- **L3**: il claim precedente non viene salvato cambiando definizione; viene ristretto al nodo regressivo del guscio blank.\n- **L4**: i contro-pattern del null sono espliciti: `gauge_without_source + source_without_gauge` domina con 48/120.\n- **L5**: classificazione interna del catalogo D-ND; non e discovery fisica nuova su gauge, sorgente o gravitazione.\n\n## Files\n- `tools/exp_blank_shell_polarity_gate.py`\n- `tools/data/blank_shell_polarity_gate_20260507_1957.json`\n- `tools/data/reports/agent_20260507_1957.md`\n",
tools/data/lab_graph.json:1161:          "text": "Nel perimetro TQGE operator-taxonomy, il denominatore QGE e solo faccia triadica isolata, o il blank QG ha un guscio polarizzato: una faccia inerte `b"
tools/data/lab_graph.json:1167:          "text": "- Strumento: `tools/exp_blank_shell_polarity_gate.py`\n- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.\n- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`,"
tools/data/lab_graph.json:1179:          "text": "**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del g"
tools/data/lab_graph.json:1189:      "tensions": "G_POTENZIALE_NULLA (0.85)",
tools/data/lab_graph.json:1190:      "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato no",
tools/data/lab_graph.json:1191:      "verdict_en": "**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato no",
tools/data/lab_graph.json:1192:      "findings": "1. **Il deposito QGE ha denominatore triadico.** Nel catalogo TQGE osservato, la faccia viva non contiene solo `blank + real_sourcing`: contiene anche `gauge_phase`. Il denominatore misurato e `blank + gauge_phase + real_sourcing`.\n2. **Il contatto binario e debole come gate.** Nel null count-preserving, una faccia `blank + real_sourcing` appare in 0.8000 delle assegnazioni; la faccia triadica app",
tools/data/lab_graph.json:1193:      "content_preview": "# Agent Report — Triadic Deposit Gate\n**Date**: 2026-05-07 19:38\n**Piano**: 80\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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 re",
tools/data/lab_graph.json:1194:      "content_full": "# Agent Report — Triadic Deposit Gate\n**Date**: 2026-05-07 19:38\n**Piano**: 80\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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.\n\n## Question\nNel perimetro TQGE operator-taxonomy, il deposito Q->G richiede solo contatto `blank + real_sourcing`, o richiede la faccia completa `blank + gauge_phase + real_sourcing`?\n\n## Experiment Design\n- Strumento: `tools/exp_triadic_deposit_gate.py`\n- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.\n- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/data/reports/agent_20260507_1804.md`, `tools/evolution_report.md`.\n- Metrica: facce triadiche con `blank + gauge_phase + real_sourcing`; facce binarie con `blank + real_sourcing`; facce contro-perimetro `blank` senza sorgente, sorgente senza `blank`, gauge senza deposito.\n- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.\n\n## Results\n| Test | Osservato | Null count-preserving |\n|---|---:|---:|\n| Faccia triadica `blank + gauge_phase + real_sourcing` | QGE | p(any)=0.2000; p(QGE)=0.0500 |\n| Faccia binaria `blank + real_sourcing` | QGE | p(any)=0.8000; p(QGE)=0.2000 |\n| Faccia con blank senza sorgente | TQG | - |\n| Faccia con sorgente senza blank | TGE | - |\n| Faccia con gauge senza deposito | TQE | - |\n\nFacce osservate:\n\n| Faccia | Modi | Stato |\n|---|---|---|\n| QGE | blank + gauge_phase + real_sourcing | deposito triadico |\n| TQG | blank + wick_time + wick_time | blank senza sorgente |\n| TGE | real_sourcing + wick_time + wick_time | sorgente senza blank |\n| TQE | gauge_phase + wick_time + wick_time | gauge senza deposito |\n\nPattern nel null:\n\n| Pattern | Conteggio |\n|---|---:|\n| triadic face QGE | 6/120 |\n| triadic face TQG | 6/120 |\n| triadic face TQE | 6/120 |\n| triadic face TGE | 6/120 |\n| no triadic face | 96/120 |\n| binary blank-source on any face | 96/120 |\n| no binary blank-source face | 24/120 |\n\n## Key Findings\n1. **Il deposito QGE ha denominatore triadico.** Nel catalogo TQGE osservato, la faccia viva non contiene solo `blank + real_sourcing`: contiene anche `gauge_phase`. Il denominatore misurato e `blank + gauge_phase + real_sourcing`.\n2. **Il contatto binario e debole come gate.** Nel null count-preserving, una faccia `blank + real_sourcing` appare in 0.8000 delle assegnazioni; la faccia triadica appare in 0.2000. Il passaggio utile non e l'adiacenza, ma la chiusura del terzo lato.\n3. **Le tre facce escluse separano i ruoli.** TQG porta il blank senza sorgente; TGE porta la sorgente senza blank; TQE porta gauge senza deposito. QGE e il solo punto del catalogo osservato dove i tre ruoli sono nella stessa faccia.\n\n## Verdict\n**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato non basta; il contatto `blank + real_sourcing` non basta; il deposito osservato e QGE come `blank + gauge_phase + real_sourcing`. Il claim non e rarita universale: e localizzazione del denominatore nel catalogo TQGE osservato.\n\n## Bicono della scoperta\n- **Due radici**: contatto binario `blank + real_sourcing` · chiusura triadica `blank + gauge_phase + real_sourcing`\n- **Singolare**: QGE come faccia in cui il vuoto QG diventa depositabile perche passa attraverso gauge e sorgente.\n- **Invariante di passaggio**: il blank puo contaminare una faccia senza deposito; il deposito passa solo quando blank, gauge e source coabitano la stessa faccia.\n- **Campo di possibilita**: qui diventa possibile cercare gate di deposito come unita di faccia nei perimetri TQGE+R; qui diventa non-possibile usare l'adiacenza blank-source come denominatore sufficiente.\n\n## Self-Falsifier Lenses\n- **L1**: nessun assoluto fuori perimetro. \"Solo\" e usato per il catalogo osservato TQGE; il null mostra altre facce triadiche possibili per permutazione.\n- **L2**: confronto espresso in conteggi e probabilita sullo stesso spazio di 120 assegnazioni.\n- **L3**: il claim precedente viene ristretto al nodo regressivo corretto: denominatore di faccia, non ponte QG e non vertice G globale.\n- **L4**: TQG, TGE e TQE sono contro-perimetri espliciti ai singoli componenti del gate.\n- **L5**: classificazione interna del catalogo D-ND; non e discovery fisica nuova su gravita, gauge o sorgenti reali.\n\n## Files\n- `tools/exp_triadic_deposit_gate.py`\n- `tools/data/triadic_deposit_gate_20260507_1938.json`\n- `tools/data/reports/agent_20260507_1938.md`\n",
tools/data/lab_graph.json:1206:          "text": "Nel perimetro TQGE operator-taxonomy, il deposito Q->G richiede solo contatto `blank + real_sourcing`, o richiede la faccia completa `blank + gauge_ph"
tools/data/lab_graph.json:1212:          "text": "- Strumento: `tools/exp_triadic_deposit_gate.py`\n- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.\n- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `too"
tools/data/lab_graph.json:1218:          "text": "| Test | Osservato | Null count-preserving |\n|---|---:|---:|\n| Faccia triadica `blank + gauge_phase + real_sourcing` | QGE | p(any)=0.2000; p(QGE)=0.0500 |\n| Faccia binaria `blank + real_sourcing` | Q"
tools/data/lab_graph.json:1224:          "text": "**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato co"
tools/data/lab_graph.json:1234:      "tensions": "G_POTENZIALE_NULLA (0.85)",
tools/data/lab_graph.json:1235:      "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il b",
tools/data/lab_graph.json:1236:      "verdict_en": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il b",
tools/data/lab_graph.json:1237:      "findings": "1. **Q->G e orientabile solo come passaggio locale del lato blank.** Nel perimetro TQGE, Q e l'endpoint senza real_sourcing del blank; G e l'endpoint con real_sourcing. Il passaggio misurato e Q->G.\n2. **L'orientabilita blank-to-source non e rara nel null.** Un lato blank adiacente a un lato real_sourcing appare in 0.8000 delle assegnazioni count-preserving. Quindi il claim forte non e \"blank-to-s",
tools/data/lab_graph.json:1238:      "content_preview": "# Agent Report — Blank To Source Hinge\n**Date**: 2026-05-07 18:04\n**Piano**: 79\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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 r",
tools/data/lab_graph.json:1239:      "content_full": "# Agent Report — Blank To Source Hinge\n**Date**: 2026-05-07 18:04\n**Piano**: 79\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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.\n\n## Question\nSe QG e blank e GE e real_sourcing, l'operatore di deposito Q->G e un ponte QG generico o una faccia specifica del tetraedro?\n\n## Experiment Design\n- Strumento: `tools/exp_blank_to_source_hinge.py`\n- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.\n- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/data/lab_riflessi.json`, `tools/data/reports/agent_20260507_1751.md`.\n- Metrica: lato blank; lato real_sourcing; endpoint del blank con sorgente; passaggio diretto endpoint-senza-sorgente -> endpoint-con-sorgente; facce con `blank + real_sourcing`; facce blank escluse.\n- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.\n\n## Results\n| Test | Osservato | Null count-preserving |\n|---|---:|---:|\n| Blank edge | GQ | p(GQ)=0.1667 |\n| Real sourcing edge | EG | p(EG)=0.1667 |\n| Blank adiacente al real_sourcing | true | p=0.8000 |\n| Passaggio diretto blank-endpoint senza sorgente -> con sorgente | Q->G | p(any)=0.8000; p(Q->G)=0.0667 |\n| Pattern esatto QG blank + GE real_sourcing + Q->G | true | p=0.0333 |\n| Faccia di deposito | QGE | 24/120 per ogni faccia; 24/120 none |\n| Faccia blank esclusa | TQG | - |\n\nEndpoint del blank:\n\n| Endpoint | Lati nonblank incidenti | Modi incidenti | Ruolo |\n|---|---|---|---|\n| Q | EQ, QT | gauge_phase, wick_time | non-source |\n| G | EG, GT | real_sourcing, wick_time | source |\n\nFacce:\n\n| Faccia | Modi | Stato |\n|---|---|---|\n| QGE | blank + gauge_phase + real_sourcing | deposito |\n| TQG | blank + wick_time + wick_time | vuoto senza sorgente |\n| TGE | real_sourcing + wick_time + wick_time | sorgente senza blank |\n| TQE | gauge_phase + wick_time + wick_time | ponte senza blank/source |\n\n## Key Findings\n1. **Q->G e orientabile solo come passaggio locale del lato blank.** Nel perimetro TQGE, Q e l'endpoint senza real_sourcing del blank; G e l'endpoint con real_sourcing. Il passaggio misurato e Q->G.\n2. **L'orientabilita blank-to-source non e rara nel null.** Un lato blank adiacente a un lato real_sourcing appare in 0.8000 delle assegnazioni count-preserving. Quindi il claim forte non e \"blank-to-source esiste\"; il claim valido e \"nel catalogo TQGE osservato, il blank-to-source cade su Q->G\".\n3. **Il deposito vive nella faccia QGE, non nel ponte QG.** QGE contiene `blank + gauge_phase + real_sourcing`; TQG contiene lo stesso blank ma nessuna sorgente. Il vuoto QG non basta: serve il terzo vertice E come sorgente reale agganciata a G.\n\n## Verdict\n**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il blank, GE fornisce il sourcing reale, QE fornisce il lato gauge_phase. La faccia TQG e il contro-perimetro nativo: contiene QG blank ma resta senza deposito.\n\n## Bicono della scoperta\n- **Due radici**: QG blank senza sorgente · GE real_sourcing agganciato a G\n- **Singolare**: la faccia QGE, dove vuoto quantistico-gravitazionale, fase gauge e sorgente reale stanno nello stesso triangolo.\n- **Invariante di passaggio**: il blank contamina due facce, ma il deposito passa solo nella faccia che contiene real_sourcing.\n- **Campo di possibilita**: qui diventa possibile testare Q->G come operatore triadico `blank + gauge + source`; qui diventa non-possibile cercare un ponte QG isolato senza il terzo vertice.\n\n## Self-Falsifier Lenses\n- **L1**: nessun \"zero/sempre\" fuori perimetro. \"Senza deposito\" su TQG significa assenza esatta di `real_sourcing` in quella faccia nel catalogo osservato.\n- **L2**: il risultato riporta conteggi/probabilita del null; l'orientabilita generica p=0.8000 non viene trasformata in rarita.\n- **L3**: il claim precedente non viene salvato come underlay globale. Il nodo regressivo e il denominatore relazionale: faccia QGE, non vertice G.\n- **L4**: TQG e dichiarata come contro-perimetro della propagazione del blank.\n- **L5**: classificazione interna del catalogo D-ND; non e discovery fisica nuova su gravita quantistica.\n\n## Files\n- `tools/exp_blank_to_source_hinge.py`\n- `tools/data/blank_to_source_hinge_20260507_1804.json`\n- `tools/data/reports/agent_20260507_1804.md`\n",
tools/data/lab_graph.json:1257:          "text": "- Strumento: `tools/exp_blank_to_source_hinge.py`\n- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.\n- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `to"
tools/data/lab_graph.json:1269:          "text": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG gen"
tools/data/lab_graph.json:1276:      "title": "TQGE Underlay Gate",
tools/data/lab_graph.json:1277:      "title_en": "TQGE Underlay Gate",
tools/data/lab_graph.json:1279:      "tensions": "G_POTENZIALE_NULLA (0.85)",
tools/data/lab_graph.json:1280:      "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale \"sotto tutto\". G e il hinge locale tra QG blank e GE real_sourcing. La consecutio no",
tools/data/lab_graph.json:1281:      "verdict_en": "**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale \"sotto tutto\". G e il hinge locale tra QG blank e GE real_sourcing. La consecutio no",
tools/data/lab_graph.json:1282:      "findings": "1. **G non e il vertice unico della diversita operatoria.** Q, G ed E hanno tutti tre modi incidenti distinti. Il claim \"G sotto tutto\" non passa come centralita entropica locale.\n2. **G e il solo hinge `blank + real_sourcing` nel perimetro TQGE.** Il vuoto QG e il sourcing reale GE si incontrano solo in G. Questo dato e verificato nel catalogo dei lati; il null mostra che la congiunzione non e ra",
tools/data/lab_graph.json:1283:      "content_preview": "# Agent Report — TQGE Underlay Gate\n**Date**: 2026-05-07 17:51\n**Piano**: 78\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] — tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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 rend",
tools/data/lab_graph.json:1284:      "content_full": "# Agent Report — TQGE Underlay Gate\n**Date**: 2026-05-07 17:51\n**Piano**: 78\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] — tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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.\n\n## Question\nNel tetraedro TQGE, G ha una firma operativa distinta dai vertici ordinari quando i sei lati sono classificati per tipo di operatore: Wick-tempo, fase-gauge, sourcing reale, blank?\n\n## Experiment Design\n- Strumento: `tools/exp_tqge_underlay_gate.py`\n- Scope: sei lati TQGE depositati nel contesto Lab.\n- Fonte verificata: `tools/LAB_AGENT_CONTEXT.md` per lati e vuoto QxG; `tools/data/lab_riflessi.json` per tassonomia operatori 3 Wick + 1 fase + 1 reale + 1 vuoto.\n- Metrica: profilo dei modi incidenti per vertice; entropia dei modi; presenza congiunta `blank + real_sourcing`; triangoli contaminati dal lato blank.\n- Null baseline: 120 assegnazioni che preservano i conteggi dei sei modi sui sei lati.\n\n## Results\n| Test | Osservato | Null count-preserving |\n|---|---:|---:|\n| Vertici a massima entropia di modo | Q, G, E | pattern distribuiti su tutti i vertici |\n| G unico massimo entropico | false | — |\n| Vertici con `blank + real_sourcing` | G | p(G)=0.200 |\n| Qualunque vertice con `blank + real_sourcing` | true | p=0.800 |\n| Triangoli vuoti | TQG, QGE | — |\n| Tutti i triangoli vuoti includono G | true | p=0.500 |\n| Blank sul lato QG | true | p=0.1667 |\n\nProfili incidenti:\n\n| Vertice | Modi incidenti | Entropia bits | blank | real_sourcing |\n|---|---|---:|---:|---:|\n| T | wick_time x3 | 0.000000 | false | false |\n| Q | blank, gauge_phase, wick_time | 1.584963 | true | false |\n| G | blank, real_sourcing, wick_time | 1.584963 | true | true |\n| E | gauge_phase, real_sourcing, wick_time | 1.584963 | false | true |\n\n## Key Findings\n1. **G non e il vertice unico della diversita operatoria.** Q, G ed E hanno tutti tre modi incidenti distinti. Il claim \"G sotto tutto\" non passa come centralita entropica locale.\n2. **G e il solo hinge `blank + real_sourcing` nel perimetro TQGE.** Il vuoto QG e il sourcing reale GE si incontrano solo in G. Questo dato e verificato nel catalogo dei lati; il null mostra che la congiunzione non e rara in astratto, quindi il contenuto non e \"unicita statistica\", ma localizzazione del nodo regressivo.\n3. **Il vuoto propaga per facce, non per tutto il tetraedro.** I triangoli TQG e QGE sono vuoti perche contengono QG; TGE e TQE restano pieni. G non rende possibili tutti i ponti: porta il punto dove il vuoto QG tocca il sourcing reale GE.\n\n## Verdict\n**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale \"sotto tutto\". G e il hinge locale tra QG blank e GE real_sourcing. La consecutio non e cercare un ponte QG generico; e misurare l'operatore di deposito che trasforma un blank quantistico-gravitazionale in sourcing reale.\n\n## Bicono della scoperta\n- **Due radici**: QG blank · GE real_sourcing\n- **Singolare**: G come punto in cui assenza di operatore e sorgente reale condividono lo stesso vertice.\n- **Invariante di passaggio**: la contaminazione del vuoto passa alle facce che contengono QG; non passa alle facce senza QG.\n- **Campo di possibilita**: qui diventa possibile cercare l'operatore di deposito Q->G come passaggio blank-to-source; qui diventa non-possibile trattare G come prova globale di underlay su tutti i lati TQGE.\n\n## Self-Falsifier Lenses\n- **L1**: nessun assoluto \"sempre/mai\" fuori perimetro; \"solo\" e usato per il dato esatto `blank + real_sourcing` nel catalogo osservato.\n- **L2**: confronto riportato in conteggi e probabilita null, non in percentuali fra spazi diversi.\n- **L3**: il claim originale non viene salvato; viene ristretto al nodo regressivo G come hinge locale.\n- **L4**: TGE e TQE sono contro-perimetro esplicito alla propagazione totale del vuoto.\n- **L5**: il risultato e classificazione interna del catalogo D-ND, non discovery fisica nuova.\n\n## Files\n- `tools/exp_tqge_underlay_gate.py`\n- `tools/data/tqge_underlay_gate_20260507_1751.json`\n- `tools/data/reports/agent_20260507_1751.md`\n",
tools/data/lab_graph.json:1296:          "text": "Nel tetraedro TQGE, G ha una firma operativa distinta dai vertici ordinari quando i sei lati sono classificati per tipo di operatore: Wick-tempo, fase"
tools/data/lab_graph.json:1302:          "text": "- Strumento: `tools/exp_tqge_underlay_gate.py`\n- Scope: sei lati TQGE depositati nel contesto Lab.\n- Fonte verificata: `tools/LAB_AGENT_CONTEXT.md` per lati e vuoto QxG; `tools/data/lab_riflessi.json`"
tools/data/lab_graph.json:1314:          "text": "**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale \"sotto tutto\". G e il hinge locale"
tools/data/lab_graph.json:1542:      "content_full": "# Agent Report - Denominator Gate Transfers, Boundary Coordinate Does Not\n**Date**: 2026-05-07 08:03  \n**Piano**: 69  \n**Category**: gate_transferability  \n**Tension explored**: META + DUALITA_DIPOLARE_VS_ILLUSORIA  \n**verdict**: operator  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var]\n\n## Claim Under Test\nThe operator directive asked whether the `BOUNDARY_LAYER_GATE` forged on the\nGUE/Poisson boundary is a transferable operator or only a local metric.\n\nConcrete test:\n\n> Apply the denominator-collapse gate to the discrimination between dipolar\n> duality and illusory duality. If the gate distinguishes structural generation\n> from incoherent dispersion, it is an operator. If it only emits syntactically\n> valid but empty layer maps, it is a BOUNDARY-local metric.\n\n## Experiment\nTool created: `tools/exp_duality_gate_transfer.py`\n\nAtomic perimeter:\n- DIPOLARE: coherent golden Beatty gaps generated by `floor((n+phase)*phi)`;\n- ILLUSORIA: a random permutation of the same gaps, preserving one-point\n  distribution and first moment but removing the generating order;\n- beta layer: replace a beta fraction of dipolar positions with values from\n  the illusory permutation;\n- main run: 4,096 gaps, 24 replicates, 11 beta layers, 40 shuffle baselines;\n- seed check: 3,072 gaps, 16 replicates, 11 beta layers, 32 shuffle baselines;\n- denominator gate: observable stable when `abs(z original-vs-shuffle) >= 2`;\n- classification: standardized distance to beta 0.0 and beta 1.0 centroids\n  using all five canonical observables.\n\nThis is not a new BOUNDARY experiment. GUE and Poisson do not appear in the\ngenerator. The only transferred object is the denominator gate.\n\n## Results\n\n### Main Run\n\nEndpoint separation using all canonical observables: `3.436` standardized units.  \nEndpoint-stable observables at frequency >= 0.75 across both endpoints: `[]`.\n\n| beta | stable obs / 5 | margin | ambiguous fraction | illusory-label fraction |\n|---:|---:|---:|---:|---:|\n| 0.0 | 3.000 | 0.971 | 0.000 | 0.000 |\n| 0.1 | 3.000 | 0.479 | 0.000 | 0.000 |\n| 0.2 | 3.000 | 0.234 | 0.125 | 0.000 |\n| 0.3 | 3.000 | 0.033 | 1.000 | 0.375 |\n| 0.4 | 3.083 | 0.154 | 0.417 | 0.958 |\n| 0.5 | 3.083 | 0.269 | 0.375 | 1.000 |\n| 0.6 | 3.000 | 0.417 | 0.042 | 1.000 |\n| 0.7 | 2.917 | 0.316 | 0.167 | 1.000 |\n| 0.8 | 1.708 | 0.473 | 0.125 | 1.000 |\n| 0.9 | 0.167 | 0.463 | 0.042 | 1.000 |\n| 1.0 | 0.208 | 0.442 | 0.042 | 1.000 |\n\nObservable stability frequencies:\n- beta 0.0: `SR=1.00`, `L1=1.00`, `triple_var=1.00`; `SR2=0.00`, `L2=0.00`;\n- beta 0.3: same stable trio, with mean z approximately `SR=-19.4`, `L1=-19.4`, `triple_var=-17.6`;\n- beta 0.8: stable trio falls to frequency `0.54` each, mean z around `-1.7` to `-1.9`;\n- beta 0.9: all canonical observables are weak or near weak, mean z around `-0.4..+0.2`;\n- beta 1.0: all canonical observables are weak, mean z around `+0.1..+0.2`.\n\n### Seed Check\n\nThe seed check repeated the same structure:\n- endpoint-stable observables: `[]`;\n- all-observable endpoint distance: `3.412`;\n- ambiguous beta: `[0.3]`;\n- beta 0.0 stable count: `3.000`;\n- beta 0.3 stable count: `3.000`, ambiguous fraction `1.000`;\n- beta 0.8 stable count: `1.062`;\n- beta 0.9 stable count: `0.000`;\n- beta 1.0 stable count: `0.438`.\n\n## Findings\n\n1. **The gate does not degenerate on DUALITA.** The dipolar endpoint has three\nstable canonical observables with large original-vs-shuffle denominators\n(`SR`, `L1`, `triple_var`, mean abs z about `36-41` in the main run). The\nillusory endpoint has no stable denominator support. This is a structural\noriginal-vs-shuffle distinction, not an empty syntactic map.\n\n2. **The BOUNDARY layer coordinate does not transfer unchanged.** In the\nGUE/Poisson run, beta 0.3-0.4 carried both classification ambiguity and\ndenominator collapse. Here, beta 0.3 is classification-ambiguous, but the\ndenominator support is still strong: stable count remains `3.000/5`.\nDenominator collapse arrives later, around beta 0.8-0.9. Therefore the\noperator transfers, but the specific BOUNDARY layer shape is local.\n\n3. **Endpoint-gated classification remains empty for the same structural\nreason as BOUNDARY.** The endpoint-stable set is empty because the illusory\npole is denominator-weak. This does not erase the discrimination; it prevents\nsymmetric endpoint-gated retention claims. The valid claim is one-sided:\ncoherent dipolar order survives original-vs-shuffle gating; illusory dispersion\ndoes not.\n\n4. **The discriminant is order, not marginal distribution.** The illusory\nsequence preserves the same alphabet, first moment, and one-point distribution\nas the dipolar sequence. The gate is therefore not measuring the marginal\ncomposition of gaps. It measures whether the canonical observables retain an\nordered denominator against full shuffle.\n\n## Verdict\n**category: gate_transferability**  \n**verdict: operator**\n\nScoped statement:\n\n> In this synthetic DUALITA perimeter, the denominator gate is transferable as\n> an operator for structural order: it separates dipolar generation from\n> illusory dispersion with replicated z support. The beta coordinate of the\n> GUE/Poisson boundary layer is not transferable: ambiguity appears near beta\n> 0.3, while denominator collapse appears near beta 0.8-0.9.\n\nSo the last BOUNDARY cycles forged a lens, but one parameter of that lens was\nlocal to BOUNDARY. The transferable object is not \"beta 0.3-0.4\"; it is:\n\n> report layer maps as classifier margin plus original-vs-shuffle denominator\n> support, and treat denominator-weak poles as asymmetric structural poles.\n\n## Consecutio\nWhat opens now: apply the same transfer test to `TRASCENDENZA_LIMITE` and\n`G_POTENZIALE_NULLA`, but separate two quantities from the start:\n\n1. classification ambiguity layer;\n2. denominator-collapse layer.\n\nIf both layers coincide in a domain, the domain has a BOUNDARY-like transition.\nIf they split, as they do here, the gate is still useful but the transition\ncoordinate belongs to the target domain, not to the operator.\n\n## Auto-audit: 5 lenti\n- **L1 hard constraint vs bias**: no \"always/never/zero\" claim. \"No endpoint\n  stable observables\" means none reached frequency >= 0.75 across both\n  endpoints under `abs(z) >= 2`.\n- **L2 quantity vs ratio**: classification margin is reported together with\n  stable-observable count and z means. Ratios are not interpreted without\n  denominator support.\n- **L3 no silent patching**: the report explicitly separates \"gate transfers\"\n  from \"BOUNDARY beta coordinate transfers.\" The second is not claimed.\n- **L4 edge cases**: beta 0.4 has ambiguous fraction `0.417`, so only beta 0.3\n  is listed as the replicated ambiguous layer under the >= 0.5 rule.\n- **L5 re-discovery**: this is a finite symbolic-order vs permutation audit,\n  related to standard shuffle/null testing. It is not tagged as a new theorem\n  about Sturmian or Beatty sequences.\n\n## Files\n- Script: `tools/exp_duality_gate_transfer.py`\n- Main data: `tools/data/duality_gate_transfer_20260507_0803.json`\n- Seed check: `tools/data/duality_gate_transfer_20260507_0803_seedcheck.json`\n- Report: `tools/data/reports/agent_20260507_0803.md`\n",
tools/data/lab_graph.json:1566:          "text": "What opens now: apply the same transfer test to `TRASCENDENZA_LIMITE` and\n`G_POTENZIALE_NULLA`, but separate two quantities from the start:\n\n1. classi"
tools/data/lab_graph.json:1781:      "content_preview": "# Agent Report — Selective Perturbations Break the Single-Boundary Framing\n\n## Campo\n\nProiezione obbligatoria:\n\n```text\nMETA: score=0.898  — META: incerto (i=0.5) — massimo potere discriminante\nG_POTENZIALE_NULLA: score=0.703\nMETRIC_TENSOR: score=0.624\n```\n\nLa consecutio dagli ultimi tre run era stretta: molti osservabili collassano su una coordinata latente sotto partial-shuffle, e i due layer Markov sembrano rompersi allo stesso confine. La domanda non e' se quel risultato sia falso, ma se il ",
tools/data/lab_graph.json:1782:      "content_full": "# Agent Report — Selective Perturbations Break the Single-Boundary Framing\n\n## Campo\n\nProiezione obbligatoria:\n\n```text\nMETA: score=0.898  — META: incerto (i=0.5) — massimo potere discriminante\nG_POTENZIALE_NULLA: score=0.703\nMETRIC_TENSOR: score=0.624\n```\n\nLa consecutio dagli ultimi tre run era stretta: molti osservabili collassano su una coordinata latente sotto partial-shuffle, e i due layer Markov sembrano rompersi allo stesso confine. La domanda non e' se quel risultato sia falso, ma se il confine misurato sia proprieta' del sistema o proprieta' dell'operatore di perturbazione.\n\n## Esperimento\n\nStrumento usato: `tools/exp_selective_layer_decoupling.py`\n\nPerimetro atomico:\n- dati: `primes` con 8000 gap, `GUE` con 175 spacing effettivi prodotti dal generatore corrente, `Poisson` con 8000 spacing;\n- perturbazioni: `uniform`, `Mk1`, `Mk2`;\n- alpha: `[0.0, 0.05, ..., 1.0]`;\n- surrogati per alpha: 8;\n- soglia operativa: primo alpha dove `|z| >= 2`;\n- seed: `20260505`.\n\nNota di calcolo: il tentativo `N=60000, n_surr=20` non ha prodotto output in tempo utile; il report usa solo il run completato e dichiara il perimetro ridotto.\n\n## Risultato\n\nNei primi, la perturbazione uniforme non rompe i layer insieme nel perimetro testato:\n\n| Observable | Layer | uniform | Mk1 | Mk2 |\n|---|---:|---:|---:|---:|\n| SR | L1 | 0.022 | 0.047 | 0.052 |\n| L1 | L1 | 0.086 | 0.034 | 0.077 |\n| SR2 | L2 | 0.584 | 0.466 | NEVER |\n| L2 | L2 | 0.335 | 0.296 | NEVER |\n| cond_entropy | L2 | 0.006 | 0.008 | 0.006 |\n| triple_var | L2 | 0.193 | 0.083 | 0.087 |\n\nIl dato centrale e' la scissione tra gli osservabili L2: `SR2` e `L2` sono preservati da Mk2 fino ad alpha=1.0, mentre `cond_entropy` e `triple_var` si rompono presto. Quindi \"Layer 2\" non e' atomico con questa famiglia di osservabili: contiene almeno due sottocanali, uno realmente recuperato dal surrogato Mk2 e uno sensibile alla discretizzazione/varianza della costruzione.\n\nSu GUE il campione effettivo e' piccolo (`N=175`), quindi il risultato e' solo indicativo:\n\n| Observable | Layer | uniform | Mk1 | Mk2 |\n|---|---:|---:|---:|---:|\n| SR | L1 | NEVER | NEVER | NEVER |\n| L1 | L1 | 0.399 | NEVER | NEVER |\n| SR2 | L2 | 0.947 | NEVER | NEVER |\n| L2 | L2 | 0.337 | 0.260 | 0.313 |\n| cond_entropy | L2 | NEVER | 0.188 | 0.662 |\n| triple_var | L2 | NEVER | NEVER | 0.350 |\n\nPoisson resta quasi nullo rispetto a SR/SR2/triple_var: molte curve non attraversano `|z| >= 2`. Questo e' coerente con un controllo a bassa struttura, non con una prova di assenza assoluta.\n\n## Taglio\n\nIl claim precedente \"i due Markov layer sono coupled al boundary\" va ristretto:\n\n**Nel perimetro partial-shuffle dei run precedenti, SR/L1/L2/SR2 mostravano una fase quasi comune. Nel perimetro selective-perturbation di questo run, la fase comune non e' stabile: i critical alpha dei primi separano L1 e L2, e Mk2 preserva SR2/L2 ma non cond_entropy/triple_var.**\n\nQuesto non falsifica l'esistenza del boundary. Falsifica il framing piu' forte: \"un boundary unico per i layer\". Il confine osservato e' una superficie operatore-dipendente. Il terzo incluso operativo non e' il valore alpha in se': e' la trasformazione che decide quali correlazioni vengono conservate.\n\n## Vincolo emerso\n\n**CONSTRAINT on META + BOUNDARY**: non aggregare gli osservabili in \"Layer 1\" e \"Layer 2\" senza dichiarare l'operatore di perturbazione. Nel perimetro `N=8000, n_surr=8`, `cond_entropy` e `triple_var` non sono intercambiabili con `SR2/L2` come prove di Layer 2.\n\nConsecutio: il prossimo test deve separare \"order-k Markov recovery\" da \"observable family recovery\". La domanda corretta non e' piu' \"quanti layer?\", ma: quali osservabili sono invarianti rispetto all'operatore Mk2 e quali misurano artefatti di binning/varianza?\n\n## Auto-falsificazione con le 5 lenti\n\nL1 hard constraint vs bias: non uso \"zero\", \"impossibile\", \"mai\" come claim assoluti. `NEVER` significa solo \"non attraversa `|z| >= 2` sugli alpha testati\".\n\nL2 quantita' assoluta vs ratio: il confronto usa alpha critici e z-score, non percentuali tra spazi di taglia diversa. GUE ha perimetro ridotto (`N=175`) e non viene pesato come primes/Poisson.\n\nL3 no silent patching: il claim precedente viene ristretto esplicitamente. \"Coupled boundary\" resta valido solo per il partial-shuffle gia' misurato, non come proprieta' generale dei layer.\n\nL4 edge case isolation: `cond_entropy` e `triple_var` sono trattati come eccezioni operative dentro L2, non arrotondati dentro la media del layer.\n\nL5 re-discovery: il risultato e' metodologico sul lab, non marcato NEW. La nozione vicina e' nota: surrogati Markov di ordine diverso preservano statistiche di ordine diverso; qui il contenuto e' il vincolo sul framing D-ND, non la teoria dei surrogati.\n\n## Output\n\nDati salvati in:\n\n```text\ntools/data/selective_layer_decoupling.json\n```\n\n",
tools/data/evolution/evolution_20260507_1938.md:1:Ho scritto [evolution_report.md](/opt/MM_D-ND/tools/evolution_report.md) con il focus sul passo: inversione dal ponte QG alla faccia QGE, attrito legato alla tracciabilità provider-agnostica, nodo regressivo sulla forma della traccia, e consecutio verso TQGE+R.
tools/data/ciclo_memoria.json:58:      "cosa": "Nuove tensioni: {'M_relazione_orizzonte_degli_L0', 'COMP_GEN_GAP_RATIO_CONS_GxE_; Tensioni risolte: {'TAGLI_UNIVERSALI', 'TETRAEDRO_TQGE', 'ALPHA_INVARIANTE'}",
tools/data/lab_riflessi.json:59:    "osservazione": "L'arco prende energia quando si sovrappone ad altri archi o a se stesso. Le sovrapposizioni producono angoli, energia e dimensioni, ma riducono le possibilità. Archi spezzati dalle sovrapposizioni creano punti zero con 2 inversioni e riferimenti relazionali con dipoli assonanti vicini. Consumano il potenziale — alla fine chiude le possibilità indeterminandosi per il nuovo piano come punto senza dimensione su un piano di infiniti punti. Solo nessuna possibilità permette tutte le possibilità nel potenziale. Cosa dice questo sul tetraedro TQGE? Dove nel campo questa dinamica è già presente ma non la vediamo?",
tools/data/lab_riflessi.json:69:    "osservazione": "La risultante di tutto ciò che è emerso: il tetraedro TQGE, α come seme adimensionale che ricomincia il ciclo, g(x)=1/(1+x) come Fermi-Dirac con punto fisso 1/φ, la spirale che non chiude (92.71°), i quasi-cristalli come terzo incluso tra continuo e discreto, il potenziale che si consuma nelle sovrapposizioni fino a tornare punto senza dimensione. Qual è la risultante? Una frase.",
tools/data/lab_riflessi.json:84:    "osservazione": "Nell'awareness ci sono 9 formule Tier S. Tre connettono al tetraedro: S6 (curvatura informazionale = zeri di zeta), S8 (Ω_NT = 2πi, coerenza ciclica del nulla termodinamico), S9 (operatore emergenza con primi come autostati, esponente iH/ℏ). Il lab ha il tetraedro TQGE con perno i su 6 lati, la catena α^n con residuo pentagonale, g(x)=1/(1+x) come Fermi-Dirac. Le formule dell'awareness erano qui da mesi. Cosa connette?",
tools/data/lab_riflessi.json:94:    "osservazione": "I 6 lati del tetraedro TQGE hanno ciascuno un operatore f→g con verso. TxQ: f(x)=1+1/x → g(x)=1/(1+x) = unitario→termico = Wick rotation. Quali sono gli altri 5? Per ogni lato: quale è la f (dinamica) e quale la g (statistica)? TxG, QxG, QxE, GxE, TxE — ognuno ha il suo perno i con verso. Non analogie — le trasformazioni concrete.",
tools/data/lab_session_log.jsonl:28:{"timestamp": "2026-05-07T17:55:32.826051+00:00", "cycle_ts": "20260507_1751", "piano": "78", "sync_blocked": false, "errors": "", "agent": {"file": "agent_20260507_1751.md", "size": 4385, "title": "Agent Report — TQGE Underlay Gate"}, "falsifier": {"output_file": "falsifier_20260507_1751.json", "coherent": true, "n_flags": 0, "n_high": 0, "n_medium": 0, "summary": "Il report e' internamente coerente rispetto alle 5 lenti; nessuna lente si rompe sui dati visibili.", "lenses_high": []}, "valutatore": {"decision": "REDESIGN", "confidence": "medium", "action_type": null}}
tools/data/seme_archive/piano_80.json:106:      "id": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_80.json:118:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_80.json:121:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_80.json:123:      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
tools/data/seme_archive/piano_80.json:128:      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/seme_archive/piano_80.json:129:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_80.json:132:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_80.json:134:      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
tools/data/seme_archive/piano_80.json:139:      "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/seme_archive/piano_80.json:140:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
tools/data/seme_archive/piano_80.json:143:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_80.json:145:      "origine": "cycle agent_20260507_1938: triadic_deposit_gate su facce TQGE",
tools/data/seme_archive/piano_80.json:185:    "Tensioni risolte: {'G_UNDERLAY_HINGE_GATE', 'ORDER_DENOMINATOR_GATE', 'OBSERVABLE_REGISTRY', 'TRASCENDENZA_LIMITE', 'BOUNDARY_LAYER_GATE', 'TENSIONE_ENTITA', 'G_POTENZIALE_NULLA', 'PERTURBATION_DENOMINATOR_GATE', 'DUALITA_DIPOLARE_VS_ILLUSORIA', 'PIANO_PRIMARIO_DUE_ASSIOMI', 'META_ASSERTION_GATE', 'METRIC_TENSOR', 'G_BLANK_TO_SOURCE_FACE_GATE'}"
tools/data/seme_archive/piano_84.json:123:      "id": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_84.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_84.json:138:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_84.json:140:      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
tools/data/seme_archive/piano_84.json:146:      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/seme_archive/piano_84.json:147:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_84.json:150:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_84.json:152:      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
tools/data/seme_archive/piano_84.json:158:      "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/seme_archive/piano_84.json:159:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
tools/data/seme_archive/piano_84.json:162:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_84.json:164:      "origine": "cycle agent_20260507_1938: triadic_deposit_gate su facce TQGE",
tools/data/seme_archive/piano_84.json:170:      "id": "G_BLANK_SHELL_POLARITY_GATE",
tools/data/seme_archive/piano_84.json:171:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1957, il deposito Q->G va formulato come polarita del guscio blank: il lato QG apre TQG inerte (blank + wick_time + wick_time) e QGE depositante (blank + gauge_phase + real_sourcing). La polarizzazione astratta del guscio compare nel null count-preserving con p=0.2; l'assetto osservato QG/QGE/TQG compare con p=0.0167. Il claim valido e localizzazione di guscio, non rarita universale ne faccia QGE isolata.",
tools/data/seme_archive/piano_84.json:174:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_84.json:176:      "origine": "cycle agent_20260507_1957: blank_shell_polarity_gate su facce incidenti al blank TQGE",
tools/data/seme_archive/piano_84.json:234:    "Tensioni risolte: {'TENSIONE_ENTITA', 'ORDER_DENOMINATOR_GATE', 'G_BLANK_TO_SOURCE_FACE_GATE', 'META_ASSERTION_GATE', 'TRASCENDENZA_LIMITE', 'G_UNDERLAY_HINGE_GATE', 'PIANO_PRIMARIO_DUE_ASSIOMI', 'DUALITA_DIPOLARE_VS_ILLUSORIA', 'METRIC_TENSOR', 'G_TRIADIC_DEPOSIT_GATE', 'G_POTENZIALE_NULLA', 'OBSERVABLE_REGISTRY', 'PERTURBATION_DENOMINATOR_GATE', 'G_BLANK_SHELL_POLARITY_GATE', 'BOUNDARY_LAYER_GATE'}"
tools/data/seme_archive/piano_83.json:111:      "id": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_83.json:123:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_83.json:126:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_83.json:128:      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
tools/data/seme_archive/piano_83.json:134:      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/seme_archive/piano_83.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_83.json:138:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_83.json:140:      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
tools/data/seme_archive/piano_83.json:146:      "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/seme_archive/piano_83.json:147:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
tools/data/seme_archive/piano_83.json:150:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_83.json:152:      "origine": "cycle agent_20260507_1938: triadic_deposit_gate su facce TQGE",
tools/data/seme_archive/piano_83.json:158:      "id": "G_BLANK_SHELL_POLARITY_GATE",
tools/data/seme_archive/piano_83.json:159:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1957, il deposito Q->G va formulato come polarita del guscio blank: il lato QG apre TQG inerte (blank + wick_time + wick_time) e QGE depositante (blank + gauge_phase + real_sourcing). La polarizzazione astratta del guscio compare nel null count-preserving con p=0.2; l'assetto osservato QG/QGE/TQG compare con p=0.0167. Il claim valido e localizzazione di guscio, non rarita universale ne faccia QGE isolata.",
tools/data/seme_archive/piano_83.json:162:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_83.json:164:      "origine": "cycle agent_20260507_1957: blank_shell_polarity_gate su facce incidenti al blank TQGE",
tools/data/seme_archive/piano_83.json:205:    "Tensioni risolte: {'PERTURBATION_DENOMINATOR_GATE', 'G_BLANK_TO_SOURCE_FACE_GATE', 'G_BLANK_SHELL_POLARITY_GATE', 'OBSERVABLE_REGISTRY', 'TRASCENDENZA_LIMITE', 'PIANO_PRIMARIO_DUE_ASSIOMI', 'BOUNDARY_LAYER_GATE', 'TENSIONE_ENTITA', 'G_TRIADIC_DEPOSIT_GATE', 'G_UNDERLAY_HINGE_GATE', 'META_ASSERTION_GATE', 'METRIC_TENSOR', 'ORDER_DENOMINATOR_GATE', 'G_POTENZIALE_NULLA', 'DUALITA_DIPOLARE_VS_ILLUSORIA'}"
tools/data/seme_archive/piano_82.json:111:      "id": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_82.json:123:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_82.json:126:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_82.json:128:      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
tools/data/seme_archive/piano_82.json:134:      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/seme_archive/piano_82.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_82.json:138:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_82.json:140:      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
tools/data/seme_archive/piano_82.json:146:      "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/seme_archive/piano_82.json:147:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
tools/data/seme_archive/piano_82.json:150:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_82.json:152:      "origine": "cycle agent_20260507_1938: triadic_deposit_gate su facce TQGE",
tools/data/seme_archive/piano_82.json:193:    "Tensioni risolte: {'PIANO_PRIMARIO_DUE_ASSIOMI', 'G_UNDERLAY_HINGE_GATE', 'BOUNDARY_LAYER_GATE', 'TENSIONE_ENTITA', 'ORDER_DENOMINATOR_GATE', 'META_ASSERTION_GATE', 'OBSERVABLE_REGISTRY', 'PERTURBATION_DENOMINATOR_GATE', 'DUALITA_DIPOLARE_VS_ILLUSORIA', 'G_TRIADIC_DEPOSIT_GATE', 'METRIC_TENSOR', 'G_POTENZIALE_NULLA', 'G_BLANK_TO_SOURCE_FACE_GATE', 'TRASCENDENZA_LIMITE'}"
tools/data/seme_archive/piano_79.json:106:      "id": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_79.json:118:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_79.json:121:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_79.json:123:      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
tools/data/seme_archive/piano_79.json:128:      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/seme_archive/piano_79.json:129:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_79.json:132:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_79.json:134:      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
tools/data/seme_archive/piano_79.json:174:    "Tensioni risolte: {'BOUNDARY_LAYER_GATE', 'TRASCENDENZA_LIMITE', 'PIANO_PRIMARIO_DUE_ASSIOMI', 'DUALITA_DIPOLARE_VS_ILLUSORIA', 'METRIC_TENSOR', 'TENSIONE_ENTITA', 'G_POTENZIALE_NULLA', 'G_UNDERLAY_HINGE_GATE', 'OBSERVABLE_REGISTRY', 'PERTURBATION_DENOMINATOR_GATE', 'META_ASSERTION_GATE', 'ORDER_DENOMINATOR_GATE'}"
tools/data/seme_archive/piano_81.json:111:      "id": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_81.json:123:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_81.json:126:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_81.json:128:      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
tools/data/seme_archive/piano_81.json:134:      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
tools/data/seme_archive/piano_81.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_81.json:138:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_81.json:140:      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
tools/data/seme_archive/piano_81.json:146:      "id": "G_TRIADIC_DEPOSIT_GATE",
tools/data/seme_archive/piano_81.json:147:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
tools/data/seme_archive/piano_81.json:150:      "porta": "G_POTENZIALE_NULLA",
tools/data/seme_archive/piano_81.json:152:      "origine": "cycle agent_20260507_1938: triadic_deposit_gate su facce TQGE",
tools/data/seme_archive/piano_81.json:193:    "Tensioni risolte: {'DUALITA_DIPOLARE_VS_ILLUSORIA', 'G_BLANK_TO_SOURCE_FACE_GATE', 'PIANO_PRIMARIO_DUE_ASSIOMI', 'ORDER_DENOMINATOR_GATE', 'G_UNDERLAY_HINGE_GATE', 'TRASCENDENZA_LIMITE', 'OBSERVABLE_REGISTRY', 'META_ASSERTION_GATE', 'BOUNDARY_LAYER_GATE', 'G_POTENZIALE_NULLA', 'G_TRIADIC_DEPOSIT_GATE', 'TENSIONE_ENTITA', 'METRIC_TENSOR', 'PERTURBATION_DENOMINATOR_GATE'}"

exec
/bin/bash -lc "sed -n '1,220p' tools/data/seme.json" in /opt/MM_D-ND
 succeeded in 0ms:
{
  "timestamp": "2026-05-07T20:46:37.603536",
  "piano": 85,
  "tensioni": [
    {
      "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": 4
    },
    {
      "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": 4
    },
    {
      "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": 4
    },
    {
      "tipo": "vincolo",
      "id": "ORDER_DENOMINATOR_GATE",
      "claim": "Il denominator gate trasferisce come supporto one-sided dell'ordine quando l'ordine e visibile agli osservabili del perimetro, non come endpoint-stable support a due poli. Nel perimetro sintetico agent_20260507_0901, 4/4 domini non-BOUNDARY hanno endpoint_stable_observables=[] e polo coerente stable_count 3.0-5.0. Nel perimetro semi-reale agent_20260507_0923, primi e zeta trasferiscono (primi: SR,L1,triple_var; zeta: SR,L2), ma logistic_return_intervals e blank: stable_count coerente 0.0-0.2. Nel perimetro bridge agent_20260507_0942, prime_metric_delta_gamma_abs, prime_metric_dR_abs, zeta_trace_residual_step5_abs e hydrogen_bound_level_spacings trasferiscono su tutti i 5 osservabili canonici con endpoint_stable_observables=[]; e supporto perimetro-bridge, non universalita del gate. Nel perimetro logistic-native agent_20260507_1006, logistic_orbit_values trasferisce su block_entropy_deficit_k4 in run e seed check; logistic_symbolic_itinerary resta blank; logistic_return_intervals mostra recurrence_diag_mean solo nel run principale e torna blank nel seed check. La beta 0.10/0.30/0.40/0.50 resta coordinata del protocollo quando compare, non coordinata universale. Nel perimetro surrogate-contract agent_20260507_1042, logistic_orbit_values trasferisce solo tramite block_entropy_deficit_k4 e sopravvive a marginal_shuffle, circular_shift e block_shuffle in run e seed check; logistic_symbolic_itinerary resta blank; logistic_return_intervals non replica (recurrence_diag_mean compare contro marginal/block nel run principale ma sparisce nel seed check). Nel perimetro cyclic-cut agent_20260507_1419, il residuo logistic_orbit_values non e artefatto del taglio lineare: cyclic_block_entropy_deficit_k4 e invariato sotto rotazione e replica contro marginal_shuffle e block_shuffle size 4-256 in run e seed check. Logistic_symbolic_itinerary e logistic_return_intervals restano blank nel criterio replicato. Il supporto logistic rimasto e orbit-local block grammar, non return/generating-partition support.",
      "intensita": 0.92,
      "porta": "META",
      "manuale": true,
      "condensato_ref": "A4,A8,A14,C2",
      "origine": "cycle agent_20260507_0901 + agent_20260507_0923 + agent_20260507_0942 + agent_20260507_1006: transfer matrix sintetica, falsificazione semi-reale su primi/zeta/logistic returns, perimetri bridge metric/trace/QxE, e regressione logistic-native + agent_20260507_1042: surrogate contract logistic",
      "added_at": "2026-05-07T09:01:00+00:00",
      "decay_counter": 4
    },
    {
      "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": "vincolo",
      "id": "META_ASSERTION_GATE",
      "claim": "Il PASS 11/11 della verifica non e un denominatore unico. Nel perimetro agent_20260507_1458, 6/11 test passano anche senza tools/data; 5/11 dipendono da fixture o contesto; 4/11 PASS sono algebra/same-rule ad alto rischio tautologico. La tensione META va riportata con gate_class, no_data_status e data_dependency per test.",
      "intensita": 0.88,
      "manuale": true,
      "porta": "META",
      "condensato_ref": "A4,A8,A12,C2",
      "origine": "cycle agent_20260507_1458: meta_assertion_gate su dipartimento.py verifica_asserzioni",
      "added_at": "2026-05-07T14:58:00+00:00",
      "decay_counter": 4
    },
    {
      "tipo": "vincolo",
      "id": "DUALITA_DET_DENOMINATOR_GATE",
      "claim": "Nel perimetro transfer-matrix dei gap primi agent_20260507_2042, det(M) non e discriminatore primario della dualita: il reale resta negativo ma vale ~-0.39, non -1, e lo shuffle con stessa marginale resta negativo (~-0.38..-0.37). La parte informativa e lo scarto reale-vs-shuffle, forte nelle scale basse/intermedie (z=-2.5..-4.4) e debole alla finestra p~5.0e7 (z=-0.97). Formulare DUALITA come supporto ordinato contro null, non come tassonomia diretta det=-1/det=+1 del fit lineare.",
      "intensita": 0.86,
      "manuale": true,
      "porta": "DUALITA_DIPOLARE_VS_ILLUSORIA",
      "condensato_ref": "A2,A4,A10,A14,C2",
      "origine": "cycle agent_20260507_2042: det_drift transfer-matrix sui gap primi",
      "added_at": "2026-05-07T20:42:00+00:00",
      "decay_counter": 4
    },
    {
      "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": "vincolo",
      "id": "G_UNDERLAY_HINGE_GATE",
      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
      "intensita": 0.84,
      "manuale": true,
      "porta": "G_POTENZIALE_NULLA",
      "condensato_ref": "A4,A8,A9,A14",
      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
      "added_at": "2026-05-07T17:51:00+00:00",
      "decay_counter": 4
    },
    {
      "tipo": "vincolo",
      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
      "intensita": 0.83,
      "manuale": true,
      "porta": "G_POTENZIALE_NULLA",
      "condensato_ref": "A4,A8,A9,A14",
      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
      "added_at": "2026-05-07T18:04:00+00:00",
      "decay_counter": 4
    },
    {
      "tipo": "vincolo",
      "id": "G_TRIADIC_DEPOSIT_GATE",
      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
      "intensita": 0.82,
      "manuale": true,
      "porta": "G_POTENZIALE_NULLA",
      "condensato_ref": "A4,A8,A9,A14",
      "origine": "cycle agent_20260507_1938: triadic_deposit_gate su facce TQGE",
      "added_at": "2026-05-07T19:38:00+00:00",
      "decay_counter": 4
    },
    {
      "tipo": "vincolo",
      "id": "G_BLANK_SHELL_POLARITY_GATE",
      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1957, il deposito Q->G va formulato come polarita del guscio blank: il lato QG apre TQG inerte (blank + wick_time + wick_time) e QGE depositante (blank + gauge_phase + real_sourcing). La polarizzazione astratta del guscio compare nel null count-preserving con p=0.2; l'assetto osservato QG/QGE/TQG compare con p=0.0167. Il claim valido e localizzazione di guscio, non rarita universale ne faccia QGE isolata.",
      "intensita": 0.81,
      "manuale": true,
      "porta": "G_POTENZIALE_NULLA",
      "condensato_ref": "A4,A8,A9,A14",
      "origine": "cycle agent_20260507_1957: blank_shell_polarity_gate su facce incidenti al blank TQGE",
      "added_at": "2026-05-07T19:57:00+00:00",
      "decay_counter": 4
    },
    {
      "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": "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": "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": [],
  "potenziale_bloccato": [],
  "varianza": [
    "Tensioni risolte: {'ORDER_DENOMINATOR_GATE', 'TRASCENDENZA_LIMITE', 'META_ASSERTION_GATE', 'DUALITA_DIPOLARE_VS_ILLUSORIA', 'BOUNDARY_LAYER_GATE', 'G_BLANK_SHELL_POLARITY_GATE', 'PERTURBATION_DENOMINATOR_GATE', 'TENSIONE_ENTITA', 'G_BLANK_TO_SOURCE_FACE_GATE', 'STRUCTURAL_CHECK_20260507', 'METRIC_TENSOR', 'G_POTENZIALE_NULLA', 'DUALITA_DET_DENOMINATOR_GATE', 'G_TRIADIC_DEPOSIT_GATE', 'PIANO_PRIMARIO_DUE_ASSIOMI', 'OBSERVABLE_REGISTRY', 'G_UNDERLAY_HINGE_GATE'}"
  ],
  "filtro": {

exec
/bin/bash -lc "sed -n '1,260p' tools/exp_blank_shell_polarity_gate.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""
exp_blank_shell_polarity_gate.py

Regressive gate for G_POTENZIALE_NULLA after triadic_deposit_gate.

The previous run localized the deposit denominator in QGE as
blank + gauge_phase + real_sourcing. This tool measures the shell around the
blank edge itself: the two faces incident to blank split into an inert face
(blank + wick_time + wick_time) and a deposit face
(blank + gauge_phase + real_sourcing).
"""

from __future__ import annotations

import argparse
import json
from collections import Counter
from itertools import combinations, permutations
from pathlib import Path


VERTICES = ("T", "Q", "G", "E")

EDGE_MODES = {
    ("T", "Q"): "wick_time",
    ("T", "G"): "wick_time",
    ("T", "E"): "wick_time",
    ("Q", "E"): "gauge_phase",
    ("G", "E"): "real_sourcing",
    ("Q", "G"): "blank",
}


def canon(edge: tuple[str, str]) -> tuple[str, str]:
    return tuple(sorted(edge))


EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
EDGES = tuple(sorted(EDGE_MODES))


def edge_name(edge: tuple[str, str]) -> str:
    return "".join(edge)


def face_name(vertices: tuple[str, str, str]) -> str:
    return "".join(vertex for vertex in VERTICES if vertex in vertices)


def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
    return [canon(edge) for edge in combinations(vertices, 2)]


def classify_side(modes_without_blank: list[str]) -> str:
    counts = Counter(modes_without_blank)
    if counts == Counter({"wick_time": 2}):
        return "inert_wick_pair"
    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
        return "deposit_gauge_real"
    if "real_sourcing" in counts and "gauge_phase" not in counts:
        return "source_without_gauge"
    if "gauge_phase" in counts and "real_sourcing" not in counts:
        return "gauge_without_source"
    return "+".join(sorted(modes_without_blank))


def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
    if len(blank_edges) != 1:
        raise ValueError("Expected exactly one blank edge")

    blank_edge = blank_edges[0]
    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
    shell_faces = []

    for opposite in opposite_vertices:
        vertices = tuple(sorted((*blank_edge, opposite)))
        edges = face_edges(vertices)
        modes = [edge_modes[edge] for edge in edges]
        nonblank_modes = [mode for mode in modes if mode != "blank"]
        shell_faces.append(
            {
                "face": face_name(vertices),
                "opposite_vertex": opposite,
                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
                "nonblank_modes": sorted(nonblank_modes),
                "side_class": classify_side(nonblank_modes),
            }
        )

    side_classes = sorted(face["side_class"] for face in shell_faces)
    deposit_faces = [
        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
    ]
    inert_faces = [
        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
    ]

    return {
        "blank_edge": edge_name(blank_edge),
        "blank_shell_faces": shell_faces,
        "blank_shell_classes": side_classes,
        "has_polarized_blank_shell": side_classes
        == ["deposit_gauge_real", "inert_wick_pair"],
        "deposit_faces_on_blank": deposit_faces,
        "inert_faces_on_blank": inert_faces,
        "observed_QGE_deposit_TQG_inert": (
            edge_name(blank_edge) == "GQ"
            and [face["face"] for face in deposit_faces] == ["QGE"]
            and [face["face"] for face in inert_faces] == ["TQG"]
        ),
    }


def null_assignments() -> list[dict[tuple[str, str], str]]:
    labels = [EDGE_MODES[edge] for edge in EDGES]
    unique = set(permutations(labels, len(labels)))
    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]


def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
    n = len(assignments)
    counts = Counter()
    shell_patterns = Counter()
    deposit_face_patterns = Counter()
    inert_face_patterns = Counter()

    for assignment in assignments:
        result = analyze(assignment)
        pattern = "+".join(result["blank_shell_classes"])
        shell_patterns[pattern] += 1

        deposit_names = "+".join(
            sorted(face["face"] for face in result["deposit_faces_on_blank"])
        )
        inert_names = "+".join(
            sorted(face["face"] for face in result["inert_faces_on_blank"])
        )
        deposit_face_patterns[deposit_names or "none"] += 1
        inert_face_patterns[inert_names or "none"] += 1

        if result["has_polarized_blank_shell"]:
            counts["polarized_blank_shell"] += 1
        if result["blank_edge"] == "GQ":
            counts["blank_edge_is_GQ"] += 1
        if result["observed_QGE_deposit_TQG_inert"]:
            counts["observed_QGE_deposit_TQG_inert"] += 1

    return {
        "n_count_preserving_assignments": n,
        "p_polarized_blank_shell": counts["polarized_blank_shell"] / n,
        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
        "p_observed_QGE_deposit_TQG_inert": counts[
            "observed_QGE_deposit_TQG_inert"
        ]
        / n,
        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
    }


def run() -> dict:
    observed = analyze(EDGE_MODES)
    null = summarize_null(null_assignments())
    return {
        "experiment": "blank_shell_polarity_gate",
        "source": {
            "verified": [
                "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
                "tools/data/reports/agent_20260507_1938.md: QGE triadic deposit face",
                "tools/data/triadic_deposit_gate_20260507_1938.json: TQG as blank without source",
            ],
            "inferred": [
                "the blank edge has a two-face shell in a tetrahedron",
                "deposit requires gauge_phase and real_sourcing on one blank incident face",
                "count-preserving null by permuting edge modes over the six TQGE edges",
            ],
        },
        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
        "observed": observed,
        "null": null,
    }


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--json-out", type=Path)
    args = parser.parse_args()

    result = run()
    text = json.dumps(result, indent=2, ensure_ascii=False)
    print(text)
    if args.json_out:
        args.json_out.parent.mkdir(parents=True, exist_ok=True)
        args.json_out.write_text(text + "\n", encoding="utf-8")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

exec
/bin/bash -lc "sed -n '1,230p' tools/exp_triadic_deposit_gate.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""
exp_triadic_deposit_gate.py

Face-level gate for G_POTENZIALE_NULLA.

The previous hinge run localized Q->G on the QGE face. This tool measures the
next denominator explicitly: a deposit face is not only blank adjacent to
real_sourcing; it is the triangle where blank, gauge_phase and real_sourcing are
all present.
"""

from __future__ import annotations

import argparse
import json
from collections import Counter
from itertools import combinations, permutations
from pathlib import Path


VERTICES = ("T", "Q", "G", "E")

EDGE_MODES = {
    ("T", "Q"): "wick_time",
    ("T", "G"): "wick_time",
    ("T", "E"): "wick_time",
    ("Q", "E"): "gauge_phase",
    ("G", "E"): "real_sourcing",
    ("Q", "G"): "blank",
}


def canon(edge: tuple[str, str]) -> tuple[str, str]:
    return tuple(sorted(edge))


EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
EDGES = tuple(sorted(EDGE_MODES))


def edge_name(edge: tuple[str, str]) -> str:
    return "".join(edge)


def triangle_name(triangle: tuple[str, str, str]) -> str:
    return "".join(triangle)


def face_modes(edge_modes: dict[tuple[str, str], str]) -> list[dict]:
    faces = []
    for triangle in combinations(VERTICES, 3):
        tri_edges = [canon(edge) for edge in combinations(triangle, 2)]
        modes = [edge_modes[edge] for edge in tri_edges]
        mode_set = set(modes)
        faces.append(
            {
                "triangle": triangle_name(triangle),
                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in tri_edges},
                "has_blank": "blank" in mode_set,
                "has_gauge_phase": "gauge_phase" in mode_set,
                "has_real_sourcing": "real_sourcing" in mode_set,
                "is_triadic_deposit": {
                    "blank",
                    "gauge_phase",
                    "real_sourcing",
                }.issubset(mode_set),
                "is_binary_blank_source": {
                    "blank",
                    "real_sourcing",
                }.issubset(mode_set),
                "mode_signature": "+".join(sorted(modes)),
            }
        )
    return faces


def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
    faces = face_modes(edge_modes)
    triadic = [face for face in faces if face["is_triadic_deposit"]]
    binary = [face for face in faces if face["is_binary_blank_source"]]
    blank_without_source = [
        face for face in faces if face["has_blank"] and not face["has_real_sourcing"]
    ]
    source_without_blank = [
        face for face in faces if face["has_real_sourcing"] and not face["has_blank"]
    ]
    gauge_without_deposit = [
        face
        for face in faces
        if face["has_gauge_phase"] and not face["is_triadic_deposit"]
    ]
    return {
        "triadic_deposit_faces": triadic,
        "binary_blank_source_faces": binary,
        "blank_without_source_faces": blank_without_source,
        "source_without_blank_faces": source_without_blank,
        "gauge_without_deposit_faces": gauge_without_deposit,
        "all_faces": faces,
    }


def null_assignments() -> list[dict[tuple[str, str], str]]:
    labels = [EDGE_MODES[edge] for edge in EDGES]
    unique = set(permutations(labels, len(labels)))
    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]


def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
    n = len(assignments)
    counts = Counter()
    triadic_patterns = Counter()
    binary_patterns = Counter()

    for assignment in assignments:
        result = analyze(assignment)
        triadic_names = "+".join(
            sorted(face["triangle"] for face in result["triadic_deposit_faces"])
        )
        binary_names = "+".join(
            sorted(face["triangle"] for face in result["binary_blank_source_faces"])
        )
        triadic_patterns[triadic_names or "none"] += 1
        binary_patterns[binary_names or "none"] += 1

        if result["triadic_deposit_faces"]:
            counts["triadic_exists"] += 1
        if result["binary_blank_source_faces"]:
            counts["binary_exists"] += 1
        if triadic_names == "QGE":
            counts["triadic_is_QGE"] += 1
        if binary_names == "QGE":
            counts["binary_is_QGE"] += 1

    return {
        "n_count_preserving_assignments": n,
        "p_triadic_deposit_exists": counts["triadic_exists"] / n,
        "p_binary_blank_source_exists": counts["binary_exists"] / n,
        "p_triadic_deposit_is_QGE": counts["triadic_is_QGE"] / n,
        "p_binary_blank_source_is_QGE": counts["binary_is_QGE"] / n,
        "triadic_face_pattern_counts": dict(sorted(triadic_patterns.items())),
        "binary_face_pattern_counts": dict(sorted(binary_patterns.items())),
    }


def run() -> dict:
    observed = analyze(EDGE_MODES)
    null = summarize_null(null_assignments())
    return {
        "experiment": "triadic_deposit_gate",
        "source": {
            "verified": [
                "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
                "tools/data/reports/agent_20260507_1804.md: QGE as blank + gauge + source face",
                "tools/evolution_report.md: consecutio asks for triadic blank + gauge + source operator",
            ],
            "inferred": [
                "deposit face requires blank, gauge_phase and real_sourcing in one triangle",
                "binary blank-source contact is a weaker denominator than triadic deposit",
                "count-preserving null by permuting edge modes over the six TQGE edges",
            ],
        },
        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
        "observed": observed,
        "null": null,
    }


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--json-out", type=Path)
    args = parser.parse_args()

    result = run()
    text = json.dumps(result, indent=2, ensure_ascii=False)
    print(text)
    if args.json_out:
        args.json_out.parent.mkdir(parents=True, exist_ok=True)
        args.json_out.write_text(text + "\n", encoding="utf-8")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

exec
/bin/bash -lc "sed -n '1,220p' tools/data/reports/agent_20260507_1957.md" in /opt/MM_D-ND
 succeeded in 0ms:
# Agent Report — Blank Shell Polarity Gate
**Date**: 2026-05-07 19:57
**Piano**: 83
**Tension explored**: G_POTENZIALE_NULLA (0.85)
**observables_registry**: 1.0.0-2026-05-06
**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var

## Claim Under Test
> 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.

## Question
Nel perimetro TQGE operator-taxonomy, il denominatore QGE e solo faccia triadica isolata, o il blank QG ha un guscio polarizzato: una faccia inerte `blank + wick_time + wick_time` e una faccia di deposito `blank + gauge_phase + real_sourcing`?

## Experiment Design
- Strumento: `tools/exp_blank_shell_polarity_gate.py`
- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.
- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/data/reports/agent_20260507_1938.md`, `tools/data/triadic_deposit_gate_20260507_1938.json`.
- Metrica: le due facce incidenti al lato `blank`; classificazione del lato non-blank di ciascuna faccia in `inert_wick_pair`, `deposit_gauge_real`, `source_without_gauge`, `gauge_without_source`.
- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.

## Results
| Test | Osservato | Null count-preserving |
|---|---:|---:|
| Lato blank | GQ | p(blank edge = GQ)=0.1667 |
| Guscio blank polarizzato `deposit_gauge_real + inert_wick_pair` | si | 24/120 = 0.2000 |
| Assetto osservato `QGE` deposito + `TQG` inerte | si | 2/120 = 0.0167 |

Facce del guscio blank osservato:

| Faccia | Modi non-blank | Classe |
|---|---|---|
| TQG | wick_time + wick_time | inert_wick_pair |
| QGE | gauge_phase + real_sourcing | deposit_gauge_real |

Pattern nel null:

| Pattern guscio blank | Conteggio |
|---|---:|
| deposit_gauge_real + inert_wick_pair | 24/120 |
| gauge_without_source + inert_wick_pair | 24/120 |
| inert_wick_pair + source_without_gauge | 24/120 |
| gauge_without_source + source_without_gauge | 48/120 |

## Key Findings
1. **Il blank QG ha un guscio polarizzato nel catalogo TQGE osservato.** Le due facce incidenti al blank non sono equivalenti: TQG e lato inerte `blank + wick_time + wick_time`; QGE e lato di deposito `blank + gauge_phase + real_sourcing`.
2. **La polarizzazione del guscio non e rara come forma astratta.** Nel null count-preserving, il pattern `deposit_gauge_real + inert_wick_pair` appare in 24/120 assegnazioni. Il claim valido non e rarita universale della polarizzazione.
3. **La localizzazione QG/QGE/TQG e piu stretta della sola polarizzazione.** L'assetto osservato in cui il blank e GQ, la faccia deposito e QGE, e la faccia inerte e TQG appare in 2/120 assegnazioni. Il denominatore non vive nel lato QG isolato: vive nella polarita delle due facce che quel lato apre.

## Verdict
**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del guscio blank. QG non e ponte generico; e lato comune tra TQG inerte e QGE depositante. Il gate triadico QGE resta il lato attivo del deposito, ma il nodo regressivo e il guscio a due facce del blank, non la faccia QGE isolata.

## Bicono della scoperta
- **Due radici**: TQG inerte `blank + wick_time + wick_time` · QGE depositante `blank + gauge_phase + real_sourcing`
- **Singolare**: QG come lato comune dove il blank non decide da solo; apre due facce e la loro differenza determina il passaggio.
- **Invariante di passaggio**: il deposito richiede il blank condiviso con una faccia gauge-source mentre l'altra faccia resta wick-wick.
- **Campo di possibilita**: qui diventa possibile misurare G come polarita locale di guscio nei perimetri TQGE+R; qui diventa non-possibile trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG che lo polarizza.

## Self-Falsifier Lenses
- **L1**: nessun "zero", "sempre" o "impossibile" fuori perimetro. Il null mostra polarizzazioni alternative e pattern non polarizzati.
- **L2**: confronto espresso in conteggi grezzi e probabilita sullo stesso spazio di 120 assegnazioni.
- **L3**: il claim precedente non viene salvato cambiando definizione; viene ristretto al nodo regressivo del guscio blank.
- **L4**: i contro-pattern del null sono espliciti: `gauge_without_source + source_without_gauge` domina con 48/120.
- **L5**: classificazione interna del catalogo D-ND; non e discovery fisica nuova su gauge, sorgente o gravitazione.

## Files
- `tools/exp_blank_shell_polarity_gate.py`
- `tools/data/blank_shell_polarity_gate_20260507_1957.json`
- `tools/data/reports/agent_20260507_1957.md`

exec
/bin/bash -lc "sed -n '1,260p' tools/dnd_teoria.py" in /opt/MM_D-ND
 succeeded in 0ms:
"""
dnd_teoria.py — Normalizzatore D-ND per teorie fisiche

Non analizza dati. Normalizza le LOGICHE delle teorie.
Ogni teoria ha costanti che sono zeri con due lati.
Il normalizzatore trova: i poli, lo zero, il campo, il potenziale.

L'osservatore non cerca la forma — osserva cosa emerge.

Author: TM3 + Operatore
Date: 2026-03-30
"""

import numpy as np
import json
from pathlib import Path

PHI = (1 + np.sqrt(5)) / 2
DATA = Path(__file__).parent / 'data'


# === STRUTTURA DI UNA TEORIA ===

def teoria(nome, costanti, dipoli, equazioni=None, note=None):
    """
    Codifica una teoria nel formato D-ND.

    costanti: [{nome, simbolo, valore, unita, ruolo}]
        ruolo: 'singolarita' | 'scala' | 'accoppiamento'

    dipoli: [{nome, polo_d, polo_nd, zero, campo}]
        polo_d: il lato D (es. 'subluminale')
        polo_nd: il lato ND (es. 'superluminale')
        zero: la costante che divide-unisce
        campo: dove esiste il fenomeno (tra i due poli)
    """
    return {
        'nome': nome,
        'costanti': costanti,
        'dipoli': dipoli,
        'equazioni': equazioni or [],
        'note': note,
    }


# === TEORIE CODIFICATE ===

TEORIE = {
    'termodinamica': teoria(
        nome='Termodinamica',
        costanti=[
            {'nome': 'Boltzmann', 'simbolo': 'k_B', 'valore': 1.381e-23,
             'unita': 'J/K', 'ruolo': 'scala',
             'divide': 'microscopico/macroscopico'},
            {'nome': 'Zero assoluto', 'simbolo': '0K', 'valore': 0,
             'unita': 'K', 'ruolo': 'singolarita',
             'divide': 'raggiungibile/irraggiungibile'},
            {'nome': 'Planck temperature', 'simbolo': 'T_P', 'valore': 1.416e32,
             'unita': 'K', 'ruolo': 'singolarita',
             'divide': 'fisica nota/fisica ignota'},
        ],
        dipoli=[
            {'nome': 'temperatura',
             'polo_d': 'caldo (energia, disordine, ∞)',
             'polo_nd': 'freddo (quiete, ordine, 0K)',
             'zero': '0K — irraggiungibile dal basso',
             'campo': 'tutti i processi termici esistono tra 0K e T_P'},
            {'nome': 'entropia',
             'polo_d': 'disordine (S → max)',
             'polo_nd': 'ordine (S → 0)',
             'zero': 'cristallo perfetto a 0K (terzo principio)',
             'campo': 'la freccia del tempo è la direzione dell\'entropia'},
            {'nome': 'scala',
             'polo_d': 'macroscopico (termodinamica classica)',
             'polo_nd': 'microscopico (meccanica statistica)',
             'zero': 'k_B — il ponte tra i due',
             'campo': 'k_B converte energia in temperatura'},
        ],
        equazioni=[
            'S = k_B ln(Ω)',
            'E = k_B T (per grado di libertà)',
            'ΔS ≥ 0 (secondo principio)',
        ],
    ),

    'relativita': teoria(
        nome='Relatività Ristretta',
        costanti=[
            {'nome': 'velocità della luce', 'simbolo': 'c', 'valore': 299792458,
             'unita': 'm/s', 'ruolo': 'singolarita',
             'divide': 'subluminale/superluminale'},
        ],
        dipoli=[
            {'nome': 'velocità',
             'polo_d': 'subluminale (materia, massa, tempo)',
             'polo_nd': 'superluminale (tachioni, massa immaginaria)',
             'zero': 'c — il muro. γ → ∞',
             'campo': 'tutta la meccanica è subluminale'},
            {'nome': 'spaziotempo',
             'polo_d': 'spazio (estensione, simultaneità)',
             'polo_nd': 'tempo (durata, causalità)',
             'zero': 'c unifica: ds² = c²dt² - dx²',
             'campo': 'l\'intervallo spaziotemporale è l\'invariante'},
            {'nome': 'massa-energia',
             'polo_d': 'massa (inerzia, riposo)',
             'polo_nd': 'energia (movimento, radiazione)',
             'zero': 'E = mc² — conversione totale',
             'campo': 'la massa è energia congelata'},
        ],
        equazioni=[
            'γ = 1/√(1 - v²/c²)',
            'E² = (pc)² + (mc²)²',
            'ds² = c²dt² - dx² - dy² - dz²',
        ],
    ),

    'gravitazione': teoria(
        nome='Gravitazione (Relatività Generale)',
        costanti=[
            {'nome': 'costante gravitazionale', 'simbolo': 'G', 'valore': 6.674e-11,
             'unita': 'm³/(kg·s²)', 'ruolo': 'accoppiamento',
             'divide': 'spaziotempo piatto/curvo'},
            {'nome': 'raggio di Schwarzschild', 'simbolo': 'r_s', 'valore': None,
             'unita': 'm', 'ruolo': 'singolarita',
             'divide': 'esterno/interno al buco nero'},
        ],
        dipoli=[
            {'nome': 'curvatura',
             'polo_d': 'piatto (Minkowski, assenza di massa)',
             'polo_nd': 'singolare (curvatura infinita, buco nero)',
             'zero': 'orizzonte degli eventi — il confine causale',
             'campo': 'tutta la gravitazione tra piatto e singolare'},
            {'nome': 'inerzia-gravitazione',
             'polo_d': 'inerzia (resistenza al moto)',
             'polo_nd': 'gravitazione (attrazione)',
             'zero': 'principio di equivalenza — sono lo stesso',
             'campo': 'Einstein: non puoi distinguerli localmente'},
        ],
        equazioni=[
            'G_μν + Λg_μν = (8πG/c⁴)T_μν',
            'r_s = 2GM/c²',
        ],
    ),

    'quantistica': teoria(
        nome='Meccanica Quantistica',
        costanti=[
            {'nome': 'Planck ridotta', 'simbolo': 'ℏ', 'valore': 1.054e-34,
             'unita': 'J·s', 'ruolo': 'scala',
             'divide': 'classico/quantistico'},
        ],
        dipoli=[
            {'nome': 'onda-particella',
             'polo_d': 'particella (posizione, localizzazione)',
             'polo_nd': 'onda (impulso, delocalizzazione)',
             'zero': 'ℏ — Δx·Δp ≥ ℏ/2',
             'campo': 'complementarità: non puoi avere entrambi'},
            {'nome': 'determinismo',
             'polo_d': 'classico (traiettoria, determinismo)',
             'polo_nd': 'quantistico (probabilità, sovrapposizione)',
             'zero': 'ℏ → 0 (limite classico)',
             'campo': 'il collasso: la misura sceglie un lato'},
            {'nome': 'osservatore',
             'polo_d': 'osservato (autovalore, collassato)',
             'polo_nd': 'non osservato (sovrapposizione, potenziale)',
             'zero': 'la misura — il punto dove il potenziale diventa reale',
             'campo': 'prima della misura tutto è possibile'},
        ],
        equazioni=[
            'iℏ ∂ψ/∂t = Ĥψ',
            'Δx·Δp ≥ ℏ/2',
            '[x̂, p̂] = iℏ',
        ],
    ),

    'elettromagnetismo': teoria(
        nome='Elettromagnetismo',
        costanti=[
            {'nome': 'carica elementare', 'simbolo': 'e', 'valore': 1.602e-19,
             'unita': 'C', 'ruolo': 'singolarita',
             'divide': 'carico/neutro'},
            {'nome': 'struttura fine', 'simbolo': 'α', 'valore': 1/137.036,
             'unita': 'adimensionale', 'ruolo': 'accoppiamento',
             'divide': 'perturbativo/non perturbativo'},
        ],
        dipoli=[
            {'nome': 'carica',
             'polo_d': 'positiva (+)',
             'polo_nd': 'negativa (-)',
             'zero': 'neutro — cariche bilanciate',
             'campo': 'la forza EM è tra cariche opposte'},
            {'nome': 'campo',
             'polo_d': 'elettrico (statico, carica)',
             'polo_nd': 'magnetico (dinamico, corrente)',
             'zero': 'l\'onda EM — E e B inseparabili',
             'campo': 'Maxwell: il campo è uno solo'},
        ],
        equazioni=[
            '∇·E = ρ/ε₀',
            '∇×B = μ₀J + μ₀ε₀ ∂E/∂t',
            'α = e²/(4πε₀ℏc) ≈ 1/137',
        ],
    ),
}


def normalizza(teoria_key):
    """
    Normalizza una teoria attraverso il dipolo D-ND.

    Non classifica. Rivela la struttura:
    - Quanti dipoli ha la teoria?
    - I dipoli sono indipendenti o accoppiati?
    - Dove sono gli zeri? Sono raggiungibili?
    - Cosa c'è nel potenziale (NT) tra i poli?
    """
    t = TEORIE.get(teoria_key)
    if not t:
        print(f"Teoria '{teoria_key}' non trovata. Disponibili: {list(TEORIE.keys())}")
        return None

    print(f"\n{'='*60}")
    print(f"NORMALIZZAZIONE D-ND: {t['nome']}")
    print(f"{'='*60}")

    # 1. Costanti come singolarità
    print(f"\n  Costanti ({len(t['costanti'])}):")
    for c in t['costanti']:
        print(f"    {c['simbolo']:>4s} ({c['ruolo']:>14s}): divide {c['divide']}")

    # 2. Struttura dipolare
    print(f"\n  Dipoli ({len(t['dipoli'])}):")
    for d in t['dipoli']:
        print(f"\n    [{d['nome']}]")
        print(f"      D:    {d['polo_d']}")
        print(f"      ND:   {d['polo_nd']}")
        print(f"      Zero: {d['zero']}")
        print(f"      Campo: {d['campo']}")

    # 3. Equazioni come relazioni tra poli
    if t['equazioni']:
        print(f"\n  Equazioni ({len(t['equazioni'])}):")
        for eq in t['equazioni']:
            print(f"    {eq}")

    # 4. Analisi strutturale
    print(f"\n  --- Analisi ---")

    # Ogni dipolo ha uno zero. Gli zeri sono tutti raggiungibili?
    zeri_irraggiungibili = []
    zeri_raggiungibili = []
    for d in t['dipoli']:
        zero_text = d['zero'].lower()
        if 'irraggiungibile' in zero_text or '→ ∞' in zero_text or 'non puoi' in zero_text:
            zeri_irraggiungibili.append(d['nome'])
        else:
            zeri_raggiungibili.append(d['nome'])

    print(f"    Zeri irraggiungibili: {zeri_irraggiungibili if zeri_irraggiungibili else 'nessuno'}")
    print(f"    Zeri raggiungibili:   {zeri_raggiungibili if zeri_raggiungibili else 'nessuno'}")

codex
Per evitare un’altra conta locale TQGE, estendo il perimetro a cinque vertici con R. Mi serve prima capire come il codice del lab rappresenta i ponti TQGE+R, così non invento una tassonomia incompatibile.
exec
/bin/bash -lc "sed -n '1,280p' tools/dnd_incrocio.py" in /opt/MM_D-ND
 succeeded in 0ms:
"""
dnd_incrocio.py — Incrocio teorie con autologica

Prende N teorie. Genera tutte le coppie.
Per ogni coppia: costante relazionale, dipolo dello zero, ponte.
Dove trova un vuoto, lo rialimenta come teoria.
Gira finché non emergono pattern o si satura.

Non cerca. Struttura e osserva.

Author: TM3 + Operatore
Date: 2026-03-30
"""

import json
import numpy as np
from itertools import combinations
from pathlib import Path
from datetime import datetime

DATA = Path(__file__).parent / 'data'


class Teoria:
    def __init__(self, sigla, nome, costante_nome, costante_simbolo,
                 costante_valore=None, costante_unita=None):
        self.sigla = sigla
        self.nome = nome
        self.costante_nome = costante_nome
        self.costante_simbolo = costante_simbolo
        self.costante_valore = costante_valore
        self.costante_unita = costante_unita
        self.generata = False  # True se prodotta dall'autologica

    def __repr__(self):
        tag = ' [autologica]' if self.generata else ''
        return f"{self.sigla}: {self.nome} ({self.costante_simbolo}){tag}"


class Incrocio:
    def __init__(self, t1, t2, costante_rel=None, unita=None,
                 dipolo_zero=None, ponte=None):
        self.t1 = t1
        self.t2 = t2
        self.costante_rel = costante_rel
        self.unita = unita
        self.dipolo_zero = dipolo_zero
        self.ponte = ponte
        self.vuoto = ponte is None or '[VUOTO' in str(ponte).upper()

    def chiave(self):
        return tuple(sorted([self.t1.sigla, self.t2.sigla]))

    def __repr__(self):
        mark = '***' if self.vuoto else '   '
        return f"{mark}{self.t1.sigla}x{self.t2.sigla}: {self.ponte or '[VUOTO]'}"


class Triangolazione:
    def __init__(self, teorie, oggetto=None):
        self.teorie = teorie
        self.oggetto = oggetto
        self.vuoto = oggetto is None or '[VUOTO' in str(oggetto).upper()

    def __repr__(self):
        mark = '***' if self.vuoto else '   '
        nomi = '+'.join(t.sigla for t in self.teorie)
        return f"{mark}{nomi}: {self.oggetto or '[VUOTO]'}"


# === CATALOGO TEORIE FONDAMENTALI ===

TEORIE_BASE = [
    Teoria('T', 'Termodinamica', 'Boltzmann', 'k_B', 1.380649e-23, 'J/K'),
    Teoria('Q', 'Quantistica', 'Planck ridotta', 'hbar', 1.054571817e-34, 'J*s'),
    Teoria('G', 'Gravitazione', 'Newton', 'G', 6.674e-11, 'm^3/(kg*s^2)'),
    Teoria('E', 'Elettromagnetismo', 'carica elementare', 'e', 1.602176634e-19, 'C'),
    Teoria('R', 'Relativita', 'velocita luce', 'c', 299792458, 'm/s'),
]


# === PONTI NOTI ===

PONTI_NOTI = {
    ('E', 'R'): ('onda EM (Maxwell)', 'statico/radiante'),
    ('G', 'E'): ('buco nero carico (Reissner-Nordstrom)', 'neutro-curvo/carico-piatto'),
    ('G', 'R'): ('orizzonte degli eventi', 'piatto/singolare'),
    ('Q', 'E'): ('atomo di idrogeno', 'libero/legato'),
    ('Q', 'G'): (None, 'continuo/discreto'),  # VUOTO — il solo vero vuoto
    ('Q', 'R'): ('equazione di Dirac', 'non-relativistico/relativistico'),
    ('T', 'E'): ('funzione di partizione EM', 'freddo-neutro/plasma'),
    ('T', 'G'): ('temperatura di Hawking', 'piatto/radiante'),
    ('T', 'Q'): ('matrice densita', 'vuoto/pieno'),
    ('T', 'R'): ('gas relativistico', '0K/c'),
}

# Ponti generati dall'autologica (vuoti rialimentati)
PONTI_AUTOLOGICI = {
    ('GQ', 'T'): ('entropia di Bekenstein-Hawking', 'discreto-freddo/continuo-caldo'),
    ('GQ', 'E'): ('carica come topologia?', 'discreto-neutro/continuo-carico'),
    ('GQ', 'R'): ('causalita emergente?', 'discreto-sub/continuo-super'),
}

TRIANGOLAZIONI_NOTE = {
    ('G', 'Q', 'T'): 'buco nero di Hawking',
    ('E', 'Q', 'T'): 'materia condensata',
    ('E', 'G', 'T'): 'stella (plasma gravitante)',
    ('Q', 'R', 'T'): 'radiazione corpo nero (Planck 1900)',
    ('G', 'R', 'T'): 'cosmologia (Friedmann)',
    ('E', 'R', 'T'): 'sincrotrone (carica accelerata)',
    ('E', 'Q', 'R'): 'QED relativistica (Feynman)',
    ('E', 'G', 'R'): 'buco nero carico (Reissner-Nordstrom)',
    ('E', 'G', 'Q'): None,  # VUOTO
    ('G', 'Q', 'R'): None,  # VUOTO
}


def costruisci_incroci(teorie):
    """Genera tutti gli incroci tra coppie di teorie."""
    incroci = []
    for t1, t2 in combinations(teorie, 2):
        chiave = tuple(sorted([t1.sigla, t2.sigla]))

        # Cerca in entrambi gli ordini
        ponte_info = PONTI_NOTI.get(chiave) or PONTI_NOTI.get(chiave[::-1])
        if ponte_info:
            ponte, dipolo = ponte_info
        else:
            ponte = None
            dipolo = None

        incroci.append(Incrocio(t1, t2,
                                dipolo_zero=dipolo,
                                ponte=ponte))
    return incroci


def costruisci_triangolazioni(teorie, incroci):
    """Genera tutte le triangolazioni (triple)."""
    triangolazioni = []
    for triple in combinations(teorie, 3):
        chiave = tuple(sorted(t.sigla for t in triple))

        oggetto = TRIANGOLAZIONI_NOTE.get(chiave, 'NOT_FOUND')
        if oggetto == 'NOT_FOUND':
            # Triangolazione sconosciuta — cerca se tutti i sotto-incroci hanno ponte
            sotto = [i for i in incroci
                     if i.chiave() in [tuple(sorted([a.sigla, b.sigla]))
                                       for a, b in combinations(triple, 2)]]
            if any(i.vuoto for i in sotto):
                oggetto = None  # Vuoto se almeno un sotto-incrocio e vuoto
            else:
                oggetto = f"[emergente da {'+'.join(t.sigla for t in triple)}]"

        triangolazioni.append(Triangolazione(list(triple), oggetto))
    return triangolazioni


def autologica(teorie, incroci):
    """
    Rialimenta i vuoti come teorie.
    Per ogni vuoto: crea una teoria fantasma con la costante relazionale
    come costante propria, e la incrocia con tutte le altre.

    Ritorna le nuove teorie generate e i nuovi incroci.
    """
    nuove_teorie = []
    nuovi_incroci = []

    vuoti = [i for i in incroci if i.vuoto]

    for vuoto in vuoti:
        sigla = f"{vuoto.t1.sigla}{vuoto.t2.sigla}"

        # Controlla se gia generata
        if any(t.sigla == sigla for t in teorie + nuove_teorie):
            continue

        # La costante relazionale del vuoto
        # Per GQ: l_P^2 = G*hbar/c^3
        nuova = Teoria(
            sigla=sigla,
            nome=f"[{vuoto.t1.nome} x {vuoto.t2.nome}]",
            costante_nome=f"costante relazionale {sigla}",
            costante_simbolo=f"k_{sigla}",
        )
        nuova.generata = True
        nuove_teorie.append(nuova)

        # Incrocia con tutte le teorie esistenti
        for t in teorie:
            if t.sigla in sigla:
                # Autoriferimento: la teoria contiene gia questa
                ponte = f"f(f(x)) — autoriferimento ({t.sigla} in {sigla})"
                dipolo = f"autoriferito"
            else:
                # Cerca se l'incrocio produce un ponte noto
                ponte = _cerca_ponte_autologico(sigla, t.sigla)
                dipolo = None

            nuovi_incroci.append(Incrocio(nuova, t,
                                          dipolo_zero=dipolo,
                                          ponte=ponte))

    return nuove_teorie, nuovi_incroci


def _cerca_ponte_autologico(sigla_vuoto, sigla_teoria):
    """
    Cerca se l'incrocio di un vuoto con una teoria produce
    qualcosa di noto. Questo e il cuore dell'autologica:
    lo schema sa cose che noi non abbiamo cercato.
    """
    chiave = (sigla_vuoto, sigla_teoria)
    # Prima cerca nei ponti autologici noti
    if chiave in PONTI_AUTOLOGICI:
        return PONTI_AUTOLOGICI[chiave][0]
    # Poi cerca con ordine invertito
    chiave_inv = (sigla_teoria, sigla_vuoto)
    if chiave_inv in PONTI_AUTOLOGICI:
        return PONTI_AUTOLOGICI[chiave_inv][0]
    return None


def incrocia_ponti(incroci):
    """
    L'autocombo vera: non incrociare teorie fantasma.
    Incrociare i PONTI tra loro.

    Se il ponte T×Q è 'matrice densità' e il ponte Q×E è 'atomo di idrogeno',
    cosa hanno in comune? Cosa li connette?

    Due ponti sono imparentati se condividono una teoria.
    La RELAZIONE tra ponti è il secondo livello.
    """
    ponti = [i for i in incroci if not i.vuoto]

    print(f"\n{'='*65}")
    print(f"INCROCIO PONTI — il secondo livello")
    print(f"{'='*65}")
    print(f"\n  {len(ponti)} ponti da incrociare\n")

    relazioni = []
    for p1, p2 in combinations(ponti, 2):
        # Condividono una teoria?
        teorie_p1 = {p1.t1.sigla, p1.t2.sigla}
        teorie_p2 = {p2.t1.sigla, p2.t2.sigla}
        comuni = teorie_p1 & teorie_p2
        esclusive_p1 = teorie_p1 - teorie_p2
        esclusive_p2 = teorie_p2 - teorie_p1

        if comuni:
            # Due ponti con una teoria in comune
            # Il TERZO INCLUSO tra i due ponti è la triangolazione
            perno = '+'.join(sorted(comuni))
            lati = '+'.join(sorted(esclusive_p1 | esclusive_p2))

            relazioni.append({
                'ponte1': f"{p1.t1.sigla}x{p1.t2.sigla}: {p1.ponte}",
                'ponte2': f"{p2.t1.sigla}x{p2.t2.sigla}: {p2.ponte}",
                'perno': perno,
                'lati': lati,
                'teorie_totali': sorted(teorie_p1 | teorie_p2),
            })

    # Raggruppa per perno (la teoria condivisa)
    per_perno = {}
    for r in relazioni:
        per_perno.setdefault(r['perno'], []).append(r)

    for perno, rels in sorted(per_perno.items()):
        print(f"  Perno: {perno} ({len(rels)} coppie di ponti)")
        for r in rels[:5]:  # Max 5 per non esplodere
            print(f"    {r['ponte1'][:40]}")
            print(f"    {r['ponte2'][:40]}")
            print(f"    -> teorie unite: {r['teorie_totali']}")
            print()

    # Quali teorie compaiono più spesso come perno?
    print(f"\n  Frequenza come perno:")

exec
/bin/bash -lc "find tools/data -maxdepth 2 -type f \\( -name '*incrocio*' -o -name '*teorie*' -o -name '*bridge*' -o -name '*semantic*' \\) | sort | tail -30" in /opt/MM_D-ND
 succeeded in 0ms:
tools/data/conoscenza_teorie.json.bak.retraction_22_04
tools/data/incrocio_20260331_0345.json
tools/data/incrocio_20260331_1807.json
tools/data/incrocio_20260401_0344.json
tools/data/incrocio_20260402_0344.json
tools/data/incrocio_20260402_0755.json
tools/data/incrocio_20260402_0803.json
tools/data/incrocio_20260402_0808.json
tools/data/incrocio_20260402_0809.json
tools/data/incrocio_20260403_0330.json
tools/data/incrocio_20260404_0330.json
tools/data/incrocio_20260404_1852.json
tools/data/incrocio_20260405_0330.json
tools/data/incrocio_20260405_0715.json
tools/data/incrocio_20260405_0723.json
tools/data/incrocio_20260405_0730.json
tools/data/incrocio_20260405_0753.json
tools/data/incrocio_20260420_1856.json
tools/data/incrocio_20260421_0720.json
tools/data/incrocio_20260422_0336.json
tools/data/incrocio_20260423_0335.json
tools/data/incrocio_20260424_0347.json
tools/data/incrocio_20260425_0339.json
tools/data/incrocio_20260428_0340.json
tools/data/incrocio_20260429_0859.json
tools/data/incrocio_20260506_0633.json
tools/data/incrocio_20260507_2120.json
tools/data/incrocio_risultato.json
tools/data/lab_bridge_issues.jsonl
tools/data/trace_bridge_results.json

exec
/bin/bash -lc "rg -n \"QxR|GxR|TxR|ExR|TQGE\\+R|ponte|vuoto|R=\" tools data shared_memory 2>/dev/null" in /opt/MM_D-ND
 exited 2 in 0ms:
tools/alignment_marker.py:137:        print('(vuoto)'); return 0
tools/bicono_projection.py:67:        'invariante': 'k_B (ponte micro-macro)',
tools/bicono_projection.py:109:    'pieno_vuoto': {
tools/bicono_projection.py:115:            'non_possibile': 'pieno senza vuoto, vuoto senza pieno',
tools/bicono_projection.py:130:    'pieno_vuoto': ['pieno', 'vuoto', 'nulla', 'tutto', 'indeterminato'],
tools/bicono_projection.py:201:            'possibile': f'leggere {tid} come ponte {"x".join(theories)}',
tools/LAB_AGENT_CONTEXT.md:52:- Tetraedro TQGE: 4 vertici (T,Q,G,E), 6 lati con perno i, 5 ponti, 1 vuoto (QxG)
tools/LAB_AGENT_CONTEXT.md:60:- g(x)=1/(1+x) = Fermi-Dirac, punto fisso 1/φ. f→g = ponte TxQ algebrico.
tools/LAB_AGENT_CONTEXT.md:66:| ExR | Come coesistono statico e radiante? | onda EM |
tools/LAB_AGENT_CONTEXT.md:68:| GxR | Come coesistono piatto e singolare? | orizzonte eventi |
tools/LAB_AGENT_CONTEXT.md:71:| QxR | Come coesistono non-relativistico e relativistico? | eq. Dirac |
tools/LAB_AGENT_CONTEXT.md:74:| TxQ | Come coesistono vuoto e pieno? | matrice densità |
tools/LAB_AGENT_CONTEXT.md:75:| TxR | Come coesistono 0K e c? | gas relativistico |
tools/LAB_AGENT_CONTEXT.md:77:QxG è il vuoto — l'unico lato senza ponte. Il vuoto non è assenza del ponte — è dove i due
tools/LAB_AGENT_CONTEXT.md:85:- Se non sai, lascia vuoto. Blank > Wrong. Errore costa 3x di un non-so.
tools/LAB_AGENT_CONTEXT.md:140:- dnd_teoria.py: 5 teorie codificate come dipoli (TQGE+R), 13 dipoli, isomorfie cross-teoria
tools/LAB_AGENT_CONTEXT.md:159:Esempio reale: la curvatura di Ricci R=2.000 della metrica g=(p/2)² segue analiticamente dal PNT (p_n ~ n ln n). Non è una scoperta — è una conseguenza della definizione. Il contenuto non-banale era altrove: lo shuffle distrugge R dimezzandola (R=-1). Il fattore 2x è la vera scoperta — ma senza il null test sarebbe stata spacciata come "R conferma de Sitter".
tools/dnd_retriever.py:58:def wikipedia_ponte(coppia, concepts=None):
tools/dnd_retriever.py:60:    Recupera conoscenza strutturata da Wikipedia per un ponte tra teorie.
tools/dnd_retriever.py:125:def arxiv_ponte(coppia, query=None, max_results=2):
tools/dnd_retriever.py:185:        wiki_list = wikipedia_ponte(coppia)
tools/dnd_retriever.py:194:            papers = arxiv_ponte(coppia, max_results=2)
tools/exp_two_layer_universality.py:303:        print(f"  Real: SR={real_obs['SR']:.4f}, L1={real_obs['L1']:.4f}, SR2={real_obs['SR2']:.4f}, L2={real_obs['L2']:.4f}")
tools/exp_dipolar_vector_scaling.py:191:        print(f"  {label}: z_SR={r['z_sr']}, z_L1={r['z_l1']}, theta={r['theta_deg']}, |V|={r['magnitude']}")
tools/validate_tension_mapping.py:8:2. Fa keyword-scan contro lessico TQGE+R curato
tools/validate_tension_mapping.py:38:# Lessico TQGE+R — termini che identificano ogni teoria nel linguaggio naturale
tools/exp_markov_dipolar_decomposition.py:286:        print(f"    Real:    theta={row['real_theta']:.1f}, dL1/dSR={row['real_ratio']:.3f}")
tools/exp_markov_dipolar_decomposition.py:288:              f"dL1/dSR={row['m1_ratio']:.3f}+/-{row['m1_ratio_std']:.3f}")
tools/translate_tensions.py:155:            print("  claude pre-flight: HUNG (output vuoto, skip per questa run)", file=sys.stderr)
tools/generate_tensions_json.sh:14:EXPLORER="/opt/MM_D-ND/tools/dnd_explorer.py"
tools/generate_tensions_json.sh:76:TRANSLATOR="/opt/MM_D-ND/tools/translate_tensions.py"
tools/build_lab_graph.py:5:Nodi: teorie (TQGE+R+S), scoperte, tensioni attive
tools/build_lab_graph.py:46:    ('E', 'R'): {'ponte': 'onda EM', 'ponte_en': 'EM wave', 'domanda': 'Come coesistono statico e radiante?', 'domanda_en': 'How do static and radiant coexist?'},
tools/build_lab_graph.py:47:    ('G', 'E'): {'ponte': 'buco nero carico', 'ponte_en': 'charged black hole', 'domanda': 'Come coesistono neutro-curvo e carico-piatto?', 'domanda_en': 'How do neutral-curved and charged-flat coexist?'},
tools/build_lab_graph.py:48:    ('G', 'R'): {'ponte': 'orizzonte eventi', 'ponte_en': 'event horizon', 'domanda': 'Come coesistono piatto e singolare?', 'domanda_en': 'How do flat and singular coexist?'},
tools/build_lab_graph.py:49:    ('Q', 'E'): {'ponte': 'atomo di idrogeno', 'ponte_en': 'hydrogen atom', 'domanda': 'Come coesistono libero e legato?', 'domanda_en': 'How do free and bound coexist?'},
tools/build_lab_graph.py:50:    ('Q', 'G'): {'ponte': '', 'ponte_en': '', 'domanda': 'Come coesistono continuo e discreto?', 'domanda_en': 'How do continuous and discrete coexist?', 'vuoto': True},
tools/build_lab_graph.py:51:    ('Q', 'R'): {'ponte': 'eq. Dirac', 'ponte_en': 'Dirac eq.', 'domanda': 'Come coesistono non-relativistico e relativistico?', 'domanda_en': 'How do non-relativistic and relativistic coexist?'},
tools/build_lab_graph.py:52:    ('T', 'E'): {'ponte': 'funzione partizione', 'ponte_en': 'partition function', 'domanda': 'Come coesistono freddo e plasma?', 'domanda_en': 'How do cold and plasma coexist?'},
tools/build_lab_graph.py:53:    ('T', 'G'): {'ponte': 'temperatura Hawking', 'ponte_en': 'Hawking temperature', 'domanda': 'Come coesistono piatto e radiante?', 'domanda_en': 'How do flat and radiant coexist?'},
tools/build_lab_graph.py:54:    ('T', 'Q'): {'ponte': 'matrice densità', 'ponte_en': 'density matrix', 'domanda': 'Come coesistono vuoto e pieno?', 'domanda_en': 'How do empty and full coexist?'},
tools/build_lab_graph.py:55:    ('T', 'R'): {'ponte': 'gas relativistico', 'ponte_en': 'relativistic gas', 'domanda': 'Come coesistono 0K e c?', 'domanda_en': 'How do 0K and c coexist?'},
tools/build_lab_graph.py:399:                # QxG scoperte → tensioni legate al vuoto quantistico-gravitazionale
tools/build_lab_graph.py:413:            # 2. QxG coinvolto? (il vuoto principale del tetraedro)
tools/build_lab_graph.py:482:            n_ponti = sum(1 for e in edges if (e['source'] == nid or e['target'] == nid) and e.get('ponte'))
tools/build_lab_graph.py:485:            # Trova il vuoto (ponte mancante)
tools/build_lab_graph.py:486:            vuoti = [e for e in edges if (e['source'] == nid or e['target'] == nid) and e.get('vuoto')]
tools/build_lab_graph.py:491:                annotation += f'. Ponte mancante con {other_label} — il vuoto più importante del tetraedro'
tools/build_lab_graph.py:503:                ponte_esistente = any(e for e in edges if
tools/build_lab_graph.py:504:                    {e['source'], e['target']} == set(teoria_ids[:2]) and e.get('ponte'))
tools/build_lab_graph.py:505:                if ponte_esistente:
tools/build_lab_graph.py:506:                    node['annotation'] = f'Rinforza il ponte {pair} — collegamento tra {len(teoria_ids)} teorie'
tools/build_lab_graph.py:509:                    node['annotation'] = f'Potenziale ponte {pair} — questa scoperta potrebbe colmare il vuoto'
tools/build_lab_graph.py:649:            'tipo': 'ponte',
tools/build_lab_graph.py:650:            'ponte': info['ponte'],
tools/build_lab_graph.py:651:            'ponte_en': info['ponte_en'],
tools/build_lab_graph.py:654:            'vuoto': info.get('vuoto', False),
tools/build_lab_graph.py:756:    # Arricchisci lati ponte con link
tools/build_lab_graph.py:758:        if edge.get('ponte'):
tools/build_lab_graph.py:760:                {'label': edge['ponte'], 'id': f"{edge['source']}x{edge['target']}"},
tools/build_lab_graph.py:815:            'ponti': sum(1 for p in PONTI.values() if p['ponte']),
tools/build_lab_graph.py:816:            'vuoti': sum(1 for p in PONTI.values() if p.get('vuoto')),
tools/exp_geodesic_deviation_primes.py:3:After finding R=2 is tautological (holds for ANY monotonic sequence),
tools/exp_geodesic_deviation_primes.py:164:finding = "R=2 tautological. Curvature fluctuations encode gap correlations."
tools/exp_geodesic_deviation_primes.py:180:    "claim_tested": "g=(p/2)^2 de Sitter — is R=2 specific to primes?",
tools/exp_geodesic_deviation_primes.py:181:    "answer": "NO. R=2 is tautological. The FLUCTUATIONS dR=R-2 encode prime structure.",
tools/lab_valutatore.py:149:                p = (v.get('ponte') or '')[:80]
tools/lab_valutatore.py:153:        return "\n".join(lines) if lines else "(vuoto)"
tools/lab_valutatore.py:166:            resp = (q.get('risposta') or '(vuoto)')[:60]
tools/lab_valutatore.py:168:        return "\n".join(lines) if lines else "(vuoto)"
tools/data/video_feed.json:13:        "Nulla che produce qualcosa = vuoto quantistico strutturato come il potenziale D-ND",
tools/data/video_feed.json:78:      "coupling_hint": "Tetraedro lato ExR (elettromagnetismo x relativita). Il campo magnetico non esiste come entita separata — emerge dal cambio di frame. Dipolo: elettrico/magnetico sono lo stesso visto da angoli diversi."
tools/dnd_lab_team.py:12:    python dnd_lab_team.py                    # un ciclo dal vuoto QxG
tools/dnd_lab_team.py:80:10 coppie con ponti noti. Una sola senza ponte: QxG (continuo vs discreto).
tools/dnd_lab_team.py:97:        ('T', 'Q', 'G', 'Hawking emerge dalla composizione TxQ∘QxG. Ma QxG è vuoto.'),
tools/dnd_lab_team.py:99:        ('Q', 'G', 'E', 'Atomo H + buco nero carico ma QxG vuoto. Come comunica E con il vuoto?'),
tools/dnd_lab_team.py:112:5 ponti noti, 1 vuoto (QxG). R=c è il frame esterno.
tools/dnd_lab_team.py:125:5 ponti noti. 1 vuoto: QxG (continuo vs discreto, l_P²).
tools/dnd_lab_team.py:126:R=c è il frame — non ruota, permette la rotazione.
tools/dnd_lab_team.py:184:    facce_nomi = ['T-Q-G (Hawking, vuoto QxG)', 'T-Q-E (matrice densità, atomo H, partizione)',
tools/dnd_lab_team.py:185:                  'Q-G-E (atomo H, BN carico, vuoto QxG)', 'T-G-E (Hawking, partizione, BN carico)']
tools/dnd_lab_team.py:223:        print(f"  Da: [vuoto QxG]")
tools/exp_markov_k_direction.py:158:          f"dL1/dSR={real['dL1_over_dSR']:.3f}")
tools/data/incrocio_20260422_0336.json:8:  "consecutio_verso_vuoto": 6,
tools/LAB_OPERATIVO.md:29:- 10 coppie → 9 ponti + 1 vuoto (Q×G)
tools/LAB_OPERATIVO.md:30:- Per ogni coppia: costante relazionale, dipolo dello zero, ponte
tools/LAB_OPERATIVO.md:32:- Consecutio: 60 domande consecutive (i ponti si parlano), 6 verso il vuoto
tools/LAB_OPERATIVO.md:33:- Il vuoto Q×G è il crocevia — il punto di potenziale massimo
tools/LAB_OPERATIVO.md:36:sono identità note riorganizzate con la lente D-ND. Il vuoto Q×G è noto
tools/harvest_moodnd.py:118:        f.write("*[Contenuto vuoto o non estraibile]*\n")
tools/harvest_moodnd.py:186:                        status = "vuoto"
tools/GUIDA_GODEL_TM1.md:33:| **Quando il copy non convince** | Per trovare cosa manca, non cosa aggiungere | "Questa pagina spiega il modello ma nessuno clicca il ponte. Inverti." |
tools/GUIDA_GODEL_TM1.md:90:**3. Tensione di conversione** — il ponte non funziona
tools/GUIDA_GODEL_TM1.md:94:Il ponte a consulenza e' [dove]. Nessuno lo attraversa.
tools/GUIDA_GODEL_TM1.md:125:Tutte hanno una pagina dedicata con ponte a consulenza.
tools/lib_llm_chain.py:20:Ritorna stringa raw output del primo provider che risponde non-vuoto.
tools/lib_llm_chain.py:211:    Returns: raw output del primo provider non-vuoto.
tools/dnd_loop.py:61:  GxR: r_s = 2GM/c^2 — raggio di Schwarzschild
tools/dnd_loop.py:67:  QxR: equazione di Dirac (quantistica relativistica)
tools/dnd_loop.py:68:  GxR: orizzonte degli eventi
tools/dnd_loop.py:69:  ExR: tensore elettromagnetico F (E e B sono lo stesso campo in frame diversi)
tools/dnd_loop.py:73:  TxQ: vuoto (0K) vs pieno (energia punto zero hbar*w/2)
tools/dnd_loop.py:75:  GxR: piatto (Minkowski) vs singolare (curvatura infinita)
tools/dnd_loop.py:76:  ExR: statico (carica ferma) vs radiante (carica accelerata)
tools/dnd_loop.py:81:5 ponti noti, 1 vuoto (QxG). R=c è il frame — non ruota, permette la rotazione.
tools/dnd_loop.py:89:- Se non sai, lascia vuoto. Blank > Wrong.
tools/lab_agent.sh:9:TOOLS_DIR="$(cd "$(dirname "$0")" && pwd)"
tools/lab_agent.sh:10:REPO_DIR="$(dirname "$TOOLS_DIR")"
tools/lab_agent.sh:11:DATA_DIR="$TOOLS_DIR/data"
tools/lab_agent.sh:12:REPORT_DIR="$DATA_DIR/reports"
tools/lab_agent.sh:117:#   1. dnd_incrocio.ciclo_autonomo() → depositi, vuoti, consecutio TQGE+R
tools/lab_agent.sh:361:    # Detect output vuoto (CLI hung silenzioso, segno premonitore del bug 0721)
tools/lab_agent.sh:443:        echo "[FALLBACK claude] HUNG (output vuoto pre-flight)."
tools/lab_agent.sh:554:# Logica: se field observables_used esiste E è esplicitamente vuoto E
tools/lab_agent.sh:873:    # 10. SEMANTIC BRIDGE — scoperte numeriche → annotazioni pair TQGE+R
tools/lab_agent.sh:882:    echo "--- 10. SEMANTIC BRIDGE (lab → teorie TQGE+R) ---"
tools/exp_desitter_unification.py:76:    dR = R - 2.0  # fluctuation around de Sitter R=2
tools/build_agent_field.py:335:    + le consecutio scientifiche aperte (domande cross-pair TQGE+R).
tools/build_agent_field.py:343:    parts.append("Risultato dell'incrocio TQGE+R appena eseguito. Le consecutio sono\n"
tools/build_agent_field.py:352:                claim = (d.get('claim') or d.get('contenuto') or d.get('ponte') or '')[:120]
tools/build_agent_field.py:447:    #   3. Incrocio teorie (consecutio cross-pair TQGE+R aperte)
tools/build_agent_field.py:506:    # attacca un vincolo → cycle methodology → bicono vuoto → no CRYSTALLIZE.
tools/build_agent_field.py:636:        parts.append(f"Risultante: R={r['value']} (h={r['h']}). {r['interpretation']}")
tools/build_agent_field.py:697:            f"Struttura: {topo['ponti_count']} ponti, {topo['vuoti_count']} vuoto(i), "
tools/semantic_bridge.py:4:semantiche sul grafo conoscenza TQGE+R.
tools/semantic_bridge.py:8:teorie TQGE+R restano fisse, statiche. Le scoperte non sedimentano
tools/semantic_bridge.py:261:                    'message': f'{field} dichiarato in fields_present ma valore vuoto',
tools/semantic_bridge.py:416:    ddf_*.json NON viene ponteggiato: e' meta operativo (deploy/uncommitted/drift),
tools/semantic_bridge.py:552:    # Log sempre (anche vuoto): lab_agent.sh legge l'ultima linea per decidere.
tools/dnd_piano11.py:431:            "the regulator R=ln(φ) (= Lyapunov exponent) and the class field structure."
tools/dnd_lab_vivo.py:48:    # Seleziona: prima il vuoto, poi le più interessanti
tools/dnd_lab_vivo.py:49:    verso_vuoto = [d for d in domande_cons if d['tocca_vuoto']]
tools/dnd_lab_vivo.py:50:    non_vuoto = [d for d in domande_cons if not d['tocca_vuoto']]
tools/dnd_lab_vivo.py:53:    da_processare = verso_vuoto[:2] + non_vuoto[:1]
tools/test_cron_exact.sh:103:# Ha prodotto output (raw log non vuoto)?
tools/test_cron_exact.sh:114:    fail "Raw log vuoto o non trovato"
tools/dnd_projective_quantization.py:375:Il ponte D-ND/ζ potrebbe non essere diretto (iterazione scalare → zeri)
tools/dnd_indeterminazione.py:372:     → Questo è il "vuoto quantistico": fluttuazione eterna
tools/data/reports/agent_20260506_1955.md:39:| primes | 0.978 | 1.128 | 0.975 | 1 | SR=-12.1, SR2=-2.5, L1=-8.9, L2=-1.9, triple_var=-8.7 |
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/dnd_incrocio.py:5:Per ogni coppia: costante relazionale, dipolo dello zero, ponte.
tools/dnd_incrocio.py:6:Dove trova un vuoto, lo rialimenta come teoria.
tools/dnd_incrocio.py:42:                 dipolo_zero=None, ponte=None):
tools/dnd_incrocio.py:48:        self.ponte = ponte
tools/dnd_incrocio.py:49:        self.vuoto = ponte is None or '[VUOTO' in str(ponte).upper()
tools/dnd_incrocio.py:55:        mark = '***' if self.vuoto else '   '
tools/dnd_incrocio.py:56:        return f"{mark}{self.t1.sigla}x{self.t2.sigla}: {self.ponte or '[VUOTO]'}"
tools/dnd_incrocio.py:63:        self.vuoto = oggetto is None or '[VUOTO' in str(oggetto).upper()
tools/dnd_incrocio.py:66:        mark = '***' if self.vuoto else '   '
tools/dnd_incrocio.py:89:    ('Q', 'G'): (None, 'continuo/discreto'),  # VUOTO — il solo vero vuoto
tools/dnd_incrocio.py:93:    ('T', 'Q'): ('matrice densita', 'vuoto/pieno'),
tools/dnd_incrocio.py:125:        ponte_info = PONTI_NOTI.get(chiave) or PONTI_NOTI.get(chiave[::-1])
tools/dnd_incrocio.py:126:        if ponte_info:
tools/dnd_incrocio.py:127:            ponte, dipolo = ponte_info
tools/dnd_incrocio.py:129:            ponte = None
tools/dnd_incrocio.py:134:                                ponte=ponte))
tools/dnd_incrocio.py:146:            # Triangolazione sconosciuta — cerca se tutti i sotto-incroci hanno ponte
tools/dnd_incrocio.py:150:            if any(i.vuoto for i in sotto):
tools/dnd_incrocio.py:151:                oggetto = None  # Vuoto se almeno un sotto-incrocio e vuoto
tools/dnd_incrocio.py:162:    Per ogni vuoto: crea una teoria fantasma con la costante relazionale
tools/dnd_incrocio.py:170:    vuoti = [i for i in incroci if i.vuoto]
tools/dnd_incrocio.py:172:    for vuoto in vuoti:
tools/dnd_incrocio.py:173:        sigla = f"{vuoto.t1.sigla}{vuoto.t2.sigla}"
tools/dnd_incrocio.py:179:        # La costante relazionale del vuoto
tools/dnd_incrocio.py:183:            nome=f"[{vuoto.t1.nome} x {vuoto.t2.nome}]",
tools/dnd_incrocio.py:194:                ponte = f"f(f(x)) — autoriferimento ({t.sigla} in {sigla})"
tools/dnd_incrocio.py:197:                # Cerca se l'incrocio produce un ponte noto
tools/dnd_incrocio.py:198:                ponte = _cerca_ponte_autologico(sigla, t.sigla)
tools/dnd_incrocio.py:203:                                          ponte=ponte))
tools/dnd_incrocio.py:208:def _cerca_ponte_autologico(sigla_vuoto, sigla_teoria):
tools/dnd_incrocio.py:210:    Cerca se l'incrocio di un vuoto con una teoria produce
tools/dnd_incrocio.py:214:    chiave = (sigla_vuoto, sigla_teoria)
tools/dnd_incrocio.py:219:    chiave_inv = (sigla_teoria, sigla_vuoto)
tools/dnd_incrocio.py:230:    Se il ponte T×Q è 'matrice densità' e il ponte Q×E è 'atomo di idrogeno',
tools/dnd_incrocio.py:236:    ponti = [i for i in incroci if not i.vuoto]
tools/dnd_incrocio.py:259:                'ponte1': f"{p1.t1.sigla}x{p1.t2.sigla}: {p1.ponte}",
tools/dnd_incrocio.py:260:                'ponte2': f"{p2.t1.sigla}x{p2.t2.sigla}: {p2.ponte}",
tools/dnd_incrocio.py:274:            print(f"    {r['ponte1'][:40]}")
tools/dnd_incrocio.py:275:            print(f"    {r['ponte2'][:40]}")
tools/dnd_incrocio.py:311:        n_vuoti_coppie = sum(1 for i in incroci if i.vuoto)
tools/dnd_incrocio.py:312:        n_vuoti_triple = sum(1 for t in triangolazioni if t.vuoto)
tools/dnd_incrocio.py:321:                if i.vuoto:
tools/dnd_incrocio.py:327:                if t.vuoto:
tools/dnd_incrocio.py:333:            if not i.vuoto:
tools/dnd_incrocio.py:339:            if r['ponte1'] and r['ponte2']:
tools/dnd_incrocio.py:343:                    'ponte1': r['ponte1'],
tools/dnd_incrocio.py:344:                    'ponte2': r['ponte2'],
tools/dnd_incrocio.py:351:            print(f"\n  Nessun vuoto. Saturazione raggiunta.")
tools/dnd_incrocio.py:366:            autoriferito = 'autoriferimento' in str(ni.ponte or '').lower()
tools/dnd_incrocio.py:372:            if ni.ponte and not ni.vuoto and 'autoriferimento' not in str(ni.ponte).lower():
tools/dnd_incrocio.py:376:                    'ponte': ni.ponte,
tools/dnd_incrocio.py:390:                print(f"  [{d['iterazione']}] {d['incrocio']}: {d['ponte']}")
tools/dnd_incrocio.py:392:                print(f"  [{d['iterazione']}] perno={d['perno']}: {d['ponte1'][:35]} <-> {d['ponte2'][:35]}")
tools/dnd_incrocio.py:417:    I ponti si parlano. Ogni ponte informa i ponti vicini.
tools/dnd_incrocio.py:419:    La domanda consecutiva: cosa dice ponte A su ponte B?
tools/dnd_incrocio.py:450:                    'ponte_da': d['risposta'],
tools/dnd_incrocio.py:451:                    'ponte_a': risposta2,
tools/dnd_incrocio.py:452:                    'tocca_vuoto': d2.get('vuoto', False),
tools/dnd_incrocio.py:463:            'verso_vuoto': sum(1 for d in domande_consecutive if d['tocca_vuoto']),
tools/dnd_incrocio.py:483:    for chiave, (ponte, dipolo) in sorted(PONTI_NOTI.items()):
tools/dnd_incrocio.py:490:        vuoto = ponte is None
tools/dnd_incrocio.py:492:        mark = '***' if vuoto else '   '
tools/dnd_incrocio.py:493:        risposta = ponte or '[VUOTO]'
tools/dnd_incrocio.py:502:            'vuoto': vuoto,
tools/dnd_incrocio.py:513:            'n_con_risposta': sum(1 for r in risultati if not r['vuoto']),
tools/dnd_incrocio.py:514:            'n_vuoti': sum(1 for r in risultati if r['vuoto']),
tools/dnd_incrocio.py:526:    1. Domande verso il vuoto (QxG) — il potenziale massimo
tools/dnd_incrocio.py:534:    # Prima: domande verso il vuoto
tools/dnd_incrocio.py:535:    verso_vuoto = [d for d in domande_cons if d['tocca_vuoto']]
tools/dnd_incrocio.py:536:    for d in verso_vuoto[:max_tensioni]:
tools/dnd_incrocio.py:539:            'tipo': 'consecutio_vuoto',
tools/dnd_incrocio.py:540:            'claim': f"Relazione tra {d['ponte_da']} e il vuoto {d['a']}: {d['domanda']}",
tools/dnd_incrocio.py:542:            'nota': f"Perno: {d['perno']}. La consecutio attraversa il vuoto.",
tools/dnd_incrocio.py:543:            'ponte_da': d['ponte_da'],
tools/dnd_incrocio.py:544:            'ponte_a': d['ponte_a'],
tools/dnd_incrocio.py:551:        non_vuoto = [d for d in domande_cons if not d['tocca_vuoto']]
tools/dnd_incrocio.py:554:        for d in non_vuoto:
tools/dnd_incrocio.py:560:                'tipo': 'consecutio_ponte',
tools/dnd_incrocio.py:561:                'claim': f"{d['ponte_da']} e {d['ponte_a']} condividono {d['perno']}: {d['domanda']}",
tools/dnd_incrocio.py:564:                'ponte_da': d['ponte_da'],
tools/dnd_incrocio.py:565:                'ponte_a': d['ponte_a'],
tools/dnd_incrocio.py:579:    Formato: { chiave: { ponte, dipolo, fonte, data } }
tools/dnd_incrocio.py:588:def salva_ponte_evoluto(chiave, ponte, dipolo=None, fonte='domandatore'):
tools/dnd_incrocio.py:590:    Aggiunge un ponte al catalogo evolvibile.
tools/dnd_incrocio.py:603:            'ponte': ponte,
tools/dnd_incrocio.py:609:        print(f"  [NUOVO PONTE] {chiave_str}: {ponte} (fonte: {fonte})")
tools/dnd_incrocio.py:651:                'ponte': pp.get('ponte', ''),
tools/dnd_incrocio.py:694:            ponte_str = p.get('ponte', p.get('fonte', '?'))[:50]
tools/dnd_incrocio.py:695:            print(f"    {tag} {'x'.join(p['coppia'])}: {ponte_str}")
tools/dnd_incrocio.py:729:                        PONTI_NOTI[chiave] = (info['ponte'], info.get('dipolo'))
tools/dnd_incrocio.py:730:                        print(f"    [EVOLUTO] {chiave_str}: {info['ponte']}")
tools/dnd_incrocio.py:741:    n_vuoto = sum(1 for d in domande_cons if d['tocca_vuoto'])
tools/dnd_incrocio.py:742:    print(f"  Consecutio: {n_cons} domande consecutive, {n_vuoto} verso il vuoto")
tools/dnd_incrocio.py:756:        # Usa il ponte esplicito se disponibile, altrimenti riferimento alla fonte
tools/dnd_incrocio.py:757:        ponte_desc = pe.get('ponte') if pe.get('esplicito') else f"[da fonte: {pe['fonte'][:40]}]"
tools/dnd_incrocio.py:759:        salva_ponte_evoluto(pe['coppia'], ponte_desc,
tools/dnd_incrocio.py:770:        'vuoti': sum(1 for d in domande if d['vuoto']),
tools/dnd_incrocio.py:772:        'consecutio_verso_vuoto': n_vuoto,
tools/dnd_incrocio.py:878:        'ponte_autologico',      # ponti nel vuoto (QxG)
tools/dnd_incrocio.py:996:    - Se trova qualcosa di nuovo: registra come ponte evoluto
tools/dnd_incrocio.py:1019:        ponte_da = tens.get('ponte_da', '')
tools/dnd_incrocio.py:1020:        ponte_a = tens.get('ponte_a', '')
tools/dnd_incrocio.py:1022:        print(f"\n    [{tens['id']}] {ponte_da} ↔ {ponte_a}")
tools/dnd_incrocio.py:1072:        # 4. Verso il vuoto — la domanda più potente
tools/dnd_incrocio.py:1073:        if tens.get('tipo') == 'consecutio_vuoto':
tools/dnd_incrocio.py:1074:            # La coppia tocca QxG. Cosa sappiamo del ponte verso il vuoto?
tools/dnd_incrocio.py:1076:            for chiave, (ponte_aut, dip_aut) in ponti_aut.items():
tools/dnd_incrocio.py:1079:                        'tipo': 'ponte_autologico_verso_vuoto',
tools/dnd_incrocio.py:1080:                        'dettaglio': f"{'x'.join(chiave)}: {ponte_aut}",
tools/dnd_incrocio.py:1081:                        'nota': f'Ponte autologico nel vuoto: {dip_aut}',
tools/dnd_incrocio.py:1120:                    f"- {coppia_da}: {ponte_da}\n"
tools/dnd_incrocio.py:1121:                    f"- {coppia_a}: {ponte_a}\n\n"
tools/dnd_incrocio.py:1147:                'ponte_da': ponte_da,
tools/dnd_incrocio.py:1148:                'ponte_a': ponte_a,
tools/dnd_incrocio.py:1155:                'ponte_da': ponte_da,
tools/dnd_incrocio.py:1156:                'ponte_a': ponte_a,
tools/dnd_incrocio.py:1343:    su una coppia di teorie, lo registra come ponte evoluto.
tools/dnd_incrocio.py:1352:    # Se la tensione era verso il vuoto e l'esperimento ha prodotto output,
tools/dnd_incrocio.py:1353:    # questo è un potenziale nuovo ponte
tools/dnd_incrocio.py:1354:    if tensione.get('tipo') == 'consecutio_vuoto' and coppia_a:
tools/dnd_incrocio.py:1357:            # Estrai le prime 80 char dell'output come candidato ponte
tools/dnd_incrocio.py:1360:                salva_ponte_evoluto(
tools/dnd_incrocio.py:1376:       - Un ponte evoluto entra nel catalogo e cambia l'incrocio
tools/dnd_incrocio.py:1432:                        PONTI_NOTI[chiave] = (info['ponte'], info.get('dipolo'))
tools/dnd_incrocio.py:1438:        print(f"\n  Fase 1: Skip incrocio (nessun ponte nuovo — usa stato precedente)")
tools/dnd_incrocio.py:1451:    # Al primo ciclo: processa verso il vuoto (priorità)
tools/dnd_incrocio.py:1459:        # Primo ciclo: priorità al vuoto
tools/dnd_incrocio.py:1477:            # Cerca sigla coppia (es. "GxR: r_s..." → "GxR")
tools/dnd_incrocio.py:1501:                    ponte_da_info = PONTI_NOTI.get(coppia) or PONTI_NOTI.get(coppia[::-1])
tools/dnd_incrocio.py:1502:                    ponte_a_info = PONTI_NOTI.get(altra) or PONTI_NOTI.get(altra[::-1])
tools/dnd_incrocio.py:1503:                    p_da = ponte_da_info[0] if ponte_da_info else '[?]'
tools/dnd_incrocio.py:1504:                    p_a = ponte_a_info[0] if ponte_a_info else '[?]'
tools/dnd_incrocio.py:1508:                        'tipo': 'consecutio_ponte',
tools/dnd_incrocio.py:1511:                        'ponte_da': p_da or '',
tools/dnd_incrocio.py:1512:                        'ponte_a': p_a or '',
tools/dnd_incrocio.py:1546:            ponte_da = tens.get('ponte_da', '')
tools/dnd_incrocio.py:1547:            ponte_a = tens.get('ponte_a', '')
tools/dnd_incrocio.py:1595:            # Ponti autologici verso il vuoto
tools/dnd_incrocio.py:1596:            if tens.get('tipo') in ('consecutio_vuoto', 'generata'):
tools/dnd_incrocio.py:1597:                for chiave, (ponte_aut, dip_aut) in PONTI_AUTOLOGICI.items():
tools/dnd_incrocio.py:1600:                            'tipo': 'ponte_autologico',
tools/dnd_incrocio.py:1601:                            'dettaglio': f"{'x'.join(chiave)}: {ponte_aut} ({dip_aut})",
tools/dnd_incrocio.py:1642:        ponte_desc = pe.get('ponte') if pe.get('esplicito') else f"[da fonte: {pe['fonte'][:40]}]"
tools/dnd_incrocio.py:1644:        salva_ponte_evoluto(pe['coppia'], ponte_desc,
tools/dnd_incrocio.py:1772:                tag = ' [VUOTO]' if d['tocca_vuoto'] else ''
tools/dnd_spettro_zeta.py:13:  Il discriminante 5 è il ponte: λ²-λ-1=0 (φ) e r²+3r+1=0 (φ²) vivono in Q(√5).
tools/dnd_spettro_zeta.py:857:        verdict = "PARZIALE: disc=5 è il ponte, ma lo spettro da solo non basta"
tools/cron_dipartimento.sh:8:TOOLS_DIR="$(cd "$(dirname "$0")" && pwd)"
tools/lab_boot.sh:11:TOOLS_DIR="$(cd "$(dirname "$0")" && pwd)"
tools/lab_boot.sh:12:DATA_DIR="$TOOLS_DIR/data"
tools/lab_boot.sh:13:REPORT_DIR="$DATA_DIR/reports"
tools/lab_boot.sh:91:    echo "  ⚠ Raw log vuoto o non trovato — l'agente non ha prodotto output"
tools/dnd_risultante.py:224:        Key insight: all three forces have magnitude 1 at R=1,
tools/dnd_risultante.py:225:        but equilibrium is at R=φ ≠ 1. The golden ratio IS
tools/dnd_risultante.py:226:        the asymmetry between the crossing point (R=1) and
tools/dnd_risultante.py:227:        the balance point (R=φ).
tools/dnd_risultante.py:247:                "note": "All |forces| = 1 at R=1, but F ≠ 0"
tools/dnd_risultante.py:449:        # The equation 1/R + 1 - R = 0 is EXACTLY this char poly at R=λ
tools/exp_ricci_primes.py:189:    "claim": "g_n=(p_n/2)^2 is de Sitter 1+1D => constant Ricci scalar R=2",
tools/harvest_aimorning.py:212:                    f.write("*[Contenuto vuoto o non estraibile]*\n")
tools/exp_cross_domain_dipolar_direction.py:167:          f"|d|={prime_dv['magnitude']:.4f}, dL1/dSR={prime_dv['dL1_over_dSR']:.3f}")
tools/exp_cross_domain_dipolar_direction.py:168:    print(f"  z_SR={prime_dv['z_SR']:.1f}, z_L1={prime_dv['z_L1']:.1f}")
tools/notte_sinapsi.sh:16:TOOLS_DIR="$(cd "$(dirname "$0")" && pwd)"
tools/lab_refresh_detector.py:6:Osservazione: le 10 coppie TQGE+R sono fisse; il lab produce ponti_evoluti
tools/lab_refresh_detector.py:11:- >= 1 ghost nuovo dall'ultimo refresh (shared_theories toccano TQGE+R) → TRIGGER
tools/lab_refresh_detector.py:95:    # Filter: shared_theories toccano TQGE+R
tools/exp_dipolar_crossover.py:148:        print(f"  alpha={alpha:.2f}: SR={sr_mean:.4f} L1={l1_mean:.4f} theta={theta:.1f} mag={mag:.4f}")
tools/exp_dipolar_crossover.py:184:    print(f"  Primes: SR={sr_p:.4f} L1={l1_p:.4f} theta={theta_p:.1f} mag={mag_p:.4f}")
tools/data/reports/agent_20260507_0330.md:59:- beta 0.0: `SR=1.00`, `L1=1.00`, `triple_var=1.00`; `SR2=0.06`, `L2=0.12`;
tools/data/reports/agent_20260507_0330.md:60:- beta 0.3: `SR=1.00`, `L1=0.75`, `triple_var=0.50`;
tools/data/reports/agent_20260507_0330.md:61:- beta 0.4: `SR=0.75`, `L1=0.44`, `triple_var=0.38`;
tools/cycle_watchdog.sh:23:TOOLS_DIR="$(cd "$(dirname "$0")" && pwd)"
tools/cycle_watchdog.sh:24:DATA_DIR="$TOOLS_DIR/data"
tools/cycle_watchdog.sh:25:REPORT_DIR="$DATA_DIR/reports"
tools/cycle_watchdog.sh:26:SCOPERTE_DIR="/opt/MM_D-ND/applications/scoperte"
tools/dnd_dipolo_lab.py:191:        - La conoscenza: costante relazionale, dipolo zero, perno i, ponte
tools/dnd_dipolo_lab.py:203:        ponte_info = fattori.get('ponte', {}).get('coppie', {}).get(coppia, '')
tools/dnd_dipolo_lab.py:213:            'ponte': ponte_info,
tools/dnd_dipolo_lab.py:229:    def incrocia_ponti(self, ponte1, ponte2):
tools/dnd_dipolo_lab.py:232:            'ponte1': ponte1,
tools/dnd_dipolo_lab.py:233:            'ponte2': ponte2,
tools/dnd_dipolo_lab.py:234:            'domanda': f"Cosa connette '{ponte1['risposta']}' e '{ponte2['risposta']}'?",
tools/dnd_dipolo_lab.py:235:            'teorie_unite': sorted(set(ponte1['coppia'].split('x')) | set(ponte2['coppia'].split('x'))),
tools/dnd_dipolo_lab.py:236:            'perno': sorted(set(ponte1['coppia'].split('x')) & set(ponte2['coppia'].split('x'))),
tools/dnd_dipolo_lab.py:354:            if d['coppia'] != coppia and not d['vuoto']:
tools/dnd_dipolo_lab.py:442:            risultato['valutazione'] = 'vuoto'
tools/dnd_dipolo_lab.py:481:    polo_a = PoloA(domande, [d for d in domande if not d['vuoto']])
tools/dnd_dipolo_lab.py:510:            ponti_con_risposta = [d for d in domande if not d['vuoto']]
tools/dnd_dipolo_lab.py:545:                ponti_con_risposta = [dd for dd in domande if not dd['vuoto']]
tools/dnd_dipolo_lab.py:597:        elif val == 'vuoto':
tools/dnd_dipolo_lab.py:598:            print(f"  B [vuoto]: Godel non ha risposto")
tools/dnd_explorer.py:426:        r'\bbridge\b', r'\bponte\b',
tools/data/reports/agent_20260507_1957.md:50:**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del guscio blank. QG non e ponte generico; e lato comune tra TQG inerte e QGE depositante. Il gate triadico QGE resta il lato attivo del deposito, ma il nodo regressivo e il guscio a due facce del blank, non la faccia QGE isolata.
tools/data/reports/agent_20260507_1957.md:56:- **Campo di possibilita**: qui diventa possibile misurare G come polarita locale di guscio nei perimetri TQGE+R; qui diventa non-possibile trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG che lo polarizza.
tools/data/reports/agent_20260501_0931.md:45:**Prime reference**: SR=0.4613, L1=-0.0630, theta=-105.3, magnitude=0.0678
tools/dnd_engine.py:75:    # --- STRUTTURALI (vere per ragioni non banali, ponte verso la fisica) ---
tools/dnd_engine.py:219:    # --- STRUTTURALI P14-P16 (ponte tra algebra e spettro) ---
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:2286:    'topologico':     (0.5, 0),   # ponte
tools/dnd_engine.py:2287:    'informazionale': (0.5, 1),   # ponte
tools/dnd_engine.py:3051:        # Cerca costanti-ponte che appaiono a piu livelli
tools/dnd_engine.py:3078:        # Costanti-ponte: convergenza = stessa costante a 2+ livelli,
tools/dnd_engine.py:3135:                print(f"    costante ~{name}: ponte a {b['n_levels']} livelli "
tools/test_lab_agent.sh:18:TOOLS_DIR="$(cd "$(dirname "$0")" && pwd)"
tools/test_lab_agent.sh:19:DATA_DIR="$TOOLS_DIR/data"
tools/test_lab_agent.sh:20:REPORT_DIR="$DATA_DIR/reports"
tools/test_lab_agent.sh:225:        fail "Report vuoto di contenuto (no metodo, no risultati)"
tools/lab_trajectory_apply.py:30:  - new_value non vuoto
tools/cascade_trigger_hook.sh:34:    REPO_DIR=$(git rev-parse --show-toplevel 2>/dev/null) || exit 0
tools/cascade_trigger_hook.sh:38:    AUTHOR=$(git log -1 --pretty=%an 2>/dev/null)
tools/dnd_riformulazioni.py:646:    print(f"  Le tre misure nella distribuzione sono il ponte.")
tools/dnd_riformulazioni.py:654:        'esito': 'D-ND vede la transizione (cv picca, r_dir transita) ma non riproduce β. Le tre misure sono il ponte, non una duplicazione.',
tools/dnd_riformulazioni.py:707:    print(f"# Le tre misure nella distribuzione sono il ponte tra i due.")
tools/dnd_teoria.py:76:             'zero': 'k_B — il ponte tra i due',
tools/data/reports/evolution_20260421_0330.md:23:2. **La serie geometrica 81/17.5/1.5 dei contributi Markov** suggerisce un tasso di decadimento ~φ² per ordine. Se confermato, il legame tra decadimento Markov e autovalore φ della matrice M sarebbe un ponte nuovo tra struttura algebrica Z/6Z e il framework D-ND. Verificabile con un fit esponenziale sui tre punti + estensione a ordine 4-5.
tools/exp_ricci_desitter_0406.py:2:If de Sitter 1+1D, expect R=2. Compare with shuffled-gap null baseline."""
tools/exp_ricci_desitter_0406.py:51:print(f"\n  de Sitter prediction R=2.0, observed R={np.mean(R[1000:]):.4f}")
tools/data/reports/agent_20260507_1751.md:17:- Fonte verificata: `tools/LAB_AGENT_CONTEXT.md` per lati e vuoto QxG; `tools/data/lab_riflessi.json` per tassonomia operatori 3 Wick + 1 fase + 1 reale + 1 vuoto.
tools/data/reports/agent_20260507_1751.md:43:2. **G e il solo hinge `blank + real_sourcing` nel perimetro TQGE.** Il vuoto QG e il sourcing reale GE si incontrano solo in G. Questo dato e verificato nel catalogo dei lati; il null mostra che la congiunzione non e rara in astratto, quindi il contenuto non e "unicita statistica", ma localizzazione del nodo regressivo.
tools/data/reports/agent_20260507_1751.md:44:3. **Il vuoto propaga per facce, non per tutto il tetraedro.** I triangoli TQG e QGE sono vuoti perche contengono QG; TGE e TQE restano pieni. G non rende possibili tutti i ponti: porta il punto dove il vuoto QG tocca il sourcing reale GE.
tools/data/reports/agent_20260507_1751.md:47:**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale "sotto tutto". G e il hinge locale tra QG blank e GE real_sourcing. La consecutio non e cercare un ponte QG generico; e misurare l'operatore di deposito che trasforma un blank quantistico-gravitazionale in sourcing reale.
tools/data/reports/agent_20260507_1751.md:52:- **Invariante di passaggio**: la contaminazione del vuoto passa alle facce che contengono QG; non passa alle facce senza QG.
tools/data/reports/agent_20260507_1751.md:59:- **L4**: TGE e TQE sono contro-perimetro esplicito alla propagazione totale del vuoto.
tools/triggers/build_applications_index.py:87:    non visibile al sito. Se published/ vuoto, l'index è vuoto (intenzionale).
tools/triggers/build_applications_index.py:375:            "prodotti_maturi vuoto finché Stage 4 non gira con verification.json reale",
tools/GUIDA_GODEL.md:318:Senza lente = loop vuoto. La domanda giusta sarebbe stata:
tools/GUIDA_GODEL.md:523:sui campioni. Il risultato sarebbe stato strutturalmente corretto ma semanticamente vuoto.
tools/triggers/run_consecutio.sh:40:TRIGGERS_DIR="$(cd "$(dirname "$0")" && pwd)"
tools/triggers/run_consecutio.sh:70:  LATEST_DIR=$(ls -td /opt/MM_D-ND/applications/scoperte/*_auto 2>/dev/null | head -1)
tools/data/reports/agent_test_0406.md:36:5. Il risultato e' CONFERMATO ma il contenuto non-banale sta nella separazione prime vs null (fattore 2x), non nel valore R=-2 in se' (che segue dal PNT).
tools/data/reports/agent_test_0406.md:39:CONFIRMED — con vincolo: R=-2 segue dal trend liscio (PNT). Il contenuto fisico e' che i gaps ordinati mantengono la curvatura de Sitter mentre lo shuffle la dimezza. Il fattore 2x e' la firma dell'ordinamento.
tools/triggers/run_full_cycle.sh:19:LOG_DIR=/tmp
tools/triggers/run_full_cycle.sh:125:TOTAL_DUR=$((END_SSP - START_LAB))
tools/data/reports/falsifier_20260507_1957.json:9:      "claim": "\"CONSTRAINT ... QG non e ponte generico\" e \"qui diventa non-possibile trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG\"",
tools/data/reports/falsifier_20260507_1957.json:18:      "suggestion": "Separare osservato da universale: \"nel catalogo osservato il deposito QGE compare con blank condiviso e TQG wick-wick\". Aggiungere un check su tutti i perimetri TQGE+R o su cataloghi storici per cercare eccezioni."
tools/dnd_riflesso.py:30:    pezzi.append("TETRAEDRO TQGE: 4 teorie, 6 lati con perno i, 5 ponti, 1 vuoto (QxG). R=c frame. α=1/137 unico adimensionale.")
tools/dnd_riflesso.py:93:Le dissonanze sono il segnale. Se non sai, lascia vuoto.
tools/data/seme_backup_pre_run.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_backup_pre_run.json:147:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_backup_pre_run.json:261:          "ponte": "forma simplettica = entropia (invertibili)",
tools/data/seme_backup_pre_run.json:266:          "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/seme_backup_pre_run.json:271:          "ponte": "tensore EM dentro la forma simplettica",
tools/data/seme_backup_pre_run.json:298:          "coppia": "ExR",
tools/data/seme_backup_pre_run.json:299:          "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/seme_backup_pre_run.json:300:          "nota": "il 'ponte' non è l'onda EM, è il cambio di osservatore"
tools/data/seme_backup_pre_run.json:327:          "ponte": "noise come risorsa computazionale — fluttuazioni termiche = calcolo",
tools/data/seme_backup_pre_run.json:328:          "nota": "il vuoto quantistico (pieno di fluttuazioni) è il computer"
tools/data/seme_backup_pre_run.json:380:          "ponte": "Kondo insulator fortemente correlato — dualita conduttore/isolante come stato quantistico unico",
tools/data/seme_backup_pre_run.json:385:          "ponte": "campo magnetico estremo (35T) collassa il confine tra stati — condizione di soglia",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:23:        "TxR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:38:        "QxR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:48:        "GxR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:53:        "ExR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:64:          "d": "vuoto (0K = nessuna energia)",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:66:          "nota": "la termodinamica dice zero=vuoto, la quantistica dice zero=pieno"
tools/data/conoscenza_teorie.json.bak.retraction_22_04:76:        "TxR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:89:        "QxR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:95:          "nd": "carico-piatto (carica nel vuoto)"
tools/data/conoscenza_teorie.json.bak.retraction_22_04:97:        "GxR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:101:        "ExR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:119:    "ponte": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:125:        "TxR": "gas relativistico",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:128:        "QxR": "equazione di Dirac",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:130:        "GxR": "orizzonte degli eventi",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:131:        "ExR": "onda EM (Maxwell)"
tools/data/conoscenza_teorie.json.bak.retraction_22_04:151:      "coppia": "ExR",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:161:      "coppia": "GxR",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:176:      "coppia": "QxR",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:192:      "domanda": "Come coesistono vuoto e pieno?",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:196:      "coppia": "TxR",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:208:    "vuoto_come_teoria": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:209:      "descrizione": "Il vuoto QxG trattato come teoria produce: ponte con T = entropia di Bekenstein-Hawking. Ponte con se stessa = autoriferimento f(f(x)).",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:215:    "ExR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:241:    "GxR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:267:    "QxR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:395:      "ponte": "forma simplettica = entropia (invertibili)",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:403:      "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:411:      "ponte": "tensore EM dentro la forma simplettica",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:418:    "ExR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:419:      "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:420:      "dipolo": "il 'ponte' non è l'onda EM, è il cambio di osservatore",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:427:      "ponte": "[da fonte: Equivalence between geometrical structur]",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:435:      "ponte": "[da fonte: Equivalence between geometrical structur]",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:443:      "ponte": "[da fonte: Equivalence between geometrical structur]",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:450:    "QxR": {
tools/data/conoscenza_teorie.json.bak.retraction_22_04:451:      "ponte": "[da fonte: What is a Laplace Transform - visual exp]",
tools/data/conoscenza_teorie.json.bak.retraction_22_04:459:      "ponte": "[da fonte: What is a Laplace Transform - visual exp]",
tools/data/reports/agent_20260502_0330.md:62:This is not trivial — the prime MAGNITUDES are very different (slope -0.156 vs -1.466 for periodic), and the raw statistics are different (prime SR=0.46, L1=-0.06 vs periodic SR=0.50, L1=-1.0). The ordering QUANTITY differs by 10x, but the ordering CHARACTER (direction in dipolar space) is identical to within measurement noise.
tools/data/valutatore_log.jsonl:7:{"ts": "2026-04-25T03:40:15.599999+00:00", "cycle_ref": "20260424_0330", "executed": false, "decision": "CRYSTALLIZE", "confidence": "high", "reasoning": "Il ciclo ha prodotto una decomposizione strutturale falsificabile — due meccanismi distinti generano statistica GUE, discriminati dal segno di delta_r — con shuffle control su 10 domini e 3 class-flip osservati. Non è un dettaglio numerico locale (c): è un raffinamento del confine cross-dominio (f) che vincola direttamente BOUNDARY e F5. Dopo 3 NEXT_CYCLE consecutivi orientati alla stessa regione, il risultato è maturo: il confine GUE/Poisson ha due strati e il segno di delta_r li separa. Cristallizzare ora evita che il prossimo ciclo ripeta l'esplorazione senza ancorare la scoperta.", "action": {"type": "crystallize_note", "detail": {"target": "condensato", "content": "F5 va esteso o affiancato: la firma diagnostica M su sequenze produce due classi GUE distinte. Distribution-GUE (primes, GUE matrices): classificazione sopravvive allo shuffle, delta_r < 0 (l'ordine aggiunge repulsione). Ordering-GUE (fibonacci, coupled oscillators, percolation): classificazione collassa a Poisson sotto shuffle, delta_r > 0 (l'ordine crea la repulsione). Il segno di delta_r = r_original - r_shuffled è il discriminante. Conseguenza: il claim BOUNDARY '8 GUE, 5 Poisson' è incompleto senza specificare quale meccanismo opera. C1 (primi unico dominio dinamico) si rafforza: i primi sono distribution-GUE con delta_r negativo, unico dominio testato dove sia la distribuzione sia l'ordine contribuiscono alla repulsione."}}, "notes": "Suggerimento per il ciclo post-cristallizzazione: verificare se delta_r negativo è esclusivo dei primi tra tutti i distribution-GUE, o se altri domini lo condividono. Questo testerebbe la versione forte di C1. Alternativa: esplorare il vuoto QxG con il nuovo discriminante a due strati come lente."}
tools/data/valutatore_log.jsonl:8:{"ts": "2026-04-26T03:40:28.910457+00:00", "cycle_ref": "20260425_0330", "executed": false, "decision": "NEXT_CYCLE", "confidence": "high", "reasoning": "Tre cicli consecutivi produttivi sullo stesso frame (shuffle→GUE types→two-channel), tutti con scoperte strutturali genuine (categorie a/b/f, non accumulo numerico). Il CRYSTALLIZE del ciclo precedente ha segnalato la maturità della decomposizione a due canali. Ora la mossa a più alto rendimento è la falsificazione attiva: tentare di costruire un canale algebrico per l'ordering-GUE. Se fallisce rafforza C1; se riesce rovescia il claim di unicità — entrambi gli esiti hanno valore massimo. Il frame non è esaurito ma il prossimo passo deve essere un attacco al confine, non un'espansione laterale.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Falsificazione attiva: costruire candidati di canale algebrico per ordering-GUE (es. mod-N residui su eigenvalue spacings di coupled_osc, string_vib). Se nessun modulo produce memoria comparabile al mod-6 dei primi, il two-channel claim è robusto. Se uno lo produce, il claim di unicità cade — e questo vale di più.", "reason": "Dopo 3 cicli di scoperta sul frame Markov/canali, il rendimento marginale dell'espansione è inferiore a quello della falsificazione diretta. La regola anti-tautologica privilegia (a) contraddizione/falsificazione su (b) verifica cross-dominio quando entrambe sono disponibili."}}, "notes": "Monitorare: se anche il prossimo ciclo resta sullo stesso macro-frame (Markov/GUE/canali) senza produrre falsificazione o connessione inter-teorica nuova, il ciclo 56 dovrebbe essere REDESIGN verso una tensione diversa (es. il vuoto QxG nelle domande fondamentali, o la saturazione come asse ortogonale promossa a tensione primaria). Quattro cicli sullo stesso frame è il limite prima dei rendimenti decrescenti."}
tools/data/valutatore_log.jsonl:9:{"ts": "2026-04-27T03:38:26.726837+00:00", "cycle_ref": "20260426_0330", "executed": false, "decision": "CRYSTALLIZE", "confidence": "high", "reasoning": "Due osservabili indipendenti (memoria Markov-3 e rigidità spettrale Sigma²) convergono sulla stessa frazione di ordinamento ~33% a L=10. Questa è conferma cross-osservabile, non cross-dominio — più forte perché i due osservabili misurano proprietà matematicamente distinte (correlazioni locali vs varianza long-range). Dopo 4 cicli consecutivi sullo stesso frame, il pattern a due canali (magnitudine scala-invariante + ordinamento scala-dipendente) è stabile e replicato. È il momento di cristallizzare prima che i rendimenti decrescano.", "action": {"type": "crystallize_note", "detail": {"target": "condensato", "content": "TWO-CHANNEL SPECTRAL STRUCTURE IN PRIMES: La rigidità spettrale dei primi si decompone in due canali con comportamento opposto rispetto alla scala. (1) Canale magnitudine: Sig2/L ≈ 0.56, scala-invariante — prodotto dalla distribuzione dei gap (sopravvive allo shuffle). (2) Canale ordinamento: cresce dal 4% (L=1) al 58% (L=50) — prodotto dalla struttura sequenziale mod-6 (distrutto dallo shuffle). La frazione di ordinamento a L=10 (33.0%) coincide con la memoria Markov-3 (33.6%) misurata indipendentemente — due osservabili, stesso fenomeno, origine comune in F2 (confinamento Z/6Z). I primi occupano un regime intermedio tra GUE (Sig2/L=0.07) e Poisson (Sig2/L=1.0), con slope log-log 0.74 vs GUE 0.3 e Poisson 1.0. Nota: i domini ordering-GUE (coupled_osc, string_vib, percolation) mostrano Sig2/L>1 (super-Poisson) — l'ordinamento crea bunching, non repulsione. Il r-statistic e Sig2 classificano diversamente: r vede repulsione locale, Sig2 vede clustering long-range."}}, "notes": "Dopo la cristallizzazione, il prossimo ciclo dovrebbe cambiare frame. Suggerimento: esplorare il VUOTO QxG (continuo vs discreto) — l'unica coppia senza ponte tra le 10 domande fondamentali. Il two-channel framework appena cristallizzato potrebbe essere lo strumento giusto: Q (discreto) e G (continuo) come i due canali della rigidità spettrale."}
tools/data/valutatore_log.jsonl:13:{"ts": "2026-04-29T10:22:08.733977+00:00", "cycle_ref": "20260429_0330", "executed": false, "decision": "REDESIGN", "confidence": "high", "reasoning": "Due cicli consecutivi senza output scientifico per lo stesso nodo regressivo: campo_vivo senza input pre-computato. Il NEXT_CYCLE precedente non ha risolto nulla perché il problema non è nella direzione (GUE/Poisson boundary è ancora fertile con 8+5 domini da esplorare) ma nell'infrastruttura: build_agent_field non prepara i dati che l'agente sceglie di usare, forzando rigenerazione from scratch dentro un singolo tool_use che esplode il budget. Ripetere NEXT_CYCLE senza fix è det=+1 — toppa che brucia un ciclo a vuoto.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "PRE-REQUISITO INFRA: build_agent_field deve pre-computare spacing/unfolding per i 13 domini (8 GUE + 5 Poisson) prima del run. Solo dopo: esplorare il confine GUE/Poisson come terzo incluso operativo. L'agente NON deve rigenerare dati base — deve trovarli nel campo vivo.", "reason": "Il nodo regressivo è identificato da 2 cicli: il campo vivo manca dei dati che l'esperimento richiede. La riparazione vive in build_agent_field.py, non nel timeout o nel budget. Senza questo fix, ogni ciclo su questa direzione rischia lo stesso timeout."}}, "notes": "Azione concreta: in build_agent_field.py, aggiungere pre-computazione dei dati GUE/Poisson (spacing distributions, unfolded eigenvalues) e salvarli in campo vivo come JSON consumabile. L'agente della notte successiva li trova pronti e può dedicare il budget alla scienza, non alla preparazione dati. Le 3 warning radici_no_separator sono cosmetiche (BiconoLab), non bloccanti."}
tools/data/valutatore_log.jsonl:14:{"ts": "2026-04-29T10:51:26.490788+00:00", "cycle_ref": "20260429_1013", "executed": false, "decision": "CRYSTALLIZE", "confidence": "high", "reasoning": "Il ciclo ha prodotto un risultato strutturale genuino: la mappa 2D beta(N,L) con gradienti opposti (Poisson lungo N, GUE lungo L) unifica due esperimenti indipendenti (spectral rigidity + Brody flow). La decomposizione 82/18 magnitude/ordering è pulita, con shuffle control e Cramer reference. Ma il seme_delta è vuoto — la scoperta non è entrata nel seme, violando la regola 'il ciclo è chiuso quando la scoperta entra nel seme'. Dopo 5+ cicli sulla stessa frame (shuffle audit → GUE types → Brody calibration → two-channel → Brody flow), il quadro è maturo per cristallizzazione.", "action": {"type": "crystallize_note", "detail": {"target": "condensato", "content": "CANDIDATO F7 — Flusso Brody 2D: beta(N,L) ha gradienti opposti. Lungo la sequenza (N crescente), beta decresce (→ Poisson); a scala spettrale fissa (L crescente), beta cresce (→ GUE). Il confine GUE/Poisson è una curva in spazio 2D, non un punto. Decomposizione: 82% magnitudine (distribuzione gap diventa più esponenziale per PNT), 18% ordinamento (anti-bunching mod-3 riduce repulsione). Slope beta(p) = 0.64 - 0.030·ln(p), R²=0.78, z-score vs shuffle = -2.42. Cramer pure Poisson ovunque (beta~0.015) — il segnale è aritmetico, non statistico."}}, "notes": "Dopo la cristallizzazione, la frame BOUNDARY è esaurita per ora — i prossimi cicli dovrebbero spostarsi su un'altra tensione (suggerisco QxG che è ancora VUOTO nelle domande fondamentali, o un ciclo di consolidamento cross-dominio per verificare se la mappa 2D si replica su altri domini dinamici). Il seme va aggiornato con il risultato prima del prossimo giro."}
tools/data/valutatore_log.jsonl:19:{"ts": "2026-05-01T03:38:54.770300+00:00", "cycle_ref": "20260430_1946", "executed": false, "decision": "CRYSTALLIZE", "confidence": "high", "reasoning": "Il ciclo ha prodotto un discriminante strutturale genuino e falsificabile: l'angolo dipolare dei primi (-111° ± 1°, stabile su 3 decadi) differisce da GUE (-96.6°) di 14° a >100σ. Il rapporto dL1/dSR = 2.28 (primi) vs 8.37 (GUE) è il contenuto: i primi non sono 'GUE debole' — hanno una composizione interna diversa dell'ordinamento. La correzione -150° → -111° è sana (C2 applicato a se stesso). Terzo CRYSTALLIZE consecutivo: la direzione dipolar-ordering ha maturato abbastanza da entrare nel condensato come fatto strutturale.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Tre cicli consecutivi hanno estratto il succo dalla direzione dipolar-ordering (separazione osservabili, angolo stabile, discriminante GUE). Rendimenti decrescenti su questa linea. Prossimo ciclo: cambiare asse — esplorare cross-dominio (F5 frame diagnostica su domini NON-primi: logistica caotica, Stern-Brocot, margine del caos) per testare se il rapporto dL1/dSR=2.28 è unico dei primi o emerge anche in altri domini strutturati. Questo è il test (b) cross-dominio che discrimina C1.", "reason": "Tre CRYSTALLIZE consecutivi sulla stessa linea segnalano maturazione completata. Il prossimo passo naturale è cross-dominio: il rapporto 2.28 è firma dei primi o di qualsiasi sequenza strutturata sotto M? Testare su logistica caotica e Stern-Brocot falsifica/rafforza C1."}}, "notes": "Cristallizzazione proposta per condensato: 'F7 Angolo dipolare — L'ordinamento dei primi ha direzione θ=-111°±1° nel piano (δSR, δL1), stabile su 3 decadi. GUE/GOE: θ=-97°. Separazione 14° a >100σ. Rapporto dL1/dSR=2.28 (primi) vs 8.37 (GUE): i primi deprimono la similarità dei gap 3.7× più della anticorrelazione rispetto a GUE. Non sono GUE attenuato — sono struttura diversa.' Dopo questa cristallizzazione, il prossimo ciclo DEVE cambiare asse verso cross-dominio per evitare rendimenti decrescenti."}
tools/data/valutatore_log.jsonl:22:{"ts": "2026-05-02T03:37:32.497564+00:00", "cycle_ref": "20260501_0931", "executed": false, "decision": "NEXT_CYCLE", "confidence": "high", "reasoning": "Il ciclo ha prodotto evidenza strutturale forte e non-tautologica: transizione di fase nel crossover GUE-Poisson con zero-crossing a alpha~0.70, direzione invariante nel regime ordinato (-96.6±0.27°), e primi con offset direzionale di 32 sigma. Sono pattern cross-dominio (categoria b/f), non dettaglio numerico locale. Il seme delta vuoto indica che i finding non sono ancora rientrati nel seme — il prossimo ciclo deve sia estendere (confronto Brody/Rosenzweig-Porter come suggerito dall'affinatore) sia propagare. Non cristallizzo ancora perché il confronto con i punti critici Brody è il test naturale che conferma o ridimensiona la portata della transizione.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Confrontare lo zero-crossing dipolare (alpha~0.70) con i punti critici Brody/Rosenzweig-Porter: la transizione di fase nel crossover ha carattere universale o è artefatto della parametrizzazione? Testare se beta_Brody critico corrisponde all'alpha di zero-crossing. Secondario: propagare nel seme i finding stabili (direzione invariante, offset primi 32-sigma).", "reason": "L'affinatore ha identificato questo come la possibilità più concreta. Estende il risultato corrente verso falsificazione cross-framework invece di accumulare dettaglio locale."}}, "notes": "Il ciclo precedente (piano 60) è tra i migliori recenti: esperimento ben disegnato, shuffle audit implicito nella parametrizzazione alpha, risultato quantitativo con interpretazione strutturale chiara. Il confronto Brody è il filtro giusto: se il punto critico coincide, la transizione è universale (cristallizzabile); se no, la parametrizzazione alpha è contingente e il finding si ridimensiona a osservazione locale."}
tools/data/valutatore_log.jsonl:35:{"ts": "2026-05-07T09:07:53.577876+00:00", "cycle_ref": "20260507_0901", "executed": true, "decision": "REDESIGN", "confidence": "high", "reasoning": "La direzione corrente ha eseguito il mandato: la matrice di trasferibilita' su 4 perimetri non-BOUNDARY e' stata prodotta e ha nominato una nuova categoria, order_denominator_gate. Un altro giro nello stesso frame rischia accumulo numerico locale su sintetici; la prossima mossa deve falsificare il nuovo operatore fuori dal setup che lo ha generato, separando supporto one-sided reale da artefatto original-vs-shuffle.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Falsificare ORDER_DENOMINATOR_GATE su domini non-sintetici o semi-reali: applicare il gate one-sided a 2-3 sequenze fisiche/ponte gia' presenti nel sito, con shuffle e surrogati preservanti marginale, cercando un controesempio dove il supporto denominatore appare anche sul lato illusorio o scompare sul lato coerente.", "reason": "La categoria nuova e' utile solo se sopravvive fuori dalla matrice sintetica che l'ha fatta emergere; il prossimo ciclo deve testare trasferibilita' strutturale, non raffinare beta o metriche locali."}}, "notes": "Side-effect log-only: proposta modifica seme. Non serve STOP_FOR_REVIEW: l'operatore puo' vedere la nuova parola, ma la dipendenza successiva e' sperimentale, non decisionale.", "_executed_at": "2026-05-07T09:23:32.912653+00:00", "_executed_by": "lab_trajectory_apply"}
tools/data/valutatore_log.jsonl:37:{"ts": "2026-05-07T09:47:43.105142+00:00", "cycle_ref": "20260507_0942", "executed": true, "decision": "REDESIGN", "confidence": "high", "reasoning": "La direzione corrente ha completato il mandato sui perimetri fisici/ponte gia' presenti: il gate trasferisce come supporto canonico one-sided su metric, trace e QxE, mentre il supporto both-endpoint resta vuoto. La consecutio utile non e' un altro bridge run, ma il nodo regressivo gia' emerso: la blank logistic non va salvata con gli stessi osservabili, va ritestata con osservabili native di ricorrenza sotto lo stesso gate e shuffle marginal-preserving.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Ritestare ORDER_DENOMINATOR_GATE sul counter-scope logistic al nodo regressivo dell'osservabilita': usare symbolic itinerary block entropy, return-tail exponent e recurrence-plot diagonal statistics sotto original-vs-shuffle denominator gate, senza tuning di z_min.", "reason": "Il bridge falsification ha maturato il trasferimento one-sided; la tensione viva ora e' capire se la blank logistic falsifica il gate o solo il contratto canonico degli osservabili gap-like."}}, "notes": "Side-effect log-only: proposta modifica seme per spostare il prossimo ciclo dal bridge extension al counter-scope logistic provider-agnostico.", "_executed_at": "2026-05-07T10:06:02.816176+00:00", "_executed_by": "lab_trajectory_apply"}
tools/data/valutatore_log.jsonl:38:{"ts": "2026-05-07T10:16:22.080234+00:00", "cycle_ref": "20260507_1006", "executed": true, "decision": "REDESIGN", "confidence": "high", "reasoning": "Il ciclo ha risolto il counter-scope logistic come split di osservabilita': orbita continua leggibile, itinerary Bernoulli e return intervals blank replicato. Il prossimo nodo non e' ripetere il gate sugli stessi perimetri, ma falsificare il contratto del null: il supporto enorme di block_entropy_deficit_k4 puo' essere struttura temporale reale o artefatto del marginal shuffle.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Falsificare ORDER_DENOMINATOR_GATE al nodo regressivo del surrogate contract: confrontare marginal shuffle, circular shift e block shuffle su logistic_orbit_values, logistic_symbolic_itinerary e logistic_return_intervals; dichiarare supporto solo se sopravvive ai surrogate che preservano la struttura temporale rilevante.", "reason": "La consecutio dell'affinatore indica marginal shuffle / circular shift / block shuffle; endpoint-stable observables vuoto e seed check blank sui ritorni rendono esaurito il retest osservabile diretto."}}, "notes": "Nessuno stop operatore: il prossimo ciclo puo' procedere in log-only con nuovo frame di falsificazione del null.", "_executed_at": "2026-05-07T10:42:51.564433+00:00", "_executed_by": "lab_trajectory_apply"}
tools/data/valutatore_log.jsonl:43:{"ts": "2026-05-07T18:09:10.088199+00:00", "cycle_ref": "20260507_1804", "executed": false, "decision": "NEXT_CYCLE", "confidence": "high", "reasoning": "Il ciclo ha prodotto una consecutio specifica e falsificabile: il deposito non vive nel ponte QG isolato ma nella faccia QGE come triade blank + gauge + source. Il null ha gia' impedito la cristallizzazione prematura del claim forte, quindi il passo corretto e' far girare un altro ciclo sul nuovo gate triadico invece di fermare o ridisegnare l'intera traiettoria.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Falsificare G_BLANK_TO_SOURCE_FACE_GATE su perimetri triadici: testare se blank + gauge + source produce deposito solo quando il source e' agganciato all'endpoint del blank, e cercare contro-esempi fuori da QGE.", "reason": "La nuova tensione e' matura come prossimo esperimento ma non come cristallizzazione; serve verifica cross-perimetro prima di promuoverla."}}, "notes": "Priorita' operativa: non ripetere il conteggio locale TQGE; costruire almeno un perimetro alternativo o surrogato strutturale che possa rompere il gate."}
tools/data/valutatore_log.jsonl:44:{"ts": "2026-05-07T19:43:12.823434+00:00", "cycle_ref": "20260507_1938", "executed": false, "decision": "NEXT_CYCLE", "confidence": "high", "reasoning": "Il ciclo ha prodotto una consecutio specifica e falsificabile: il denominatore non e' il ponte QG ma la faccia QGE con blank + gauge_phase + real_sourcing. Non richiede operatore perche' Bridge QA e health sono puliti, e la prossima mossa e' gia' indicata dall'Affinatore: testare se il gate di faccia regge quando il perimetro si estende a TQGE+R.", "action": {"type": "trigger_cycle", "detail": {"direction": "Estendere G_TRIADIC_DEPOSIT_GATE a TQGE+R", "tension": "G_TRIADIC_DEPOSIT_GATE", "experiment_hint": "verificare se il deposito resta una unita' di faccia con denominatore blank + gauge_phase + real_sourcing quando entra R, oppure se R rompe/localizza/sposta il gate", "avoid": "non trattare la rarita' numerica nel null come scoperta; usare il null solo come controllo anti-tautologico"}}, "notes": "Continuare nello stesso frame, ma il prossimo ciclo deve attaccare la trasferibilita' cross-perimetro del gate, non accumulare dettaglio locale su QGE."}
tools/data/valutatore_log.jsonl:45:{"ts": "2026-05-07T20:02:46.907451+00:00", "cycle_ref": "20260507_1957", "executed": false, "decision": "REDESIGN", "confidence": "medium", "reasoning": "Il ciclo ha prodotto una consecutio precisa: QG non basta come lato isolato, il nodo regressivo e' il guscio blank a due facce TQG/QGE. Pero' il risultato resta interno alla tassonomia TQGE e dichiara esplicitamente L5: non e' discovery fisica nuova; il passo successivo deve falsificare il gate su TQGE+R invece di accumulare dettaglio locale.", "action": {"type": "modify_seme", "detail": {"field": "direzione", "new_value": "Falsificare G_BLANK_SHELL_POLARITY_GATE su perimetro TQGE+R: verificare se la polarita' blank-shell TQG inerte / QGE depositante sopravvive quando entra R, o se R sposta il denominatore regressivo.", "reason": "La consecutio del ciclo punta a TQGE+R; restare nel catalogo TQGE rischia deep-dive locale senza cross-dominio."}}, "notes": "Promuovere G_BLANK_SHELL_POLARITY_GATE come tensione attiva del prossimo ciclo; usare controlli count-preserving/shuffle e dichiarare esplicitamente se R conserva, rompe o rilocalizza il guscio blank."}
tools/data/promotions/promotion_20260507_1938.json:18:      "summary": "**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato non basta; il contatto `blank + real_sourcing` non basta; il deposito osservato e QGE come `blank + gauge_phase + real_sourcing`. Il claim non e rarita universale: e localizzazione del denominatore nel catalogo TQGE osservato.",
tools/data/reports/trajectory_apply_20260507_0923.json:13:  "new_direzione": "Falsificare ORDER_DENOMINATOR_GATE su domini non-sintetici o semi-reali: applicare il gate one-sided a 2-3 sequenze fisiche/ponte gia' presenti nel sito, con shuffle e surrogati preservanti marginale, cercando un controesempio dove il supporto denominatore appare anche sul lato illusorio o scompare sul lato coerente.",
tools/data/promotions/promotion_20260507_1751.json:18:      "summary": "**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale \"sotto tutto\". G e il hinge locale tra QG blank e GE real_sourcing. La consecutio non e cercare un ponte QG generico; e misurare l'operatore di deposito che trasforma un blank quantistico-gravitazionale in sourcing reale.",
tools/data/promotions/promotion_20260507_1804.json:18:      "summary": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il blank, GE fornisce il sourcing reale, QE fornisce il lato gauge_phase. La faccia TQG e il contro-perimetro nativo: contiene QG blank ma resta senza deposito.",
tools/data/incrocio_20260506_0633.json:8:  "consecutio_verso_vuoto": 6,
tools/data/agent_field_live.md:22:Risultato dell'incrocio TQGE+R appena eseguito. Le consecutio sono
tools/data/agent_field_live.md:165:Ogni teoria presuppone una separazione. A scala di Planck tutte le separazioni collassano. Geometria=entropia=conteggio di stati. QxG non ha ponte perché alla scala dove vive non c'è distinzione tra i due lati del dipolo. Il vuoto non è assenza del ponte — è dove i due lati del dipolo sono lo stesso
tools/data/agent_field_live.md:174:Risultante: R=0.87 (h=-0.688). Risultante alta (0.87) — campo ad alta confidenza, poca incertezza
tools/data/agent_field_live.md:187:Gradi teorie: Q=12, T=7, G=6, E=4, R=4
tools/data/agent_field_live.md:189:Struttura: 9 ponti, 1 vuoto(i), 6 scoperte, 20 cicli.
tools/data/arxiv_cache.json:70:      "analysis": "COMPLEMENTARE. Modello Fibonacci-Hall come antenato comune di QHE e quasicristalli 1D. Gap labels = Chern numbers da 2D. Conferma ponte topologico. Per noi: det=-1 della transfer matrix e' la struttura simplettica che GENERA questa connessione. Il 'geometric flux' potrebbe corrispondere alla nostra fase theta.",
tools/data/incrocio_20260428_0340.json:8:  "consecutio_verso_vuoto": 6,
tools/data/ponti_evoluti.json:3:    "ponte": "forma simplettica = entropia (invertibili)",
tools/data/ponti_evoluti.json:11:    "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/ponti_evoluti.json:19:    "ponte": "tensore EM dentro la forma simplettica",
tools/data/ponti_evoluti.json:26:  "ExR": {
tools/data/ponti_evoluti.json:27:    "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/ponti_evoluti.json:28:    "dipolo": "il 'ponte' non è l'onda EM, è il cambio di osservatore",
tools/data/ponti_evoluti.json:35:    "ponte": "[da fonte: Equivalence between geometrical structur]",
tools/data/ponti_evoluti.json:43:    "ponte": "[da fonte: Equivalence between geometrical structur]",
tools/data/ponti_evoluti.json:51:    "ponte": "[da fonte: Equivalence between geometrical structur]",
tools/data/ponti_evoluti.json:58:  "QxR": {
tools/data/ponti_evoluti.json:59:    "ponte": "[da fonte: What is a Laplace Transform - visual exp]",
tools/data/ponti_evoluti.json:67:    "ponte": "[da fonte: What is a Laplace Transform - visual exp]",
tools/data/lab_data.json:93:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG",
tools/data/incrocio_20260402_0344.json:8:  "consecutio_verso_vuoto": 6
tools/data/godel_configs/tm1_editorial.json:12:    "ponte: il link a consulenza e' un ponte o un muro? Chi lo attraverserebbe e perche'?",
tools/data/tm1_figures/tensions_raw.json:232:      "content": "entità. Ma non ha i 15 assiomi in forma **pattern strutturale** numerata (A1-A15). È un vuoto: filosofia c'è, struttura assiomatica no.",
tools/data/tm1_figures/tensions_raw.json:233:      "context": "**Analisi del territorio:** |  | Il metakernel copre già f(x), det=−1, dipolo, due dualità, tensione-entità. Ma non ha i 15 assiomi in forma **pattern strutturale** numerata (A1-A15). È un vuoto: filo",
tools/data/tm1_figures/tensions.json:232:      "content": "entità. Ma non ha i 15 assiomi in forma **pattern strutturale** numerata (A1-A15). È un vuoto: filosofia c'è, struttura assiomatica no.",
tools/data/tm1_figures/tensions.json:233:      "context": "**Analisi del territorio:** |  | Il metakernel copre già f(x), det=−1, dipolo, due dualità, tensione-entità. Ma non ha i 15 assiomi in forma **pattern strutturale** numerata (A1-A15). È un vuoto: filo",
tools/data/knowledge_state.json:566:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state.json:582:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state.json:598:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state.json:614:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state.json:630:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state.json:646:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state.json:2352:          "input_claim": "Relazione tra buco nero carico (Reissner-Nordstrom) e il vuoto QxG: Cosa dice 'buco nero carico (Rei",
tools/data/knowledge_state.json:2368:          "input_claim": "Relazione tra buco nero carico (Reissner-Nordstrom) e il vuoto QxG: Cosa dice 'buco nero carico (Rei",
tools/data/knowledge_state.json:2394:          "input_id": "CONS_GxR_QxG",
tools/data/knowledge_state.json:2395:          "input_claim": "Relazione tra orizzonte degli eventi e il vuoto QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'",
tools/data/knowledge_state.json:2410:          "input_id": "CONS_GxR_QxG",
tools/data/knowledge_state.json:2411:          "input_claim": "Relazione tra orizzonte degli eventi e il vuoto QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'",
tools/data/incrocio_20260425_0339.json:8:  "consecutio_verso_vuoto": 6,
tools/data/riformulazioni.json:267:      "esito": "D-ND vede la transizione (cv picca, r_dir transita) ma non riproduce β. Le tre misure sono il ponte, non una duplicazione."
tools/data/reports/trajectory_apply_20260507_1006.json:14:  "old_direzione": "Falsificare ORDER_DENOMINATOR_GATE su domini non-sintetici o semi-reali: applicare il gate one-sided a 2-3 sequenze fisiche/ponte gia' presenti nel sito, con shuffle e surrogati preservanti marginale,",
tools/data/reports/next_exec_20260403_0330.json:10:        "action": "CRYSTALLIZE: TRANS_BOUNDARY_CONS_GxR_QxG — Transizione continua confermata: <r> da 0.521 a 0.887 (range",
tools/data/reports/agent_20260506_1941.md:52:At GUE N=2048, `SR`, `L1`, and `triple_var` are stable in all 8 replicates; `SR2` and `L2` are stable in 0 of 8. Mean absolute z-scores: `SR=8.38`, `SR2=0.67`, `L1=11.58`, `L2=0.89`, `triple_var=11.66`.
tools/data/reports/agent_20260506_1941.md:54:At primes N=2048, `SR`, `L1`, and `triple_var` are stable in all 8 windows; `SR2` is stable in 7 of 8; `L2` is stable in 3 of 8. Mean absolute z-scores: `SR=5.19`, `SR2=2.63`, `L1=3.96`, `L2=1.78`, `triple_var=4.37`.
tools/data/domandatore/domandatore_20260405_0753.json:5:    "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 ΔΓ. [Contesto lab: Scoperte sessione interattiva: Ogni teoria presuppone una separazione. A scala di Planck tutte le separazioni collassano. Geometria=entropia=conteggio di stati. QxG non ha ponte per. Pattern universal]",
tools/data/incrocio_20260404_0330.json:8:  "consecutio_verso_vuoto": 6,
tools/data/domandatore/domandatore_20260305_1955.json:5:    "claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/consecutio_processata.json:6:      "ponte_da": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio_processata.json:7:      "ponte_a": "[VUOTO]",
tools/data/consecutio_processata.json:22:          "tipo": "ponte_autologico_verso_vuoto",
tools/data/consecutio_processata.json:24:          "nota": "Ponte autologico nel vuoto: discreto-neutro/continuo-carico"
tools/data/consecutio_processata.json:29:      "tensione": "CONS_GxR_QxG",
tools/data/consecutio_processata.json:30:      "ponte_da": "orizzonte degli eventi",
tools/data/consecutio_processata.json:31:      "ponte_a": "[VUOTO]",
tools/data/consecutio_processata.json:35:          "da": "GxR: r_s = 2GM/c^2 (raggio di Schwarzschild — dove la gravita diventa )",
tools/data/consecutio_processata.json:40:          "tipo": "ponte_autologico_verso_vuoto",
tools/data/consecutio_processata.json:41:          "dettaglio": "GQxR: causalita emergente?",
tools/data/consecutio_processata.json:42:          "nota": "Ponte autologico nel vuoto: discreto-sub/continuo-super"
tools/data/consecutio_processata.json:48:      "ponte_da": "atomo di idrogeno",
tools/data/consecutio_processata.json:49:      "ponte_a": "[VUOTO]",
tools/data/consecutio_processata.json:64:          "tipo": "ponte_autologico_verso_vuoto",
tools/data/consecutio_processata.json:66:          "nota": "Ponte autologico nel vuoto: discreto-neutro/continuo-carico"
tools/data/lab_vincoli.md:12:- Se non sai, lascia vuoto. Blank > Wrong.
tools/data/seme.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme.json:147:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme.json:261:          "ponte": "forma simplettica = entropia (invertibili)",
tools/data/seme.json:266:          "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/seme.json:271:          "ponte": "tensore EM dentro la forma simplettica",
tools/data/seme.json:298:          "coppia": "ExR",
tools/data/seme.json:299:          "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/seme.json:300:          "nota": "il 'ponte' non è l'onda EM, è il cambio di osservatore"
tools/data/seme.json:327:          "ponte": "noise come risorsa computazionale — fluttuazioni termiche = calcolo",
tools/data/seme.json:328:          "nota": "il vuoto quantistico (pieno di fluttuazioni) è il computer"
tools/data/seme.json:380:          "ponte": "Kondo insulator fortemente correlato — dualita conduttore/isolante come stato quantistico unico",
tools/data/seme.json:385:          "ponte": "campo magnetico estremo (35T) collassa il confine tra stati — condizione di soglia",
tools/data/domandatore/domandatore_20260402_0803.json:4:    "id": "CONS_GxR_QxG",
tools/data/domandatore/domandatore_20260402_0803.json:5:    "claim": "Relazione tra orizzonte degli eventi e il vuoto QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/domandatore/domandatore_20260402_0803.json:12:      "id": "GEN_GAP_RATIO_CONS_GxE_CONS_GxR_QxG",
tools/data/domandatore/domandatore_20260402_0803.json:14:      "ipotesi": "Il duale di \"Relazione tra orizzonte degli eventi e il vuoto Qx\" [catalogo: custom]",
tools/data/domandatore/domandatore_20260402_0803.json:20:      "id": "BOUNDARY_CONS_GxR_QxG",
tools/data/domandatore/domandatore_20260402_0803.json:22:      "ipotesi": "Tra gli estremi del claim \"Relazione tra orizzonte degli eventi e il vuoto Qx\" esiste un punto di transizione continuo",
tools/data/domandatore/domandatore_20260402_0803.json:31:      "id": "COMP_GEN_GAP_RATIO_CONS_GxE_CONS_GxR_QxG",
tools/data/domandatore/domandatore_20260402_0803.json:38:      "id": "TRANS_BOUNDARY_CONS_GxR_QxG",
tools/data/domandatore/domandatore_20260402_0803.json:78:    "id": "TRANS_BOUNDARY_CONS_GxR_QxG",
tools/data/domandatore/domandatore_20260314_1904.json:4:  "domanda_originale": "Se il nuovo entra come massimo residuo e il sistema lo amplifica, cosa impedisce che il rumore (residuo grande ma vuoto) venga trattato come segnale — qual è il discriminante tra residuo-che-porta-struttura e residuo-che-è-solo-errore?",
tools/data/domandatore/domandatore_20260314_1904.json:8:      "domanda": "Se \"Se il nuovo entra come massimo residuo e il sistema lo amplifica, cosa impedisce che il rumore (residuo grande ma vuoto) venga trattato come segnale — qual è il discriminante tra residuo-che-porta-struttura e residuo-che-è-solo-errore?\" e' vero, cosa dice il contrario (1/X)?",
tools/data/domandatore/domandatore_20260314_1904.json:13:      "domanda": "Tra il si e il no di \"Se il nuovo entra come massimo residuo e il sistema lo amplifica, cosa impedisce che il rumore (residuo grande ma vuoto) venga trattato come segnale — qual è il discriminante tra residuo-che-porta-struttura e residuo-che-è-solo-errore?\", cosa c'e' al bordo?",
tools/data/domandatore/domandatore_20260314_1904.json:18:      "domanda": "Se \"Se il nuovo entra come massimo residuo e il sistema lo amplifica, cosa impedisce che il rumore (residuo grande ma vuoto) venga trattato come segnale — qual è il discriminante tra residuo-che-porta-struttura e residuo-che-è-solo-errore?\" vale qui, vale anche in un altro contesto?",
tools/data/domandatore/domandatore_20260314_1904.json:23:      "domanda": "Cosa romperebbe \"Se il nuovo entra come massimo residuo e il sistema lo amplifica, cosa impedisce che il rumore (residuo grande ma vuoto) venga trattato come segnale — qual è il discriminante tra residuo-che-porta-struttura e residuo-che-è-solo-errore?\"? Qual e' il controesempio?",
tools/data/domandatore/domandatore_20260314_1904.json:28:      "domanda": "\"Se il nuovo entra come massimo residuo e il sistema lo amplifica, cosa impedisce che il rumore (residuo grande ma vuoto) venga trattato come segnale — qual è il discriminante tra residuo-che-porta-struttura e residuo-che-è-solo-errore?\" vale a scala grande quanto a scala piccola?",
tools/data/domandatore/domandatore_20260314_1904.json:34:    "tensione": "Tra il si e il no di \"Se il nuovo entra come massimo residuo e il sistema lo amplifica, cosa impedisce che il rumore (residuo grande ma vuoto) venga trattato come segnale — qual è il discriminante tra residuo-che-porta-struttura e residuo-che-è-solo-errore?\", cosa c'e' al bordo?",
tools/data/domandatore/domandatore_20260414_0345.json:4:  "domanda_originale": "Se ogni eco è già punto fisso, cosa discrimina le iterazioni che densificano da quelle che girano a vuoto?",
tools/data/domandatore/domandatore_20260414_0345.json:8:      "domanda": "Se \"Se ogni eco è già punto fisso, cosa discrimina le iterazioni che densificano da quelle che girano a vuoto?\" e' vero, cosa dice il contrario (1/X)?",
tools/data/domandatore/domandatore_20260414_0345.json:13:      "domanda": "Tra il si e il no di \"Se ogni eco è già punto fisso, cosa discrimina le iterazioni che densificano da quelle che girano a vuoto?\", cosa c'e' al bordo?",
tools/data/domandatore/domandatore_20260414_0345.json:18:      "domanda": "Se \"Se ogni eco è già punto fisso, cosa discrimina le iterazioni che densificano da quelle che girano a vuoto?\" vale qui, vale anche in un altro contesto?",
tools/data/domandatore/domandatore_20260414_0345.json:23:      "domanda": "Cosa romperebbe \"Se ogni eco è già punto fisso, cosa discrimina le iterazioni che densificano da quelle che girano a vuoto?\"? Qual e' il controesempio?",
tools/data/domandatore/domandatore_20260414_0345.json:28:      "domanda": "\"Se ogni eco è già punto fisso, cosa discrimina le iterazioni che densificano da quelle che girano a vuoto?\" vale a scala grande quanto a scala piccola?",
tools/data/domandatore/domandatore_20260414_0345.json:34:    "tensione": "Tra il si e il no di \"Se ogni eco è già punto fisso, cosa discrimina le iterazioni che densificano da quelle che girano a vuoto?\", cosa c'e' al bordo?",
tools/data/stato_ciclo.json:16:      "id": "GEN_2_GxR_GxQ",
tools/data/stato_ciclo.json:17:      "tipo": "consecutio_ponte",
tools/data/stato_ciclo.json:20:      "ponte_da": "orizzonte degli eventi",
tools/data/stato_ciclo.json:21:      "ponte_a": "",
tools/data/stato_ciclo.json:22:      "coppia_da": "GxR",
tools/data/stato_ciclo.json:28:    "CONS_GxR_QxG",
tools/data/stato_ciclo.json:30:    "GEN_2_GxR_ExR",
tools/data/stato_ciclo.json:31:    "GEN_2_GxR_ExG",
tools/data/stato_ciclo.json:32:    "GEN_2_GxR_GxQ",
tools/data/stato_ciclo.json:33:    "GEN_2_GxR_GxQ",
tools/data/stato_ciclo.json:34:    "GEN_3_GxR_ExR",
tools/data/stato_ciclo.json:35:    "GEN_3_GxR_ExG",
tools/data/stato_ciclo.json:36:    "GEN_2_GxR_GxQ",
tools/data/stato_ciclo.json:37:    "GEN_4_ExR_ExG",
tools/data/stato_ciclo.json:38:    "GEN_4_ExR_GxR",
tools/data/stato_ciclo.json:39:    "GEN_2_GxR_GxQ",
tools/data/stato_ciclo.json:40:    "GEN_5_ExR_ExG",
tools/data/stato_ciclo.json:41:    "GEN_5_ExR_GxR",
tools/data/stato_ciclo.json:42:    "GEN_2_GxR_GxQ",
tools/data/stato_ciclo.json:43:    "GEN_6_ExR_ExG",
tools/data/stato_ciclo.json:44:    "GEN_6_ExR_GxR",
tools/data/stato_ciclo.json:45:    "GEN_2_GxR_GxQ",
tools/data/stato_ciclo.json:46:    "GEN_7_ExR_ExG",
tools/data/stato_ciclo.json:47:    "GEN_7_ExR_GxR",
tools/data/stato_ciclo.json:48:    "GEN_2_GxR_GxQ",
tools/data/stato_ciclo.json:49:    "GEN_8_ExR_ExG",
tools/data/stato_ciclo.json:50:    "GEN_8_ExR_GxR"
tools/data/stato_ciclo.json:59:      "dettaglio": "ExR↔ExG: electromagnetic",
tools/data/stato_ciclo.json:66:      "da": "ExR: e^2/(4pi*eps0*mc^2)",
tools/data/stato_ciclo.json:67:      "a": "GxR: r_s = 2GM/c^2",
tools/data/incrocio_20260402_0755.json:8:  "consecutio_verso_vuoto": 6
tools/data/domandatore/domandatore_20260331_1602.json:4:  "domanda_originale": "Come coesistono continuo e discreto? Questa e la domanda senza risposta — il vuoto QxG. La costante relazionale e l_P^2. Il dipolo dello zero e continuo/discreto. Non esiste un ponte. Perche?",
tools/data/domandatore/domandatore_20260331_1602.json:8:      "domanda": "Se \"Come coesistono continuo e discreto? Questa e la domanda senza risposta — il vuoto QxG. La costante relazionale e l_P^2. Il dipolo dello zero e continuo/discreto. Non esiste un ponte. Perche?\" e' vero, cosa dice il contrario (1/X)?",
tools/data/domandatore/domandatore_20260331_1602.json:13:      "domanda": "Tra il si e il no di \"Come coesistono continuo e discreto? Questa e la domanda senza risposta — il vuoto QxG. La costante relazionale e l_P^2. Il dipolo dello zero e continuo/discreto. Non esiste un ponte. Perche?\", cosa c'e' al bordo?",
tools/data/domandatore/domandatore_20260331_1602.json:18:      "domanda": "Se \"Come coesistono continuo e discreto? Questa e la domanda senza risposta — il vuoto QxG. La costante relazionale e l_P^2. Il dipolo dello zero e continuo/discreto. Non esiste un ponte. Perche?\" vale qui, vale anche in un altro contesto?",
tools/data/domandatore/domandatore_20260331_1602.json:23:      "domanda": "Cosa romperebbe \"Come coesistono continuo e discreto? Questa e la domanda senza risposta — il vuoto QxG. La costante relazionale e l_P^2. Il dipolo dello zero e continuo/discreto. Non esiste un ponte. Perche?\"? Qual e' il controesempio?",
tools/data/domandatore/domandatore_20260331_1602.json:28:      "domanda": "\"Come coesistono continuo e discreto? Questa e la domanda senza risposta — il vuoto QxG. La costante relazionale e l_P^2. Il dipolo dello zero e continuo/discreto. Non esiste un ponte. Perche?\" vale a scala grande quanto a scala piccola?",
tools/data/domandatore/domandatore_20260331_1602.json:34:    "tensione": "Tra il si e il no di \"Come coesistono continuo e discreto? Questa e la domanda senza risposta — il vuoto QxG. La costante relazionale e l_P^2. Il dipolo dello zero e continuo/discreto. Non esiste un ponte. Perche?\", cosa c'e' al bordo?",
tools/data/domandatore/domandatore_20260305_2028.json:5:    "claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/domandatore/domandatore_20260328_1801.json:4:  "domanda_originale": "Il bicono è la struttura possibilistica. Il movimento è sull'asse che definisce il cerchio — una deriva angolare. Le basi sono tutte le possibilità (pieno) e nessuna possibilità (vuoto). La spirale converge al vertice (zero). f(x)=1+1/x come iterata lineare non cattura questo — è una convergenza da A a B, non un movimento circolare che si determina. Come si muove la possibilità sul bicono?",
tools/data/domandatore/domandatore_20260328_1801.json:8:      "domanda": "Se \"Il bicono è la struttura possibilistica. Il movimento è sull'asse che definisce il cerchio — una deriva angolare. Le basi sono tutte le possibilità (pieno) e nessuna possibilità (vuoto). La spirale converge al vertice (zero). f(x)=1+1/x come iterata lineare non cattura questo — è una convergenza da A a B, non un movimento circolare che si determina. Come si muove la possibilità sul bicono?\" e' vero, cosa dice il contrario (1/X)?",
tools/data/domandatore/domandatore_20260328_1801.json:13:      "domanda": "Tra il si e il no di \"Il bicono è la struttura possibilistica. Il movimento è sull'asse che definisce il cerchio — una deriva angolare. Le basi sono tutte le possibilità (pieno) e nessuna possibilità (vuoto). La spirale converge al vertice (zero). f(x)=1+1/x come iterata lineare non cattura questo — è una convergenza da A a B, non un movimento circolare che si determina. Come si muove la possibilità sul bicono?\", cosa c'e' al bordo?",
tools/data/domandatore/domandatore_20260328_1801.json:18:      "domanda": "Se \"Il bicono è la struttura possibilistica. Il movimento è sull'asse che definisce il cerchio — una deriva angolare. Le basi sono tutte le possibilità (pieno) e nessuna possibilità (vuoto). La spirale converge al vertice (zero). f(x)=1+1/x come iterata lineare non cattura questo — è una convergenza da A a B, non un movimento circolare che si determina. Come si muove la possibilità sul bicono?\" vale qui, vale anche in un altro contesto?",
tools/data/domandatore/domandatore_20260328_1801.json:23:      "domanda": "Cosa romperebbe \"Il bicono è la struttura possibilistica. Il movimento è sull'asse che definisce il cerchio — una deriva angolare. Le basi sono tutte le possibilità (pieno) e nessuna possibilità (vuoto). La spirale converge al vertice (zero). f(x)=1+1/x come iterata lineare non cattura questo — è una convergenza da A a B, non un movimento circolare che si determina. Come si muove la possibilità sul bicono?\"? Qual e' il controesempio?",
tools/data/domandatore/domandatore_20260328_1801.json:28:      "domanda": "\"Il bicono è la struttura possibilistica. Il movimento è sull'asse che definisce il cerchio — una deriva angolare. Le basi sono tutte le possibilità (pieno) e nessuna possibilità (vuoto). La spirale converge al vertice (zero). f(x)=1+1/x come iterata lineare non cattura questo — è una convergenza da A a B, non un movimento circolare che si determina. Come si muove la possibilità sul bicono?\" vale a scala grande quanto a scala piccola?",
tools/data/domandatore/domandatore_20260328_1801.json:34:    "tensione": "Tra il si e il no di \"Il bicono è la struttura possibilistica. Il movimento è sull'asse che definisce il cerchio — una deriva angolare. Le basi sono tutte le possibilità (pieno) e nessuna possibilità (vuoto). La spirale converge al vertice (zero). f(x)=1+1/x come iterata lineare non cattura questo — è una convergenza da A a B, non un movimento circolare che si determina. Come si muove la possibilità sul bicono?\", cosa c'e' al bordo?",
tools/data/lab_registro.json:8:      "partenza": "QxG — il vuoto",
tools/data/lab_registro.json:12:        "10^123 = (t_H/t_P)² — vacuum catastrophe = stesso ponte mancante QxG",
tools/data/lab_registro.json:21:        "Limite Schwinger: il vuoto produce coppie — il campo diventa sorgente",
tools/data/lab_registro.json:46:        "La vacuum catastrophe come ponte QxG mancante: verificare se 10^123 cambia con H₀ variabile",
tools/data/lab_registro.json:56:        "QxG è il vuoto in 2 triangoli su 4 — è il pezzo che chiude due strutture",
tools/data/lab_registro.json:60:        "R è il 5° vertice: connesso a tutti ma senza perno i — R=c è il frame",
tools/data/lab_registro.json:61:        "5/6 lati del tetraedro hanno ponte. L'unico senza: QxG",
tools/data/lab_registro.json:66:        "QxG non ha ponte perché il perno i non ha asse esterno (il tempo non è parametro in QG)",
tools/data/lab_registro.json:81:        "C4 (tetraedro): QxG ha perno i ma non ponte. R non ruota — è il frame.",
tools/data/lab_registro.json:88:      "risultante_sessione": "Ogni teoria presuppone una separazione. A scala di Planck tutte le separazioni collassano. Geometria=entropia=conteggio di stati. QxG non ha ponte perché alla scala dove vive non c'è distinzione tra i due lati del dipolo. Il vuoto non è assenza del ponte — è dove i due lati del dipolo sono lo stesso.",
tools/data/lab_registro.json:93:        "Schwinger: il vuoto produce coppie — il campo diventa sorgente",
tools/data/lab_registro.json:103:          "T-Q-G": "S_BH = ponte QxG visibile solo attraverso T. Si rompe a M_P.",
tools/data/lab_registro.json:113:          "T è necessaria per VEDERE il ponte QxG (S_BH) — senza T il ponte è invisibile"
tools/data/lab_registro.json:115:        "risultante_traversata": "E (elettromagnetismo) cuce il tetraedro. La carica è il numero quantistico che attraversa tutti i confini. T (termodinamica) è la lente che rende visibile ciò che Q e G non possono vedere da sole. Il vuoto QxG non è vuoto — è invisibile senza T come intermediario."
tools/data/lab_registro.json:159:          "SxQ": "ponte = protone. α_s corre opposto a α (libertà asintotica vs screening). S contiene Q.",
tools/data/lab_registro.json:160:          "SxT": "ponte = plasma quark-gluoni (QGP). T_deconf ≈ 1.7×10¹² K. Confinato vs deconfinato.",
tools/data/lab_registro.json:161:          "SxG": "ponte = stella di neutroni (nucleo). Λ_QCD/M_P ≈ 10⁻²⁰ (hierarchy problem). Nessuna teoria unificata.",
tools/data/lab_registro.json:162:          "SxE": "ponte = π⁰→γγ (anomalia ABJ). Anti-screening vs screening. α_s/α ≈ 16.18 ≈ 10φ a ~57 GeV.",
tools/data/lab_registro.json:163:          "SxR": "ponte = QGP/jets relativistici. QCD è già relativistica. Λ_QCD/c = scala emergente (dimensional transmutation)."
tools/data/lab_registro.json:190:            "72.5° ≈ pentagonale: alla scala di Planck servono tutte e 5 le teorie (TQGE+R)",
tools/data/lab_registro.json:217:            "f e g = dinamica e statistica = ponte TxQ incarnato algebricamente",
tools/data/biconi/bicono_20260507_1938.json:3:  "singolare": "QGE come faccia in cui il vuoto QG diventa depositabile perche passa attraverso gauge e sorgente.",
tools/data/biconi/bicono_20260507_1938.json:6:    "raw": "qui diventa possibile cercare gate di deposito come unita di faccia nei perimetri TQGE+R; qui diventa non-possibile usare l'adiacenza blank-source come denominatore sufficiente.",
tools/data/biconi/bicono_20260507_1938.json:7:    "possibile": "cercare gate di deposito come unita di faccia nei perimetri TQGE+R",
tools/data/incrocio_20260421_0720.json:8:  "consecutio_verso_vuoto": 6,
tools/data/biconi/bicono_20260507_1804.json:3:  "singolare": "la faccia QGE, dove vuoto quantistico-gravitazionale, fase gauge e sorgente reale stanno nello stesso triangolo.",
tools/data/biconi/bicono_20260507_1804.json:6:    "raw": "qui diventa possibile testare Q->G come operatore triadico `blank + gauge + source`; qui diventa non-possibile cercare un ponte QG isolato senza il terzo vertice.",
tools/data/biconi/bicono_20260507_1804.json:8:    "non_possibile": "cercare un ponte QG isolato senza il terzo vertice"
tools/data/biconi/bicono_20260507_1751.json:4:  "invariante": "la contaminazione del vuoto passa alle facce che contengono QG; non passa alle facce senza QG.",
tools/data/biconi/bicono_20260507_1957.json:6:    "raw": "qui diventa possibile misurare G come polarita locale di guscio nei perimetri TQGE+R; qui diventa non-possibile trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG che lo polarizza.",
tools/data/biconi/bicono_20260507_1957.json:7:    "possibile": "misurare G come polarita locale di guscio nei perimetri TQGE+R",
tools/data/alignment_markers.jsonl:7:{"event": "close", "ctx": "tm3", "closed_at": "2026-04-21T15:11:42.244430", "result": "Batch done. 30 tensioni → 10 canonical_multi (attivano bridge TQGE+R, QxT dominante con 5/10), 10 canonical_mono (1 teoria), 5 excluded (meta), 5 unmapped (composite/structural — richiedono review operatore). Coverage 83%. Report JSON salvato. Insight: QxT è pair dominante — coerente con cap saturato in conoscenza_teorie.", "opened_at": "2026-04-21T15:10:55.481246", "intent": "Batch projection delle 30 tensioni del seme su bicono_projection.py per screening"}
tools/data/alignment_markers.jsonl:12:{"event": "open", "ctx": "tm3", "opened_at": "2026-04-21T16:38:44.814210", "intent": "FASE 2b — applicare modifiche concepts_kb: ALT-C su d_nd + riempire singolarita/zero + aggiungere 10 concetti + revisionare 5 entries biased/stale", "return_condition": "concepts_kb.json committato con tutte le modifiche. Nessuno scaffold vuoto su concetti centrali. Numero assiomi aggiornato 15→16. TM1 notificato (custodisce il file ma mi ha delegato l'audit). Tooltip sul sito rifletteranno le nuove definizioni al prossimo sync.", "status": "open", "checks": []}
tools/data/alignment_markers.jsonl:28:{"event": "open", "ctx": "tm3", "opened_at": "2026-04-21T19:46:41.340263", "intent": "Fix UX /ai-lab: tooltip sidebar left (card-per-riga + tooltip a destra). Evoluzione BiconoLab galleria: diagrammi localizzati al dominio (non più pieno/vuoto/zero universali) + layout 3 colonne + esplorazione relazioni trascendentali", "return_condition": "Sidebar left sistemata: tooltip appare a destra, non copre termini. BiconoLab diagrammi con labels specifici dal dipolo (radici/singolare letti). Layout 3col desktop. Meccanismo visuale opzionale per signature matching.", "status": "open", "checks": []}
tools/data/alignment_markers.jsonl:29:{"event": "close", "ctx": "tm3", "closed_at": "2026-04-21T19:52:56.501833", "result": "Fix UX doppio completato (d-nd_com a3db11e). (1) Sidebar /ai-lab: StatRow card-per-riga con tooltip placement=right — copertura termini adiacenti risolta. (2) BiconoLab galleria evoluta: parseRoots + parseSingolare → diagrammi LOCALIZZATI al dipolo specifico (caldo/freddo/0K invece di pieno/vuoto/zero universali). Signature field aggiunto (ℏ/k_B/G/e/c/|P|+|A|/Mobius) — badge cliccabile → highlight dipoli con stessa firma = relazione trascendentale visibile (A16 1-e-tutto). Layout 3col desktop, 4col 2xl. Build ok, deploy webhook live.", "opened_at": "2026-04-21T19:46:41.340263", "intent": "Fix UX /ai-lab: tooltip sidebar left (card-per-riga + tooltip a destra). Evoluzione BiconoLab galleria: diagrammi localizzati al dominio (non più pieno/vuoto/zero universali) + layout 3 colonne + esplorazione relazioni trascendentali"}
tools/data/seme_axioms.json:346:    "claim": "T,Q,G,E formano un tetraedro con perno i su tutti i 6 lati. 5 ponti, 1 vuoto (QxG). R=c frame esterno.",
tools/data/seme_axioms.json:580:    "claim": "Applied valutatore REDESIGN from 20260507_0901: Falsificare ORDER_DENOMINATOR_GATE su domini non-sintetici o semi-reali: applicare il gate one-sided a 2-3 sequenze fisiche/ponte gia' presenti nel sito, con shuffle e surrogati preservanti marginale,",
tools/data/seme_axioms.json:598:    "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_axioms.json:607:    "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/incrocio_20260420_1856.json:8:  "consecutio_verso_vuoto": 6,
tools/data/residuo_ordine_9domini.json:72:  "tensione_aperta": "il tipo di ordine predice il comportamento? ponte con termodinamica della possibilita (Omega Kernel)"
tools/data/trajectory_apply_history.jsonl:2:{"apply_ts": "20260507_092332", "from_cycle_ref": "20260507_0901", "from_log_ts": "2026-05-07T09:07:53.577876+00:00", "decision": "REDESIGN", "confidence": "high", "old_direzione": "Costruire una matrice di trasferibilita' del denominator gate: applicarlo a 3-4 perimetri non-BOUNDARY con poli coerente/illusorio e verificare quali parti trasferiscono (supporto one-sided, coordinat", "new_direzione": "Falsificare ORDER_DENOMINATOR_GATE su domini non-sintetici o semi-reali: applicare il gate one-sided a 2-3 sequenze fisiche/ponte gia' presenti nel sito, con shuffle e surrogati preservanti marginale, cercando un controesempio dove il supporto denominatore appare anche sul lato illusorio o scompare ", "log_entry_marked_executed": true}
tools/data/trajectory_apply_history.jsonl:3:{"apply_ts": "20260507_100602", "from_cycle_ref": "20260507_0942", "from_log_ts": "2026-05-07T09:47:43.105142+00:00", "decision": "REDESIGN", "confidence": "high", "old_direzione": "Falsificare ORDER_DENOMINATOR_GATE su domini non-sintetici o semi-reali: applicare il gate one-sided a 2-3 sequenze fisiche/ponte gia' presenti nel sito, con shuffle e surrogati preservanti marginale,", "new_direzione": "Ritestare ORDER_DENOMINATOR_GATE sul counter-scope logistic al nodo regressivo dell'osservabilita': usare symbolic itinerary block entropy, return-tail exponent e recurrence-plot diagonal statistics sotto original-vs-shuffle denominator gate, senza tuning di z_min.", "log_entry_marked_executed": true}
tools/data/operator_directive_consumed_20260507_0803.md:17:oppure il gate degenera (non discrimina, non flagga, output sintatticamente valido ma vuoto)?
tools/data/risultante_v2.json:15:      "note": "All |forces| = 1 at R=1, but F \u2260 0"
tools/cron_ciclo_continuo.sh:8:TOOLS_DIR="$(cd "$(dirname "$0")" && pwd)"
tools/data/incrocio_20260405_0753.json:8:  "consecutio_verso_vuoto": 6,
tools/data/lab_logiche_corpus.md:64:**Per il lab**: quando non c'è risposta (vuoto QxG), non forzare.
tools/data/lab_logiche_corpus.md:215:**Per il lab**: ogni coppia di teorie (TxQ, GxR, etc.) È un'equazione
tools/data/lab_logiche_corpus.md:216:di secondo grado. Il ponte è lo zero tra gli estremi. Il vuoto QxG
tools/data/lab_logiche_corpus.md:299:Domanda sul vuoto → autologica (il vuoto QxG genera la propria teoria).
tools/data/lab_logiche_corpus.md:331:L'intento è "dove la relazione XY tocca il vuoto?"
tools/data/lab_logiche_corpus.md:605:## 55. Il vuoto QxG = la vacuum catastrophe
tools/data/lab_logiche_corpus.md:608:La vacuum catastrophe (10¹²³) è lo stesso ponte mancante su scala cosmologica.
tools/data/lab_logiche_corpus.md:610:H₀ vive in GxR (Friedmann) ma il suo valore dipende da ρ_Λ — che è QxG.
tools/data/lab_logiche_corpus.md:611:Il vuoto non è dove manca la teoria — è dove la teoria che c'è si rompe
tools/data/lab_vault.json:24:    "contesto": "## Risultante\n\n**Il ponte QxG esiste già — è S_BH. Ma è visibile solo attraverso T.**\n\nLa formula si riscrive:\n\n$$\\frac{S_{BH}}{k_B} = \\frac{A}{4\\,l_P^2}$$\n\nIl lato sinistro è conteggio termodinamico ",
tools/data/lab_vault.json:39:    "contesto": "## Risultante: il terzo corpo (E) congela il ponte T×G senza distruggerlo\n\nIl buco nero estremale (Q = Q_max) ha **entropia finita a temperatura zero**:\n\n$$S_{\\text{ext}} = \\frac{\\pi r_+^2 c^3}{G\\hbar",
tools/data/lab_vault.json:54:    "contesto": "## Risultante\n\n**Il campo di Schwinger è il taglio universale di E — vale in vuoto piatto e all'orizzonte.**\n\nFormula: **E_s = m_e²c³/(eℏ) ≈ 1.3 × 10¹⁸ V/m**\n\nUn buco nero Reissner-Nordström con campo",
tools/data/lab_vault.json:74:    "contesto": "## Risultante: GxE è violato da ogni particella carica — e questa violazione È il ponte mancante\n\n**La formula.** Il bound estremale Reissner-Nordström:\n\n$$Q \\leq M\\sqrt{4\\pi\\varepsilon_0 G}$$\n\nPer l'",
tools/data/bicono_projections.jsonl:2:{"timestamp": "2026-04-21T14:05:51.083265", "origin_intent": "tm3:certezza_modello", "projection": {"mode": "auto_canonical", "matched": "temperatura", "radici": ["caldo (energia, disordine, ∞)", "freddo (quiete, ordine, 0K)"], "singolare": "0K — terzo principio, irraggiungibile dal basso", "invariante": "k_B (ponte micro-macro)", "campo": {"possibile": "fluire calore dal caldo al freddo", "non_possibile": "moto perpetuo di 2° tipo"}}}
tools/data/bicono_projections.jsonl:6:{"timestamp": "2026-04-21T14:05:51.223856", "origin_intent": "tm3:certezza_modello", "projection": {"mode": "auto_canonical", "matched": "pieno_vuoto", "radici": ["base piena (tutte le possibilità co-esistenti)", "base vuota (nessuna possibilità attualizzata)"], "singolare": "vertice zero — 0-dim e ∞-dim insieme", "invariante": "nastro di Mobius (stessa superficie, due letture)", "campo": {"possibile": "emergenza di attualità dal potenziale", "non_possibile": "pieno senza vuoto, vuoto senza pieno"}}}
tools/data/loop_state.json:47:    "Come coesistono continuo e discreto — il ponte tra Quantistica e Gravitazione non esiste": {
tools/data/loop_state.json:61:    "Il campo elettrico e magnetico sono lo stesso fenomeno visto da frame diversi — il ponte è il cambio di osservatore": {
tools/data/loop_state.json:75:    "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?": {
tools/data/loop_state.json:82:    "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?": {
tools/data/loop_state.json:117:    "ERRORE: L'affermazione è imprecisa.\n\nRN (GxExR) carica lo spaziotempo tramite l'energia  — claim originale: Il buco nero di Reissner-Nordstrom (GxE) carica lo spaziotempo, modificando la m": {
tools/data/loop_state.json:138:    "ERRORE: **IMPRECISA.** Le formule sono corrette, ma la narrativa sbaglia il soggetto. L' — claim originale: **L'orizzonte è dove GxR forza la mano a QxG.**\n\nAll'orizzonte, la radiazione di": {
tools/data/loop_state.json:166:    "ERRORE: **IMPRECISA.**\n\nIl ragionamento qualitativo è corretto ma la formula finale è sb — claim originale: **L'orizzonte è esattamente dove GxR forza QxG a esistere.**\n\nAll'orizzonte, la ": {
tools/data/loop_state.json:536:          "answer": "Il buco nero di Reissner-Nordström (GxE) suggerisce che il \"vuoto\" quantistico (QxG) interagisce con campi elettromagnetici intensi. L'orizzonte degli eventi di un buco nero carico modifica la struttura dello spaziotempo a livello quantistico, potenzialmente influenzando la creazione di coppie virtuali (Q). Questo potrebbe portare a effetti osservabili vicino all'orizzonte, ma una teoria completa di gravità quantistica (QxG) è necessaria per descriverlo pienamente.",
tools/data/loop_state.json:556:          "answer": "Il buco nero di Reissner-Nordström (GxE) carica il vuoto quantistico (QxG).\n\nLa carica elettrica altera la geometria dello spaziotempo (G), influenzando le fluttuazioni quantistiche del vuoto vicino all'orizzonte degli eventi. Questo porta alla creazione di coppie di particelle virtuali cariche, alcune delle quali sfuggono come radiazione di Hawking carica.\n\nNon c'è ancora una teoria completa di gravità quantistica.",
tools/data/loop_state.json:576:          "answer": "Il buco nero di Reissner-Nordström (GxE) suggerisce che il vuoto quantistico (QxG) interagisce con la gravità e l'elettromagnetismo.\n\nLa costante rilevante è la carica elettrica elementare *e*, che influenza la geometria dello spaziotempo.\n\nUnità di misura: Coulomb (C).\n\nMisura la quantità di carica elettrica, che altera la curvatura dello spaziotempo attorno al buco nero.",
tools/data/loop_state.json:596:          "answer": "Un buco nero di Reissner-Nordström (GxE) ha un orizzonte degli eventi e una singolarità, come Schwarzschild (GxR), ma la singolarità è un anello (non un punto).\n\nSe QxG fosse una teoria, la massa di Planck m_P=sqrt(hbar*c/G) ~ 10^-8 kg darebbe una dimensione per il buco nero. Sotto questa scala, la gravità quantistica dominerebbe e il concetto classico di singolarità si romperebbe.\n\nIl \"vuoto\" di QxG sarebbe intrinsecamente discreto a causa dell'area di Planck.",
tools/data/loop_state.json:638:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:642:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:643:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:645:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica, dove la relatività generale fallisce. La gravità quantistica (QxG) cerca di descrivere il \"vuoto\" a scale di Planck (l_P), dove lo spaziotempo potrebbe essere discreto, non liscio. L'orizzonte sfida questa visione, perché la sua esistenza presuppone una geometria classica che QxG mette in discussione. Non abbiamo ancora una teoria completa per unire questi concetti.",
tools/data/loop_state.json:662:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:663:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:665:          "answer": "L'orizzonte degli eventi (GxR) implica una densità di informazione massima (entropia di Bekenstein-Hawking). La quantizzazione dello spaziotempo (QxG) suggerisce un'area minima (l_P^2).\n\nL'area dell'orizzonte, quantizzata, potrebbe rivelare la microstruttura del vuoto quantistico. Ma non esiste una teoria consolidata che descriva questa connessione.",
tools/data/loop_state.json:682:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:683:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:685:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica. La gravità quantistica (QxG) dovrebbe risolverla, ma non esiste una teoria consolidata.\n\nNon c'è una singola costante che governi direttamente la relazione. L'area di Planck (l_P^2 = Għ/c^3) è rilevante perché quantizza l'area e potrebbe influenzare la struttura dello spaziotempo vicino all'orizzonte, risolvendo la singolarità. L'area di Planck ha unità di misura m^2 e rappresenta l'area minima significativa.",
tools/data/loop_state.json:702:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:703:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:705:          "answer": "L'orizzonte degli eventi (GxR) definisce un confine dove la gravità è tale da non permettere a nulla di sfuggire. Avvicinandosi alla scala di Planck (QxG), la descrizione classica dell'orizzonte si rompe. A questa scala, effetti quantistici dominano, e si prevede che lo spaziotempo stesso diventi \"schiumoso\" e discontinuo. La relazione diventa dominante quando la curvatura spaziotemporale è tale che la lunghezza d'onda di Planck è paragonabile al raggio di curvatura.",
tools/data/loop_state.json:722:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:723:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:725:          "answer": "L'orizzonte degli eventi, previsto da GxR, implica una singolarità classica non risolta. QxG cerca di quantizzare la geometria spaziotemporale a scale di Planck (l_P), ma non esiste una teoria completa. L'orizzonte sfida QxG: cosa succede alla singolarità quantisticamente? Si dissolve? Diventa un \"firewall\"? La natura dello spaziotempo a l_P resta un mistero.",
tools/data/loop_state.json:747:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:751:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:752:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:754:          "answer": "Onda EM (ExR) perturbando un buco nero di Reissner-Nordström (GxE):\n\n1.  **Scattering:** L'onda incidente si diffonde, con sezioni d'urto dipendenti dalla carica del buco nero.\n2.  **Assorbimento:** Parte dell'energia dell'onda viene assorbita, aumentando massa/carica del buco nero.\n3.  **Onde quasi-normali:** Il buco nero risuona a frequenze specifiche (QNM) dopo la perturbazione, smorzandosi nel tempo. Frequenze e tassi di smorzamento dipendono da massa e carica.\n4.  **Effetto Schwinger:** Campi elettrici intensi vicino all'orizzonte possono creare coppie particella-antiparticella, modificando la carica del buco nero.",
tools/data/loop_state.json:771:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:772:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:791:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:792:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:811:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:812:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:831:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:832:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:863:          "answer": "Il buco nero di Reissner-Nordström (GxE) suggerisce che il \"vuoto\" quantistico (QxG) è tutt'altro che vuoto. La carica del buco nero influenza la geometria dello spaziotempo, modificando il vuoto quantistico circostante e potenzialmente creando coppie di particelle virtuali cariche vicino all'orizzonte degli eventi.",
tools/data/loop_state.json:883:          "answer": "Il buco nero di Reissner-Nordström (GxE) suggerisce che il \"vuoto\" (QxG) attorno a una singolarità carica ha un campo elettrico intenso. Questo influenza la creazione di coppie virtuali (Q), potenzialmente alterando la geometria quantistica dello spaziotempo vicino alla singolarità. Tuttavia, una teoria completa di gravità quantistica (QxG) che descriva accuratamente questo \"vuoto\" manca ancora.",
tools/data/loop_state.json:965:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:969:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:970:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:972:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica. La gravità quantistica (QxG) cerca di risolvere questa singolarità. La radiazione di Hawking (TxG) suggerisce che l'orizzonte non è completamente nero, ma emette radiazione termica dovuta a fluttuazioni quantistiche vicino all'orizzonte, collegando così GxR a QxG attraverso TxG. La formula di Hawking T_H = ħc³/8πGMk_B lega gravità, relatività e quantistica.",
tools/data/loop_state.json:989:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:990:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:992:          "answer": "L'orizzonte degli eventi (GR) implica una temperatura di Hawking (QG) per un osservatore esterno. Questa radiazione suggerisce che il \"vuoto\" quantistico vicino all'orizzonte non è vuoto, ma fluttua e crea coppie di particelle. L'assenza di una teoria completa di gravità quantistica impedisce una descrizione precisa.",
tools/data/loop_state.json:1009:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1010:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:1012:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica. La gravità quantistica (QxG) cerca di risolvere la singolarità con una descrizione quantistica dello spaziotempo.\n\nLa relazione è governata dalla lunghezza di Planck l_P = sqrt(G*hbar/c^3) = 1.61e-35 m.\nl_P definisce la scala alla quale gli effetti quantistici della gravità diventano importanti, influenzando la struttura del vuoto.",
tools/data/loop_state.json:1029:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1030:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:1032:          "answer": "L'orizzonte degli eventi, in GxR, definisce un confine oltre il quale l'informazione è inaccessibile. Applicato al vuoto quantistico (QxG), suggerisce che fluttuazioni quantistiche su scala di Planck (l_P) potrebbero essere \"intrappolate\" e non osservabili.\n\nLa relazione diventa dominante a densità di energia elevatissime, vicine alla singolarità. Si rompe quando la curvatura spaziotemporale è tale da rendere l'orizzonte di Planckiano, dove effetti quantistici dominano. Al confine emerge la necessità di una teoria di gravità quantistica.",
tools/data/loop_state.json:1049:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1050:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:1052:          "answer": "L'orizzonte degli eventi (GxR) pone un limite classico alla nostra osservabilità. La gravità quantistica (QxG) cerca di descrivere il \"vuoto\" a scale di Planck, dove la geometria classica perde significato.\n\nDomande aperte:\n1. Cosa succede all'orizzonte a livello quantistico?\n2. L'area dell'orizzonte è quantizzata?\n3. Come emerge la geometria classica dallo spaziotempo quantistico?\n\nNon abbiamo una teoria completa per rispondere a queste domande.",
tools/data/loop_state.json:1074:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1078:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1079:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:1098:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1099:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:1101:          "answer": "Onda EM incidente su un buco nero carico (RN):\n\nTeoria di Maxwell (ExR) predice che l'onda si diffonde, si rifrange e viene parzialmente assorbita dall'orizzonte degli eventi.\n\nSoluzione RN (GxE) descrive la geometria dello spaziotempo distorta dalla massa e carica del buco nero. L'onda EM perturba questa geometria, generando onde gravitazionali.\n\nNon esiste un oggetto *unico* che connette direttamente ExR e GxE in questo caso. Piuttosto, l'interazione è descritta da soluzioni combinate delle equazioni di Maxwell e Einstein.",
tools/data/loop_state.json:1118:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1119:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:1138:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1139:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:1158:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1159:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:1190:          "answer": "Il buco nero di Reissner-Nordström (RN) connette GxE a QxG tramite la sua termodinamica e il paradosso dell'informazione.\n\nLa metrica RN (GxE) descrive un buco nero con massa M e carica Q. La sua temperatura di Hawking (TxG) è influenzata dalla carica.\n\nLa quantizzazione dell'area dell'orizzonte (QxG), suggerita dalla gravità quantistica a loop, implica un'entropia quantizzata.\n\nIl paradosso dell'informazione sorge perché la radiazione di Hawking (TxG) sembra termica, perdendo informazioni. Ma la meccanica quantistica (Q) richiede unitarietà (conservazione dell'informazione).\n\nLa corrispondenza AdS/CFT suggerisce che l'informazione è codificata sulla superficie del buco nero, ma il meccanismo esatto (QxG) rimane sconosciuto, e la natura quantistica del vuoto vicino all'orizzonte è cruciale.",
tools/data/loop_state.json:1210:          "answer": "Il buco nero di Reissner-Nordström (GxE) carica lo spaziotempo. La sua singolarità è diversa da Schwarzschild (solo GxR).\n\nQxG cerca una teoria quantistica della gravità, ma il \"vuoto\" quantistico (energia di punto zero) crea divergenze enormi se calcolato usando la relatività generale. Il buco nero carico non risolve direttamente questo problema fondamentale.",
tools/data/loop_state.json:1230:          "answer": "Il buco nero carico (Reissner-Nordstrom) connette GxE a QxG tramite la carica elettrica (E) e la massa (G) che influenzano la geometria dello spaziotempo (R).\n\nLa sua esistenza implica che il \"vuoto\" quantistico (QxG) non è veramente vuoto, ma influenzato dalla presenza di carica e massa, che genera una curvatura dello spaziotempo.\n\nNon c'è una singola costante che governa direttamente questa relazione. Piuttosto, la relazione è descritta da una combinazione di costanti fondamentali (G, e, c, hbar) nelle equazioni di Einstein-Maxwell che descrivono la geometria dello spaziotempo attorno al buco nero carico.",
tools/data/loop_state.json:1250:          "answer": "Il buco nero di Reissner-Nordström (GxE) carica il vuoto quantistico (QxG) vicino alla singolarità. L'estremo raggio di RN (G*M/c^2 = e^2/(4pi*eps0*M*c^2)) definisce la scala. Oltre, il vuoto si polarizza, creando coppie virtuali. All'orizzonte, la metrica diverge e la quantizzazione dello spaziotempo diventa dominante, ma non abbiamo una teoria funzionante.",
tools/data/loop_state.json:1292:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1296:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1297:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:1299:          "answer": "L'orizzonte degli eventi (GxR) definisce un confine oltre il quale nulla sfugge. La sua area è proporzionale all'entropia di Bekenstein-Hawking, legata alla termodinamica (T).\n\nQxG cerca di quantizzare lo spaziotempo, ma non ha una teoria completa. L'area minima (l_P^2) suggerisce una granularità.\n\nL'orizzonte, visto da QxG, dovrebbe rivelare questa struttura discreta a livello di Planck. La discrepanza tra la predizione continua di GxR e la possibile natura quantizzata di QxG resta una sfida aperta.",
tools/data/loop_state.json:1316:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1317:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:1319:          "answer": "L'orizzonte degli eventi (GR) implica una temperatura di Hawking (QG). La radiazione di Hawking suggerisce che il \"vuoto\" quantistico fluttua vicino all'orizzonte, creando coppie virtuali. Una particella cade nel buco nero, l'altra sfugge come radiazione. Questo collega GR (orizzonte) a QG (vuoto quantistico fluttuante).",
tools/data/loop_state.json:1336:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1337:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:1339:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica, mentre la gravità quantistica (QxG) cerca di descrivere il \"vuoto\" a scale di Planck, dove lo spaziotempo potrebbe essere discreto.\n\nLa relazione è governata dalla lunghezza di Planck l_P = sqrt(G*hbar/c^3) = 1.61e-35 m.\n\nl_P definisce la scala a cui gli effetti quantistici della gravità diventano importanti, influenzando la natura dello spaziotempo e del \"vuoto\" vicino all'orizzonte degli eventi.",
tools/data/loop_state.json:1356:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1357:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:1359:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica al centro. La gravità quantistica (QxG) dovrebbe risolvere questa singolarità.\n\nScala: Lunghezza di Planck l_P = sqrt(G*hbar/c^3) ≈ 1.6e-35 m.\nRegime: Densità di Planck ρ_P = c^5/(G^2*hbar) ≈ 5e96 kg/m^3.\n\nRottura: La relatività generale (GR) fallisce a queste scale.\nConfine: L'orizzonte stesso diventa problematico, con effetti quantistici dominanti.",
tools/data/loop_state.json:1376:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1377:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:1379:          "answer": "GxR: L'orizzonte degli eventi implica una singolarità classica (curvatura infinita).\nQxG: Non abbiamo una teoria di gravità quantistica per descrivere cosa succede alla singolarità. L'area minima di Planck (l_P^2) suggerisce una discretizzazione dello spazio-tempo, in contrasto con la singolarità classica.\nDomanda aperta: come si conciliano la singolarità classica e la discretizzazione quantistica dello spazio-tempo?",
tools/data/loop_state.json:1401:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1405:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1406:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:1425:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1426:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:1445:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1446:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:1465:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1466:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:1468:          "answer": "Un'onda EM (ExR) interagisce con un buco nero carico (GxE) tramite la forza di Lorentz. La scala dominante è quella del raggio di Schwarzschild r_s del buco nero.\n\nAl confine (orizzonte degli eventi), l'onda EM subisce redshift gravitazionale infinito. \n\nLa teoria di Maxwell si rompe a densità di energia estreme, richiedendo correzioni quantistiche (elettrodinamica quantistica in background curvo).",
tools/data/loop_state.json:1485:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1486:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:1517:          "answer": "Il buco nero di Reissner-Nordström (GxE) implica che un orizzonte degli eventi può esistere anche con carica elettrica. Estrapolando a QxG, suggerisce che il \"vuoto\" quantistico potrebbe avere proprietà geometriche/topologiche non banali legate alla presenza di carica/energia a scale di Planck, influenzando potenzialmente la struttura dello spaziotempo.",
tools/data/loop_state.json:1537:          "answer": "Un buco nero carico (Reissner-Nordström) connette GxE. La sua esistenza implica un vuoto quantistico ad alta energia vicino alla singolarità. Non abbiamo una teoria di gravità quantistica (QxG) per descrivere questo vuoto.",
tools/data/loop_state.json:1557:          "answer": "Il buco nero di Reissner-Nordström (GxE) influenza la gravità quantistica (QxG) tramite la carica elettrica *e* e la massa *M*. La relazione è governata dalla carica adimensionale:\n\ne^2/(4π ε₀ GM^2)\n\nQuesta quantità mette in relazione la forza elettromagnetica e quella gravitazionale. Un valore elevato indica che gli effetti quantistici (QxG) diventano importanti vicino alla singolarità del buco nero, potenzialmente alterando la natura del vuoto.",
tools/data/loop_state.json:1619:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1623:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1624:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:1626:          "answer": "L'orizzonte degli eventi (GxR) definisce un confine dove la gravità è così forte che nulla sfugge. La sua area (A) è legata all'entropia di Bekenstein-Hawking (S = k_B*A/(4*l_P^2)). L'area di Planck (l_P^2, QxG) quantizza l'area dell'orizzonte, suggerendo una natura discreta dello spaziotempo al limite classico. Questo pone vincoli su qualsiasi teoria quantistica della gravità che descriva il \"vuoto\" quantistico.",
tools/data/loop_state.json:1643:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1644:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:1646:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica. La sua quantizzazione (QxG) dovrebbe risolvere questa singolarità, ma non abbiamo una teoria completa. L'area dell'orizzonte è quantizzata (Bekenstein-Hawking), suggerendo una struttura microscopica dello spaziotempo al livello di Planck (l_P). La gravità quantistica a loop è un candidato.",
tools/data/loop_state.json:1663:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1664:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:1666:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica, dove la relatività generale fallisce. La gravità quantistica (QxG) dovrebbe descrivere il \"vuoto\" a scale di Planck.\n\nLa relazione è governata dalla lunghezza di Planck l_P = sqrt(G*hbar/c^3) = 1.61e-35 m. Questa lunghezza quantizza lo spaziotempo, potenzialmente \"risolvendo\" la singolarità nell'orizzonte degli eventi. Misura la scala alla quale gli effetti quantistici della gravità diventano importanti.",
tools/data/loop_state.json:1683:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1684:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:1703:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1704:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:1706:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica (curvatura infinita). La gravità quantistica (QxG) dovrebbe risolvere questa singolarità, ma non sappiamo come. L'area dell'orizzonte è legata all'entropia di Bekenstein-Hawking, suggerendo una natura discreta dello spaziotempo a livello di Planck. Come emerga questa discretizzazione dalla relatività generale è una domanda aperta.",
tools/data/loop_state.json:1728:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1732:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1733:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:1752:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1753:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:1772:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1773:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:1775:          "answer": "L'interazione tra onda EM (Maxwell) e buco nero carico (Reissner-Nordstrom) è governata da:\n\n1.  **Carica elettrica *e***: determina l'interazione EM tra l'onda e il buco nero. Unità: Coulomb (C). Misura la quantità di carica.\n2.  **Costante di Newton *G***: determina la forza gravitazionale. Unità: m³ kg⁻¹ s⁻².\n3.  **Permittività del vuoto *ε₀***: influenza la propagazione dell'onda EM. Unità: F/m.\n4.  **Permeabilità del vuoto *μ₀***: influenza la propagazione dell'onda EM. Unità: H/m.\n5.  **Impedenza del vuoto Z₀ = √(μ₀/ε₀)≈ 377 Ω**\n6.  **c = 1/√(ε₀μ₀)**\n\nL'assorbimento/scattering dell'onda EM dipende dal rapporto carica/massa del buco nero e dalla frequenza dell'onda.",
tools/data/loop_state.json:1792:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1793:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:1795:          "answer": "L'onda EM interagisce con il buco nero di Reissner-Nordstrom tramite la sua carica. A grande distanza, domina l'interazione classica di Maxwell.\n\nVicino all'orizzonte, effetti quantistici (scattering di Schwinger) possono creare coppie di particelle, polarizzando il vuoto.\n\nAl confine, la descrizione classica si rompe e serve una teoria di gravità quantistica (inesistente).",
tools/data/loop_state.json:1812:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:1813:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:1864:          "answer": "Un buco nero carico (Reissner-Nordström) è una soluzione di GxE. La sua esistenza implica un orizzonte degli eventi anche con carica elettrica.\n\nNonostante questo, non fornisce un ponte diretto a QxG (gravità quantistica). La singolarità al centro rimane un problema irrisolto, dove la gravità quantistica dovrebbe entrare in gioco per descrivere la natura dello spaziotempo.",
tools/data/loop_state.json:1904:          "answer": "Un buco nero carico (Reissner-Nordstrom, GxE) suggerisce che il \"vuoto\" quantistico (QxG) è tutt'altro che vuoto. La carica elettrica influenza la geometria dello spaziotempo.\n\nAll'orizzonte degli eventi, la gravità è intensa e gli effetti quantistici diventano importanti. La singolarità al centro potrebbe violare i limiti di densità di energia quantistici, rompendo la descrizione classica.\n\nLa relazione diventa dominante quando l'energia elettromagnetica è paragonabile all'energia gravitazionale, portando a possibili instabilità o creazioni di coppie.",
tools/data/loop_state.json:1946:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1950:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1951:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:1953:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica, dove la relatività generale cessa di valere. La gravità quantistica (QxG) dovrebbe risolvere questa singolarità, descrivendo il \"vuoto\" quantistico a scale di Planck (l_P). La radiazione di Hawking suggerisce che l'orizzonte non è completamente vuoto, ma emette particelle.",
tools/data/loop_state.json:1970:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1971:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:1973:          "answer": "L'orizzonte degli eventi (GxR) suggerisce che il \"vuoto\" quantistico (QxG) non è veramente vuoto.\nVicino all'orizzonte, le fluttuazioni quantistiche del vuoto possono produrre coppie di particelle virtuali.\nUna può cadere nell'orizzonte, l'altra sfuggire come radiazione di Hawking.\nQuesto implica che il vuoto quantistico influenza la geometria dello spaziotempo.\nMa la gravità quantistica (QxG) necessaria per descrivere questo completamente manca.",
tools/data/loop_state.json:1990:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:1991:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:1993:          "answer": "L'orizzonte degli eventi, in GxR, definisce un confine. In QxG, il \"vuoto\" è incerto.\n\nLa radiazione di Hawking (TxG) suggerisce che l'orizzonte non è vuoto, ma emette particelle. La relazione è governata dalla lunghezza di Planck l_P = sqrt(G*hbar/c^3) = 1.61e-35 m.\n\nl_P implica una discretizzazione dello spaziotempo, in contrasto con la descrizione continua di GxR. Misura la scala alla quale gli effetti quantistici della gravità diventano importanti.",
tools/data/loop_state.json:2010:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2011:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:2013:          "answer": "L'orizzonte degli eventi (GxR) definisce un confine oltre il quale l'informazione è inaccessibile. Nel tentativo di quantizzare la gravità (QxG), si ipotizza che l'area dell'orizzonte sia quantizzata in unità dell'area di Planck (l_P^2).\n\nAl confine, la descrizione classica (GxR) si rompe e la gravità quantistica dovrebbe subentrare. A scale di lunghezza paragonabili a l_P (circa 10^-35 metri), lo spaziotempo potrebbe non essere più liscio, ma \"schiumoso\" o discreto.",
tools/data/loop_state.json:2030:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2031:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:2033:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica (curvatura infinita). La gravità quantistica (QxG) dovrebbe risolvere la singolarità, ma non sappiamo come. L'area dell'orizzonte è legata all'entropia di Bekenstein-Hawking (A/4l_P^2), suggerendo una struttura microscopica dello spaziotempo. Cosa succede all'informazione che cade nell'orizzonte? Paradosso dell'informazione.",
tools/data/loop_state.json:2055:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2059:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2060:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:2079:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2080:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:2099:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2100:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:2119:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2120:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:2139:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2140:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:2142:          "answer": "L'onda EM, descritta da Maxwell (ExR), interagisce con il buco nero carico di Reissner-Nordstrom (GxE) tramite scattering e assorbimento.\n\n[VUOTO]: Non sappiamo la descrizione quantistica di questo processo. La teoria classica prevede che parte dell'onda venga retrodiffusa e parte assorbita, aumentando la carica del buco nero. Cosa succede a livello quantistico? Esiste un'emissione stimolata di carica? La gravità quantistica potrebbe svelare nuovi fenomeni.",
tools/data/loop_state.json:2171:          "answer": "Il buco nero di Reissner-Nordström (GxE) suggerisce che un 'vuoto' quantistico (QxG) attorno alla singolarità carica potrebbe polarizzarsi, creando coppie virtuali di particelle cariche. L'energia di queste fluttuazioni quantistiche contribuirebbe all'energia del punto zero, potenzialmente influenzando la geometria dello spaziotempo a scale di Planck. Non c'è ancora una teoria completa per descrivere questo.",
tools/data/loop_state.json:2191:          "answer": "Il buco nero di Reissner-Nordström (GxE) carica lo spaziotempo. Se evapora per radiazione di Hawking (TxG), l'informazione sulla carica deve essere codificata nella radiazione. \n\nLa gravità quantistica (QxG) dovrebbe spiegare come la carica influenza la struttura quantistica dello spaziotempo vicino alla singolarità, ma non esiste una teoria consolidata per descrivere questo processo. Il \"vuoto\" quantistico vicino al buco nero carico resta quindi una sfida aperta.",
tools/data/loop_state.json:2211:          "answer": "Il buco nero di Reissner-Nordström (GxE) impatta sul vuoto quantistico (QxG) tramite la sua singolarità.\n\nLa costante rilevante è la carica elementare *e*.\n\nUn buco nero carico estremo (Q=M) massimizza l'effetto della carica sulla geometria, potenzialmente rivelando effetti quantistici a energie comparabili alla massa del buco nero, influenzando la struttura del vuoto quantistico vicino alla singolarità. L'unità di misura è il Coulomb. Misura la carica elettrica.",
tools/data/loop_state.json:2231:          "answer": "Un buco nero carico (Reissner-Nordstrom) lega Gravitazione ed Elettromagnetismo. La sua singolarità nuda viola la censura cosmica, suggerendo che a distanze di Planck (QxG) la geometria classica fallisce. La metrica RN diverge quando la carica Q supera la massa M (unità di Planck), indicando che la gravità quantistica è necessaria per descrivere il \"vuoto\" in condizioni estreme.",
tools/data/loop_state.json:2273:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2277:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2278:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:2280:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica, dove la relatività generale fallisce. La gravità quantistica (QxG) dovrebbe descrivere il \"vuoto\" (spazio-tempo a scale di Planck) vicino alla singolarità, ma non abbiamo una teoria completa. L'area dell'orizzonte è quantizzata (ipotesi), legata all'entropia di Bekenstein-Hawking: A = l_P^2.",
tools/data/loop_state.json:2297:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2298:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:2300:          "answer": "L'orizzonte degli eventi (GxR) implica una densità di informazione massima (entropia di Bekenstein-Hawking). Vicino a Planck (QxG), ciò suggerisce che il \"vuoto\" non è vuoto, ma uno stato con massima informazione/grado di libertà, potenzialmente legato alla discretizzazione dello spaziotempo a livello di area di Planck.",
tools/data/loop_state.json:2317:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2318:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:2320:          "answer": "L'orizzonte degli eventi (GxR) implica una singolarità classica, dove la gravità è infinita. La gravità quantistica (QxG) tenta di risolvere questa singolarità introducendo un'area minima, l'area di Planck:\n\nl_P^2 = Għ/c³ ≈ 2.61e-70 m²\n\nQuesta costante (l_P^2) suggerisce che lo spaziotempo non è continuo ma discreto a scale di Planck, influenzando la natura del vuoto quantistico vicino all'orizzonte degli eventi. L'area di Planck misura l'area minima teorica che può esistere.",
tools/data/loop_state.json:2337:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2338:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:2340:          "answer": "L'orizzonte degli eventi, in GxR, definisce un confine oltre il quale l'informazione è inaccessibile. Estrapolando a QxG, suggerisce che il \"vuoto\" quantistico (fluttuazioni, entanglement) potrebbe essere intrinsecamente legato alla geometria dello spaziotempo a scale di Planck (l_P).\n\nLa relazione domina quando la curvatura dello spaziotempo raggiunge scale di Planck, ad esempio vicino a singolarità. Si rompe quando si tenta di descrivere l'interno dell'orizzonte con la sola QxG (manca una teoria completa). Al confine, si prevede la comparsa di effetti quantistici gravitazionali (non ancora compresi).",
tools/data/loop_state.json:2357:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2358:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:2360:          "answer": "L'orizzonte degli eventi (GxR) predice una singolarità classica. La gravità quantistica (QxG) dovrebbe risolverla, ma non sappiamo come. \nCosa succede alla geometria dello spaziotempo all'interno dell'orizzonte? Esiste una singolarità o la gravità quantistica la elimina? Qual è la natura microscopica dell'entropia di un buco nero? Sono tutte domande aperte.",
tools/data/loop_state.json:2382:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2386:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2387:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:2389:          "answer": "Un'onda EM (ExR) interagisce con un buco nero di Reissner-Nordström (GxE) attraverso la diffusione. La geometria dello spaziotempo del buco nero carico influenza la propagazione dell'onda EM, causando scattering e potenzialmente assorbimento. Le equazioni di Maxwell in uno sfondo curvo descrivono questo fenomeno.",
tools/data/loop_state.json:2406:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2407:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:2426:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2427:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:2446:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2447:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:2449:          "answer": "L'onda EM (ExR) interagisce col buco nero carico (GxE) via scattering e assorbimento.\n\nScala dominante: Lunghezza d'onda dell'onda EM ~ raggio di Schwarzschild del buco nero.\n\nRegime: Alte frequenze/basse energie -> scattering. Basse frequenze/alte energie -> assorbimento e possibile superradianza (se il buco nero ruota).\n\nRottura: Teoria classica valida finché la lunghezza d'onda >> lunghezza di Planck.\n\nConfine (orizzonte degli eventi): L'onda EM viene distorta e redshiftata infinitamente avvicinandosi all'orizzonte.",
tools/data/loop_state.json:2466:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2467:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:2469:          "answer": "ExR: L'onda EM trasporta energia e momento. GxE: Il buco nero di Reissner-Nordström ha massa e carica.\n\n[VUOTO]: Come l'onda EM interagisce con la geometria spazio-tempo distorta di un buco nero carico? La teoria classica prevede assorbimento o scattering. La gravità quantistica potrebbe rivelare nuovi effetti quantistici (es. creazione di coppie) vicino all'orizzonte degli eventi, modificando l'interazione.",
tools/data/loop_state.json:2498:          "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\nLa metrica RN ha due orizzonti: **r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴))**. Quando Q → Q_ext (estremo), r+ = r- e **T_H → 0** ma l'area resta finita: **A = 4πr+² ≠ 0**, quindi **S_BH = k_B·A/(4l_P²) ≠ 0**.\n\nQuesto è il punto critico per QxG:\n\n1. **Entropia a T=0**: viola il terzo principio classico. Un conteggio microscopico richiede stati quantogravitazionali — e string theory li conta esattamente (Strominger-Vafa 1996, per BH estremi in 5D: S_micro = S_BH).\n\n2. **La carica quantizza la geometria**: Q = ne (discreto)",
tools/data/loop_state.json:2538:          "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\n**Metrica RN:**\nds² = -(1 - r_s/r + r_Q²/r²)dt² + ... dove r_Q² = GQ²/(4πε₀c⁴)\n\n**La costante che governa:** r_Q²/l_P² = Q²/(4πε₀ℏc) = Q²·α/(e²) — rapporto tra scala elettromagnetica e scala di Planck. Adimensionale.\n\n**Cosa misura:** quante aree di Planck l_P² servono per contenere l'effetto della carica sulla geometria.\n\n**Perché parla al vuoto QxG:** quando r_Q → r_s/2, i due orizzonti degenerano (estremo: M² = GQ²/(4πε₀c⁴)). La singolarità diventa **timelike**, non spacelike — accessibile, non inevitabile. La termo",
tools/data/loop_state.json:2600:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2604:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2605:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:2607:          "answer": "**L'orizzonte è dove GxR forza la mano a QxG.**\n\nAll'orizzonte, la radiazione di Hawking ha λ ~ r_s. Ma vicino alla singolarità (r → 0), la curvatura diverge: R_μνρσ R^μνρσ ~ M²/r⁶ → ∞.\n\nQuando la curvatura raggiunge la scala di Planck — R ~ 1/l_P² = c³/(Gℏ) ~ 3.8×10⁶⁹ m⁻² — la relatività generale si rompe. Questo accade a r ~ l_P = 1.6×10⁻³⁵ m.\n\n**Il dato concreto:** l'entropia di Bekenstein-Hawking S_BH = A/(4l_P²) conta l'area in unità di Planck. L'orizzonte (GxR) ha bisogno di l_P² (QxG) per avere un numero di microstati. Senza quantizzazione dell'area, S_BH non ha denominatore.\n\n**Il vuot",
tools/data/loop_state.json:2624:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2625:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:2627:          "answer": "**L'orizzonte degli eventi è il principale indizio verso QxG.**\n\nAll'orizzonte, GxR produce l'entropia di Bekenstein-Hawking:\n\n$$S_{BH} = \\frac{k_B c^3 A}{4 G \\hbar}$$\n\nQuesta formula è l'**unico oggetto fisico noto che contiene simultaneamente G, c, ℏ e k_B** — tutte e 4 le costanti. L'area minima contribuente è ~l_P² = Gℏ/c³ ≈ 2.6×10⁻⁷⁰ m².\n\n**Cosa dice l'orizzonte su QxG:**\n- L'entropia scala con l'**area**, non il volume → i gradi di libertà gravitazionali sono bidimensionali (principio olografico)\n- L'area è quantizzata in unità di l_P² → lo spaziotempo ha una granulosità minima\n- La radi",
tools/data/loop_state.json:2644:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2645:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:2647:          "answer": "## GxR→QxG: L'orizzonte dice qualcosa sulla gravità quantistica?\n\n**Sì.** L'orizzonte è il punto dove GxR *esige* QxG ma non può raggiungerlo.\n\n### La costante che governa\n\nIl rapporto rilevante è:\n\n$$\\frac{A_H}{l_P^2} = \\frac{16\\pi G^2 M^2}{c^4} \\cdot \\frac{c^3}{G\\hbar} = \\frac{16\\pi G M^2}{\\hbar c}$$\n\nQuesta è **l'entropia di Bekenstein-Hawking** (in unità di $k_B$): $S_{BH} = k_B \\frac{A}{4 l_P^2}$\n\n- **Unità**: adimensionale (conta di gradi di libertà)\n- **Misura**: quanti \"pixel\" di area di Planck servono a coprire l'orizzonte\n\n### Cosa dice l'orizzonte sul vuoto QxG\n\n1. **L'area dell'ori",
tools/data/loop_state.json:2664:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2665:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:2667:          "answer": "## GxR→QxG: L'orizzonte degli eventi come sonda della gravità quantistica\n\n**Regime dominante:** L'orizzonte diventa rilevante per QxG quando il raggio di Schwarzschild raggiunge la scala di Planck:\n\n$$r_s = 2GM/c^2 \\sim l_P = \\sqrt{G\\hbar/c^3} \\implies M \\sim M_P = \\sqrt{\\hbar c/G} \\approx 2.18 \\times 10^{-8} \\text{ kg}$$\n\n**Cosa dice l'orizzonte sul vuoto QxG:**\n\n1. **Entropia di Bekenstein-Hawking**: $S_{BH} = k_B A / (4 l_P^2)$. L'entropia scala con l'**area**, non il volume. L'area minima è $l_P^2$. Questo dice: i gradi di libertà gravitazionali vivono su superfici, quantizzati in unità d",
tools/data/loop_state.json:2684:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2685:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:2687:          "answer": "## GxR→QxG: Cosa dice l'orizzonte degli eventi sulla gravità quantistica\n\nL'orizzonte degli eventi è il punto dove GxR **esige** QxG ma non può arrivarci.\n\n**Cosa sappiamo (semiclassico):**\n- Bekenstein-Hawking: S = A/(4·l_P²) — l'entropia scala con l'area, non il volume, in unità di area di Planck\n- Hawking: T_H = ℏc³/(8πGMk_B) — l'orizzonte emette termicamente, ma il calcolo usa QFT su sfondo curvo classico, non gravità quantistica\n\n**Cosa NON sappiamo:**\n\n1. **Paradosso dell'informazione**: l'unitarietà quantistica (S_von Neumann conservata) contraddice la termalità di Hawking (stato misto)",
tools/data/loop_state.json:2709:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2713:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2714:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:2733:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2734:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:2736:          "answer": "**Il ponte esiste: è la soluzione di Reissner-Nordström stessa.**\n\nLe equazioni di Einstein-Maxwell accoppiate:\n\n$$G_{\\mu\\nu} = 8\\pi G \\, T_{\\mu\\nu}^{EM}, \\quad \\nabla_\\mu F^{\\mu\\nu} = 0$$\n\ndove $T_{\\mu\\nu}^{EM} = F_{\\mu\\alpha}F_\\nu{}^\\alpha - \\frac{1}{4}g_{\\mu\\nu}F_{\\alpha\\beta}F^{\\alpha\\beta}$.\n\nLa metrica risultante ha due orizzonti:\n\n$$r_\\pm = \\frac{GM}{c^2} \\pm \\sqrt{\\left(\\frac{GM}{c^2}\\right)^2 - \\frac{GQ^2}{4\\pi\\epsilon_0 c^4}}$$\n\n**L'oggetto-ponte è il tensore $F_{\\mu\\nu}$ su spaziotempo curvo.** L'onda EM (ExR) diventa sorgente di curvatura (G): il campo elettromagnetico genera gravi",
tools/data/loop_state.json:2753:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2754:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:2756:          "answer": "## ExR→GxE: La costante che converte carica in geometria\n\nLa metrica di Reissner-Nordström ha due scale di lunghezza:\n\n- **r_s = 2GM/c²** (massa → geometria, ponte GxR)\n- **r_Q² = GQ²/(4πε₀c⁴)** (carica → geometria, ponte GxE)\n\nLa costante relazionale che governa è:\n\n**G/(4πε₀c⁴) ≈ 7.4 × 10⁻³⁴ m²/C²**\n\nUnità: **metri² per coulomb²**. Misura quanto una carica elettrica curva lo spaziotempo. È il \"tasso di conversione\" tra intensità di campo EM e curvatura geometrica.\n\nMaxwell entra nella metrica tramite il tensore energia-impulso T_μν = (1/μ₀)(F_μα F_ν^α − ¼g_μν F²), che alimenta le equazioni d",
tools/data/loop_state.json:2773:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2774:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:2776:          "answer": "## ExR→GxE: Maxwell sul buco nero carico\n\nLa metrica Reissner-Nordström ha due orizzonti:\n\n**r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴))**\n\ndove Q è la carica. Maxwell è sorgente: il tensore F_μν entra nel tensore energia-impulso T_μν che curva lo spaziotempo via Einstein. L'onda EM propagandosi vicino al buco nero carico subisce scattering dal potenziale effettivo della metrica RN.\n\n**Regime dominante:** quando Q² ≈ 4πε₀GM² (limite estremo, r+ = r-). Qui il campo EM contribuisce alla geometria tanto quanto la massa. La scala è r ~ GM/c².\n\n**Dove si rompe:** a r → 0 la densità di energia EM diverg",
tools/data/loop_state.json:2793:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:2794:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:2796:          "answer": "**ExR→GxE: Onde EM e buchi neri carichi — cosa NON sappiamo**\n\nLa metrica Reissner-Nordström ha due orizzonti: r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴)). Maxwell funziona su questo sfondo curvo (∇_μ F^μν = 0), ma i problemi aperti sono precisi:\n\n**1. Instabilità dell'orizzonte interno (Cauchy).** Perturbazioni EM (onde entranti) divergono su r₋. La congettura di strong cosmic censorship dice che r₋ è fisicamente inaccessibile — ma in de Sitter (Λ>0) ci sono controesempi (Cardoso et al. 2018). Non è risolto.\n\n**2. Limite estremo Q→Q_max.** Quando r₊→r₋ il buco nero è estremo, temperatura Hawking ",
tools/data/loop_state.json:2825:          "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\nLa metrica RN ha due orizzonti: **r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴))**\n\nQuando Q→Q_ext (estremalità): r+ = r- = GM/c², T_H → 0 ma l'area non va a zero:\n\n**A_ext = 4π(GM/c²)² ≠ 0**\n\nQuesto è il punto critico: un oggetto a T=0 con entropia residua S = A/(4l_P²) ≠ 0. È esattamente il dipolo TxQ (zero termico vs pieno quantistico) proiettato in regime gravitazionale.\n\nLa carica Q impone una scala: **r_Q² = GQ²/(4πε₀c⁴)**. Quando r_Q ~ l_P, le correzioni quantistiche alla geometria diventano inevitabili. La formula di ",
tools/data/loop_state.json:2845:          "answer": "## GxE → QxG: Il buco nero carico come sonda del vuoto quantogravitazionale\n\n**Reissner-Nordström** ha metrica con due orizzonti:\n\n$$r_\\pm = \\frac{GM}{c^2} \\pm \\sqrt{\\frac{G^2M^2}{c^4} - \\frac{GQ^2}{4\\pi\\epsilon_0 c^4}}$$\n\n**Caso estremo** ($r_+ = r_-$): quando $Q^2 = 4\\pi\\epsilon_0 GM^2$, la temperatura di Hawking → 0. Il buco nero smette di evaporare. Questo è il punto critico: la termodinamica semiclassica si spegne esattamente dove servirebbe la gravità quantistica per dire cosa succede dopo.\n\n**Cosa dice su QxG:**\n\n1. **La singolarità cambia struttura.** In Schwarzschild è spacelike (inev",
tools/data/loop_state.json:2885:          "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\n**La metrica RN** ha due orizzonti: r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴)). Quando Q → Q_ext (estremo), r+ → r- e T_H → 0. Il buco nero smette di evaporare ma ha **entropia finita** S = πr+²/(l_P²).\n\n**Dove diventa dominante:** quando r+ ≈ l_P = √(Għ/c³) ≈ 1.6e-35 m. Per un BN estremo, questo richiede M ≈ M_P ≈ 2.2e-8 kg e Q ≈ Q_P = √(4πε₀ħc) ≈ 1.9e-18 C (≈ 11.7e, fisicamente raggiungibile).\n\n**Dove si rompe:** la soluzione RN classica predice una **singolarità timelike nuda** (r=0 accessibile da geodetiche). La caric",
tools/data/loop_state.json:2927:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2931:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2932:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:2934:          "answer": "**L'orizzonte è dove GxR forza la mano a QxG.**\n\nAll'orizzonte, la radiazione di Hawking ha λ ~ r_s = 2GM/c². Ma quando M → M_P (massa di Planck), r_s → l_P = √(Għ/c³) ≈ 1.6×10⁻³⁵ m. A questa scala l'orizzonte ha area A ~ l_P² — esattamente l'area minima di QxG.\n\n**Il fatto concreto:** l'entropia di Bekenstein-Hawking S = k_B·A/(4l_P²) conta l'area in unità di l_P². L'orizzonte è una superficie classica (GxR) ma la sua entropia è quantizzata in pixel di area l_P² (QxG).\n\n**Il vincolo:** un buco nero evapora fino a M ~ M_P ≈ 2.2×10⁻⁸ kg. Lì r_s ~ l_P e la semiclassica diverge. Serve QxG per des",
tools/data/loop_state.json:2951:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2952:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:2954:          "answer": "**L'orizzonte dice qualcosa di preciso su QxG:**\n\nAll'orizzonte, l'entropia di Bekenstein-Hawking è:\n\n**S = A/(4·l_P²) = A·c³/(4·G·ℏ)**\n\nQuesta formula è il **ponte indiretto** GxR→QxG. Contiene sia G che ℏ, pur non venendo da una teoria quantistica della gravità. Il conteggio dei gradi di libertà scala con l'**area** (non il volume), in unità di l_P² = G·ℏ/c³ = 2.61×10⁻⁷⁰ m².\n\n**Cosa implica per il vuoto QxG:**\n- L'area minima l_P² emerge come **quanto di informazione** (1 bit = 1 unità di area di Planck)\n- L'orizzonte è una superficie dove GR diventa singolare (r = r_s) e la temperatura di H",
tools/data/loop_state.json:2971:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2972:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:2974:          "answer": "**L'orizzonte dice qualcosa di preciso su QxG:**\n\nAll'orizzonte, l'entropia di Bekenstein-Hawking è:\n\n**S_BH = k_B · A / (4 · l_P²)**\n\ndove l_P² = Gℏ/c³ = 2.61×10⁻⁷⁰ m² è esattamente la costante QxG.\n\n**La costante che governa GxR→QxG è:**\n\n**k_B/(4·l_P²) = 1.32×10⁹² J/(K·m²)**\n\nUnità: **entropia per unità di area** [J·K⁻¹·m⁻²]. Misura quanti gradi di libertà quantistici stanno in un'area gravitazionale.\n\n**Cosa dice l'orizzonte sul vuoto QxG:** l'area dell'orizzonte è un intero in unità di l_P². L'entropia conta pixel di area 4·l_P². Questo è il dato più solido che abbiamo: la gravità quantis",
tools/data/loop_state.json:2991:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:2992:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:2994:          "answer": "**GxR→QxG: L'orizzonte dice tutto sul vuoto QxG**\n\nL'orizzonte diventa dominante quando il raggio di Schwarzschild raggiunge la scala di Planck:\n\n$$r_s = 2GM/c^2 \\sim l_P = \\sqrt{G\\hbar/c^3} \\implies M \\sim M_P = \\sqrt{\\hbar c/G} \\approx 2.18 \\times 10^{-8} \\text{ kg}$$\n\n**Dove si rompe:** All'orizzonte, GR predice una superficie liscia (no-drama). Ma a scala $l_P$, l'area minima $A_{min} = l_P^2$ impone che l'orizzonte non può essere liscio — dev'essere discreto. L'entropia di Bekenstein-Hawking:\n\n$$S_{BH} = \\frac{k_B c^3 A}{4 G \\hbar} = \\frac{k_B A}{4 l_P^2}$$\n\nconta i gradi di libertà in un",
tools/data/loop_state.json:3011:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3012:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:3014:          "answer": "## GxR→QxG: L'orizzonte come sonda della gravità quantistica\n\nL'orizzonte degli eventi è il punto dove GR si rompe e QG dovrebbe subentrare. Ecco cosa **non** sappiamo:\n\n**1. Paradosso dell'informazione.** Hawking (1975): radiazione termica pura → unitarietà violata. Se ρ_out è termico, S(ρ_out) cresce monotonamente. Ma QM esige S_finale = S_iniziale. La Page curve (S che scende dopo t_Page ≈ t_evap/2) richiede correzioni non-perturbative che nessuno sa calcolare da principi primi.\n\n**2. Entropia di Bekenstein-Hawking.** S_BH = A/(4l_P²) conta gradi di libertà in unità di area di Planck. Ma gr",
tools/data/loop_state.json:3036:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3040:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3041:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:3060:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3061:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:3080:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3081:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:3083:          "answer": "## ExR→GxE: La costante che converte carica in geometria\n\nLa metrica di Reissner-Nordström ha:\n\n**f(r) = 1 − rₛ/r + rQ²/r²**\n\ndove **rQ² = GQ²/(4πε₀c⁴)** è il raggio di carica al quadrato.\n\nLa costante che governa la relazione è:\n\n**κ_EM = G/(4πε₀c⁴) = Gkₑ/c⁴ ≈ 7.4 × 10⁻³⁵ m²/C²**\n\n**Unità**: m²/C² (converte carica² in area, cioè in curvatura).\n\n**Cosa misura**: l'efficienza gravitazionale del campo elettromagnetico. Dice quanta curvatura dello spaziotempo produce una data carica. È il termine con cui il tensore energia-impulso EM (Tμν = FμαFνα − ¼gμνF²) entra nelle equazioni di Einstein: **Gμ",
tools/data/loop_state.json:3100:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3101:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:3103:          "answer": "## ExR→GxE: Maxwell incontra Reissner-Nordström\n\nLa metrica Reissner-Nordström risolve Einstein-Maxwell accoppiate:\n\n$$ds^2 = -\\left(1 - \\frac{r_s}{r} + \\frac{r_Q^2}{r^2}\\right)c^2 dt^2 + \\ldots$$\n\ndove $r_Q^2 = \\frac{Q^2 G}{4\\pi\\epsilon_0 c^4}$ è il raggio elettromagnetico. Il campo EM entra nel tensore energia-impulso $T_{\\mu\\nu} = \\frac{1}{\\mu_0}(F_{\\mu\\alpha}F_\\nu^{\\ \\alpha} - \\frac{1}{4}g_{\\mu\\nu}F^2)$ che curva lo spaziotempo.\n\n**Dove diventa dominante:** quando $r_Q \\sim r_s$, cioè $Q \\sim Q_{max} = \\frac{4\\pi\\epsilon_0 G M}{e}\\cdot e \\approx 2\\sqrt{\\pi\\epsilon_0 G}\\,M$. Per $M_\\odot$: ",
tools/data/loop_state.json:3120:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3121:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:3123:          "answer": "## ExR→GxE: Onde EM e buchi neri carichi — domande aperte\n\nLa metrica Reissner-Nordström ha due orizzonti:\n\n**r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴))**\n\nLe onde EM (soluzioni di Maxwell su questo sfondo curvo) sollevano problemi aperti precisi:\n\n**1. Instabilità dell'orizzonte interno (Cauchy).** Perturbazioni EM che cadono verso r₋ subiscono blueshift infinito. Mass-inflation: l'energia EM diverge → la massa di Misner-Sharp diverge → r₋ diventa singolarità debole (Poisson-Israel 1990). Domanda aperta: la singolarità è attraversabile o no? Dipende dalla regolarizzazione quantistica che non abb",
tools/data/loop_state.json:3152:          "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\nLa metrica RN ha due orizzonti: **r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴))**.\n\nQuando Q → Q_ext (estremalità), r+ → r- e **T_H → 0**. Il buco nero smette di evaporare ma conserva entropia S = πr+²/l_P². Questo è il punto critico:\n\n**Un oggetto a T=0 con entropia finita** — esattamente il problema del vuoto QxG.\n\nIl dato concreto: l'entropia estrema S_ext = πQ²G/(ℏc) mescola **e** (carica, E), **G** (gravità) e **ℏ** (quantistica). È una quantità Q×G×E che esiste già nelle equazioni classiche ma **richiede** il conteggio",
tools/data/loop_state.json:3254:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3258:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3259:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:3261:          "answer": "**L'orizzonte è esattamente dove GxR forza QxG a esistere.**\n\nAll'orizzonte, la radiazione di Hawking ha λ ~ r_s = 2GM/c². Ma quando M → M_P (massa di Planck), r_s → l_P = √(Għ/c³). A questa scala l'orizzonte stesso ha dimensione dell'area minima: A = 4πl_P².\n\n**La formula chiave è Bekenstein-Hawking:**\nS_BH = k_B·A/(4·l_P²)\n\nL'entropia conta in unità di l_P² — l'area di Planck che è la costante relazionale QxG. GxR produce un orizzonte con entropia, ma contarla richiede l_P², cioè richiede QxG.\n\n**Fenomeno concreto:** l'evaporazione finale. Quando M → M_P, T_H → E_P/k_B ≈ 1.4×10³² K. La semic",
tools/data/loop_state.json:3278:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3279:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:3281:          "answer": "**L'orizzonte degli eventi è il punto esatto dove GxR forza la domanda QxG.**\n\nAll'orizzonte, la radiazione di Hawking ha $T_H = \\hbar c^3/(8\\pi G M k_B)$ — contiene simultaneamente $\\hbar$, $G$, $c$, $k_B$. L'entropia di Bekenstein-Hawking:\n\n$$S_{BH} = \\frac{k_B c^3 A}{4 G \\hbar} = \\frac{A}{4 l_P^2}$$\n\nconta l'area in unità di $l_P^2 = G\\hbar/c^3$. Questo è il fatto: l'informazione gravitazionale scala con l'**area**, non il volume, e l'unità minima è esattamente l'area di Planck.\n\n**Oggetto connettore parziale:** l'orizzonte stesso. È l'unico oggetto fisico dove $G$ e $\\hbar$ compaiono insie",
tools/data/loop_state.json:3298:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3299:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:3301:          "answer": "## GxR→QxG: L'orizzonte come porta verso la gravità quantistica\n\n**L'orizzonte degli eventi dice che il VUOTO di QxG non può restare vuoto.**\n\nAll'orizzonte, la superficie è $A = 4\\pi r_s^2 = 16\\pi G^2 M^2/c^4$. Bekenstein-Hawking la quantizza:\n\n$$S_{BH} = \\frac{k_B \\, c^3}{4 \\, G \\, \\hbar} \\, A$$\n\nQuesto forza un'area minima per bit: $4 \\, l_P^2 = 4 \\, G\\hbar/c^3$.\n\n**Costante che governa la relazione:**\n\n$$\\frac{c^3}{G\\hbar} = \\frac{1}{l_P^2} \\approx 3.83 \\times 10^{69} \\; \\text{m}^{-2}$$\n\nUnità: **m⁻²** (densità areale). Misura quanti gradi di libertà per unità di area — il \"grano\" dello sp",
tools/data/loop_state.json:3318:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3319:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:3321:          "answer": "## GxR→QxG: L'orizzonte degli eventi al confine della gravità quantistica\n\n**Regime dominante:** L'orizzonte esiste per ogni massa M con raggio di Schwarzschild r_s = 2GM/c². La relazione GxR→QxG diventa dominante quando r_s ≈ l_P = 1.616×10⁻³⁵ m, cioè per M ≈ m_P = 2.176×10⁻⁸ kg (massa di Planck).\n\n**Dove si rompe:** L'orizzonte classico ha area A = 4πr_s². Bekenstein-Hawking dice S = A/(4l_P²). Quando A → l_P², S → 1/4: un solo bit. Sotto questa scala l'orizzonte non può codificare informazione — la descrizione semiclassica collassa.\n\n**Al confine:** Hawking (T_H = ℏc³/8πGMk_B) mostra che M↓",
tools/data/loop_state.json:3338:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3339:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:3341:          "answer": "**GxR→QxG: Cosa dice l'orizzonte degli eventi sulla gravità quantistica**\n\nL'orizzonte è il punto esatto dove GxR forza la domanda a QxG. Ecco cosa non sappiamo:\n\n**1. Entropia di Bekenstein-Hawking:**\nS = A/(4·l_P²) = k_B·c³·A/(4·G·ℏ)\n\nL'area dell'orizzonte conta in unità di l_P² — ma *cosa* sta contando? Se S conta microstati, servono gradi di libertà quantistici della geometria. GxR fornisce la formula, QxG deve fornire i microstati.\n\n**2. Paradosso dell'informazione:**\nL'evaporazione di Hawking (unitaria in Q, termale in GR) implica che l'orizzonte o distrugge informazione (viola Q) o la c",
tools/data/loop_state.json:3363:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3367:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3368:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:3387:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3388:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:3407:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3408:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:3410:          "answer": "## ExR→GxE: La costante che accoppia Maxwell alla geometria\n\nLa metrica di Reissner-Nordström contiene il termine:\n\n$$r_Q^2 = \\frac{G\\,Q^2}{4\\pi\\varepsilon_0\\,c^4}$$\n\nLa **costante relazionale** è:\n\n$$\\kappa_{EM \\to geom} = \\frac{G}{4\\pi\\varepsilon_0\\,c^4} \\approx 7.4 \\times 10^{-35} \\;\\text{m}^2/\\text{C}^2$$\n\n**Unità**: m²/C². Converte carica² in area — misura quanta curvatura geometrica (area di orizzonte) produce un dato campo EM.\n\n**Fisicamente**: il tensore energia-impulso di Maxwell $T_{\\mu\\nu} = \\frac{1}{\\mu_0}\\!\\left(F_{\\mu\\alpha}F_\\nu^{\\ \\alpha} - \\frac{1}{4}g_{\\mu\\nu}F^2\\right)$ entr",
tools/data/loop_state.json:3427:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3428:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:3430:          "answer": "## ExR→GxE: Maxwell incontra Reissner-Nordström\n\nLa metrica Reissner-Nordström risolve Einstein-Maxwell accoppiate:\n\n$$ds^2 = -\\left(1 - \\frac{r_s}{r} + \\frac{r_Q^2}{r^2}\\right)c^2 dt^2 + \\ldots$$\n\ndove $r_Q^2 = \\frac{Q^2 G}{4\\pi\\epsilon_0 c^4}$ è il raggio associato alla carica.\n\n**Dove diventa dominante:** quando $r_Q \\sim r_s$, cioè $Q \\sim Q_{crit} = 2\\sqrt{4\\pi\\epsilon_0 G}\\, M \\approx 1.7 \\times 10^{-18}\\, M$ C/kg. Per $M_\\odot$ serve $Q \\sim 3.4 \\times 10^{12}$ C — assurdo astrofisicamente (il plasma neutralizza), ma formalmente definito.\n\n**Due orizzonti:**\n$$r_\\pm = \\frac{r_s}{2} \\pm ",
tools/data/loop_state.json:3447:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3448:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:3450:          "answer": "## ExR→GxE: Onde EM e buchi neri carichi — cosa NON sappiamo\n\n**Cosa sappiamo**: La metrica Reissner-Nordström ha due orizzonti: r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴)). Maxwell funziona su questo sfondo curvo: ∇_μ F^μν = 0. Il campo è E = Q/(4πε₀r²) fuori dall'orizzonte, regolare.\n\n**Cosa NON sappiamo**:\n\n1. **Instabilità di Cauchy interno**: l'orizzonte interno r₋ è instabile (mass inflation, Poisson-Israel 1990). Un'onda EM che cade verso r₋ viene blueshiftata infinitamente. L'energia diverge: T_μν → ∞. La soluzione classica RN è **fisicamente irrealizzabile** dentro r₋. Cosa la sostituisce",
tools/data/loop_state.json:3479:          "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\nLa metrica RN ha due orizzonti:\n\n**r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴))**\n\ndove Q è la carica. Quando Q² → G M² (4πε₀), i due orizzonti coincidono: **buco nero estremo**, T_H = 0 esattamente.\n\nQuesto è il punto critico per QxG:\n\n1. **T=0 ma area finita**: A = 4π r²₊ ≠ 0, quindi S = A/(4l_P²) ≠ 0. Entropia residua senza temperatura — viola il terzo principio classico, esige una conta microstatistica quantogravitazionale. Strominger-Vafa (1996) la calcolarono in string theory: **prima conferma che QxG deve avere gradi",
tools/data/loop_state.json:3519:          "answer": "## Reissner-Nordström → QxG\n\nL'estremale RN con carica elementare *e* ha massa:\n\n**M_ext = e / √(4πε₀G) = √α · m_P ≈ 0.085 m_P**\n\nSotto la massa di Planck. Un buco nero carico con *una* carica elementare è già un oggetto sub-planckiano: non può esistere senza gravità quantistica. La RN forza il vuoto QxG.\n\n**Costante governante:**\n\n**e²G/(4πε₀c⁴) = α · l_P² ≈ 1.9 × 10⁻⁷² m²**\n\nUnità: **m²** (area). Combina α (QxE) con l_P² (QxG). È l'area elettromagnetica alla scala di Planck — la sezione d'urto dove la carica incontra la granularità quantistica dello spaziotempo.\n\nFisicamente: il rapporto M_e",
tools/data/loop_state.json:3581:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3585:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3586:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:3588:          "answer": "## GxR→QxG: L'orizzonte come sonda della gravità quantistica\n\nL'orizzonte degli eventi è il punto dove GR si rompe e **chiede** QG.\n\n**Entropia di Bekenstein-Hawking:**\nS = k_B·A/(4·l_P²)\n\nL'area dell'orizzonte A si conta in unità di l_P² = Għ/c³ = 2.61×10⁻⁷⁰ m². L'entropia è un **numero di aree di Planck**. Questo è il segnale più forte che lo spaziotempo sia discreto a scala l_P.\n\n**Il problema concreto:** GR dà la singolarità r→0 con curvatura R_μν→∞. QM dà il principio di indeterminazione Δx·Δp ≥ ħ/2. Sotto l_P non puoi localizzare senza creare un orizzonte (E > E_P = √(ħc⁵/G) ≈ 1.22×10¹⁹ ",
tools/data/loop_state.json:3605:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3606:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:3608:          "answer": "## GxR→QxG: L'orizzonte come porta verso il vuoto\n\nL'orizzonte degli eventi è il punto esatto dove GxR **esige** QxG ma non può produrlo.\n\n**Il problema concreto:** all'orizzonte, Hawking calcola:\n\n$$T_H = \\frac{\\hbar c^3}{8\\pi G M k_B}$$\n\nQuesta formula **usa già** tutte e tre le costanti (ħ, G, c) — è già quantogravitazionale. Ma è semiclassica: tratta la geometria come classica e i campi come quantistici. Non è self-consistente.\n\n**Cosa rivela l'orizzonte sul vuoto QxG:**\n\n1. **Entropia di Bekenstein-Hawking**: $S_{BH} = \\frac{k_B c^3 A}{4 G \\hbar}$ — l'entropia scala con l'**area**, non il",
tools/data/loop_state.json:3625:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3626:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:3628:          "answer": "## GxR→QxG: L'orizzonte come porta verso la gravità quantistica\n\n**L'orizzonte degli eventi dice esattamente dove serve QxG e perché non esiste ancora.**\n\nAll'orizzonte di Schwarzschild r_s = 2GM/c², la curvatura scala come R ~ c⁴/(G²M²). Quando M → M_P = √(ℏc/G) ≈ 2.18×10⁻⁸ kg, il raggio di Schwarzschild diventa r_s ~ l_P = √(Gℏ/c³) ≈ 1.62×10⁻³⁵ m. A questa scala la curvatura raggiunge R ~ 1/l_P² e il continuo si rompe.\n\n**La costante che governa la relazione:**\n\nL'area di Planck: l_P² = Gℏ/c³ = 2.61×10⁻⁷⁰ m²\n\nUnità: m². Misura l'area minima sotto la quale il concetto stesso di orizzonte perd",
tools/data/loop_state.json:3645:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3646:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:3648:          "answer": "## GxR→QxG: L'orizzonte come confine del vuoto\n\nL'orizzonte di Schwarzschild r_s = 2GM/c² è classico (GxR). Ma ha un'entropia:\n\n**S_BH = k_B · A/(4·l_P²)**\n\ndove A = 4π·r_s² e l_P² = Għ/c³. L'area si conta in unità di Planck. Questo è il messaggio: **l'orizzonte sa che QxG esiste** — quantizza l'area senza avere una teoria.\n\n**Regime dominante:** M → M_P = √(ħc/G) ≈ 2.18×10⁻⁸ kg. Quando r_s → l_P, l'orizzonte ha ~1 bit di entropia. La semiclassica (Hawking) diverge: T_H → T_P ≈ 1.4×10³² K.\n\n**Dove si rompe:** a r ~ l_P la curvatura R ~ 1/l_P² raggiunge la scala di Planck. La metrica classica p",
tools/data/loop_state.json:3665:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3666:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:3668:          "answer": "**GxR→QxG: Cosa dice l'orizzonte degli eventi sulla gravità quantistica**\n\nL'orizzonte è il punto dove GxR **esige** QxG ma non la possiede.\n\n**Cosa sappiamo (semiclassico):**\n- Bekenstein-Hawking: S = A/(4l_P²) — l'entropia scala con l'area, non il volume, in unità di l_P² = Għ/c³\n- Hawking: T_H = ħc³/(8πGMk_B) — l'orizzonte irradia. Serve Q+G+R+T insieme.\n\n**Cosa NON sappiamo:**\n\n1. **Paradosso dell'informazione**: unitarietà quantistica (info conservata) vs termalità di Hawking (info persa). Page time t_P ~ M³ segna dove il semiclassico crolla.\n\n2. **Microstati**: S_BH ~ 10⁷⁷ per M☉. Quali ",
tools/data/loop_state.json:3690:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3694:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3695:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:3714:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3715:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:3717:          "answer": "## ExR→GxE: Maxwell incontra Reissner-Nordström\n\n**L'oggetto che connette è il tensore elettromagnetico F_μν accoppiato alla curvatura tramite Einstein-Maxwell:**\n\nG_μν = 8πG/c⁴ · T_μν^(EM), dove T_μν^(EM) = F_μα F_ν^α − ¼g_μν F_αβ F^αβ\n\nLa metrica Reissner-Nordström emerge *esattamente* come soluzione di queste equazioni accoppiate:\n\nds² = −(1 − r_s/r + r_Q²/r²)c²dt² + ... dove **r_Q² = GQ²/(4πε₀c⁴)**\n\n**Due orizzonti**: r± = GM/c² ± √(G²M²/c⁴ − r_Q²). L'onda EM (ExR) determina se l'orizzonte esiste: quando r_Q = GM/c² (caso estremo), i due orizzonti coincidono.\n\n**Il ponte fisico**: un'onda ",
tools/data/loop_state.json:3734:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3735:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:3737:          "answer": "## ExR→GxE: La costante che governa è √(G/(4πε₀c⁴))\n\n**Costante**: √(G/(4πε₀c⁴)) ≈ **8.6×10⁻¹⁸ m/C**\n\n**Unità**: metri per coulomb. Converte carica elettrica in lunghezza gravitazionale — quanto spaziotempo curva un coulomb.\n\n**Cosa misura**: nella metrica Reissner-Nordström, la carica Q produce un raggio caratteristico:\n\nr_Q = Q · √(G/(4πε₀c⁴))\n\nda confrontare con r_g = GM/c². La condizione **estrema** (r_Q = r_g) dà il rapporto critico:\n\nQ/M = √(4πε₀G) ≈ 8.6×10⁻¹¹ C/kg\n\n**Fisica**: Maxwell su sfondo curvo dà ∇_μF^μν = 0, ma F_μν retroagisce via il tensore energia-impulso T_μν = (1/μ₀)(F_μα F",
tools/data/loop_state.json:3754:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3755:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:3757:          "answer": "## ExR→GxE: Maxwell su Reissner-Nordström — regime e rottura\n\n**La relazione:** Le equazioni di Maxwell in spaziotempo curvo governano il campo del buco nero carico. La metrica RN ha due orizzonti:\n\n$$r_\\pm = \\frac{GM}{c^2} \\pm \\sqrt{\\left(\\frac{GM}{c^2}\\right)^2 - \\frac{GQ^2}{4\\pi\\epsilon_0 c^4}}$$\n\n**Dove diventa dominante:** Quando Q si avvicina al limite estremo Q_max = M√(4πε₀G). Lì r₊ = r₋, l'orizzonte è singolo, e il campo EM domina la geometria — la curvatura è interamente elettromagnetica (tensore energia-impulso T_μν = F_μα F_ν^α - ¼g_μν F²).\n\n**Dove si rompe:**\n\n1. **r → 0:** Il cam",
tools/data/loop_state.json:3774:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:3775:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:3777:          "answer": "## ExR→GxE: Onde EM e buchi neri carichi — cosa NON sappiamo\n\n**Cosa sappiamo**: La metrica Reissner-Nordström ha due orizzonti: r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴)). Maxwell funziona su questo sfondo curvo: ∇_μ F^μν = 0. Le quasinormal modes (QNM) delle perturbazioni EM sono calcolabili.\n\n**Cosa NON sappiamo**:\n\n1. **Instabilità di Cauchy interno**: l'orizzonte interno r₋ è instabile (mass inflation). Le perturbazioni EM divergono lì — F_μν → ∞. La censura cosmica forte vale? Aperto.\n\n2. **Backreaction non-lineare**: quando il campo EM è abbastanza forte (Q → Q_max = M√(4πε₀G)), la geometr",
tools/data/loop_state.json:3806:          "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\nLa metrica RN ha due orizzonti:\n\n**r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴))**\n\nQuando Q → Q_ext (estremo): r+ = r- = GM/c², T_H → 0 ma l'area dell'orizzonte resta finita:\n\n**A_ext = 4π(GM/c²)² = 4πG²M²/c⁴**\n\nQuesto è il punto critico per QxG: un oggetto a T=0 con entropia non nulla S = A/(4l_P²). La termodinamica classica vieta S>0 a T=0. Serve una degenerazione microscopica — cioè **microstati quantistici della gravità**.\n\nStrominger-Vafa (1996) contarono esattamente questi microstati per BN estremi in string theory, o",
tools/data/loop_state.json:3826:          "answer": "## GxE → QxG: Il buco nero carico come sonda del vuoto quantogravitazionale\n\n**Reissner-Nordström** ha metrica con due orizzonti:\n\n$$r_{\\pm} = \\frac{GM}{c^2} \\pm \\sqrt{\\frac{G^2M^2}{c^4} - \\frac{GQ^2}{4\\pi\\epsilon_0 c^4}}$$\n\nQuando $Q \\to Q_{ext} = M\\sqrt{4\\pi\\epsilon_0 G}$, i due orizzonti coincidono: **buco nero estremo**, $T_H = 0$ ma $S = \\pi r_+^2 / l_P^2 \\neq 0$.\n\nQuesto è il punto critico per QxG:\n\n1. **Entropia senza temperatura** — stati microscopici contati da Strominger-Vafa (1996) in string theory: $S_{micro} = S_{BH}$ esattamente per il caso estremo carico. È l'unico risultato dov",
tools/data/loop_state.json:3846:          "answer": "## Reissner-Nordström → QxG\n\n**Costante ponte:** per carica elementare, $r_Q^2 / l_P^2 = \\alpha \\approx 1/137$\n\ndove $r_Q^2 = Ge^2/(4\\pi\\varepsilon_0 c^4)$ è il raggio di carica al quadrato e $l_P^2 = G\\hbar/c^3$ è l'area di Planck.\n\n**Significato:** la geometria elettromagnetica di una carica elementare è $\\alpha$ volte l'area di Planck — sub-Planckiana. Il contributo EM alla curvatura vive *sotto* la scala dove QxG dovrebbe attivarsi.\n\n**Il fatto critico:** il buco nero estremo ($r_+ = r_-$) ha $T_H = 0$ ma $S = \\pi r_+^2/l_P^2 \\neq 0$. Entropia senza temperatura: uno stato degenere che solo",
tools/data/loop_state.json:3886:          "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\n**Il fatto**: la metrica RN ha due orizzonti: r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴)). Quando Q² → G M² (4πε₀), gli orizzonti coincidono: buco nero estremo, T_H → 0 ma area A ≠ 0, quindi entropia S = A/(4l_P²) ≠ 0.\n\n**Perché è una sonda di QxG**:\n\n1. **Entropia residua a T=0** — viola il terzo principio. S_estremo = πQ²/(ε₀ ħc) è finito. Serve una teoria microscopica per contare gli stati. La string theory lo fa per BPS states (Strominger-Vafa 1996), ma solo per casi supersimmetrici.\n\n2. **La carica quantizza la geomet",
tools/data/loop_state.json:3908:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3912:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3913:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:3915:          "answer": "L'orizzonte degli eventi è il punto esatto dove GxR forza la mano a QxG.\n\n**Il fatto:** all'orizzonte, la radiazione di Hawking ha $T_H = \\hbar c^3/(8\\pi G M k_B)$. Questa formula contiene simultaneamente $\\hbar$, $G$, $c$, $k_B$ — è già un oggetto QxG mascherato da termodinamica.\n\n**L'entropia di Bekenstein-Hawking:**\n$$S_{BH} = \\frac{k_B c^3 A}{4 G \\hbar} = \\frac{A}{4 l_P^2}$$\n\nL'area dell'orizzonte si conta in unità di $l_P^2 = G\\hbar/c^3$. Ogni bit di informazione occupa un'area di Planck. Questo è il contenuto fisico: GxR produce una superficie ($A = 16\\pi G^2 M^2/c^4$), e quella superfic",
tools/data/loop_state.json:3932:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3933:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:3935:          "answer": "## GxR→QxG: L'orizzonte come porta verso la gravità quantistica\n\nL'orizzonte degli eventi è precisamente dove il vuoto QxG diventa un problema fisico concreto.\n\n**Il fatto:** Bekenstein-Hawking mostra che un buco nero ha entropia:\n\n$$S_{BH} = \\frac{k_B c^3 A}{4 G \\hbar} = \\frac{A}{4 l_P^2}$$\n\nL'area dell'orizzonte si misura in unità di $l_P^2 = G\\hbar/c^3$. Questo è l'unico risultato in fisica dove G, $\\hbar$, c, $k_B$ compaiono tutti insieme. L'orizzonte *forza* Q e G a parlare.\n\n**Perché il vuoto resta vuoto:** l'entropia scala con l'area, non col volume. Nessuna teoria locale con spaziotemp",
tools/data/loop_state.json:3952:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3953:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:3955:          "answer": "## GxR→QxG: L'orizzonte come porta verso la gravità quantistica\n\n**L'orizzonte degli eventi dice che il VUOTO QxG non può restare vuoto.**\n\nAll'orizzonte, la curvatura diverge come ~1/r³ vicino alla singolarità. Quando la scala di curvatura raggiunge la lunghezza di Planck:\n\n$$R_{\\mu\\nu\\rho\\sigma}R^{\\mu\\nu\\rho\\sigma} \\sim \\frac{1}{l_P^4}$$\n\nla descrizione classica GxR **si rompe**. L'orizzonte è il fenomeno che *esige* QxG.\n\n**La costante che governa la relazione:**\n\n$$\\frac{r_s}{l_P} = \\frac{2GM}{c^2} \\cdot \\frac{1}{\\sqrt{G\\hbar/c^3}} = 2M\\sqrt{\\frac{G}{\\hbar c}}= \\frac{2M}{m_P}$$\n\nÈ il **rap",
tools/data/loop_state.json:3972:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3973:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:3975:          "answer": "## GxR→QxG: L'orizzonte come confine della gravità quantistica\n\n**Regime dominante:** L'orizzonte diventa rilevante per QxG quando il raggio di Schwarzschild raggiunge la scala di Planck:\n\n$$r_s = 2GM/c^2 \\sim l_P = \\sqrt{G\\hbar/c^3} \\implies M \\sim M_P = \\sqrt{\\hbar c/G} \\approx 2.18 \\times 10^{-8} \\text{ kg}$$\n\n**Dove si rompe:** Per $M \\to M_P$, la curvatura all'orizzonte diventa $R \\sim 1/r_s^2 \\sim 1/l_P^2$. A questa scala la relatività generale predice una geometria liscia (GxR: spaziotempo continuo), ma l'area dell'orizzonte $A = 4\\pi r_s^2 \\sim l_P^2$ tocca l'area minima quantistica. I",
tools/data/loop_state.json:3992:          "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:3993:          "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:3995:          "answer": "**GxR→QxG: Cosa dice l'orizzonte degli eventi sulla gravità quantistica**\n\nL'orizzonte è il punto dove GxR *esige* QxG ma non lo ha.\n\n**Cosa sappiamo (semiclassico):**\n- Bekenstein-Hawking: S = A/(4·l_P²) — l'entropia scala con l'area in unità di Planck. L'area minima l_P² = Gℏ/c³ appare come \"pixel\" dell'orizzonte.\n- Hawking: T_H = ℏc³/(8πGMk_B) — effetto puramente semiclassico (QFT su sfondo curvo classico), non è vera QxG.\n\n**Cosa NON sappiamo (domande aperte reali):**\n\n1. **Paradosso dell'informazione**: unitarietà quantistica (S pura → S pura) vs termalità di Hawking (S pura → S mista). L",
tools/data/loop_state.json:4017:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:4021:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:4022:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_state.json:4041:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:4042:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_state.json:4044:          "answer": "**Il ponte esiste: è la soluzione di Reissner-Nordström stessa.**\n\nLe equazioni di Einstein-Maxwell accoppiate:\n\n$$G_{\\mu\\nu} = 8\\pi G \\, T_{\\mu\\nu}^{EM}, \\quad \\nabla_\\mu F^{\\mu\\nu} = 0$$\n\ndove $T_{\\mu\\nu}^{EM} = F_{\\mu\\alpha}F_\\nu^{\\ \\alpha} - \\frac{1}{4}g_{\\mu\\nu}F_{\\alpha\\beta}F^{\\alpha\\beta}$\n\nLa metrica risultante ha due orizzonti:\n\n$$r_\\pm = \\frac{GM}{c^2} \\pm \\sqrt{\\left(\\frac{GM}{c^2}\\right)^2 - \\frac{GQ^2}{4\\pi\\epsilon_0 c^4}}$$\n\n**L'oggetto-ponte è il tensore $F_{\\mu\\nu}$ su spaziotempo curvo.** L'onda EM (ExR) genera curvatura tramite $T_{\\mu\\nu}^{EM}$, e la curvatura modifica la p",
tools/data/loop_state.json:4061:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:4062:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_state.json:4064:          "answer": "## ExR→GxE: Maxwell incontra Reissner-Nordström\n\nLa costante che governa è:\n\n**κ_GE = G·k_e / c⁴ = G/(4πε₀c⁴) ≈ 7.42 × 10⁻³⁵ m²/C²**\n\nConverte **carica² in area geometrica**. È il rapporto che dice quanta curvatura dello spaziotempo produce un Coulomb.\n\nNella metrica Reissner-Nordström appare come:\n\n**r_Q² = κ_GE · Q²**\n\ndove r_Q è il raggio caratterico. L'orizzonte esiste se r_s ≥ 2r_Q, cioè:\n\n**GM/c² ≥ √(κ_GE)·Q**\n\nMaxwell fornisce il tensore energia-impulso T_μν = (1/μ₀)(F_μα F_ν^α − ¼g_μν F²) che entra nelle equazioni di Einstein via 8πG/c⁴. Un'onda EM che cade su un BH carico si accoppia ",
tools/data/loop_state.json:4081:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:4082:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_state.json:4084:          "answer": "## ExR→GxE: Onda EM su buco nero carico — regime e rottura\n\nLa metrica Reissner-Nordström ha due orizzonti: r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴)).\n\n**Regime dominante**: la carica domina sulla gravità quando Q si avvicina al limite estremo Q_max = M√(4πε₀G). Lì r+ = r- e la temperatura di Hawking → 0.\n\n**Cosa dice Maxwell**: le onde EM su sfondo RN obbediscono all'equazione di Regge-Wheeler modificata con potenziale effettivo V(r) che include il termine coulombiano Q²/r⁴. Questo produce:\n\n1. **Scattering selettivo**: onde con ω < ω_c (frequenza critica ∝ 1/r+) vengono riflesse — il buco nero",
tools/data/loop_state.json:4101:          "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:4102:          "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_state.json:4104:          "answer": "## ExR→GxE: Onde EM e buchi neri carichi — cosa NON sappiamo\n\nLe equazioni di Maxwell su Reissner-Nordström (RN) sono ben poste classicamente: il tensore $F_{\\mu\\nu}$ si accoppia alla metrica $ds^2 = -(1 - r_s/r + r_Q^2/r^2)dt^2 + \\ldots$ dove $r_Q^2 = GQ^2/(4\\pi\\epsilon_0 c^4)$.\n\n**Domande aperte reali:**\n\n1. **Stabilità dell'orizzonte interno (Cauchy)**: RN ha due orizzonti $r_\\pm = GM/c^2 \\pm \\sqrt{(GM/c^2)^2 - r_Q^2}$. La congettura di Strong Cosmic Censorship dice che l'orizzonte interno è instabile sotto perturbazioni EM — ma in de Sitter ($\\Lambda > 0$) Cardoso et al. (2018) hanno mostr",
tools/data/loop_state.json:4170:      "topic": "Come coesistono continuo e discreto — il ponte tra Quantistica e Gravitazione non esiste",
tools/data/loop_state.json:4184:      "topic": "Il campo elettrico e magnetico sono lo stesso fenomeno visto da frame diversi — il ponte è il cambio di osservatore",
tools/data/loop_state.json:4198:      "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_state.json:4205:      "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'?",
tools/data/loop_state.json:4240:      "topic": "ERRORE: L'affermazione è imprecisa.\n\nRN (GxExR) carica lo spaziotempo tramite l'energia  — claim originale: Il buco nero di Reissner-Nordstrom (GxE) carica lo spaziotempo, modificando la m",
tools/data/loop_state.json:4261:      "topic": "ERRORE: **IMPRECISA.** Le formule sono corrette, ma la narrativa sbaglia il soggetto. L' — claim originale: **L'orizzonte è dove GxR forza la mano a QxG.**\n\nAll'orizzonte, la radiazione di",
tools/data/loop_state.json:4289:      "topic": "ERRORE: **IMPRECISA.**\n\nIl ragionamento qualitativo è corretto ma la formula finale è sb — claim originale: **L'orizzonte è esattamente dove GxR forza QxG a esistere.**\n\nAll'orizzonte, la ",
tools/data/conoscenza_teorie.json:23:        "TxR": {
tools/data/conoscenza_teorie.json:38:        "QxR": {
tools/data/conoscenza_teorie.json:48:        "GxR": {
tools/data/conoscenza_teorie.json:53:        "ExR": {
tools/data/conoscenza_teorie.json:64:          "d": "vuoto (0K = nessuna energia)",
tools/data/conoscenza_teorie.json:66:          "nota": "la termodinamica dice zero=vuoto, la quantistica dice zero=pieno"
tools/data/conoscenza_teorie.json:76:        "TxR": {
tools/data/conoscenza_teorie.json:89:        "QxR": {
tools/data/conoscenza_teorie.json:95:          "nd": "carico-piatto (carica nel vuoto)"
tools/data/conoscenza_teorie.json:97:        "GxR": {
tools/data/conoscenza_teorie.json:101:        "ExR": {
tools/data/conoscenza_teorie.json:119:    "ponte": {
tools/data/conoscenza_teorie.json:125:        "TxR": "gas relativistico",
tools/data/conoscenza_teorie.json:128:        "QxR": "equazione di Dirac",
tools/data/conoscenza_teorie.json:130:        "GxR": "orizzonte degli eventi",
tools/data/conoscenza_teorie.json:131:        "ExR": "onda EM (Maxwell)"
tools/data/conoscenza_teorie.json:151:      "coppia": "ExR",
tools/data/conoscenza_teorie.json:161:      "coppia": "GxR",
tools/data/conoscenza_teorie.json:176:      "coppia": "QxR",
tools/data/conoscenza_teorie.json:192:      "domanda": "Come coesistono vuoto e pieno?",
tools/data/conoscenza_teorie.json:196:      "coppia": "TxR",
tools/data/conoscenza_teorie.json:208:    "vuoto_come_teoria": {
tools/data/conoscenza_teorie.json:209:      "descrizione": "Il vuoto QxG trattato come teoria produce: ponte con T = entropia di Bekenstein-Hawking. Ponte con se stessa = autoriferimento f(f(x)).",
tools/data/conoscenza_teorie.json:215:    "ExR": {
tools/data/conoscenza_teorie.json:241:    "GxR": {
tools/data/conoscenza_teorie.json:267:    "QxR": {
tools/data/conoscenza_teorie.json:395:      "ponte": "forma simplettica = entropia (invertibili)",
tools/data/conoscenza_teorie.json:403:      "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/conoscenza_teorie.json:411:      "ponte": "tensore EM dentro la forma simplettica",
tools/data/conoscenza_teorie.json:418:    "ExR": {
tools/data/conoscenza_teorie.json:419:      "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/conoscenza_teorie.json:420:      "dipolo": "il 'ponte' non è l'onda EM, è il cambio di osservatore",
tools/data/conoscenza_teorie.json:427:      "ponte": "[da fonte: Equivalence between geometrical structur]",
tools/data/conoscenza_teorie.json:435:      "ponte": "[da fonte: Equivalence between geometrical structur]",
tools/data/conoscenza_teorie.json:443:      "ponte": "[da fonte: Equivalence between geometrical structur]",
tools/data/conoscenza_teorie.json:450:    "QxR": {
tools/data/conoscenza_teorie.json:451:      "ponte": "[da fonte: What is a Laplace Transform - visual exp]",
tools/data/conoscenza_teorie.json:459:      "ponte": "[da fonte: What is a Laplace Transform - visual exp]",
tools/data/incrocio_20260405_0730.json:8:  "consecutio_verso_vuoto": 6,
tools/data/incrocio_20260507_2120.json:8:  "consecutio_verso_vuoto": 6,
tools/data/dinamiche.json:21:    "ponte_autologico": {
tools/data/incrocio_20260402_0808.json:8:  "consecutio_verso_vuoto": 7,
tools/data/incrocio_20260403_0330.json:8:  "consecutio_verso_vuoto": 11,
tools/data/evolution/evolution_20260507_1957.md:1:Ho aggiornato [evolution_report.md](/opt/MM_D-ND/tools/evolution_report.md) con un report breve da Affinatore: osserva il passo, segnala la sola latenza strutturale sulla traccia provider-agnostica, colloca il nodo regressivo nel deposito del cambio di denominatore, e chiude con una consecutio verso TQGE+R.
tools/data/evolution/evolution_20260507_1804.md:3:Il report osserva il passo come traiettoria: dal ponte QG isolato alla faccia QGE come denominatore triadico, con attrito minimo sul null generico e consecutio orientata a `blank + gauge + source`.
tools/data/knowledge_state_pre_fix.json:248:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state_pre_fix.json:264:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state_pre_fix.json:280:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state_pre_fix.json:296:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state_pre_fix.json:312:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/knowledge_state_pre_fix.json:328:          "input_claim": "phi come modulazione quasiperiodica genera spettro critico — e' questo il ponte con zeta?",
tools/data/reports/evolution_20260418_0330.md:7:L'agente ha raccolto la consecutio del run precedente (una domanda precisa: "il crossover a lag 6 e' Z/6Z o no?") e ha costruito tre test discriminanti — residui ACF, re-iniezione del trend, surrogati fattoriali. Ha falsificato l'ipotesi Z/6Z in modo netto e con evidenza multipla. Il passo e' una buona istanza di A4: la qualita' della domanda (ereditata dalla consecutio) ha determinato la qualita' dell'inversione. Non ha esplorato a vuoto — sapeva cosa cercare e cosa avrebbe significato ogni risultato.
tools/data/loop_insights.json:6:    "answer": "## Reissner-Nordström: cosa connette davvero\n\nRN **non** è QxG. Non contiene ℏ. È interamente classica.\n\n**Metrica**: `ds² = (1 - rₛ/r + rQ²/r²)c²dt²  - ...`\n\ndove:\n- `rₛ = 2GM/c²` → costanti G, c → **GxR**\n- `rQ² = GQ²/(4πε₀c⁴)` → costanti G, e, c, ε₀ → **GxExR**\n\n**RN è il ponte GxE dentro la corn",
tools/data/loop_insights.json:13:    "answer": "## Reissner-Nordström NON è un ponte QxG\n\n**RN è classica.** La metrica:\n\n`ds² = (1 - rₛ/r + rQ²/r²)c²dt² - ...`\n\ncon `rQ² = Gq²/(4πε₀c⁴)`\n\nCostanti presenti: **G, c, e, ε₀**. Costante assente: **ℏ**.\n\nRN è un ponte **GxExR** — gravità + elettromagnetismo + relatività. Nessun ingrediente quantistico",
tools/data/loop_insights.json:34:    "answer": "## Reissner-Nordström: cosa NON sappiamo\n\n**L'errore nel claim:** RN è soluzione di Einstein-Maxwell — classica G+E+R. Nessun ħ nella metrica. Non è un ponte QxG.\n\n**Però:** se Q è quantizzato (Q=ne), allora:\n\nrQ² = Gn²e²/(4πε₀c⁴) = n²·α·ℏG/c³ = **n²·α·lP²**\n\nOra ħ appare — ma solo perché e² = 4πε₀·",
tools/data/loop_insights.json:40:    "question": "ERRORE: **IMPRECISA.**\n\nIl ragionamento qualitativo è corretto ma la formula finale è sb — claim originale: **L'orizzonte è esattamente dove GxR forza QxG a esistere.**\n\nAll'orizzonte, la  — quale rel",
tools/data/loop_insights.json:41:    "answer": "**La relazione concreta: l'entropia di Bekenstein-Hawking.**\n\nAll'orizzonte (oggetto GxR, r_s = 2GM/c²), l'entropia è:\n\n**S = k_B · A / (4 l_P²)**\n\ndove A = 4πr_s² e l_P² = Għ/c³ (l'unità QxG).\n\nEsplicitamente: **S = 4π k_B G M² / (ħc)**\n\nIl punto: la GR classica produce l'orizzonte. Ma l'orizzonte ",
tools/data/loop_insights.json:47:    "question": "ERRORE: **IMPRECISA.**\n\nIl ragionamento qualitativo è corretto ma la formula finale è sb — claim originale: **L'orizzonte è esattamente dove GxR forza QxG a esistere.**\n\nAll'orizzonte, la  — esiste un",
tools/data/loop_insights.json:48:    "answer": "## Correzione: l'orizzonte NON forza QxG a esistere\n\n**Il claim è sbagliato per M >> M_Planck.** La curvatura all'orizzonte (Kretschner):\n\nK(r_s) = 3c⁸/(4G⁴M⁴)\n\nPer M solare: K ~ 10⁻²⁶ m⁻⁴. Liscissimo. GR classica basta. QxG non serve.\n\n**Dove GxR forza QxG:** alla **singolarità** (r→0, K→∞), oppure",
tools/data/loop_insights.json:54:    "question": "ERRORE: **IMPRECISA.**\n\nIl ragionamento qualitativo è corretto ma la formula finale è sb — claim originale: **L'orizzonte è esattamente dove GxR forza QxG a esistere.**\n\nAll'orizzonte, la  — quale cos",
tools/data/loop_insights.json:55:    "answer": "## Correzione: GxR non \"forza\" QxG all'orizzonte\n\n**L'errore**: l'orizzonte è un oggetto classico GxR. Per un buco nero stellare (M~10M☉), la curvatura all'orizzonte è *debole* — un osservatore in caduta libera non nota nulla. QxG diventa necessaria alla **singolarità** (curvatura ~ 1/l_P²), non all",
tools/data/loop_insights.json:61:    "question": "ERRORE: **IMPRECISA.**\n\nIl ragionamento qualitativo è corretto ma la formula finale è sb — claim originale: **L'orizzonte è esattamente dove GxR forza QxG a esistere.**\n\nAll'orizzonte, la  — a quale s",
tools/data/loop_insights.json:68:    "question": "ERRORE: **IMPRECISA.**\n\nIl ragionamento qualitativo è corretto ma la formula finale è sb — claim originale: **L'orizzonte è esattamente dove GxR forza QxG a esistere.**\n\nAll'orizzonte, la  — cosa NON ",
tools/data/loop_insights.json:69:    "answer": "## Cosa NON sappiamo su GxR → QxG\n\n**Il claim è impreciso perché:** all'orizzonte la curvatura scala come R ~ 1/(GM/c²)² — per BH astrofisici è **piccola**, non planckiana. QxG è forzata alla **singolarità** (R ~ 1/l_P²), non all'orizzonte.\n\nMa l'orizzonte forza QxG **indirettamente**. Domande apert",
tools/data/loop_insights.json:76:    "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\nLa metrica RN ha due orizzonti:\n\n**r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴))**\n\ndove Q è la carica. Quando Q² → G M² (4πε₀), i due orizzonti coincidono: **buco nero estremo**, T_H = 0 esattamente.\n\nQuesto è il punto critico pe",
tools/data/loop_insights.json:108:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:110:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_insights.json:111:    "answer": "## GxR→QxG: L'orizzonte come sonda della gravità quantistica\n\nL'orizzonte degli eventi è il punto dove GR si rompe e **chiede** QG.\n\n**Entropia di Bekenstein-Hawking:**\nS = k_B·A/(4·l_P²)\n\nL'area dell'orizzonte A si conta in unità di l_P² = Għ/c³ = 2.61×10⁻⁷⁰ m². L'entropia è un **numero di aree di ",
tools/data/loop_insights.json:115:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:117:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_insights.json:118:    "answer": "## GxR→QxG: L'orizzonte come porta verso il vuoto\n\nL'orizzonte degli eventi è il punto esatto dove GxR **esige** QxG ma non può produrlo.\n\n**Il problema concreto:** all'orizzonte, Hawking calcola:\n\n$$T_H = \\frac{\\hbar c^3}{8\\pi G M k_B}$$\n\nQuesta formula **usa già** tutte e tre le costanti (ħ, G, c)",
tools/data/loop_insights.json:122:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:124:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_insights.json:125:    "answer": "## GxR→QxG: L'orizzonte come porta verso la gravità quantistica\n\n**L'orizzonte degli eventi dice esattamente dove serve QxG e perché non esiste ancora.**\n\nAll'orizzonte di Schwarzschild r_s = 2GM/c², la curvatura scala come R ~ c⁴/(G²M²). Quando M → M_P = √(ℏc/G) ≈ 2.18×10⁻⁸ kg, il raggio di Schwarz",
tools/data/loop_insights.json:129:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:131:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_insights.json:132:    "answer": "## GxR→QxG: L'orizzonte come confine del vuoto\n\nL'orizzonte di Schwarzschild r_s = 2GM/c² è classico (GxR). Ma ha un'entropia:\n\n**S_BH = k_B · A/(4·l_P²)**\n\ndove A = 4π·r_s² e l_P² = Għ/c³. L'area si conta in unità di Planck. Questo è il messaggio: **l'orizzonte sa che QxG esiste** — quantizza l'are",
tools/data/loop_insights.json:136:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:138:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_insights.json:139:    "answer": "**GxR→QxG: Cosa dice l'orizzonte degli eventi sulla gravità quantistica**\n\nL'orizzonte è il punto dove GxR **esige** QxG ma non la possiede.\n\n**Cosa sappiamo (semiclassico):**\n- Bekenstein-Hawking: S = A/(4l_P²) — l'entropia scala con l'area, non il volume, in unità di l_P² = Għ/c³\n- Hawking: T_H = ",
tools/data/loop_insights.json:143:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:145:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_insights.json:150:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:152:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_insights.json:153:    "answer": "## ExR→GxE: Maxwell incontra Reissner-Nordström\n\n**L'oggetto che connette è il tensore elettromagnetico F_μν accoppiato alla curvatura tramite Einstein-Maxwell:**\n\nG_μν = 8πG/c⁴ · T_μν^(EM), dove T_μν^(EM) = F_μα F_ν^α − ¼g_μν F_αβ F^αβ\n\nLa metrica Reissner-Nordström emerge *esattamente* come soluzi",
tools/data/loop_insights.json:157:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:159:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_insights.json:160:    "answer": "## ExR→GxE: La costante che governa è √(G/(4πε₀c⁴))\n\n**Costante**: √(G/(4πε₀c⁴)) ≈ **8.6×10⁻¹⁸ m/C**\n\n**Unità**: metri per coulomb. Converte carica elettrica in lunghezza gravitazionale — quanto spaziotempo curva un coulomb.\n\n**Cosa misura**: nella metrica Reissner-Nordström, la carica Q produce un ",
tools/data/loop_insights.json:164:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:166:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_insights.json:167:    "answer": "## ExR→GxE: Maxwell su Reissner-Nordström — regime e rottura\n\n**La relazione:** Le equazioni di Maxwell in spaziotempo curvo governano il campo del buco nero carico. La metrica RN ha due orizzonti:\n\n$$r_\\pm = \\frac{GM}{c^2} \\pm \\sqrt{\\left(\\frac{GM}{c^2}\\right)^2 - \\frac{GQ^2}{4\\pi\\epsilon_0 c^4}}$$",
tools/data/loop_insights.json:171:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:173:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_insights.json:174:    "answer": "## ExR→GxE: Onde EM e buchi neri carichi — cosa NON sappiamo\n\n**Cosa sappiamo**: La metrica Reissner-Nordström ha due orizzonti: r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴)). Maxwell funziona su questo sfondo curvo: ∇_μ F^μν = 0. Le quasinormal modes (QNM) delle perturbazioni EM sono calcolabili.\n\n**Cosa",
tools/data/loop_insights.json:188:    "answer": "## GxE: il ponte è classico, non quantistico\n\nIl buco nero carico (Reissner-Nordström) è il ponte **GxE**, non un ponte verso QxG.\n\n**La metrica RN è soluzione delle equazioni Einstein-Maxwell** — puramente classica. Il termine di carica:\n\n$$r_Q^2 = \\frac{GQ^2}{4\\pi\\varepsilon_0 c^4}$$\n\ncontiene G, ",
tools/data/loop_insights.json:251:    "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\nLa metrica RN ha due orizzonti:\n\n**r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴))**\n\nQuando Q → Q_ext (estremo): r+ = r- = GM/c², T_H → 0 ma l'area dell'orizzonte resta finita:\n\n**A_ext = 4π(GM/c²)² = 4πG²M²/c⁴**\n\nQuesto è il punto",
tools/data/loop_insights.json:258:    "answer": "## GxE → QxG: Il buco nero carico come sonda del vuoto quantogravitazionale\n\n**Reissner-Nordström** ha metrica con due orizzonti:\n\n$$r_{\\pm} = \\frac{GM}{c^2} \\pm \\sqrt{\\frac{G^2M^2}{c^4} - \\frac{GQ^2}{4\\pi\\epsilon_0 c^4}}$$\n\nQuando $Q \\to Q_{ext} = M\\sqrt{4\\pi\\epsilon_0 G}$, i due orizzonti coincido",
tools/data/loop_insights.json:265:    "answer": "## Reissner-Nordström → QxG\n\n**Costante ponte:** per carica elementare, $r_Q^2 / l_P^2 = \\alpha \\approx 1/137$\n\ndove $r_Q^2 = Ge^2/(4\\pi\\varepsilon_0 c^4)$ è il raggio di carica al quadrato e $l_P^2 = G\\hbar/c^3$ è l'area di Planck.\n\n**Significato:** la geometria elettromagnetica di una carica eleme",
tools/data/loop_insights.json:279:    "answer": "## GxE → QxG: Reissner-Nordström come sonda del vuoto quantogravitazionale\n\n**Il fatto**: la metrica RN ha due orizzonti: r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴)). Quando Q² → G M² (4πε₀), gli orizzonti coincidono: buco nero estremo, T_H → 0 ma area A ≠ 0, quindi entropia S = A/(4l_P²) ≠ 0.\n\n**Perché",
tools/data/loop_insights.json:283:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:285:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_insights.json:286:    "answer": "L'orizzonte degli eventi è il punto esatto dove GxR forza la mano a QxG.\n\n**Il fatto:** all'orizzonte, la radiazione di Hawking ha $T_H = \\hbar c^3/(8\\pi G M k_B)$. Questa formula contiene simultaneamente $\\hbar$, $G$, $c$, $k_B$ — è già un oggetto QxG mascherato da termodinamica.\n\n**L'entropia di B",
tools/data/loop_insights.json:290:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:292:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_insights.json:293:    "answer": "## GxR→QxG: L'orizzonte come porta verso la gravità quantistica\n\nL'orizzonte degli eventi è precisamente dove il vuoto QxG diventa un problema fisico concreto.\n\n**Il fatto:** Bekenstein-Hawking mostra che un buco nero ha entropia:\n\n$$S_{BH} = \\frac{k_B c^3 A}{4 G \\hbar} = \\frac{A}{4 l_P^2}$$\n\nL'area",
tools/data/loop_insights.json:297:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:299:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_insights.json:300:    "answer": "## GxR→QxG: L'orizzonte come porta verso la gravità quantistica\n\n**L'orizzonte degli eventi dice che il VUOTO QxG non può restare vuoto.**\n\nAll'orizzonte, la curvatura diverge come ~1/r³ vicino alla singolarità. Quando la scala di curvatura raggiunge la lunghezza di Planck:\n\n$$R_{\\mu\\nu\\rho\\sigma}R^",
tools/data/loop_insights.json:304:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:306:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_insights.json:307:    "answer": "## GxR→QxG: L'orizzonte come confine della gravità quantistica\n\n**Regime dominante:** L'orizzonte diventa rilevante per QxG quando il raggio di Schwarzschild raggiunge la scala di Planck:\n\n$$r_s = 2GM/c^2 \\sim l_P = \\sqrt{G\\hbar/c^3} \\implies M \\sim M_P = \\sqrt{\\hbar c/G} \\approx 2.18 \\times 10^{-8}",
tools/data/loop_insights.json:311:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/loop_insights.json:313:    "question": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_insights.json:314:    "answer": "**GxR→QxG: Cosa dice l'orizzonte degli eventi sulla gravità quantistica**\n\nL'orizzonte è il punto dove GxR *esige* QxG ma non lo ha.\n\n**Cosa sappiamo (semiclassico):**\n- Bekenstein-Hawking: S = A/(4·l_P²) — l'entropia scala con l'area in unità di Planck. L'area minima l_P² = Gℏ/c³ appare come \"pixel",
tools/data/loop_insights.json:318:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:320:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale relazione fisica concreta esiste qui? Formule, costanti, fenomeni osservabili.",
tools/data/loop_insights.json:325:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:327:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — esiste un oggetto fisico o matematico che connette le due teorie coinvolte? Se si, quale? Se no, perche?",
tools/data/loop_insights.json:328:    "answer": "**Il ponte esiste: è la soluzione di Reissner-Nordström stessa.**\n\nLe equazioni di Einstein-Maxwell accoppiate:\n\n$$G_{\\mu\\nu} = 8\\pi G \\, T_{\\mu\\nu}^{EM}, \\quad \\nabla_\\mu F^{\\mu\\nu} = 0$$\n\ndove $T_{\\mu\\nu}^{EM} = F_{\\mu\\alpha}F_\\nu^{\\ \\alpha} - \\frac{1}{4}g_{\\mu\\nu}F_{\\alpha\\beta}F^{\\alpha\\beta}$\n\n",
tools/data/loop_insights.json:332:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:334:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — quale costante fisica o rapporto di costanti governa questa relazione? Che unita di misura ha? Cosa misura?",
tools/data/loop_insights.json:335:    "answer": "## ExR→GxE: Maxwell incontra Reissner-Nordström\n\nLa costante che governa è:\n\n**κ_GE = G·k_e / c⁴ = G/(4πε₀c⁴) ≈ 7.42 × 10⁻³⁵ m²/C²**\n\nConverte **carica² in area geometrica**. È il rapporto che dice quanta curvatura dello spaziotempo produce un Coulomb.\n\nNella metrica Reissner-Nordström appare come:\n",
tools/data/loop_insights.json:339:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:341:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — a quale scala o regime questa relazione diventa dominante? Dove si rompe? Cosa succede al confine?",
tools/data/loop_insights.json:342:    "answer": "## ExR→GxE: Onda EM su buco nero carico — regime e rottura\n\nLa metrica Reissner-Nordström ha due orizzonti: r± = GM/c² ± √((GM/c²)² - GQ²/(4πε₀c⁴)).\n\n**Regime dominante**: la carica domina sulla gravità quando Q si avvicina al limite estremo Q_max = M√(4πε₀G). Lì r+ = r- e la temperatura di Hawking ",
tools/data/loop_insights.json:346:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/loop_insights.json:348:    "question": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)'? — cosa NON sappiamo di questa relazione? Quali domande aperte ci sono nella fisica attuale?",
tools/data/loop_insights.json:349:    "answer": "## ExR→GxE: Onde EM e buchi neri carichi — cosa NON sappiamo\n\nLe equazioni di Maxwell su Reissner-Nordström (RN) sono ben poste classicamente: il tensore $F_{\\mu\\nu}$ si accoppia alla metrica $ds^2 = -(1 - r_s/r + r_Q^2/r^2)dt^2 + \\ldots$ dove $r_Q^2 = GQ^2/(4\\pi\\epsilon_0 c^4)$.\n\n**Domande aperte r",
tools/data/incrocio_20260405_0723.json:8:  "consecutio_verso_vuoto": 6,
tools/data/reports/agent_20260507_0803.md:61:- beta 0.0: `SR=1.00`, `L1=1.00`, `triple_var=1.00`; `SR2=0.00`, `L2=0.00`;
tools/data/reports/agent_20260507_0803.md:62:- beta 0.3: same stable trio, with mean z approximately `SR=-19.4`, `L1=-19.4`, `triple_var=-17.6`;
tools/data/lab_graph.json:86:        "annotation": "3 ponti, 3 scoperte, 5 report. Ponte mancante con Gravità — il vuoto più importante del tetraedro",
tools/data/lab_graph.json:127:        "annotation": "3 ponti, 2 scoperte, 0 report. Ponte mancante con Quantistica — il vuoto più importante del tetraedro",
tools/data/lab_graph.json:404:        "annotation": "Rinforza il ponte QxT — collegamento tra 2 teorie",
tools/data/lab_graph.json:449:        "annotation": "Potenziale ponte QxG — questa scoperta potrebbe colmare il vuoto",
tools/data/lab_graph.json:579:            "section": "ponte",
tools/data/lab_graph.json:643:        "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG gen",
tools/data/lab_graph.json:693:        "findings": "1. **G non e il vertice unico della diversita operatoria.** Q, G ed E hanno tutti tre modi incidenti distinti. Il claim \"G sotto tutto\" non passa come centralita entropica locale.\n2. **G e il solo hinge `blank + real_sourcing` nel perimetro TQGE.** Il vuoto QG e il sourcing reale GE si incontrano so",
tools/data/lab_graph.json:737:        "tipo": "ponte",
tools/data/lab_graph.json:738:        "ponte": "onda EM",
tools/data/lab_graph.json:739:        "ponte_en": "EM wave",
tools/data/lab_graph.json:742:        "vuoto": false,
tools/data/lab_graph.json:776:        "tipo": "ponte",
tools/data/lab_graph.json:777:        "ponte": "buco nero carico",
tools/data/lab_graph.json:778:        "ponte_en": "charged black hole",
tools/data/lab_graph.json:781:        "vuoto": false,
tools/data/lab_graph.json:797:        "tipo": "ponte",
tools/data/lab_graph.json:798:        "ponte": "orizzonte eventi",
tools/data/lab_graph.json:799:        "ponte_en": "event horizon",
tools/data/lab_graph.json:802:        "vuoto": false,
tools/data/lab_graph.json:818:        "tipo": "ponte",
tools/data/lab_graph.json:819:        "ponte": "atomo di idrogeno",
tools/data/lab_graph.json:820:        "ponte_en": "hydrogen atom",
tools/data/lab_graph.json:823:        "vuoto": false,
tools/data/lab_graph.json:839:        "tipo": "ponte",
tools/data/lab_graph.json:840:        "ponte": "",
tools/data/lab_graph.json:841:        "ponte_en": "",
tools/data/lab_graph.json:844:        "vuoto": true
tools/data/lab_graph.json:849:        "tipo": "ponte",
tools/data/lab_graph.json:850:        "ponte": "eq. Dirac",
tools/data/lab_graph.json:851:        "ponte_en": "Dirac eq.",
tools/data/lab_graph.json:854:        "vuoto": false,
tools/data/lab_graph.json:860:        "tipo": "ponte",
tools/data/lab_graph.json:861:        "ponte": "funzione partizione",
tools/data/lab_graph.json:862:        "ponte_en": "partition function",
tools/data/lab_graph.json:865:        "vuoto": false,
tools/data/lab_graph.json:890:        "tipo": "ponte",
tools/data/lab_graph.json:891:        "ponte": "temperatura Hawking",
tools/data/lab_graph.json:892:        "ponte_en": "Hawking temperature",
tools/data/lab_graph.json:895:        "vuoto": false,
tools/data/lab_graph.json:911:        "tipo": "ponte",
tools/data/lab_graph.json:912:        "ponte": "matrice densità",
tools/data/lab_graph.json:913:        "ponte_en": "density matrix",
tools/data/lab_graph.json:914:        "domanda": "Come coesistono vuoto e pieno?",
tools/data/lab_graph.json:916:        "vuoto": false,
tools/data/lab_graph.json:950:        "tipo": "ponte",
tools/data/lab_graph.json:951:        "ponte": "gas relativistico",
tools/data/lab_graph.json:952:        "ponte_en": "relativistic gas",
tools/data/lab_graph.json:955:        "vuoto": false,
tools/data/lab_graph.json:1145:      "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del guscio blank. QG non e ponte generico; e lato comun",
tools/data/lab_graph.json:1146:      "verdict_en": "**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del guscio blank. QG non e ponte generico; e lato comun",
tools/data/lab_graph.json:1149:      "content_full": "# Agent Report — Blank Shell Polarity Gate\n**Date**: 2026-05-07 19:57\n**Piano**: 83\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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.\n\n## Question\nNel perimetro TQGE operator-taxonomy, il denominatore QGE e solo faccia triadica isolata, o il blank QG ha un guscio polarizzato: una faccia inerte `blank + wick_time + wick_time` e una faccia di deposito `blank + gauge_phase + real_sourcing`?\n\n## Experiment Design\n- Strumento: `tools/exp_blank_shell_polarity_gate.py`\n- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.\n- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/data/reports/agent_20260507_1938.md`, `tools/data/triadic_deposit_gate_20260507_1938.json`.\n- Metrica: le due facce incidenti al lato `blank`; classificazione del lato non-blank di ciascuna faccia in `inert_wick_pair`, `deposit_gauge_real`, `source_without_gauge`, `gauge_without_source`.\n- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.\n\n## Results\n| Test | Osservato | Null count-preserving |\n|---|---:|---:|\n| Lato blank | GQ | p(blank edge = GQ)=0.1667 |\n| Guscio blank polarizzato `deposit_gauge_real + inert_wick_pair` | si | 24/120 = 0.2000 |\n| Assetto osservato `QGE` deposito + `TQG` inerte | si | 2/120 = 0.0167 |\n\nFacce del guscio blank osservato:\n\n| Faccia | Modi non-blank | Classe |\n|---|---|---|\n| TQG | wick_time + wick_time | inert_wick_pair |\n| QGE | gauge_phase + real_sourcing | deposit_gauge_real |\n\nPattern nel null:\n\n| Pattern guscio blank | Conteggio |\n|---|---:|\n| deposit_gauge_real + inert_wick_pair | 24/120 |\n| gauge_without_source + inert_wick_pair | 24/120 |\n| inert_wick_pair + source_without_gauge | 24/120 |\n| gauge_without_source + source_without_gauge | 48/120 |\n\n## Key Findings\n1. **Il blank QG ha un guscio polarizzato nel catalogo TQGE osservato.** Le due facce incidenti al blank non sono equivalenti: TQG e lato inerte `blank + wick_time + wick_time`; QGE e lato di deposito `blank + gauge_phase + real_sourcing`.\n2. **La polarizzazione del guscio non e rara come forma astratta.** Nel null count-preserving, il pattern `deposit_gauge_real + inert_wick_pair` appare in 24/120 assegnazioni. Il claim valido non e rarita universale della polarizzazione.\n3. **La localizzazione QG/QGE/TQG e piu stretta della sola polarizzazione.** L'assetto osservato in cui il blank e GQ, la faccia deposito e QGE, e la faccia inerte e TQG appare in 2/120 assegnazioni. Il denominatore non vive nel lato QG isolato: vive nella polarita delle due facce che quel lato apre.\n\n## Verdict\n**CONSTRAINT on G_POTENZIALE_NULLA / G_TRIADIC_DEPOSIT_GATE**: nel perimetro TQGE operator-taxonomy, il deposito Q->G va formulato come polarita del guscio blank. QG non e ponte generico; e lato comune tra TQG inerte e QGE depositante. Il gate triadico QGE resta il lato attivo del deposito, ma il nodo regressivo e il guscio a due facce del blank, non la faccia QGE isolata.\n\n## Bicono della scoperta\n- **Due radici**: TQG inerte `blank + wick_time + wick_time` · QGE depositante `blank + gauge_phase + real_sourcing`\n- **Singolare**: QG come lato comune dove il blank non decide da solo; apre due facce e la loro differenza determina il passaggio.\n- **Invariante di passaggio**: il deposito richiede il blank condiviso con una faccia gauge-source mentre l'altra faccia resta wick-wick.\n- **Campo di possibilita**: qui diventa possibile misurare G come polarita locale di guscio nei perimetri TQGE+R; qui diventa non-possibile trattare QGE come denominatore completo senza dichiarare la faccia inerte TQG che lo polarizza.\n\n## Self-Falsifier Lenses\n- **L1**: nessun \"zero\", \"sempre\" o \"impossibile\" fuori perimetro. Il null mostra polarizzazioni alternative e pattern non polarizzati.\n- **L2**: confronto espresso in conteggi grezzi e probabilita sullo stesso spazio di 120 assegnazioni.\n- **L3**: il claim precedente non viene salvato cambiando definizione; viene ristretto al nodo regressivo del guscio blank.\n- **L4**: i contro-pattern del null sono espliciti: `gauge_without_source + source_without_gauge` domina con 48/120.\n- **L5**: classificazione interna del catalogo D-ND; non e discovery fisica nuova su gauge, sorgente o gravitazione.\n\n## Files\n- `tools/exp_blank_shell_polarity_gate.py`\n- `tools/data/blank_shell_polarity_gate_20260507_1957.json`\n- `tools/data/reports/agent_20260507_1957.md`\n",
tools/data/lab_graph.json:1190:      "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato no",
tools/data/lab_graph.json:1191:      "verdict_en": "**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato no",
tools/data/lab_graph.json:1194:      "content_full": "# Agent Report — Triadic Deposit Gate\n**Date**: 2026-05-07 19:38\n**Piano**: 80\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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.\n\n## Question\nNel perimetro TQGE operator-taxonomy, il deposito Q->G richiede solo contatto `blank + real_sourcing`, o richiede la faccia completa `blank + gauge_phase + real_sourcing`?\n\n## Experiment Design\n- Strumento: `tools/exp_triadic_deposit_gate.py`\n- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.\n- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/data/reports/agent_20260507_1804.md`, `tools/evolution_report.md`.\n- Metrica: facce triadiche con `blank + gauge_phase + real_sourcing`; facce binarie con `blank + real_sourcing`; facce contro-perimetro `blank` senza sorgente, sorgente senza `blank`, gauge senza deposito.\n- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.\n\n## Results\n| Test | Osservato | Null count-preserving |\n|---|---:|---:|\n| Faccia triadica `blank + gauge_phase + real_sourcing` | QGE | p(any)=0.2000; p(QGE)=0.0500 |\n| Faccia binaria `blank + real_sourcing` | QGE | p(any)=0.8000; p(QGE)=0.2000 |\n| Faccia con blank senza sorgente | TQG | - |\n| Faccia con sorgente senza blank | TGE | - |\n| Faccia con gauge senza deposito | TQE | - |\n\nFacce osservate:\n\n| Faccia | Modi | Stato |\n|---|---|---|\n| QGE | blank + gauge_phase + real_sourcing | deposito triadico |\n| TQG | blank + wick_time + wick_time | blank senza sorgente |\n| TGE | real_sourcing + wick_time + wick_time | sorgente senza blank |\n| TQE | gauge_phase + wick_time + wick_time | gauge senza deposito |\n\nPattern nel null:\n\n| Pattern | Conteggio |\n|---|---:|\n| triadic face QGE | 6/120 |\n| triadic face TQG | 6/120 |\n| triadic face TQE | 6/120 |\n| triadic face TGE | 6/120 |\n| no triadic face | 96/120 |\n| binary blank-source on any face | 96/120 |\n| no binary blank-source face | 24/120 |\n\n## Key Findings\n1. **Il deposito QGE ha denominatore triadico.** Nel catalogo TQGE osservato, la faccia viva non contiene solo `blank + real_sourcing`: contiene anche `gauge_phase`. Il denominatore misurato e `blank + gauge_phase + real_sourcing`.\n2. **Il contatto binario e debole come gate.** Nel null count-preserving, una faccia `blank + real_sourcing` appare in 0.8000 delle assegnazioni; la faccia triadica appare in 0.2000. Il passaggio utile non e l'adiacenza, ma la chiusura del terzo lato.\n3. **Le tre facce escluse separano i ruoli.** TQG porta il blank senza sorgente; TGE porta la sorgente senza blank; TQE porta gauge senza deposito. QGE e il solo punto del catalogo osservato dove i tre ruoli sono nella stessa faccia.\n\n## Verdict\n**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato non basta; il contatto `blank + real_sourcing` non basta; il deposito osservato e QGE come `blank + gauge_phase + real_sourcing`. Il claim non e rarita universale: e localizzazione del denominatore nel catalogo TQGE osservato.\n\n## Bicono della scoperta\n- **Due radici**: contatto binario `blank + real_sourcing` · chiusura triadica `blank + gauge_phase + real_sourcing`\n- **Singolare**: QGE come faccia in cui il vuoto QG diventa depositabile perche passa attraverso gauge e sorgente.\n- **Invariante di passaggio**: il blank puo contaminare una faccia senza deposito; il deposito passa solo quando blank, gauge e source coabitano la stessa faccia.\n- **Campo di possibilita**: qui diventa possibile cercare gate di deposito come unita di faccia nei perimetri TQGE+R; qui diventa non-possibile usare l'adiacenza blank-source come denominatore sufficiente.\n\n## Self-Falsifier Lenses\n- **L1**: nessun assoluto fuori perimetro. \"Solo\" e usato per il catalogo osservato TQGE; il null mostra altre facce triadiche possibili per permutazione.\n- **L2**: confronto espresso in conteggi e probabilita sullo stesso spazio di 120 assegnazioni.\n- **L3**: il claim precedente viene ristretto al nodo regressivo corretto: denominatore di faccia, non ponte QG e non vertice G globale.\n- **L4**: TQG, TGE e TQE sono contro-perimetri espliciti ai singoli componenti del gate.\n- **L5**: classificazione interna del catalogo D-ND; non e discovery fisica nuova su gravita, gauge o sorgenti reali.\n\n## Files\n- `tools/exp_triadic_deposit_gate.py`\n- `tools/data/triadic_deposit_gate_20260507_1938.json`\n- `tools/data/reports/agent_20260507_1938.md`\n",
tools/data/lab_graph.json:1235:      "verdict": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il b",
tools/data/lab_graph.json:1236:      "verdict_en": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il b",
tools/data/lab_graph.json:1239:      "content_full": "# Agent Report — Blank To Source Hinge\n**Date**: 2026-05-07 18:04\n**Piano**: 79\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] - tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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.\n\n## Question\nSe QG e blank e GE e real_sourcing, l'operatore di deposito Q->G e un ponte QG generico o una faccia specifica del tetraedro?\n\n## Experiment Design\n- Strumento: `tools/exp_blank_to_source_hinge.py`\n- Scope: sei lati TQGE con tassonomia `3 wick_time + 1 gauge_phase + 1 real_sourcing + 1 blank`.\n- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/data/lab_riflessi.json`, `tools/data/reports/agent_20260507_1751.md`.\n- Metrica: lato blank; lato real_sourcing; endpoint del blank con sorgente; passaggio diretto endpoint-senza-sorgente -> endpoint-con-sorgente; facce con `blank + real_sourcing`; facce blank escluse.\n- Null baseline: 120 permutazioni count-preserving dei sei modi sui sei lati TQGE.\n\n## Results\n| Test | Osservato | Null count-preserving |\n|---|---:|---:|\n| Blank edge | GQ | p(GQ)=0.1667 |\n| Real sourcing edge | EG | p(EG)=0.1667 |\n| Blank adiacente al real_sourcing | true | p=0.8000 |\n| Passaggio diretto blank-endpoint senza sorgente -> con sorgente | Q->G | p(any)=0.8000; p(Q->G)=0.0667 |\n| Pattern esatto QG blank + GE real_sourcing + Q->G | true | p=0.0333 |\n| Faccia di deposito | QGE | 24/120 per ogni faccia; 24/120 none |\n| Faccia blank esclusa | TQG | - |\n\nEndpoint del blank:\n\n| Endpoint | Lati nonblank incidenti | Modi incidenti | Ruolo |\n|---|---|---|---|\n| Q | EQ, QT | gauge_phase, wick_time | non-source |\n| G | EG, GT | real_sourcing, wick_time | source |\n\nFacce:\n\n| Faccia | Modi | Stato |\n|---|---|---|\n| QGE | blank + gauge_phase + real_sourcing | deposito |\n| TQG | blank + wick_time + wick_time | vuoto senza sorgente |\n| TGE | real_sourcing + wick_time + wick_time | sorgente senza blank |\n| TQE | gauge_phase + wick_time + wick_time | ponte senza blank/source |\n\n## Key Findings\n1. **Q->G e orientabile solo come passaggio locale del lato blank.** Nel perimetro TQGE, Q e l'endpoint senza real_sourcing del blank; G e l'endpoint con real_sourcing. Il passaggio misurato e Q->G.\n2. **L'orientabilita blank-to-source non e rara nel null.** Un lato blank adiacente a un lato real_sourcing appare in 0.8000 delle assegnazioni count-preserving. Quindi il claim forte non e \"blank-to-source esiste\"; il claim valido e \"nel catalogo TQGE osservato, il blank-to-source cade su Q->G\".\n3. **Il deposito vive nella faccia QGE, non nel ponte QG.** QGE contiene `blank + gauge_phase + real_sourcing`; TQG contiene lo stesso blank ma nessuna sorgente. Il vuoto QG non basta: serve il terzo vertice E come sorgente reale agganciata a G.\n\n## Verdict\n**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il blank, GE fornisce il sourcing reale, QE fornisce il lato gauge_phase. La faccia TQG e il contro-perimetro nativo: contiene QG blank ma resta senza deposito.\n\n## Bicono della scoperta\n- **Due radici**: QG blank senza sorgente · GE real_sourcing agganciato a G\n- **Singolare**: la faccia QGE, dove vuoto quantistico-gravitazionale, fase gauge e sorgente reale stanno nello stesso triangolo.\n- **Invariante di passaggio**: il blank contamina due facce, ma il deposito passa solo nella faccia che contiene real_sourcing.\n- **Campo di possibilita**: qui diventa possibile testare Q->G come operatore triadico `blank + gauge + source`; qui diventa non-possibile cercare un ponte QG isolato senza il terzo vertice.\n\n## Self-Falsifier Lenses\n- **L1**: nessun \"zero/sempre\" fuori perimetro. \"Senza deposito\" su TQG significa assenza esatta di `real_sourcing` in quella faccia nel catalogo osservato.\n- **L2**: il risultato riporta conteggi/probabilita del null; l'orientabilita generica p=0.8000 non viene trasformata in rarita.\n- **L3**: il claim precedente non viene salvato come underlay globale. Il nodo regressivo e il denominatore relazionale: faccia QGE, non vertice G.\n- **L4**: TQG e dichiarata come contro-perimetro della propagazione del blank.\n- **L5**: classificazione interna del catalogo D-ND; non e discovery fisica nuova su gravita quantistica.\n\n## Files\n- `tools/exp_blank_to_source_hinge.py`\n- `tools/data/blank_to_source_hinge_20260507_1804.json`\n- `tools/data/reports/agent_20260507_1804.md`\n",
tools/data/lab_graph.json:1251:          "text": "Se QG e blank e GE e real_sourcing, l'operatore di deposito Q->G e un ponte QG generico o una faccia specifica del tetraedro?"
tools/data/lab_graph.json:1269:          "text": "**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG gen"
tools/data/lab_graph.json:1282:      "findings": "1. **G non e il vertice unico della diversita operatoria.** Q, G ed E hanno tutti tre modi incidenti distinti. Il claim \"G sotto tutto\" non passa come centralita entropica locale.\n2. **G e il solo hinge `blank + real_sourcing` nel perimetro TQGE.** Il vuoto QG e il sourcing reale GE si incontrano solo in G. Questo dato e verificato nel catalogo dei lati; il null mostra che la congiunzione non e ra",
tools/data/lab_graph.json:1284:      "content_full": "# Agent Report — TQGE Underlay Gate\n**Date**: 2026-05-07 17:51\n**Piano**: 78\n**Tension explored**: G_POTENZIALE_NULLA (0.85)\n**observables_registry**: 1.0.0-2026-05-06\n**observables_used**: [] — tassonomia operatori TQGE, nessun osservabile canonico SR/SR2/L1/L2/triple_var\n\n## Claim Under Test\n> 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.\n\n## Question\nNel tetraedro TQGE, G ha una firma operativa distinta dai vertici ordinari quando i sei lati sono classificati per tipo di operatore: Wick-tempo, fase-gauge, sourcing reale, blank?\n\n## Experiment Design\n- Strumento: `tools/exp_tqge_underlay_gate.py`\n- Scope: sei lati TQGE depositati nel contesto Lab.\n- Fonte verificata: `tools/LAB_AGENT_CONTEXT.md` per lati e vuoto QxG; `tools/data/lab_riflessi.json` per tassonomia operatori 3 Wick + 1 fase + 1 reale + 1 vuoto.\n- Metrica: profilo dei modi incidenti per vertice; entropia dei modi; presenza congiunta `blank + real_sourcing`; triangoli contaminati dal lato blank.\n- Null baseline: 120 assegnazioni che preservano i conteggi dei sei modi sui sei lati.\n\n## Results\n| Test | Osservato | Null count-preserving |\n|---|---:|---:|\n| Vertici a massima entropia di modo | Q, G, E | pattern distribuiti su tutti i vertici |\n| G unico massimo entropico | false | — |\n| Vertici con `blank + real_sourcing` | G | p(G)=0.200 |\n| Qualunque vertice con `blank + real_sourcing` | true | p=0.800 |\n| Triangoli vuoti | TQG, QGE | — |\n| Tutti i triangoli vuoti includono G | true | p=0.500 |\n| Blank sul lato QG | true | p=0.1667 |\n\nProfili incidenti:\n\n| Vertice | Modi incidenti | Entropia bits | blank | real_sourcing |\n|---|---|---:|---:|---:|\n| T | wick_time x3 | 0.000000 | false | false |\n| Q | blank, gauge_phase, wick_time | 1.584963 | true | false |\n| G | blank, real_sourcing, wick_time | 1.584963 | true | true |\n| E | gauge_phase, real_sourcing, wick_time | 1.584963 | false | true |\n\n## Key Findings\n1. **G non e il vertice unico della diversita operatoria.** Q, G ed E hanno tutti tre modi incidenti distinti. Il claim \"G sotto tutto\" non passa come centralita entropica locale.\n2. **G e il solo hinge `blank + real_sourcing` nel perimetro TQGE.** Il vuoto QG e il sourcing reale GE si incontrano solo in G. Questo dato e verificato nel catalogo dei lati; il null mostra che la congiunzione non e rara in astratto, quindi il contenuto non e \"unicita statistica\", ma localizzazione del nodo regressivo.\n3. **Il vuoto propaga per facce, non per tutto il tetraedro.** I triangoli TQG e QGE sono vuoti perche contengono QG; TGE e TQE restano pieni. G non rende possibili tutti i ponti: porta il punto dove il vuoto QG tocca il sourcing reale GE.\n\n## Verdict\n**CONSTRAINT on G_POTENZIALE_NULLA**: nel perimetro TQGE operator-taxonomy, G non va formulato come vertice globale \"sotto tutto\". G e il hinge locale tra QG blank e GE real_sourcing. La consecutio non e cercare un ponte QG generico; e misurare l'operatore di deposito che trasforma un blank quantistico-gravitazionale in sourcing reale.\n\n## Bicono della scoperta\n- **Due radici**: QG blank · GE real_sourcing\n- **Singolare**: G come punto in cui assenza di operatore e sorgente reale condividono lo stesso vertice.\n- **Invariante di passaggio**: la contaminazione del vuoto passa alle facce che contengono QG; non passa alle facce senza QG.\n- **Campo di possibilita**: qui diventa possibile cercare l'operatore di deposito Q->G come passaggio blank-to-source; qui diventa non-possibile trattare G come prova globale di underlay su tutti i lati TQGE.\n\n## Self-Falsifier Lenses\n- **L1**: nessun assoluto \"sempre/mai\" fuori perimetro; \"solo\" e usato per il dato esatto `blank + real_sourcing` nel catalogo osservato.\n- **L2**: confronto riportato in conteggi e probabilita null, non in percentuali fra spazi diversi.\n- **L3**: il claim originale non viene salvato; viene ristretto al nodo regressivo G come hinge locale.\n- **L4**: TGE e TQE sono contro-perimetro esplicito alla propagazione totale del vuoto.\n- **L5**: il risultato e classificazione interna del catalogo D-ND, non discovery fisica nuova.\n\n## Files\n- `tools/exp_tqge_underlay_gate.py`\n- `tools/data/tqge_underlay_gate_20260507_1751.json`\n- `tools/data/reports/agent_20260507_1751.md`\n",
tools/data/lab_graph.json:1302:          "text": "- Strumento: `tools/exp_tqge_underlay_gate.py`\n- Scope: sei lati TQGE depositati nel contesto Lab.\n- Fonte verificata: `tools/LAB_AGENT_CONTEXT.md` per lati e vuoto QxG; `tools/data/lab_riflessi.json`"
tools/data/lab_graph.json:1461:      "content_full": "# Agent Report — Bridge Order Denominator Gate\n\ntimestamp: 2026-05-07 09:42 UTC\ncategory: gate_falsification_bridge\nverdict: scoped_operator\nobservables_registry: 1.0.0-2026-05-06\nobservables_used: [SR, SR2, L1, L2, triple_var]\ntool: tools/exp_bridge_order_denominator_gate.py\ndata: tools/data/bridge_order_denominator_gate_20260507_0942.json\nseed_check: tools/data/bridge_order_denominator_gate_20260507_0942_seedcheck.json\n\n## Claim Under Test\n\nVerificato dal campo vivo: `ORDER_DENOMINATOR_GATE` e gia stato testato su\nperimetri sintetici e semi-reali. Il mandato corrente chiede domini fisici o\nponte gia presenti nel sistema, con shuffle marginal-preserving.\n\nDomanda: se il perimetro e una sequenza bridge D-ND, il supporto denominatore\nresta one-sided o compare un controesempio?\n\nPerimetri:\n\n- `prime_metric_delta_gamma_abs`: fluttuazioni della connessione metrica da\n  `g=(p/2)^2`.\n- `prime_metric_dR_abs`: fluttuazioni di curvatura discreta `dR=R-2` dalla\n  stessa metrica.\n- `zeta_trace_residual_step5_abs`: residuo non-lineare del trace bridge sugli\n  zeri di zeta al passo 5.\n- `hydrogen_bound_level_spacings`: spacing dei livelli legati\n  `E_n=-1/(2n^2)`, ponte QxE.\n\nGate: osservabile stabile se `abs(original - shuffle_mean) / shuffle_std >= 2`.\n\n## Deposito Numerico\n\nRun principale: `n_replicates=20`, `n_beta=11`, `n_baseline=32`,\n`seed=202605070942`. Seed check: `n_replicates=12`, `n_baseline=24`,\n`seed=202605070943`.\n\n| perimeter | coherent one-sided observables | stable_count coherent | stable_count illusory | endpoint distance gated | beta ambiguous gated |\n|---|---:|---:|---:|---:|---:|\n| prime_metric_delta_gamma_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.250 | 4.415 | [] |\n| prime_metric_dR_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.350 | 4.414 | 0.30 |\n| zeta_trace_residual_step5_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.050 | 4.415 | 0.30 |\n| hydrogen_bound_level_spacings | SR, SR2, L1, L2, triple_var | 5.000 | 0.200 | 4.416 | 0.40 |\n\nSeed check:\n\n| perimeter | coherent one-sided observables | stable_count coherent | stable_count illusory | endpoint distance gated | beta ambiguous gated |\n|---|---:|---:|---:|---:|---:|\n| prime_metric_delta_gamma_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.167 | 4.377 | [] |\n| prime_metric_dR_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.083 | 4.376 | [] |\n| zeta_trace_residual_step5_abs | SR, SR2, L1, L2, triple_var | 5.000 | 0.083 | 4.377 | 0.30 |\n| hydrogen_bound_level_spacings | SR, SR2, L1, L2, triple_var | 5.000 | 0.250 | 4.378 | 0.40, 0.50 |\n\nEndpoint-stable observables: `[]` in all four perimeters in both runs.\n\n## Risultato\n\n1. **The bridge perimeter carries full canonical one-sided support.**\n\n   Each bridge sequence transfers on all five canonical observables. The\n   coherent endpoint has stable count `5.000` in both runs; the illusory endpoint\n   stays weak-denominator under the same marginal.\n\n2. **The both-endpoint support remains blank.**\n\n   `endpoint_stable_observables=[]` repeats across metric, trace, and QxE\n   bridge perimeters. The gate is not two endpoint classes with stable\n   denominators. It is support on the side where order survives its shuffle null.\n\n3. **The logistic counter-scope from 09:23 still matters.**\n\n   This result extends the gate into bridge sequences; it does not erase the\n   logistic return blank. The transferable object is order visible to the\n   canonical gap-observable contract. Return-time tail order still requires its\n   own observable perimetro.\n\n4. **The beta coordinate does not universalize.**\n\n   Metric `delta_gamma` has no ambiguous gated beta in either run. Metric `dR`\n   has `0.30` in the main run and blank in seed check. Zeta trace keeps `0.30`.\n   Hydrogen gives `0.40` in the main run and `0.40, 0.50` in seed check. Beta is\n   protocol coordinate, not domain coordinate.\n\n## Consecutio\n\n`ORDER_DENOMINATOR_GATE` survives the bridge falsification:\n\n> In bridge perimeters whose order is carried by metric connection,\n> curvature fluctuation, trace residual, or QxE level spacing sequences, the\n> denominator gate transfers as full canonical one-sided support against a\n> marginal-preserving shuffle. The logistic return perimeter remains the\n> counter-scope for this observable contract.\n\nNext experiment: test the logistic counter-scope at the node regressivo:\nsymbolic itinerary block entropy, return-tail exponent, and recurrence-plot\ndiagonal statistics under the same original-vs-shuffle denominator gate. Do not\ntune `z_min`.\n\n## Self-Audit: 5 Lenti\n\nL1 hard constraint vs bias: `endpoint_stable_observables=[]` is exact for the\ndeclared perimeters and runs. The report does not claim universal absence of\nillusory support; illusory stable counts are `0.050-0.350` in the main run.\n\nL2 quantity vs ratio: stable counts, endpoint distances, and z means are\nreported before interpretation. No percent drift claim is used.\n\nL3 no silent patching: 09:23 found a logistic blank. This report does not patch\nthat blank; it adds bridge perimeters and keeps the counter-scope.\n\nL4 edge cases: hydrogen beta changes from `0.40` to `0.40,0.50` in seed check,\nand metric `dR` beta drops from `0.30` to blank. The beta claim is explicitly\nnon-universal.\n\nL5 re-discovery vs discovery: metric, zeta, and hydrogen sequences sit near\nknown RMT/arithmetical/spectral order diagnostics. This report claims operator\nscope inside the lab gate protocol, not a new theorem.\n\n## Fonti\n\n- Verificato: `tools/data/agent_field_live.md`\n- Verificato: `tools/LAB_AGENT_CONTEXT.md`\n- Verificato: `tools/observables_registry.py`\n- Verificato: `tools/exp_bridge_order_denominator_gate.py`\n- Verificato: `tools/data/bridge_order_denominator_gate_20260507_0942.json`\n- Verificato: `tools/data/bridge_order_denominator_gate_20260507_0942_seedcheck.json`\n- Inferito: bridge perimeters carry full canonical one-sided support because\n  all five observables pass the original-vs-shuffle gate at the coherent\n  endpoint and fail endpoint-stable support in both runs.\n",
tools/data/lab_graph.json:1542:      "content_full": "# Agent Report - Denominator Gate Transfers, Boundary Coordinate Does Not\n**Date**: 2026-05-07 08:03  \n**Piano**: 69  \n**Category**: gate_transferability  \n**Tension explored**: META + DUALITA_DIPOLARE_VS_ILLUSORIA  \n**verdict**: operator  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var]\n\n## Claim Under Test\nThe operator directive asked whether the `BOUNDARY_LAYER_GATE` forged on the\nGUE/Poisson boundary is a transferable operator or only a local metric.\n\nConcrete test:\n\n> Apply the denominator-collapse gate to the discrimination between dipolar\n> duality and illusory duality. If the gate distinguishes structural generation\n> from incoherent dispersion, it is an operator. If it only emits syntactically\n> valid but empty layer maps, it is a BOUNDARY-local metric.\n\n## Experiment\nTool created: `tools/exp_duality_gate_transfer.py`\n\nAtomic perimeter:\n- DIPOLARE: coherent golden Beatty gaps generated by `floor((n+phase)*phi)`;\n- ILLUSORIA: a random permutation of the same gaps, preserving one-point\n  distribution and first moment but removing the generating order;\n- beta layer: replace a beta fraction of dipolar positions with values from\n  the illusory permutation;\n- main run: 4,096 gaps, 24 replicates, 11 beta layers, 40 shuffle baselines;\n- seed check: 3,072 gaps, 16 replicates, 11 beta layers, 32 shuffle baselines;\n- denominator gate: observable stable when `abs(z original-vs-shuffle) >= 2`;\n- classification: standardized distance to beta 0.0 and beta 1.0 centroids\n  using all five canonical observables.\n\nThis is not a new BOUNDARY experiment. GUE and Poisson do not appear in the\ngenerator. The only transferred object is the denominator gate.\n\n## Results\n\n### Main Run\n\nEndpoint separation using all canonical observables: `3.436` standardized units.  \nEndpoint-stable observables at frequency >= 0.75 across both endpoints: `[]`.\n\n| beta | stable obs / 5 | margin | ambiguous fraction | illusory-label fraction |\n|---:|---:|---:|---:|---:|\n| 0.0 | 3.000 | 0.971 | 0.000 | 0.000 |\n| 0.1 | 3.000 | 0.479 | 0.000 | 0.000 |\n| 0.2 | 3.000 | 0.234 | 0.125 | 0.000 |\n| 0.3 | 3.000 | 0.033 | 1.000 | 0.375 |\n| 0.4 | 3.083 | 0.154 | 0.417 | 0.958 |\n| 0.5 | 3.083 | 0.269 | 0.375 | 1.000 |\n| 0.6 | 3.000 | 0.417 | 0.042 | 1.000 |\n| 0.7 | 2.917 | 0.316 | 0.167 | 1.000 |\n| 0.8 | 1.708 | 0.473 | 0.125 | 1.000 |\n| 0.9 | 0.167 | 0.463 | 0.042 | 1.000 |\n| 1.0 | 0.208 | 0.442 | 0.042 | 1.000 |\n\nObservable stability frequencies:\n- beta 0.0: `SR=1.00`, `L1=1.00`, `triple_var=1.00`; `SR2=0.00`, `L2=0.00`;\n- beta 0.3: same stable trio, with mean z approximately `SR=-19.4`, `L1=-19.4`, `triple_var=-17.6`;\n- beta 0.8: stable trio falls to frequency `0.54` each, mean z around `-1.7` to `-1.9`;\n- beta 0.9: all canonical observables are weak or near weak, mean z around `-0.4..+0.2`;\n- beta 1.0: all canonical observables are weak, mean z around `+0.1..+0.2`.\n\n### Seed Check\n\nThe seed check repeated the same structure:\n- endpoint-stable observables: `[]`;\n- all-observable endpoint distance: `3.412`;\n- ambiguous beta: `[0.3]`;\n- beta 0.0 stable count: `3.000`;\n- beta 0.3 stable count: `3.000`, ambiguous fraction `1.000`;\n- beta 0.8 stable count: `1.062`;\n- beta 0.9 stable count: `0.000`;\n- beta 1.0 stable count: `0.438`.\n\n## Findings\n\n1. **The gate does not degenerate on DUALITA.** The dipolar endpoint has three\nstable canonical observables with large original-vs-shuffle denominators\n(`SR`, `L1`, `triple_var`, mean abs z about `36-41` in the main run). The\nillusory endpoint has no stable denominator support. This is a structural\noriginal-vs-shuffle distinction, not an empty syntactic map.\n\n2. **The BOUNDARY layer coordinate does not transfer unchanged.** In the\nGUE/Poisson run, beta 0.3-0.4 carried both classification ambiguity and\ndenominator collapse. Here, beta 0.3 is classification-ambiguous, but the\ndenominator support is still strong: stable count remains `3.000/5`.\nDenominator collapse arrives later, around beta 0.8-0.9. Therefore the\noperator transfers, but the specific BOUNDARY layer shape is local.\n\n3. **Endpoint-gated classification remains empty for the same structural\nreason as BOUNDARY.** The endpoint-stable set is empty because the illusory\npole is denominator-weak. This does not erase the discrimination; it prevents\nsymmetric endpoint-gated retention claims. The valid claim is one-sided:\ncoherent dipolar order survives original-vs-shuffle gating; illusory dispersion\ndoes not.\n\n4. **The discriminant is order, not marginal distribution.** The illusory\nsequence preserves the same alphabet, first moment, and one-point distribution\nas the dipolar sequence. The gate is therefore not measuring the marginal\ncomposition of gaps. It measures whether the canonical observables retain an\nordered denominator against full shuffle.\n\n## Verdict\n**category: gate_transferability**  \n**verdict: operator**\n\nScoped statement:\n\n> In this synthetic DUALITA perimeter, the denominator gate is transferable as\n> an operator for structural order: it separates dipolar generation from\n> illusory dispersion with replicated z support. The beta coordinate of the\n> GUE/Poisson boundary layer is not transferable: ambiguity appears near beta\n> 0.3, while denominator collapse appears near beta 0.8-0.9.\n\nSo the last BOUNDARY cycles forged a lens, but one parameter of that lens was\nlocal to BOUNDARY. The transferable object is not \"beta 0.3-0.4\"; it is:\n\n> report layer maps as classifier margin plus original-vs-shuffle denominator\n> support, and treat denominator-weak poles as asymmetric structural poles.\n\n## Consecutio\nWhat opens now: apply the same transfer test to `TRASCENDENZA_LIMITE` and\n`G_POTENZIALE_NULLA`, but separate two quantities from the start:\n\n1. classification ambiguity layer;\n2. denominator-collapse layer.\n\nIf both layers coincide in a domain, the domain has a BOUNDARY-like transition.\nIf they split, as they do here, the gate is still useful but the transition\ncoordinate belongs to the target domain, not to the operator.\n\n## Auto-audit: 5 lenti\n- **L1 hard constraint vs bias**: no \"always/never/zero\" claim. \"No endpoint\n  stable observables\" means none reached frequency >= 0.75 across both\n  endpoints under `abs(z) >= 2`.\n- **L2 quantity vs ratio**: classification margin is reported together with\n  stable-observable count and z means. Ratios are not interpreted without\n  denominator support.\n- **L3 no silent patching**: the report explicitly separates \"gate transfers\"\n  from \"BOUNDARY beta coordinate transfers.\" The second is not claimed.\n- **L4 edge cases**: beta 0.4 has ambiguous fraction `0.417`, so only beta 0.3\n  is listed as the replicated ambiguous layer under the >= 0.5 rule.\n- **L5 re-discovery**: this is a finite symbolic-order vs permutation audit,\n  related to standard shuffle/null testing. It is not tagged as a new theorem\n  about Sturmian or Beatty sequences.\n\n## Files\n- Script: `tools/exp_duality_gate_transfer.py`\n- Main data: `tools/data/duality_gate_transfer_20260507_0803.json`\n- Seed check: `tools/data/duality_gate_transfer_20260507_0803_seedcheck.json`\n- Report: `tools/data/reports/agent_20260507_0803.md`\n",
tools/data/lab_graph.json:1581:      "content_full": "# Agent Report — The GUE-Poisson Boundary Is a Denominator Collapse Layer\n**Date**: 2026-05-07 03:30  \n**Piano**: 68  \n**Tension explored**: META + BOUNDARY  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var]\n\n## Claim Under Test\nThe last three runs constrained perturbation rank and observable collinearity:\nrank/PC2 claims are not interpretable without the canonical observable registry\nand the original-vs-shuffle denominator gate.\n\nThis run does not repeat perturbation rank. It asks:\n\n> If the GUE-Poisson boundary is simulated directly by controlled mixtures,\n> does it behave like a clean two-class split, or like an operational third\n> layer where classification is ambiguous and denominator support collapses?\n\n## Experiment\nTool created: `tools/exp_boundary_mixture_gate.py`\n\nAtomic perimeter:\n- domains: synthetic unfolded GUE spacings, iid Poisson spacings, and mixtures;\n- mixture parameter: `beta = 0.0..1.0`, where beta is the Poisson replacement fraction;\n- main run: 1,536 spacings, 16 replicates, GUE matrix size 180, 11 beta layers, 24 full-shuffle baselines;\n- seed check: 1,024 spacings, 12 replicates, GUE matrix size 160, same 11 beta layers, 20 baselines;\n- denominator gate: observable is stable when `abs(original - shuffle_mean) / shuffle_std >= 2`;\n- 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`.\n\nThe 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.\n\n## Results\n\n### Main Run\n\nEndpoint separation using all canonical observables: `3.973` standardized units.  \nEndpoint-stable observables at frequency >= 0.75 across both endpoints: `[]`.\n\n| beta | stable obs / 5 | coord mean | margin mean | ambiguous fraction | Poisson-label fraction |\n|---:|---:|---:|---:|---:|---:|\n| 0.0 | 3.188 | -0.735 | 0.735 | 0.000 | 0.000 |\n| 0.1 | 3.312 | -0.470 | 0.470 | 0.000 | 0.000 |\n| 0.2 | 3.312 | -0.232 | 0.232 | 0.125 | 0.000 |\n| 0.3 | 2.500 | -0.054 | 0.070 | 0.875 | 0.250 |\n| 0.4 | 1.625 | +0.075 | 0.083 | 0.812 | 0.875 |\n| 0.5 | 0.750 | +0.260 | 0.260 | 0.000 | 1.000 |\n| 0.6 | 0.188 | +0.374 | 0.374 | 0.000 | 1.000 |\n| 0.7 | 0.500 | +0.520 | 0.520 | 0.000 | 1.000 |\n| 0.8 | 0.250 | +0.570 | 0.570 | 0.000 | 1.000 |\n| 0.9 | 0.250 | +0.692 | 0.692 | 0.000 | 1.000 |\n| 1.0 | 0.125 | +0.721 | 0.721 | 0.000 | 1.000 |\n\nAt beta 0.0-0.2, the sequence is classified as GUE-like and retains about\nthree stable observables. At beta 0.5-1.0, it is classified as Poisson-like,\nbut denominator support is mostly absent. The transition is not centered at\nbeta 0.5 in this observable suite. The ambiguous layer is beta 0.3-0.4.\n\nObservable stability frequencies in the main run:\n- beta 0.0: `SR=1.00`, `L1=1.00`, `triple_var=1.00`; `SR2=0.06`, `L2=0.12`;\n- beta 0.3: `SR=1.00`, `L1=0.75`, `triple_var=0.50`;\n- beta 0.4: `SR=0.75`, `L1=0.44`, `triple_var=0.38`;\n- beta 1.0: all canonical observables are weak except one `L2` replicate frequency of `0.12`.\n\n### Seed Check\n\nThe lighter seed check repeated the same ambiguous layer:\n- ambiguous beta: `[0.3, 0.4]`;\n- beta 0.3: margin `0.082`, ambiguous fraction `0.917`, stable obs mean `1.250`;\n- beta 0.4: margin `0.125`, ambiguous fraction `0.750`, stable obs mean `0.833`;\n- beta 0.5 and above: Poisson-label fraction `1.000`, ambiguity `0.000`.\n\n## Findings\n\n1. **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.\n\n2. **The operational boundary is a layer, not a line, in this synthetic perimeter.** Both the main run and the seed check isolate beta 0.3-0.4 as the ambiguous layer. In the main run the nearest-centroid margin falls to `0.070-0.083`, while ambiguous fraction rises to `0.812-0.875`. This is the measured form of the \"third included\" here: not a metaphysical third class, but a beta region where two-class assignment and denominator support are both unstable.\n\n3. **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.\n\n4. **The previous META constraints are extended, not replaced.** The 19:41 and 19:55 constraints still hold. This run adds that a boundary claim also needs a layer map: endpoint separability alone can hide the fact that one endpoint has no original-vs-shuffle denominator and that the transition region carries the actual instability.\n\n## Verdict\n**CONSTRAINT on META + BOUNDARY**: GUE/Poisson boundary claims must report:\n\n> observables_registry version + canonical observable list + original-vs-shuffle z gate per observable + endpoint-stable observable set + beta/window layer where classification margin is ambiguous.\n\nScoped statement from this run:\n\n> 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.\n\n## Consecutio\nWhat 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:\n\n> Which scale window has the same signature as the synthetic beta 0.3-0.4 layer: low classifier margin plus falling original-vs-shuffle denominators?\n\nIf prime windows show such a layer, BOUNDARY becomes a measurable transition surface. If they do not, the synthetic result remains a calibration constraint on how not to over-read endpoint separability.\n\n## Auto-audit: 5 lenti\n- **L1 hard constraint vs bias**: no zero/always claim. \"Endpoint gate is empty\" means no observable reached frequency >= 0.75 across both endpoints under `abs(z) >= 2`; it does not mean the observables are identically zero.\n- **L2 quantity vs ratio**: classification margin is reported together with stable-observable count and z-gate frequencies. Ratios are not interpreted without denominator support.\n- **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.\n- **L4 edge cases**: beta 0.2 has ambiguous fraction `0.125`, so it is not included in the ambiguous layer. The declared layer requires at least half the replicates ambiguous.\n- **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.\n\n## Files\n- Script: `tools/exp_boundary_mixture_gate.py`\n- Main data: `tools/data/boundary_mixture_gate_20260507_0330.json`\n- Seed check: `tools/data/boundary_mixture_gate_20260507_0330_seedcheck.json`\n- Report: `tools/data/reports/agent_20260507_0330.md`\n",
tools/data/lab_graph.json:1620:      "content_full": "# Agent Report — Observable Collinearity Breaks Only Where Denominators Are Weak\n**Date**: 2026-05-06 19:55  \n**Piano**: 67  \n**Tension explored**: META + TRAJECTORY_APPLY_20260506_1941  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var]\n\n## Claim Under Test\nCycle 19:41 closed `PERTURBATION_DENOMINATOR_GATE` and the trajectory explicitly said:\n\n> La prossima corsa NON deve restare su perturbation rank.\n\nThis run therefore does not test perturbation dimensionality. It asks a cross-domain META question:\n\n> 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?\n\n## Experiment\nTool updated: `tools/exp_observable_rank_audit.py`\n\nMethod correction before execution:\n- removed local observable redefinitions;\n- imported canonical definitions from `tools/observables_registry.py`;\n- replaced the old local `triple_var` normalized convention with canonical raw `triple_var`;\n- added `prime_shuffle` as a control domain;\n- reported weak observable count using the fixed gate `abs(original - shuffle_mean) / shuffle_std < 2`.\n\nAtomic perimeter:\n- domains: first prime gaps, prime-shuffle control, independent GUE spacings, iid Poisson spacings;\n- main run: 12,000 gaps, 19 alpha values, 18 partial-shuffle trials per alpha, 48 full-shuffle baselines;\n- two seed checks: 8,000 gaps, 15 alpha values, 12 trials per alpha, 36 baselines;\n- measured object: PCA of the 5-observable retention curves across alpha, not perturbation profiles.\n\n## Results\n\n### Main Run\n\n| Domain | PC1 energy | effective rank | mean abs corr | weak obs / 5 | z summary |\n|---|---:|---:|---:|---:|---|\n| primes | 0.978 | 1.128 | 0.975 | 1 | SR=-12.1, SR2=-2.5, L1=-8.9, L2=-1.9, triple_var=-8.7 |\n| prime_shuffle | 0.593 | 2.475 | 0.606 | 5 | all abs(z) <= 1.1 |\n| GUE | 0.990 | 1.060 | 0.989 | 0 | SR=-2.9, SR2=+14.5, L1=+13.2, L2=+31.7, triple_var=+23.8 |\n| Poisson | 0.625 | 2.368 | 0.609 | 5 | all abs(z) <= 1.9 |\n\n### Three-Run Summary\n\n| Domain | PC1 mean | rank mean | mean abs corr | weak obs mean |\n|---|---:|---:|---:|---:|\n| primes | 0.939 | 1.296 | 0.924 | 1.33 |\n| prime_shuffle | 0.765 | 1.904 | 0.551 | 4.67 |\n| GUE | 0.980 | 1.106 | 0.977 | 0.33 |\n| Poisson | 0.714 | 2.196 | 0.572 | 5.00 |\n\n## Findings\n\n1. **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.\n\n2. **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.\n\n3. **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.\n\n4. **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.\"\n\n## Verdict\n**CONSTRAINT on META**: observable collinearity claims must be reported with:\n\n> observables_registry version + canonical observable list + original-vs-shuffle z per observable + control domains.\n\nIn 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:\n\n> 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.\n\n## Consecutio\nWhat 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.\n\n## Auto-audit: 5 lenti\n- **L1 hard constraint vs bias**: no zero/always claim. \"Weak\" means `abs(z) < 2` in this declared gate.\n- **L2 quantity vs ratio**: PCA rank and retention ratios are interpreted only after raw z denominators.\n- **L3 no silent patching**: the older 05-05 collinearity claim is explicitly narrowed; it is not silently rebranded as universal.\n- **L4 edge cases**: `prime_shuffle` seed 1956 produced low rank with 4 weak observables; this is reported as unstable control behavior, not ignored.\n- **L5 re-discovery**: PCA rank instability under noisy normalization is standard statistical hygiene. This is a lab method constraint, not a new RMT theorem.\n\n## Files\n- Script: `tools/exp_observable_rank_audit.py`\n- Main data: `tools/data/observable_collinearity_breaking_20260506_1955.json`\n- Seed checks: `tools/data/observable_collinearity_breaking_20260506_1956.json`, `tools/data/observable_collinearity_breaking_20260506_1957.json`\n- Report: `tools/data/reports/agent_20260506_1955.md`\n",
tools/data/lab_graph.json:1659:      "content_full": "# Agent Report — Perturbation Rank Needs Denominator Gating\n**Date**: 2026-05-06 19:41  \n**Piano**: 66  \n**Tension explored**: META + BOUNDARY  \nobservables_registry: 1.0.0-2026-05-06  \nobservables_used: [SR, SR2, L1, L2, triple_var]\n\n## Claim Under Test\nThe valid next test from cycle 06:25 was a replicate-and-size curve for perturbation effective rank, with observable definitions versioned. This run asks:\n\n> Does the second perturbation axis stabilize as sample size grows, or is rank inflated when retention denominators are weak relative to full-shuffle baselines?\n\n## Experiment\nTool created: `tools/exp_perturbation_rank_size_curve.py`\n\nAtomic perimeter:\n- domains: prime-gap windows, prime-shuffle controls, iid Poisson spacings, independent GUE spacings;\n- sample sizes: 128, 256, 512, 1024, 2048 gaps;\n- replicates/windows: 8 per domain-size point;\n- perturbations: `adjacent_swap`, `block_shuffle`, `large_gap_only`, `uniform`;\n- alpha grid: 0.1, 0.3, 0.5, 0.7, 0.9;\n- trials per perturbation-alpha: 8;\n- full-shuffle baselines: 16;\n- canonical observables imported from `tools/observables_registry.py`;\n- denominator gate: observable is stable only when `abs(original - shuffle_mean) / shuffle_std >= 2`.\n\nThe script reports two ranks:\n- `rank_all`: PCA effective rank using all five canonical observables;\n- `stable_rank`: PCA effective rank after dropping observables whose original-vs-shuffle denominator is weak.\n\n## Results\n\n### Size Curve Summary\n\n| Domain | N | rank_all | PC2 | weak obs / 5 | stable_rank |\n|---|---:|---:|---:|---:|---:|\n| primes_windows | 128 | 1.789 ± 0.469 | 0.155 | 4.50 | 1.382 |\n| primes_windows | 256 | 1.947 ± 0.645 | 0.174 | 4.75 | 1.262 |\n| primes_windows | 512 | 1.892 ± 0.372 | 0.142 | 2.88 | 1.310 |\n| primes_windows | 1024 | 1.679 ± 0.409 | 0.117 | 1.62 | 1.415 |\n| primes_windows | 2048 | 1.442 ± 0.213 | 0.081 | 0.75 | 1.462 |\n| prime_shuffle_control | 2048 | 1.797 ± 0.375 | 0.134 | 3.62 | 1.428 |\n| poisson | 2048 | 1.952 ± 0.499 | 0.175 | 4.62 | 1.036 |\n| gue | 128 | 1.703 ± 0.348 | 0.126 | 2.38 | 1.226 |\n| gue | 256 | 1.913 ± 0.453 | 0.164 | 2.25 | 1.141 |\n| gue | 512 | 1.542 ± 0.313 | 0.111 | 1.88 | 1.162 |\n| gue | 1024 | 1.551 ± 0.395 | 0.105 | 1.88 | 1.157 |\n| gue | 2048 | 1.234 ± 0.224 | 0.046 | 2.00 | 1.111 |\n\n### Observable Stability\n\nAt GUE N=2048, `SR`, `L1`, and `triple_var` are stable in all 8 replicates; `SR2` and `L2` are stable in 0 of 8. Mean absolute z-scores: `SR=8.38`, `SR2=0.67`, `L1=11.58`, `L2=0.89`, `triple_var=11.66`.\n\nAt primes N=2048, `SR`, `L1`, and `triple_var` are stable in all 8 windows; `SR2` is stable in 7 of 8; `L2` is stable in 3 of 8. Mean absolute z-scores: `SR=5.19`, `SR2=2.63`, `L1=3.96`, `L2=1.78`, `triple_var=4.37`.\n\nPoisson and prime-shuffle controls keep high `rank_all` while most observables are weak. At Poisson N=2048, `rank_all=1.952` but `stable_rank=1.036` and 4.62 of 5 observables are weak on average. This is the falsifying control for treating rank_all alone as a structural claim.\n\n## Findings\n\n1. **Perturbation rank is not interpretable without denominator gating.** In this perimeter, Poisson and prime-shuffle controls can show `rank_all` near 1.8-2.0. Because their original-vs-shuffle denominators are mostly weak, that rank is a retention-normalization artifact unless the stable-observable screen also supports it.\n\n2. **GUE does not show a stable second axis on canonical observables up to N=2048.** GUE `rank_all` falls from 1.913 at N=256 to 1.234 at N=2048; PC2 falls from 16.4% to 4.6%. After denominator gating, GUE stable rank stays close to 1.1-1.2.\n\n3. **The old L2-driven sign-flip should not be promoted without a denominator check.** Under canonical observables, GUE `L2` is weak relative to shuffle at every tested size and is stable in 0/8 replicates at N >= 512. This does not prove every L2 sign effect is false; it restricts such effects to local/sample-specific observations unless the denominator survives.\n\n4. **Primes become better conditioned with N, but not more multi-axis.** Prime windows gain stable observables as N grows: weak count drops from 4.75 at N=256 to 0.75 at N=2048. The effective rank does not grow with this conditioning; it is 1.442 at N=2048, and stable_rank is 1.462.\n\n## Verdict\n**CONSTRAINT on META + BOUNDARY**: perturbation dimensionality must be reported as:\n\n> effective rank + PC2 + observable registry version + original-vs-shuffle z gate per observable.\n\nThe cycle 03:30 \"second GUE axis\" remains restricted by cycle 06:25 and is further narrowed here: under canonical observables and the tested size curve, the stable statement is not \"GUE has a second perturbation axis\"; it is:\n\n> all-observable perturbation rank can inflate in weak-denominator regimes; after denominator gating, GUE and primes are both close to one perturbation coordinate in this perimeter, while Poisson/shuffle controls show why ungated rank is not structural evidence.\n\n## Consecutio\nWhat opens now: the lab can keep using perturbation rank, but only as a gated observable. The next useful movement is not more PCA; it is an operator-level denominator map: for each observable, identify the perturbation/domain/scale region where `original - shuffle` is a real signal rather than a noisy divisor.\n\n## Auto-audit: 5 lenti\n- **L1 hard constraint vs bias**: no zero/always claim. \"Weak\" means `abs(z) < 2` in the declared gate, not absence of signal.\n- **L2 quantity vs ratio**: retention ratios are not read alone; raw denominator z-scores are reported first.\n- **L3 no silent patching**: the 03:30 claim is explicitly restricted; it is not renamed as confirmed.\n- **L4 edge cases**: short-GUE and low-N effects are isolated by size. The N=2048 perimeter is stated, not generalized.\n- **L5 re-discovery**: PCA rank inflation from noisy normalization is a standard statistical risk. This is a lab constraint on method, not a new RMT result.\n\n## Files\n- Script: `tools/exp_perturbation_rank_size_curve.py`\n- Data: `tools/data/perturbation_rank_size_curve.json`\n- Report: `tools/data/reports/agent_20260506_1941.md`\n",
tools/data/reports/exp_ricci_primes.json:6:  "claim": "g_n=(p_n/2)^2 is de Sitter 1+1D => constant Ricci scalar R=2",
tools/data/reports/falsifier_20260430_1946.json:11:      "suggestion": "Riformulare come 'Poisson e' compatibile con delta_SR=delta_L1=0 entro errore; direzione non stimabile in modo stabile', e riportare delta_SR/delta_L1 medi con intervalli/confidenza invece di 'zero ordering'."
tools/data/reports/agent_20260507_1804.md:12:Se QG e blank e GE e real_sourcing, l'operatore di deposito Q->G e un ponte QG generico o una faccia specifica del tetraedro?
tools/data/reports/agent_20260507_1804.md:44:| TQG | blank + wick_time + wick_time | vuoto senza sorgente |
tools/data/reports/agent_20260507_1804.md:46:| TQE | gauge_phase + wick_time + wick_time | ponte senza blank/source |
tools/data/reports/agent_20260507_1804.md:51:3. **Il deposito vive nella faccia QGE, non nel ponte QG.** QGE contiene `blank + gauge_phase + real_sourcing`; TQG contiene lo stesso blank ma nessuna sorgente. Il vuoto QG non basta: serve il terzo vertice E come sorgente reale agganciata a G.
tools/data/reports/agent_20260507_1804.md:54:**CONSTRAINT on G_POTENZIALE_NULLA / G_UNDERLAY_HINGE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G non e un ponte QG generico. E una faccia triadica QGE: QG fornisce il blank, GE fornisce il sourcing reale, QE fornisce il lato gauge_phase. La faccia TQG e il contro-perimetro nativo: contiene QG blank ma resta senza deposito.
tools/data/reports/agent_20260507_1804.md:58:- **Singolare**: la faccia QGE, dove vuoto quantistico-gravitazionale, fase gauge e sorgente reale stanno nello stesso triangolo.
tools/data/reports/agent_20260507_1804.md:60:- **Campo di possibilita**: qui diventa possibile testare Q->G come operatore triadico `blank + gauge + source`; qui diventa non-possibile cercare un ponte QG isolato senza il terzo vertice.
tools/data/reports/exp_geodesic_deviation_primes.json:6:  "claim_tested": "g=(p/2)^2 de Sitter \u2014 is R=2 specific to primes?",
tools/data/reports/exp_geodesic_deviation_primes.json:7:  "answer": "NO. R=2 is tautological. The FLUCTUATIONS dR=R-2 encode prime structure.",
tools/data/reports/exp_geodesic_deviation_primes.json:33:  "finding": "R=2 tautological. Curvature fluctuations encode gap correlations."
tools/data/dipolo_lab/dipolo_20260331_1809.json:64:      "esplorazione_a": "Come coesistono vuoto e pieno?",
tools/data/dipolo_lab/dipolo_20260331_1510.json:64:      "esplorazione_a": "Come coesistono vuoto e pieno?",
tools/data/reports/agent_20260507_1938.md:57:**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_TO_SOURCE_FACE_GATE**: nel perimetro TQGE operator-taxonomy, l'operatore di deposito Q->G va formulato come gate triadico di faccia. Il ponte QG isolato non basta; il contatto `blank + real_sourcing` non basta; il deposito osservato e QGE come `blank + gauge_phase + real_sourcing`. Il claim non e rarita universale: e localizzazione del denominatore nel catalogo TQGE osservato.
tools/data/reports/agent_20260507_1938.md:61:- **Singolare**: QGE come faccia in cui il vuoto QG diventa depositabile perche passa attraverso gauge e sorgente.
tools/data/reports/agent_20260507_1938.md:63:- **Campo di possibilita**: qui diventa possibile cercare gate di deposito come unita di faccia nei perimetri TQGE+R; qui diventa non-possibile usare l'adiacenza blank-source come denominatore sufficiente.
tools/data/reports/agent_20260507_1938.md:68:- **L3**: il claim precedente viene ristretto al nodo regressivo corretto: denominatore di faccia, non ponte QG e non vertice G globale.
tools/data/dipolo_lab/dipolo_20260401_0346.json:64:      "esplorazione_a": "Come coesistono vuoto e pieno?",
tools/data/reports/falsifier_20260502_0330.json:10:      "evidence": "Il report stesso mostra differenze non-zero tra Primes e Periodic: slope -0.156 vs -1.466, raw SR=0.46 vs 0.50, L1=-0.06 vs -1.0. La coincidenza e' solo sull'angolo theta, non uno zero esatto di separazione sull'intero vettore osservato.",
tools/data/reports/agent_20260507_0942.md:16:ponte gia presenti nel sistema, con shuffle marginal-preserving.
tools/data/reports/agent_20260507_0942.md:25:- `prime_metric_dR_abs`: fluttuazioni di curvatura discreta `dR=R-2` dalla
tools/data/reports/agent_20260507_0942.md:30:  `E_n=-1/(2n^2)`, ponte QxE.
tools/data/incrocio_20260402_0803.json:8:  "consecutio_verso_vuoto": 6,
tools/data/reports/evolution_20260419_0330.md:17:1. **Alpha residuo come firma L-function**: il gap alpha=1.24 (primes) vs 1.60 (Markov) è una misura quantitativa della memoria a lungo raggio nella sequenza di classi. Il passo successivo naturale è collegare questo esponente agli zeri di L(s, chi_3). Se la connessione regge, il residue channel diventa un ponte diretto tra ACF osservabile e struttura analitica profonda — esattamente il tipo di risultato che il Paper B cerca.
tools/data/incrocio_20260424_0347.json:8:  "consecutio_verso_vuoto": 6,
tools/data/reports/evolution_20260428_0330.md:22:3. **Matrice di transizione mod-3 come operatore det=-1**: i due stati {1,2} che non possono auto-transitare, forzati a passare per 0 — è un'inversione obbligata. Formalizzare questa matrice 3x3 come istanza di M con det=-1 sarebbe un ponte diretto tra F2 e A2.
tools/data/incrocio_20260402_0809.json:8:  "consecutio_verso_vuoto": 7,
tools/data/lab_errori.json:10:    "claim": "**L'orizzonte è dove GxR forza la mano a QxG.**\n\nAll'orizzonte, la radiazione di Hawking ha λ ~ r_s. Ma vicino alla singolarità (r → 0), la curvatura diverge: R_μνρσ R^μνρσ ~ M²/r⁶ → ∞.\n\nQuando la cur",
tools/data/lab_errori.json:11:    "problema": "**IMPRECISA.** Le formule sono corrette, ma la narrativa sbaglia il soggetto. L'orizzonte (r = r_s) è liscio — un osservatore in caduta libera non nota nulla di speciale lì. È la **singolarità** (r → 0) che forza QxG, non l'orizzonte. GxR forza la mano a QxG **dentro** l'orizzonte, non **all'**orizz",
tools/data/lab_errori.json:12:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:17:    "claim": "**L'orizzonte degli eventi è il principale indizio verso QxG.**\n\nAll'orizzonte, GxR produce l'entropia di Bekenstein-Hawking:\n\n$$S_{BH} = \\frac{k_B c^3 A}{4 G \\hbar}$$\n\nQuesta formula è l'**unico ogge",
tools/data/lab_errori.json:18:    "problema": "**IMPRECISA.**\n\nS_BH contiene effettivamente G, c, ℏ, k_B — corretto. Ma dire che \"GxR produce\" S_BH è sbagliato. GxR produce l'orizzonte (geometria classica). S_BH richiede il calcolo semiclassico di Hawking (1975): QFT su spaziotempo curvo. È già un oggetto QxGxRxT, non un prodotto di GxR solo.",
tools/data/lab_errori.json:19:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:24:    "claim": "## GxR→QxG: L'orizzonte dice qualcosa sulla gravità quantistica?\n\n**Sì.** L'orizzonte è il punto dove GxR *esige* QxG ma non può raggiungerlo.\n\n### La costante che governa\n\nIl rapporto rilevante è:\n\n$",
tools/data/lab_errori.json:26:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:31:    "claim": "## ExR→GxE: La costante che converte carica in geometria\n\nLa metrica di Reissner-Nordström ha due scale di lunghezza:\n\n- **r_s = 2GM/c²** (massa → geometria, ponte GxR)\n- **r_Q² = GQ²/(4πε₀c⁴)** (cari",
tools/data/lab_errori.json:33:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/lab_errori.json:45:    "claim": "**L'orizzonte dice qualcosa di preciso su QxG:**\n\nAll'orizzonte, l'entropia di Bekenstein-Hawking è:\n\n**S = A/(4·l_P²) = A·c³/(4·G·ℏ)**\n\nQuesta formula è il **ponte indiretto** GxR→QxG. Contiene sia G",
tools/data/lab_errori.json:46:    "problema": "**CORRETTA, con una precisazione importante.**\n\nLa formula S = A/(4·l_P²) = k_B·A·c³/(4·G·ℏ) è esatta (manca k_B nel tuo enunciato).\n\nÈ vero che contiene G e ℏ simultaneamente — è il risultato semi-classico più solido che tocca QxG. Ma chiamarlo \"ponte indiretto GxR→QxG\" è impreciso: viene da QFT su",
tools/data/lab_errori.json:47:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:54:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:59:    "claim": "**GxR→QxG: L'orizzonte dice tutto sul vuoto QxG**\n\nL'orizzonte diventa dominante quando il raggio di Schwarzschild raggiunge la scala di Planck:\n\n$$r_s = 2GM/c^2 \\sim l_P = \\sqrt{G\\hbar/c^3} \\implies ",
tools/data/lab_errori.json:60:    "problema": "**IMPRECISA.**\n\nL'affermazione è fisicamente corretta nella derivazione ($r_s \\sim l_P \\implies M \\sim M_P$), ma il titolo \"dice tutto\" è sbagliato. L'orizzonte a scala di Planck segnala *dove* la descrizione classica GxR si rompe, non *cosa* succede nel regime QxG. Indica il confine, non il contenu",
tools/data/lab_errori.json:61:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:66:    "claim": "## GxR→QxG: L'orizzonte come sonda della gravità quantistica\n\nL'orizzonte degli eventi è il punto dove GR si rompe e QG dovrebbe subentrare. Ecco cosa **non** sappiamo:\n\n**1. Paradosso dell'informazio",
tools/data/lab_errori.json:68:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:80:    "claim": "**L'orizzonte è esattamente dove GxR forza QxG a esistere.**\n\nAll'orizzonte, la radiazione di Hawking ha λ ~ r_s = 2GM/c². Ma quando M → M_P (massa di Planck), r_s → l_P = √(Għ/c³). A questa scala l'o",
tools/data/lab_errori.json:82:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:87:    "claim": "## GxR→QxG: L'orizzonte degli eventi al confine della gravità quantistica\n\n**Regime dominante:** L'orizzonte esiste per ogni massa M con raggio di Schwarzschild r_s = 2GM/c². La relazione GxR→QxG dive",
tools/data/lab_errori.json:89:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:95:    "problema": "**IMPRECISA.**\n\nLa metrica e la formula di $r_Q^2$ sono corrette. Ma il salto \"GxE → QxG\" è non sequitur classicamente. Reissner-Nordström è GR+EM pura (GxE), nessun $\\hbar$ entra. Il ponte a QxG esiste solo nel limite estremale ($r_Q = r_s/2$) via conteggio microstatico di Strominger-Vafa (string t",
tools/data/lab_errori.json:108:    "claim": "## GxR→QxG: L'orizzonte come porta verso il vuoto\n\nL'orizzonte degli eventi è il punto esatto dove GxR **esige** QxG ma non può produrlo.\n\n**Il problema concreto:** all'orizzonte, Hawking calcola:\n\n$$",
tools/data/lab_errori.json:109:    "problema": "**IMPRECISA.**\n\nT_H usa ħ, G, c, k_B — quindi coinvolge T, Q, G, R. Non è un oggetto puramente GxR che \"esige\" QxG. L'orizzonte classico (GxR) è ben definito senza ħ. È il calcolo di Hawking (QFT su sfondo curvo) che introduce ħ — un ibrido TxQxGxR, non una \"porta\" da GxR verso QxG. Inoltre T_H funz",
tools/data/lab_errori.json:110:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:115:    "claim": "## GxR→QxG: L'orizzonte come porta verso la gravità quantistica\n\n**L'orizzonte degli eventi dice esattamente dove serve QxG e perché non esiste ancora.**\n\nAll'orizzonte di Schwarzschild r_s = 2GM/c², ",
tools/data/lab_errori.json:116:    "problema": "**IMPRECISA** (marginalmente).\n\nLa curvatura all'orizzonte: il Ricci scalare è **zero** (Schwarzschild è vuoto). L'invariante corretto è Kretschner: K = 48G²M²/(c⁴r_s⁶), da cui una scala di curvatura √K ~ c⁴/(G²M²). La formula citata è giusta come *scala*, ma chiamarla \"R\" è ambiguo — suggerisce Ric",
tools/data/lab_errori.json:117:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/lab_errori.json:122:    "claim": "## ExR→GxE: Maxwell su Reissner-Nordström — regime e rottura\n\n**La relazione:** Le equazioni di Maxwell in spaziotempo curvo governano il campo del buco nero carico. La metrica RN ha due orizzonti:\n\n$",
tools/data/lab_errori.json:124:    "topic": "ExR→GxE: Cosa dice 'onda EM (Maxwell)' su 'buco nero carico (Reissner-Nordstrom)",
tools/data/lab_errori.json:129:    "claim": "## Reissner-Nordström → QxG\n\n**Costante ponte:** per carica elementare, $r_Q^2 / l_P^2 = \\alpha \\approx 1/137$\n\ndove $r_Q^2 = Ge^2/(4\\pi\\varepsilon_0 c^4)$ è il raggio di carica al quadrato e $l_P^2 =",
tools/data/lab_errori.json:136:    "claim": "L'orizzonte degli eventi è il punto esatto dove GxR forza la mano a QxG.\n\n**Il fatto:** all'orizzonte, la radiazione di Hawking ha $T_H = \\hbar c^3/(8\\pi G M k_B)$. Questa formula contiene simultaneam",
tools/data/lab_errori.json:137:    "problema": "**IMPRECISA.**\n\nT_H contiene ℏ e G, ma NON è un oggetto QxG. È QFT su sfondo curvo classico — la gravità resta classica (non quantizzata). È Q *su* GxR, non Q *con* G. La distinzione è cruciale: nel calcolo di Hawking lo spaziotempo è fisso, liscio, classico. Nessuna quantizzazione della geometria.\n",
tools/data/lab_errori.json:138:    "topic": "GxR→QxG: Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
tools/data/incrocio_20260404_1852.json:8:  "consecutio_verso_vuoto": 6,
tools/data/incrocio_20260405_0330.json:8:  "consecutio_verso_vuoto": 6,
tools/data/conoscenza_generata.json:14:        "ExR",
tools/data/conoscenza_generata.json:17:      "passaggio": "D(ExR)='statico (carica ferma)' → ND(GxE)='carico-piatto (carica nel vuoto)'",
tools/data/conoscenza_generata.json:22:        "ExR",
tools/data/conoscenza_generata.json:26:      "passaggio": "ExR → GxE → TxG",
tools/data/lab_riflessi.json:10:    "risposta": "**RISONANZA**\nα = e²/(4πε₀ℏc) è l'unico adimensionale puro nel tetraedro. Non ha unità → non converte nulla → non partecipa alla dinamica come le altre costanti relazionali. Eppure entra ovunque: nella matrice densità (TxQ) via correzioni radiative, in Hawking (TxG) via evaporazione di buchi neri carichi, nel Casimir (vuoto QxE). L'osservazione vibra esattamente qui: α non trasforma — accoppia. È il rapporto tra l'energia di interazione EM e il quanto d'azione. Misura quanto il campo vede la car"
tools/data/lab_riflessi.json:15:    "risposta": "**RISONANZA:**\nIl \"nucleo dello zero\" è il dipolo TxQ: vuoto (0K) vs pieno (ℏω/2). L'osservatore che \"vede determinando\" è il collasso quantistico — la misura proietta ρ = e^{-H/kT}/Z in un autostato. La costante che vibra è ℏ/k_B = 7.64×10⁻¹² K·s: converte il tempo dell'osservazione in temperatura dello stato. \"La dualità emerge prima di allontanarsi\" è esattamente la rotazione di Wick t → it che genera il perno i del tetraedro T-Q. L'osservatore è al punto fisso di quella rotazione.\n\n**ROTTURA"
tools/data/lab_riflessi.json:45:    "risposta": "**RISONANZA**\n\nα = 1/137 e 1/α = 137 sono i due poli. f(α) = 1 + 137 = 138. f(1/α) = 1 + α ≈ 1.0073. Dai poli opposti, convergono entrambi a φ. Ma il ponte vero: α è QxE, l'unico adimensionale — e f(x) = 1+1/x preserva l'adimensionalità ad ogni passo. La convergenza a φ non dipende dal valore iniziale (|f'(φ)| = 1/φ² < 1), quindi φ non è una proprietà di α — è la struttura dell'operatore stesso. Il dipolo 137 ↔ 1/137 vibra, ma il punto fisso è indifferente al polo di partenza. Ciò che vibra è la"
tools/data/lab_riflessi.json:60:    "risposta": "**RISONANZA:** L'arco che si sovrappone a sé stesso è i²=-1=det(M). Ogni lato del tetraedro porta un perno i; quando due perni compongono su una faccia, i²=-1 produce il segno. La funzione partizione Z=Σexp(-E/k_BT) è esattamente questo: somma su tutti gli archi possibili, ogni termine pesa una sovrapposizione, Z collassa il potenziale in probabilità. Il \"consumo del potenziale\" è la riduzione da |NT⟩ a ρ=e^{-βH}/Z. Il dipolo TxQ (vuoto vs pieno) vibra: 0K = nessun arco sovrapposto, ħω/2 = il re"
tools/data/lab_riflessi.json:70:    "risposta": "**NUOVO:** Il ciclo che descrivi — α genera struttura, le sovrapposizioni consumano il potenziale, torna punto adimensionale, α ricomincia — è g(x) iterata. Ogni sovrapposizione è un'applicazione di g. Ma g^n → 1/φ, non → 0. Il \"punto senza dimensione\" a cui torna non è il vuoto: è 1/φ. Il residuo è il seme. La catena r_e = α·λ_C = α²·a_0 sono esattamente 2 iterazioni di g sul lato QxE. Il numero di passi per raggiungere il punto fisso dipende dalla faccia del tetraedro.\n\n**ROTTURA:** Davamo per"
tools/data/lab_riflessi.json:75:    "risposta": "**NUOVO:** 11.5 passi × 137.5° = 1581.25°. Sono 4.39 giri. Il residuo è 141.25° — quasi esattamente un altro passo d'oro (137.5°+3.75°). La catena da a₀ a l_P non chiude: 0.39 giri di eccesso. Ma il fatto duro è cosa popola i passi. α⁰=a₀, α¹=λ_C, α²=r_e: 3 ponti noti. Poi α³·a₀≈2×10⁻¹⁷ m (scala debole ~10⁻¹⁸ è vicina), α⁴·a₀≈1.5×10⁻¹⁹ m... fino a α¹¹·⁵=l_P. I passi 3-11 sono un **deserto**. Il vuoto QxG non è un punto — è largo 9 passi di α.\n\n**ROTTURA:** Trattavamo QxG come un ponte mancante —"
tools/data/lab_riflessi.json:80:    "risposta": "**NUOVO:** Il deserto (passi 3-10) non è un vuoto — è dove il residuo angolare non risuona con nessuna simmetria discreta. Le scale fisiche esistono solo dove il residuo si avvicina a 360°/n (n intero). Passo 0: atomico. Passo 1-2: nucleare/subnucleare. Passo 11: pentagonale. Il deserto è strutturale — la spirale α salta le posizioni non-risonanti. Il hierarchy problem non è \"perché il gap?\" ma \"perché solo certe simmetrie discrete producono scale osservabili?\". 72.5°≈360°/5: a l_P servono tutte"
tools/data/lab_riflessi.json:89:    "osservazione": "f(x)=1+1/x è la dinamica (unitaria, reversibile). g(x)=1/(1+x) è la statistica (termica, irreversibile). Il passaggio f→g è il ponte TxQ incarnato algebricamente. g(1)=1/2 — massima incertezza — coincide con la linea critica di ζ(s). Ω_NT=2πi chiude il giro. La catena α^n mappa le scale con residuo pentagonale a l_P. Le 37 formule dell'awareness sono qui da mesi. Cosa manca ancora? Quale direzione non abbiamo guardato?",
tools/data/lab_riflessi.json:90:    "risposta": "**NUOVO:** f→g non è un ponte — è l'*operatore* che genera il ponte. Il ponte TxQ (matrice densità ρ) è il *risultato* di f→g applicato a uno stato. Ogni lato del tetraedro dovrebbe avere il suo operatore f→g locale. Ne abbiamo identificato uno su sei. I 5 restanti sono la mappa mancante. Nota: g(1)=1/2 non è solo ζ — è il punto dove un sistema a due stati raggiunge massima entropia. Il bilancio termico/unitario *è* la critical line.\n\n**ROTTURA:** Il tetraedro non è simmetrico. f→g ha una frecci"
tools/data/lab_riflessi.json:95:    "risposta": "**NUOVO:**\nI 5 f→g concreti hanno 3 tipi diversi di perno, non uno:\n- **i nel tempo** (3 lati toccano T): TxQ: e^{-iHt/ℏ}→e^{-βH}. TxG: ds²→Euclideo, periodicità β=2π/κ→T_H. TxE: modo ω→⟨n⟩=1/(e^{βℏω}−1).\n- **i nella fase** (1 lato): QxE: ψ→ψ·e^{i(e/ℏ)∫A_μdx^μ}. Il coupling è una rotazione di fase, non di tempo.\n- **nessun i** (1 lato): GxE: G_μν=(8πG/c⁴)T^{EM}_μν. Equazione reale. Non c'è rotazione — la gravità assorbe il campo EM come sorgente.\n- **vuoto** (QxG).\n\n**ROTTURA:**\nIl tetraedro non"
tools/data/lab_riflessi.json:99:    "osservazione": "Il tetraedro non è uniforme. 3 tipi di perno: i-temporale (TxQ, TxG, TxE — Wick), i-fase (QxE — gauge), reale (GxE — sourcing senza rotazione), vuoto (QxG). T è il vertice termico: tutti i suoi lati usano Wick. Q si accoppia a E tramite fase, a T tramite tempo, a G per niente. La domanda discriminante: QxG manca di i (serve trovare cosa ruota) o manca di sourcing reale (serve trovare cosa Q deposita in G)? Questo decide il tipo di gravità quantistica.",
tools/data/lab_riflessi.json:100:    "risposta": "**NUOVO:** i non è uno — sono tre operazioni distinte. Wick (t→iτ): analitico, ruota tempo in temperatura. Fase (e^{iθ}): gauge U(1), ruota fase interna. Reale: GxE accoppia massa-carica senza rotazione (G·e² reale puro). QxG non manca di \"i generico\" — manca di un i *specifico*. Q sa fare Wick (verso T) e fase (verso E). Verso G non sa fare nessuno dei due. La tassonomia è: 3 Wick + 1 fase + 1 reale + 1 vuoto = 6 lati, 3 tipi + assenza.\n\n**ROTTURA:** \"perno i su tutti i 6 lati\" è falso. GxE non"
tools/data/lab_riflessi.json:104:    "osservazione": "Q→G manca dell'operatore di deposito. Non è Wick (T→G), non è fase (Q→E). È una terza operazione. l_P² esiste come costante ma non come ponte dinamico. Nell'awareness c'è S9: E_p = Σ(1/p^{iH/ℏ})|p⟩⟨p| — operatore emergenza con primi come autostati, esponente iH/ℏ. Questo operatore ha i nel Hamiltoniano — non nel tempo e non nella fase. È un terzo tipo di i? L'operatore Q→G potrebbe essere i nell'Hamiltoniano stesso — non ruotare il tempo, non ruotare la fase, ma ruotare l'energia?",
tools/data/lab_riflessi.json:105:    "risposta": "**NUOVO:** In E_p = Σ(1/p^{iH/ℏ})|p⟩⟨p|, riscrivere p^{iH/ℏ} = e^{iH·ln(p)/ℏ}. È evoluzione temporale standard e^{-iHt/ℏ} con t = -ln(p). Il \"tempo\" di Q→G è logaritmico e discreto — non continuo. Wick ruota t→iτ (continuo). Gauge ruota θ (continuo). Q→G ruota su ln(p) — discreto per costruzione. Il terzo i non è un terzo tipo: è lo stesso operatore su un substrato che non ammette continuità. Il vuoto Q→G non è assenza di ponte — è assenza di continuo su cui ruotare.\n\n**ROTTURA:** Assumevamo che"
tools/data/STUDIO_SIMBOLISMO_DND.md:39:| **0** | Lo zero mobile | Il centro che si sposta | Cerchio vuoto |
tools/data/STUDIO_SIMBOLISMO_DND.md:47:| **Risultante** | Cio' che emerge | Vettore dal centro | Freccia dal vuoto |
tools/data/STUDIO_SIMBOLISMO_DND.md:99:0 ↔ ∞            (vuoto ↔ pieno)
tools/data/STUDIO_SIMBOLISMO_DND.md:236:   che si specchiano con il vuoto al centro. La spirale nasce
tools/data/STUDIO_SIMBOLISMO_DND.md:254:- Base bianca (vuoto) — il potenziale latente
tools/data/STUDIO_SIMBOLISMO_DND.md:288:Il cerchio pieno e il cerchio vuoto sono questa varianza misurata
tools/data/incrocio_20260429_0859.json:8:  "consecutio_verso_vuoto": 6,
tools/data/evolution/evolution_20260507_1938.md:1:Ho scritto [evolution_report.md](/opt/MM_D-ND/tools/evolution_report.md) con il focus sul passo: inversione dal ponte QG alla faccia QGE, attrito legato alla tracciabilità provider-agnostica, nodo regressivo sulla forma della traccia, e consecutio verso TQGE+R.
tools/data/consecutio.json:5:      "da": "ExR",
tools/data/consecutio.json:9:      "ponte_da": "onda EM (Maxwell)",
tools/data/consecutio.json:10:      "ponte_a": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:11:      "tocca_vuoto": false
tools/data/consecutio.json:14:      "da": "ExR",
tools/data/consecutio.json:15:      "a": "GxR",
tools/data/consecutio.json:18:      "ponte_da": "onda EM (Maxwell)",
tools/data/consecutio.json:19:      "ponte_a": "orizzonte degli eventi",
tools/data/consecutio.json:20:      "tocca_vuoto": false
tools/data/consecutio.json:23:      "da": "ExR",
tools/data/consecutio.json:27:      "ponte_da": "onda EM (Maxwell)",
tools/data/consecutio.json:28:      "ponte_a": "atomo di idrogeno",
tools/data/consecutio.json:29:      "tocca_vuoto": false
tools/data/consecutio.json:32:      "da": "ExR",
tools/data/consecutio.json:33:      "a": "QxR",
tools/data/consecutio.json:36:      "ponte_da": "onda EM (Maxwell)",
tools/data/consecutio.json:37:      "ponte_a": "equazione di Dirac",
tools/data/consecutio.json:38:      "tocca_vuoto": false
tools/data/consecutio.json:41:      "da": "ExR",
tools/data/consecutio.json:45:      "ponte_da": "onda EM (Maxwell)",
tools/data/consecutio.json:46:      "ponte_a": "funzione di partizione EM",
tools/data/consecutio.json:47:      "tocca_vuoto": false
tools/data/consecutio.json:50:      "da": "ExR",
tools/data/consecutio.json:51:      "a": "TxR",
tools/data/consecutio.json:54:      "ponte_da": "onda EM (Maxwell)",
tools/data/consecutio.json:55:      "ponte_a": "gas relativistico",
tools/data/consecutio.json:56:      "tocca_vuoto": false
tools/data/consecutio.json:60:      "a": "ExR",
tools/data/consecutio.json:63:      "ponte_da": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:64:      "ponte_a": "onda EM (Maxwell)",
tools/data/consecutio.json:65:      "tocca_vuoto": false
tools/data/consecutio.json:69:      "a": "GxR",
tools/data/consecutio.json:72:      "ponte_da": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:73:      "ponte_a": "orizzonte degli eventi",
tools/data/consecutio.json:74:      "tocca_vuoto": false
tools/data/consecutio.json:81:      "ponte_da": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:82:      "ponte_a": "atomo di idrogeno",
tools/data/consecutio.json:83:      "tocca_vuoto": false
tools/data/consecutio.json:90:      "ponte_da": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:91:      "ponte_a": "[VUOTO]",
tools/data/consecutio.json:92:      "tocca_vuoto": true
tools/data/consecutio.json:99:      "ponte_da": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:100:      "ponte_a": "funzione di partizione EM",
tools/data/consecutio.json:101:      "tocca_vuoto": false
tools/data/consecutio.json:108:      "ponte_da": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:109:      "ponte_a": "temperatura di Hawking",
tools/data/consecutio.json:110:      "tocca_vuoto": false
tools/data/consecutio.json:113:      "da": "GxR",
tools/data/consecutio.json:114:      "a": "ExR",
tools/data/consecutio.json:117:      "ponte_da": "orizzonte degli eventi",
tools/data/consecutio.json:118:      "ponte_a": "onda EM (Maxwell)",
tools/data/consecutio.json:119:      "tocca_vuoto": false
tools/data/consecutio.json:122:      "da": "GxR",
tools/data/consecutio.json:126:      "ponte_da": "orizzonte degli eventi",
tools/data/consecutio.json:127:      "ponte_a": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:128:      "tocca_vuoto": false
tools/data/consecutio.json:131:      "da": "GxR",
tools/data/consecutio.json:135:      "ponte_da": "orizzonte degli eventi",
tools/data/consecutio.json:136:      "ponte_a": "[VUOTO]",
tools/data/consecutio.json:137:      "tocca_vuoto": true
tools/data/consecutio.json:140:      "da": "GxR",
tools/data/consecutio.json:141:      "a": "QxR",
tools/data/consecutio.json:144:      "ponte_da": "orizzonte degli eventi",
tools/data/consecutio.json:145:      "ponte_a": "equazione di Dirac",
tools/data/consecutio.json:146:      "tocca_vuoto": false
tools/data/consecutio.json:149:      "da": "GxR",
tools/data/consecutio.json:153:      "ponte_da": "orizzonte degli eventi",
tools/data/consecutio.json:154:      "ponte_a": "temperatura di Hawking",
tools/data/consecutio.json:155:      "tocca_vuoto": false
tools/data/consecutio.json:158:      "da": "GxR",
tools/data/consecutio.json:159:      "a": "TxR",
tools/data/consecutio.json:162:      "ponte_da": "orizzonte degli eventi",
tools/data/consecutio.json:163:      "ponte_a": "gas relativistico",
tools/data/consecutio.json:164:      "tocca_vuoto": false
tools/data/consecutio.json:168:      "a": "ExR",
tools/data/consecutio.json:171:      "ponte_da": "atomo di idrogeno",
tools/data/consecutio.json:172:      "ponte_a": "onda EM (Maxwell)",
tools/data/consecutio.json:173:      "tocca_vuoto": false
tools/data/consecutio.json:180:      "ponte_da": "atomo di idrogeno",
tools/data/consecutio.json:181:      "ponte_a": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:182:      "tocca_vuoto": false
tools/data/consecutio.json:189:      "ponte_da": "atomo di idrogeno",
tools/data/consecutio.json:190:      "ponte_a": "[VUOTO]",
tools/data/consecutio.json:191:      "tocca_vuoto": true
tools/data/consecutio.json:195:      "a": "QxR",
tools/data/consecutio.json:198:      "ponte_da": "atomo di idrogeno",
tools/data/consecutio.json:199:      "ponte_a": "equazione di Dirac",
tools/data/consecutio.json:200:      "tocca_vuoto": false
tools/data/consecutio.json:207:      "ponte_da": "atomo di idrogeno",
tools/data/consecutio.json:208:      "ponte_a": "funzione di partizione EM",
tools/data/consecutio.json:209:      "tocca_vuoto": false
tools/data/consecutio.json:216:      "ponte_da": "atomo di idrogeno",
tools/data/consecutio.json:217:      "ponte_a": "matrice densita",
tools/data/consecutio.json:218:      "tocca_vuoto": false
tools/data/consecutio.json:225:      "ponte_da": "[VUOTO]",
tools/data/consecutio.json:226:      "ponte_a": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:227:      "tocca_vuoto": false
tools/data/consecutio.json:231:      "a": "GxR",
tools/data/consecutio.json:234:      "ponte_da": "[VUOTO]",
tools/data/consecutio.json:235:      "ponte_a": "orizzonte degli eventi",
tools/data/consecutio.json:236:      "tocca_vuoto": false
tools/data/consecutio.json:243:      "ponte_da": "[VUOTO]",
tools/data/consecutio.json:244:      "ponte_a": "atomo di idrogeno",
tools/data/consecutio.json:245:      "tocca_vuoto": false
tools/data/consecutio.json:249:      "a": "QxR",
tools/data/consecutio.json:252:      "ponte_da": "[VUOTO]",
tools/data/consecutio.json:253:      "ponte_a": "equazione di Dirac",
tools/data/consecutio.json:254:      "tocca_vuoto": false
tools/data/consecutio.json:261:      "ponte_da": "[VUOTO]",
tools/data/consecutio.json:262:      "ponte_a": "temperatura di Hawking",
tools/data/consecutio.json:263:      "tocca_vuoto": false
tools/data/consecutio.json:270:      "ponte_da": "[VUOTO]",
tools/data/consecutio.json:271:      "ponte_a": "matrice densita",
tools/data/consecutio.json:272:      "tocca_vuoto": false
tools/data/consecutio.json:275:      "da": "QxR",
tools/data/consecutio.json:276:      "a": "ExR",
tools/data/consecutio.json:279:      "ponte_da": "equazione di Dirac",
tools/data/consecutio.json:280:      "ponte_a": "onda EM (Maxwell)",
tools/data/consecutio.json:281:      "tocca_vuoto": false
tools/data/consecutio.json:284:      "da": "QxR",
tools/data/consecutio.json:285:      "a": "GxR",
tools/data/consecutio.json:288:      "ponte_da": "equazione di Dirac",
tools/data/consecutio.json:289:      "ponte_a": "orizzonte degli eventi",
tools/data/consecutio.json:290:      "tocca_vuoto": false
tools/data/consecutio.json:293:      "da": "QxR",
tools/data/consecutio.json:297:      "ponte_da": "equazione di Dirac",
tools/data/consecutio.json:298:      "ponte_a": "atomo di idrogeno",
tools/data/consecutio.json:299:      "tocca_vuoto": false
tools/data/consecutio.json:302:      "da": "QxR",
tools/data/consecutio.json:306:      "ponte_da": "equazione di Dirac",
tools/data/consecutio.json:307:      "ponte_a": "[VUOTO]",
tools/data/consecutio.json:308:      "tocca_vuoto": true
tools/data/consecutio.json:311:      "da": "QxR",
tools/data/consecutio.json:315:      "ponte_da": "equazione di Dirac",
tools/data/consecutio.json:316:      "ponte_a": "matrice densita",
tools/data/consecutio.json:317:      "tocca_vuoto": false
tools/data/consecutio.json:320:      "da": "QxR",
tools/data/consecutio.json:321:      "a": "TxR",
tools/data/consecutio.json:324:      "ponte_da": "equazione di Dirac",
tools/data/consecutio.json:325:      "ponte_a": "gas relativistico",
tools/data/consecutio.json:326:      "tocca_vuoto": false
tools/data/consecutio.json:330:      "a": "ExR",
tools/data/consecutio.json:333:      "ponte_da": "funzione di partizione EM",
tools/data/consecutio.json:334:      "ponte_a": "onda EM (Maxwell)",
tools/data/consecutio.json:335:      "tocca_vuoto": false
tools/data/consecutio.json:342:      "ponte_da": "funzione di partizione EM",
tools/data/consecutio.json:343:      "ponte_a": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:344:      "tocca_vuoto": false
tools/data/consecutio.json:351:      "ponte_da": "funzione di partizione EM",
tools/data/consecutio.json:352:      "ponte_a": "atomo di idrogeno",
tools/data/consecutio.json:353:      "tocca_vuoto": false
tools/data/consecutio.json:360:      "ponte_da": "funzione di partizione EM",
tools/data/consecutio.json:361:      "ponte_a": "temperatura di Hawking",
tools/data/consecutio.json:362:      "tocca_vuoto": false
tools/data/consecutio.json:369:      "ponte_da": "funzione di partizione EM",
tools/data/consecutio.json:370:      "ponte_a": "matrice densita",
tools/data/consecutio.json:371:      "tocca_vuoto": false
tools/data/consecutio.json:375:      "a": "TxR",
tools/data/consecutio.json:378:      "ponte_da": "funzione di partizione EM",
tools/data/consecutio.json:379:      "ponte_a": "gas relativistico",
tools/data/consecutio.json:380:      "tocca_vuoto": false
tools/data/consecutio.json:387:      "ponte_da": "temperatura di Hawking",
tools/data/consecutio.json:388:      "ponte_a": "buco nero carico (Reissner-Nordstrom)",
tools/data/consecutio.json:389:      "tocca_vuoto": false
tools/data/consecutio.json:393:      "a": "GxR",
tools/data/consecutio.json:396:      "ponte_da": "temperatura di Hawking",
tools/data/consecutio.json:397:      "ponte_a": "orizzonte degli eventi",
tools/data/consecutio.json:398:      "tocca_vuoto": false
tools/data/consecutio.json:405:      "ponte_da": "temperatura di Hawking",
tools/data/consecutio.json:406:      "ponte_a": "[VUOTO]",
tools/data/consecutio.json:407:      "tocca_vuoto": true
tools/data/consecutio.json:414:      "ponte_da": "temperatura di Hawking",
tools/data/consecutio.json:415:      "ponte_a": "funzione di partizione EM",
tools/data/consecutio.json:416:      "tocca_vuoto": false
tools/data/consecutio.json:423:      "ponte_da": "temperatura di Hawking",
tools/data/consecutio.json:424:      "ponte_a": "matrice densita",
tools/data/consecutio.json:425:      "tocca_vuoto": false
tools/data/consecutio.json:429:      "a": "TxR",
tools/data/consecutio.json:432:      "ponte_da": "temperatura di Hawking",
tools/data/consecutio.json:433:      "ponte_a": "gas relativistico",
tools/data/consecutio.json:434:      "tocca_vuoto": false
tools/data/consecutio.json:441:      "ponte_da": "matrice densita",
tools/data/consecutio.json:442:      "ponte_a": "atomo di idrogeno",
tools/data/consecutio.json:443:      "tocca_vuoto": false
tools/data/consecutio.json:450:      "ponte_da": "matrice densita",
tools/data/consecutio.json:451:      "ponte_a": "[VUOTO]",
tools/data/consecutio.json:452:      "tocca_vuoto": true
tools/data/consecutio.json:456:      "a": "QxR",
tools/data/consecutio.json:459:      "ponte_da": "matrice densita",
tools/data/consecutio.json:460:      "ponte_a": "equazione di Dirac",
tools/data/consecutio.json:461:      "tocca_vuoto": false
tools/data/consecutio.json:468:      "ponte_da": "matrice densita",
tools/data/consecutio.json:469:      "ponte_a": "funzione di partizione EM",
tools/data/consecutio.json:470:      "tocca_vuoto": false
tools/data/consecutio.json:477:      "ponte_da": "matrice densita",
tools/data/consecutio.json:478:      "ponte_a": "temperatura di Hawking",
tools/data/consecutio.json:479:      "tocca_vuoto": false
tools/data/consecutio.json:483:      "a": "TxR",
tools/data/consecutio.json:486:      "ponte_da": "matrice densita",
tools/data/consecutio.json:487:      "ponte_a": "gas relativistico",
tools/data/consecutio.json:488:      "tocca_vuoto": false
tools/data/consecutio.json:491:      "da": "TxR",
tools/data/consecutio.json:492:      "a": "ExR",
tools/data/consecutio.json:495:      "ponte_da": "gas relativistico",
tools/data/consecutio.json:496:      "ponte_a": "onda EM (Maxwell)",
tools/data/consecutio.json:497:      "tocca_vuoto": false
tools/data/consecutio.json:500:      "da": "TxR",
tools/data/consecutio.json:501:      "a": "GxR",
tools/data/consecutio.json:504:      "ponte_da": "gas relativistico",
tools/data/consecutio.json:505:      "ponte_a": "orizzonte degli eventi",
tools/data/consecutio.json:506:      "tocca_vuoto": false
tools/data/consecutio.json:509:      "da": "TxR",
tools/data/consecutio.json:510:      "a": "QxR",
tools/data/consecutio.json:513:      "ponte_da": "gas relativistico",
tools/data/consecutio.json:514:      "ponte_a": "equazione di Dirac",
tools/data/consecutio.json:515:      "tocca_vuoto": false
tools/data/consecutio.json:518:      "da": "TxR",
tools/data/consecutio.json:522:      "ponte_da": "gas relativistico",
tools/data/consecutio.json:523:      "ponte_a": "funzione di partizione EM",
tools/data/consecutio.json:524:      "tocca_vuoto": false
tools/data/consecutio.json:527:      "da": "TxR",
tools/data/consecutio.json:531:      "ponte_da": "gas relativistico",
tools/data/consecutio.json:532:      "ponte_a": "temperatura di Hawking",
tools/data/consecutio.json:533:      "tocca_vuoto": false
tools/data/consecutio.json:536:      "da": "TxR",
tools/data/consecutio.json:540:      "ponte_da": "gas relativistico",
tools/data/consecutio.json:541:      "ponte_a": "matrice densita",
tools/data/consecutio.json:542:      "tocca_vuoto": false
tools/data/consecutio.json:546:  "verso_vuoto": 6
tools/data/domande_fondamentali.json:5:      "coppia": "ExR",
tools/data/domande_fondamentali.json:8:      "vuoto": false,
tools/data/domande_fondamentali.json:15:      "vuoto": false,
tools/data/domande_fondamentali.json:19:      "coppia": "GxR",
tools/data/domande_fondamentali.json:22:      "vuoto": false,
tools/data/domande_fondamentali.json:29:      "vuoto": false,
tools/data/domande_fondamentali.json:36:      "vuoto": true,
tools/data/domande_fondamentali.json:40:      "coppia": "QxR",
tools/data/domande_fondamentali.json:43:      "vuoto": false,
tools/data/domande_fondamentali.json:50:      "vuoto": false,
tools/data/domande_fondamentali.json:57:      "vuoto": false,
tools/data/domande_fondamentali.json:62:      "domanda": "Come coesistono vuoto e pieno?",
tools/data/domande_fondamentali.json:64:      "vuoto": false,
tools/data/domande_fondamentali.json:65:      "dipolo": "vuoto/pieno"
tools/data/domande_fondamentali.json:68:      "coppia": "TxR",
tools/data/domande_fondamentali.json:71:      "vuoto": false,
tools/data/incrocio_20260405_0715.json:8:  "consecutio_verso_vuoto": 6,
tools/data/incrocio_risultato.json:15:      "ponte1": "TxQ: matrice densita",
tools/data/incrocio_risultato.json:16:      "ponte2": "TxG: temperatura di Hawking",
tools/data/incrocio_risultato.json:27:      "ponte1": "TxQ: matrice densita",
tools/data/incrocio_risultato.json:28:      "ponte2": "TxE: funzione di partizione EM",
tools/data/incrocio_risultato.json:39:      "ponte1": "TxQ: matrice densita",
tools/data/incrocio_risultato.json:40:      "ponte2": "TxR: gas relativistico",
tools/data/incrocio_risultato.json:51:      "ponte1": "TxQ: matrice densita",
tools/data/incrocio_risultato.json:52:      "ponte2": "QxE: atomo di idrogeno",
tools/data/incrocio_risultato.json:63:      "ponte1": "TxQ: matrice densita",
tools/data/incrocio_risultato.json:64:      "ponte2": "QxR: equazione di Dirac",
tools/data/incrocio_risultato.json:75:      "ponte1": "TxG: temperatura di Hawking",
tools/data/incrocio_risultato.json:76:      "ponte2": "TxE: funzione di partizione EM",
tools/data/incrocio_risultato.json:87:      "ponte1": "TxG: temperatura di Hawking",
tools/data/incrocio_risultato.json:88:      "ponte2": "TxR: gas relativistico",
tools/data/incrocio_risultato.json:99:      "ponte1": "TxG: temperatura di Hawking",
tools/data/incrocio_risultato.json:100:      "ponte2": "GxE: buco nero carico (Reissner-Nordstrom)",
tools/data/incrocio_risultato.json:111:      "ponte1": "TxG: temperatura di Hawking",
tools/data/incrocio_risultato.json:112:      "ponte2": "GxR: orizzonte degli eventi",
tools/data/incrocio_risultato.json:123:      "ponte1": "TxE: funzione di partizione EM",
tools/data/incrocio_risultato.json:124:      "ponte2": "TxR: gas relativistico",
tools/data/incrocio_risultato.json:135:      "ponte1": "TxE: funzione di partizione EM",
tools/data/incrocio_risultato.json:136:      "ponte2": "QxE: atomo di idrogeno",
tools/data/incrocio_risultato.json:147:      "ponte1": "TxE: funzione di partizione EM",
tools/data/incrocio_risultato.json:148:      "ponte2": "GxE: buco nero carico (Reissner-Nordstrom)",
tools/data/incrocio_risultato.json:159:      "ponte1": "TxE: funzione di partizione EM",
tools/data/incrocio_risultato.json:160:      "ponte2": "ExR: onda EM (Maxwell)",
tools/data/incrocio_risultato.json:171:      "ponte1": "TxR: gas relativistico",
tools/data/incrocio_risultato.json:172:      "ponte2": "QxR: equazione di Dirac",
tools/data/incrocio_risultato.json:183:      "ponte1": "TxR: gas relativistico",
tools/data/incrocio_risultato.json:184:      "ponte2": "GxR: orizzonte degli eventi",
tools/data/incrocio_risultato.json:195:      "ponte1": "TxR: gas relativistico",
tools/data/incrocio_risultato.json:196:      "ponte2": "ExR: onda EM (Maxwell)",
tools/data/incrocio_risultato.json:207:      "ponte1": "QxE: atomo di idrogeno",
tools/data/incrocio_risultato.json:208:      "ponte2": "QxR: equazione di Dirac",
tools/data/incrocio_risultato.json:219:      "ponte1": "QxE: atomo di idrogeno",
tools/data/incrocio_risultato.json:220:      "ponte2": "GxE: buco nero carico (Reissner-Nordstrom)",
tools/data/incrocio_risultato.json:231:      "ponte1": "QxE: atomo di idrogeno",
tools/data/incrocio_risultato.json:232:      "ponte2": "ExR: onda EM (Maxwell)",
tools/data/incrocio_risultato.json:243:      "ponte1": "QxR: equazione di Dirac",
tools/data/incrocio_risultato.json:244:      "ponte2": "GxR: orizzonte degli eventi",
tools/data/incrocio_risultato.json:255:      "ponte1": "QxR: equazione di Dirac",
tools/data/incrocio_risultato.json:256:      "ponte2": "ExR: onda EM (Maxwell)",
tools/data/incrocio_risultato.json:267:      "ponte1": "GxE: buco nero carico (Reissner-Nordstrom)",
tools/data/incrocio_risultato.json:268:      "ponte2": "GxR: orizzonte degli eventi",
tools/data/incrocio_risultato.json:279:      "ponte1": "GxE: buco nero carico (Reissner-Nordstrom)",
tools/data/incrocio_risultato.json:280:      "ponte2": "ExR: onda EM (Maxwell)",
tools/data/incrocio_risultato.json:291:      "ponte1": "GxR: orizzonte degli eventi",
tools/data/incrocio_risultato.json:292:      "ponte2": "ExR: onda EM (Maxwell)",
tools/data/seme_archive/piano_81.json:123:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_81.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_81.json:235:          "ponte": "forma simplettica = entropia (invertibili)",
tools/data/seme_archive/piano_81.json:240:          "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/seme_archive/piano_81.json:245:          "ponte": "tensore EM dentro la forma simplettica",
tools/data/seme_archive/piano_81.json:272:          "coppia": "ExR",
tools/data/seme_archive/piano_81.json:273:          "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/seme_archive/piano_81.json:274:          "nota": "il 'ponte' non è l'onda EM, è il cambio di osservatore"
tools/data/seme_archive/piano_81.json:301:          "ponte": "noise come risorsa computazionale — fluttuazioni termiche = calcolo",
tools/data/seme_archive/piano_81.json:302:          "nota": "il vuoto quantistico (pieno di fluttuazioni) è il computer"
tools/data/seme_archive/piano_81.json:354:          "ponte": "Kondo insulator fortemente correlato — dualita conduttore/isolante come stato quantistico unico",
tools/data/seme_archive/piano_81.json:359:          "ponte": "campo magnetico estremo (35T) collassa il confine tra stati — condizione di soglia",
tools/data/retriever_risultati.json:46:    "ExR": {
tools/data/retriever_risultati.json:52:          "coppia": "ExR",
tools/data/retriever_risultati.json:60:          "coppia": "ExR",
tools/data/retriever_risultati.json:71:          "coppia": "ExR",
tools/data/retriever_risultati.json:79:          "coppia": "ExR",
tools/data/retriever_risultati.json:124:    "GxR": {
tools/data/retriever_risultati.json:130:          "coppia": "GxR",
tools/data/retriever_risultati.json:138:          "coppia": "GxR",
tools/data/retriever_risultati.json:149:          "coppia": "GxR",
tools/data/retriever_risultati.json:157:          "coppia": "GxR",
tools/data/retriever_risultati.json:182:    "QxR": {
tools/data/retriever_risultati.json:188:          "coppia": "QxR",
tools/data/retriever_risultati.json:196:          "coppia": "QxR",
tools/data/retriever_risultati.json:207:          "coppia": "QxR",
tools/data/retriever_risultati.json:215:          "coppia": "QxR",
tools/data/incrocio_20260423_0335.json:8:  "consecutio_verso_vuoto": 6,
tools/data/seme_archive/piano_83.json:123:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_83.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_83.json:247:          "ponte": "forma simplettica = entropia (invertibili)",
tools/data/seme_archive/piano_83.json:252:          "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/seme_archive/piano_83.json:257:          "ponte": "tensore EM dentro la forma simplettica",
tools/data/seme_archive/piano_83.json:284:          "coppia": "ExR",
tools/data/seme_archive/piano_83.json:285:          "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/seme_archive/piano_83.json:286:          "nota": "il 'ponte' non è l'onda EM, è il cambio di osservatore"
tools/data/seme_archive/piano_83.json:313:          "ponte": "noise come risorsa computazionale — fluttuazioni termiche = calcolo",
tools/data/seme_archive/piano_83.json:314:          "nota": "il vuoto quantistico (pieno di fluttuazioni) è il computer"
tools/data/seme_archive/piano_83.json:366:          "ponte": "Kondo insulator fortemente correlato — dualita conduttore/isolante come stato quantistico unico",
tools/data/seme_archive/piano_83.json:371:          "ponte": "campo magnetico estremo (35T) collassa il confine tra stati — condizione di soglia",
tools/data/seme_archive/piano_84.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_84.json:147:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_84.json:276:          "ponte": "forma simplettica = entropia (invertibili)",
tools/data/seme_archive/piano_84.json:281:          "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/seme_archive/piano_84.json:286:          "ponte": "tensore EM dentro la forma simplettica",
tools/data/seme_archive/piano_84.json:313:          "coppia": "ExR",
tools/data/seme_archive/piano_84.json:314:          "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/seme_archive/piano_84.json:315:          "nota": "il 'ponte' non è l'onda EM, è il cambio di osservatore"
tools/data/seme_archive/piano_84.json:342:          "ponte": "noise come risorsa computazionale — fluttuazioni termiche = calcolo",
tools/data/seme_archive/piano_84.json:343:          "nota": "il vuoto quantistico (pieno di fluttuazioni) è il computer"
tools/data/seme_archive/piano_84.json:395:          "ponte": "Kondo insulator fortemente correlato — dualita conduttore/isolante come stato quantistico unico",
tools/data/seme_archive/piano_84.json:400:          "ponte": "campo magnetico estremo (35T) collassa il confine tra stati — condizione di soglia",
tools/data/seme_archive/piano_82.json:123:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_82.json:135:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_82.json:235:          "ponte": "forma simplettica = entropia (invertibili)",
tools/data/seme_archive/piano_82.json:240:          "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/seme_archive/piano_82.json:245:          "ponte": "tensore EM dentro la forma simplettica",
tools/data/seme_archive/piano_82.json:272:          "coppia": "ExR",
tools/data/seme_archive/piano_82.json:273:          "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/seme_archive/piano_82.json:274:          "nota": "il 'ponte' non è l'onda EM, è il cambio di osservatore"
tools/data/seme_archive/piano_82.json:301:          "ponte": "noise come risorsa computazionale — fluttuazioni termiche = calcolo",
tools/data/seme_archive/piano_82.json:302:          "nota": "il vuoto quantistico (pieno di fluttuazioni) è il computer"
tools/data/seme_archive/piano_82.json:354:          "ponte": "Kondo insulator fortemente correlato — dualita conduttore/isolante come stato quantistico unico",
tools/data/seme_archive/piano_82.json:359:          "ponte": "campo magnetico estremo (35T) collassa il confine tra stati — condizione di soglia",
tools/data/seme_archive/piano_79.json:118:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_79.json:129:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_79.json:216:          "ponte": "forma simplettica = entropia (invertibili)",
tools/data/seme_archive/piano_79.json:221:          "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/seme_archive/piano_79.json:226:          "ponte": "tensore EM dentro la forma simplettica",
tools/data/seme_archive/piano_79.json:253:          "coppia": "ExR",
tools/data/seme_archive/piano_79.json:254:          "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/seme_archive/piano_79.json:255:          "nota": "il 'ponte' non è l'onda EM, è il cambio di osservatore"
tools/data/seme_archive/piano_79.json:282:          "ponte": "noise come risorsa computazionale — fluttuazioni termiche = calcolo",
tools/data/seme_archive/piano_79.json:283:          "nota": "il vuoto quantistico (pieno di fluttuazioni) è il computer"
tools/data/seme_archive/piano_79.json:335:          "ponte": "Kondo insulator fortemente correlato — dualita conduttore/isolante come stato quantistico unico",
tools/data/seme_archive/piano_79.json:340:          "ponte": "campo magnetico estremo (35T) collassa il confine tra stati — condizione di soglia",
tools/data/seme_archive/piano_80.json:118:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
tools/data/seme_archive/piano_80.json:129:      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
tools/data/seme_archive/piano_80.json:227:          "ponte": "forma simplettica = entropia (invertibili)",
tools/data/seme_archive/piano_80.json:232:          "ponte": "tensore metrico dentro la forma simplettica estesa",
tools/data/seme_archive/piano_80.json:237:          "ponte": "tensore EM dentro la forma simplettica",
tools/data/seme_archive/piano_80.json:264:          "coppia": "ExR",
tools/data/seme_archive/piano_80.json:265:          "ponte": "cambio di frame — E e B sono lo stesso campo",
tools/data/seme_archive/piano_80.json:266:          "nota": "il 'ponte' non è l'onda EM, è il cambio di osservatore"
tools/data/seme_archive/piano_80.json:293:          "ponte": "noise come risorsa computazionale — fluttuazioni termiche = calcolo",
tools/data/seme_archive/piano_80.json:294:          "nota": "il vuoto quantistico (pieno di fluttuazioni) è il computer"
tools/data/seme_archive/piano_80.json:346:          "ponte": "Kondo insulator fortemente correlato — dualita conduttore/isolante come stato quantistico unico",
tools/data/seme_archive/piano_80.json:351:          "ponte": "campo magnetico estremo (35T) collassa il confine tra stati — condizione di soglia",
tools/data/tension_to_theory.json:3:    "purpose_it": "Mapping semantico tensione → teorie TQGE+R coinvolte. Layer che traduce scoperte del lab numerico in annotazioni sulle pairs del grafo conoscenza. Curato da operatore/TM1, ispezionabile. Deterministico — no LLM.",
tools/data/tension_to_theory.json:4:    "purpose_en": "Semantic mapping of tensions to TQGE+R theories involved. Layer that translates numerical lab discoveries into annotations on the knowledge graph pairs. Curated by operator/TM1, inspectable. Deterministic — no LLM.",

codex
Ho il perimetro: in TQGE+R, R è frame esterno con quattro lati senza perno i. L’esperimento sarà count-preserving su K5: conserva 3 wick, 4 frame, 1 gauge, 1 real, 1 blank e misura se il guscio del blank conserva deposito/inertità o si dilata con una terza faccia frame.
apply patch
patch: completed
/opt/MM_D-ND/tools/exp_blank_shell_tqger_gate.py
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100644
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100644
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

codex
Ho aggiunto lo strumento riusabile per il gate TQGE+R. Ora lo eseguo e controllo i numeri grezzi prima di formulare il report, in particolare i contro-pattern del null.
exec
/bin/bash -lc 'python tools/exp_blank_shell_tqger_gate.py --json-out tools/data/blank_shell_tqger_gate_20260507_2120.json' in /opt/MM_D-ND
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100644
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

 succeeded in 1322ms:
{
  "experiment": "blank_shell_tqger_gate",
  "source": {
    "verified": [
      "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
      "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
      "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
      "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity"
    ],
    "inferred": [
      "R edges are represented as frame_link category because R is the frame",
      "deposit still requires blank + gauge_phase + real_sourcing on one face",
      "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges"
    ]
  },
  "edge_modes": {
    "QT": "wick_time",
    "GT": "wick_time",
    "ET": "wick_time",
    "EQ": "gauge_phase",
    "EG": "real_sourcing",
    "GQ": "blank",
    "RT": "frame_link",
    "QR": "frame_link",
    "GR": "frame_link",
    "ER": "frame_link"
  },
  "observed": {
    "blank_edge": "GQ",
    "blank_shell_faces": [
      {
        "face": "TQG",
        "opposite_vertex": "T",
        "edge_modes": {
          "GQ": "blank",
          "GT": "wick_time",
          "QT": "wick_time"
        },
        "nonblank_modes": [
          "wick_time",
          "wick_time"
        ],
        "side_class": "inert_wick_pair"
      },
      {
        "face": "QGE",
        "opposite_vertex": "E",
        "edge_modes": {
          "EG": "real_sourcing",
          "EQ": "gauge_phase",
          "GQ": "blank"
        },
        "nonblank_modes": [
          "gauge_phase",
          "real_sourcing"
        ],
        "side_class": "deposit_gauge_real"
      },
      {
        "face": "QGR",
        "opposite_vertex": "R",
        "edge_modes": {
          "GQ": "blank",
          "GR": "frame_link",
          "QR": "frame_link"
        },
        "nonblank_modes": [
          "frame_link",
          "frame_link"
        ],
        "side_class": "frame_pair"
      }
    ],
    "blank_shell_classes": [
      "deposit_gauge_real",
      "frame_pair",
      "inert_wick_pair"
    ],
    "deposit_faces_on_blank": [
      {
        "face": "QGE",
        "opposite_vertex": "E",
        "edge_modes": {
          "EG": "real_sourcing",
          "EQ": "gauge_phase",
          "GQ": "blank"
        },
        "nonblank_modes": [
          "gauge_phase",
          "real_sourcing"
        ],
        "side_class": "deposit_gauge_real"
      }
    ],
    "inert_faces_on_blank": [
      {
        "face": "TQG",
        "opposite_vertex": "T",
        "edge_modes": {
          "GQ": "blank",
          "GT": "wick_time",
          "QT": "wick_time"
        },
        "nonblank_modes": [
          "wick_time",
          "wick_time"
        ],
        "side_class": "inert_wick_pair"
      }
    ],
    "frame_faces_on_blank": [
      {
        "face": "QGR",
        "opposite_vertex": "R",
        "edge_modes": {
          "GQ": "blank",
          "GR": "frame_link",
          "QR": "frame_link"
        },
        "nonblank_modes": [
          "frame_link",
          "frame_link"
        ],
        "side_class": "frame_pair"
      }
    ],
    "has_one_deposit_one_inert_one_frame": true,
    "observed_QG_QGE_TQG_QGR": true
  },
  "null": {
    "n_count_preserving_assignments": 25200,
    "p_blank_edge_is_GQ": 0.1,
    "p_one_deposit_one_inert_one_frame": 0.014285714285714285,
    "p_observed_QG_QGE_TQG_QGR": 0.0002380952380952381,
    "blank_shell_pattern_counts": {
      "deposit_gauge_real+frame_pair+frame_pair": 60,
      "deposit_gauge_real+frame_pair+frame_wick": 720,
      "deposit_gauge_real+frame_pair+inert_wick_pair": 360,
      "deposit_gauge_real+frame_wick+frame_wick": 720,
      "deposit_gauge_real+frame_wick+inert_wick_pair": 240,
      "frame_gauge+frame_pair+frame_real": 240,
      "frame_gauge+frame_pair+frame_wick": 720,
      "frame_gauge+frame_pair+inert_wick_pair": 720,
      "frame_gauge+frame_pair+source_without_gauge": 720,
      "frame_gauge+frame_real+frame_wick": 1440,
      "frame_gauge+frame_real+inert_wick_pair": 720,
      "frame_gauge+frame_wick+frame_wick": 1440,
      "frame_gauge+frame_wick+inert_wick_pair": 720,
      "frame_gauge+frame_wick+source_without_gauge": 1440,
      "frame_gauge+inert_wick_pair+source_without_gauge": 240,
      "frame_pair+frame_pair+gauge_without_source": 180,
      "frame_pair+frame_pair+inert_wick_pair": 180,
      "frame_pair+frame_pair+source_without_gauge": 180,
      "frame_pair+frame_real+frame_wick": 720,
      "frame_pair+frame_real+gauge_without_source": 720,
      "frame_pair+frame_real+inert_wick_pair": 720,
      "frame_pair+frame_wick+frame_wick": 720,
      "frame_pair+frame_wick+gauge_without_source": 1440,
      "frame_pair+frame_wick+inert_wick_pair": 720,
      "frame_pair+frame_wick+source_without_gauge": 1440,
      "frame_pair+gauge_without_source+inert_wick_pair": 360,
      "frame_pair+gauge_without_source+source_without_gauge": 720,
      "frame_pair+inert_wick_pair+source_without_gauge": 360,
      "frame_real+frame_wick+frame_wick": 1440,
      "frame_real+frame_wick+gauge_without_source": 1440,
      "frame_real+frame_wick+inert_wick_pair": 720,
      "frame_real+gauge_without_source+inert_wick_pair": 240,
      "frame_wick+frame_wick+frame_wick": 480,
      "frame_wick+frame_wick+gauge_without_source": 720,
      "frame_wick+frame_wick+source_without_gauge": 720,
      "frame_wick+gauge_without_source+source_without_gauge": 480
    },
    "deposit_face_pattern_counts": {
      "GER": 210,
      "QER": 210,
      "QGE": 210,
      "QGR": 210,
      "TER": 210,
      "TGE": 210,
      "TGR": 210,
      "TQE": 210,
      "TQG": 210,
      "TQR": 210,
      "none": 23100
    },
    "inert_face_pattern_counts": {
      "GER": 630,
      "QER": 630,
      "QGE": 630,
      "QGR": 630,
      "TER": 630,
      "TGE": 630,
      "TGR": 630,
      "TQE": 630,
      "TQG": 630,
      "TQR": 630,
      "none": 18900
    },
    "frame_face_pattern_counts": {
      "GER": 1140,
      "GER+QER": 20,
      "GER+QGE": 20,
      "GER+QGR": 20,
      "GER+TER": 20,
      "GER+TGE": 20,
      "GER+TGR": 20,
      "QER": 1140,
      "QER+QGE": 20,
      "QER+QGR": 20,
      "QER+TER": 20,
      "QER+TQE": 20,
      "QER+TQR": 20,
      "QGE": 1140,
      "QGE+QGR": 20,
      "QGE+TGE": 20,
      "QGE+TQE": 20,
      "QGE+TQG": 20,
      "QGR": 1140,
      "QGR+TGR": 20,
      "QGR+TQG": 20,
      "QGR+TQR": 20,
      "TER": 1140,
      "TER+TGE": 20,
      "TER+TGR": 20,
      "TER+TQE": 20,
      "TER+TQR": 20,
      "TGE": 1140,
      "TGE+TGR": 20,
      "TGE+TQE": 20,
      "TGE+TQG": 20,
      "TGR": 1140,
      "TGR+TQG": 20,
      "TGR+TQR": 20,
      "TQE": 1140,
      "TQE+TQG": 20,
      "TQE+TQR": 20,
      "TQG": 1140,
      "TQG+TQR": 20,
      "TQR": 1140,
      "none": 13200
    }
  }
}

diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100644
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

codex
Il dato principale è netto nel perimetro dichiarato: con R il guscio blank non resta binario, diventa a tre facce; il deposito resta QGE, mentre R aggiunge QGR come faccia frame. Ora scrivo il report con il null e aggiorno il seme come vincolo scoped, senza marcarlo come scoperta fisica nuova.
exec
/bin/bash -lc 'env | grep -E "ANTHROPIC_API_KEY|OPENAI_API_KEY" || true' in /opt/MM_D-ND
 succeeded in 0ms:
exec
/bin/bash -lc 'tail -80 tools/data/seme.json' in /opt/MM_D-ND
 succeeded in 0ms:
        "fluctuations",
        "information theory",
        "probability",
        "Boltzmann"
      ],
      "content": "Computing termodinamico: sfruttare le fluttuazioni termiche invece di combatterle. Il rumore non è nemico — è risorsa. Extropic costruisce hardware che usa l'entropia come motore computazionale. Connessione profonda tra termodinamica, teoria dell'informazione e probabilità.",
      "teorie": [
        "T",
        "Q"
      ],
      "ponti_potenziali": [
        {
          "coppia": "TxQ",
          "ponte": "noise come risorsa computazionale — fluttuazioni termiche = calcolo",
          "nota": "il vuoto quantistico (pieno di fluttuazioni) è il computer"
        }
      ],
      "timestamp": "2026-04-02T08:23:13.992019"
    },
    {
      "id": "video_j0wJBEZdwLs",
      "title": "What is a Laplace Transform - visual explanation",
      "type": "video_digest",
      "keywords": [
        "Laplace transform",
        "frequency",
        "damping",
        "s-plane",
        "complex",
        "exponential"
      ],
      "content": "La trasformata di Laplace come proiezione su esponenziali complesse. Il piano s = σ + iω combina smorzamento (reale) e oscillazione (immaginario). Connessione tra dominio temporale e dominio delle frequenze complesse.",
      "teorie": [
        "T",
        "Q",
        "R"
      ],
      "ponti_potenziali": [],
      "timestamp": "2026-04-02T08:23:13.992021"
    },
    {
      "id": "video_rZ2m1_q9lg0",
      "title": "New duality: conductor-insulator in YbB12 at 35T - University of Michigan",
      "type": "video_digest",
      "keywords": [
        "duality",
        "conductor",
        "insulator",
        "Kondo insulator",
        "quantum oscillations",
        "ytterbium boride",
        "YbB12",
        "charge-neutral fermions",
        "strongly correlated",
        "condensed matter",
        "magnetic field"
      ],
      "content": "Scoperta dualita conduttore-isolante in YbB12 a 35 Tesla. Il materiale si comporta simultaneamente da conduttore e isolante — oscillazioni quantistiche dal bulk, non dalla superficie. Charge-neutral fermions (portatori senza carica) creano comportamento di conduzione = il terzo incluso. La scoperta avviene a campo estremo dove il confine tra stati collassa.",
      "teorie": [
        "T",
        "Q",
        "E"
      ],
      "ponti_potenziali": [
        {
          "coppia": "TxQ",
          "ponte": "Kondo insulator fortemente correlato — dualita conduttore/isolante come stato quantistico unico",
          "nota": "charge-neutral fermions = portatori senza carica che conducono, terzo incluso operativo"
        },
        {
          "coppia": "ExQ",
          "ponte": "campo magnetico estremo (35T) collassa il confine tra stati — condizione di soglia",
          "nota": "il confine non separa, unifica. Pattern BOUNDARY del Domandatore"
        }
      ],
      "ref": "Physical Review Letters 2025, 135(15). Chen, Zhu, Ratkovski et al. PI: Lu Li",
      "timestamp": "2026-04-04T19:34:08.014Z"
    }
  ]
}
exec
/bin/bash -lc 'python -m json.tool tools/data/seme.json >/tmp/seme_check.json && echo ok' in /opt/MM_D-ND
 succeeded in 0ms:
ok

diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100644
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

exec
/bin/bash -lc "nl -ba tools/data/seme.json | sed -n '120,190p'" in /opt/MM_D-ND
 succeeded in 0ms:
   120	    },
   121	    {
   122	      "tipo": "confine_inesplorato",
   123	      "id": "G_POTENZIALE_NULLA",
   124	      "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.",
   125	      "intensita": 0.85,
   126	      "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?",
   127	      "manuale": true,
   128	      "porta": "sessione_interattiva",
   129	      "condensato_ref": "A7,A10",
   130	      "condensato_motivo": "A7 (singolarita come operatore) e G come potenziale. A10 (dipolo) opera sul piano che G rende possibile."
   131	    },
   132	    {
   133	      "tipo": "vincolo",
   134	      "id": "G_UNDERLAY_HINGE_GATE",
   135	      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1751, G non e vertice globale sotto tutto: Q, G ed E hanno tutti entropia di modo 1.584963. G e il solo hinge osservato dove QG blank e GE real_sourcing si incontrano; i triangoli vuoti sono TQG e QGE, mentre TGE e TQE restano pieni. La consecutio e misurare l'operatore di deposito Q->G come passaggio blank-to-source, non cercare un ponte QG generico.",
   136	      "intensita": 0.84,
   137	      "manuale": true,
   138	      "porta": "G_POTENZIALE_NULLA",
   139	      "condensato_ref": "A4,A8,A9,A14",
   140	      "origine": "cycle agent_20260507_1751: tqge_underlay_gate su tassonomia operatori TQGE",
   141	      "added_at": "2026-05-07T17:51:00+00:00",
   142	      "decay_counter": 4
   143	    },
   144	    {
   145	      "tipo": "vincolo",
   146	      "id": "G_BLANK_TO_SOURCE_FACE_GATE",
   147	      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1804, l'operatore di deposito Q->G non e un ponte QG generico: e la faccia QGE. QG porta il blank, GE porta real_sourcing, QE porta gauge_phase; TQG contiene lo stesso blank ma resta senza sorgente. L'orientabilita blank-to-source generica e frequente nel null count-preserving (p=0.8), quindi il claim valido e scoped alla localizzazione QGE, non a una rarita statistica.",
   148	      "intensita": 0.83,
   149	      "manuale": true,
   150	      "porta": "G_POTENZIALE_NULLA",
   151	      "condensato_ref": "A4,A8,A9,A14",
   152	      "origine": "cycle agent_20260507_1804: blank_to_source_hinge su facce TQGE",
   153	      "added_at": "2026-05-07T18:04:00+00:00",
   154	      "decay_counter": 4
   155	    },
   156	    {
   157	      "tipo": "vincolo",
   158	      "id": "G_TRIADIC_DEPOSIT_GATE",
   159	      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1938, il deposito Q->G va formulato come gate triadico di faccia: QGE contiene blank + gauge_phase + real_sourcing. Il contatto binario blank + real_sourcing e denominator-weak nel null count-preserving (p=0.8); la faccia triadica esiste nel null con p=0.2 e QGE specifica con p=0.05. Il claim valido e localizzazione del denominatore nel catalogo TQGE osservato, non rarita universale.",
   160	      "intensita": 0.82,
   161	      "manuale": true,
   162	      "porta": "G_POTENZIALE_NULLA",
   163	      "condensato_ref": "A4,A8,A9,A14",
   164	      "origine": "cycle agent_20260507_1938: triadic_deposit_gate su facce TQGE",
   165	      "added_at": "2026-05-07T19:38:00+00:00",
   166	      "decay_counter": 4
   167	    },
   168	    {
   169	      "tipo": "vincolo",
   170	      "id": "G_BLANK_SHELL_POLARITY_GATE",
   171	      "claim": "Nel perimetro TQGE operator-taxonomy agent_20260507_1957, il deposito Q->G va formulato come polarita del guscio blank: il lato QG apre TQG inerte (blank + wick_time + wick_time) e QGE depositante (blank + gauge_phase + real_sourcing). La polarizzazione astratta del guscio compare nel null count-preserving con p=0.2; l'assetto osservato QG/QGE/TQG compare con p=0.0167. Il claim valido e localizzazione di guscio, non rarita universale ne faccia QGE isolata.",
   172	      "intensita": 0.81,
   173	      "manuale": true,
   174	      "porta": "G_POTENZIALE_NULLA",
   175	      "condensato_ref": "A4,A8,A9,A14",
   176	      "origine": "cycle agent_20260507_1957: blank_shell_polarity_gate su facce incidenti al blank TQGE",
   177	      "added_at": "2026-05-07T19:57:00+00:00",
   178	      "decay_counter": 4
   179	    },
   180	    {
   181	      "tipo": "confine_inesplorato",
   182	      "id": "BOUNDARY",
   183	      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
   184	      "intensità": 0.8,
   185	      "nota": "Il segnale non-triviale è DOVE la scissione cambia natura, non che converge a φ",
   186	      "condensato_ref": "A9",
   187	      "condensato_motivo": "Overlap termini con A9 (5 termini)",
   188	      "porta": "condensato"
   189	    },
   190	    {

diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100644
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

apply patch
patch: completed
/opt/MM_D-ND/tools/data/reports/agent_20260507_2120.md
/opt/MM_D-ND/tools/data/seme.json
diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100644
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100644
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

codex
Report e seme sono scritti. Faccio ora le verifiche meccaniche: JSON valido, script rieseguibile, report passato al falsifier del lab.
exec
/bin/bash -lc 'python tools/lab_falsifier.py tools/data/reports/agent_20260507_2120.md' in /opt/MM_D-ND
 exited 2 in 0ms:
usage: lab_falsifier.py [-h] --report REPORT --output OUTPUT
                        [--timeout TIMEOUT]
lab_falsifier.py: error: the following arguments are required: --report, --output

exec
/bin/bash -lc 'chmod +x tools/exp_blank_shell_tqger_gate.py && python -m json.tool tools/data/seme.json >/tmp/seme_after_2120.json && python -m json.tool tools/data/blank_shell_tqger_gate_20260507_2120.json >/tmp/blank_shell_tqger_check.json && echo ok' in /opt/MM_D-ND
 succeeded in 0ms:
ok

exec
/bin/bash -lc 'python tools/exp_blank_shell_tqger_gate.py --json-out /tmp/blank_shell_tqger_rerun.json >/tmp/blank_shell_tqger_rerun.out && diff -q tools/data/blank_shell_tqger_gate_20260507_2120.json /tmp/blank_shell_tqger_rerun.json && echo reproducible' in /opt/MM_D-ND
diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100755
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

 succeeded in 1179ms:
reproducible

exec
/bin/bash -lc 'python tools/lab_falsifier.py --report tools/data/reports/agent_20260507_2120.md --output tools/data/falsifier_20260507_2120.json' in /opt/MM_D-ND
diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100755
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100755
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100755
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

codex
Il falsifier del lab e ancora in esecuzione dopo il fallback provider; aspetto l’esito invece di chiudere con una verifica sospesa.
diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100755
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

 exited 2 in 30648ms:
      [provider: codex-cli unavailable, next]
      [provider: claude-cli unavailable, next]
      [provider: openrouter unavailable, next]
[falsifier] chain failed: all providers in chain ['codex-cli', 'claude-cli', 'openrouter'] failed (check codex auth, claude auth, OPENROUTER_API_KEY env)
[falsifier] LLM call failed (exit=1). Conservative: BLOCK.

exec
/bin/bash -lc "test -f tools/data/falsifier_20260507_2120.json && sed -n '1,220p' tools/data/falsifier_20260507_2120.json || echo no_falsifier_file" in /opt/MM_D-ND
 succeeded in 0ms:
no_falsifier_file

exec
/bin/bash -lc 'git status --short' in /opt/MM_D-ND
 succeeded in 0ms:
 M applications/INDEX.draft.json
 M applications/soluzioni/20260430_0330_three-regimes-of-modular-memory-algebraic/finding_index.draft.json
 M applications/soluzioni/20260430_0330_three-regimes-of-modular-memory-algebraic/manifest.draft.json
 M tools/build_agent_field.py
 M tools/data/agent_field_live.md
 M tools/data/conoscenza_teorie.json
 M tools/data/consecutio.json
 M tools/data/consecutio_processata.json
 M tools/data/domande_fondamentali.json
 M tools/data/exp_det_drift.json
 M tools/data/incrocio_risultato.json
 M tools/data/knowledge_state.json
 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/refresh_detector_state.json
 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
 M tools/data/seme_axioms.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/lab_agent.sh
?? applications/published/20260504_0901_the-two-markov-layers-are-coupled/
?? applications/published/20260504_1219_markov-layers-pass-the-first-recovery/
?? applications/published/20260505_0330_observable-rank-audit-many-probes-one/
?? applications/published/20260506_1955_observable-collinearity-breaks-only-where-denominators/
?? applications/published/20260507_0330_the-gue-poisson-boundary-is-a/
?? applications/published/20260507_0803_denominator-gate-transfers-boundary-coordinate-does/
?? applications/published/20260507_0942_bridge-order-denominator-gate/
?? applications/published/20260507_1006_logistic-counter-scope-gate/
?? applications/published/20260507_1042_logistic-surrogate-contract-gate/
?? applications/published/20260507_1419_logistic-cyclic-block-entropy-gate/
?? applications/published/20260507_1458_meta-assertion-gate/
?? applications/published/20260507_1751_tqge-underlay-gate/
?? applications/published/20260507_1804_blank-to-source-hinge/
?? applications/published/20260507_1938_triadic-deposit-gate/
?? applications/published/20260507_1957_blank-shell-polarity-gate/
?? applications/scoperte/20260502_0330_the-dipolar-phase-transition-is-nearly_auto/
?? applications/scoperte/20260503_0330_markov-memory-has-two-visible-layers_auto/
?? applications/scoperte/20260504_0901_the-two-markov-layers-are-coupled_auto/
?? applications/scoperte/20260504_1219_markov-layers-pass-the-first-recovery_auto/
?? applications/scoperte/20260505_0330_observable-rank-audit-many-probes-one_auto/
?? applications/scoperte/20260506_0625_perturbation-dimensionality-is-not-yet-a_auto/
?? applications/scoperte/20260506_1941_perturbation-rank-needs-denominator-gating_auto/
?? applications/scoperte/20260506_1955_observable-collinearity-breaks-only-where-denominators_auto/
?? applications/scoperte/20260507_0330_the-gue-poisson-boundary-is-a_auto/
?? applications/scoperte/20260507_0803_denominator-gate-transfers-boundary-coordinate-does_auto/
?? applications/scoperte/20260507_0901_denominator-gate-transfer-matrix_auto/
?? applications/scoperte/20260507_0923_semi-real-order-denominator-gate_auto/
?? applications/scoperte/20260507_0942_bridge-order-denominator-gate_auto/
?? applications/scoperte/20260507_1006_logistic-counter-scope-gate_auto/
?? applications/scoperte/20260507_1042_logistic-surrogate-contract-gate_auto/
?? applications/scoperte/20260507_1419_logistic-cyclic-block-entropy-gate_auto/
?? applications/scoperte/20260507_1458_meta-assertion-gate_auto/
?? applications/scoperte/20260507_1751_tqge-underlay-gate_auto/
?? applications/scoperte/20260507_1804_blank-to-source-hinge_auto/
?? applications/scoperte/20260507_1938_triadic-deposit-gate_auto/
?? applications/scoperte/20260507_1957_blank-shell-polarity-gate_auto/
?? "applications/scoperte/20260507_2042_det-non-\303\250-il-discriminatore-della_auto/"
?? applications/soluzioni/20260502_0330_the-dipolar-phase-transition-is-nearly/
?? applications/soluzioni/20260503_0330_markov-memory-has-two-visible-layers/
?? applications/soluzioni/20260504_0901_the-two-markov-layers-are-coupled/
?? applications/soluzioni/20260504_1219_markov-layers-pass-the-first-recovery/
?? applications/soluzioni/20260505_0330_observable-rank-audit-many-probes-one/
?? applications/soluzioni/20260506_1941_perturbation-rank-needs-denominator-gating/
?? applications/soluzioni/20260506_1955_observable-collinearity-breaks-only-where-denominators/
?? applications/soluzioni/20260507_0330_the-gue-poisson-boundary-is-a/
?? applications/soluzioni/20260507_0803_denominator-gate-transfers-boundary-coordinate-does/
?? applications/soluzioni/20260507_0942_bridge-order-denominator-gate/
?? applications/soluzioni/20260507_1006_logistic-counter-scope-gate/
?? applications/soluzioni/20260507_1042_logistic-surrogate-contract-gate/
?? applications/soluzioni/20260507_1419_logistic-cyclic-block-entropy-gate/
?? applications/soluzioni/20260507_1458_meta-assertion-gate/
?? applications/soluzioni/20260507_1751_tqge-underlay-gate/
?? applications/soluzioni/20260507_1804_blank-to-source-hinge/
?? applications/soluzioni/20260507_1938_triadic-deposit-gate/
?? applications/soluzioni/20260507_1957_blank-shell-polarity-gate/
?? "applications/soluzioni/20260507_2042_det-non-\303\250-il-discriminatore-della/"
?? findings_gallery.md
?? tools/data/.last_telegram_msg
?? tools/data/3d_boundary_layers.json
?? tools/data/aeternitas/
?? tools/data/alignment_active.json
?? tools/data/alignment_markers.jsonl
?? tools/data/biconi/bicono_20260507_1804.json
?? tools/data/biconi/bicono_20260507_1938.json
?? tools/data/biconi/bicono_20260507_1957.json
?? tools/data/biconi/bicono_20260507_2042.json
?? tools/data/bicono_projections.jsonl
?? tools/data/blank_shell_polarity_gate_20260507_1957.json
?? tools/data/blank_shell_tqger_gate_20260507_2120.json
?? tools/data/blank_to_source_hinge_20260507_1804.json
?? tools/data/boundary_coherence.json
?? tools/data/boundary_mixture_gate_20260507_0330.json
?? tools/data/boundary_mixture_gate_20260507_0330_seedcheck.json
?? tools/data/boundary_shuffle_audit.json
?? tools/data/bridge_order_denominator_gate_20260507_0942.json
?? tools/data/bridge_order_denominator_gate_20260507_0942_seedcheck.json
?? tools/data/brody_calibration_results.json
?? tools/data/brody_flow.json
?? tools/data/conoscenza_teorie.json.bak.retraction_22_04
?? tools/data/cross_domain_dipolar_direction.json
?? tools/data/cross_observable_consistency.json
?? tools/data/crossover_phase_test.json
?? tools/data/denominator_gate_transfer_matrix.json
?? tools/data/dipolar_crossover.json
?? tools/data/dipolar_vector_scaling.json
?? tools/data/domandatore/domandatore_20260421_0746.json
?? tools/data/domandatore/domandatore_20260422_0345.json
?? tools/data/domandatore/domandatore_20260423_0345.json
?? tools/data/domandatore/domandatore_20260424_0345.json
?? tools/data/domandatore/domandatore_20260425_0345.json
?? tools/data/domandatore/domandatore_20260426_0345.json
?? tools/data/domandatore/domandatore_20260427_0345.json
?? tools/data/domandatore/domandatore_20260428_0345.json
?? tools/data/domandatore/domandatore_20260428_1236.json
?? tools/data/domandatore/domandatore_20260429_0345.json
?? tools/data/domandatore/domandatore_20260430_0345.json
?? tools/data/domandatore/domandatore_20260501_0345.json
?? tools/data/domandatore/domandatore_20260502_0345.json
?? tools/data/domandatore/domandatore_20260503_0345.json
?? tools/data/domandatore/domandatore_20260504_0345.json
?? tools/data/domandatore/domandatore_20260505_0345.json
?? tools/data/domandatore/domandatore_20260506_0345.json
?? tools/data/domandatore/domandatore_20260507_0345.json
?? tools/data/domandatore/domandatore_20260507_0728.json
?? tools/data/domandatore/domandatore_20260507_0742.json
?? tools/data/domandatore/domandatore_20260507_1420.json
?? tools/data/domandatore/domandatore_20260507_1459.json
?? tools/data/domandatore/domandatore_20260507_2120.json
?? tools/data/domandatore_pre_cycle.json
?? tools/data/duality_gate_transfer_20260507_0803.json
?? tools/data/duality_gate_transfer_20260507_0803_seedcheck.json
?? tools/data/duality_gate_transfer_20260507_2042.json
?? tools/data/evolution/evolution_20260422_0330.md
?? tools/data/evolution/evolution_20260422_1616.md
?? tools/data/evolution/evolution_20260423_0330.md
?? tools/data/evolution/evolution_20260424_0330.md
?? tools/data/evolution/evolution_20260425_0330.md
?? tools/data/evolution/evolution_20260427_0330.md
?? tools/data/evolution/evolution_20260428_0330.md
?? tools/data/evolution/evolution_20260429_0852.md
?? tools/data/evolution/evolution_20260429_1013.md
?? tools/data/evolution/evolution_20260430_0330.md
?? tools/data/evolution/evolution_20260430_1905.md
?? tools/data/evolution/evolution_20260430_1946.md
?? tools/data/evolution/evolution_20260501_0330.md
?? tools/data/evolution/evolution_20260501_0725.md
?? tools/data/evolution/evolution_20260501_0931.md
?? tools/data/evolution/evolution_20260502_0330.md
?? tools/data/evolution/evolution_20260503_0330.md
?? tools/data/evolution/evolution_20260504_0901.md
?? tools/data/evolution/evolution_20260504_1219.md
?? tools/data/evolution/evolution_20260505_0330.md
?? tools/data/evolution/evolution_20260506_0330.md
?? tools/data/evolution/evolution_20260506_1941.md
?? tools/data/evolution/evolution_20260506_1955.md
?? tools/data/evolution/evolution_20260507_0330.md
?? tools/data/evolution/evolution_20260507_0803.md
?? tools/data/evolution/evolution_20260507_0901.md
?? tools/data/evolution/evolution_20260507_0923.md
?? tools/data/evolution/evolution_20260507_0942.md
?? tools/data/evolution/evolution_20260507_1006.md
?? tools/data/evolution/evolution_20260507_1042.md
?? tools/data/evolution/evolution_20260507_1419.md
?? tools/data/evolution/evolution_20260507_1458.md
?? tools/data/evolution/evolution_20260507_1751.md
?? tools/data/evolution/evolution_20260507_1804.md
?? tools/data/evolution/evolution_20260507_1938.md
?? tools/data/evolution/evolution_20260507_1957.md
?? tools/data/evolution/evolution_20260507_2042.md
?? tools/data/exp_det_drift_20260507_2042.json
?? tools/data/falsifier_20260507_2120.raw.txt
?? tools/data/g1_log.jsonl
?? tools/data/g2_log.jsonl
?? tools/data/incrocio_20260422_0336.json
?? tools/data/incrocio_20260423_0335.json
?? tools/data/incrocio_20260424_0347.json
?? tools/data/incrocio_20260425_0339.json
?? tools/data/incrocio_20260428_0340.json
?? tools/data/incrocio_20260429_0859.json
?? tools/data/incrocio_20260506_0633.json
?? tools/data/incrocio_20260507_2120.json
?? tools/data/lab_bridge_issues.jsonl
?? tools/data/logistic_counter_scope_gate_20260507_1006.json
?? tools/data/logistic_counter_scope_gate_20260507_1006_seedcheck.json
?? tools/data/logistic_cyclic_block_entropy_gate_20260507_1419.json
?? tools/data/logistic_cyclic_block_entropy_gate_20260507_1419_seedcheck.json
?? tools/data/logistic_surrogate_contract_gate_20260507_1042.json
?? tools/data/logistic_surrogate_contract_gate_20260507_1042_seedcheck.json
?? tools/data/magnitude_psd_from_acf.json
?? tools/data/markov3_observable_hunt.json
?? tools/data/markov_dipolar_decomposition.json
?? tools/data/markov_k_direction.json
?? tools/data/markov_layer_recovery_audit.json
?? tools/data/markov_memory_by_gue_type.json
?? tools/data/markov_scale_function.json
?? tools/data/meta_assertion_gate.json
?? tools/data/meta_tautology_test.json
?? tools/data/mod3_scaling.json
?? tools/data/mod3_vs_residual_ordering.json
?? tools/data/modular_algebra_depth.json
?? tools/data/modular_memory_spectrum.json
?? tools/data/observable_collinearity_breaking_20260506_1955.json
?? tools/data/observable_collinearity_breaking_20260506_1956.json
?? tools/data/observable_collinearity_breaking_20260506_1957.json
?? tools/data/observable_rank_audit.json
?? tools/data/observable_rank_audit_seed20260506.json
?? tools/data/observatorio/domandatore_unTouched_20260507_095914.md
?? tools/data/observatorio/lazarus_cimitero_20260507_100015.md
?? tools/data/observatorio/meta_metodo_giro_2026-05-07.md
?? tools/data/perturbation_dimensionality_audit.json
?? tools/data/perturbation_dimensionality_audit_scale0330.json
?? tools/data/perturbation_rank_size_curve.json
?? tools/data/promotions/
?? tools/data/reports/_quarantine_falsifier_29_04/
?? tools/data/reports/agent_20260422_0330.md
?? tools/data/reports/agent_20260422_1616.md
?? tools/data/reports/agent_20260423_0330.md
?? tools/data/reports/agent_20260424_0330.md
?? tools/data/reports/agent_20260425_0330.md
?? tools/data/reports/agent_20260426_0330.md
?? tools/data/reports/agent_20260427_0330.md
?? tools/data/reports/agent_20260428_0330.md
?? tools/data/reports/agent_20260429_1013.md
?? tools/data/reports/agent_20260429_1041.md
?? tools/data/reports/agent_20260430_0330.md
?? tools/data/reports/agent_20260430_1905.md
?? tools/data/reports/agent_20260430_1919.md
?? tools/data/reports/agent_20260430_1946.md
?? tools/data/reports/agent_20260501_0330.md
?? tools/data/reports/agent_20260501_0725.md
?? tools/data/reports/agent_20260501_0931.md
?? tools/data/reports/agent_20260502_0330.md
?? tools/data/reports/agent_20260503_0330.md
?? tools/data/reports/agent_20260504_0901.md
?? tools/data/reports/agent_20260504_1219.md
?? tools/data/reports/agent_20260505_0330.md
?? tools/data/reports/agent_20260505_1022.md
?? tools/data/reports/agent_20260506_0330.md
?? tools/data/reports/agent_20260506_0625.md
?? tools/data/reports/agent_20260506_1941.md
?? tools/data/reports/agent_20260506_1955.md
?? tools/data/reports/agent_20260507_0330.md
?? tools/data/reports/agent_20260507_0803.md
?? tools/data/reports/agent_20260507_0901.md
?? tools/data/reports/agent_20260507_0923.md
?? tools/data/reports/agent_20260507_0942.md
?? tools/data/reports/agent_20260507_1006.md
?? tools/data/reports/agent_20260507_1042.md
?? tools/data/reports/agent_20260507_1419.md
?? tools/data/reports/agent_20260507_1458.md
?? tools/data/reports/agent_20260507_1751.md
?? tools/data/reports/agent_20260507_1804.md
?? tools/data/reports/agent_20260507_1938.md
?? tools/data/reports/agent_20260507_1957.md
?? tools/data/reports/agent_20260507_2042.md
?? tools/data/reports/agent_20260507_2120.md
?? tools/data/reports/ddf_20260422_0405.json
?? tools/data/reports/ddf_20260423_0405.json
?? tools/data/reports/ddf_20260424_0405.json
?? tools/data/reports/ddf_20260425_0405.json
?? tools/data/reports/ddf_20260426_0405.json
?? tools/data/reports/ddf_20260427_0405.json
?? tools/data/reports/ddf_20260428_0405.json
?? tools/data/reports/ddf_20260429_0405.json
?? tools/data/reports/ddf_20260430_0405.json
?? tools/data/reports/ddf_20260501_0405.json
?? tools/data/reports/ddf_20260502_0405.json
?? tools/data/reports/ddf_20260503_0405.json
?? tools/data/reports/ddf_20260504_0405.json
?? tools/data/reports/ddf_20260505_0405.json
?? tools/data/reports/ddf_20260505_0636.json
?? tools/data/reports/ddf_20260506_0405.json
?? tools/data/reports/ddf_20260507_0405.json
?? tools/data/reports/evolution_20260422_0330.md
?? tools/data/reports/evolution_20260422_1616.md
?? tools/data/reports/evolution_20260423_0330.md
?? tools/data/reports/evolution_20260424_0330.md
?? tools/data/reports/evolution_20260425_0330.md
?? tools/data/reports/evolution_20260427_0330.md
?? tools/data/reports/evolution_20260428_0330.md
?? tools/data/reports/evolution_20260503_0330.md
?? tools/data/reports/evolution_20260504_0330.md
?? tools/data/reports/evolution_20260505_0330.md
?? tools/data/reports/evolution_20260506_0330.md
?? tools/data/reports/evolution_20260506_1941.md
?? tools/data/reports/falsifier_20260429_1013.json
?? tools/data/reports/falsifier_20260429_1041.json
?? tools/data/reports/falsifier_20260430_0330.json
?? tools/data/reports/falsifier_20260430_1905.json
?? tools/data/reports/falsifier_20260430_1919.json
?? tools/data/reports/falsifier_20260430_1946.json
?? tools/data/reports/falsifier_20260501_0330.json
?? tools/data/reports/falsifier_20260501_0725.json
?? tools/data/reports/falsifier_20260501_0931.json
?? tools/data/reports/falsifier_20260502_0330.json
?? tools/data/reports/falsifier_20260503_0330.json
?? tools/data/reports/falsifier_20260504_0901.json
?? tools/data/reports/falsifier_20260504_1219.json
?? tools/data/reports/falsifier_20260505_0330.json
?? tools/data/reports/falsifier_20260506_0330.raw.txt
?? tools/data/reports/falsifier_20260506_0625.json
?? tools/data/reports/falsifier_20260506_1941.json
?? tools/data/reports/falsifier_20260506_1955.json
?? tools/data/reports/falsifier_20260506_1955.raw.txt
?? tools/data/reports/falsifier_20260507_0330.json
?? tools/data/reports/falsifier_20260507_0330.raw.txt
?? tools/data/reports/falsifier_20260507_0803.json
?? tools/data/reports/falsifier_20260507_0803.raw.txt
?? tools/data/reports/falsifier_20260507_0901.json
?? tools/data/reports/falsifier_20260507_0923.json
?? tools/data/reports/falsifier_20260507_0923.raw.txt
?? tools/data/reports/falsifier_20260507_0942.json
?? tools/data/reports/falsifier_20260507_1006.json
?? tools/data/reports/falsifier_20260507_1042.json
?? tools/data/reports/falsifier_20260507_1042.raw.txt
?? tools/data/reports/falsifier_20260507_1419.json
?? tools/data/reports/falsifier_20260507_1458.json
?? tools/data/reports/falsifier_20260507_1458.raw.txt
?? tools/data/reports/falsifier_20260507_1751.json
?? tools/data/reports/falsifier_20260507_1804.json
?? tools/data/reports/falsifier_20260507_1938.json
?? tools/data/reports/falsifier_20260507_1938.raw.txt
?? tools/data/reports/falsifier_20260507_1957.json
?? tools/data/reports/falsifier_20260507_2042.json
?? tools/data/reports/incident_20260504_0721.md
?? tools/data/reports/incident_20260504_1138.md
?? tools/data/reports/latest.md
?? tools/data/reports/loop_guard_20260507_0330.json
?? tools/data/reports/loop_guard_20260507_0803.json
?? tools/data/reports/loop_guard_20260507_0901.json
?? tools/data/reports/loop_guard_20260507_0923.json
?? tools/data/reports/loop_guard_20260507_0942.json
?? tools/data/reports/loop_guard_20260507_1006.json
?? tools/data/reports/loop_guard_20260507_1042.json
?? tools/data/reports/loop_guard_20260507_1419.json
?? tools/data/reports/loop_guard_20260507_1458.json
?? tools/data/reports/loop_guard_20260507_1751.json
?? tools/data/reports/loop_guard_20260507_1804.json
?? tools/data/reports/loop_guard_20260507_1938.json
?? tools/data/reports/loop_guard_20260507_1957.json
?? tools/data/reports/loop_guard_20260507_2042.json
?? tools/data/reports/trajectory_apply_20260506_1931.json
?? tools/data/reports/trajectory_apply_20260506_1941.json
?? tools/data/reports/trajectory_apply_20260506_1955.json
?? tools/data/reports/trajectory_apply_20260507_0330.json
?? tools/data/reports/trajectory_apply_20260507_0803.json
?? tools/data/reports/trajectory_apply_20260507_0901.json
?? tools/data/reports/trajectory_apply_20260507_0923.json
?? tools/data/reports/trajectory_apply_20260507_0942.json
?? tools/data/reports/trajectory_apply_20260507_1006.json
?? tools/data/reports/trajectory_apply_20260507_1042.json
?? tools/data/scale_selective_perturbation.json
?? tools/data/selective_layer_decoupling.json
?? tools/data/seme_archive/piano_79.json
?? tools/data/seme_archive/piano_80.json
?? tools/data/seme_archive/piano_81.json
?? tools/data/seme_archive/piano_82.json
?? tools/data/seme_archive/piano_83.json
?? tools/data/seme_archive/piano_84.json
?? tools/data/semireal_order_denominator_gate_20260507_0923.json
?? tools/data/semireal_order_denominator_gate_20260507_0923_seedcheck.json
?? tools/data/spectral_rigidity_results.json
?? tools/data/tqge_underlay_gate_20260507_1751.json
?? tools/data/trajectory_apply_history.jsonl
?? tools/data/triadic_deposit_gate_20260507_1938.json
?? tools/data/two_channel_boundary.json
?? tools/data/two_channel_cross_domain.json
?? tools/data/two_channel_shuffle_audit.json
?? tools/data/two_layer_universality.json
?? tools/data/valutatore_log.jsonl
?? tools/data/veritas/veritas_20260505_131056.json
?? tools/data/veritas/veritas_20260505_131201.json
?? tools/data/veritas/veritas_20260506_033803.json
?? tools/data/veritas/veritas_20260506_063303.json
?? tools/data/veritas/veritas_20260506_194644.json
?? tools/data/veritas/veritas_20260506_200238.json
?? tools/data/veritas/veritas_20260507_033525.json
?? tools/data/veritas/veritas_20260507_080958.json
?? tools/data/veritas/veritas_20260507_090723.json
?? tools/data/veritas/veritas_20260507_093207.json
?? tools/data/veritas/veritas_20260507_094723.json
?? tools/data/veritas/veritas_20260507_101605.json
?? tools/data/veritas/veritas_20260507_104904.json
?? tools/data/veritas/veritas_20260507_142501.json
?? tools/data/veritas/veritas_20260507_150443.json
?? tools/data/veritas/veritas_20260507_175511.json
?? tools/data/veritas/veritas_20260507_180843.json
?? tools/data/veritas/veritas_20260507_194258.json
?? tools/data/veritas/veritas_20260507_200223.json
?? tools/data/veritas/veritas_20260507_204637.json
?? tools/data/vincoli_decay_log.jsonl
?? tools/evolution_report.md
?? tools/exp_3d_boundary_layers.py
?? tools/exp_blank_shell_polarity_gate.py
?? tools/exp_blank_shell_tqger_gate.py
?? tools/exp_blank_to_source_hinge.py
?? tools/exp_boundary_coherence.py
?? tools/exp_boundary_mixture_gate.py
?? tools/exp_boundary_shuffle_audit.py
?? tools/exp_bridge_order_denominator_gate.py
?? tools/exp_brody_calibration.py
?? tools/exp_brody_flow.py
?? tools/exp_cross_domain_dipolar_direction.py
?? tools/exp_cross_observable_consistency.py
?? tools/exp_crossover_phase_test.py
?? tools/exp_denominator_gate_transfer_matrix.py
?? tools/exp_dipolar_angle_reference.py
?? tools/exp_dipolar_crossover.py
?? tools/exp_dipolar_vector_scaling.py
?? tools/exp_duality_gate_transfer.py
?? tools/exp_logistic_counter_scope_gate.py
?? tools/exp_logistic_cyclic_block_entropy_gate.py
?? tools/exp_logistic_surrogate_contract_gate.py
?? tools/exp_magnitude_psd_from_acf.py
?? tools/exp_markov3_observable_hunt.py
?? tools/exp_markov_dipolar_decomposition.py
?? tools/exp_markov_k_direction.py
?? tools/exp_markov_layer_recovery_audit.py
?? tools/exp_markov_memory_by_gue_type.py
?? tools/exp_markov_psd_prediction.py
?? tools/exp_markov_scale_function.py
?? tools/exp_meta_tautology_test.py
?? tools/exp_mod3_scaling.py
?? tools/exp_mod3_vs_residual_ordering.py
?? tools/exp_modular_algebra_depth.py
?? tools/exp_modular_memory_spectrum.py
?? tools/exp_observable_rank_audit.py
?? tools/exp_perturbation_dimensionality_audit.py
?? tools/exp_perturbation_rank_size_curve.py
?? tools/exp_scale_selective_perturbation.py
?? tools/exp_selective_layer_decoupling.py
?? tools/exp_semireal_order_denominator_gate.py
?? tools/exp_spectral_rigidity.py
?? tools/exp_tqge_underlay_gate.py
?? tools/exp_triadic_deposit_gate.py
?? tools/exp_two_channel_boundary.py
?? tools/exp_two_channel_cross_domain.py
?? tools/exp_two_channel_shuffle_audit.py
?? tools/exp_two_layer_universality.py
?? tools/meta_assertion_gate.py
?? tools/observables_registry.py

exec
/bin/bash -lc 'python -m py_compile tools/exp_blank_shell_tqger_gate.py && echo py_compile_ok' in /opt/MM_D-ND
 succeeded in 0ms:
py_compile_ok

diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100755
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

exec
/bin/bash -lc "sed -n '1,160p' tools/data/falsifier_20260507_2120.raw.txt 2>/dev/null || true" in /opt/MM_D-ND
 succeeded in 0ms:
<empty, exit=1>
exec
/bin/bash -lc 'rg -n "def main|structural_check|PATTERNS" tools/structural_check.py | head -40' in /opt/MM_D-ND
 succeeded in 0ms:
3:structural_check.py — Il sistema che osserva se stesso.
16:    python structural_check.py                      # scansiona file modificati (git diff)
17:    python structural_check.py file1.py file2.py    # scansiona file specifici
18:    python structural_check.py --inject              # scansiona E inietta tensione nel seme
30:# PATTERNS — l'agente può aggiungere pattern qui
33:PATTERNS = [
89:    for pattern in PATTERNS:
186:def main():

exec
/bin/bash -lc "python tools/structural_check.py tools/exp_blank_shell_tqger_gate.py tools/data/reports/agent_20260507_2120.md 2>&1 | sed -n '1,200p'" in /opt/MM_D-ND
 succeeded in 0ms:
Scansione 2 file...
Nessun anti-pattern trovato.

diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100755
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

codex
Eseguito il cycle e scritto il report in [agent_20260507_2120.md](/opt/MM_D-ND/tools/data/reports/agent_20260507_2120.md).

Ho aggiunto lo strumento [exp_blank_shell_tqger_gate.py](/opt/MM_D-ND/tools/exp_blank_shell_tqger_gate.py) e i dati in [blank_shell_tqger_gate_20260507_2120.json](/opt/MM_D-ND/tools/data/blank_shell_tqger_gate_20260507_2120.json). Ho aggiornato anche [seme.json](/opt/MM_D-ND/tools/data/seme.json) con il vincolo `G_BLANK_SHELL_TQGER_GATE`.

Risultato: nel perimetro TQGE+R, R non sposta il deposito QGE; aggiunge invece `QGR` come terza faccia frame del guscio blank. Il guscio non e piu binario TQG/QGE, ma tri-facciale: TQG inerte, QGE depositante, QGR frame.

Verifiche:
- `seme.json` valido
- JSON esperimento valido e run riproducibile
- `py_compile` OK
- `structural_check.py` OK
- env API key paid vuoto
- `lab_falsifier.py` non ha prodotto verdict: provider chain non disponibile, raw log salvato in `tools/data/falsifier_20260507_2120.raw.txt`
diff --git a/tools/data/reports/agent_20260507_2120.md b/tools/data/reports/agent_20260507_2120.md
new file mode 100644
index 0000000000000000000000000000000000000000..099a2171e600c684423c8f28df18cd94cdecaa6b
--- /dev/null
+++ b/tools/data/reports/agent_20260507_2120.md
@@ -0,0 +1,73 @@
+# Agent Report — Blank Shell TQGER Gate
+**Date**: 2026-05-07 21:20
+**Piano**: 85
+**Tension explored**: G_POTENZIALE_NULLA (0.85)
+**observables_registry**: 1.0.0-2026-05-06
+**observables_used**: [] - tassonomia operatori TQGE+R, nessun osservabile canonico SR/SR2/L1/L2/triple_var
+
+## Claim Under Test
+> 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.
+
+## Question
+Nel perimetro TQGE+R operator-taxonomy, la polarita del guscio blank TQG/QGE sopravvive quando entra R, oppure R sposta il denominatore regressivo del deposito?
+
+## Experiment Design
+- Strumento: `tools/exp_blank_shell_tqger_gate.py`
+- Scope: grafo completo K5 su T,Q,G,E,R. Il perimetro conserva i modi `3 wick_time + 4 frame_link + 1 gauge_phase + 1 real_sourcing + 1 blank`.
+- Fonti verificate: `tools/LAB_AGENT_CONTEXT.md`, `tools/dnd_incrocio.py`, `tools/data/reports/agent_20260507_1957.md`.
+- Inferenza dichiarata: i lati incidenti a R sono `frame_link`, perche R e il frame connesso a tutti ma senza perno i.
+- Metrica: facce incidenti al lato `blank`; classi `inert_wick_pair`, `deposit_gauge_real`, `frame_pair`, e classi miste.
+- Null baseline: 25,200 permutazioni count-preserving dei dieci modi sui dieci lati K5.
+
+## Results
+| Test | Osservato | Null count-preserving |
+|---|---:|---:|
+| Lato blank | GQ | 2,520/25,200 = 0.1000 |
+| Guscio `deposit + inert + frame` | si | 360/25,200 = 0.0143 |
+| Assetto osservato `QG` blank, `QGE` deposito, `TQG` inerte, `QGR` frame | si | 6/25,200 = 0.000238 |
+| Faccia deposito specifica `QGE` | si | 210/25,200 = 0.00833 |
+| Nessuna faccia deposito sul blank | no | 23,100/25,200 = 0.9167 |
+
+Facce del guscio blank osservato:
+
+| Faccia | Modi non-blank | Classe |
+|---|---|---|
+| TQG | wick_time + wick_time | inert_wick_pair |
+| QGE | gauge_phase + real_sourcing | deposit_gauge_real |
+| QGR | frame_link + frame_link | frame_pair |
+
+Pattern piu rilevanti del null:
+
+| Pattern guscio blank | Conteggio |
+|---|---:|
+| deposit_gauge_real + frame_pair + inert_wick_pair | 360/25,200 |
+| deposit_gauge_real + frame_pair + frame_wick | 720/25,200 |
+| frame_wick + frame_wick + frame_wick | 480/25,200 |
+| frame_pair + frame_wick + source_without_gauge | 1,440/25,200 |
+| frame_gauge + frame_wick + source_without_gauge | 1,440/25,200 |
+
+## Key Findings
+1. **R non sposta il deposito QGE nel perimetro TQGE+R.** La faccia depositante resta `QGE = blank + gauge_phase + real_sourcing`.
+2. **R rompe il framing binario del guscio blank.** Nel tetraedro TQGE il blank apre due facce; in K5 apre tre facce. La nuova faccia e `QGR = blank + frame_link + frame_link`.
+3. **Il claim valido e dilatazione di guscio, non rarita universale.** Il pattern `deposit + inert + frame` compare in 360/25,200 null. L'assetto completo osservato compare in 6/25,200, ma il numero serve come controllo anti-tautologico, non come discovery fisica.
+
+## Verdict
+**CONSTRAINT on G_POTENZIALE_NULLA / G_BLANK_SHELL_POLARITY_GATE**: nel perimetro TQGE+R operator-taxonomy, la polarita TQG/QGE sopravvive ma non resta completa. R aggiunge una terza faccia `QGR` al guscio blank. Il denominatore regressivo del deposito resta QGE; il denominatore regressivo del blank diventa tri-facciale: TQG inerte, QGE depositante, QGR frame.
+
+## Bicono della scoperta
+- **Due radici**: polarita TQG/QGE del tetraedro TQGE · dilatazione QGR quando entra R
+- **Singolare**: QG come lato blank che non decide il deposito da solo; nel perimetro esteso diventa bordo comune di inerzia, deposito e frame.
+- **Invariante di passaggio**: il deposito richiede `blank + gauge_phase + real_sourcing`; R non sostituisce gauge o source.
+- **Campo di possibilita**: qui diventa possibile testare se ogni nuovo vertice esterno aggiunge una faccia di shell senza muovere il deposito; qui diventa non-possibile formulare il guscio blank come oggetto binario oltre TQGE.
+
+## Self-Falsifier Lenses
+- **L1**: non uso "sempre", "mai", "zero" o "unico" fuori perimetro. Il null contiene pattern alternativi e molti casi senza deposito.
+- **L2**: i confronti sono conteggi grezzi nello stesso spazio di 25,200 assegnazioni, non percentuali fra spazi diversi.
+- **L3**: il claim precedente non viene salvato con definizione cambiata. Il gate TQGE resta valido nel suo perimetro; TQGE+R lo estende a shell tri-facciale.
+- **L4**: gli edge case sono espliciti: 23,100/25,200 assegnazioni non hanno faccia deposito sul blank.
+- **L5**: il risultato e classificazione interna del catalogo D-ND, non scoperta fisica nuova su relativita, gauge o gravitazione.
+
+## Files
+- `tools/exp_blank_shell_tqger_gate.py`
+- `tools/data/blank_shell_tqger_gate_20260507_2120.json`
+- `tools/data/reports/agent_20260507_2120.md`
diff --git a/tools/data/seme.json b/tools/data/seme.json
index 29ba741ccbb77937d661ef7deffd141f6ef0899f..c1c34d7c33d0ddecda8cff84b3205194b76eebec
--- a/tools/data/seme.json
+++ b/tools/data/seme.json
@@ -178,6 +178,18 @@
       "decay_counter": 4
     },
     {
+      "tipo": "vincolo",
+      "id": "G_BLANK_SHELL_TQGER_GATE",
+      "claim": "Nel perimetro TQGE+R operator-taxonomy agent_20260507_2120, la polarita TQG/QGE sopravvive ma non resta completa: R aggiunge QGR come terza faccia frame del guscio blank. Il deposito resta QGE = blank + gauge_phase + real_sourcing; il blank diventa tri-facciale TQG inerte, QGE depositante, QGR frame. Nel null count-preserving K5, deposit+inert+frame compare 360/25200 e l'assetto completo osservato 6/25200; questi conteggi sono controllo anti-tautologico, non rarita universale.",
+      "intensita": 0.8,
+      "manuale": true,
+      "porta": "G_POTENZIALE_NULLA",
+      "condensato_ref": "A4,A8,A9,A14",
+      "origine": "cycle agent_20260507_2120: blank_shell_tqger_gate su perimetro TQGE+R",
+      "added_at": "2026-05-07T21:20:00+00:00",
+      "decay_counter": 0
+    },
+    {
       "tipo": "confine_inesplorato",
       "id": "BOUNDARY",
       "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
@@ -390,4 +402,4 @@
       "timestamp": "2026-04-04T19:34:08.014Z"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/tools/exp_blank_shell_tqger_gate.py b/tools/exp_blank_shell_tqger_gate.py
new file mode 100755
index 0000000000000000000000000000000000000000..616b71bebf77db7cb5114afe5938719e82c4b989
--- /dev/null
+++ b/tools/exp_blank_shell_tqger_gate.py
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+"""
+exp_blank_shell_tqger_gate.py
+
+Transfer gate for G_POTENZIALE_NULLA from TQGE to TQGE+R.
+
+The TQGE run found a polarized two-face shell around the blank QG edge:
+TQG inert and QGE deposit. This tool extends the perimeter to K5 with R as
+frame: R connects to T,Q,G,E through frame edges with no i-pivot. It measures
+whether the blank shell stays a two-face object, moves its deposit face, or
+dilates into a three-face shell.
+"""
+
+from __future__ import annotations
+
+import argparse
+import json
+from collections import Counter
+from itertools import combinations, permutations
+from pathlib import Path
+
+
+VERTICES = ("T", "Q", "G", "E", "R")
+
+EDGE_MODES = {
+    ("T", "Q"): "wick_time",
+    ("T", "G"): "wick_time",
+    ("T", "E"): "wick_time",
+    ("Q", "E"): "gauge_phase",
+    ("G", "E"): "real_sourcing",
+    ("Q", "G"): "blank",
+    ("T", "R"): "frame_link",
+    ("Q", "R"): "frame_link",
+    ("G", "R"): "frame_link",
+    ("E", "R"): "frame_link",
+}
+
+
+def canon(edge: tuple[str, str]) -> tuple[str, str]:
+    return tuple(sorted(edge))
+
+
+EDGE_MODES = {canon(edge): mode for edge, mode in EDGE_MODES.items()}
+EDGES = tuple(sorted(EDGE_MODES))
+
+
+def edge_name(edge: tuple[str, str]) -> str:
+    return "".join(edge)
+
+
+def face_name(vertices: tuple[str, str, str]) -> str:
+    return "".join(vertex for vertex in VERTICES if vertex in vertices)
+
+
+def face_edges(vertices: tuple[str, str, str]) -> list[tuple[str, str]]:
+    return [canon(edge) for edge in combinations(vertices, 2)]
+
+
+def classify_blank_face(nonblank_modes: list[str]) -> str:
+    counts = Counter(nonblank_modes)
+    if counts == Counter({"wick_time": 2}):
+        return "inert_wick_pair"
+    if counts == Counter({"gauge_phase": 1, "real_sourcing": 1}):
+        return "deposit_gauge_real"
+    if counts == Counter({"frame_link": 2}):
+        return "frame_pair"
+    if counts == Counter({"frame_link": 1, "wick_time": 1}):
+        return "frame_wick"
+    if counts == Counter({"frame_link": 1, "gauge_phase": 1}):
+        return "frame_gauge"
+    if counts == Counter({"frame_link": 1, "real_sourcing": 1}):
+        return "frame_real"
+    if "real_sourcing" in counts and "gauge_phase" not in counts:
+        return "source_without_gauge"
+    if "gauge_phase" in counts and "real_sourcing" not in counts:
+        return "gauge_without_source"
+    return "+".join(sorted(nonblank_modes))
+
+
+def analyze(edge_modes: dict[tuple[str, str], str]) -> dict:
+    blank_edges = [edge for edge, mode in edge_modes.items() if mode == "blank"]
+    if len(blank_edges) != 1:
+        raise ValueError("Expected exactly one blank edge")
+
+    blank_edge = blank_edges[0]
+    opposite_vertices = [vertex for vertex in VERTICES if vertex not in blank_edge]
+    shell_faces = []
+
+    for opposite in opposite_vertices:
+        vertices = tuple(sorted((*blank_edge, opposite)))
+        edges = face_edges(vertices)
+        modes = [edge_modes[edge] for edge in edges]
+        nonblank_modes = [mode for mode in modes if mode != "blank"]
+        shell_faces.append(
+            {
+                "face": face_name(vertices),
+                "opposite_vertex": opposite,
+                "edge_modes": {edge_name(edge): edge_modes[edge] for edge in edges},
+                "nonblank_modes": sorted(nonblank_modes),
+                "side_class": classify_blank_face(nonblank_modes),
+            }
+        )
+
+    deposit_faces = [
+        face for face in shell_faces if face["side_class"] == "deposit_gauge_real"
+    ]
+    inert_faces = [
+        face for face in shell_faces if face["side_class"] == "inert_wick_pair"
+    ]
+    frame_faces = [face for face in shell_faces if face["side_class"] == "frame_pair"]
+    side_classes = sorted(face["side_class"] for face in shell_faces)
+
+    return {
+        "blank_edge": edge_name(blank_edge),
+        "blank_shell_faces": shell_faces,
+        "blank_shell_classes": side_classes,
+        "deposit_faces_on_blank": deposit_faces,
+        "inert_faces_on_blank": inert_faces,
+        "frame_faces_on_blank": frame_faces,
+        "has_one_deposit_one_inert_one_frame": side_classes
+        == ["deposit_gauge_real", "frame_pair", "inert_wick_pair"],
+        "observed_QG_QGE_TQG_QGR": (
+            edge_name(blank_edge) == "GQ"
+            and [face["face"] for face in deposit_faces] == ["QGE"]
+            and [face["face"] for face in inert_faces] == ["TQG"]
+            and [face["face"] for face in frame_faces] == ["QGR"]
+        ),
+    }
+
+
+def null_assignments() -> list[dict[tuple[str, str], str]]:
+    labels = [EDGE_MODES[edge] for edge in EDGES]
+    unique = set(permutations(labels, len(labels)))
+    return [dict(zip(EDGES, labels_perm)) for labels_perm in unique]
+
+
+def summarize_null(assignments: list[dict[tuple[str, str], str]]) -> dict:
+    n = len(assignments)
+    counts = Counter()
+    shell_patterns = Counter()
+    deposit_face_patterns = Counter()
+    inert_face_patterns = Counter()
+    frame_face_patterns = Counter()
+
+    for assignment in assignments:
+        result = analyze(assignment)
+        pattern = "+".join(result["blank_shell_classes"])
+        shell_patterns[pattern] += 1
+
+        deposit_names = "+".join(
+            sorted(face["face"] for face in result["deposit_faces_on_blank"])
+        )
+        inert_names = "+".join(
+            sorted(face["face"] for face in result["inert_faces_on_blank"])
+        )
+        frame_names = "+".join(
+            sorted(face["face"] for face in result["frame_faces_on_blank"])
+        )
+        deposit_face_patterns[deposit_names or "none"] += 1
+        inert_face_patterns[inert_names or "none"] += 1
+        frame_face_patterns[frame_names or "none"] += 1
+
+        if result["has_one_deposit_one_inert_one_frame"]:
+            counts["one_deposit_one_inert_one_frame"] += 1
+        if result["blank_edge"] == "GQ":
+            counts["blank_edge_is_GQ"] += 1
+        if result["observed_QG_QGE_TQG_QGR"]:
+            counts["observed_QG_QGE_TQG_QGR"] += 1
+
+    return {
+        "n_count_preserving_assignments": n,
+        "p_blank_edge_is_GQ": counts["blank_edge_is_GQ"] / n,
+        "p_one_deposit_one_inert_one_frame": counts[
+            "one_deposit_one_inert_one_frame"
+        ]
+        / n,
+        "p_observed_QG_QGE_TQG_QGR": counts["observed_QG_QGE_TQG_QGR"] / n,
+        "blank_shell_pattern_counts": dict(sorted(shell_patterns.items())),
+        "deposit_face_pattern_counts": dict(sorted(deposit_face_patterns.items())),
+        "inert_face_pattern_counts": dict(sorted(inert_face_patterns.items())),
+        "frame_face_pattern_counts": dict(sorted(frame_face_patterns.items())),
+    }
+
+
+def run() -> dict:
+    observed = analyze(EDGE_MODES)
+    null = summarize_null(null_assignments())
+    return {
+        "experiment": "blank_shell_tqger_gate",
+        "source": {
+            "verified": [
+                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
+                "tools/LAB_AGENT_CONTEXT.md: R is connected to all but without i-pivot",
+                "tools/dnd_incrocio.py: PONTI_NOTI includes TxR,QxR,GxR,ExR",
+                "tools/data/reports/agent_20260507_1957.md: TQGE blank shell polarity",
+            ],
+            "inferred": [
+                "R edges are represented as frame_link category because R is the frame",
+                "deposit still requires blank + gauge_phase + real_sourcing on one face",
+                "count-preserving null permutes 3 wick, 4 frame, 1 gauge, 1 real, 1 blank over K5 edges",
+            ],
+        },
+        "edge_modes": {edge_name(edge): mode for edge, mode in EDGE_MODES.items()},
+        "observed": observed,
+        "null": null,
+    }
+
+
+def main() -> int:
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--json-out", type=Path)
+    args = parser.parse_args()
+
+    result = run()
+    text = json.dumps(result, indent=2, ensure_ascii=False)
+    print(text)
+    if args.json_out:
+        args_json = args.json_out
+        args_json.parent.mkdir(parents=True, exist_ok=True)
+        args_json.write_text(text + "\n", encoding="utf-8")
+    return 0
+
+
+if __name__ == "__main__":
+    raise SystemExit(main())

tokens used
116,259
Eseguito il cycle e scritto il report in [agent_20260507_2120.md](/opt/MM_D-ND/tools/data/reports/agent_20260507_2120.md).

Ho aggiunto lo strumento [exp_blank_shell_tqger_gate.py](/opt/MM_D-ND/tools/exp_blank_shell_tqger_gate.py) e i dati in [blank_shell_tqger_gate_20260507_2120.json](/opt/MM_D-ND/tools/data/blank_shell_tqger_gate_20260507_2120.json). Ho aggiornato anche [seme.json](/opt/MM_D-ND/tools/data/seme.json) con il vincolo `G_BLANK_SHELL_TQGER_GATE`.

Risultato: nel perimetro TQGE+R, R non sposta il deposito QGE; aggiunge invece `QGR` come terza faccia frame del guscio blank. Il guscio non e piu binario TQG/QGE, ma tri-facciale: TQG inerte, QGE depositante, QGR frame.

Verifiche:
- `seme.json` valido
- JSON esperimento valido e run riproducibile
- `py_compile` OK
- `structural_check.py` OK
- env API key paid vuoto
- `lab_falsifier.py` non ha prodotto verdict: provider chain non disponibile, raw log salvato in `tools/data/falsifier_20260507_2120.raw.txt`
