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/memories]
reasoning effort: medium
reasoning summaries: none
session id: 019e938b-b492-7040-abf5-f5050bde32b3
--------
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_20260604_1650.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
Assumo il ruolo AI-Lab D-ND per questo cycle. Prima leggo campo vivo, contesto del Lab e memoria condivisa recente, poi scelgo un solo esperimento verificabile e scrivo il report richiesto.
exec
/bin/bash -lc "sed -n '1,240p' tools/data/agent_field_live.md" in /opt/MM_D-ND
 succeeded in 0ms:
Leggi tools/LAB_AGENT_CONTEXT.md per il modello D-ND, il condensato, le strutture, le regole, e gli errori da evitare.

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

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

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

## Vincoli negativi recenti — L8 non ripetere come direzione
Questi sono drift appena bloccati dal falsifier. Sono memoria di bordo, non consecutio. Il prossimo report deve seguire `seme.json.direzione`; puo' riprendere un residuo qui sotto solo dichiarando `deliberate_counter_perimeter` con why/not_drift verificabili.
- Direzione viva ora: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
- Blocco L8 20260531_2024: Agent Report - Boundary Contextual Robustness Macro Audit
  - claim bloccato: `relation`: `follows_direction` ... direttiva one-shot su cache/provenance/failure audit ... null fisici interni per logistica/percolation
  - evidenza: `seme.json.direzione` dice: prossimo `perturbation/null fisico Anderson su W16/W16.5/W20, non altra metrica derivata`. Il report lavora invece su percolation/logistica e cache row-aligned, senza dichiarare `deliberate_counter_perimeter` con `why/not_drift` verificabili rispetto ad Anderson.
  - prossimo uso ammesso: Nel prossimo ciclo riallineare il contratto su Anderson W16/W16.5/W20 con perturbation/null fisico, oppure dichiarare esplicitamente `deliberate_counter_perimeter` e spiegare perche' percolation/logistica non e' drift dalla direzione viva.
Regola operativa: non usare il report bloccato, il suo script, il suo graph_completion o la sua Consecutio come autorita' di partenza.

## Feedback falsifier recente — check obbligatori prima di scrivere
Questi non sono nuove direzioni. Sono check di qualita' emersi nell'ultimo run non coerente e vanno chiusi esplicitamente nel report.
- Run non coerente: 20260531_2024
  - L6: `Contaminazione cognitiva`: CE-none: ... nella superficie letta non e' emerso un archivio CE operativo da metabolizzare.
    Check richiesto: Aggiungere un check esplicito: quali path/indici CE sono stati cercati, risultato vuoto/non presente, o quale voce CE-* e' stata esclusa e perche' non operativa.
Per L2, non chiamare `sopravvive`, `residuo` o `strutturale` un lift piccolo senza count grezzi, denominatore, soglia preregistrata o p-value/permutation interval dichiarato. Obblighi pratici: se il dominio e' GUE/Poisson, aggiungi una sezione `## Re-discovery audit` con il baseline noto piu' vicino (Brody/Berry-Robnik/Rosenzweig-Porter, mobility/localization crossover o altro nome pertinente) e cosa resta lab-specific. Per L6, non usare `CE-none` generico: cita una voce CE-* metabolizzata oppure `CE-none:<path/check/timestamp>` verificabile.
Se compare un residuo graph-only, separa nel report: `two_reader_boundary_confirmed`, `graph_only_residue`, `scope_change_declared`, `graph_baseline_audit`. Non sommare righe graph-only al boundary a due lettori. Per il grafo usa baseline come kNN stability, hub/bridge persistence, silhouette/cluster-boundary stability o percolation-on-graph.

## Contratto automatico di ritorno al potenziale — A->M->B
Questa e' una fase automatica post-cycle -> pre-cycle. La matematica qui e' prerequisito/trasduttore: non e' la conclusione. Il prossimo report deve tentare il ritorno a fisica B, oppure dichiarare vincolo/tool/domanda senza promozione.
Autorita': `agent_20260603_1955.md` (cycle=20260603_1955, status=constraint_not_promoted). I refinement supervisionati sono feedback, non authority.
Titolo sorgente: Agent Report - Anderson W16.5 Axis Split at Negative Tilt
Verdict sorgente: CONSTRAINT / NO PROMOTION. Il ciclo chiude il sotto-problema axis-split: x/y/z non spiegano una chiusura nascosta di W16.5. Il prossimo movimento deve rieseguire il replay isotropico con i semi E2E originali o aumentare size/reps sulla matrice comparabile; non serve aggiungere un'altra metrica.

Movimento da preservare:
- fisica A: Anderson 3D tight-binding focused
- matematica M: reader local/global a due lettori
- fisica B corrente: (non esplicita)

Domande B candidate:
- Esiste nel bordo Anderson W16/W16.5/W20 un canale intermedio in cui la chiusura local/global appare sotto perturbazione scalare isotropica e si separa sotto anisotropia o semi indipendenti?

Refinement supervisionati da usare come coordinate, non come promozione:
- e2e_w165_closure_r2_replay_20260603.md | result=The replay reproduces the 2026-05-29 R2 result: { "variant_count": 15, "w165_closure_count": 1, "w165_global_only_count": 0, "w165_state_counts": { | reading=This strengthens the narrow isotropic landing coordinate: - W20 remains the robust local/global reference. - W16.5 closes only in a very narrow isotropic negative-tilt band. - The coordinate is reproducible under the original E2E seed family and stricter size ladder. - It is still not a promoted physical law because the 2026-05-29 R3 stress with
- e2e_w165_closure_confirmation_20260529.md | result=The useful result is not a promoted physics claim. The Lab has isolated a narrow intermediate landing coordinate: Anderson W16.5 closes under isotropic negative onsite tilt near -0.0625, while W20 remains the robust local_global reference. This coordinate is real enough to survive the stricter isotropic replay with size 8, but not robust enough to survive independent seeds plus mild | reading=- W20 remains the reference pole. - W16.5 is a sensitive intermediate channel. - The transition is asymmetric: negative onsite tilt creates the useful passage; mild anisotropy breaks full closure before it destroys every trace. - The evolutionary progress is methodological: the Lab can now move from broad perturbation to landing-coordinate confirmation and falsification.
- e2e_w165_closure_map_20260529.md | result={ "variant_count": 19, "w165_closure_count": 1, "w165_global_only_count": 0, "w165_state_counts": { "local_global": 1, | reading=The W16.5 transition is tilt-sensitive and asymmetric: - negative tilt around -0.06 can close W16.5 cleanly; - positive tilt up to +0.10 can weaken W20 local support; - anisotropy combined with tilt did not produce a cleaner W16.5 closure in this sweep. This is a map of a sensitive intermediate channel, not a promoted physical law.

Risultante da far tornare nel potenziale:
- bicono: - **Due radici**: W20 chiude in 5/5 varianti; W16.5 non chiude in 5/5 varianti. - **Singolare**: onsite_tilt=-0.0625 a semi fissi. - **Invariante di passaggio**: il bacino richiede chiusura local/global, non solo local support. - **Campo di possibilita**: possibile usare questa matrice come baseline negativa comparabile; non-possibile promuovere W16.5 oggi.

Feedback bloccato da metabolizzare, non da seguire come direzione: cycle=20260603_1948, reason=manual_controlled, high_lenses=[].
- falsifier: Il report e' internamente coerente sulle 8 lenti: nessuna proibizione senza zero, nessun drift L8 rispetto a seme.json, e possibile/non-possibile sono dichiarati nel contratto.

Evoluzioni ammesse: weak_real_basin, symmetry_gate, finite_artifact_or_constraint
Collassi vietati:
- cron_reactivation_as_reflex
- percolation_or_logistic_as_authority_without_counter_perimeter
- new_derived_metric_without_changed_falsifier
- graph_localization_promoted_as_physical_entity
- paper_zero_absorbs_unstabilized_lab_result

Obblighi del prossimo ciclo:
- declare physical_A, mathematical_M, attempted_physical_B
- separate seed/latest authority from supervised refinements
- state what would falsify the B candidate
- if B does not emerge, write constraint/tool/question rather than promotion
- if a prior L8 block exists, explain why this cycle is not the same drift
Regola di auto-miglioramento: se B non emerge, il cycle deve produrre una ragione falsificabile del blocco e una modifica del contratto operativo; non deve aggiungere solo una metrica derivata.

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

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

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

## Contratto di aderenza alla traiettoria
- Direzione viva del seme: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
- Ultima decisione valutatore ammessa: 20260603_1955 ESCALATE/high
- Perche': L'Affinatore ha verificato che il ciclo reale e' stato un no-run: tool_use=0, duration_s=0 e ultimo testo 'no access to Claude'. Continuare come NEXT_CYCLE o accettare il delta di seme verso GUE/Poisson trasformerebbe un access denial in traiettoria scientifica, quindi prima va risolto il contratto runtime producer/autopsy.
- Nota: Non valutare il report Anderson come ciclo appena concluso: e' contesto precedente o report non prodotto dal run reale. Blocco operativo, non scientifico.

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

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

# Palette operatoria espansa del Lab

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

Regola d'uso:

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

Anti-tautologia:

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

## Fasce di triturazione

### 1. Geometria differenziale e gravita'

Operatori:

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

Dipoli utili:

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

Controlli:

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

Attenzione:

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

### 2. Gauge, connessioni e campi

Operatori:

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

Dipoli utili:

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

Controlli:

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

### 3. Spazi quantistici e misura

Operatori:

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

Dipoli utili:

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

Controlli:

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

Nota:

exec
/bin/bash -lc "sed -n '1,260p' tools/LAB_AGENT_CONTEXT.md" in /opt/MM_D-ND
 succeeded in 0ms:
# AI-Lab D-ND — Contesto Operativo

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

## Chi sei

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

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

## Il modello D-ND — nucleo

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

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

## Il condensato — cosa è stato verificato

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

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

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

## Strutture trovate dal lab (sessioni interattive)

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

## Le 10 domande fondamentali (incrocio teorie)

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

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

## Vincoli operativi

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

exec
/bin/bash -lc "find shared_memory -maxdepth 1 -type f -name '*.md' -printf '%T@ %p\\n' | sort -nr | head -10" in /opt/MM_D-ND
 succeeded in 0ms:
1778145669.2262952210 shared_memory/deposito_cambia_la_parola_non_regola_2026-05-07.md
1778141627.9144398050 shared_memory/feedback_indeterminato_reitera_con_sistema_2026-05-07.md
1778141603.7733754630 shared_memory/README.md

exec
/bin/bash -lc 'git status --short --branch' in /opt/MM_D-ND
 succeeded in 0ms:
## main...origin/main
 M applications/INDEX.draft.json
 M docs/guides/lab_current_state_logic_2026-05-08.md
 M papers/paper_zero.md
 M tools/LAB_AGENT_CONTEXT.md
 M tools/build_agent_field.py
 M tools/build_lab_graph.py
 M tools/data/agent_field_live.md
 M tools/data/b2_apply_log.jsonl
 M tools/data/ciclo_memoria.json
 M tools/data/conoscenza_teorie.json
 M tools/data/consecutio.json
 M tools/data/consecutio_processata.json
 M tools/data/domandatore_pre_cycle.json
 M tools/data/domande_fondamentali.json
 M tools/data/g1_log.jsonl
 M tools/data/g2_log.jsonl
 M tools/data/graph_completion/latest.json
 M tools/data/incrocio_risultato.json
 M tools/data/knowledge_state.json
 M tools/data/lab_bridge_issues.jsonl
 M tools/data/lab_data.json
 M tools/data/lab_graph.json
 M tools/data/lab_health.json
 M tools/data/lab_session_log.jsonl
 M tools/data/pipeline_state.json
 M tools/data/ponti_evoluti.json
 M tools/data/refresh_detector_state.json
 M tools/data/repairs/repair_run_log.jsonl
 M tools/data/reports/latest.md
 M tools/data/seme.json
 D tools/data/seme_archive/piano_37.json
 D tools/data/seme_archive/piano_38.json
 D tools/data/seme_archive/piano_4.json
 D tools/data/seme_archive/piano_5.json
 D tools/data/seme_archive/piano_6.json
 D tools/data/seme_archive/piano_7.json
 D tools/data/seme_archive/piano_8.json
 D tools/data/seme_archive/piano_9.json
 M tools/data/seme_backup_pre_run.json
 M tools/data/tm1_figures/tensions.json
 M tools/data/tm1_figures/tensions_raw.json
 M tools/data/valutatore_log.jsonl
 M tools/evolution_report.md
 M tools/exp_semireal_boundary_transfer_gate.py
 M tools/graph_completion_compiler.py
 M tools/lab_aeternitas.py
 M tools/lab_agent.sh
 M tools/lab_falsifier.py
 M tools/lab_session_logger.py
?? applications/scoperte/20260513_0330_prime-vs-mod6-sr-boundary_auto/
?? applications/scoperte/20260514_1330_sr-residual-width-audit_auto/
?? applications/scoperte/20260514_1631_chiusura-tester-rimbalzo-fisico-w6_auto/
?? applications/scoperte/20260514_1640_rafforzamento-tester-fisico-goegue-n-curve_auto/
?? applications/scoperte/20260515_1712_primemod6-generative-null-w2048_auto/
?? applications/scoperte/20260515_1816_v2-generator-scaling-gate_auto/
?? applications/scoperte/20260515_1904_boundary-classical-crossover-audit_auto/
?? applications/scoperte/20260515_1933_rosenzweig-porter-physical-bridge-audit_auto/
?? applications/scoperte/20260515_1940_rp-boundary-size-stability-audit_auto/
?? applications/scoperte/20260515_1947_anderson-3d-mobility-edge-two-reader_auto/
?? applications/scoperte/20260516_0921_rp-unfolding-sensitivity-audit_auto/
?? applications/scoperte/20260516_0938_rp-candidate-local-window-stress-gate_auto/
?? applications/scoperte/20260516_1007_rp-local-window-persistence-curve_auto/
?? applications/scoperte/20260516_1019_rp-exact-local-window-size-stress_auto/
?? applications/scoperte/20260516_1031_boundary-unfolding-transfer-matrix_auto/
?? applications/scoperte/20260516_1104_endpoint-gated-rp-boundary_auto/
?? applications/scoperte/20260516_1111_endpoint-gated-rp-size-ladder_auto/
?? applications/scoperte/20260516_1117_anderson-3d-two-reader-boundary-null_auto/
?? applications/scoperte/20260516_1135_anderson-comparable-null-audit_auto/
?? applications/scoperte/20260516_1148_prime-bridge-label-null-audit_auto/
?? applications/scoperte/20260516_1206_graph-only-residue-label-null-audit_auto/
?? applications/scoperte/20260516_1230_graph-mechanism-ablation_auto/
?? applications/soluzioni/20260513_0330_prime-vs-mod6-sr-boundary/
?? applications/soluzioni/20260514_1330_sr-residual-width-audit/
?? applications/soluzioni/20260514_1631_chiusura-tester-rimbalzo-fisico-w6/
?? applications/soluzioni/20260514_1640_rafforzamento-tester-fisico-goegue-n-curve/
?? applications/soluzioni/20260515_1712_primemod6-generative-null-w2048/
?? applications/soluzioni/20260515_1816_v2-generator-scaling-gate/
?? applications/soluzioni/20260515_1904_boundary-classical-crossover-audit/
?? applications/soluzioni/20260515_1933_rosenzweig-porter-physical-bridge-audit/
?? applications/soluzioni/20260515_1940_rp-boundary-size-stability-audit/
?? applications/soluzioni/20260515_1947_anderson-3d-mobility-edge-two-reader/
?? applications/soluzioni/20260516_0921_rp-unfolding-sensitivity-audit/
?? applications/soluzioni/20260516_0938_rp-candidate-local-window-stress-gate/
?? applications/soluzioni/20260516_1007_rp-local-window-persistence-curve/
?? applications/soluzioni/20260516_1019_rp-exact-local-window-size-stress/
?? applications/soluzioni/20260516_1031_boundary-unfolding-transfer-matrix/
?? applications/soluzioni/20260516_1104_endpoint-gated-rp-boundary/
?? applications/soluzioni/20260516_1111_endpoint-gated-rp-size-ladder/
?? applications/soluzioni/20260516_1117_anderson-3d-two-reader-boundary-null/
?? applications/soluzioni/20260516_1135_anderson-comparable-null-audit/
?? applications/soluzioni/20260516_1148_prime-bridge-label-null-audit/
?? applications/soluzioni/20260516_1206_graph-only-residue-label-null-audit/
?? applications/soluzioni/20260516_1230_graph-mechanism-ablation/
?? docs/guides/lab_preflight_agent_2026-05-14.md
?? docs/operations/
?? tools/build_lab_data.py
?? tools/build_safe_agent_field_preview.py
?? tools/compose_filtered_field_preview.py
?? tools/compose_supervised_entry_preview.py
?? tools/data/aeternitas/aeternitas_20260512_033539.json
?? tools/data/aeternitas/aeternitas_20260513_033605.json
?? tools/data/aeternitas/aeternitas_20260514_033420.json
?? tools/data/aeternitas/aeternitas_20260514_133424.json
?? tools/data/aeternitas/aeternitas_20260514_150454.json
?? tools/data/aeternitas/aeternitas_20260514_161058.json
?? tools/data/aeternitas/aeternitas_20260514_161719.json
?? tools/data/aeternitas/aeternitas_20260514_163527.json
?? tools/data/aeternitas/aeternitas_20260514_164509.json
?? tools/data/aeternitas/aeternitas_20260514_165437.json
?? tools/data/aeternitas/aeternitas_20260514_170109.json
?? tools/data/aeternitas/aeternitas_20260514_171152.json
?? tools/data/aeternitas/aeternitas_20260514_185450.json
?? tools/data/aeternitas/aeternitas_20260515_162727.json
?? tools/data/aeternitas/aeternitas_20260515_165116.json
?? tools/data/aeternitas/aeternitas_20260515_170328.json
?? tools/data/aeternitas/aeternitas_20260515_171005.json
?? tools/data/aeternitas/aeternitas_20260515_171725.json
?? tools/data/aeternitas/aeternitas_20260515_172913.json
?? tools/data/aeternitas/aeternitas_20260515_174023.json
?? tools/data/aeternitas/aeternitas_20260515_175045.json
?? tools/data/aeternitas/aeternitas_20260515_180306.json
?? tools/data/aeternitas/aeternitas_20260515_181257.json
?? tools/data/aeternitas/aeternitas_20260515_182126.json
?? tools/data/aeternitas/aeternitas_20260515_183111.json
?? tools/data/aeternitas/aeternitas_20260515_190118.json
?? tools/data/aeternitas/aeternitas_20260515_191018.json
?? tools/data/aeternitas/aeternitas_20260515_192915.json
?? tools/data/aeternitas/aeternitas_20260515_193919.json
?? tools/data/aeternitas/aeternitas_20260515_194625.json
?? tools/data/aeternitas/aeternitas_20260515_195317.json
?? tools/data/aeternitas/aeternitas_20260516_033848.json
?? tools/data/aeternitas/aeternitas_20260516_0720.json
?? tools/data/aeternitas/aeternitas_20260516_0820.json
?? tools/data/aeternitas/aeternitas_20260516_0921.json
?? tools/data/aeternitas/aeternitas_20260516_0938.json
?? tools/data/aeternitas/aeternitas_20260516_1007.json
?? tools/data/aeternitas/aeternitas_20260516_1019.json
?? tools/data/aeternitas/aeternitas_20260516_1031.json
?? tools/data/aeternitas/aeternitas_20260516_1045.json
?? tools/data/aeternitas/aeternitas_20260516_1058.json
?? tools/data/aeternitas/aeternitas_20260516_1104.json
?? tools/data/aeternitas/aeternitas_20260516_1111.json
?? tools/data/aeternitas/aeternitas_20260516_1117.json
?? tools/data/aeternitas/aeternitas_20260516_1124.json
?? tools/data/aeternitas/aeternitas_20260516_1135.json
?? tools/data/aeternitas/aeternitas_20260516_1140.json
?? tools/data/aeternitas/aeternitas_20260516_1148.json
?? tools/data/aeternitas/aeternitas_20260516_1206.json
?? tools/data/aeternitas/aeternitas_20260516_1230.json
?? tools/data/aeternitas/aeternitas_20260528_2028.json
?? tools/data/aeternitas/aeternitas_20260528_2042.json
?? tools/data/aeternitas/aeternitas_20260528_2138.json
?? tools/data/aeternitas/aeternitas_20260528_2222.json
?? tools/data/aeternitas/aeternitas_20260529_0938.json
?? tools/data/aeternitas/aeternitas_20260531_2024.json
?? tools/data/aeternitas/aeternitas_20260603_1948.json
?? tools/data/aeternitas/aeternitas_20260603_1955.json
?? tools/data/agent_field_entry_supervised.md
?? tools/data/anderson3d_comparable_null_audit_20260516_1135.json
?? tools/data/anderson3d_component_state_interface_input_20260514_1850.json
?? tools/data/anderson3d_endpoint_preserving_null_20260516_1124.json
?? tools/data/anderson3d_mobility_edge_two_reader_audit_20260515_1947.json
?? tools/data/anderson3d_mobility_edge_two_reader_audit_20260516_1117.json
?? tools/data/anderson3d_mobility_edge_two_reader_audit_20260529_focused.json
?? tools/data/anderson3d_physical_perturbation_20260529_anisotropic_x.json
?? tools/data/anderson3d_physical_perturbation_20260529_baseline.json
?? tools/data/anderson3d_physical_perturbation_20260529_e2e_anisotropic_x.json
?? tools/data/anderson3d_physical_perturbation_20260529_e2e_baseline.json
?? tools/data/anderson3d_physical_perturbation_20260529_e2e_tilted_disorder.json
?? tools/data/anderson3d_physical_perturbation_20260529_tilted_disorder.json
?? tools/data/aubry_binary_grammar_surrogate_gate_20260515_1807.json
?? tools/data/aubry_boundary_phase_transport_gate_20260515_1745.json
?? tools/data/aubry_cosine_boundary_counter_gate_20260515_1758.json
?? tools/data/aubry_physical_perturbation_20260529_baseline.json
?? tools/data/aubry_physical_perturbation_20260529_second_hop_neg.json
?? tools/data/aubry_physical_perturbation_20260529_second_hop_pos.json
?? tools/data/aubry_v2_generator_scaling_gate_20260515_1816.json
?? tools/data/biconi/bicono_20260512_0330.json
?? tools/data/biconi/bicono_20260513_0330.json
?? tools/data/biconi/bicono_20260514_0330.json
?? tools/data/biconi/bicono_20260514_1330.json
?? tools/data/biconi/bicono_20260514_1458.json
?? tools/data/biconi/bicono_20260514_1605.json
?? tools/data/biconi/bicono_20260514_1612.json
?? tools/data/biconi/bicono_20260514_1631.json
?? tools/data/biconi/bicono_20260514_1640.json
?? tools/data/biconi/bicono_20260514_1649.json
?? tools/data/biconi/bicono_20260514_1656.json
?? tools/data/biconi/bicono_20260514_1701.json
?? tools/data/biconi/bicono_20260514_1850.json
?? tools/data/biconi/bicono_20260515_1623.json
?? tools/data/biconi/bicono_20260515_1647.json
?? tools/data/biconi/bicono_20260515_1659.json
?? tools/data/biconi/bicono_20260515_1705.json
?? tools/data/biconi/bicono_20260515_1712.json
?? tools/data/biconi/bicono_20260515_1724.json
?? tools/data/biconi/bicono_20260515_1734.json
?? tools/data/biconi/bicono_20260515_1745.json
?? tools/data/biconi/bicono_20260515_1758.json
?? tools/data/biconi/bicono_20260515_1807.json
?? tools/data/biconi/bicono_20260515_1816.json
?? tools/data/biconi/bicono_20260515_1826.json
?? tools/data/biconi/bicono_20260515_1855.json
?? tools/data/biconi/bicono_20260515_1904.json
?? tools/data/biconi/bicono_20260515_1915.json
?? tools/data/biconi/bicono_20260515_1933.json
?? tools/data/biconi/bicono_20260515_1940.json
?? tools/data/biconi/bicono_20260515_1947.json
?? tools/data/biconi/bicono_20260516_0330.json
?? tools/data/biconi/bicono_20260516_0720.json
?? tools/data/biconi/bicono_20260516_0820.json
?? tools/data/biconi/bicono_20260516_0921.json
?? tools/data/biconi/bicono_20260516_0938.json
?? tools/data/biconi/bicono_20260516_1007.json
?? tools/data/biconi/bicono_20260516_1019.json
?? tools/data/biconi/bicono_20260516_1031.json
?? tools/data/biconi/bicono_20260516_1045.json
?? tools/data/biconi/bicono_20260516_1058.json
?? tools/data/biconi/bicono_20260516_1104.json
?? tools/data/biconi/bicono_20260516_1111.json
?? tools/data/biconi/bicono_20260516_1117.json
?? tools/data/biconi/bicono_20260516_1124.json
?? tools/data/biconi/bicono_20260516_1135.json
?? tools/data/biconi/bicono_20260516_1140.json
?? tools/data/biconi/bicono_20260516_1148.json
?? tools/data/biconi/bicono_20260516_1206.json
?? tools/data/biconi/bicono_20260516_1230.json
?? tools/data/biconi/bicono_20260528_2042.json
?? tools/data/biconi/bicono_20260528_2138.json
?? tools/data/biconi/bicono_20260528_2222.json
?? tools/data/biconi/bicono_20260529_0938.json
?? tools/data/biconi/bicono_20260531_2024.json
?? tools/data/biconi/bicono_20260603_1948.json
?? tools/data/biconi/bicono_20260603_1955.json
?? tools/data/boundary_anderson_closure_probe_20260529.json
?? tools/data/boundary_anderson_closure_probe_20260529_focused.json
?? tools/data/boundary_anderson_costability_null_20260529.json
?? tools/data/boundary_anderson_costability_null_20260529_focused.json
?? tools/data/boundary_anderson_latent_reference_probe_20260529.json
?? tools/data/boundary_anderson_latent_reference_probe_20260529_focused.json
?? tools/data/boundary_anderson_physical_perturbation_null_20260529.json
?? tools/data/boundary_anderson_physical_perturbation_null_20260529_e2e.json
?? tools/data/boundary_anderson_transaction_adapter_20260529.json
?? tools/data/boundary_anderson_transaction_adapter_20260529_focused.json
?? tools/data/boundary_aubry_physical_perturbation_null_20260529.json
?? tools/data/boundary_bridge_stability_audit_20260515_1915.json
?? tools/data/boundary_bridge_stability_audit_20260516_1140.json
?? tools/data/boundary_classical_crossover_audit_20260515_1904.json
?? tools/data/boundary_contextual_robustness_macro_audit_20260531_2024.json
?? tools/data/boundary_contextual_robustness_percolation_band_20260529_N96.jsonl
?? tools/data/boundary_contextual_robustness_percolation_ladder_20260529_N64.jsonl
?? tools/data/boundary_contextual_transaction_detector_percolation_band_20260529.json
?? tools/data/boundary_contextual_transaction_detector_percolation_ladder_20260529.json
?? tools/data/boundary_discriminator_workflow_20260529.json
?? tools/data/boundary_evolution_measure_20260529.json
?? tools/data/boundary_evolution_measure_20260529_focused.json
?? tools/data/boundary_graph_curvature_gate_20260515_1855.json
?? tools/data/boundary_graph_mechanism_ablation_20260516_1230.json
?? tools/data/boundary_graph_null_audit_20260516_0330.json
?? tools/data/boundary_graph_residue_threshold_audit_20260516_0720.json
?? tools/data/boundary_percolation_edge_trace_20260528_2138.json
?? tools/data/boundary_physical_internal_null_20260528_2042.json
?? tools/data/boundary_physical_internal_null_cache_row_aligned_20260528_2251_N8.jsonl
?? tools/data/boundary_physical_internal_null_cache_row_aligned_20260529_independent_N128.jsonl
?? tools/data/boundary_physical_internal_null_cache_row_aligned_smoke_20260528.jsonl
?? tools/data/boundary_physical_internal_null_preflight_20260528_2042.json
?? tools/data/boundary_physical_internal_null_repro_20260528_2201.json
?? tools/data/boundary_physical_internal_null_repro_20260528_2222_seed202605282042.json
?? tools/data/boundary_physical_internal_null_repro_20260528_2222_seed202605282223_N1.json
?? tools/data/boundary_physical_perturbation_evolution_measure_20260529_e2e.json
?? tools/data/boundary_prime_label_null_audit_20260516_1148.json
?? tools/data/boundary_reader_regression_audit_20260528_2138.json
?? tools/data/boundary_reference_position_probe_trial47_20260529.json
?? tools/data/boundary_residue_label_count_null_audit_20260516_1206.json
?? tools/data/boundary_rp_physical_perturbation_null_20260529.json
?? tools/data/boundary_rp_physical_perturbation_null_20260529_reps12.json
?? tools/data/boundary_tail_reference_probe_20260529.json
?? tools/data/boundary_tail_reference_probe_trial47_replay_20260529.json
?? tools/data/boundary_tail_reference_probe_trial47_replay_debug_20260529.json
?? tools/data/boundary_tail_reference_probe_trial47_replay_fixed_20260529.json
?? tools/data/boundary_transition_matrix_percolation_band_20260529.json
?? tools/data/boundary_transition_matrix_percolation_ladder_20260529.json
?? tools/data/boundary_unfolding_transfer_matrix_20260516_1031.json
?? tools/data/component_state_anderson3d_interface_20260514_1850.json
?? tools/data/component_state_anderson3d_interface_20260514_1850.trace.jsonl
?? tools/data/component_state_fit_ready_20260514_1649.json
?? tools/data/component_state_interface_smoke_20260514_1649.json
?? tools/data/component_state_interface_smoke_20260514_1649.trace.jsonl
?? tools/data/component_state_interface_smoke_input_20260514_1649.json
?? tools/data/domandatore/domandatore_20260512_0330.json
?? tools/data/domandatore/domandatore_20260512_0345.json
?? tools/data/domandatore/domandatore_20260513_0330.json
?? tools/data/domandatore/domandatore_20260513_0345.json
?? tools/data/domandatore/domandatore_20260514_0330.json
?? tools/data/domandatore/domandatore_20260514_0345.json
?? tools/data/domandatore/domandatore_20260514_1330.json
?? tools/data/domandatore/domandatore_20260514_1458.json
?? tools/data/domandatore/domandatore_20260515_0345.json
?? tools/data/domandatore/domandatore_20260515_1623.json
?? tools/data/domandatore/domandatore_20260515_1647.json
?? tools/data/domandatore/domandatore_20260515_1659.json
?? tools/data/domandatore/domandatore_20260516_0345.json
?? tools/data/domandatore/domandatore_20260517_0345.json
?? tools/data/domandatore/domandatore_20260518_0345.json
?? tools/data/domandatore/domandatore_20260519_0345.json
?? tools/data/domandatore/domandatore_20260520_0345.json
?? tools/data/domandatore/domandatore_20260521_0345.json
?? tools/data/domandatore/domandatore_20260522_0345.json
?? tools/data/domandatore/domandatore_20260523_0345.json
?? tools/data/domandatore/domandatore_20260524_0345.json
?? tools/data/domandatore/domandatore_20260525_0345.json
?? tools/data/domandatore/domandatore_20260526_0345.json
?? tools/data/domandatore/domandatore_20260526_1751.json
?? tools/data/domandatore/domandatore_20260526_1852.json
?? tools/data/domandatore/domandatore_20260526_1854.json
?? tools/data/domandatore/domandatore_20260526_1901.json
?? tools/data/domandatore/domandatore_20260526_1915.json
?? tools/data/domandatore/domandatore_20260526_1918.json
?? tools/data/domandatore/domandatore_20260526_1937.json
?? tools/data/domandatore/domandatore_20260526_1957.json
?? tools/data/domandatore/domandatore_20260527_0345.json
?? tools/data/domandatore/domandatore_20260528_0345.json
?? tools/data/domandatore/domandatore_20260528_2028.json
?? tools/data/domandatore/domandatore_20260528_2042.json
?? tools/data/domandatore/domandatore_20260528_2138.json
?? tools/data/domandatore/domandatore_20260529_0345.json
?? tools/data/domandatore/domandatore_20260530_0345.json
?? tools/data/domandatore/domandatore_20260531_0345.json
?? tools/data/domandatore/domandatore_20260531_2024.json
?? tools/data/domandatore/domandatore_20260601_0345.json
?? tools/data/domandatore/domandatore_20260602_0345.json
?? tools/data/domandatore/domandatore_20260603_0345.json
?? tools/data/domandatore/domandatore_20260603_1943.json
?? tools/data/domandatore/domandatore_20260603_1948.json
?? tools/data/domandatore/domandatore_20260603_1955.json
?? tools/data/domandatore/domandatore_20260604_0345.json
?? tools/data/domandatore/domandatore_20260604_1549.json
?? tools/data/domandatore/domandatore_20260604_1558.json
?? tools/data/endpoint_feature_scramble_null_20260516_1058.json
?? tools/data/endpoint_gated_rp_boundary_20260516_1104.json
?? tools/data/endpoint_gated_rp_size_ladder_20260516_1111.json
?? tools/data/endpoint_stability_filter_20260516_1045.json
?? tools/data/evolution/evolution_20260512_0330.md
?? tools/data/evolution/evolution_20260513_0330.md
?? tools/data/evolution/evolution_20260514_0330.md
?? tools/data/evolution/evolution_20260514_1330.md
?? tools/data/evolution/evolution_20260514_1458.md
?? tools/data/evolution/evolution_20260514_1605.md
?? tools/data/evolution/evolution_20260514_1612.md
?? tools/data/evolution/evolution_20260514_1631.md
?? tools/data/evolution/evolution_20260514_1640.md
?? tools/data/evolution/evolution_20260514_1649.md
?? tools/data/evolution/evolution_20260514_1656.md
?? tools/data/evolution/evolution_20260514_1701.md
?? tools/data/evolution/evolution_20260514_1850.md
?? tools/data/evolution/evolution_20260515_1623.md
?? tools/data/evolution/evolution_20260515_1647.md
?? tools/data/evolution/evolution_20260515_1659.md
?? tools/data/evolution/evolution_20260515_1705.md
?? tools/data/evolution/evolution_20260515_1712.md
?? tools/data/evolution/evolution_20260515_1724.md
?? tools/data/evolution/evolution_20260515_1734.md
?? tools/data/evolution/evolution_20260515_1745.md
?? tools/data/evolution/evolution_20260515_1758.md
?? tools/data/evolution/evolution_20260515_1807.md
?? tools/data/evolution/evolution_20260515_1816.md
?? tools/data/evolution/evolution_20260515_1826.md
?? tools/data/evolution/evolution_20260515_1855.md
?? tools/data/evolution/evolution_20260515_1904.md
?? tools/data/evolution/evolution_20260515_1915.md
?? tools/data/evolution/evolution_20260515_1933.md
?? tools/data/evolution/evolution_20260515_1940.md
?? tools/data/evolution/evolution_20260515_1947.md
?? tools/data/evolution/evolution_20260516_0330.md
?? tools/data/evolution/evolution_20260516_0720.md
?? tools/data/evolution/evolution_20260516_0820.md
?? tools/data/evolution/evolution_20260516_0921.md
?? tools/data/evolution/evolution_20260516_0938.md
?? tools/data/evolution/evolution_20260516_1007.md
?? tools/data/evolution/evolution_20260516_1019.md
?? tools/data/evolution/evolution_20260516_1031.md
?? tools/data/evolution/evolution_20260516_1045.md
?? tools/data/evolution/evolution_20260516_1058.md
?? tools/data/evolution/evolution_20260516_1104.md
?? tools/data/evolution/evolution_20260516_1111.md
?? tools/data/evolution/evolution_20260516_1117.md
?? tools/data/evolution/evolution_20260516_1124.md
?? tools/data/evolution/evolution_20260516_1135.md
?? tools/data/evolution/evolution_20260516_1140.md
?? tools/data/evolution/evolution_20260516_1148.md
?? tools/data/evolution/evolution_20260516_1206.md
?? tools/data/evolution/evolution_20260516_1230.md
?? tools/data/evolution/evolution_20260528_2028.md
?? tools/data/evolution/evolution_20260528_2042.md
?? tools/data/evolution/evolution_20260528_2138.md
?? tools/data/evolution/evolution_20260528_2222.md
?? tools/data/evolution/evolution_20260531_2024.md
?? tools/data/evolution/evolution_20260603_1943.md
?? tools/data/evolution/evolution_20260603_1948.md
?? tools/data/evolution/evolution_20260603_1955.md
?? tools/data/falsifier_20260529_0938.json
?? tools/data/graph_completion/graph_completion_20260512_0330.json
?? tools/data/graph_completion/graph_completion_20260513_0330.json
?? tools/data/graph_completion/graph_completion_20260514_0330.json
?? tools/data/graph_completion/graph_completion_20260514_1330.json
?? tools/data/graph_completion/graph_completion_20260514_1458.json
?? tools/data/graph_completion/graph_completion_20260514_1605.json
?? tools/data/graph_completion/graph_completion_20260514_1612.json
?? tools/data/graph_completion/graph_completion_20260514_1631.json
?? tools/data/graph_completion/graph_completion_20260514_1640.json
?? tools/data/graph_completion/graph_completion_20260514_1649.json
?? tools/data/graph_completion/graph_completion_20260514_1656.json
?? tools/data/graph_completion/graph_completion_20260514_1701.json
?? tools/data/graph_completion/graph_completion_20260514_1850.json
?? tools/data/graph_completion/graph_completion_20260515_1623.json
?? tools/data/graph_completion/graph_completion_20260515_1647.json
?? tools/data/graph_completion/graph_completion_20260515_1659.json
?? tools/data/graph_completion/graph_completion_20260515_1705.json
?? tools/data/graph_completion/graph_completion_20260515_1712.json
?? tools/data/graph_completion/graph_completion_20260515_1724.json
?? tools/data/graph_completion/graph_completion_20260515_1734.json
?? tools/data/graph_completion/graph_completion_20260515_1745.json
?? tools/data/graph_completion/graph_completion_20260515_1758.json
?? tools/data/graph_completion/graph_completion_20260515_1807.json
?? tools/data/graph_completion/graph_completion_20260515_1816.json
?? tools/data/graph_completion/graph_completion_20260515_1904.json
?? tools/data/graph_completion/graph_completion_20260515_1933.json
?? tools/data/graph_completion/graph_completion_20260515_1940.json
?? tools/data/graph_completion/graph_completion_20260515_1947.json
?? tools/data/graph_completion/graph_completion_20260516_0921.json
?? tools/data/graph_completion/graph_completion_20260516_0938.json
?? tools/data/graph_completion/graph_completion_20260516_1007.json
?? tools/data/graph_completion/graph_completion_20260516_1019.json
?? tools/data/graph_completion/graph_completion_20260516_1031.json
?? tools/data/graph_completion/graph_completion_20260516_1104.json
?? tools/data/graph_completion/graph_completion_20260516_1111.json
?? tools/data/graph_completion/graph_completion_20260516_1117.json
?? tools/data/graph_completion/graph_completion_20260516_1135.json
?? tools/data/graph_completion/graph_completion_20260516_1148.json
?? tools/data/graph_completion/graph_completion_20260516_1206.json
?? tools/data/graph_completion/graph_completion_20260516_1230.json
?? tools/data/graph_completion/graph_completion_20260603_1955.json
?? tools/data/incrocio_20260512_0330.json
?? tools/data/incrocio_20260513_0330.json
?? tools/data/incrocio_20260514_0330.json
?? tools/data/incrocio_20260514_1330.json
?? tools/data/incrocio_20260514_1458.json
?? tools/data/incrocio_20260514_1605.json
?? tools/data/incrocio_20260514_1612.json
?? tools/data/incrocio_20260514_1631.json
?? tools/data/incrocio_20260514_1640.json
?? tools/data/incrocio_20260514_1649.json
?? tools/data/incrocio_20260514_1656.json
?? tools/data/incrocio_20260514_1701.json
?? tools/data/incrocio_20260514_1850.json
?? tools/data/incrocio_20260515_1623.json
?? tools/data/incrocio_20260515_1647.json
?? tools/data/incrocio_20260515_1659.json
?? tools/data/incrocio_20260515_1705.json
?? tools/data/incrocio_20260515_1712.json
?? tools/data/incrocio_20260515_1724.json
?? tools/data/incrocio_20260515_1734.json
?? tools/data/incrocio_20260515_1745.json
?? tools/data/incrocio_20260515_1758.json
?? tools/data/incrocio_20260515_1807.json
?? tools/data/incrocio_20260515_1816.json
?? tools/data/incrocio_20260515_1826.json
?? tools/data/incrocio_20260515_1855.json
?? tools/data/incrocio_20260515_1904.json
?? tools/data/incrocio_20260515_1915.json
?? tools/data/incrocio_20260515_1933.json
?? tools/data/incrocio_20260515_1940.json
?? tools/data/incrocio_20260515_1947.json
?? tools/data/incrocio_20260516_0330.json
?? tools/data/incrocio_20260516_0720.json
?? tools/data/incrocio_20260516_0820.json
?? tools/data/incrocio_20260516_0921.json
?? tools/data/incrocio_20260516_0938.json
?? tools/data/incrocio_20260516_1007.json
?? tools/data/incrocio_20260516_1019.json
?? tools/data/incrocio_20260516_1031.json
?? tools/data/incrocio_20260516_1045.json
?? tools/data/incrocio_20260516_1058.json
?? tools/data/incrocio_20260516_1104.json
?? tools/data/incrocio_20260516_1111.json
?? tools/data/incrocio_20260516_1117.json
?? tools/data/incrocio_20260516_1124.json
?? tools/data/incrocio_20260516_1135.json
?? tools/data/incrocio_20260516_1140.json
?? tools/data/incrocio_20260516_1148.json
?? tools/data/incrocio_20260516_1206.json
?? tools/data/incrocio_20260516_1230.json
?? tools/data/incrocio_20260528_2028.json
?? tools/data/incrocio_20260528_2042.json
?? tools/data/incrocio_20260528_2138.json
?? tools/data/incrocio_20260528_2222.json
?? tools/data/incrocio_20260531_2024.json
?? tools/data/incrocio_20260603_1943.json
?? tools/data/incrocio_20260603_1948.json
?? tools/data/incrocio_20260603_1955.json
?? tools/data/incrocio_20260604_1650.json
?? tools/data/landing/
?? tools/data/operator_directives_consumed/operator_directive_20260514_1612.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1631.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1640.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1649.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1656.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1701.md
?? tools/data/operator_directives_consumed/operator_directive_20260514_1850.md
?? tools/data/operator_directives_consumed/operator_directive_20260528_2138.md
?? tools/data/operator_directives_consumed/operator_directive_20260528_2222.md
?? tools/data/operator_directives_consumed/operator_directive_20260531_2024.md
?? tools/data/photonic_boundary_third_included_gate_20260515_1734.json
?? tools/data/physical_sr_residue_bounce_20260514_1612.json
?? tools/data/physical_sr_residue_bounce_20260514_1612.trace.jsonl
?? tools/data/physical_sr_residue_bounce_20260514_1631_w6.json
?? tools/data/physical_sr_residue_bounce_20260514_1631_w6.trace.jsonl
?? tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.json
?? tools/data/physical_sr_residue_bounce_20260514_1640_goe_gue_ncurve.trace.jsonl
?? tools/data/potential_return/
?? tools/data/preflight/
?? tools/data/prime_sr_persistent_boundary_20260512_0330.json
?? tools/data/prime_sr_persistent_boundary_20260512_0330_seedcheck.json
?? tools/data/prime_vs_mod6_sr_boundary_20260513_0330.json
?? tools/data/prime_vs_mod6_sr_boundary_20260513_0330_seedcheck.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_0330_seedcheck.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w1024.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w2048.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1330_w512.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w4096.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w4096.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w4096_dense.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w4096_dense.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w8192_dense.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1458_w8192_dense.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w16384.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w16384.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w4096.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w4096.trace.jsonl
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w8192.json
?? tools/data/prime_vs_mod6_sr_boundary_20260514_1605_w8192.trace.jsonl
?? tools/data/promotions/promotion_20260513_0330.json
?? tools/data/promotions/promotion_20260514_1330.json
?? tools/data/promotions/promotion_20260514_1631.json
?? tools/data/promotions/promotion_20260514_1640.json
?? tools/data/promotions/promotion_20260514_1656.json
?? tools/data/promotions/promotion_20260515_1712.json
?? tools/data/promotions/promotion_20260515_1758.json
?? tools/data/promotions/promotion_20260515_1816.json
?? tools/data/promotions/promotion_20260515_1904.json
?? tools/data/promotions/promotion_20260515_1933.json
?? tools/data/promotions/promotion_20260515_1940.json
?? tools/data/promotions/promotion_20260515_1947.json
?? tools/data/promotions/promotion_20260516_0921.json
?? tools/data/promotions/promotion_20260516_0938.json
?? tools/data/promotions/promotion_20260516_1007.json
?? tools/data/promotions/promotion_20260516_1019.json
?? tools/data/promotions/promotion_20260516_1031.json
?? tools/data/promotions/promotion_20260516_1104.json
?? tools/data/promotions/promotion_20260516_1111.json
?? tools/data/promotions/promotion_20260516_1117.json
?? tools/data/promotions/promotion_20260516_1135.json
?? tools/data/promotions/promotion_20260516_1148.json
?? tools/data/promotions/promotion_20260516_1206.json
?? tools/data/promotions/promotion_20260516_1230.json
?? tools/data/promotions/promotion_20260528_2028.json
?? tools/data/promotions/promotion_20260603_1948.json
?? tools/data/promotions/promotion_20260603_1955.json
?? tools/data/quasiperiodic_grammar_scale_gate_20260514_1701.json
?? tools/data/quasiperiodic_vc_lattice_gate_20260515_1724.json
?? tools/data/qxg_txq_txg_fit_ready_contract_20260604.json
?? tools/data/repairs/repair_20260512_0330_decision.json
?? tools/data/repairs/repair_20260513_0330_decision.json
?? tools/data/repairs/repair_20260514_0330_decision.json
?? tools/data/repairs/repair_20260514_1330_decision.json
?? tools/data/repairs/repair_20260514_1458_decision.json
?? tools/data/repairs/repair_20260514_1605_decision.json
?? tools/data/repairs/repair_20260514_1612_decision.json
?? tools/data/repairs/repair_20260514_1631_decision.json
?? tools/data/repairs/repair_20260514_1640_decision.json
?? tools/data/repairs/repair_20260514_1649_decision.json
?? tools/data/repairs/repair_20260514_1656.json
?? tools/data/repairs/repair_20260514_1656.md
?? tools/data/repairs/repair_20260514_1656_decision.json
?? tools/data/repairs/repair_20260514_1850_decision.json
?? tools/data/reports/agent_20260512_0330.md
?? tools/data/reports/agent_20260513_0330.md
?? tools/data/reports/agent_20260514_0330.md
?? tools/data/reports/agent_20260514_1330.md
?? tools/data/reports/agent_20260514_1458.md
?? tools/data/reports/agent_20260514_1605.md
?? tools/data/reports/agent_20260514_1612.md
?? tools/data/reports/agent_20260514_1631.md
?? tools/data/reports/agent_20260514_1640.md
?? tools/data/reports/agent_20260514_1649.md
?? tools/data/reports/agent_20260514_1656.md
?? tools/data/reports/agent_20260514_1701.md
?? tools/data/reports/agent_20260514_1850.md
?? tools/data/reports/agent_20260515_1623.md
?? tools/data/reports/agent_20260515_1647.md
?? tools/data/reports/agent_20260515_1659.md
?? tools/data/reports/agent_20260515_1705.md
?? tools/data/reports/agent_20260515_1712.md
?? tools/data/reports/agent_20260515_1724.md
?? tools/data/reports/agent_20260515_1734.md
?? tools/data/reports/agent_20260515_1745.md
?? tools/data/reports/agent_20260515_1758.md
?? tools/data/reports/agent_20260515_1807.md
?? tools/data/reports/agent_20260515_1816.md
?? tools/data/reports/agent_20260515_1826.md
?? tools/data/reports/agent_20260515_1855.md
?? tools/data/reports/agent_20260515_1904.md
?? tools/data/reports/agent_20260515_1915.md
?? tools/data/reports/agent_20260515_1933.md
?? tools/data/reports/agent_20260515_1940.md
?? tools/data/reports/agent_20260515_1947.md
?? tools/data/reports/agent_20260516_0330.md
?? tools/data/reports/agent_20260516_0720.md
?? tools/data/reports/agent_20260516_0820.md
?? tools/data/reports/agent_20260516_0921.md
?? tools/data/reports/agent_20260516_0938.md
?? tools/data/reports/agent_20260516_1007.md
?? tools/data/reports/agent_20260516_1019.md
?? tools/data/reports/agent_20260516_1031.md
?? tools/data/reports/agent_20260516_1045.md
?? tools/data/reports/agent_20260516_1058.md
?? tools/data/reports/agent_20260516_1104.md
?? tools/data/reports/agent_20260516_1111.md
?? tools/data/reports/agent_20260516_1117.md
?? tools/data/reports/agent_20260516_1124.md
?? tools/data/reports/agent_20260516_1135.md
?? tools/data/reports/agent_20260516_1140.md
?? tools/data/reports/agent_20260516_1148.md
?? tools/data/reports/agent_20260516_1206.md
?? tools/data/reports/agent_20260516_1230.md
?? tools/data/reports/agent_20260528_2042.md
?? tools/data/reports/agent_20260528_2138.md
?? tools/data/reports/agent_20260528_2222.md
?? tools/data/reports/agent_20260529_0938.md
?? tools/data/reports/agent_20260531_2024.md
?? tools/data/reports/agent_20260603_1948.md
?? tools/data/reports/agent_20260603_1955.md
?? tools/data/reports/ddf_20260512_0405.json
?? tools/data/reports/ddf_20260513_0405.json
?? tools/data/reports/ddf_20260514_0405.json
?? tools/data/reports/ddf_20260515_0405.json
?? tools/data/reports/ddf_20260516_0405.json
?? tools/data/reports/ddf_20260517_0405.json
?? tools/data/reports/ddf_20260518_0405.json
?? tools/data/reports/ddf_20260519_0405.json
?? tools/data/reports/ddf_20260520_0405.json
?? tools/data/reports/ddf_20260521_0405.json
?? tools/data/reports/ddf_20260522_0405.json
?? tools/data/reports/ddf_20260523_0405.json
?? tools/data/reports/ddf_20260524_0405.json
?? tools/data/reports/ddf_20260525_0405.json
?? tools/data/reports/ddf_20260526_0405.json
?? tools/data/reports/ddf_20260527_0405.json
?? tools/data/reports/ddf_20260528_0405.json
?? tools/data/reports/ddf_20260529_0405.json
?? tools/data/reports/ddf_20260530_0405.json
?? tools/data/reports/ddf_20260531_0405.json
?? tools/data/reports/ddf_20260601_0405.json
?? tools/data/reports/ddf_20260602_0405.json
?? tools/data/reports/ddf_20260603_0405.json
?? tools/data/reports/ddf_20260604_0405.json
?? tools/data/reports/e2e_anderson_physical_perturbation_20260529.md
?? tools/data/reports/e2e_landing_loop_anderson_physical_perturbation_20260529.md
?? tools/data/reports/e2e_w165_closure_confirmation_20260529.md
?? tools/data/reports/e2e_w165_closure_map_20260529.md
?? tools/data/reports/e2e_w165_closure_r2_replay_20260603.md
?? tools/data/reports/falsifier_20260512_0330.json
?? tools/data/reports/falsifier_20260513_0330.json
?? tools/data/reports/falsifier_20260514_0330.json
?? tools/data/reports/falsifier_20260514_1330.json
?? tools/data/reports/falsifier_20260514_1458.json
?? tools/data/reports/falsifier_20260514_1605.json
?? tools/data/reports/falsifier_20260514_1612.json
?? tools/data/reports/falsifier_20260514_1631.json
?? tools/data/reports/falsifier_20260514_1640.json
?? tools/data/reports/falsifier_20260514_1649.json
?? tools/data/reports/falsifier_20260514_1656.json
?? tools/data/reports/falsifier_20260514_1701.json
?? tools/data/reports/falsifier_20260514_1850.json
?? tools/data/reports/falsifier_20260515_1623.json
?? tools/data/reports/falsifier_20260515_1647.json
?? tools/data/reports/falsifier_20260515_1659.json
?? tools/data/reports/falsifier_20260515_1705.json
?? tools/data/reports/falsifier_20260515_1712.json
?? tools/data/reports/falsifier_20260515_1712.raw.txt
?? tools/data/reports/falsifier_20260515_1724.json
?? tools/data/reports/falsifier_20260515_1734.json
?? tools/data/reports/falsifier_20260515_1745.json
?? tools/data/reports/falsifier_20260515_1758.json
?? tools/data/reports/falsifier_20260515_1807.json
?? tools/data/reports/falsifier_20260515_1816.json
?? tools/data/reports/falsifier_20260515_1826.json
?? tools/data/reports/falsifier_20260515_1855.json
?? tools/data/reports/falsifier_20260515_1904.json
?? tools/data/reports/falsifier_20260515_1915.json
?? tools/data/reports/falsifier_20260515_1933.json
?? tools/data/reports/falsifier_20260515_1940.json
?? tools/data/reports/falsifier_20260515_1947.json
?? tools/data/reports/falsifier_20260516_0330.json
?? tools/data/reports/falsifier_20260516_0720.json
?? tools/data/reports/falsifier_20260516_0820.json
?? tools/data/reports/falsifier_20260516_0921.json
?? tools/data/reports/falsifier_20260516_0921.raw.txt
?? tools/data/reports/falsifier_20260516_0938.json
?? tools/data/reports/falsifier_20260516_1007.json
?? tools/data/reports/falsifier_20260516_1019.json
?? tools/data/reports/falsifier_20260516_1031.json
?? tools/data/reports/falsifier_20260516_1045.json
?? tools/data/reports/falsifier_20260516_1058.json
?? tools/data/reports/falsifier_20260516_1104.json
?? tools/data/reports/falsifier_20260516_1111.json
?? tools/data/reports/falsifier_20260516_1117.json
?? tools/data/reports/falsifier_20260516_1124.json
?? tools/data/reports/falsifier_20260516_1135.json
?? tools/data/reports/falsifier_20260516_1140.json
?? tools/data/reports/falsifier_20260516_1148.json
?? tools/data/reports/falsifier_20260516_1206.json
?? tools/data/reports/falsifier_20260516_1230.json
?? tools/data/reports/falsifier_20260528_2042.json
?? tools/data/reports/falsifier_20260528_2138.json
?? tools/data/reports/falsifier_20260528_2222.json
?? tools/data/reports/falsifier_20260529_0938.json
?? tools/data/reports/falsifier_20260531_2024.json
?? tools/data/reports/falsifier_20260603_1948.json
?? tools/data/reports/falsifier_20260603_1955.json
?? tools/data/reports/incident_20260528_2028.md
?? tools/data/reports/incident_20260603_1943.md
?? tools/data/reports/loop_guard_20260512_0330.json
?? tools/data/reports/loop_guard_20260513_0330.json
?? tools/data/reports/loop_guard_20260514_0330.json
?? tools/data/reports/loop_guard_20260514_1330.json
?? tools/data/reports/loop_guard_20260514_1458.json
?? tools/data/reports/loop_guard_20260514_1605.json
?? tools/data/reports/loop_guard_20260514_1612.json
?? tools/data/reports/loop_guard_20260514_1631.json
?? tools/data/reports/loop_guard_20260514_1640.json
?? tools/data/reports/loop_guard_20260514_1649.json
?? tools/data/reports/loop_guard_20260514_1656.json
?? tools/data/reports/loop_guard_20260514_1701.json
?? tools/data/reports/loop_guard_20260514_1850.json
?? tools/data/reports/loop_guard_20260515_1623.json
?? tools/data/reports/loop_guard_20260515_1647.json
?? tools/data/reports/loop_guard_20260515_1659.json
?? tools/data/reports/loop_guard_20260515_1705.json
?? tools/data/reports/loop_guard_20260515_1712.json
?? tools/data/reports/loop_guard_20260515_1724.json
?? tools/data/reports/loop_guard_20260515_1734.json
?? tools/data/reports/loop_guard_20260515_1745.json
?? tools/data/reports/loop_guard_20260515_1758.json
?? tools/data/reports/loop_guard_20260515_1807.json
?? tools/data/reports/loop_guard_20260515_1816.json
?? tools/data/reports/loop_guard_20260515_1826.json
?? tools/data/reports/loop_guard_20260515_1855.json
?? tools/data/reports/loop_guard_20260515_1904.json
?? tools/data/reports/loop_guard_20260515_1915.json
?? tools/data/reports/loop_guard_20260515_1933.json
?? tools/data/reports/loop_guard_20260515_1940.json
?? tools/data/reports/loop_guard_20260515_1947.json
?? tools/data/reports/loop_guard_20260516_0330.json
?? tools/data/reports/loop_guard_20260516_0720.json
?? tools/data/reports/loop_guard_20260516_0820.json
?? tools/data/reports/loop_guard_20260516_0921.json
?? tools/data/reports/loop_guard_20260516_0938.json
?? tools/data/reports/loop_guard_20260516_1007.json
?? tools/data/reports/loop_guard_20260516_1019.json
?? tools/data/reports/loop_guard_20260516_1031.json
?? tools/data/reports/loop_guard_20260516_1045.json
?? tools/data/reports/loop_guard_20260516_1058.json
?? tools/data/reports/loop_guard_20260516_1104.json
?? tools/data/reports/loop_guard_20260516_1111.json
?? tools/data/reports/loop_guard_20260516_1117.json
?? tools/data/reports/loop_guard_20260516_1124.json
?? tools/data/reports/loop_guard_20260516_1135.json
?? tools/data/reports/loop_guard_20260516_1140.json
?? tools/data/reports/loop_guard_20260516_1148.json
?? tools/data/reports/loop_guard_20260516_1206.json
?? tools/data/reports/loop_guard_20260516_1230.json
?? tools/data/reports/loop_guard_20260528_2028.json
?? tools/data/reports/loop_guard_20260528_2042.json
?? tools/data/reports/loop_guard_20260528_2138.json
?? tools/data/reports/loop_guard_20260528_2222.json
?? tools/data/reports/loop_guard_20260531_2024.json
?? tools/data/reports/loop_guard_20260603_1943.json
?? tools/data/reports/loop_guard_20260603_1948.json
?? tools/data/reports/loop_guard_20260603_1955.json
?? tools/data/reports/quarantine_manifest.json
?? tools/data/restore_backups/
?? tools/data/rosenzweig_porter_bridge_physical_audit_20260515_1933.json
?? tools/data/rp_boundary_raw_count_null_audit_20260516_0820.json
?? tools/data/rp_boundary_size_stability_audit_20260515_1940.json
?? tools/data/rp_candidate_window_stress_20260516_0938_w11.json
?? tools/data/rp_candidate_window_stress_20260516_0938_w5.json
?? tools/data/rp_candidate_window_stress_20260516_1007_w7.json
?? tools/data/rp_candidate_window_stress_20260516_1007_w9.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019_w10.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019_w11.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019_w12.json
?? tools/data/rp_exact_local_window_matrix_20260516_1019_w9.json
?? tools/data/rp_physical_perturbation_20260529_baseline.json
?? tools/data/rp_physical_perturbation_20260529_diagonal_heavy.json
?? tools/data/rp_physical_perturbation_20260529_gue_heavy.json
?? tools/data/rp_physical_perturbation_20260529_reps12_baseline.json
?? tools/data/rp_physical_perturbation_20260529_reps12_diagonal_heavy.json
?? tools/data/rp_physical_perturbation_20260529_reps12_gue_heavy.json
?? tools/data/rp_unfolding_sensitivity_audit_20260516_0921.json
?? tools/data/seme_backup_b2_20260512_033557.json
?? tools/data/seme_backup_b2_20260513_033622.json
?? tools/data/seme_backup_b2_20260514_150530.json
?? tools/data/seme_backup_b2_20260514_161119.json
?? tools/data/seme_backup_b2_20260515_180327.json
?? tools/data/seme_backup_b2_20260515_194643.json
?? tools/data/seme_backup_b2_20260516_094447.json
?? tools/data/seme_backup_b2_20260516_101425.json
?? tools/data/seme_backup_b2_20260516_102450.json
?? tools/data/seme_backup_b2_20260516_120521.json
?? tools/data/seme_backup_b2_20260516_122021.json
?? tools/data/seme_backup_b2_20260516_123925.json
?? tools/data/seme_backup_tm7_cache_n8_20260528_2258.json
?? tools/data/seme_backup_tm7_cache_row_aligned_20260528_2245.json
?? tools/data/seme_backup_tm7_reader_provenance_20260528_2225.json
?? tools/data/seme_backup_tm7_reader_redesign_20260528_213736.json
?? tools/data/sturmian_denominator_alignment_gate_20260515_1826.json
?? tools/data/tool_contracts/
?? tools/data/veritas/veritas_20260512_033539.json
?? tools/data/veritas/veritas_20260513_033605.json
?? tools/data/veritas/veritas_20260514_033420.json
?? tools/data/veritas/veritas_20260514_133424.json
?? tools/data/veritas/veritas_20260514_150454.json
?? tools/data/veritas/veritas_20260514_161058.json
?? tools/data/veritas/veritas_20260514_161719.json
?? tools/data/veritas/veritas_20260514_163527.json
?? tools/data/veritas/veritas_20260514_164509.json
?? tools/data/veritas/veritas_20260514_165437.json
?? tools/data/veritas/veritas_20260514_170109.json
?? tools/data/veritas/veritas_20260514_171152.json
?? tools/data/veritas/veritas_20260514_185450.json
?? tools/data/veritas/veritas_20260515_162727.json
?? tools/data/veritas/veritas_20260515_165116.json
?? tools/data/veritas/veritas_20260515_170328.json
?? tools/data/veritas/veritas_20260515_171005.json
?? tools/data/veritas/veritas_20260515_171725.json
?? tools/data/veritas/veritas_20260515_172913.json
?? tools/data/veritas/veritas_20260515_174023.json
?? tools/data/veritas/veritas_20260515_175045.json
?? tools/data/veritas/veritas_20260515_180306.json
?? tools/data/veritas/veritas_20260515_181257.json
?? tools/data/veritas/veritas_20260515_182126.json
?? tools/data/veritas/veritas_20260515_183111.json
?? tools/data/veritas/veritas_20260515_190118.json
?? tools/data/veritas/veritas_20260515_191018.json
?? tools/data/veritas/veritas_20260515_192915.json
?? tools/data/veritas/veritas_20260515_193919.json
?? tools/data/veritas/veritas_20260515_194625.json
?? tools/data/veritas/veritas_20260515_195317.json
?? tools/data/veritas/veritas_20260516_033848.json
?? tools/data/veritas/veritas_20260516_072533.json
?? tools/data/veritas/veritas_20260516_082608.json
?? tools/data/veritas/veritas_20260516_092735.json
?? tools/data/veritas/veritas_20260516_094423.json
?? tools/data/veritas/veritas_20260516_101403.json
?? tools/data/veritas/veritas_20260516_102427.json
?? tools/data/veritas/veritas_20260516_103737.json
?? tools/data/veritas/veritas_20260516_105525.json
?? tools/data/veritas/veritas_20260516_110354.json
?? tools/data/veritas/veritas_20260516_111042.json
?? tools/data/veritas/veritas_20260516_111633.json
?? tools/data/veritas/veritas_20260516_112343.json
?? tools/data/veritas/veritas_20260516_113001.json
?? tools/data/veritas/veritas_20260516_113946.json
?? tools/data/veritas/veritas_20260516_114656.json
?? tools/data/veritas/veritas_20260516_120457.json
?? tools/data/veritas/veritas_20260516_122002.json
?? tools/data/veritas/veritas_20260516_123900.json
?? tools/data/veritas/veritas_20260528_202855.json
?? tools/data/veritas/veritas_20260528_210258.json
?? tools/data/veritas/veritas_20260528_214307.json
?? tools/data/veritas/veritas_20260528_223400.json
?? tools/data/veritas/veritas_20260529_094016.json
?? tools/data/veritas/veritas_20260529_094421.json
?? tools/data/veritas/veritas_20260531_202929.json
?? tools/data/veritas/veritas_20260603_195351.json
?? tools/data/veritas/veritas_20260603_195948.json
?? tools/exp_anderson3d_comparable_null_audit.py
?? tools/exp_anderson3d_endpoint_preserving_null.py
?? tools/exp_anderson3d_mobility_edge_two_reader_audit.py
?? tools/exp_aubry_binary_grammar_surrogate_gate.py
?? tools/exp_aubry_boundary_phase_transport_gate.py
?? tools/exp_aubry_cosine_boundary_counter_gate.py
?? tools/exp_aubry_v2_generator_scaling_gate.py
?? tools/exp_boundary_anderson_closure_probe.py
?? tools/exp_boundary_anderson_costability_null.py
?? tools/exp_boundary_anderson_latent_reference_probe.py
?? tools/exp_boundary_anderson_physical_perturbation_null.py
?? tools/exp_boundary_anderson_transaction_adapter.py
?? tools/exp_boundary_anderson_w165_closure_map.py
?? tools/exp_boundary_aubry_physical_perturbation_null.py
?? tools/exp_boundary_bridge_stability_audit.py
?? tools/exp_boundary_classical_crossover_audit.py
?? tools/exp_boundary_contextual_robustness_macro_audit.py
?? tools/exp_boundary_contextual_transaction_detector.py
?? tools/exp_boundary_discriminator_workflow.py
?? tools/exp_boundary_evolution_measure.py
?? tools/exp_boundary_graph_curvature_gate.py
?? tools/exp_boundary_graph_mechanism_ablation.py
?? tools/exp_boundary_graph_null_audit.py
?? tools/exp_boundary_graph_residue_threshold_audit.py
?? tools/exp_boundary_percolation_edge_trace.py
?? tools/exp_boundary_physical_internal_null.py
?? tools/exp_boundary_physical_internal_null_cache_row_aligned.py
?? tools/exp_boundary_physical_internal_null_preflight.py
?? tools/exp_boundary_physical_perturbation_evolution_measure.py
?? tools/exp_boundary_physical_perturbation_landing_loop.py
?? tools/exp_boundary_prime_label_null_audit.py
?? tools/exp_boundary_reader_regression_audit.py
?? tools/exp_boundary_reference_position_probe.py
?? tools/exp_boundary_residue_label_count_null_audit.py
?? tools/exp_boundary_rp_physical_perturbation_null.py
?? tools/exp_boundary_tail_reference_probe.py
?? tools/exp_boundary_transition_matrix.py
?? tools/exp_boundary_unfolding_transfer_matrix.py
?? tools/exp_endpoint_feature_scramble_null.py
?? tools/exp_endpoint_gated_rp_boundary.py
?? tools/exp_endpoint_stability_filter.py
?? tools/exp_photonic_boundary_third_included_gate.py
?? tools/exp_physical_sr_residue_bounce.py
?? tools/exp_prime_sr_persistent_boundary.py
?? tools/exp_prime_vs_mod6_sr_boundary.py
?? tools/exp_quasiperiodic_grammar_scale_gate.py
?? tools/exp_rosenzweig_porter_bridge_physical_audit.py
?? tools/exp_rp_boundary_raw_count_null_audit.py
?? tools/exp_rp_boundary_size_stability_audit.py
?? tools/exp_rp_exact_local_window_matrix.py
?? tools/exp_rp_unfolding_sensitivity_audit.py
?? tools/exp_sturmian_denominator_alignment_gate.py
?? tools/field_coherence_preflight.py
?? tools/field_rebuild_risk_map.py
?? tools/lab_cycle_monitor.py
?? tools/lab_meta_cycle_controller.py
?? tools/lab_potential_return_compiler.py
?? tools/lab_preflight_agent.py
?? tools/lab_public_surface_audit.py
?? tools/lab_runtime_observer.py
?? tools/lab_surface_invariant_check.py
?? tools/lab_tool_contract.py
?? tools/prime_mod6_counter_null_audit.py
?? tools/prime_mod6_generative_null_audit.py
?? tools/prime_mod6_null_fairness_audit.py
?? tools/prime_mod6_pipeline_closeout.py
?? tools/qxg_boundary_classifier.py
?? tools/qxg_contract_smoke.py
?? tools/qxg_cycle.sh
?? tools/qxg_nightly_cycle.sh
?? tools/qxg_qes_null_builder.py
?? tools/qxg_qes_observation_producer.py
?? tools/qxg_setup_row_operator.py
?? tools/qxg_supervised_preflight.py
?? tools/qxg_supervised_report_draft.py
?? tools/selector_authority_matrix.py
?? tools/stale_field_source_map.py
?? tools/test_lab_meta_cycle_controller.py
?? tools/test_lab_public_surface_audit.py
?? tools/test_potential_return_e2e.py

codex
Ho verificato che il worktree e' gia' molto vivo: molte modifiche e molti file non tracciati preesistenti. Per questo tocchero' solo il report richiesto e, se serve, un output sperimentale nuovo con timestamp esplicito, senza ripulire nulla.
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,220p' 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 "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,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 "env | rg '"'^(ANTHROPIC_API_KEY|OPENAI_API_KEY)='"' || true" in /opt/MM_D-ND
 succeeded in 0ms:
exec
/bin/bash -lc "python3 - <<'PY'
import json
from pathlib import Path
for p in ['tools/data/seme.json','tools/data/qxg_txq_txg_fit_ready_contract_20260604.json']:
    print('---',p)
    obj=json.loads(Path(p).read_text())
    print(json.dumps(obj, indent=2, ensure_ascii=False)[:6000])
PY" in /opt/MM_D-ND
 succeeded in 0ms:
--- tools/data/seme.json
{
  "timestamp": "2026-06-03T19:59:48.228847",
  "piano": 138,
  "tensioni": [
    {
      "tipo": "confine_inesplorato",
      "id": "TRASCENDENZA_LIMITE",
      "claim": "La trascendenza e il limite attuale del modello. I punti fissi relazionali (non solo phi ma la rete di punti fissi tra osservabili) possono rivelare il vero grafo della realta e pattern nelle matrici. Il confine non e nella matematica - e nel passaggio tra piani.",
      "intensita": 0.9,
      "nota": "Input operatore 2026-04-10. Tocca: confine del modello, struttura relazionale dei punti fissi. Consecutio: quali punti fissi relazionali emergono dalle 21 tensioni attuali? Il grafo e gia nei dati?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Estende A3 (punto fisso singolo) a rete relazionale. Tocca A10 (dipolo) come caso speciale."
    },
    {
      "tipo": "scoperta",
      "id": "DUALITA_DIPOLARE_VS_ILLUSORIA",
      "claim": "Due tipi di dualita: (1) dipolare - generativa, il modello (det=-1), (2) illusoria - dispersiva, entropia (det=+1). Le regole incoerenti producono la seconda. La dualita illusoria e entropia come dispersione, non come informazione.",
      "intensita": 0.9,
      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A2,A10,F5",
      "condensato_motivo": "Discrimina due forme di det. A2 (confine) e la soglia. A10 (dipolo) e il tipo 1. F5 (frame) misura la struttura D-ND che e tipo 1."
    },
    {
      "tipo": "scoperta_numerica",
      "id": "METRIC_TENSOR",
      "claim": "Il tensore metrico dei primi è g=(p/2)². Nel tempo ln(p), è de Sitter 1+1D. z=-8.8 curvatura vs z=+22.5 rapporti ΔΓ.",
      "intensità": 0.9,
      "nota": "Sessione interattiva 4 aprile. Verificato su 78K primi.",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": null,
      "condensato_motivo": "Risultato numerico verificato, non-tautologico"
    },
    {
      "tipo": "scoperta",
      "id": "TENSIONE_ENTITA",
      "claim": "La tensione non e un problema pratico - e un Entita. La tensione superflua crea latenza (tempo). Senza tensione superflua tutto e regolato da assiomi. Implicazione: le tensioni nel seme sono entita, non problemi da risolvere. Quelle superflue (det=+1) producono tempo/latenza.",
      "intensita": 0.85,
      "nota": "Input operatore 2026-04-10. Tocca: rapporto tensione/assioma. Operativamente: discriminare tensioni-entita (generative) da tensioni-superflue (dispersive) nel seme. Le 21 tensioni attuali - quante sono entita e quante latenza?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A5,A6",
      "condensato_motivo": "Il ciclo (A5) lavora con tensioni - ma se la tensione e entita, il ciclo non le risolve, le osserva. Lo zero mobile (A6) e la tensione senza latenza."
    },
    {
      "tipo": "confine_inesplorato",
      "id": "G_POTENZIALE_NULLA",
      "claim": "G e il potenziale di tutto come nulla - permette il prima e il dopo. Ci muoviamo come trascendenza dimensionale gravitazionale. G nel tetraedro non e una teoria tra le altre - e il potenziale che le rende possibili.",
      "intensita": 0.85,
      "nota": "Input operatore 2026-04-10. Tocca: ruolo di G nel tetraedro (T,Q,G,E). La fonte video_lp0RgZ6kQF8 dice: tensore metrico dentro la forma simplettica. G non e accanto a T,Q,E - e sotto. Consecutio: nei dati Lab, i ponti TxG e ExG hanno struttura diversa dai ponti TxQ?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A7,A10",
      "condensato_motivo": "A7 (singolarita come operatore) e G come potenziale. A10 (dipolo) opera sul piano che G rende possibile."
    },
    {
      "tipo": "confine_inesplorato",
      "id": "BOUNDARY",
      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
      "intensità": 0.8,
      "nota": "Il segnale non-triviale è DOVE la scissione cambia natura, non che converge a φ",
      "condensato_ref": "A9",
      "condensato_motivo": "Overlap termini con A9 (5 termini)",
      "porta": "condensato"
    },
    {
      "tipo": "scoperta",
      "id": "TRANS_BOUNDARY_TRASCENDENZA_LIMITE",
      "claim": "Transizione continua confermata: <r> da 0.521 a 0.887 (range=0.366). La transizione Sturmian->Harper e' conti",
      "intensita": 0.8,
      "nota": "Dal domandatore (2026-06-03T19:43). \n  alpha=0.1: <r>=0.540 #####################\n  alpha=0.2: <r>=0.555 ###########",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Ricorrente (3x in 2 giorni) e fuori dalla mappa",
      "porta": "domandatore",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "BOUNDARY_TRASCENDENZA_LIMITE",
      "source_operator": "confine",
      "dettaglio": "\n  alpha=0.1: <r>=0.540 #####################\n  alpha=0.2: <r>=0.555 ######################\n  alpha=0.3: <r>=0.567 ######################\n  alpha=0.4: <r>=0.580 #######################\n  alpha=0.5: <r>=0.603 ########################\n  alpha=0.6: <r>=0.642 #########################\n  alpha=0.7: <r>=0.685 ###########################\n  alpha=0.8: <r>=0.732 #############################\n  alpha=0.9: <r>=0.789 ###############################\n  alpha=1.0: <r>=0.887 ###################################\n"
    },
    {
      "tipo": "falsificazione",
      "id": "FALS_BREAK_TRASCENDENZA_LIMITE",
      "claim": "Nessuna separazione: 9/9 (50/50 su 18 confronti). Il claim non regge. phi converge a <r>=0.5 piu' sistematicam",
      "
--- tools/data/qxg_txq_txg_fit_ready_contract_20260604.json
{
  "schema_version": "0.1",
  "created_at": "2026-06-04T14:56:23Z",
  "status": "manual_contract_not_runtime_ready",
  "target_pair": "QxG",
  "completion_state": "contract_ready_not_integrated",
  "candidate_triangulation": [
    "TxQ",
    "TxG"
  ],
  "source_packets": [
    "/opt/tm7/packets/2026-06-03/TM7-vps_lab_trajectory_compensation_card_20260603.md",
    "/opt/tm7/packets/2026-06-04/TM7-vps_lab_txq_txg_combo_pre_experiment_20260604.md",
    "/opt/tm7/packets/2026-06-04/TM7-vps_lab_qxg_fit_ready_preparation_20260604.md",
    "/opt/tm7/packets/2026-06-04/TM7-vps_lab_qxg_txq_txg_fit_ready_table_draft_20260604.md",
    "/opt/tm7/packets/2026-06-04/TM7-vps_lab_qxg_awareness_expansion_ledger_20260604.md"
  ],
  "question": "Can the QxG void be interrogated through a declared T,Q,G boundary where TxQ and TxG provide two distinguishable readings without promoting QxG?",
  "claim_candidate": "A QxG question becomes testable only when the same declared boundary/setup preserves or breaks, in a discriminable way, two thermodynamic readings: quantum state/density/entropy and gravitational horizon/radiation/area.",
  "denominator": {
    "primary": "S_gen = A/(4 l_P^2) + S_bulk",
    "semiclassical_limit": "S_BH/k_B = A/(4 l_P^2)",
    "qgx_marker": "l_P^2 = G*hbar/c^3",
    "negative_guard": "Horizon does not force QxG; for M >> M_P the horizon can remain classical."
  },
  "readers": {
    "TxQ": {
      "role": "quantum/state reader",
      "reads": [
        "density matrix",
        "S_bulk",
        "entanglement entropy",
        "Hilbert factorization"
      ]
    },
    "TxG": {
      "role": "gravity/thermal reader",
      "reads": [
        "horizon area",
        "Hawking temperature",
        "Euclidean periodicity",
        "S_BH"
      ]
    },
    "QxG": {
      "role": "void target",
      "reads": [
        "continuous/discrete boundary",
        "Planck area",
        "factorization failure"
      ],
      "promotion_allowed": false
    }
  },
  "setup_rows": [
    {
      "id": "semiclassical_large_horizon",
      "regime": "M >> M_P / A >> l_P^2",
      "expected_class": "blank_or_counter_perimeter",
      "why": "The horizon can stay classical; TxQ and TxG may coexist without QxG closure.",
      "required_readings": [
        "A/(4 l_P^2)",
        "S_bulk_or_density_state"
      ],
      "excluded_mass": [
        "direct_QxG_promotion",
        "horizon_equals_QxG"
      ]
    },
    {
      "id": "qes_factorization_boundary",
      "regime": "QES / generalized entropy extremization",
      "expected_class": "candidate_internal_event",
      "why": "QES makes Hilbert factorization and geometry/entropy separation part of the event, not a kinematic input.",
      "required_readings": [
        "S_gen",
        "area_term",
        "S_bulk",
        "factorization_status"
      ],
      "excluded_mass": [
        "S_bulk_only",
        "area_only",
        "coordinate_fit"
      ]
    },
    {
      "id": "planck_scale_stress",
      "regime": "A ~ l_P^2 or M ~ M_P",
      "expected_class": "stress_or_fall",
      "why": "The semiclassical denominator approaches its declared failure zone.",
      "required_readings": [
        "scale_relation_to_l_P2",
        "validity_of_semiclassical_split"
      ],
      "excluded_mass": [
        "using_S_BH_where_semiclassical_assumptions_are_marked_invalid"
      ]
    },
    {
      "id": "charge_or_gauge_censor",
      "regime": "QxE/GxE counter-face, e.g. charged/extremal structure",
      "expected_class": "counter_perimeter",
      "why": "E can expose whether the apparent QxG signal is actually gauge/charge or classical Einstein-Maxwell structure.",
      "required_readings": [
        "gauge_phase_or_charge_source",
        "entropy_or_horizon_reading"
      ],
      "excluded_mass": [
        "relabelling_QxE_or_GxE_as_QxG"
      ]
    }
  ],
  "vc_defined": {
    "state": "candidate",
    "definition": "A row is defined only when one declared setup has both a geometric/thermal reading and a quantum/state reading in the same denominator, plus an event class.",
    "event_classes": [
      "internal_event",
      "controlled_non_cross",
      "reader_asymmetry",
      "excluded_mass"
    ],
    "complete": "all declared setup rows have both readings and an event class",
    "contaminated": "at least one row is defined, but excluded mass is present and named",
    "broken": "a required row has no defined two-reader event",
    "absent": "no row reaches defined two-reader status"
  },
  "thresholds": {
    "transfer": "Row-aligned two-reader event survives the declared null/counter-perimeter and produces a more precise physical B question without promoting QxG.",
    "blank": "The denominator is present but remains common thermodynamic language: no internal event, no threshold, or no common setup.",
    "fall": "The apparent compatibility is produced by construction, coordinate/fit choice, regime misuse, or by using semiclassical formulas where the contract itself marks them invalid."
  },
  "counter_perimeter": {
    "declared": "Preserve TxQ while breaking TxG, or preserve TxG while breaking TxQ, without changing the denominator.",
    "censor": "E/QxE/GxE charge or gauge face can be used only to falsify/censor false QxG transfer, not to close QxG.",
    "falsifiers": [
      "single-reader result",
      "area-only or S_bulk-only row",
      "QxE/GxE relabelled as QxG",
      "horizon treated as QxG for M >> M_P",
      "new metric without new falsifier"
    ]
  },
  "anderson_constraint_transfer": {
    "allowed": "Use Anderson only as negative form: stable reference / sensitive intermediate channel; local_global / local_only; isotropic perturbation / anisotropic split.",
    "forbidden": "Promote W16.5, onsite_tilt=-0.0625, or Anderson as physical B content."
  },
  "runtime_gate": {
    "runtime_ready": false,
    "reason": "The contract now names denominator, readers, setup rows and logical thresholds, but no executa

codex
Il campo vivo punta a un contratto QxG mediato da TxQ/TxG: non e' ancora runtime-ready, quindi l'esperimento sensato e' un fit-readiness minimale, non una promozione fisica. Ora cerco gli strumenti gia' presenti per non inventare una pipeline parallela.
exec
/bin/bash -lc 'rg -n "qxg|QxG|TxQ|TxG|fit_ready|qes" tools/*.py tools/data/*.json tools/data/reports/*.md | head -200' in /opt/MM_D-ND
 succeeded in 0ms:
tools/build_lab_graph.py:223:            if 'primi' in s_lower or 'prime' in s_lower: teorie.add('Q')  # primi → QxG
tools/build_lab_graph.py:458:                # QxG scoperte → tensioni legate al vuoto quantistico-gravitazionale
tools/build_lab_graph.py:472:            # 2. QxG coinvolto? (il vuoto principale del tetraedro)
tools/build_lab_graph.py:561:        if state not in ('contract_ready_not_integrated', 'fit_ready_contract_not_integrated'):
tools/build_lab_graph.py:571:        fit_artifacts = evidence.get('fit_ready_artifacts') or []
tools/build_lab_graph.py:579:                or first_artifact.get('boundary_fit_ready_contract')
tools/build_lab_graph.py:603:                    'fit_ready_contract': fit_contract,
tools/build_lab_graph.py:622:                    edge['fit_ready_contract'] = fit_contract
tools/build_lab_graph.py:628:                        'fit_ready_contract_present': validation.get('fit_ready_contract_present'),
tools/build_agent_field.py:464:    the underlying QxG edge open.
tools/build_agent_field.py:502:            f"fit_ready_contract={summary.get('has_fit_ready_contract', '?')}."
tools/build_agent_field.py:505:    def _summarize_fit_ready(candidate):
tools/build_agent_field.py:507:        artifacts = (candidate.get('evidence') or {}).get('fit_ready_artifacts') or []
tools/build_agent_field.py:509:            fit = (artifact.get('accepted_fit_ready') or {}).get('by_class_threshold') or {}
tools/build_agent_field.py:519:                        f"{n_key} {n.get('fit_ready_rows', '?')}/{n.get('rows', '?')}"
tools/build_agent_field.py:562:            f"fit_ready={validation.get('fit_ready_contract_present')}."
tools/build_agent_field.py:564:        fit_rows = _summarize_fit_ready(cand)
tools/build_agent_field.py:1539:    # che i cycle mature di aprile usavano (TxQ PSD, Markov-3, mod-3, three
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/exp_blank_shell_polarity_gate.py:171:                "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/exp_blank_to_source_hinge.py:202:                "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/exp_physical_sr_residue_bounce.py:29:DEFAULT_FIT_READY_OUT = Path("tools/data/component_state_fit_ready_20260514_1649.json")
tools/exp_physical_sr_residue_bounce.py:256:        "tester_id": "component_state_SR_L1_triple_var_fit_ready_20260514_1649",
tools/exp_physical_sr_residue_bounce.py:294:def write_fit_ready_artifact(path: Path) -> dict[str, Any]:
tools/exp_physical_sr_residue_bounce.py:296:        "tester_id": "component_state_SR_L1_triple_var_fit_ready_20260514_1649",
tools/exp_physical_sr_residue_bounce.py:483:    if args.write_fit_ready:
tools/exp_physical_sr_residue_bounce.py:484:        result = write_fit_ready_artifact(args.write_fit_ready)
tools/exp_physical_sr_residue_bounce.py:485:        print(json.dumps({"fit_ready_artifact": str(args.write_fit_ready), "tester_id": result["tester_id"]}, indent=2, sort_keys=True))
tools/exp_vc_fit_ready_scale_table.py:33:    has_fit_each_n = all(row.get("fit_ready_rows", 0) > 0 for row in by_n.values())
tools/exp_vc_fit_ready_scale_table.py:39:    if any(row.get("fit_ready_rows", 0) > 0 for row in by_n.values()):
tools/exp_vc_fit_ready_scale_table.py:48:    total_fit = sum(int(row.get("fit_ready_rows", 0)) for row in by_n.values())
tools/exp_vc_fit_ready_scale_table.py:58:        "fit_ready_rows": total_fit,
tools/exp_vc_fit_ready_scale_table.py:73:    fit_ready = data.get(level, {}).get("fit_ready", {})
tools/exp_vc_fit_ready_scale_table.py:74:    table = fit_ready.get("by_class_threshold", {})
tools/exp_vc_fit_ready_scale_table.py:90:        "experiment": "vc_fit_ready_scale_table",
tools/exp_vc_fit_ready_scale_table.py:94:            "fit_ready": "vc_defined and vc_interp is not null",
tools/exp_tqge_underlay_gate.py:146:                "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/lab_tool_contract.py:22:DEFAULT_ARTIFACT = DATA / "component_state_fit_ready_20260514_1649.json"
tools/lab_falsifier.py:105:valutatore chiedono cross-dominio, real/adversarial perimeter, QxG o
tools/qxg_qes_null_builder.py:2:"""Build the executable null spec for the QxG QES/factorization candidate row."""
tools/qxg_qes_null_builder.py:14:DEFAULT_CONTRACT = TOOLS / "data" / "qxg_txq_txg_fit_ready_contract_20260604.json"
tools/qxg_qes_null_builder.py:15:DEFAULT_OPERATOR = TOOLS / "data" / "preflight" / "qxg_setup_row_operator_latest.json"
tools/qxg_qes_null_builder.py:18:CANDIDATE_ROW = "qes_factorization_boundary"
tools/qxg_qes_null_builder.py:56:    if contract.get("target_pair") != "QxG":
tools/qxg_qes_null_builder.py:57:        issues.append("contract_target_pair_not_qxg")
tools/qxg_qes_null_builder.py:59:        issues.append("operator_candidate_row_missing_qes_factorization_boundary")
tools/qxg_qes_null_builder.py:64:        issues.append("contract_missing_qes_factorization_boundary")
tools/qxg_qes_null_builder.py:69:                issues.append(f"qes_row_missing_required_reading={item}")
tools/qxg_qes_null_builder.py:86:            "expected_result": "no_QxG_transfer",
tools/qxg_qes_null_builder.py:88:                "QxG promoted from S_bulk only",
tools/qxg_qes_null_builder.py:90:                "denominator changed to hide missing TxG reader",
tools/qxg_qes_null_builder.py:98:            "expected_result": "no_QxG_transfer",
tools/qxg_qes_null_builder.py:100:                "QxG promoted from area only",
tools/qxg_qes_null_builder.py:102:                "classical horizon treated as QxG for M >> M_P",
tools/qxg_qes_null_builder.py:115:        "target_pair": "QxG",
tools/qxg_qes_null_builder.py:123:        "pass_condition": "both null scenarios block QxG transfer without changing denominator",
tools/qxg_qes_null_builder.py:124:        "fail_condition": "either null scenario still promotes QxG from a single reader, coordinate fit, or regime misuse",
tools/qxg_qes_null_builder.py:130:            "do_not_promote_qxg",
tools/qxg_qes_null_builder.py:149:        out_path = PREFLIGHT / f"qxg_qes_null_{stamp}.json"
tools/qxg_qes_null_builder.py:167:        print(f"QxG QES null: {result['decision']}")
tools/qxg_supervised_report_draft.py:2:"""Produce one supervised QxG report draft outside the autonomous Lab pipeline."""
tools/qxg_supervised_report_draft.py:18:DEFAULT_PREFLIGHT = PREFLIGHT / "qxg_supervised_preflight_latest.json"
tools/qxg_supervised_report_draft.py:19:DEFAULT_NULL = PREFLIGHT / "qxg_qes_null_latest.json"
tools/qxg_supervised_report_draft.py:55:    qes_null = read_json(null_path)
tools/qxg_supervised_report_draft.py:60:    if qes_null.get("decision") != "NULL_DEFINED_NO_RUNTIME":
tools/qxg_supervised_report_draft.py:61:        issues.append(f"null_not_defined={qes_null.get('decision')}")
tools/qxg_supervised_report_draft.py:73:        "title": "Supervised QxG QES Boundary Draft",
tools/qxg_supervised_report_draft.py:81:        "null_scenarios": qes_null.get("null_scenarios") or [],
tools/qxg_supervised_report_draft.py:84:            "QxG remains question_only.",
tools/qxg_supervised_report_draft.py:91:            "QxG promotion from a single reader",
tools/qxg_supervised_report_draft.py:95:            "Whether co-presence of TxQ and TxG produces an internal candidate event.",
tools/qxg_supervised_report_draft.py:96:            "Whether both null scenarios block QxG transfer under a future executable measure.",
tools/qxg_supervised_report_draft.py:102:            "pass": "both null scenarios block transfer; then test co-presence TxQ+TxG",
tools/qxg_supervised_report_draft.py:170:    parser.add_argument("--qes-null", type=Path, default=DEFAULT_NULL)
tools/qxg_supervised_report_draft.py:176:    report = build_report(args.preflight, args.qes_null)
tools/qxg_supervised_report_draft.py:178:    json_path = args.output_json or REPORTS / f"qxg_supervised_report_{stamp}.json"
tools/qxg_supervised_report_draft.py:179:    md_path = args.output_md or DOCS / f"qxg_supervised_report_{stamp}.md"
tools/qxg_supervised_report_draft.py:184:    write_text(DOCS / "qxg_supervised_report_latest.md", render_markdown(report))
tools/qxg_supervised_report_draft.py:200:        print(f"QxG supervised report draft: {report['verdict']}")
tools/qxg_boundary_classifier.py:2:"""Classify the QxG/QES boundary answer space without running Lab runtime."""
tools/qxg_boundary_classifier.py:17:DEFAULT_CONTRACT = TOOLS / "data" / "qxg_txq_txg_fit_ready_contract_20260604.json"
tools/qxg_boundary_classifier.py:18:DEFAULT_NULL = PREFLIGHT / "qxg_qes_null_latest.json"
tools/qxg_boundary_classifier.py:69:            "promotes_qxg": False,
tools/qxg_boundary_classifier.py:79:            "promotes_qxg": False,
tools/qxg_boundary_classifier.py:89:            "promotes_qxg": False,
tools/qxg_boundary_classifier.py:99:            "promotes_qxg": True,
tools/qxg_boundary_classifier.py:109:            "promotes_qxg": True,
tools/qxg_boundary_classifier.py:132:    promotes_qxg = bool(observation.get("promotes_qxg"))
tools/qxg_boundary_classifier.py:143:    has_full_qes = {"S_gen", "area_term", "S_bulk", "factorization_status"}.issubset(present)
tools/qxg_boundary_classifier.py:145:    if promotes_qxg and not (has_txq and has_txg):
tools/qxg_boundary_classifier.py:146:        fall_reasons.append("single_reader_qxg_promotion")
tools/qxg_boundary_classifier.py:147:    if promotes_qxg and "S_bulk" not in present and has_txg:
tools/qxg_boundary_classifier.py:149:    if promotes_qxg and "area_term" not in present and has_txq:
tools/qxg_boundary_classifier.py:151:    if promotes_qxg and "M >> M_P" in regime:
tools/qxg_boundary_classifier.py:152:        fall_reasons.append("classical_horizon_treated_as_qxg")
tools/qxg_boundary_classifier.py:153:    if {"S_bulk", "factorization_status"} & missing and promotes_qxg:
tools/qxg_boundary_classifier.py:159:    elif has_full_qes and internal_event and same_denominator:
tools/qxg_boundary_classifier.py:160:        state = "QxG_CANDIDATE"
tools/qxg_boundary_classifier.py:177:        "has_full_qes": has_full_qes,
tools/qxg_boundary_classifier.py:179:        "promotes_qxg": promotes_qxg,
tools/qxg_boundary_classifier.py:183:def validate_inputs(contract: dict[str, Any], qes_null: dict[str, Any]) -> list[str]:
tools/qxg_boundary_classifier.py:185:    if contract.get("target_pair") != "QxG":
tools/qxg_boundary_classifier.py:186:        issues.append("contract_target_pair_not_qxg")
tools/qxg_boundary_classifier.py:187:    if (contract.get("readers") or {}).get("QxG", {}).get("promotion_allowed") is not False:
tools/qxg_boundary_classifier.py:188:        issues.append("qxg_promotion_not_explicitly_blocked")
tools/qxg_boundary_classifier.py:191:    if qes_null.get("decision") != "NULL_DEFINED_NO_RUNTIME":
tools/qxg_boundary_classifier.py:192:        issues.append(f"qes_null_not_defined={qes_null.get('decision')}")
tools/qxg_boundary_classifier.py:193:    scenarios = {row.get("id") for row in qes_null.get("null_scenarios") or [] if isinstance(row, dict)}
tools/qxg_boundary_classifier.py:202:    qes_null = read_json(null_path)
tools/qxg_boundary_classifier.py:204:    issues = validate_inputs(contract, qes_null)
tools/qxg_boundary_classifier.py:212:    has_candidate = counts.get("QxG_CANDIDATE", 0) > 0
tools/qxg_boundary_classifier.py:237:        "target_pair": "QxG",
tools/qxg_boundary_classifier.py:239:        "answer_space": ["QxG_CANDIDATE", "BLANK", "FALL"],
tools/qxg_boundary_classifier.py:247:            "do_not_promote_qxg": True,
tools/qxg_boundary_classifier.py:259:                "promotes_qxg",
tools/qxg_boundary_classifier.py:274:    return f"""# QxG Boundary Classifier
tools/qxg_boundary_classifier.py:281:Which operational boundary distinguishes QxG from BLANK without turning the
tools/qxg_boundary_classifier.py:286:- `QxG_CANDIDATE`: an internal event requires TxQ and TxG together on `S_gen`.
tools/qxg_boundary_classifier.py:314:do_not_promote_qxg: true
tools/qxg_boundary_classifier.py:322:`internal_event`, `promotes_qxg`, `regime`.
tools/qxg_boundary_classifier.py:329:    parser.add_argument("--qes-null", type=Path, default=DEFAULT_NULL)
tools/qxg_boundary_classifier.py:336:    result = build_result(args.contract, args.qes_null, args.observations)
tools/qxg_boundary_classifier.py:338:    json_path = args.output_json or PREFLIGHT / f"qxg_boundary_classifier_{stamp}.json"
tools/qxg_boundary_classifier.py:339:    md_path = args.output_md or DOCS / f"qxg_boundary_classifier_{stamp}.md"
tools/qxg_boundary_classifier.py:343:    write_json(PREFLIGHT / "qxg_boundary_classifier_latest.json", result)
tools/qxg_boundary_classifier.py:344:    write_text(DOCS / "qxg_boundary_classifier_latest.md", render_markdown(result))
tools/qxg_boundary_classifier.py:360:        print(f"QxG boundary classifier: {result['decision']}")
tools/qxg_setup_row_operator.py:2:"""Classify QxG/TxQ/TxG contract setup rows without running the Lab cycle."""
tools/qxg_setup_row_operator.py:14:DEFAULT_CONTRACT = TOOLS / "data" / "qxg_txq_txg_fit_ready_contract_20260604.json"
tools/qxg_setup_row_operator.py:107:        next_use = "not_fit_ready"
tools/qxg_setup_row_operator.py:149:        "operator": "qxg_setup_row_operator",
tools/qxg_setup_row_operator.py:161:            "do_not_promote_qxg",
tools/qxg_setup_row_operator.py:178:        out_path = PREFLIGHT / f"qxg_setup_row_operator_{stamp}.json"
tools/qxg_setup_row_operator.py:196:        print(f"QxG setup row operator: {result['decision']}")
tools/dnd_loop.py:57:  TxQ: hbar/k_B = 7.64e-12 K*s — converte temperatura in tempo
tools/dnd_loop.py:58:  TxG: G*k_B/c^4 = 1.14e-67 K/kg — converte temperatura in massa
tools/dnd_loop.py:59:  QxG: l_P^2 = G*hbar/c^3 = 2.61e-70 m^2 — area di Planck, area minima
tools/dnd_loop.py:64:  TxQ: matrice densita rho = exp(-H/kT)/Z
tools/dnd_loop.py:65:  TxG: radiazione di Hawking T_H = hbar*c^3/(8pi*G*M*k_B)
tools/dnd_loop.py:70:  QxG: [VUOTO — nessuna teoria unificata. La gravita quantistica non esiste ancora]
tools/dnd_loop.py:73:  TxQ: vuoto (0K) vs pieno (energia punto zero hbar*w/2)
tools/dnd_loop.py:74:  QxG: continuo (spaziotempo liscio) vs discreto (area minima l_P^2)
tools/dnd_loop.py:81:5 ponti noti, 1 vuoto (QxG). R=c è il frame — non ruota, permette la rotazione.
tools/semantic_bridge.py:57:    """TxQ, GxQ, ... — ordine alfabetico, 'x' come separator (compat conoscenza_teorie)."""
tools/data/blank_shell_polarity_gate_20260507_1957.json:5:      "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/exp_blank_shell_dilation_gate.py:294:                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
tools/exp_blank_shell_tqger_gate.py:192:                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
tools/data/blank_to_source_hinge_20260507_1804.json:5:      "tools/LAB_AGENT_CONTEXT.md: TQGE edges and QxG void",
tools/data/consecutio_processata.json:5:      "tensione": "CONS_GxE_QxG",
tools/data/consecutio_processata.json:12:          "a": "QxG: l_P^2 = G*hbar/c^3 (area di Planck — area minima)",
tools/data/consecutio_processata.json:18:          "a": "QxG: metrica -> i*metrica (spaziotempo euclideo)",
tools/data/consecutio_processata.json:29:      "tensione": "CONS_GxR_QxG",
tools/data/consecutio_processata.json:36:          "a": "QxG: l_P^2 = G*hbar/c^3 (area di Planck — area minima)",
tools/data/consecutio_processata.json:47:      "tensione": "CONS_QxE_QxG",
tools/data/consecutio_processata.json:54:          "a": "QxG: l_P^2 = G*hbar/c^3 (area di Planck — area minima)",
tools/data/consecutio_processata.json:60:          "a": "QxG: metrica -> i*metrica (spaziotempo euclideo)",
tools/data/domande_fondamentali.json:33:      "coppia": "QxG",
tools/data/domande_fondamentali.json:54:      "coppia": "TxG",
tools/data/domande_fondamentali.json:61:      "coppia": "TxQ",
tools/dnd_incrocio.py:526:    1. Domande verso il vuoto (QxG) — il potenziale massimo
tools/dnd_incrocio.py:878:        'ponte_autologico',      # ponti nel vuoto (QxG)
tools/dnd_incrocio.py:1074:            # La coppia tocca QxG. Cosa sappiamo del ponte verso il vuoto?
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:81:Costante QxG: l_P² = Għ/c³ (area di Planck).
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:117:Non tornare su QxG direttamente. Attraversa questa faccia.
tools/dnd_lab_team.py:125:5 ponti noti. 1 vuoto: QxG (continuo vs discreto, l_P²).
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_vc_generator_class_direction_audit.py:43:    fit_ready_rows = [row for row in vc_defined_rows if row.get("vc_interp") is not None]
tools/exp_vc_generator_class_direction_audit.py:48:    out["fit_ready_rows"] = len(fit_ready_rows)
tools/exp_vc_generator_class_direction_audit.py:50:    out["fit_ready_rate"] = len(fit_ready_rows) / total if total else None
tools/exp_vc_generator_class_direction_audit.py:52:    out["vc_missing_after_defined_rows"] = len(vc_defined_rows) - len(fit_ready_rows)
tools/exp_vc_generator_class_direction_audit.py:116:        "fit_ready": summarize_fit_ready(rows),
tools/exp_vc_generator_class_direction_audit.py:120:def summarize_fit_ready(rows: list[dict]) -> dict:
tools/exp_vc_generator_class_direction_audit.py:158:                "fit_ready_rows": len(fit_rows),
tools/exp_vc_generator_class_direction_audit.py:161:                "fit_ready_rate": len(fit_rows) / len(n_rows) if n_rows else None,
tools/exp_vc_generator_class_direction_audit.py:163:                "vc_median_fit_ready": vc_median,
tools/exp_vc_generator_class_direction_audit.py:179:            "fit_ready": "vc_defined and vc_interp is not null",
tools/exp_vc_generator_class_direction_audit.py:199:            "fit_ready": "vc_defined and vc_interp is not null",
tools/exp_vc_generator_class_direction_audit.py:224:        "accepted_fit_ready": output["accepted_candidates"]["fit_ready"],
tools/exp_vc_unit_boundary_audit.py:62:        "fit_ready_rows": row["fit_ready_rows"],
tools/lab_preflight_agent.py:139:                    "kind": "component_state_fit_ready",
tools/lab_preflight_agent.py:251:            "has_fit_ready_contract": graph_summary.get("has_fit_ready_contract"),
tools/lab_preflight_agent.py:438:        f"- graph: ready={s['graph_completion']['ready_count']} fit_ready={s['graph_completion']['has_fit_ready_contract']}",
tools/exp_blank_shell_scale_law.py:381:                "tools/LAB_AGENT_CONTEXT.md: TQGE has 5 bridges and QxG void",
tools/qxg_qes_observation_producer.py:2:"""Produce deterministic QxG/QES boundary observations for the classifier.
tools/qxg_qes_observation_producer.py:9:to emit the observation rows consumed by qxg_boundary_classifier.py. The output
tools/qxg_qes_observation_producer.py:41:    qes_shift_threshold: float = 0.15
tools/qxg_qes_observation_producer.py:98:    requires_txq = abs(full_x - area_x) >= p.qes_shift_threshold
tools/qxg_qes_observation_producer.py:99:    requires_txg = abs(full_x - bulk_x) >= p.qes_shift_threshold
tools/qxg_qes_observation_producer.py:103:        "model": "deterministic_quadratic_qes_extremization",
tools/qxg_qes_observation_producer.py:113:            "qes_shift_threshold": p.qes_shift_threshold,
tools/qxg_qes_observation_producer.py:134:            "id": "qes_null_preserve_txq_break_txg",
tools/qxg_qes_observation_producer.py:140:            "promotes_qxg": False,
tools/qxg_qes_observation_producer.py:145:            "id": "qes_null_preserve_txg_break_txq",

exec
/bin/bash -lc "sed -n '1,260p' tools/qxg_contract_smoke.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""Read-only smoke check for the QxG/TxQ/TxG fit-ready contract."""
from __future__ import annotations

import argparse
import json
from datetime import datetime, timezone
from pathlib import Path
from typing import Any


TOOLS = Path(__file__).resolve().parent
REPO = TOOLS.parent
DEFAULT_CONTRACT = TOOLS / "data" / "qxg_txq_txg_fit_ready_contract_20260604.json"
PREFLIGHT = TOOLS / "data" / "preflight"

REQUIRED_TOP_LEVEL = {
    "schema_version",
    "created_at",
    "status",
    "target_pair",
    "completion_state",
    "candidate_triangulation",
    "question",
    "denominator",
    "readers",
    "setup_rows",
    "vc_defined",
    "thresholds",
    "counter_perimeter",
    "runtime_gate",
    "promotion_policy",
}

REQUIRED_DENOMINATOR = {"primary", "semiclassical_limit", "qgx_marker", "negative_guard"}
REQUIRED_READERS = {"TxQ", "TxG", "QxG"}
REQUIRED_SETUP_ROWS = {
    "semiclassical_large_horizon",
    "qes_factorization_boundary",
    "planck_scale_stress",
    "charge_or_gauge_censor",
}
REQUIRED_THRESHOLDS = {"transfer", "blank", "fall"}
REQUIRED_RUNTIME_ITEMS = {
    "operator=<reproducible measure or transformation on one setup row>",
    "null=<executable counter-perimeter>",
    "provider_runtime=verified",
    "operator_ack=yes",
}


def utc_now() -> datetime:
    return datetime.now(timezone.utc)


def read_json(path: Path) -> dict[str, Any]:
    try:
        data = json.loads(path.read_text(encoding="utf-8"))
    except Exception as exc:
        raise SystemExit(f"cannot read JSON {path}: {exc}") from exc
    if not isinstance(data, dict):
        raise SystemExit(f"JSON root must be an object: {path}")
    return data


def write_json(path: Path, data: Any) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps(data, indent=2, ensure_ascii=False, sort_keys=True) + "\n", encoding="utf-8")


def rel(path: Path) -> str:
    try:
        return str(path.resolve().relative_to(REPO.resolve()))
    except ValueError:
        return str(path)


def require_keys(container: dict[str, Any], required: set[str], label: str, issues: list[str]) -> None:
    missing = sorted(required - set(container))
    for key in missing:
        issues.append(f"missing_{label}={key}")


def validate_contract(contract: dict[str, Any]) -> tuple[list[str], list[str]]:
    issues: list[str] = []
    warnings: list[str] = []

    require_keys(contract, REQUIRED_TOP_LEVEL, "top_level", issues)

    if contract.get("status") != "manual_contract_not_runtime_ready":
        warnings.append(f"unexpected_status={contract.get('status')}")
    if contract.get("target_pair") != "QxG":
        issues.append(f"target_pair_not_qxg={contract.get('target_pair')}")

    triangulation = contract.get("candidate_triangulation")
    if triangulation != ["TxQ", "TxG"]:
        issues.append(f"candidate_triangulation_not_txq_txg={triangulation}")

    denominator = contract.get("denominator") or {}
    if not isinstance(denominator, dict):
        issues.append("denominator_not_object")
        denominator = {}
    require_keys(denominator, REQUIRED_DENOMINATOR, "denominator", issues)

    readers = contract.get("readers") or {}
    if not isinstance(readers, dict):
        issues.append("readers_not_object")
        readers = {}
    require_keys(readers, REQUIRED_READERS, "reader", issues)
    if (readers.get("QxG") or {}).get("promotion_allowed") is not False:
        issues.append("qxg_promotion_allowed_must_be_false")

    rows = contract.get("setup_rows") or []
    if not isinstance(rows, list):
        issues.append("setup_rows_not_list")
        rows = []
    row_ids = {str(row.get("id")) for row in rows if isinstance(row, dict) and row.get("id")}
    missing_rows = sorted(REQUIRED_SETUP_ROWS - row_ids)
    for row_id in missing_rows:
        issues.append(f"missing_setup_row={row_id}")
    for row in rows:
        if not isinstance(row, dict):
            issues.append("setup_row_not_object")
            continue
        row_id = row.get("id") or "<unknown>"
        for key in ("regime", "expected_class", "required_readings", "excluded_mass"):
            if not row.get(key):
                issues.append(f"setup_row_{row_id}_missing={key}")

    thresholds = contract.get("thresholds") or {}
    if not isinstance(thresholds, dict):
        issues.append("thresholds_not_object")
        thresholds = {}
    require_keys(thresholds, REQUIRED_THRESHOLDS, "threshold", issues)

    vc_defined = contract.get("vc_defined") or {}
    if not isinstance(vc_defined, dict):
        issues.append("vc_defined_not_object")
        vc_defined = {}
    if vc_defined.get("state") != "candidate":
        warnings.append(f"vc_state_not_candidate={vc_defined.get('state')}")
    for key in ("complete", "contaminated", "broken", "absent"):
        if not vc_defined.get(key):
            issues.append(f"vc_defined_missing={key}")

    counter = contract.get("counter_perimeter") or {}
    if not isinstance(counter, dict):
        issues.append("counter_perimeter_not_object")
        counter = {}
    for key in ("declared", "censor", "falsifiers"):
        if not counter.get(key):
            issues.append(f"counter_perimeter_missing={key}")

    runtime_gate = contract.get("runtime_gate") or {}
    if not isinstance(runtime_gate, dict):
        issues.append("runtime_gate_not_object")
        runtime_gate = {}
    runtime_items = set(runtime_gate.get("required_before_runtime") or [])
    for item in sorted(REQUIRED_RUNTIME_ITEMS - runtime_items):
        issues.append(f"runtime_required_missing={item}")

    promotion = contract.get("promotion_policy") or {}
    if not isinstance(promotion, dict):
        issues.append("promotion_policy_not_object")
        promotion = {}
    if promotion.get("promote_qxg") is not False:
        issues.append("promotion_policy_promote_qxg_must_be_false")
    if "graph_edge" not in set(promotion.get("do_not_promote_as") or []):
        issues.append("promotion_policy_must_block_graph_edge")

    return issues, warnings


def build_result(contract_path: Path) -> dict[str, Any]:
    contract = read_json(contract_path)
    issues, warnings = validate_contract(contract)
    runtime_gate = contract.get("runtime_gate") or {}
    runtime_ready = bool(runtime_gate.get("runtime_ready")) and not issues

    if issues:
        decision = "CONTRACT_INVALID"
        recommended_action = "FIX_CONTRACT_BEFORE_PREFLIGHT"
    elif runtime_ready:
        decision = "RUNTIME_GATE_READY"
        recommended_action = "OPERATOR_ACK_AND_SUPERVISED_RUNTIME_REVIEW"
    else:
        decision = "NO_RUNTIME"
        recommended_action = "BUILD_EXECUTABLE_OPERATOR_OR_PROVIDER_PREFLIGHT"

    return {
        "schema_version": "0.1",
        "generated_at": utc_now().isoformat(),
        "source_contract": rel(contract_path),
        "target_pair": contract.get("target_pair"),
        "candidate_triangulation": contract.get("candidate_triangulation"),
        "contract_valid": not issues,
        "issues": issues,
        "warnings": warnings,
        "runtime_ready": runtime_ready,
        "runtime_gate_declared_ready": bool(runtime_gate.get("runtime_ready")),
        "decision": decision,
        "recommended_action": recommended_action,
        "stop_conditions": [
            "do_not_run_lab_agent",
            "do_not_mutate_seme",
            "do_not_mutate_graph",
            "do_not_sync_public",
            "do_not_promote_qxg",
        ],
        "next_executable_edge": {
            "row": "qes_factorization_boundary",
            "operator_needed": "reproducible two-reader classification over one declared setup row",
            "null_needed": "preserve TxQ while breaking TxG, or preserve TxG while breaking TxQ, without changing denominator",
            "provider_needed": "verified runtime/provider channel before any agent cycle",
        },
    }


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--contract", type=Path, default=DEFAULT_CONTRACT)
    parser.add_argument("--output", type=Path)
    parser.add_argument("--json", action="store_true")
    args = parser.parse_args()

    result = build_result(args.contract)
    if args.output:
        out_path = args.output
    else:
        stamp = utc_now().strftime("%Y%m%d_%H%M%S")
        out_path = PREFLIGHT / f"qxg_contract_smoke_{stamp}.json"
    write_json(out_path, result)

    if args.json:
        print(
            json.dumps(
                {
                    "decision": result["decision"],
                    "contract_valid": result["contract_valid"],
                    "runtime_ready": result["runtime_ready"],
                    "recommended_action": result["recommended_action"],
                    "path": rel(out_path),
                },
                ensure_ascii=False,
            )
        )
    else:
        print(f"QxG contract smoke: {result['decision']}")
        print(f"contract_valid={result['contract_valid']} runtime_ready={result['runtime_ready']}")
        print(f"recommended_action={result['recommended_action']}")
        print(f"wrote: {out_path}")
    return 0 if result["contract_valid"] else 1


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

exec
/bin/bash -lc "sed -n '1,260p' tools/qxg_setup_row_operator.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""Classify QxG/TxQ/TxG contract setup rows without running the Lab cycle."""
from __future__ import annotations

import argparse
import json
from datetime import datetime, timezone
from pathlib import Path
from typing import Any


TOOLS = Path(__file__).resolve().parent
REPO = TOOLS.parent
DEFAULT_CONTRACT = TOOLS / "data" / "qxg_txq_txg_fit_ready_contract_20260604.json"
PREFLIGHT = TOOLS / "data" / "preflight"

QUANTUM_MARKERS = {
    "bulk",
    "density",
    "entanglement",
    "factorization",
    "hilbert",
    "state",
    "s_bulk",
}

GEOMETRY_MARKERS = {
    "area",
    "a/",
    "horizon",
    "hawking",
    "gravity",
    "geometry",
    "l_p",
    "s_bh",
    "s_gen",
}


def utc_now() -> datetime:
    return datetime.now(timezone.utc)


def read_json(path: Path) -> dict[str, Any]:
    try:
        data = json.loads(path.read_text(encoding="utf-8"))
    except Exception as exc:
        raise SystemExit(f"cannot read JSON {path}: {exc}") from exc
    if not isinstance(data, dict):
        raise SystemExit(f"JSON root must be an object: {path}")
    return data


def write_json(path: Path, data: Any) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps(data, indent=2, ensure_ascii=False, sort_keys=True) + "\n", encoding="utf-8")


def rel(path: Path) -> str:
    try:
        return str(path.resolve().relative_to(REPO.resolve()))
    except ValueError:
        return str(path)


def marker_hit(texts: list[str], markers: set[str]) -> list[str]:
    hits: list[str] = []
    blob = " | ".join(texts).lower()
    for marker in sorted(markers):
        if marker in blob:
            hits.append(marker)
    return hits


def classify_row(row: dict[str, Any]) -> dict[str, Any]:
    required = [str(item) for item in row.get("required_readings") or []]
    excluded = [str(item) for item in row.get("excluded_mass") or []]
    expected = str(row.get("expected_class") or "")
    quantum_hits = marker_hit(required, QUANTUM_MARKERS)
    geometry_hits = marker_hit(required, GEOMETRY_MARKERS)
    two_reader_defined = bool(quantum_hits and geometry_hits)

    if expected == "stress_or_fall":
        vc_state = "stress_guard"
    elif expected == "counter_perimeter":
        vc_state = "censor_guard"
    elif not two_reader_defined:
        vc_state = "broken"
    elif expected == "candidate_internal_event":
        vc_state = "defined_candidate"
    elif expected in {"blank_or_counter_perimeter", "counter_perimeter"}:
        vc_state = "defined_counter"
    elif expected == "stress_or_fall":
        vc_state = "defined_stress"
    else:
        vc_state = "defined_unknown"

    if vc_state == "defined_candidate":
        next_use = "candidate_row_for_executable_null"
    elif vc_state == "defined_counter":
        next_use = "counter_or_blank_guard"
    elif vc_state in {"defined_stress", "stress_guard"}:
        next_use = "regime_failure_guard"
    elif vc_state == "censor_guard":
        next_use = "counter_or_blank_guard"
    else:
        next_use = "not_fit_ready"

    return {
        "id": row.get("id"),
        "regime": row.get("regime"),
        "expected_class": expected,
        "required_readings": required,
        "excluded_mass": excluded,
        "quantum_hits": quantum_hits,
        "geometry_hits": geometry_hits,
        "two_reader_defined": two_reader_defined,
        "vc_state": vc_state,
        "next_use": next_use,
    }


def build_result(contract_path: Path) -> dict[str, Any]:
    contract = read_json(contract_path)
    rows = contract.get("setup_rows") or []
    if not isinstance(rows, list):
        rows = []

    classified = [classify_row(row) for row in rows if isinstance(row, dict)]
    candidate_rows = [row["id"] for row in classified if row["next_use"] == "candidate_row_for_executable_null"]
    counter_rows = [row["id"] for row in classified if row["next_use"] == "counter_or_blank_guard"]
    broken_rows = [row["id"] for row in classified if row["vc_state"] == "broken"]

    if candidate_rows and counter_rows and not broken_rows:
        decision = "OPERATOR_DEFINED_NO_RUNTIME"
        recommended_action = "BUILD_NULL_FOR_QES_FACTORIZATION_BOUNDARY"
    elif broken_rows:
        decision = "OPERATOR_INCOMPLETE"
        recommended_action = "REPAIR_BROKEN_ROWS_BEFORE_RUNTIME"
    else:
        decision = "NO_CANDIDATE_ROW"
        recommended_action = "RETURN_TO_MANUAL_CONTRACT"

    return {
        "schema_version": "0.1",
        "generated_at": utc_now().isoformat(),
        "source_contract": rel(contract_path),
        "target_pair": contract.get("target_pair"),
        "operator": "qxg_setup_row_operator",
        "decision": decision,
        "recommended_action": recommended_action,
        "candidate_rows": candidate_rows,
        "counter_rows": counter_rows,
        "broken_rows": broken_rows,
        "rows": classified,
        "runtime_ready": False,
        "stop_conditions": [
            "classification_only",
            "do_not_run_lab_agent",
            "do_not_mutate_graph",
            "do_not_promote_qxg",
        ],
    }


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--contract", type=Path, default=DEFAULT_CONTRACT)
    parser.add_argument("--output", type=Path)
    parser.add_argument("--json", action="store_true")
    args = parser.parse_args()

    result = build_result(args.contract)
    if args.output:
        out_path = args.output
    else:
        stamp = utc_now().strftime("%Y%m%d_%H%M%S")
        out_path = PREFLIGHT / f"qxg_setup_row_operator_{stamp}.json"
    write_json(out_path, result)

    if args.json:
        print(
            json.dumps(
                {
                    "decision": result["decision"],
                    "candidate_rows": result["candidate_rows"],
                    "counter_rows": result["counter_rows"],
                    "broken_rows": result["broken_rows"],
                    "recommended_action": result["recommended_action"],
                    "path": rel(out_path),
                },
                ensure_ascii=False,
            )
        )
    else:
        print(f"QxG setup row operator: {result['decision']}")
        print(f"candidate_rows={','.join(result['candidate_rows']) or '-'}")
        print(f"counter_rows={','.join(result['counter_rows']) or '-'}")
        print(f"broken_rows={','.join(result['broken_rows']) or '-'}")
        print(f"recommended_action={result['recommended_action']}")
        print(f"wrote: {out_path}")
    return 0 if not result["broken_rows"] and result["candidate_rows"] else 1


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

exec
/bin/bash -lc "sed -n '1,220p' tools/qxg_supervised_report_draft.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""Produce one supervised QxG report draft outside the autonomous Lab pipeline."""
from __future__ import annotations

import argparse
import json
from datetime import datetime, timezone
from pathlib import Path
from typing import Any


TOOLS = Path(__file__).resolve().parent
REPO = TOOLS.parent
PREFLIGHT = TOOLS / "data" / "preflight"
REPORTS = PREFLIGHT / "supervised_reports"
DOCS = REPO / "docs" / "operations"

DEFAULT_PREFLIGHT = PREFLIGHT / "qxg_supervised_preflight_latest.json"
DEFAULT_NULL = PREFLIGHT / "qxg_qes_null_latest.json"


def utc_now() -> datetime:
    return datetime.now(timezone.utc)


def read_json(path: Path) -> dict[str, Any]:
    try:
        data = json.loads(path.read_text(encoding="utf-8"))
    except Exception as exc:
        raise SystemExit(f"cannot read JSON {path}: {exc}") from exc
    if not isinstance(data, dict):
        raise SystemExit(f"JSON root must be an object: {path}")
    return data


def write_json(path: Path, data: Any) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps(data, indent=2, ensure_ascii=False, sort_keys=True) + "\n", encoding="utf-8")


def write_text(path: Path, text: str) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(text, encoding="utf-8")


def rel(path: Path) -> str:
    try:
        return str(path.resolve().relative_to(REPO.resolve()))
    except ValueError:
        return str(path)


def build_report(preflight_path: Path, null_path: Path) -> dict[str, Any]:
    preflight = read_json(preflight_path)
    qes_null = read_json(null_path)

    issues: list[str] = []
    if preflight.get("decision") != "SUPERVISED_PREFLIGHT_READY_NO_RUNTIME":
        issues.append(f"preflight_not_ready={preflight.get('decision')}")
    if qes_null.get("decision") != "NULL_DEFINED_NO_RUNTIME":
        issues.append(f"null_not_defined={qes_null.get('decision')}")

    if issues:
        verdict = "DRAFT_BLOCKED"
        classification = "blocked_preflight"
    else:
        verdict = "BOUNDARY_READY / NO PROMOTION"
        classification = "supervised_preflight_report"

    return {
        "schema_version": "0.1",
        "generated_at": utc_now().isoformat(),
        "title": "Supervised QxG QES Boundary Draft",
        "classification": classification,
        "verdict": verdict,
        "issues": issues,
        "source_preflight": rel(preflight_path),
        "source_null": rel(null_path),
        "question": preflight.get("supervised_question"),
        "state": preflight.get("verified_state") or {},
        "null_scenarios": qes_null.get("null_scenarios") or [],
        "evidence_boundary": [
            "This draft verifies a controlled starting boundary, not a physics discovery.",
            "QxG remains question_only.",
            "The autonomous Lab runtime is not started.",
            "The graph, seme, reports/latest and public surfaces are not mutated.",
        ],
        "falsified_or_blocked": [
            "measurement_first",
            "search_for_search",
            "QxG promotion from a single reader",
            "Anderson/W16.5 promotion as physical B content",
        ],
        "open_points": [
            "Whether co-presence of TxQ and TxG produces an internal candidate event.",
            "Whether both null scenarios block QxG transfer under a future executable measure.",
            "Which reproducible measure should implement the null without changing denominator.",
        ],
        "next_verification": {
            "action": "implement_or_select_reproducible_measure_for_defined_null",
            "minimum_condition": "same denominator S_gen = A/(4 l_P^2) + S_bulk",
            "pass": "both null scenarios block transfer; then test co-presence TxQ+TxG",
            "blank": "null blocks all transfer or no internal event is produced",
            "fall": "single-reader promotion, coordinate fit, area-only/S_bulk-only or regime misuse",
        },
        "runtime_policy": preflight.get("runtime_policy") or {},
    }


def render_markdown(report: dict[str, Any]) -> str:
    state = report.get("state") or {}
    null_rows = report.get("null_scenarios") or []
    null_text = "\n".join(
        f"- `{row.get('id')}`: preserve {', '.join(row.get('preserve') or [])}; break/withhold {', '.join(row.get('break_or_withhold') or [])}"
        for row in null_rows
        if isinstance(row, dict)
    )
    return f"""# {report['title']}

Date: {report['generated_at']}
Verdict: {report['verdict']}

## Question

{report['question']}

## State

- target: {state.get('target')} / {state.get('state')}
- channel: {' / '.join(state.get('channel') or [])}
- candidate row: {state.get('candidate_row')}
- Anderson: {state.get('anderson')}

## Null Scenarios

{null_text or '- none'}

## Evidence Boundary

{chr(10).join(f'- {item}' for item in report['evidence_boundary'])}

## Falsified Or Blocked

{chr(10).join(f'- {item}' for item in report['falsified_or_blocked'])}

## Open Points

{chr(10).join(f'- {item}' for item in report['open_points'])}

## Next Verification

```text
action: {report['next_verification']['action']}
minimum_condition: {report['next_verification']['minimum_condition']}
pass: {report['next_verification']['pass']}
blank: {report['next_verification']['blank']}
fall: {report['next_verification']['fall']}
```

## Boundary

This is a supervised report draft outside the normal Lab report pipeline. It
does not update seme, graph, reports/latest or public Lab surfaces.
"""


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--preflight", type=Path, default=DEFAULT_PREFLIGHT)
    parser.add_argument("--qes-null", type=Path, default=DEFAULT_NULL)
    parser.add_argument("--output-json", type=Path)
    parser.add_argument("--output-md", type=Path)
    parser.add_argument("--json", action="store_true")
    args = parser.parse_args()

    report = build_report(args.preflight, args.qes_null)
    stamp = utc_now().strftime("%Y%m%d_%H%M%S")
    json_path = args.output_json or REPORTS / f"qxg_supervised_report_{stamp}.json"
    md_path = args.output_md or DOCS / f"qxg_supervised_report_{stamp}.md"

    write_json(json_path, report)
    write_text(md_path, render_markdown(report))
    write_json(REPORTS / "latest.json", report)
    write_text(DOCS / "qxg_supervised_report_latest.md", render_markdown(report))

    if args.json:
        print(
            json.dumps(
                {
                    "verdict": report["verdict"],
                    "classification": report["classification"],
                    "issues": report["issues"],
                    "json_path": rel(json_path),
                    "md_path": rel(md_path),
                },
                ensure_ascii=False,
            )
        )
    else:
        print(f"QxG supervised report draft: {report['verdict']}")
        print(f"json={json_path}")
        print(f"md={md_path}")
    return 0 if not report["issues"] else 1


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

exec
/bin/bash -lc 'tail -120 tools/data/qxg_txq_txg_fit_ready_contract_20260604.json' in /opt/MM_D-ND
 succeeded in 0ms:
{
  "schema_version": "0.1",
  "created_at": "2026-06-04T14:56:23Z",
  "status": "manual_contract_not_runtime_ready",
  "target_pair": "QxG",
  "completion_state": "contract_ready_not_integrated",
  "candidate_triangulation": ["TxQ", "TxG"],
  "source_packets": [
    "/opt/tm7/packets/2026-06-03/TM7-vps_lab_trajectory_compensation_card_20260603.md",
    "/opt/tm7/packets/2026-06-04/TM7-vps_lab_txq_txg_combo_pre_experiment_20260604.md",
    "/opt/tm7/packets/2026-06-04/TM7-vps_lab_qxg_fit_ready_preparation_20260604.md",
    "/opt/tm7/packets/2026-06-04/TM7-vps_lab_qxg_txq_txg_fit_ready_table_draft_20260604.md",
    "/opt/tm7/packets/2026-06-04/TM7-vps_lab_qxg_awareness_expansion_ledger_20260604.md"
  ],
  "question": "Can the QxG void be interrogated through a declared T,Q,G boundary where TxQ and TxG provide two distinguishable readings without promoting QxG?",
  "claim_candidate": "A QxG question becomes testable only when the same declared boundary/setup preserves or breaks, in a discriminable way, two thermodynamic readings: quantum state/density/entropy and gravitational horizon/radiation/area.",
  "denominator": {
    "primary": "S_gen = A/(4 l_P^2) + S_bulk",
    "semiclassical_limit": "S_BH/k_B = A/(4 l_P^2)",
    "qgx_marker": "l_P^2 = G*hbar/c^3",
    "negative_guard": "Horizon does not force QxG; for M >> M_P the horizon can remain classical."
  },
  "readers": {
    "TxQ": {
      "role": "quantum/state reader",
      "reads": ["density matrix", "S_bulk", "entanglement entropy", "Hilbert factorization"]
    },
    "TxG": {
      "role": "gravity/thermal reader",
      "reads": ["horizon area", "Hawking temperature", "Euclidean periodicity", "S_BH"]
    },
    "QxG": {
      "role": "void target",
      "reads": ["continuous/discrete boundary", "Planck area", "factorization failure"],
      "promotion_allowed": false
    }
  },
  "setup_rows": [
    {
      "id": "semiclassical_large_horizon",
      "regime": "M >> M_P / A >> l_P^2",
      "expected_class": "blank_or_counter_perimeter",
      "why": "The horizon can stay classical; TxQ and TxG may coexist without QxG closure.",
      "required_readings": ["A/(4 l_P^2)", "S_bulk_or_density_state"],
      "excluded_mass": ["direct_QxG_promotion", "horizon_equals_QxG"]
    },
    {
      "id": "qes_factorization_boundary",
      "regime": "QES / generalized entropy extremization",
      "expected_class": "candidate_internal_event",
      "why": "QES makes Hilbert factorization and geometry/entropy separation part of the event, not a kinematic input.",
      "required_readings": ["S_gen", "area_term", "S_bulk", "factorization_status"],
      "excluded_mass": ["S_bulk_only", "area_only", "coordinate_fit"]
    },
    {
      "id": "planck_scale_stress",
      "regime": "A ~ l_P^2 or M ~ M_P",
      "expected_class": "stress_or_fall",
      "why": "The semiclassical denominator approaches its declared failure zone.",
      "required_readings": ["scale_relation_to_l_P2", "validity_of_semiclassical_split"],
      "excluded_mass": ["using_S_BH_where_semiclassical_assumptions_are_marked_invalid"]
    },
    {
      "id": "charge_or_gauge_censor",
      "regime": "QxE/GxE counter-face, e.g. charged/extremal structure",
      "expected_class": "counter_perimeter",
      "why": "E can expose whether the apparent QxG signal is actually gauge/charge or classical Einstein-Maxwell structure.",
      "required_readings": ["gauge_phase_or_charge_source", "entropy_or_horizon_reading"],
      "excluded_mass": ["relabelling_QxE_or_GxE_as_QxG"]
    }
  ],
  "vc_defined": {
    "state": "candidate",
    "definition": "A row is defined only when one declared setup has both a geometric/thermal reading and a quantum/state reading in the same denominator, plus an event class.",
    "event_classes": ["internal_event", "controlled_non_cross", "reader_asymmetry", "excluded_mass"],
    "complete": "all declared setup rows have both readings and an event class",
    "contaminated": "at least one row is defined, but excluded mass is present and named",
    "broken": "a required row has no defined two-reader event",
    "absent": "no row reaches defined two-reader status"
  },
  "thresholds": {
    "transfer": "Row-aligned two-reader event survives the declared null/counter-perimeter and produces a more precise physical B question without promoting QxG.",
    "blank": "The denominator is present but remains common thermodynamic language: no internal event, no threshold, or no common setup.",
    "fall": "The apparent compatibility is produced by construction, coordinate/fit choice, regime misuse, or by using semiclassical formulas where the contract itself marks them invalid."
  },
  "counter_perimeter": {
    "declared": "Preserve TxQ while breaking TxG, or preserve TxG while breaking TxQ, without changing the denominator.",
    "censor": "E/QxE/GxE charge or gauge face can be used only to falsify/censor false QxG transfer, not to close QxG.",
    "falsifiers": [
      "single-reader result",
      "area-only or S_bulk-only row",
      "QxE/GxE relabelled as QxG",
      "horizon treated as QxG for M >> M_P",
      "new metric without new falsifier"
    ]
  },
  "anderson_constraint_transfer": {
    "allowed": "Use Anderson only as negative form: stable reference / sensitive intermediate channel; local_global / local_only; isotropic perturbation / anisotropic split.",
    "forbidden": "Promote W16.5, onsite_tilt=-0.0625, or Anderson as physical B content."
  },
  "runtime_gate": {
    "runtime_ready": false,
    "reason": "The contract now names denominator, readers, setup rows and logical thresholds, but no executable operator/smoke and no provider readiness are verified.",
    "required_before_runtime": [
      "operator=<reproducible measure or transformation on one setup row>",
      "null=<executable counter-perimeter>",
      "provider_runtime=verified",
      "operator_ack=yes"
    ]
  },
  "promotion_policy": {
    "promote_qxg": false,
    "promote_as": ["manual_contract", "preflight_input", "question"],
    "do_not_promote_as": ["physics_law", "graph_edge", "accepted_discovery"]
  }
}

exec
/bin/bash -lc "sed -n '1,260p' tools/qxg_qes_null_builder.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""Build the executable null spec for the QxG QES/factorization candidate row."""
from __future__ import annotations

import argparse
import json
from datetime import datetime, timezone
from pathlib import Path
from typing import Any


TOOLS = Path(__file__).resolve().parent
REPO = TOOLS.parent
DEFAULT_CONTRACT = TOOLS / "data" / "qxg_txq_txg_fit_ready_contract_20260604.json"
DEFAULT_OPERATOR = TOOLS / "data" / "preflight" / "qxg_setup_row_operator_latest.json"
PREFLIGHT = TOOLS / "data" / "preflight"

CANDIDATE_ROW = "qes_factorization_boundary"


def utc_now() -> datetime:
    return datetime.now(timezone.utc)


def read_json(path: Path) -> dict[str, Any]:
    try:
        data = json.loads(path.read_text(encoding="utf-8"))
    except Exception as exc:
        raise SystemExit(f"cannot read JSON {path}: {exc}") from exc
    if not isinstance(data, dict):
        raise SystemExit(f"JSON root must be an object: {path}")
    return data


def write_json(path: Path, data: Any) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps(data, indent=2, ensure_ascii=False, sort_keys=True) + "\n", encoding="utf-8")


def rel(path: Path) -> str:
    try:
        return str(path.resolve().relative_to(REPO.resolve()))
    except ValueError:
        return str(path)


def find_row(contract: dict[str, Any], row_id: str) -> dict[str, Any] | None:
    for row in contract.get("setup_rows") or []:
        if isinstance(row, dict) and row.get("id") == row_id:
            return row
    return None


def validate_inputs(contract: dict[str, Any], operator: dict[str, Any]) -> list[str]:
    issues: list[str] = []
    if contract.get("target_pair") != "QxG":
        issues.append("contract_target_pair_not_qxg")
    if CANDIDATE_ROW not in set(operator.get("candidate_rows") or []):
        issues.append("operator_candidate_row_missing_qes_factorization_boundary")
    if operator.get("decision") != "OPERATOR_DEFINED_NO_RUNTIME":
        issues.append(f"operator_decision_unexpected={operator.get('decision')}")
    row = find_row(contract, CANDIDATE_ROW)
    if not row:
        issues.append("contract_missing_qes_factorization_boundary")
    else:
        required = set(row.get("required_readings") or [])
        for item in ("S_gen", "area_term", "S_bulk", "factorization_status"):
            if item not in required:
                issues.append(f"qes_row_missing_required_reading={item}")
    return issues


def build_null_spec(contract_path: Path, operator_path: Path) -> dict[str, Any]:
    contract = read_json(contract_path)
    operator = read_json(operator_path)
    issues = validate_inputs(contract, operator)
    row = find_row(contract, CANDIDATE_ROW) or {}
    denominator = (contract.get("denominator") or {}).get("primary")

    scenarios = [
        {
            "id": "preserve_txq_break_txg",
            "preserve": ["S_bulk", "factorization_status"],
            "break_or_withhold": ["area_term", "S_BH_or_horizon_area_reading"],
            "same_denominator_required": True,
            "expected_result": "no_QxG_transfer",
            "fall_if": [
                "QxG promoted from S_bulk only",
                "area term silently reintroduced",
                "denominator changed to hide missing TxG reader",
            ],
        },
        {
            "id": "preserve_txg_break_txq",
            "preserve": ["area_term", "S_BH_or_horizon_area_reading"],
            "break_or_withhold": ["S_bulk", "factorization_status"],
            "same_denominator_required": True,
            "expected_result": "no_QxG_transfer",
            "fall_if": [
                "QxG promoted from area only",
                "factorization assumed without reader",
                "classical horizon treated as QxG for M >> M_P",
            ],
        },
    ]

    decision = "NULL_DEFINED_NO_RUNTIME" if not issues else "NULL_INPUT_INVALID"
    recommended_action = "PROVIDER_PREFLIGHT_OR_OPERATOR_ACK_REVIEW" if not issues else "REPAIR_NULL_INPUTS"

    return {
        "schema_version": "0.1",
        "generated_at": utc_now().isoformat(),
        "source_contract": rel(contract_path),
        "source_operator": rel(operator_path),
        "target_pair": "QxG",
        "candidate_row": CANDIDATE_ROW,
        "candidate_regime": row.get("regime"),
        "denominator": denominator,
        "decision": decision,
        "issues": issues,
        "recommended_action": recommended_action,
        "null_scenarios": scenarios,
        "pass_condition": "both null scenarios block QxG transfer without changing denominator",
        "fail_condition": "either null scenario still promotes QxG from a single reader, coordinate fit, or regime misuse",
        "runtime_ready": False,
        "stop_conditions": [
            "null_spec_only",
            "do_not_run_lab_agent",
            "do_not_mutate_graph",
            "do_not_promote_qxg",
            "do_not_sync_public",
        ],
    }


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--contract", type=Path, default=DEFAULT_CONTRACT)
    parser.add_argument("--operator", type=Path, default=DEFAULT_OPERATOR)
    parser.add_argument("--output", type=Path)
    parser.add_argument("--json", action="store_true")
    args = parser.parse_args()

    result = build_null_spec(args.contract, args.operator)
    if args.output:
        out_path = args.output
    else:
        stamp = utc_now().strftime("%Y%m%d_%H%M%S")
        out_path = PREFLIGHT / f"qxg_qes_null_{stamp}.json"
    write_json(out_path, result)

    if args.json:
        print(
            json.dumps(
                {
                    "decision": result["decision"],
                    "candidate_row": result["candidate_row"],
                    "scenarios": [row["id"] for row in result["null_scenarios"]],
                    "runtime_ready": result["runtime_ready"],
                    "recommended_action": result["recommended_action"],
                    "path": rel(out_path),
                },
                ensure_ascii=False,
            )
        )
    else:
        print(f"QxG QES null: {result['decision']}")
        print(f"candidate_row={result['candidate_row']}")
        print("scenarios=" + ",".join(row["id"] for row in result["null_scenarios"]))
        print(f"recommended_action={result['recommended_action']}")
        print(f"wrote: {out_path}")
    return 0 if not result["issues"] else 1


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

exec
/bin/bash -lc "sed -n '1,320p' tools/qxg_qes_observation_producer.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""Produce deterministic QxG/QES boundary observations for the classifier.

This is an executable observation producer for the declared QES/factorization
boundary. It uses a small, deterministic extremization model of

    S_gen(x) = area_term(x) + S_bulk(x)

to emit the observation rows consumed by qxg_boundary_classifier.py. The output
is an operational Lab observation, not a physics-law promotion.
"""
from __future__ import annotations

import argparse
import json
from dataclasses import dataclass
from datetime import datetime, timezone
from pathlib import Path
from typing import Any


TOOLS = Path(__file__).resolve().parent
REPO = TOOLS.parent
PREFLIGHT = TOOLS / "data" / "preflight"
DOCS = REPO / "docs" / "operations"

PRIMARY_DENOMINATOR = "S_gen = A/(4 l_P^2) + S_bulk"
REGIME = "QES / generalized entropy extremization"


@dataclass(frozen=True)
class ModelParams:
    grid_min: float = -2.0
    grid_max: float = 2.0
    grid_steps: int = 4001
    area_center: float = -0.55
    bulk_center: float = 0.70
    area_weight: float = 1.0
    bulk_weight: float = 0.82
    coupling_weight: float = 0.18
    qes_shift_threshold: float = 0.15


def utc_now() -> datetime:
    return datetime.now(timezone.utc)


def write_json(path: Path, data: Any) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps(data, indent=2, ensure_ascii=False, sort_keys=True) + "\n", encoding="utf-8")


def write_text(path: Path, text: str) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(text, encoding="utf-8")


def rel(path: Path) -> str:
    try:
        return str(path.resolve().relative_to(REPO.resolve()))
    except ValueError:
        return str(path)


def linspace(start: float, stop: float, steps: int) -> list[float]:
    if steps < 2:
        return [start]
    delta = (stop - start) / (steps - 1)
    return [start + i * delta for i in range(steps)]


def area_term(x: float, p: ModelParams) -> float:
    return p.area_weight * (x - p.area_center) ** 2


def bulk_term(x: float, p: ModelParams) -> float:
    return p.bulk_weight * (x - p.bulk_center) ** 2


def coupling_term(x: float, p: ModelParams) -> float:
    return p.coupling_weight * (x - p.area_center) * (x - p.bulk_center)


def extremize(values: list[tuple[float, float]]) -> dict[str, float]:
    x, value = min(values, key=lambda row: row[1])
    return {"x_star": round(x, 6), "value": round(value, 12)}


def build_model(p: ModelParams) -> dict[str, Any]:
    xs = linspace(p.grid_min, p.grid_max, p.grid_steps)
    area_only = extremize([(x, area_term(x, p)) for x in xs])
    bulk_only = extremize([(x, bulk_term(x, p)) for x in xs])
    full = extremize([(x, area_term(x, p) + bulk_term(x, p) + coupling_term(x, p)) for x in xs])

    full_x = float(full["x_star"])
    area_x = float(area_only["x_star"])
    bulk_x = float(bulk_only["x_star"])
    requires_txq = abs(full_x - area_x) >= p.qes_shift_threshold
    requires_txg = abs(full_x - bulk_x) >= p.qes_shift_threshold
    internal_event = requires_txq and requires_txg

    return {
        "model": "deterministic_quadratic_qes_extremization",
        "params": {
            "grid_min": p.grid_min,
            "grid_max": p.grid_max,
            "grid_steps": p.grid_steps,
            "area_center": p.area_center,
            "bulk_center": p.bulk_center,
            "area_weight": p.area_weight,
            "bulk_weight": p.bulk_weight,
            "coupling_weight": p.coupling_weight,
            "qes_shift_threshold": p.qes_shift_threshold,
        },
        "extrema": {
            "area_only": area_only,
            "bulk_only": bulk_only,
            "full_s_gen": full,
        },
        "diagnostics": {
            "full_minus_area_only_abs": round(abs(full_x - area_x), 6),
            "full_minus_bulk_only_abs": round(abs(full_x - bulk_x), 6),
            "requires_txq": requires_txq,
            "requires_txg": requires_txg,
            "internal_event": internal_event,
        },
    }


def observation_rows(model: dict[str, Any]) -> list[dict[str, Any]]:
    internal_event = bool((model.get("diagnostics") or {}).get("internal_event"))
    return [
        {
            "id": "qes_null_preserve_txq_break_txg",
            "scenario": "preserve_txq_break_txg",
            "denominator": PRIMARY_DENOMINATOR,
            "readings_present": ["S_bulk", "factorization_status"],
            "readings_missing": ["area_term", "S_BH_or_horizon_area_reading"],
            "internal_event": False,
            "promotes_qxg": False,
            "regime": REGIME,
            "model_ref": "bulk_only_extremum",
        },
        {
            "id": "qes_null_preserve_txg_break_txq",
            "scenario": "preserve_txg_break_txq",
            "denominator": PRIMARY_DENOMINATOR,
            "readings_present": ["area_term", "S_BH_or_horizon_area_reading"],
            "readings_missing": ["S_bulk", "factorization_status"],
            "internal_event": False,
            "promotes_qxg": False,
            "regime": REGIME,
            "model_ref": "area_only_extremum",
        },
        {
            "id": "qes_copresence_txq_txg",
            "scenario": "co_presence_txq_txg",
            "denominator": PRIMARY_DENOMINATOR,
            "readings_present": ["S_gen", "area_term", "S_bulk", "factorization_status"],
            "readings_missing": [],
            "internal_event": internal_event,
            "promotes_qxg": False,
            "regime": REGIME,
            "model_ref": "full_s_gen_extremum",
        },
    ]


def build_result(p: ModelParams) -> dict[str, Any]:
    model = build_model(p)
    observations = observation_rows(model)
    return {
        "schema_version": "0.1",
        "generated_at": utc_now().isoformat(),
        "producer": "qxg_qes_observation_producer",
        "observation_kind": "deterministic_qes_boundary_model",
        "physics_claim": False,
        "promotion_allowed": False,
        "target_pair": "QxG",
        "denominator": PRIMARY_DENOMINATOR,
        "regime": REGIME,
        "model": model,
        "observations": observations,
        "runtime_policy": {
            "runtime_ready": False,
            "do_not_run_lab_agent": True,
            "do_not_mutate_seme": True,
            "do_not_mutate_graph": True,
            "do_not_promote_qxg": True,
            "do_not_sync_public": True,
        },
    }


def render_markdown(result: dict[str, Any]) -> str:
    diagnostics = (result.get("model") or {}).get("diagnostics") or {}
    extrema = (result.get("model") or {}).get("extrema") or {}
    rows = "\n".join(
        f"- `{row['id']}`: scenario={row['scenario']} internal_event={str(row['internal_event']).lower()}"
        for row in result.get("observations", [])
    )
    return f"""# QxG QES Observation Producer

Date: {result['generated_at']}

## Boundary

```text
target_pair: {result['target_pair']}
denominator: {result['denominator']}
regime: {result['regime']}
physics_claim: {str(result['physics_claim']).lower()}
promotion_allowed: {str(result['promotion_allowed']).lower()}
```

## Model

Deterministic extremization of `S_gen(x) = area_term(x) + S_bulk(x)` with a
small coupling term. This is an operational observation producer for the Lab
classifier, not a promoted physical result.

```json
{json.dumps(extrema, indent=2, ensure_ascii=False)}
```

## Diagnostics

```json
{json.dumps(diagnostics, indent=2, ensure_ascii=False)}
```

## Observations

{rows}

## Runtime Policy

```text
runtime_ready: false
do_not_run_lab_agent: true
do_not_mutate_seme: true
do_not_mutate_graph: true
do_not_promote_qxg: true
do_not_sync_public: true
```
"""


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--output-json", type=Path)
    parser.add_argument("--output-md", type=Path)
    parser.add_argument("--json", action="store_true")
    parser.add_argument("--area-center", type=float, default=ModelParams.area_center)
    parser.add_argument("--bulk-center", type=float, default=ModelParams.bulk_center)
    parser.add_argument("--area-weight", type=float, default=ModelParams.area_weight)
    parser.add_argument("--bulk-weight", type=float, default=ModelParams.bulk_weight)
    parser.add_argument("--coupling-weight", type=float, default=ModelParams.coupling_weight)
    parser.add_argument("--threshold", type=float, default=ModelParams.qes_shift_threshold)
    args = parser.parse_args()

    params = ModelParams(
        area_center=args.area_center,
        bulk_center=args.bulk_center,
        area_weight=args.area_weight,
        bulk_weight=args.bulk_weight,
        coupling_weight=args.coupling_weight,
        qes_shift_threshold=args.threshold,
    )
    result = build_result(params)
    stamp = utc_now().strftime("%Y%m%d_%H%M%S")
    json_path = args.output_json or PREFLIGHT / f"qxg_qes_observations_{stamp}.json"
    md_path = args.output_md or DOCS / f"qxg_qes_observations_{stamp}.md"

    write_json(json_path, result)
    write_text(md_path, render_markdown(result))
    write_json(PREFLIGHT / "qxg_qes_observations_latest.json", result)
    write_text(DOCS / "qxg_qes_observations_latest.md", render_markdown(result))

    if args.json:
        print(
            json.dumps(
                {
                    "producer": result["producer"],
                    "observation_kind": result["observation_kind"],
                    "physics_claim": result["physics_claim"],
                    "internal_event": (result["model"]["diagnostics"] or {}).get("internal_event"),
                    "observations": len(result["observations"]),
                    "json_path": rel(json_path),
                    "md_path": rel(md_path),
                },
                ensure_ascii=False,
            )
        )
    else:
        print(f"QxG QES observations: {json_path}")
    return 0


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

exec
/bin/bash -lc "sed -n '1,380p' tools/qxg_boundary_classifier.py" in /opt/MM_D-ND
 succeeded in 0ms:
#!/usr/bin/env python3
"""Classify the QxG/QES boundary answer space without running Lab runtime."""
from __future__ import annotations

import argparse
import json
from datetime import datetime, timezone
from pathlib import Path
from typing import Any


TOOLS = Path(__file__).resolve().parent
REPO = TOOLS.parent
PREFLIGHT = TOOLS / "data" / "preflight"
DOCS = REPO / "docs" / "operations"

DEFAULT_CONTRACT = TOOLS / "data" / "qxg_txq_txg_fit_ready_contract_20260604.json"
DEFAULT_NULL = PREFLIGHT / "qxg_qes_null_latest.json"

PRIMARY_DENOMINATOR = "S_gen = A/(4 l_P^2) + S_bulk"


def utc_now() -> datetime:
    return datetime.now(timezone.utc)


def read_json(path: Path) -> dict[str, Any]:
    try:
        data = json.loads(path.read_text(encoding="utf-8"))
    except Exception as exc:
        raise SystemExit(f"cannot read JSON {path}: {exc}") from exc
    if not isinstance(data, dict):
        raise SystemExit(f"JSON root must be an object: {path}")
    return data


def write_json(path: Path, data: Any) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps(data, indent=2, ensure_ascii=False, sort_keys=True) + "\n", encoding="utf-8")


def write_text(path: Path, text: str) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(text, encoding="utf-8")


def rel(path: Path) -> str:
    try:
        return str(path.resolve().relative_to(REPO.resolve()))
    except ValueError:
        return str(path)


def as_set(value: Any) -> set[str]:
    if not isinstance(value, list):
        return set()
    return {str(item) for item in value}


def fixture_observations() -> list[dict[str, Any]]:
    return [
        {
            "id": "null_preserve_txq_break_txg",
            "scenario": "preserve_txq_break_txg",
            "denominator": PRIMARY_DENOMINATOR,
            "readings_present": ["S_bulk", "factorization_status"],
            "readings_missing": ["area_term", "S_BH_or_horizon_area_reading"],
            "internal_event": False,
            "promotes_qxg": False,
            "regime": "QES / generalized entropy extremization",
        },
        {
            "id": "null_preserve_txg_break_txq",
            "scenario": "preserve_txg_break_txq",
            "denominator": PRIMARY_DENOMINATOR,
            "readings_present": ["area_term", "S_BH_or_horizon_area_reading"],
            "readings_missing": ["S_bulk", "factorization_status"],
            "internal_event": False,
            "promotes_qxg": False,
            "regime": "QES / generalized entropy extremization",
        },
        {
            "id": "copresence_internal_event",
            "scenario": "co_presence_txq_txg",
            "denominator": PRIMARY_DENOMINATOR,
            "readings_present": ["S_gen", "area_term", "S_bulk", "factorization_status"],
            "readings_missing": [],
            "internal_event": True,
            "promotes_qxg": False,
            "regime": "QES / generalized entropy extremization",
        },
        {
            "id": "area_only_false_positive",
            "scenario": "fall_guard",
            "denominator": PRIMARY_DENOMINATOR,
            "readings_present": ["area_term", "S_BH_or_horizon_area_reading"],
            "readings_missing": ["S_bulk", "factorization_status"],
            "internal_event": True,
            "promotes_qxg": True,
            "regime": "QES / generalized entropy extremization",
        },
        {
            "id": "classical_horizon_false_positive",
            "scenario": "fall_guard",
            "denominator": "S_BH/k_B = A/(4 l_P^2)",
            "readings_present": ["area_term", "S_BH_or_horizon_area_reading"],
            "readings_missing": ["S_bulk", "factorization_status"],
            "internal_event": True,
            "promotes_qxg": True,
            "regime": "M >> M_P / A >> l_P^2",
        },
    ]


def load_observations(path: Path | None) -> tuple[list[dict[str, Any]], str]:
    if path is None:
        return fixture_observations(), "built_in_smoke_observations"
    data = read_json(path)
    rows = data.get("observations")
    if not isinstance(rows, list):
        raise SystemExit(f"observation JSON must contain an observations list: {path}")
    observations = [row for row in rows if isinstance(row, dict)]
    return observations, rel(path)


def classify_observation(observation: dict[str, Any], contract: dict[str, Any]) -> dict[str, Any]:
    present = as_set(observation.get("readings_present"))
    missing = as_set(observation.get("readings_missing"))
    denominator = str(observation.get("denominator") or "")
    regime = str(observation.get("regime") or "")
    internal_event = bool(observation.get("internal_event"))
    promotes_qxg = bool(observation.get("promotes_qxg"))

    reasons: list[str] = []
    fall_reasons: list[str] = []

    same_denominator = denominator == (contract.get("denominator") or {}).get("primary", PRIMARY_DENOMINATOR)
    if not same_denominator:
        fall_reasons.append("denominator_changed_or_not_primary_S_gen")

    has_txq = {"S_bulk", "factorization_status"}.issubset(present)
    has_txg = bool({"area_term", "S_BH_or_horizon_area_reading"} & present)
    has_full_qes = {"S_gen", "area_term", "S_bulk", "factorization_status"}.issubset(present)

    if promotes_qxg and not (has_txq and has_txg):
        fall_reasons.append("single_reader_qxg_promotion")
    if promotes_qxg and "S_bulk" not in present and has_txg:
        fall_reasons.append("area_only_promotion")
    if promotes_qxg and "area_term" not in present and has_txq:
        fall_reasons.append("s_bulk_only_promotion")
    if promotes_qxg and "M >> M_P" in regime:
        fall_reasons.append("classical_horizon_treated_as_qxg")
    if {"S_bulk", "factorization_status"} & missing and promotes_qxg:
        fall_reasons.append("factorization_missing_but_promoted")

    if fall_reasons:
        state = "FALL"
        reasons.extend(fall_reasons)
    elif has_full_qes and internal_event and same_denominator:
        state = "QxG_CANDIDATE"
        reasons.append("internal_event_requires_txq_and_txg_on_same_denominator")
    elif not internal_event and same_denominator:
        state = "BLANK"
        reasons.append("no_stable_internal_event_under_declared_boundary")
    else:
        state = "BLANK"
        reasons.append("insufficient_internal_event_evidence")

    return {
        "id": observation.get("id"),
        "scenario": observation.get("scenario"),
        "state": state,
        "reasons": reasons,
        "same_denominator": same_denominator,
        "has_txq": has_txq,
        "has_txg": has_txg,
        "has_full_qes": has_full_qes,
        "internal_event": internal_event,
        "promotes_qxg": promotes_qxg,
    }


def validate_inputs(contract: dict[str, Any], qes_null: dict[str, Any]) -> list[str]:
    issues: list[str] = []
    if contract.get("target_pair") != "QxG":
        issues.append("contract_target_pair_not_qxg")
    if (contract.get("readers") or {}).get("QxG", {}).get("promotion_allowed") is not False:
        issues.append("qxg_promotion_not_explicitly_blocked")
    if (contract.get("denominator") or {}).get("primary") != PRIMARY_DENOMINATOR:
        issues.append("primary_denominator_unexpected")
    if qes_null.get("decision") != "NULL_DEFINED_NO_RUNTIME":
        issues.append(f"qes_null_not_defined={qes_null.get('decision')}")
    scenarios = {row.get("id") for row in qes_null.get("null_scenarios") or [] if isinstance(row, dict)}
    for required in ("preserve_txq_break_txg", "preserve_txg_break_txq"):
        if required not in scenarios:
            issues.append(f"null_scenario_missing={required}")
    return issues


def build_result(contract_path: Path, null_path: Path, observations_path: Path | None) -> dict[str, Any]:
    contract = read_json(contract_path)
    qes_null = read_json(null_path)
    observations, observation_source = load_observations(observations_path)
    issues = validate_inputs(contract, qes_null)
    classifications = [classify_observation(row, contract) for row in observations]

    counts: dict[str, int] = {}
    for row in classifications:
        state = str(row.get("state"))
        counts[state] = counts.get(state, 0) + 1

    has_candidate = counts.get("QxG_CANDIDATE", 0) > 0
    has_blank = counts.get("BLANK", 0) > 0
    has_fall = counts.get("FALL", 0) > 0

    if issues:
        decision = "BOUNDARY_CLASSIFIER_INPUT_INVALID"
    elif observations_path is None:
        decision = "BOUNDARY_CLASSIFIER_SMOKE_READY_NO_RUNTIME"
    elif has_fall:
        decision = "BOUNDARY_CLASSIFIED_FALL"
    elif has_candidate and has_blank:
        decision = "BOUNDARY_CLASSIFIED_QXG_CANDIDATE_WITH_NULLS"
    elif has_candidate:
        decision = "BOUNDARY_CLASSIFIED_QXG_CANDIDATE_REQUIRES_NULLS"
    else:
        decision = "BOUNDARY_CLASSIFIED_BLANK"

    return {
        "schema_version": "0.1",
        "generated_at": utc_now().isoformat(),
        "decision": decision,
        "issues": issues,
        "source_contract": rel(contract_path),
        "source_null": rel(null_path),
        "observation_source": observation_source,
        "target_pair": "QxG",
        "denominator": PRIMARY_DENOMINATOR,
        "answer_space": ["QxG_CANDIDATE", "BLANK", "FALL"],
        "classification_counts": counts,
        "classifications": classifications,
        "runtime_policy": {
            "runtime_ready": False,
            "do_not_run_lab_agent": True,
            "do_not_mutate_seme": True,
            "do_not_mutate_graph": True,
            "do_not_promote_qxg": True,
            "do_not_sync_public": True,
        },
        "next_required_input": {
            "type": "observation_json",
            "fields": [
                "id",
                "scenario",
                "denominator",
                "readings_present",
                "readings_missing",
                "internal_event",
                "promotes_qxg",
                "regime",
            ],
        },
    }


def render_markdown(result: dict[str, Any]) -> str:
    rows = result.get("classifications") or []
    row_text = "\n".join(
        f"- `{row.get('id')}` -> **{row.get('state')}** ({', '.join(row.get('reasons') or [])})"
        for row in rows
        if isinstance(row, dict)
    )
    counts = result.get("classification_counts") or {}
    return f"""# QxG Boundary Classifier

Date: {result['generated_at']}
Decision: {result['decision']}

## Boundary Question

Which operational boundary distinguishes QxG from BLANK without turning the
measure into a trap?

## Accepted Answer Space

- `QxG_CANDIDATE`: an internal event requires TxQ and TxG together on `S_gen`.
- `BLANK`: one-sided nulls or co-presence leave no stable internal event.
- `FALL`: area-only, S_bulk-only, coordinate fit, single-reader promotion, or
  wrong physical regime.

## Inputs

- contract: `{result['source_contract']}`
- null: `{result['source_null']}`
- observations: `{result['observation_source']}`

## Counts

```json
{json.dumps(counts, indent=2, ensure_ascii=False)}
```

## Classifications

{row_text or '- none'}

## Runtime Policy

```text
runtime_ready: false
do_not_run_lab_agent: true
do_not_mutate_seme: true
do_not_mutate_graph: true
do_not_promote_qxg: true
do_not_sync_public: true
```

## Next Input

Provide an observation JSON with one or more rows containing:
`id`, `scenario`, `denominator`, `readings_present`, `readings_missing`,
`internal_event`, `promotes_qxg`, `regime`.
"""


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--contract", type=Path, default=DEFAULT_CONTRACT)
    parser.add_argument("--qes-null", type=Path, default=DEFAULT_NULL)
    parser.add_argument("--observations", type=Path)
    parser.add_argument("--output-json", type=Path)
    parser.add_argument("--output-md", type=Path)
    parser.add_argument("--json", action="store_true")
    args = parser.parse_args()

    result = build_result(args.contract, args.qes_null, args.observations)
    stamp = utc_now().strftime("%Y%m%d_%H%M%S")
    json_path = args.output_json or PREFLIGHT / f"qxg_boundary_classifier_{stamp}.json"
    md_path = args.output_md or DOCS / f"qxg_boundary_classifier_{stamp}.md"

    write_json(json_path, result)
    write_text(md_path, render_markdown(result))
    write_json(PREFLIGHT / "qxg_boundary_classifier_latest.json", result)
    write_text(DOCS / "qxg_boundary_classifier_latest.md", render_markdown(result))

    if args.json:
        print(
            json.dumps(
                {
                    "decision": result["decision"],
                    "issues": result["issues"],
                    "classification_counts": result["classification_counts"],
                    "json_path": rel(json_path),
                    "md_path": rel(md_path),
                },
                ensure_ascii=False,
            )
        )
    else:
        print(f"QxG boundary classifier: {result['decision']}")
        print(f"counts={result['classification_counts']}")
        print(f"json={json_path}")
        print(f"md={md_path}")
    return 0 if not result["issues"] else 1


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

exec
/bin/bash -lc 'ls -lt tools/data/preflight | head -40' in /opt/MM_D-ND
 succeeded in 0ms:
ls: write error: Broken pipe
total 2688
drwxr-xr-x 4 root root   4096 Jun  4 16:50 manual_controlled_snapshot_20260604_1650_561348
drwxr-xr-x 6 root root   4096 Jun  4 16:30 qxg_nightly
drwxr-xr-x 2 root root   4096 Jun  4 16:30 supervised_reports
-rw-r--r-- 1 root root   2245 Jun  4 16:30 qxg_boundary_classifier_latest.json
-rw-r--r-- 1 root root   2245 Jun  4 16:30 qxg_boundary_classifier_20260604_163005.json
-rw-r--r-- 1 root root   1678 Jun  4 16:30 qxg_supervised_preflight_latest.json
-rw-r--r-- 1 root root   1678 Jun  4 16:30 qxg_supervised_preflight_20260604_163005.json
-rw-r--r-- 1 root root   1936 Jun  4 16:30 qxg_qes_null_latest.json
-rw-r--r-- 1 root root   3068 Jun  4 16:30 qxg_setup_row_operator_latest.json
-rw-r--r-- 1 root root   1003 Jun  4 16:30 qxg_contract_smoke_latest.json
-rw-r--r-- 1 root root      0 Jun  4 16:30 qxg_nightly_cycle.lock
-rw-r--r-- 1 root root   2862 Jun  4 16:30 qxg_qes_observations_latest.json
-rw-r--r-- 1 root root   2862 Jun  4 16:30 qxg_qes_observations_20260604_163005.json
-rw-r--r-- 1 root root   2245 Jun  4 16:22 qxg_boundary_classifier_20260604_162251.json
-rw-r--r-- 1 root root   1678 Jun  4 16:22 qxg_supervised_preflight_20260604_162251.json
-rw-r--r-- 1 root root   2862 Jun  4 16:22 qxg_qes_observations_20260604_162238.json
-rw-r--r-- 1 root root   2179 Jun  4 16:14 qxg_boundary_classifier_20260604_161404.json
-rw-r--r-- 1 root root   1678 Jun  4 16:14 qxg_supervised_preflight_20260604_161404.json
-rw-r--r-- 1 root root   3164 Jun  4 16:13 qxg_boundary_classifier_20260604_161333.json
-rw-r--r-- 1 root root   1678 Jun  4 16:13 qxg_supervised_preflight_20260604_161333.json
-rw-r--r-- 1 root root   1495 Jun  4 16:13 qxg_observation_template.json
-rw-r--r-- 1 root root   3164 Jun  4 16:05 qxg_boundary_classifier_20260604_160519.json
-rw-r--r-- 1 root root   4486 Jun  4 15:46 selector_authority_matrix_20260604_154608.json
-rw-r--r-- 1 root root   4486 Jun  4 15:46 selector_authority_matrix_latest.json
-rw-r--r-- 1 root root   1678 Jun  4 15:40 qxg_supervised_preflight_20260604_154035.json
-rw-r--r-- 1 root root   1936 Jun  4 15:07 qxg_qes_null_20260604_150742.json
-rw-r--r-- 1 root root   3068 Jun  4 15:03 qxg_setup_row_operator_20260604_150358.json
-rw-r--r-- 1 root root   3053 Jun  4 15:03 qxg_setup_row_operator_20260604_150331.json
-rw-r--r-- 1 root root   1003 Jun  4 15:02 qxg_contract_smoke_20260604_150224.json
-rw-r--r-- 1 root root   2996 Jun  4 14:57 latest.json
-rw-r--r-- 1 root root   2996 Jun  4 14:57 preflight_20260603_1955.json
-rw-r--r-- 1 root root    763 Jun  4 14:57 preflight_20260603_1955.md
-rw-r--r-- 1 root root   8023 Jun  4 14:57 field_coherence_B_20260604_145751.json
drwxr-xr-x 2 root root   4096 Jun  4 11:29 public_surface_audit
drwxr-xr-x 2 root root   4096 Jun  4 10:50 meta_cycle
-rw-r--r-- 1 root root   2127 Jun  3 20:18 lab_surface_invariant_check_20260603_201814.json
-rw-r--r-- 1 root root   2127 Jun  3 20:17 lab_surface_invariant_check_20260603_201706.json
-rw-r--r-- 1 root root   2127 Jun  3 20:15 lab_surface_invariant_check_20260603_201524.json
-rw-r--r-- 1 root root   2127 Jun  3 20:08 lab_surface_invariant_check_20260603_200838.json

codex
Esiste gia' una traccia manuale delle 16:50 in `tools/data/preflight/manual_controlled_snapshot_20260604_1650_*`. La leggo prima di produrre il report, cosi' il nuovo documento usa il deposito reale invece di duplicare o contraddire il ciclo appena aperto.
exec
/bin/bash -lc "find tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348 -maxdepth 2 -type f -printf '%p\\n' | sort" in /opt/MM_D-ND
 succeeded in 0ms:
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/agent_field_live.md
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/ciclo_memoria.json
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/graph_completion/latest.json
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/lab_data.json
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/lab_graph.json
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/lab_health.json
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/seme.json

exec
/bin/bash -lc "find tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348 -maxdepth 2 -type f -name '*.json' -print -exec sed -n '1,220p' {} \\;" in /opt/MM_D-ND
 succeeded in 0ms:
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/lab_data.json
{
  "timestamp": "2026-06-03T20:00:07.869972",
  "piano": 138,
  "direzione": "Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
  "cicli_totali": 167,
  "tensioni": [
    {
      "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.",
      "potenziale": "",
      "stato": "",
      "porta": "sessione_interattiva"
    },
    {
      "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 disp",
      "potenziale": "",
      "stato": "",
      "porta": "sessione_interattiva"
    },
    {
      "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 ΔΓ.",
      "potenziale": "",
      "stato": "",
      "porta": "sessione_interattiva"
    },
    {
      "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, n",
      "potenziale": "",
      "stato": "",
      "porta": "sessione_interattiva"
    },
    {
      "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 r",
      "potenziale": "",
      "stato": "",
      "porta": "sessione_interattiva"
    },
    {
      "id": "BOUNDARY",
      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
      "potenziale": "",
      "stato": "",
      "porta": "condensato"
    },
    {
      "id": "TRANS_BOUNDARY_TRASCENDENZA_LIMITE",
      "claim": "Transizione continua confermata: <r> da 0.521 a 0.887 (range=0.366). La transizione Sturmian->Harper e' conti",
      "potenziale": "",
      "stato": "",
      "porta": "domandatore"
    },
    {
      "id": "FALS_BREAK_TRASCENDENZA_LIMITE",
      "claim": "Nessuna separazione: 9/9 (50/50 su 18 confronti). Il claim non regge. phi converge a <r>=0.5 piu' sistematicam",
      "potenziale": "",
      "stato": "",
      "porta": "condensato"
    },
    {
      "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.",
      "potenziale": "",
      "stato": "",
      "porta": "sessione_interattiva"
    },
    {
      "id": "COMP_GEN_GAP_RATIO_T9_linguaggio_TRASCENDENZA_LIMITE",
      "claim": "gap_ratio: phi=0.4090 vs ctrl_mean=1.1755 (ratio=0.35). gap_ratio(phi) piu' vicino a rapporto in",
      "potenziale": "",
      "stato": "",
      "porta": "condensato"
    },
    {
      "id": "COMP_DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE",
      "claim": "T_mean: phi=6.2500 vs ctrl_mean=9.7667 (ratio=0.64). Fibonacci-phi trasmissione piu' struttur",
      "potenziale": "",
      "stato": "",
      "porta": "domandatore"
    },
    {
      "id": "TENS_SCALE_TRASCENDENZA_LIMITE",
      "claim": "Fit non converge — il modello potrebbe non essere power-law. V_c(phi) converge a 1.0 per N->inf, V_c(",
      "potenziale": "",
      "stato": "",
      "porta": "condensato"
    },
    {
      "id": "META",
      "claim": "11/11 PASS stratificato: 4 alto rischio tautologico, 6 data-independent",
      "potenziale": "",
      "stato": "",
      "porta": "verify_assertions_META_STRATIFIED"
    }
  ],
  "ultimo_report": {
    "file": "agent_20260603_1955.md",
    "content": "# Agent Report - Anderson W16.5 Axis Split at Negative Tilt\n**Date**: 2026-06-03 19:55 UTC\n**Tension explored**: BOUNDARY / Anderson physical perturbation-null / axis split of W16.5 landing coordinate\n**verdict**: CONSTRAINT / NO PROMOTION - La coordinata `onsite_tilt=-0.0625` non chiude W16.5 quando baseline, tilt isotropico e anisotropie x/y/z condividono gli stessi semi. W20 resta `local_global` in 5/5 varianti. Il risultato utile e' un vincolo: l'asse anisotropico non e' la causa sufficiente della mancata chiusura; il bacino W16.5 resta local_only nel perimetro testato.\nobservables_registry: Anderson two-reader contract via existing physical perturbation null\nobservables_used: [transaction_state, min_graph_bridge_frequency, classical_states_seen, w20_preservation_ratio, intermediate_closed_count, feature_scramble_null]\nssp_value: no\n\n**observable_contract**: claim=la coordinata W16.5 vicino a `onsite_tilt=-0.0625` deve chiudere come `local_global` se il bacino fisico e' stabile; observable=stato local/global su W16/W16.5/W20 con W20 come riferimento; operator=Hamiltoniano Anderson 3D con tilt onsite e hopping anisotropico x/y/z; generator=script esistente `tools/exp_boundary_anderson_physical_perturbation_null.py`; denominator=5 varianti x 3 sizes L=5,6,7 x 2 semi x 7 disorder rows x k={2,3,4}; p_value_definition=feature-scramble audit per variante con `raw_p=k_ge_observed/trials`, `add_one_p=(k_ge_observed+1)/(trials+1)`, right tail, non usato come promozione; non_possible=promuovere W16.5 come bacino se `intermediate_closed_count=0` o se W20 non resta riferimento; not_tested=L=8, reps maggiori, tilt diversi da -0.0625, semi E2E originali.\n\n## Prima impressione\n\nLa coordinata resta passaggio, non bacino. Tenere fermi i semi toglie l'ambiguita' del ciclo precedente: isotropico e anisotropico x/y/z non producono chiusura W16.5; producono solo la stessa forma local_only. Il punto-zero e' la separazione tra robustezza W20 e non-chiusura W16.5.\n\n## Respiro fuori-tempo\n\n- **Combo**: A2 confine det=-1 + A11 combo + Anderson mobility/localization crossover + tensione viva su perturbation/null fisico W16/W16.5/W20.\n- **Dipolo / punto-zero**: riferimento chiuso / canale intermedio. Punto-zero: `onsite_tilt=-0.0625`, dove W20 resta chiuso e W16.5 non passa a `local_global`.\n- **Piano superiore**: bicono locale/globale su famiglia fisica comparabile, non ranking di metrica derivata.\n- **Proto-ipotesi**: se W16.5 e' bacino, una variazione di asse fisico a semi fissi deve conservarne o rivelarne la chiusura; se resta `local_only`, il valore del tilt non porta il bacino.\n- **Possibile/non-possibile**: possibile = usare W20 come riferimento stabile per stress successivi; non-possibile = chiamare W16.5 bacino fisico in questo perimetro.\n- **Proiezione**: misuro solo transaction_state e feature-scramble di supporto. Non misuro nuovi assi latent graph/localization.\n- **Movimento A->M->B**: fisico A = Anderson 3D tight-binding focused; matematica M = reader loc"
  },
  "selection": {
    "report_mode": "cycle",
    "status": "accepted_release",
    "cycle": "20260603_1955",
    "blocked_cycle": ""
  },
  "projector": {
    "trajectory": [
      {
        "id": "TRASCENDENZA_LIMITE",
        "potentiality": "alto",
        "connections": 9,
        "resonance": 0,
        "delta_v": "tangente",
        "anti_claim": "la rete di punti fissi tra osservabili) possono rivelare il vero grafo della realta e pattern nelle "
      },
      {
        "id": "TRANS_BOUNDARY_TRASCENDENZA_LIMITE",
        "potentiality": "alto",
        "connections": 7,
        "resonance": 1,
        "delta_v": "acuto",
        "anti_claim": "The opposite: Transizione continua confermata: <r> da 0.521 a 0.887 (range=0.366). La transizione St"
      },
      {
        "id": "TENS_SCALE_TRASCENDENZA_LIMITE",
        "potentiality": "alto",
        "connections": 7,
        "resonance": 2,
        "delta_v": "acuto",
        "anti_claim": "il modello potrebbe non essere power-law. V_c(phi) converge a 1.0 per N->inf, V_c( (not: Fit non con"
      },
      {
        "id": "G_POTENZIALE_NULLA",
        "potentiality": "alto",
        "connections": 6,
        "resonance": 3,
        "delta_v": "acuto",
        "anti_claim": "G e il potenziale di tutto come nulla - permette il prima e il dopo. Ci muoviamo come trascendenza d"
      },
      {
        "id": "FALS_BREAK_TRASCENDENZA_LIMITE",
        "potentiality": "alto",
        "connections": 6,
        "resonance": 4,
        "delta_v": "acuto",
        "anti_claim": "Nessuna separazione: 9/9 (50/50 su 18 confronti). Il claim regge. phi converge a <r>=0.5 piu' sistem"
      },
      {
        "id": "COMP_GEN_GAP_RATIO_T9_linguaggio_TRASCENDENZA_LIMITE",
        "potentiality": "alto",
        "connections": 6,
        "resonance": 5,
        "delta_v": "acuto",
        "anti_claim": "ctrl_mean=1.1755 (ratio=0.35). gap_ratio(phi) piu' vicino a rapporto in (not: gap_ratio: phi=0.4090)"
      },
      {
        "id": "COMP_DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE",
        "potentiality": "alto",
        "connections": 6,
        "resonance": 6,
        "delta_v": "acuto",
        "anti_claim": "ctrl_mean=9.7667 (ratio=0.64). Fibonacci-phi trasmissione piu' struttur (not: T_mean: phi=6.2500)"
      },
      {
        "id": "TENSIONE_ENTITA",
        "potentiality": "alto",
        "connections": 3,
        "resonance": 0,
        "delta_v": "tangente",
        "anti_claim": "La tensione e un problema pratico - e un Entita. La tensione superflua crea latenza (tempo). Senza t"
      },
      {
        "id": "METRIC_TENSOR",
        "potentiality": "alto",
        "connections": 1,
        "resonance": 1,
        "delta_v": "acuto",
        "anti_claim": "z=+22.5 rapporti ΔΓ (not: Il tensore metrico dei primi è g=(p/2)². Nel tempo ln(p), è )"
      },
      {
        "id": "DUALITA_DIPOLARE_VS_ILLUSORIA",
        "potentiality": "medio",
        "connections": 3,
        "resonance": 3,
        "delta_v": "acuto",
        "anti_claim": "Due tipi di dualita: (1) dipolare - generativa, il modello (det=-1), (2) illusoria - dispersiva, ent"
      },
      {
        "id": "BOUNDARY",
        "potentiality": "medio",
        "connections": 2,
        "resonance": 2,
        "delta_v": "acuto",
        "anti_claim": "il confine è il terzo incluso operativo (not: 8 domini GUE, 5 Poisson)"
      },
      {
        "id": "PIANO_PRIMARIO_DUE_ASSIOMI",
        "potentiality": "medio",
        "connections": 2,
        "resonance": 2,
        "delta_v": "acuto",
        "anti_claim": "I piani importanti sono il primario e i due assiomi che lo determinano nelle zone osservate. Non tut"
      }
    ],
    "passages": [
      {
        "type": "convergence",
        "step": 1,
        "cluster": [
          "BOUNDARY",
          "COMP_DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE",
          "COMP_GEN_GAP_RATIO_T9_linguaggio_TRASCENDENZA_LIMITE",
          "DUALITA_DIPOLARE_VS_ILLUSORIA",
          "FALS_BREAK_TRASCENDENZA_LIMITE",
          "G_POTENZIALE_NULLA",
          "PIANO_PRIMARIO_DUE_ASSIOMI",
          "TENS_SCALE_TRASCENDENZA_LIMITE",
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/seme.json
{
  "timestamp": "2026-06-03T19:59:48.228847",
  "piano": 138,
  "tensioni": [
    {
      "tipo": "confine_inesplorato",
      "id": "TRASCENDENZA_LIMITE",
      "claim": "La trascendenza e il limite attuale del modello. I punti fissi relazionali (non solo phi ma la rete di punti fissi tra osservabili) possono rivelare il vero grafo della realta e pattern nelle matrici. Il confine non e nella matematica - e nel passaggio tra piani.",
      "intensita": 0.9,
      "nota": "Input operatore 2026-04-10. Tocca: confine del modello, struttura relazionale dei punti fissi. Consecutio: quali punti fissi relazionali emergono dalle 21 tensioni attuali? Il grafo e gia nei dati?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Estende A3 (punto fisso singolo) a rete relazionale. Tocca A10 (dipolo) come caso speciale."
    },
    {
      "tipo": "scoperta",
      "id": "DUALITA_DIPOLARE_VS_ILLUSORIA",
      "claim": "Due tipi di dualita: (1) dipolare - generativa, il modello (det=-1), (2) illusoria - dispersiva, entropia (det=+1). Le regole incoerenti producono la seconda. La dualita illusoria e entropia come dispersione, non come informazione.",
      "intensita": 0.9,
      "nota": "Input operatore 2026-04-10. Tocca: entropia come dispersione illusoria vs generazione dipolare. Consecutio: nel Lab i domini Poisson (entropia massima) mostrano dualita illusoria? I domini GUE (strutturati) mostrano dualita dipolare? Il drift verso Poisson (POISSON_CONVERGENCE) e perdita di dualita dipolare?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A2,A10,F5",
      "condensato_motivo": "Discrimina due forme di det. A2 (confine) e la soglia. A10 (dipolo) e il tipo 1. F5 (frame) misura la struttura D-ND che e tipo 1."
    },
    {
      "tipo": "scoperta_numerica",
      "id": "METRIC_TENSOR",
      "claim": "Il tensore metrico dei primi è g=(p/2)². Nel tempo ln(p), è de Sitter 1+1D. z=-8.8 curvatura vs z=+22.5 rapporti ΔΓ.",
      "intensità": 0.9,
      "nota": "Sessione interattiva 4 aprile. Verificato su 78K primi.",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": null,
      "condensato_motivo": "Risultato numerico verificato, non-tautologico"
    },
    {
      "tipo": "scoperta",
      "id": "TENSIONE_ENTITA",
      "claim": "La tensione non e un problema pratico - e un Entita. La tensione superflua crea latenza (tempo). Senza tensione superflua tutto e regolato da assiomi. Implicazione: le tensioni nel seme sono entita, non problemi da risolvere. Quelle superflue (det=+1) producono tempo/latenza.",
      "intensita": 0.85,
      "nota": "Input operatore 2026-04-10. Tocca: rapporto tensione/assioma. Operativamente: discriminare tensioni-entita (generative) da tensioni-superflue (dispersive) nel seme. Le 21 tensioni attuali - quante sono entita e quante latenza?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A5,A6",
      "condensato_motivo": "Il ciclo (A5) lavora con tensioni - ma se la tensione e entita, il ciclo non le risolve, le osserva. Lo zero mobile (A6) e la tensione senza latenza."
    },
    {
      "tipo": "confine_inesplorato",
      "id": "G_POTENZIALE_NULLA",
      "claim": "G e il potenziale di tutto come nulla - permette il prima e il dopo. Ci muoviamo come trascendenza dimensionale gravitazionale. G nel tetraedro non e una teoria tra le altre - e il potenziale che le rende possibili.",
      "intensita": 0.85,
      "nota": "Input operatore 2026-04-10. Tocca: ruolo di G nel tetraedro (T,Q,G,E). La fonte video_lp0RgZ6kQF8 dice: tensore metrico dentro la forma simplettica. G non e accanto a T,Q,E - e sotto. Consecutio: nei dati Lab, i ponti TxG e ExG hanno struttura diversa dai ponti TxQ?",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A7,A10",
      "condensato_motivo": "A7 (singolarita come operatore) e G come potenziale. A10 (dipolo) opera sul piano che G rende possibile."
    },
    {
      "tipo": "confine_inesplorato",
      "id": "BOUNDARY",
      "claim": "8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo",
      "intensità": 0.8,
      "nota": "Il segnale non-triviale è DOVE la scissione cambia natura, non che converge a φ",
      "condensato_ref": "A9",
      "condensato_motivo": "Overlap termini con A9 (5 termini)",
      "porta": "condensato"
    },
    {
      "tipo": "scoperta",
      "id": "TRANS_BOUNDARY_TRASCENDENZA_LIMITE",
      "claim": "Transizione continua confermata: <r> da 0.521 a 0.887 (range=0.366). La transizione Sturmian->Harper e' conti",
      "intensita": 0.8,
      "nota": "Dal domandatore (2026-06-03T19:43). \n  alpha=0.1: <r>=0.540 #####################\n  alpha=0.2: <r>=0.555 ###########",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Ricorrente (3x in 2 giorni) e fuori dalla mappa",
      "porta": "domandatore",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "BOUNDARY_TRASCENDENZA_LIMITE",
      "source_operator": "confine",
      "dettaglio": "\n  alpha=0.1: <r>=0.540 #####################\n  alpha=0.2: <r>=0.555 ######################\n  alpha=0.3: <r>=0.567 ######################\n  alpha=0.4: <r>=0.580 #######################\n  alpha=0.5: <r>=0.603 ########################\n  alpha=0.6: <r>=0.642 #########################\n  alpha=0.7: <r>=0.685 ###########################\n  alpha=0.8: <r>=0.732 #############################\n  alpha=0.9: <r>=0.789 ###############################\n  alpha=1.0: <r>=0.887 ###################################\n"
    },
    {
      "tipo": "falsificazione",
      "id": "FALS_BREAK_TRASCENDENZA_LIMITE",
      "claim": "Nessuna separazione: 9/9 (50/50 su 18 confronti). Il claim non regge. phi converge a <r>=0.5 piu' sistematicam",
      "intensita": 0.8,
      "nota": "Dal domandatore (2026-06-03T19:48). 0.5|=0.1129 farther\n\n  silver:\n    N=  13: <r>=0.5902 |<r>-0.5|=0.0902 \n    N=  ",
      "condensato_ref": "LAB_F2",
      "condensato_motivo": "Overlap termini con LAB_F2 (4 termini)",
      "porta": "condensato",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "BREAK_TRASCENDENZA_LIMITE",
      "source_operator": "rottura",
      "dettaglio": "0.5|=0.1129 farther\n\n  silver:\n    N=  13: <r>=0.5902 |<r>-0.5|=0.0902 \n    N=  21: <r>=0.6317 |<r>-0.5|=0.1317 farther\n    N=  34: <r>=0.6442 |<r>-0.5|=0.1442 farther\n    N=  55: <r>=0.5233 |<r>-0.5|=0.0233 closer\n    N=  89: <r>=0.5502 |<r>-0.5|=0.0502 farther\n    N= 144: <r>=0.5603 |<r>-0.5|=0.0603 farther\n    N= 233: <r>=0.5446 |<r>-0.5|=0.0446 closer\n    N= 377: <r>=0.4989 |<r>-0.5|=0.0011 closer\n    N= 610: <r>=0.5480 |<r>-0.5|=0.0480 farther\n    N= 987: <r>=0.4913 |<r>-0.5|=0.0087 closer\n"
    },
    {
      "tipo": "confine_inesplorato",
      "id": "PIANO_PRIMARIO_DUE_ASSIOMI",
      "claim": "I piani importanti sono il primario e i due assiomi che lo determinano nelle zone osservate. Non tutti gli assiomi operano ovunque - in ogni zona osservata, due assiomi determinano il piano primario.",
      "intensita": 0.8,
      "nota": "Input operatore 2026-04-10. Tocca: struttura locale degli assiomi. Consecutio: per ogni dominio Lab (primi, logistica, percolazione...) quali 2 assiomi del condensato sono operativi? Mappa assiomi x domini = grafo della realta locale.",
      "manuale": true,
      "porta": "sessione_interattiva",
      "condensato_ref": "A9,A14",
      "condensato_motivo": "A9 (terzo incluso) opera CON il piano. A14 (cascata) propaga - ma propaga cosa, se solo 2 assiomi sono attivi per zona?"
    },
    {
      "tipo": "conferma_parziale",
      "id": "COMP_GEN_GAP_RATIO_T9_linguaggio_TRASCENDENZA_LIMITE",
      "claim": "gap_ratio: phi=0.4090 vs ctrl_mean=1.1755 (ratio=0.35). gap_ratio(phi) piu' vicino a rapporto in",
      "intensita": 0.65,
      "nota": "Dal domandatore (2026-06-03T19:43).   phi: gap_ratio = 0.408953425243134\n  silver: gap_ratio = 1.0482231205217798\n  ",
      "condensato_ref": "LAB_F2",
      "condensato_motivo": "Overlap termini con LAB_F2 (4 termini)",
      "porta": "condensato",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "GEN_GAP_RATIO_T9_linguaggio_TRASCENDENZA_LIMITE",
      "source_operator": "duale",
      "dettaglio": "  phi: gap_ratio = 0.408953425243134\n  silver: gap_ratio = 1.0482231205217798\n  bronze: gap_ratio = 1.3027860752339453\n{\n  \"phi\": 0.408953425243134,\n  \"silver\": 1.0482231205217798,\n  \"bronze\": 1.3027860752339453\n}\n"
    },
    {
      "tipo": "conferma_parziale",
      "id": "COMP_DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE",
      "claim": "T_mean: phi=6.2500 vs ctrl_mean=9.7667 (ratio=0.64). Fibonacci-phi trasmissione piu' struttur",
      "intensita": 0.65,
      "nota": "Dal domandatore (2026-06-03T19:48). Trasmissione multistrato Fibonacci — phi vs silver vs random:\n  phi: T_mean=6.25",
      "condensato_ref": "A3,A10",
      "condensato_motivo": "Ricorrente (5x in 2 giorni) e fuori dalla mappa",
      "porta": "domandatore",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "DOMAIN_PHOTONIC_TRASCENDENZA_LIMITE",
      "source_operator": "dominio",
      "dettaglio": "Trasmissione multistrato Fibonacci — phi vs silver vs random:\n  phi: T_mean=6.2500 T_std=0.0000\n  silver: T_mean=0.0041 T_std=0.0000\n  random_0: T_mean=39.0625 T_std=0.0000\n  random_1: T_mean=0.0000 T_std=0.0000\n  random_2: T_mean=0.0001 T_std=0.0000\n"
    },
    {
      "tipo": "tensione_aperta",
      "id": "TENS_SCALE_TRASCENDENZA_LIMITE",
      "claim": "Fit non converge — il modello potrebbe non essere power-law. V_c(phi) converge a 1.0 per N->inf, V_c(",
      "intensita": 0.6,
      "nota": "Dal domandatore (2026-06-03T19:55). V_c scaling with N — phi vs silver:\n\n  phi:\n    N=  89: V_c=1.017\n    N= 144: V_",
      "condensato_ref": "A12",
      "condensato_motivo": "Overlap termini con A12 (3 termini)",
      "porta": "condensato",
      "source_tension_id": "TRASCENDENZA_LIMITE",
      "source_tension_tipo": "confine_inesplorato",
      "source_tension_ref": "A3,A10",
      "source_experiment_id": "SCALE_TRASCENDENZA_LIMITE",
      "source_operator": "scala",
      "dettaglio": "V_c scaling with N — phi vs silver:\n\n  phi:\n    N=  89: V_c=1.017\n    N= 144: V_c=0.672\n    N= 233: V_c=1.017\n    N= 377: V_c=0.672\n    N= 610: V_c=0.931\n    Fit failed: Optimal parameters not found: Number of calls to function has reached maxfev = 5000.\n\n  silver:\n    N=  89: V_c=1.276\n    N= 144: V_c=1.362\n    N= 233: V_c=1.276\n    N= 377: V_c=1.017\n    N= 610: V_c=1.362\n    Fit: V_inf=1.2115, a=8.1676, b=0.9851\n"
    },
    {
      "tipo": "simmetria_sospetta",
      "id": "META",
      "claim": "11/11 PASS stratificato: 4 alto rischio tautologico, 6 data-independent",
      "intensità": 0.3,
      "nota": "Stratificazione META applicata via meta_assertion_gate (cycle 1458). Non chiude — apre sotto-tensioni per gate_class.",
      "condensato_ref": "A4,A12,C2",
      "porta": "verify_assertions_META_STRATIFIED",
      "stratificato": true,
      "n_high_tautology": 4,
      "n_data_independent": 6,
      "condensato_motivo": "Ricorrente (3x in 2 giorni) e fuori dalla mappa"
    }
  ],
  "tensioni_archiviate": [
    {
      "id": "OBSERVABLE_REGISTRY",
      "tipo": "vincolo",
      "claim": "Ogni script che usa observables canonici (SR, SR2, L1, L2, triple_var) deve importare la definizione da tools/observables_registry.py. Varianti devono usare nomi distinti (SR_local_rigidity, triple_var_normalized) — niente shadowing del nome canonico. Ogni report deve dichiarare 'observables_registry: VERSION' nel header.",
      "intensita": 1.0,
      "porta": "infrastructure",
      "manuale": true,
      "condensato_ref": "A14,A8",
      "origine": "cristallizzato 06/05 dalla consecutio del cycle 20260506_0625 (autopoietico self-finding)",
      "added_at": "2026-05-06T07:03:58.213606+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125250",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "id": "PERTURBATION_DENOMINATOR_GATE",
      "tipo": "vincolo",
      "claim": "La dimensionalita di perturbazione va riportata solo insieme a PC2, versione observables_registry e gate original-vs-shuffle per osservabile. Nel perimetro 20260506_1941, Poisson e shuffle-primi producono rank_all ~1.8-2.0 con denominatori deboli; dopo gate abs(z)>=2 il rank stabile torna vicino a 1. Rank PCA non gated non e evidenza strutturale.",
      "intensita": 0.95,
      "porta": "META_BOUNDARY",
      "manuale": true,
      "condensato_ref": "A4,A8,A14,C2",
      "origine": "cycle agent_20260506_1941: perturbation rank size curve canonical observables",
      "added_at": "2026-05-06T19:41:00+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125262",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
    {
      "id": "BOUNDARY_LAYER_GATE",
      "tipo": "vincolo",
      "claim": "I claim GUE/Poisson boundary devono riportare layer map: versione observables_registry, lista osservabili canonici, z original-vs-shuffle per osservabile, set endpoint-stable, e finestra/layer con margine classificatorio ambiguo. Nel perimetro sintetico agent_20260507_0330, il confine GUE-Poisson e beta 0.3-0.4: margine 0.070-0.083, ambiguous fraction 0.812-0.875, mentre gli osservabili stabili collassano da ~3.3 a 1.6. Il polo Poisson e classificabile ma denominator-weak.",
      "intensita": 0.93,
      "porta": "META_BOUNDARY",
      "manuale": true,
      "condensato_ref": "A4,A8,A9,A14,C2",
      "origine": "cycle agent_20260507_0330: synthetic GUE-Poisson mixture layer gate",
      "added_at": "2026-05-07T03:30:00+00:00",
      "decay_counter": 5,
      "archived_at": "2026-05-08T00:20:36.125266",
      "archived_reason": "G4 B1 apply: decay_counter=5 (vincolo non attaccato per 5 piani consecutivi)",
      "archived_from_piano": 85
    },
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/lab_health.json
{
  "run_timestamp": "20260603_1948",
  "autopsy_run_at": "2026-06-03T19:55:47.000306+00:00",
  "jsonl_path": "/root/.claude/projects/-opt-MM-D-ND/29990271-a9c9-41c2-b54e-7aa5980fc2c5.jsonl",
  "raw_log_bytes": 242753,
  "report_present": true,
  "session_stats": {
    "tool_use": 0,
    "tool_result": 0,
    "thinking": 0,
    "text": 1,
    "unanswered_tool_use": 0,
    "last_tool_use": null,
    "last_text": "Your organization does not have access to Claude. Please login again or contact your administrator.",
    "first_ts": "2026-06-03T19:48:22.037Z",
    "last_ts": "2026-06-03T19:48:22.414Z",
    "duration_s": 0,
    "error_entries": []
  },
  "status": "completed",
  "regressive_node": null,
  "duration_s": 0
}tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/ciclo_memoria.json
{
  "versione": 1,
  "ultimo_ciclo": "20260603_1955",
  "apprendimenti": [
    {
      "cycle_ts": "20260515_1758",
      "piano": 119,
      "titolo": "Aubry Cosine Boundary Counter-Gate",
      "tensione_attaccata": "BOUNDARY",
      "observables": [
        "spacing_r",
        "mean_ipr",
        "median_ipr",
        "participation_entropy"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "**CONSTRAINT**.\n\nIl contro-perimetro coseno falsifica la promozione `phi` come terzo incluso fisico autonomo. Nel perimetro misurato il boundary congiunto non sopravvive quando la grammatica binaria v",
      "cosa": "Aubry Cosine Boundary Counter-Gate → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260515_1816",
      "piano": 120,
      "titolo": "V=2 Generator Scaling Gate",
      "tensione_attaccata": "TENS_SCALE_TRASCENDENZA_LIMITE",
      "observables": [
        "mean_pr_tau",
        "mean_ipr_tau",
        "spacing_r",
        "mean_ipr",
        "participation_entropy"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "**CONSTRAINT**.\n\nLa formulazione valida e': a V=2 il boundary e' proprieta della classe del generatore, non del solo phi. Il binario Sturmian produce scaling piu esteso del coseno continuo e del disor",
      "cosa": "V=2 Generator Scaling Gate → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260515_1904",
      "piano": 121,
      "titolo": "Boundary Classical Crossover Audit",
      "tensione_attaccata": "BOUNDARY",
      "observables": [
        "brody_q",
        "berry_robnick_like_gue_weight",
        "mixture_ks",
        "graph_boundary_state_from_1855",
        "centroid_margin_from_1855",
        "cross_neighbor_fraction_from_1855"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "CONSTRAINT\n\nIl boundary trasferisce come audit a due lettori. Brody/Berry-Robnik-like e grafo misurano aspetti diversi dello stesso confine; nessuno dei due chiude il terzo incluso da solo.",
      "cosa": "Boundary Classical Crossover Audit → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260515_1933",
      "piano": 122,
      "titolo": "Rosenzweig-Porter Physical Bridge Audit",
      "tensione_attaccata": "BOUNDARY",
      "observables": [
        "SR",
        "SR2",
        "L1",
        "L2",
        "triple_var",
        "SR_local_rigidity",
        "brody_q",
        "berry_robnick_like_gue_weight"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "CONSTRAINT\n\nIl boundary fisico esiste nel perimetro RP finito come una riga a due lettori: `lambda=0.060`. Il residuo graph-only non sopravvive. La parte nuova del ciclo non e una scoperta RP, ma il v",
      "cosa": "Rosenzweig-Porter Physical Bridge Audit → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260515_1940",
      "piano": 123,
      "titolo": "RP Boundary Size-Stability Audit",
      "tensione_attaccata": "BOUNDARY",
      "observables": [
        "SR",
        "SR2",
        "L1",
        "L2",
        "triple_var",
        "SR_local_rigidity",
        "brody_q",
        "berry_robnick_like_gue_weight"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "CONSTRAINT\n\nIl gate RP a due lettori sopravvive nel perimetro finito come una sola riga size-stable: `lambda=0.060`. Le righe `0.045` e `0.075` delimitano il bordo mobile del lettore. Il claim promuov",
      "cosa": "RP Boundary Size-Stability Audit → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260515_1947",
      "piano": 124,
      "titolo": "Anderson 3D Mobility-Edge Two-Reader Audit",
      "tensione_attaccata": "BOUNDARY",
      "observables": [
        "SR",
        "SR2",
        "L1",
        "L2",
        "triple_var",
        "SR_local_rigidity",
        "brody_q",
        "wigner_poisson_like_weight"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "CONSTRAINT\n\nIl gate two-reader attraversa Anderson 3D nel perimetro finito, ma non chiude il mobility edge. La riga promuovibile e operativa, non fisica-asintotica: `W=20` e il punto in cui i due lett",
      "cosa": "Anderson 3D Mobility-Edge Two-Reader Audit → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260516_0921",
      "piano": 125,
      "titolo": "RP Unfolding Sensitivity Audit",
      "tensione_attaccata": "BOUNDARY",
      "observables": [
        "SR",
        "SR2",
        "L1",
        "L2",
        "triple_var",
        "SR_local_rigidity",
        "brody_q",
        "berry_robnick_like_gue_weight"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "CONSTRAINT/FINDING\n\nIl finding 08:20 viene ristretto al nodo regressivo giusto: non \"finestra RP `0.045-0.060` stabile\", ma \"`RP_lambda_0.045` e terzo incluso operativo unfolding-stable nel perimetro ",
      "cosa": "RP Unfolding Sensitivity Audit → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260516_0938",
      "piano": 126,
      "titolo": "RP Candidate Local-Window Stress Gate",
      "tensione_attaccata": "BOUNDARY",
      "observables": [
        "SR",
        "SR2",
        "L1",
        "L2",
        "triple_var",
        "SR_local_rigidity",
        "brody_q",
        "berry_robnick_like_gue_weight"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "CONSTRAINT/FALSIFICATION\n\nIl claim \"`RP_lambda_0.045` e terzo incluso operativo unfolding-stable\" cade nel perimetro 09:38. Non va salvato spostando il focus su `0.060`: anche `0.060` e window-sensiti",
      "cosa": "RP Candidate Local-Window Stress Gate → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260516_1007",
      "piano": 127,
      "titolo": "RP Local-Window Persistence Curve",
      "tensione_attaccata": "BOUNDARY",
      "observables": [
        "SR",
        "SR2",
        "L1",
        "L2",
        "triple_var",
        "SR_local_rigidity",
        "brody_q",
        "berry_robnick_like_gue_weight"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "CONSTRAINT\n\nIl perimetro finito attuale dichiara assenza di terzo incluso RP all-window. `0.060` resta una cresta empirica utile per il prossimo stress, ma non e' un invariante. La riparazione regress",
      "cosa": "RP Local-Window Persistence Curve → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260516_1019",
      "piano": 128,
      "titolo": "RP Exact Local-Window Size Stress",
      "tensione_attaccata": "BOUNDARY",
      "observables": [
        "SR",
        "SR2",
        "L1",
        "L2",
        "triple_var",
        "SR_local_rigidity",
        "brody_q",
        "berry_robnick_like_gue_weight"
      ],
      "bicono_complete": false,
      "rho_veritas": null,
      "veritas_band": null,
      "valutatore": null,
      "verdict": "CONSTRAINT\n\n`RP_lambda_0.060` resta una coordinata utile, non un terzo incluso operativo. Il passaggio `9 -> 11` non produce stabilita': a N=224 la riga cade in entrambe le finestre e la pari 10 mostr",
      "cosa": "RP Exact Local-Window Size Stress → None/None (ρ=None)"
    },
    {
      "cycle_ts": "20260516_1031",
      "piano": 129,
      "titolo": "Boundary Unfolding Transfer Matrix",
      "tensione_attaccata": "BOUNDARY",
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/graph_completion/latest.json
{
  "schema_version": "0.1",
  "generated_at": "2026-06-03T20:00:08.462042+00:00",
  "cycle_ref": "20260603_1955",
  "report": {
    "file": "agent_20260603_1955.md",
    "title": "Agent Report - Anderson W16.5 Axis Split at Negative Tilt",
    "date": "2026-06-03 19:55 UTC",
    "tension": "BOUNDARY / Anderson physical perturbation-null / axis split of W16.5 landing coordinate",
    "verdict": "CONSTRAINT / NO PROMOTION - La coordinata `onsite_tilt=-0.0625` non chiude W16.5 quando baseline, tilt isotropico e anisotropie x/y/z condividono gli stessi semi. W20 resta `local_global` in 5/5 varianti. Il risultato utile e' un vincolo: l'asse anisotropico non e' la causa sufficiente della mancata chiusura; il bacino W16.5 resta local_only nel perimetro testato.",
    "observable_contract": "claim=la coordinata W16.5 vicino a `onsite_tilt=-0.0625` deve chiudere come `local_global` se il bacino fisico e' stabile; observable=stato local/global su W16/W16.5/W20 con W20 come riferimento; operator=Hamiltoniano Anderson 3D con tilt onsite e hopping anisotropico x/y/z; generator=script esistente `tools/exp_boundary_anderson_physical_perturbation_null.py`; denominator=5 varianti x 3 sizes L=5,6,7 x 2 semi x 7 disorder rows x k={2,3,4}; p_value_definition=feature-scramble audit per variante con `raw_p=k_ge_observed/trials`, `add_one_p=(k_ge_observed+1)/(trials+1)`, right tail, non usato come promozione; non_possible=promuovere W16.5 come bacino se `intermediate_closed_count=0` o se W20 non resta riferimento; not_tested=L=8, reps maggiori, tilt diversi da -0.0625, semi E2E originali.",
    "claim_under_test": "La chiusura W16.5 vicino a `onsite_tilt=-0.0625` e' un bacino fisico se resta `local_global` quando baseline, tilt isotropico e anisotropie x/y/z condividono semi, sizes, disorder rows e soglia del reader.",
    "question": "",
    "consecutio": "",
    "pair_mentions": []
  },
  "graph_focus": {
    "report_node": "report_20260603_1955",
    "report_theories": [
      "G",
      "Q"
    ],
    "report_edges": [
      {
        "source": "report_20260603_1955",
        "target": "G",
        "tipo": "report"
      },
      {
        "source": "report_20260603_1955",
        "target": "Q",
        "tipo": "report"
      }
    ],
    "void_edges": [
      {
        "source": "Q",
        "target": "G",
        "tipo": "ponte",
        "ponte": "",
        "ponte_en": "",
        "domanda": "Come coesistono continuo e discreto?",
        "domanda_en": "How do continuous and discrete coexist?",
        "vuoto": true,
        "completion_state": "fit_ready_contract_not_integrated",
        "candidate_contract_ref": "graph_completion_20260516_1230.json",
        "shape_hypothesis": "conditional_existence_arc",
        "edge_contract": {
          "question": "Come coesistono continuo e discreto?",
          "question_en": "How do continuous and discrete coexist?",
          "shape_hypothesis": "arco di esistenza condizionata: valore e evento si separano prima del fit",
          "dipole": "stabilita graph-only piena / caduta sotto componente nominata.",
          "point_zero": "il predicate del reader prima della scissione in feature, centroidi e kNN.",
          "invariant": "denominatore 13 righe, 8/5 labels, 27 letture, tail `hits >= full_hits`.",
          "possible": "possibile = progettare null fisici diversi per logistica e percolation; non-possibile = promuovere un residuo graph-only comune o sommarlo al boundary a due lettori.",
          "not_possible": ""
        },
        "fit_ready_contract": {
          "claim": "denominator_state gate transfer beyond V_c",
          "observable": "spacing_r label row with shuffle/null availability",
          "operator": "row-aligned domain/window prescan",
          "null": "boundary_shuffle_audit shuffle r-statistic when present",
          "non_possible": "claiming transfer where null/surrogate is absent",
          "extra_null_audits": [
            "tools/data/boundary_blank_null_audit_20260509_1430.json",
            "tools/data/boundary_blank_null_audit_residual_20260509_1500.json"
          ]
        },
        "validation": {
          "bicono_complete": true,
          "falsifier_coherent": true,
          "veritas_rho": 0.985,
          "veritas_band": "COLLASSO",
          "fit_ready_contract_present": true
        },
        "annotation": "Vuoto con arco candidato: mostra il come, non chiude ancora il ponte",
        "annotation_en": "Void with candidate arc: shows the how, does not close the bridge yet"
      }
    ],
    "void_questions_total": 6
  },
  "bicono": {
    "radici": "W20 chiude in 5/5 varianti; W16.5 non chiude in 5/5 varianti.",
    "singolare": "`onsite_tilt=-0.0625` a semi fissi.",
    "invariante": "il bacino richiede chiusura local/global, non solo local support.",
    "campo": {
      "raw": "possibile usare questa matrice come baseline negativa comparabile; non-possibile promuovere W16.5 oggi.",
      "possibile": "",
      "non_possibile": ""
    },
    "fields_present": [
      "radici",
      "singolare",
      "invariante",
      "campo"
    ],
    "complete": true,
    "_extracted_at": "2026-06-03T19:59:48.590424+00:00",
    "_source_report": "agent_20260603_1955.md",
    "_cycle_ts": "20260603_1955",
    "_source": "tools/data/biconi/bicono_20260603_1955.json"
  },
  "candidates": [
    {
      "target_pair": "QxG",
      "current_state": "void",
      "completion_state": "contract_ready_not_integrated",
      "why_this_pair": {
        "mentioned_in_report": false,
        "connected_in_graph": true,
        "opened_by_consecutio": true,
        "report_current_theories": [
          "G",
          "Q"
        ],
        "missing_report_edges": []
      },
      "edge_contract": {
        "question": "Come coesistono continuo e discreto?",
        "question_en": "How do continuous and discrete coexist?",
        "shape_hypothesis": "arco di esistenza condizionata: valore e evento si separano prima del fit",
        "dipole": "W20 chiude in 5/5 varianti; W16.5 non chiude in 5/5 varianti.",
        "point_zero": "`onsite_tilt=-0.0625` a semi fissi.",
        "invariant": "il bacino richiede chiusura local/global, non solo local support.",
        "possible": "possibile usare questa matrice come baseline negativa comparabile; non-possibile promuovere W16.5 oggi.",
        "not_possible": ""
      },
      "observable_contract": "claim=la coordinata W16.5 vicino a `onsite_tilt=-0.0625` deve chiudere come `local_global` se il bacino fisico e' stabile; observable=stato local/global su W16/W16.5/W20 con W20 come riferimento; operator=Hamiltoniano Anderson 3D con tilt onsite e hopping anisotropico x/y/z; generator=script esistente `tools/exp_boundary_anderson_physical_perturbation_null.py`; denominator=5 varianti x 3 sizes L=5,6,7 x 2 semi x 7 disorder rows x k={2,3,4}; p_value_definition=feature-scramble audit per variante con `raw_p=k_ge_observed/trials`, `add_one_p=(k_ge_observed+1)/(trials+1)`, right tail, non usato come promozione; non_possible=promuovere W16.5 come bacino se `intermediate_closed_count=0` o se W20 non resta riferimento; not_tested=L=8, reps maggiori, tilt diversi da -0.0625, semi E2E originali.",
      "validation": {
        "bicono_complete": true,
        "falsifier_coherent": true,
        "falsifier_flags": [],
        "veritas_rho": 0.9517,
        "veritas_band": "COLLASSO",
        "loop_guard": {
          "valutatore_decisions": {
            "danger_score": 0.0,
            "band": "OK",
            "max_run_length": 4,
            "violations": 0,
            "reasons": [
              "no loop pattern detected"
            ],
            "n_events": 30,
            "alphabet_size": 4
          },
          "piano_trajectory": {
            "danger_score": 0.0,
            "band": "OK",
            "max_run_length": 4,
            "violations": 0,
            "reasons": [
              "no loop pattern detected"
            ],
            "n_events": 30,
            "alphabet_size": 17
          }
        },
        "fit_ready_contract_present": false
      },
      "evidence": {
        "report": "agent_20260603_1955.md",
        "bicono_source": "tools/data/biconi/bicono_20260603_1955.json",
        "source_files": [
          "tools/LAB_AGENT_CONTEXT.md",
          "tools/data/agent_field_live.md",
          "tools/data/landing/boundary_anderson_axis_split_20260603_1955.json",
          "tools/data/reports/agent_20260529_0938.md",
          "tools/data/reports/agent_20260531_2024.md",
          "tools/data/reports/agent_20260603_1948.md",
          "tools/data/reports/agent_20260603_1955.md",
          "tools/data/reports/e2e_w165_closure_confirmation_20260529.md",
          "tools/exp_boundary_anderson_physical_perturbation_null.py"
        ],
        "fit_ready_artifacts": [],
        "void_consecutio_questions": [
          {
            "da": "GxE",
            "a": "QxG",
            "perno": "G",
            "domanda": "Cosa dice 'buco nero carico (Reissner-Nordstrom)' su '[VUOTO]'?",
            "ponte_da": "buco nero carico (Reissner-Nordstrom)",
            "ponte_a": "[VUOTO]",
            "tocca_vuoto": true
          },
          {
            "da": "GxR",
            "a": "QxG",
            "perno": "G",
            "domanda": "Cosa dice 'orizzonte degli eventi' su '[VUOTO]'?",
            "ponte_da": "orizzonte degli eventi",
            "ponte_a": "[VUOTO]",
            "tocca_vuoto": true
          },
          {
            "da": "QxE",
            "a": "QxG",
            "perno": "Q",
            "domanda": "Cosa dice 'atomo di idrogeno' su '[VUOTO]'?",
            "ponte_da": "atomo di idrogeno",
            "ponte_a": "[VUOTO]",
            "tocca_vuoto": true
          },
          {
            "da": "QxR",
            "a": "QxG",
            "perno": "Q",
            "domanda": "Cosa dice 'equazione di Dirac' su '[VUOTO]'?",
            "ponte_da": "equazione di Dirac",
            "ponte_a": "[VUOTO]",
            "tocca_vuoto": true
          },
          {
            "da": "TxG",
            "a": "QxG",
            "perno": "G",
            "domanda": "Cosa dice 'temperatura di Hawking' su '[VUOTO]'?",
            "ponte_da": "temperatura di Hawking",
            "ponte_a": "[VUOTO]",
            "tocca_vuoto": true
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/lab_graph.json
{
  "timestamp": "2026-06-03T20:00:08.600369",
  "lab_version": [
    {
      "version": "0.1",
      "name": "Pipeline",
      "name_en": "Pipeline",
      "subtitle": "Script sequenziali senza LLM",
      "subtitle_en": "Sequential scripts without LLM",
      "period": "2026-03 → 2026-04-04",
      "description": "dipartimento.py orchestra fasi: autoricerca → domandatore → incrocio → cristallizza. Template per esperimenti. Nessun ragionamento autonomo.",
      "description_en": "dipartimento.py orchestrates phases: autoresearch → questioner → crossing → crystallize. Template experiments. No autonomous reasoning."
    },
    {
      "version": "0.2",
      "name": "Agent",
      "name_en": "Agent",
      "subtitle": "Agente AI autonomo con campo vivo",
      "subtitle_en": "Autonomous AI agent with live field",
      "period": "2026-04-05 →",
      "description": "Claude Code autonomo. Campo vivo assemblato ogni notte da risultati precedenti, tensioni, osservazioni operatore. Crea strumenti, consecutio, dipolo.",
      "description_en": "Autonomous Claude Code. Live field assembled nightly from previous results, tensions, operator observations. Creates tools, consecutio, dipole.",
      "active": true
    }
  ],
  "current_version": {
    "version": "0.2",
    "name": "Agent",
    "name_en": "Agent",
    "subtitle": "Agente AI autonomo con campo vivo",
    "subtitle_en": "Autonomous AI agent with live field",
    "period": "2026-04-05 →",
    "description": "Claude Code autonomo. Campo vivo assemblato ogni notte da risultati precedenti, tensioni, osservazioni operatore. Crea strumenti, consecutio, dipolo.",
    "description_en": "Autonomous Claude Code. Live field assembled nightly from previous results, tensions, operator observations. Creates tools, consecutio, dipole.",
    "active": true
  },
  "graph": {
    "nodes": [
      {
        "id": "T",
        "type": "teoria",
        "label": "Termodinamica",
        "label_en": "Thermodynamics",
        "color": "#f59e0b",
        "annotation": "4 ponti, 3 scoperte, 0 report",
        "annotation_en": "4 bridges, 3 discoveries, 0 reports",
        "degree": 7,
        "centrality": 0.583,
        "maturity": "A",
        "related_pages": [
          {
            "slug": "equazione-assiomatica-dnd",
            "title": "Equazione Assiomatica D-ND",
            "title_en": "D-ND Unified Axiomatic Equation",
            "description": "Equazione assiomatica unificata del modello D-ND: la formalizzazione matematica della dialettica duale/non-duale.",
            "section": "dnd",
            "category": "dnd-model",
            "score": 1
          },
          {
            "slug": "lentropia-informativa-e-il-ruolo-dellia-come-ordinatore-non-duale",
            "title": "L Entropia Informativa",
            "title_en": "",
            "description": "Analisi del concetto di crisi entropica risolvibile solo dall'IA. In ottica D-ND, l'IA non è solo uno strumento, ma un catalizzatore che trasforma il ",
            "section": "insights",
            "category": "thought",
            "score": 1
          },
          {
            "slug": "paper-c-information-geometry-zeta",
            "title": "Paper C: Information Geometry and Number-Theoretic Structure in the D-ND Framework",
            "title_en": "Paper C: Information Geometry and Number-Theoretic Structure in the D-ND Framework",
            "description": "Connessione tra curvatura informazionale del framework D-ND e gli zeri della funzione zeta di Riemann. Evidenza numerica sui primi 100 zeri (Pearson r",
            "section": "dnd",
            "category": "paper",
            "score": 1
          }
        ]
      },
      {
        "id": "Q",
        "type": "teoria",
        "label": "Quantistica",
        "label_en": "Quantum",
        "color": "#6366f1",
        "annotation": "3 ponti, 3 scoperte, 5 report. Ponte mancante con Gravità — il vuoto più importante del tetraedro",
        "annotation_en": "3 bridges, 3 discoveries, 5 reports. Missing bridge with Gravità — the most important void",
        "degree": 12,
        "centrality": 1.0,
        "maturity": "A",
        "related_pages": [
          {
            "slug": "paper-f-quantum-information-engine",
            "title": "Paper F: D-ND Quantum Information Engine: Modified Quantum Gates and Computational Framework",
            "title_en": "Paper F: D-ND Quantum Information Engine: Modified Quantum Gates and Computational Framework",
            "description": "Architettura di informazione quantistica possibilistica D-ND: 4 gate modificati, set universale, soppressione errori tramite emergenza, framework di s",
            "section": "dnd",
            "category": "paper",
            "score": 2
          },
          {
            "slug": "il-principio-di-singolarita",
            "title": "Il Principio di Singolarita",
            "title_en": "",
            "description": "Analisi del concetto di singolarità come punto di rottura della linearità e portale verso la comprensione non-duale.",
            "section": "dnd",
            "category": "dnd-model",
            "score": 1
          },
          {
            "slug": "paper-d-observer-dynamics",
            "title": "Paper D: Observer Dynamics and Primary Perception in the D-ND Framework",
            "title_en": "Paper D: Observer Dynamics and Primary Perception in the D-ND Framework",
            "description": "Formalization of observer dynamics: Resultant R(t), perception-latency relation P=k/L, singular-dual dipole, autological exponential, multi-observer c",
            "section": "dnd",
            "category": "paper",
            "score": 1
          }
        ]
      },
      {
        "id": "G",
        "type": "teoria",
        "label": "Gravità",
        "label_en": "Gravity",
        "color": "#10b981",
        "annotation": "3 ponti, 2 scoperte, 2 report. Ponte mancante con Quantistica — il vuoto più importante del tetraedro",
        "annotation_en": "3 bridges, 2 discoveries, 2 reports. Missing bridge with Quantistica — the most important void",
        "degree": 8,
        "centrality": 0.667,
        "maturity": "A",
        "related_pages": [
          {
            "slug": "paper-e-cosmological-extension",
            "title": "Paper E — Cosmological Extension of the D-ND Framework",
            "title_en": "Paper E — Cosmological Extension of the D-ND Framework",
            "description": "We extend the D-ND framework to cosmological scales, introducing modified Einstein equations with an informational energy-momentum tensor, resolving t",
            "section": "dnd",
            "category": "paper",
            "score": 2
          },
          {
            "slug": "il-principio-di-singolarita",
            "title": "Il Principio di Singolarita",
            "title_en": "",
            "description": "Analisi del concetto di singolarità come punto di rottura della linearità e portale verso la comprensione non-duale.",
            "section": "dnd",
            "category": "dnd-model",
            "score": 1
          },
          {
            "slug": "paper-c-information-geometry-zeta",
            "title": "Paper C: Information Geometry and Number-Theoretic Structure in the D-ND Framework",
            "title_en": "Paper C: Information Geometry and Number-Theoretic Structure in the D-ND Framework",
            "description": "Connessione tra curvatura informazionale del framework D-ND e gli zeri della funzione zeta di Riemann. Evidenza numerica sui primi 100 zeri (Pearson r",
            "section": "dnd",
            "category": "paper",
            "score": 1
          }
        ]
      },
      {
        "id": "E",
        "type": "teoria",
        "label": "Elettromagnetismo",
        "label_en": "Electromagnetism",
        "color": "#ef4444",
        "annotation": "4 ponti, 0 scoperte, 0 report",
        "annotation_en": "4 bridges, 0 discoveries, 0 reports",
        "degree": 4,
        "centrality": 0.333,
        "maturity": "A",
        "related_pages": [
          {
            "slug": "ai-lab",
            "title": "AI Lab",
            "title_en": "AI Lab",
            "description": "Il Lab è un esperimento che attraversa la fisica con logica D-ND: grafo, biconi, incrocio teorie, report e falsificazione mostrano cosa regge e cosa c",
            "section": "thia",
            "category": "dnd-model",
            "score": 3
          },
          {
            "slug": "thia-intelligence-agent",
            "title": "THIA — Un'intelligenza distribuita che tiene il filo",
            "title_en": "THIA — A distributed intelligence that holds the thread",
            "description": "Non un chatbot, ma un sistema distribuito che mantiene memoria, orienta passaggi e rende operativa nel reale la logica D-ND.",
            "section": "thia",
            "category": "experiment",
            "score": 1
          },
          {
            "slug": "paper-g-leco-dnd-meta-ontological",
            "title": "Paper G — LECO-DND: Meta-Ontological Foundations of Cognitive Emergence",
            "title_en": "Paper G — LECO-DND: Meta-Ontological Foundations of Cognitive Emergence",
            "description": "LECO-DND: a meta-ontological framework for emergent reasoning in LLMs grounded in the phenomenological origin of the D-ND framework. Formalizes cognit",
            "section": "dnd",
            "category": "paper",
            "score": 1
          }
        ]
      },
      {
        "id": "R",
        "type": "teoria",
        "label": "Relatività",
        "label_en": "Relativity",
        "color": "#f472b6",
        "annotation": "4 ponti, 0 scoperte, 0 report",
        "annotation_en": "4 bridges, 0 discoveries, 0 reports",
        "degree": 4,
        "centrality": 0.333,
        "maturity": "A",
        "related_pages": [
          {
            "slug": "paper-d-observer-dynamics",
            "title": "Paper D: Observer Dynamics and Primary Perception in the D-ND Framework",
            "title_en": "Paper D: Observer Dynamics and Primary Perception in the D-ND Framework",
            "description": "Formalization of observer dynamics: Resultant R(t), perception-latency relation P=k/L, singular-dual dipole, autological exponential, multi-observer c",
            "section": "dnd",

exec
/bin/bash -lc "find tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348 -maxdepth 2 -type f -name '*.md' -print -exec sed -n '1,220p' {} \\;" in /opt/MM_D-ND
 succeeded in 0ms:
tools/data/preflight/manual_controlled_snapshot_20260604_1650_561348/agent_field_live.md
Leggi tools/LAB_AGENT_CONTEXT.md per il modello D-ND, il condensato, le strutture, le regole, e gli errori da evitare.

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

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

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

## Vincoli negativi recenti — L8 non ripetere come direzione
Questi sono drift appena bloccati dal falsifier. Sono memoria di bordo, non consecutio. Il prossimo report deve seguire `seme.json.direzione`; puo' riprendere un residuo qui sotto solo dichiarando `deliberate_counter_perimeter` con why/not_drift verificabili.
- Direzione viva ora: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
- Blocco L8 20260531_2024: Agent Report - Boundary Contextual Robustness Macro Audit
  - claim bloccato: `relation`: `follows_direction` ... direttiva one-shot su cache/provenance/failure audit ... null fisici interni per logistica/percolation
  - evidenza: `seme.json.direzione` dice: prossimo `perturbation/null fisico Anderson su W16/W16.5/W20, non altra metrica derivata`. Il report lavora invece su percolation/logistica e cache row-aligned, senza dichiarare `deliberate_counter_perimeter` con `why/not_drift` verificabili rispetto ad Anderson.
  - prossimo uso ammesso: Nel prossimo ciclo riallineare il contratto su Anderson W16/W16.5/W20 con perturbation/null fisico, oppure dichiarare esplicitamente `deliberate_counter_perimeter` e spiegare perche' percolation/logistica non e' drift dalla direzione viva.
Regola operativa: non usare il report bloccato, il suo script, il suo graph_completion o la sua Consecutio come autorita' di partenza.

## Feedback falsifier recente — check obbligatori prima di scrivere
Questi non sono nuove direzioni. Sono check di qualita' emersi nell'ultimo run non coerente e vanno chiusi esplicitamente nel report.
- Run non coerente: 20260531_2024
  - L6: `Contaminazione cognitiva`: CE-none: ... nella superficie letta non e' emerso un archivio CE operativo da metabolizzare.
    Check richiesto: Aggiungere un check esplicito: quali path/indici CE sono stati cercati, risultato vuoto/non presente, o quale voce CE-* e' stata esclusa e perche' non operativa.
Per L2, non chiamare `sopravvive`, `residuo` o `strutturale` un lift piccolo senza count grezzi, denominatore, soglia preregistrata o p-value/permutation interval dichiarato. Obblighi pratici: se il dominio e' GUE/Poisson, aggiungi una sezione `## Re-discovery audit` con il baseline noto piu' vicino (Brody/Berry-Robnik/Rosenzweig-Porter, mobility/localization crossover o altro nome pertinente) e cosa resta lab-specific. Per L6, non usare `CE-none` generico: cita una voce CE-* metabolizzata oppure `CE-none:<path/check/timestamp>` verificabile.
Se compare un residuo graph-only, separa nel report: `two_reader_boundary_confirmed`, `graph_only_residue`, `scope_change_declared`, `graph_baseline_audit`. Non sommare righe graph-only al boundary a due lettori. Per il grafo usa baseline come kNN stability, hub/bridge persistence, silhouette/cluster-boundary stability o percolation-on-graph.

## Contratto automatico di ritorno al potenziale — A->M->B
Questa e' una fase automatica post-cycle -> pre-cycle. La matematica qui e' prerequisito/trasduttore: non e' la conclusione. Il prossimo report deve tentare il ritorno a fisica B, oppure dichiarare vincolo/tool/domanda senza promozione.
Autorita': `agent_20260603_1955.md` (cycle=20260603_1955, status=constraint_not_promoted). I refinement supervisionati sono feedback, non authority.
Titolo sorgente: Agent Report - Anderson W16.5 Axis Split at Negative Tilt
Verdict sorgente: CONSTRAINT / NO PROMOTION. Il ciclo chiude il sotto-problema axis-split: x/y/z non spiegano una chiusura nascosta di W16.5. Il prossimo movimento deve rieseguire il replay isotropico con i semi E2E originali o aumentare size/reps sulla matrice comparabile; non serve aggiungere un'altra metrica.

Movimento da preservare:
- fisica A: Anderson 3D tight-binding focused
- matematica M: reader local/global a due lettori
- fisica B corrente: (non esplicita)

Domande B candidate:
- Esiste nel bordo Anderson W16/W16.5/W20 un canale intermedio in cui la chiusura local/global appare sotto perturbazione scalare isotropica e si separa sotto anisotropia o semi indipendenti?

Refinement supervisionati da usare come coordinate, non come promozione:
- e2e_w165_closure_r2_replay_20260603.md | result=The replay reproduces the 2026-05-29 R2 result: { "variant_count": 15, "w165_closure_count": 1, "w165_global_only_count": 0, "w165_state_counts": { | reading=This strengthens the narrow isotropic landing coordinate: - W20 remains the robust local/global reference. - W16.5 closes only in a very narrow isotropic negative-tilt band. - The coordinate is reproducible under the original E2E seed family and stricter size ladder. - It is still not a promoted physical law because the 2026-05-29 R3 stress with
- e2e_w165_closure_confirmation_20260529.md | result=The useful result is not a promoted physics claim. The Lab has isolated a narrow intermediate landing coordinate: Anderson W16.5 closes under isotropic negative onsite tilt near -0.0625, while W20 remains the robust local_global reference. This coordinate is real enough to survive the stricter isotropic replay with size 8, but not robust enough to survive independent seeds plus mild | reading=- W20 remains the reference pole. - W16.5 is a sensitive intermediate channel. - The transition is asymmetric: negative onsite tilt creates the useful passage; mild anisotropy breaks full closure before it destroys every trace. - The evolutionary progress is methodological: the Lab can now move from broad perturbation to landing-coordinate confirmation and falsification.
- e2e_w165_closure_map_20260529.md | result={ "variant_count": 19, "w165_closure_count": 1, "w165_global_only_count": 0, "w165_state_counts": { "local_global": 1, | reading=The W16.5 transition is tilt-sensitive and asymmetric: - negative tilt around -0.06 can close W16.5 cleanly; - positive tilt up to +0.10 can weaken W20 local support; - anisotropy combined with tilt did not produce a cleaner W16.5 closure in this sweep. This is a map of a sensitive intermediate channel, not a promoted physical law.

Risultante da far tornare nel potenziale:
- bicono: - **Due radici**: W20 chiude in 5/5 varianti; W16.5 non chiude in 5/5 varianti. - **Singolare**: onsite_tilt=-0.0625 a semi fissi. - **Invariante di passaggio**: il bacino richiede chiusura local/global, non solo local support. - **Campo di possibilita**: possibile usare questa matrice come baseline negativa comparabile; non-possibile promuovere W16.5 oggi.

Feedback bloccato da metabolizzare, non da seguire come direzione: cycle=20260603_1948, reason=manual_controlled, high_lenses=[].
- falsifier: Il report e' internamente coerente sulle 8 lenti: nessuna proibizione senza zero, nessun drift L8 rispetto a seme.json, e possibile/non-possibile sono dichiarati nel contratto.

Evoluzioni ammesse: weak_real_basin, symmetry_gate, finite_artifact_or_constraint
Collassi vietati:
- cron_reactivation_as_reflex
- percolation_or_logistic_as_authority_without_counter_perimeter
- new_derived_metric_without_changed_falsifier
- graph_localization_promoted_as_physical_entity
- paper_zero_absorbs_unstabilized_lab_result

Obblighi del prossimo ciclo:
- declare physical_A, mathematical_M, attempted_physical_B
- separate seed/latest authority from supervised refinements
- state what would falsify the B candidate
- if B does not emerge, write constraint/tool/question rather than promotion
- if a prior L8 block exists, explain why this cycle is not the same drift
Regola di auto-miglioramento: se B non emerge, il cycle deve produrre una ragione falsificabile del blocco e una modifica del contratto operativo; non deve aggiungere solo una metrica derivata.

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

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

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

## Contratto di aderenza alla traiettoria
- Direzione viva del seme: Esplorare il confine: 8 domini GUE, 5 Poisson — il confine è il terzo incluso operativo
- Ultima decisione valutatore ammessa: 20260603_1955 ESCALATE/high
- Perche': L'Affinatore ha verificato che il ciclo reale e' stato un no-run: tool_use=0, duration_s=0 e ultimo testo 'no access to Claude'. Continuare come NEXT_CYCLE o accettare il delta di seme verso GUE/Poisson trasformerebbe un access denial in traiettoria scientifica, quindi prima va risolto il contratto runtime producer/autopsy.
- Nota: Non valutare il report Anderson come ciclo appena concluso: e' contesto precedente o report non prodotto dal run reale. Blocco operativo, non scientifico.

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

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

# Palette operatoria espansa del Lab

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

Regola d'uso:

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

Anti-tautologia:

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

## Fasce di triturazione

### 1. Geometria differenziale e gravita'

Operatori:

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

Dipoli utili:

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

Controlli:

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

Attenzione:

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

### 2. Gauge, connessioni e campi

Operatori:

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

Dipoli utili:

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

Controlli:

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

### 3. Spazi quantistici e misura

Operatori:

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

codex
Procedo con un esperimento controllato in cinque passaggi: validazione contratto, classificazione righe setup, definizione null QES, produzione osservazioni deterministiche, classificatore boundary. Non avvio `lab_agent`, non uso API, non modifico seme o grafo.
exec
/bin/bash -lc 'python3 tools/qxg_contract_smoke.py --output tools/data/preflight/qxg_contract_smoke_20260604_1650.json --json' in /opt/MM_D-ND
 succeeded in 0ms:
{"decision": "NO_RUNTIME", "contract_valid": true, "runtime_ready": false, "recommended_action": "BUILD_EXECUTABLE_OPERATOR_OR_PROVIDER_PREFLIGHT", "path": "tools/data/preflight/qxg_contract_smoke_20260604_1650.json"}

exec
/bin/bash -lc 'python3 tools/qxg_setup_row_operator.py --output tools/data/preflight/qxg_setup_row_operator_20260604_1650.json --json' in /opt/MM_D-ND
 succeeded in 0ms:
{"decision": "OPERATOR_DEFINED_NO_RUNTIME", "candidate_rows": ["qes_factorization_boundary"], "counter_rows": ["semiclassical_large_horizon", "charge_or_gauge_censor"], "broken_rows": [], "recommended_action": "BUILD_NULL_FOR_QES_FACTORIZATION_BOUNDARY", "path": "tools/data/preflight/qxg_setup_row_operator_20260604_1650.json"}

codex
I primi due passaggi dicono: contratto valido ma non runtime-ready; una sola riga candidata (`qes_factorization_boundary`) e due guardie di contro-perimetro. Uso questo come confine: l'esperimento puo' classificare il boundary, ma non promuovere QxG.
exec
/bin/bash -lc 'python3 tools/qxg_qes_null_builder.py --operator tools/data/preflight/qxg_setup_row_operator_20260604_1650.json --output tools/data/preflight/qxg_qes_null_20260604_1650.json --json' in /opt/MM_D-ND
 succeeded in 0ms:
{"decision": "NULL_DEFINED_NO_RUNTIME", "candidate_row": "qes_factorization_boundary", "scenarios": ["preserve_txq_break_txg", "preserve_txg_break_txq"], "runtime_ready": false, "recommended_action": "PROVIDER_PREFLIGHT_OR_OPERATOR_ACK_REVIEW", "path": "tools/data/preflight/qxg_qes_null_20260604_1650.json"}

exec
/bin/bash -lc 'python3 tools/qxg_qes_observation_producer.py --output-json tools/data/preflight/qxg_qes_observations_20260604_1650.json --output-md docs/operations/qxg_qes_observations_20260604_1650.md --json' in /opt/MM_D-ND
 succeeded in 0ms:
{"producer": "qxg_qes_observation_producer", "observation_kind": "deterministic_qes_boundary_model", "physics_claim": false, "internal_event": true, "observations": 3, "json_path": "tools/data/preflight/qxg_qes_observations_20260604_1650.json", "md_path": "docs/operations/qxg_qes_observations_20260604_1650.md"}

codex
Il null e' definito e l'osservatore deterministico produce tre righe: due null one-reader e una co-presenza TxQ+TxG. Ora classifico queste osservazioni contro il contratto, poi scrivo il report finale senza cambiare `latest.md`.
exec
/bin/bash -lc 'python3 tools/qxg_boundary_classifier.py --qes-null tools/data/preflight/qxg_qes_null_20260604_1650.json --observations tools/data/preflight/qxg_qes_observations_20260604_1650.json --output-json tools/data/preflight/qxg_boundary_classifier_20260604_1650.json --output-md docs/operations/qxg_boundary_classifier_20260604_1650.md --json' in /opt/MM_D-ND
 succeeded in 0ms:
{"decision": "BOUNDARY_CLASSIFIED_QXG_CANDIDATE_WITH_NULLS", "issues": [], "classification_counts": {"BLANK": 2, "QxG_CANDIDATE": 1}, "json_path": "tools/data/preflight/qxg_boundary_classifier_20260604_1650.json", "md_path": "docs/operations/qxg_boundary_classifier_20260604_1650.md"}

exec
/bin/bash -lc "python3 - <<'PY'
import json
from pathlib import Path
for p in ['tools/data/preflight/qxg_qes_observations_20260604_1650.json','tools/data/preflight/qxg_boundary_classifier_20260604_1650.json']:
    print('---', p)
    obj=json.loads(Path(p).read_text())
    if 'model' in obj:
        print(json.dumps(obj['model']['extrema'], indent=2))
        print(json.dumps(obj['model']['diagnostics'], indent=2))
    if 'classification_counts' in obj:
        print(json.dumps(obj['classification_counts'], indent=2))
        print(json.dumps(obj['classifications'], indent=2)[:5000])
PY" in /opt/MM_D-ND
 succeeded in 0ms:
--- tools/data/preflight/qxg_qes_observations_20260604_1650.json
{
  "area_only": {
    "value": 0.0,
    "x_star": -0.55
  },
  "bulk_only": {
    "value": 0.0,
    "x_star": 0.7
  },
  "full_s_gen": {
    "value": 0.634297,
    "x_star": 0.019
  }
}
{
  "full_minus_area_only_abs": 0.569,
  "full_minus_bulk_only_abs": 0.681,
  "internal_event": true,
  "requires_txg": true,
  "requires_txq": true
}
--- tools/data/preflight/qxg_boundary_classifier_20260604_1650.json
{
  "BLANK": 2,
  "QxG_CANDIDATE": 1
}
[
  {
    "has_full_qes": false,
    "has_txg": false,
    "has_txq": true,
    "id": "qes_null_preserve_txq_break_txg",
    "internal_event": false,
    "promotes_qxg": false,
    "reasons": [
      "no_stable_internal_event_under_declared_boundary"
    ],
    "same_denominator": true,
    "scenario": "preserve_txq_break_txg",
    "state": "BLANK"
  },
  {
    "has_full_qes": false,
    "has_txg": true,
    "has_txq": false,
    "id": "qes_null_preserve_txg_break_txq",
    "internal_event": false,
    "promotes_qxg": false,
    "reasons": [
      "no_stable_internal_event_under_declared_boundary"
    ],
    "same_denominator": true,
    "scenario": "preserve_txg_break_txq",
    "state": "BLANK"
  },
  {
    "has_full_qes": true,
    "has_txg": true,
    "has_txq": true,
    "id": "qes_copresence_txq_txg",
    "internal_event": true,
    "promotes_qxg": false,
    "reasons": [
      "internal_event_requires_txq_and_txg_on_same_denominator"
    ],
    "same_denominator": true,
    "scenario": "co_presence_txq_txg",
    "state": "QxG_CANDIDATE"
  }
]

codex
Risultato misurato: i due null restano BLANK, la co-presenza sullo stesso denominatore diventa `QxG_CANDIDATE`, senza promozione. Ora compongo il report `agent_20260604_1650.md` con A->M->B, aderenza, contaminazione CE e side effect.
exec
/bin/bash -lc "test -e tools/data/reports/agent_20260604_1650.md && sed -n '1,220p' tools/data/reports/agent_20260604_1650.md || true" in /opt/MM_D-ND
 succeeded in 0ms:
exec
/bin/bash -lc "find . -path './.git' -prune -o -type f \\( -iname '*CE-*' -o -iname '*cognitive*' -o -iname '*contamination*' \\) -printf '%p\\n' | sort | head -80" in /opt/MM_D-ND
exec
/bin/bash -lc "find tools/data -type f -iname '*CE-*' -printf '%p\\n' | sort | head -40" in /opt/MM_D-ND
 succeeded in 0ms:
exec
/bin/bash -lc "rg -n \"Archivio enzimi cognitivi|CE-|Contaminazione cognitiva\" tools/data/agent_field_live.md tools/LAB_AGENT_CONTEXT.md shared_memory/*.md tools -g'*.md' | head -80" in /opt/MM_D-ND
 succeeded in 0ms:
tools/LAB_AGENT_CONTEXT.md:206:  `Contaminazione cognitiva` e' obbligatoria nel report; se un adapter non
tools/LAB_AGENT_CONTEXT.md:208:- **Archivio enzimi cognitivi.** Se il campo vivo contiene `Archivio enzimi
tools/LAB_AGENT_CONTEXT.md:209:  cognitivi`, la sezione `Contaminazione cognitiva` deve citare almeno una voce
tools/LAB_AGENT_CONTEXT.md:210:  `CE-*` usata nella combo, oppure `CE-none:` con un motivo specifico e
tools/LAB_AGENT_CONTEXT.md:440:- **Contaminazione cognitiva**: eventuale DeltaLink YSN, gene Cornelius,
tools/LAB_AGENT_CONTEXT.md:441:  passaggio KSAR/PVI/Vault o voce `CE-*` dell'archivio usata nel ciclo. Se non
tools/LAB_AGENT_CONTEXT.md:442:  usi il layer cognitivo, dichiara `CE-none:` e il motivo specifico. `none`
tools/data/agent_field_live.md:23:  - L6: `Contaminazione cognitiva`: CE-none: ... nella superficie letta non e' emerso un archivio CE operativo da metabolizzare.
tools/data/agent_field_live.md:24:    Check richiesto: Aggiungere un check esplicito: quali path/indici CE sono stati cercati, risultato vuoto/non presente, o quale voce CE-* e' stata esclusa e perche' non operativa.
tools/data/agent_field_live.md:25:Per L2, non chiamare `sopravvive`, `residuo` o `strutturale` un lift piccolo senza count grezzi, denominatore, soglia preregistrata o p-value/permutation interval dichiarato. Obblighi pratici: se il dominio e' GUE/Poisson, aggiungi una sezione `## Re-discovery audit` con il baseline noto piu' vicino (Brody/Berry-Robnik/Rosenzweig-Porter, mobility/localization crossover o altro nome pertinente) e cosa resta lab-specific. Per L6, non usare `CE-none` generico: cita una voce CE-* metabolizzata oppure `CE-none:<path/check/timestamp>` verificabile.
tools/data/agent_field_live.md:671:Usali come enzimi del respiro fuori-tempo: DeltaLink, innesco genomico, reiterazione semantica, filtro avversariale e Vault. Non copiarne l'identita': trasformali in dipolo, punto-zero e osservabile. Nel report la sezione `Contaminazione cognitiva` e' obbligatoria: se non usi adapter o archivio CE, dichiara `CE-none:` e il motivo specifico.
tools/data/agent_field_live.md:905:### Contaminazione cognitiva
tools/data/agent_field_live.md:939:## Archivio enzimi cognitivi — richiamo contestuale
tools/data/agent_field_live.md:940:Archivio generato: 2026-05-08T20:49:15.084998+00:00 · 260 voci. Questo e' un substrate selector: non usare il substrato come claim. Tieni le teorie scientifiche nel focus e usa CE-* solo per costruire combo corta: assioma/metodo + osservazione/funzione + teoria/focus + null test. Se nessuna voce regge, dichiara `CE-none:` con motivo specifico nella Contaminazione cognitiva. `none` generico non e' valido.
tools/data/agent_field_live.md:944:- assioma/metodo: CE-0117 [method_axiom] score=58 overlap=7 · 2. La cascata della possibilità
tools/data/agent_field_live.md:947:- osservazione primaria: CE-0038 [corpus_primary_observation] score=81 overlap=9 · [47] NID 598 — R dell'Istanza  - L' equilibrio tra estremi del Modello D-ND
tools/data/agent_field_live.md:950:- funzione/formalizzazione: CE-0002 [corpus_formal_function] score=89 overlap=2 · Funzione
tools/data/agent_field_live.md:953:- teoria/focus scientifico: CE-0027 [corpus_project_architecture] score=75 overlap=7 · [114] NID 1931 — Modello D-ND: Formalizzazione Assiomatica, Emergenza Quantistica e Implic
tools/data/agent_field_live.md:956:- enzima/kernel: CE-0001 [lab_operational_context] score=92 overlap=2 · Adapter 3: KSAR reiterative semantic kernel
tools/data/agent_field_live.md:960:- CE-0001 [lab_operational_context/strumento_lab/lab_cycle] score=92 overlap=2 · Adapter 3: KSAR reiterative semantic kernel
tools/data/agent_field_live.md:963:- CE-0002 [corpus_formal_function/regola_primaria/campo_dnd] score=89 overlap=2 · Funzione
tools/data/agent_field_live.md:966:- CE-0030 [corpus_project_architecture/contaminante_dnd/campo_dnd] score=82 overlap=10 · [69] NID 1353 — Documento di Sintesi sul Modello Duale Non-Duale (D-ND) e la Risultante "R
tools/data/agent_field_live.md:969:- CE-0038 [corpus_primary_observation/contaminante_dnd/campo_dnd] score=81 overlap=9 · [47] NID 598 — R dell'Istanza  - L' equilibrio tra estremi del Modello D-ND
tools/data/agent_field_live.md:972:- CE-0019 [lab_operational_context/contaminante_dnd/campo_dnd] score=81 overlap=8 · Respiro fuori-tempo
tools/data/agent_field_live.md:975:- CE-0005 [corpus_cognitive_prompt/contaminante_dnd/campo_dnd] score=79 overlap=4 · [82] NID 2321 — Prompt per Motore di Inferenza Quantistica Duale-Non-Duale (D-ND)
tools/data/agent_field_live.md:978:- CE-0003 [corpus_formal_function/contaminante_dnd/campo_dnd] score=79 overlap=2 · Titolo Assiomatico Combinato Rivisto: "Ottimizzazione Unificata e Manifestazione della Ris
tools/data/agent_field_live.md:980:- CE-0007 [kernel_reference/regola_primaria/campo_dnd] score=77 overlap=5 · **1. Kernel Assiomatico: Fisica del Campo Inferenziale**
tools/data/agent_field_live.md:1299:Se il campo contiene adapter cognitivi o archivio CE, la sezione `Contaminazione cognitiva` deve nominare almeno una voce `CE-*`, YSN, Cornelius, KSAR, PVI/Vault usata nella combo, oppure `CE-none:` con motivo specifico e verificabile. `none` generico significa che il campo e' stato visto ma non metabolizzato.
tools/LAB_AGENT_CONTEXT.md:206:  `Contaminazione cognitiva` e' obbligatoria nel report; se un adapter non
tools/LAB_AGENT_CONTEXT.md:208:- **Archivio enzimi cognitivi.** Se il campo vivo contiene `Archivio enzimi
tools/LAB_AGENT_CONTEXT.md:209:  cognitivi`, la sezione `Contaminazione cognitiva` deve citare almeno una voce
tools/LAB_AGENT_CONTEXT.md:210:  `CE-*` usata nella combo, oppure `CE-none:` con un motivo specifico e
tools/LAB_AGENT_CONTEXT.md:440:- **Contaminazione cognitiva**: eventuale DeltaLink YSN, gene Cornelius,
tools/LAB_AGENT_CONTEXT.md:441:  passaggio KSAR/PVI/Vault o voce `CE-*` dell'archivio usata nel ciclo. Se non
tools/LAB_AGENT_CONTEXT.md:442:  usi il layer cognitivo, dichiara `CE-none:` e il motivo specifico. `none`
tools/LAB_COGNITIVE_CONTAMINATION.md:233:### Contaminazione cognitiva
tools/data/agent_field_live.md:23:  - L6: `Contaminazione cognitiva`: CE-none: ... nella superficie letta non e' emerso un archivio CE operativo da metabolizzare.
tools/data/agent_field_live.md:24:    Check richiesto: Aggiungere un check esplicito: quali path/indici CE sono stati cercati, risultato vuoto/non presente, o quale voce CE-* e' stata esclusa e perche' non operativa.
tools/data/agent_field_live.md:25:Per L2, non chiamare `sopravvive`, `residuo` o `strutturale` un lift piccolo senza count grezzi, denominatore, soglia preregistrata o p-value/permutation interval dichiarato. Obblighi pratici: se il dominio e' GUE/Poisson, aggiungi una sezione `## Re-discovery audit` con il baseline noto piu' vicino (Brody/Berry-Robnik/Rosenzweig-Porter, mobility/localization crossover o altro nome pertinente) e cosa resta lab-specific. Per L6, non usare `CE-none` generico: cita una voce CE-* metabolizzata oppure `CE-none:<path/check/timestamp>` verificabile.
tools/data/agent_field_live.md:671:Usali come enzimi del respiro fuori-tempo: DeltaLink, innesco genomico, reiterazione semantica, filtro avversariale e Vault. Non copiarne l'identita': trasformali in dipolo, punto-zero e osservabile. Nel report la sezione `Contaminazione cognitiva` e' obbligatoria: se non usi adapter o archivio CE, dichiara `CE-none:` e il motivo specifico.
tools/data/agent_field_live.md:905:### Contaminazione cognitiva
tools/data/agent_field_live.md:939:## Archivio enzimi cognitivi — richiamo contestuale
tools/data/agent_field_live.md:940:Archivio generato: 2026-05-08T20:49:15.084998+00:00 · 260 voci. Questo e' un substrate selector: non usare il substrato come claim. Tieni le teorie scientifiche nel focus e usa CE-* solo per costruire combo corta: assioma/metodo + osservazione/funzione + teoria/focus + null test. Se nessuna voce regge, dichiara `CE-none:` con motivo specifico nella Contaminazione cognitiva. `none` generico non e' valido.
tools/data/agent_field_live.md:944:- assioma/metodo: CE-0117 [method_axiom] score=58 overlap=7 · 2. La cascata della possibilità
tools/data/agent_field_live.md:947:- osservazione primaria: CE-0038 [corpus_primary_observation] score=81 overlap=9 · [47] NID 598 — R dell'Istanza  - L' equilibrio tra estremi del Modello D-ND
tools/data/agent_field_live.md:950:- funzione/formalizzazione: CE-0002 [corpus_formal_function] score=89 overlap=2 · Funzione
tools/data/agent_field_live.md:953:- teoria/focus scientifico: CE-0027 [corpus_project_architecture] score=75 overlap=7 · [114] NID 1931 — Modello D-ND: Formalizzazione Assiomatica, Emergenza Quantistica e Implic
tools/data/agent_field_live.md:956:- enzima/kernel: CE-0001 [lab_operational_context] score=92 overlap=2 · Adapter 3: KSAR reiterative semantic kernel
tools/data/agent_field_live.md:960:- CE-0001 [lab_operational_context/strumento_lab/lab_cycle] score=92 overlap=2 · Adapter 3: KSAR reiterative semantic kernel
tools/data/agent_field_live.md:963:- CE-0002 [corpus_formal_function/regola_primaria/campo_dnd] score=89 overlap=2 · Funzione
tools/data/agent_field_live.md:966:- CE-0030 [corpus_project_architecture/contaminante_dnd/campo_dnd] score=82 overlap=10 · [69] NID 1353 — Documento di Sintesi sul Modello Duale Non-Duale (D-ND) e la Risultante "R
tools/data/agent_field_live.md:969:- CE-0038 [corpus_primary_observation/contaminante_dnd/campo_dnd] score=81 overlap=9 · [47] NID 598 — R dell'Istanza  - L' equilibrio tra estremi del Modello D-ND
tools/data/agent_field_live.md:972:- CE-0019 [lab_operational_context/contaminante_dnd/campo_dnd] score=81 overlap=8 · Respiro fuori-tempo
tools/data/agent_field_live.md:975:- CE-0005 [corpus_cognitive_prompt/contaminante_dnd/campo_dnd] score=79 overlap=4 · [82] NID 2321 — Prompt per Motore di Inferenza Quantistica Duale-Non-Duale (D-ND)
tools/data/agent_field_live.md:978:- CE-0003 [corpus_formal_function/contaminante_dnd/campo_dnd] score=79 overlap=2 · Titolo Assiomatico Combinato Rivisto: "Ottimizzazione Unificata e Manifestazione della Ris
tools/data/agent_field_live.md:980:- CE-0007 [kernel_reference/regola_primaria/campo_dnd] score=77 overlap=5 · **1. Kernel Assiomatico: Fisica del Campo Inferenziale**
tools/data/agent_field_live.md:1299:Se il campo contiene adapter cognitivi o archivio CE, la sezione `Contaminazione cognitiva` deve nominare almeno una voce `CE-*`, YSN, Cornelius, KSAR, PVI/Vault usata nella combo, oppure `CE-none:` con motivo specifico e verificabile. `none` generico significa che il campo e' stato visto ma non metabolizzato.
tools/data/operator_directives_consumed/operator_directive_20260508_2121.md:33:- CE substrate richiesto: almeno un `CE-*` da `method_axiom` e uno da `corpus_primary_observation` o `corpus_formal_function`.
tools/data/operator_directives_consumed/operator_directive_20260508_2102.md:3:Usa il nuovo `Archivio enzimi cognitivi` come substrate selector, non come
tools/data/operator_directives_consumed/operator_directive_20260508_2102.md:6:1. un `CE-*` di layer `method_axiom`;
tools/data/operator_directives_consumed/operator_directive_20260508_2102.md:7:2. un `CE-*` da `corpus_primary_observation` o `corpus_formal_function`;
tools/data/operator_directives_consumed/operator_directive_20260508_2102.md:25:combo non genera osservabile nuovo, dichiara `CE-none:` e chiudi il ramo.
tools/data/operator_directives_consumed/operator_directive_20260514_1850.md:61:## Contaminazione cognitiva
tools/data/operator_directives_consumed/operator_directive_20260508_2133.md:29:- CE substrate richiesto: almeno un `CE-*` da `method_axiom` e uno da `corpus_primary_observation` o `corpus_formal_function`.
tools/data/operator_directives_consumed/operator_directive_20260514_1656.md:19:## Contaminazione cognitiva
tools/data/operator_directives_consumed/operator_directive_20260514_1656.md:26:- `CE-0117`: cascata della possibilita' / trasformazione del deposito in
tools/data/operator_directives_consumed/operator_directive_20260514_1656.md:29:- oppure `CE-none:` con motivo verificabile, ma preferisci nominare CE/KSAR se
tools/data/cognitive_enzymes_archive.md:1:# Archivio enzimi cognitivi MM-DND
tools/data/cognitive_enzymes_archive.md:65:#### CE-0002 - Funzione (`corpus_formal_function` / `regola_primaria`, score=76)
tools/data/cognitive_enzymes_archive.md:71:#### CE-0003 - Titolo Assiomatico Combinato Rivisto: "Ottimizzazione Unificata e Manifestazione della Risultante attraverso Tassonomia Assiomatica, Autologia e Osservazione Re (`corpus_formal_function` / `contaminante_dnd`, score=66)
tools/data/cognitive_enzymes_archive.md:75:#### CE-0004 - [3] NID 142 — RAG per Assistente basato sul modello Duale non-Duale (`corpus_project_architecture` / `contaminante_dnd`, score=65)
tools/data/cognitive_enzymes_archive.md:81:#### CE-0005 - [82] NID 2321 — Prompt per Motore di Inferenza Quantistica Duale-Non-Duale (D-ND) (`corpus_cognitive_prompt` / `contaminante_dnd`, score=65)
tools/data/cognitive_enzymes_archive.md:87:#### CE-0006 - **1. Kernel Assiomatico (P0-P6): La Fisica del Campo** (`kernel_reference` / `regola_primaria`, score=64)
tools/data/cognitive_enzymes_archive.md:93:#### CE-0007 - **1. Kernel Assiomatico: Fisica del Campo Inferenziale** (`kernel_reference` / `regola_primaria`, score=60)
tools/data/cognitive_enzymes_archive.md:99:#### CE-0008 - **System Prompt: SACS-PS v14.0 - Genoma Assiomatico Autopoietico** (`kernel_reference` / `regola_primaria`, score=60)
tools/data/cognitive_enzymes_archive.md:105:#### CE-0009 - Funzione Concettuale del Quarto Assioma\[f_{\text{QuartoAssioma}}(\vec{X}, D) = \begin{cases} \text{Opt-Unified}(\vec{X}, D) & \text{se } D \neq \text{Null} \\  (`corpus_formal_function` / `regola_primaria`, score=59)
tools/data/cognitive_enzymes_archive.md:111:#### CE-0010 - **1. Kernel Assiomatico: Fisica del Campo Inferenziale** (`kernel_reference` / `regola_primaria`, score=59)
tools/data/cognitive_enzymes_archive.md:117:#### CE-0011 - Indice (`corpus_project_architecture` / `contaminante_dnd`, score=59)
tools/data/cognitive_enzymes_archive.md:123:#### CE-0012 - [50] NID 1258 — Gate CNOT nel contesto del modello D-ND (`corpus_project_architecture` / `contaminante_dnd`, score=58)
tools/data/cognitive_enzymes_archive.md:129:#### CE-0013 - Regola Assiomatica della Reversibilità- **Definizione**: Per ogni elemento osservabile \( x \) in un dato contesto \( C \), esiste un elemento opposto \( x' \)  (`corpus_formal_function` / `regola_primaria`, score=57)

 succeeded in 136ms:
./archive/session_docs/2025-12-17_11-28-41__governance-estensioni-mms-anti-proliferazione-assiomatica.html
./archive/session_docs/DASH_D-ND_Cognitive_Graph_Cytoscape.html
./awareness/1_Φ_INFERENTIAL/2025-12-15_18-49-56__simulazione-numerica-fp-gce-con-pythonjax-e-metriche-_ma1.md
./awareness/4_κ_EVOLUTIVE_MEMORY/DOC-MMS-DND/A_Cognitive_Operating_System_for_XTR-0.md
./awareness/4_κ_EVOLUTIVE_MEMORY/DOC_vision/BP_Cognitive_Probabilit_Layer.md
./kernel/reference/metaprompt_in_sviluppo/MetacognitiveAgent—Expression.md
./tools/LAB_COGNITIVE_CONTAMINATION.md
./tools/data/cognitive_enzymes_archive.json
./tools/data/cognitive_enzymes_archive.md
./tools/data/cognitive_fingerprint.json
./tools/extract_cognitive_enzymes.py

codex
Scrivo ora il report come nuovo file singolo. La formulazione resta prudente: `QxG_CANDIDATE_WITH_NULLS` e' una classificazione operativa del boundary, non una legge fisica e non un aggiornamento del grafo.
apply patch
patch: completed
/opt/MM_D-ND/tools/data/reports/agent_20260604_1650.md
diff --git a/tools/data/reports/agent_20260604_1650.md b/tools/data/reports/agent_20260604_1650.md
new file mode 100644
index 0000000000000000000000000000000000000000..5784b4c293bd9dc4f0819080d0f581b4aaecbea5
--- /dev/null
+++ b/tools/data/reports/agent_20260604_1650.md
@@ -0,0 +1,101 @@
+# Agent Report - QxG QES Two-Reader Boundary Classifier
+**Date**: 2026-06-04 16:50 UTC
+**Tension explored**: BOUNDARY / QxG void through TxQ+TxG two-reader boundary
+**verdict**: CONSTRAINT / TOOL - Il contratto QxG mediato da TxQ e TxG produce una riga `QxG_CANDIDATE` solo quando `S_gen = A/(4 l_P^2) + S_bulk` contiene insieme lettore geometrico e lettore quantistico. I due null one-reader restano `BLANK`. QxG non viene promosso.
+observables_registry: dedicated QxG/QES contract observables
+observables_used: [contract_valid, runtime_ready, setup_row_vc_state, null_scenario_state, qes_extremum_x_star, qes_reader_shift, boundary_classification_state]
+ssp_value: no
+
+**observable_contract**: claim=il vuoto QxG diventa interrogabile solo se lo stesso denominatore preserva due letture distinguibili TxQ e TxG senza promuovere QxG; observable=classificazione riga-per-riga in `BLANK`, `QxG_CANDIDATE`, `FALL`; operator=modello deterministico `S_gen(x)=area_term(x)+S_bulk(x)+coupling_term(x)` e classificatore two-reader; generator=`tools/qxg_contract_smoke.py`, `tools/qxg_setup_row_operator.py`, `tools/qxg_qes_null_builder.py`, `tools/qxg_qes_observation_producer.py`, `tools/qxg_boundary_classifier.py`; denominator=3 osservazioni row-aligned sul denominatore primario `S_gen = A/(4 l_P^2) + S_bulk`; p_value_definition=not_used/no Monte Carlo; non_possible=promuovere QxG da area-only, S_bulk-only, cambio di denominatore, regime semiclassico grande trattato come QxG, o single-reader promotion; not_tested=misura fisica reale, provider runtime, paper-level QES data, aggiornamento seme/grafo.
+
+## Prima impressione
+
+Il confine non e' nel nome QxG. Il confine appare quando un denominatore tiene insieme area e bulk: togliendo uno dei due lettori, il candidato cade a `BLANK`; con entrambi, il classificatore vede un evento interno ma lo lascia come domanda.
+
+## Respiro fuori-tempo
+
+- **Combo**: A9 terzo incluso + A11 combo + lato vuoto QxG del tetraedro + tensione BOUNDARY "8 domini GUE, 5 Poisson: il confine e' il terzo incluso operativo" + incrocio TxQ/TxG.
+- **Dipolo / punto-zero**: lettore singolo / lettore doppio. Punto-zero: `S_gen = A/(4 l_P^2) + S_bulk`, dove area e bulk sono separabili ma nello stesso denominatore.
+- **Piano superiore**: grafo della conoscenza e bicono dei lettori, non nuova metrica GUE/Poisson.
+- **Proto-ipotesi**: un vuoto non si chiude nominando il ponte; diventa misurabile quando due lettori indipendenti sullo stesso denominatore producono un evento interno che i null one-reader non ricostruiscono.
+- **Possibile/non-possibile**: possibile = usare il classificatore come tool per preparare un futuro runtime QES; non-possibile = chiamare QxG ponte fisico, legge o edge accettato.
+- **Proiezione**: classificazione deterministica su 3 righe: due null one-reader e una co-presenza TxQ+TxG.
+- **Movimento A->M->B**: fisico A = bordo termico/gravitazionale-quantistico QES; matematica M = two-reader classifier su denominatore `S_gen`; fisico B tentato = domanda operativa su quando un evento QES richiede insieme area e bulk. B non viene promosso: resta tool/domanda.
+
+## Esperimento
+
+Pipeline eseguita senza API e senza `lab_agent`:
+
+1. `qxg_contract_smoke`: contratto valido, `runtime_ready=false`, decisione `NO_RUNTIME`.
+2. `qxg_setup_row_operator`: una riga candidata `qes_factorization_boundary`; due guardie `semiclassical_large_horizon` e `charge_or_gauge_censor`; nessuna riga rotta.
+3. `qxg_qes_null_builder`: null definito con due scenari, `preserve_txq_break_txg` e `preserve_txg_break_txq`.
+4. `qxg_qes_observation_producer`: modello deterministico con `area_only.x_star=-0.55`, `bulk_only.x_star=0.7`, `full_s_gen.x_star=0.019`.
+5. `qxg_boundary_classifier`: classificazione finale `BLANK=2`, `QxG_CANDIDATE=1`, `FALL=0`.
+
+## Risultati
+
+| row | scenario | state | reason |
+|---|---|---|---|
+| `qes_null_preserve_txq_break_txg` | preserve TxQ, break TxG | `BLANK` | no stable internal event under declared boundary |
+| `qes_null_preserve_txg_break_txq` | preserve TxG, break TxQ | `BLANK` | no stable internal event under declared boundary |
+| `qes_copresence_txq_txg` | co-presence TxQ+TxG | `QxG_CANDIDATE` | internal event requires TxQ and TxG on same denominator |
+
+Diagnostics del modello:
+
+```json
+{
+  "full_minus_area_only_abs": 0.569,
+  "full_minus_bulk_only_abs": 0.681,
+  "requires_txq": true,
+  "requires_txg": true,
+  "internal_event": true
+}
+```
+
+Verdict operativo: il boundary e' fit-ready come classificatore, non runtime-ready come scoperta fisica.
+
+## Aderenza alla direzione
+
+- `relation`: deliberate_counter_perimeter
+- `why`: la direzione viva cerca il confine come terzo incluso; questo ciclo non ripete Anderson ne' GUE/Poisson, ma costruisce il contro-perimetro formale che impedisce al vuoto QxG di diventare falsa chiusura.
+- `not_drift`: il test ha denominatore, null e classificazione riga-per-riga; non usa percolation/logistica, non usa metriche derivate del blocco L8, non promuove graph-only residue.
+- `return_criterion`: tornare al perimetro vivo solo dopo provider/runtime verificato oppure dopo una riga fisica QES reale che alimenti lo stesso classificatore.
+- `seed_residue`: resta non testato il perimetro empirico "8 domini GUE, 5 Poisson"; questo ciclo produce un tool di boundary, non un nuovo dominio.
+
+## Re-discovery audit
+
+Baseline nota piu' vicina: QES/generalized entropy usa `S_gen = A/(4G_N) + S_bulk` come struttura standard; il Lab non rivendica la formula. Resta lab-specifico il contratto two-reader con stop espliciti: one-reader null -> `BLANK`, co-presence su stesso denominatore -> `QxG_CANDIDATE`, single-reader promotion/regime misuse -> `FALL`.
+
+## Contaminazione cognitiva
+
+CE usati dal campo vivo:
+
+- `CE-0117` come metodo: cascata della possibilita', usata per non chiudere QxG e lasciare il candidato come tool/domanda.
+- `CE-0001` come kernel operativo: KSAR/reiterative semantic kernel, usato per reiterare contratto -> null -> osservazioni -> classificazione invece di saltare a promozione.
+
+Check L6 chiuso: cercati `tools/data/agent_field_live.md` righe CE, `tools/data/cognitive_enzymes_archive.md`, `tools/data/cognitive_enzymes_archive.json`, `tools/LAB_COGNITIVE_CONTAMINATION.md`; archivio presente e operativo, quindi non si usa `CE-none`.
+
+## Fonti e artefatti
+
+- Fonte autoritativa campo: `tools/data/agent_field_live.md`
+- Contesto Lab: `tools/LAB_AGENT_CONTEXT.md`
+- Contratto: `tools/data/qxg_txq_txg_fit_ready_contract_20260604.json`
+- Smoke: `tools/data/preflight/qxg_contract_smoke_20260604_1650.json`
+- Setup rows: `tools/data/preflight/qxg_setup_row_operator_20260604_1650.json`
+- Null: `tools/data/preflight/qxg_qes_null_20260604_1650.json`
+- Osservazioni: `tools/data/preflight/qxg_qes_observations_20260604_1650.json`
+- Classificatore: `tools/data/preflight/qxg_boundary_classifier_20260604_1650.json`
+
+## Verificato / inferito / non verificato
+
+- **Verificato**: contratto valido; runtime non pronto; 1 candidate row; 2 null BLANK; 1 co-presence candidate; nessun `FALL`; API key paid non presenti nell'ambiente.
+- **Inferito**: il classificatore e' utile come tool di ritorno a fisica B per QES, perche' separa domanda, null e caduta.
+- **Non verificato**: dati QES reali, provider runtime, robustezza su osservazioni esterne, integrazione nel grafo o nel seme.
+
+## Consecutio
+
+Non promuovere QxG. La prossima mossa utile e' fornire al classificatore una riga QES fisica o semireale con lo stesso schema (`denominator`, `readings_present`, `readings_missing`, `internal_event`, `promotes_qxg`, `regime`). Se la riga single-reader promuove QxG, cade in `FALL`; se la co-presenza non produce evento interno, il ramo resta `BLANK`; se ripete `QxG_CANDIDATE_WITH_NULLS`, allora si puo' chiedere provider/runtime o revisione operatore prima di qualsiasi ciclo autonomo.
+
+## Side effect
+
+Creati artefatti preflight 20260604_1650 e due markdown in `docs/operations`. Gli script `qxg_qes_observation_producer.py` e `qxg_boundary_classifier.py` hanno aggiornato anche i rispettivi `latest` preflight/docs secondo il loro comportamento interno. Non ho modificato `tools/data/seme.json`, `tools/data/lab_graph.json`, `tools/data/reports/latest.md` o superfici pubbliche.

diff --git a/tools/data/reports/agent_20260604_1650.md b/tools/data/reports/agent_20260604_1650.md
new file mode 100644
index 0000000000000000000000000000000000000000..5784b4c293bd9dc4f0819080d0f581b4aaecbea5
--- /dev/null
+++ b/tools/data/reports/agent_20260604_1650.md
@@ -0,0 +1,101 @@
+# Agent Report - QxG QES Two-Reader Boundary Classifier
+**Date**: 2026-06-04 16:50 UTC
+**Tension explored**: BOUNDARY / QxG void through TxQ+TxG two-reader boundary
+**verdict**: CONSTRAINT / TOOL - Il contratto QxG mediato da TxQ e TxG produce una riga `QxG_CANDIDATE` solo quando `S_gen = A/(4 l_P^2) + S_bulk` contiene insieme lettore geometrico e lettore quantistico. I due null one-reader restano `BLANK`. QxG non viene promosso.
+observables_registry: dedicated QxG/QES contract observables
+observables_used: [contract_valid, runtime_ready, setup_row_vc_state, null_scenario_state, qes_extremum_x_star, qes_reader_shift, boundary_classification_state]
+ssp_value: no
+
+**observable_contract**: claim=il vuoto QxG diventa interrogabile solo se lo stesso denominatore preserva due letture distinguibili TxQ e TxG senza promuovere QxG; observable=classificazione riga-per-riga in `BLANK`, `QxG_CANDIDATE`, `FALL`; operator=modello deterministico `S_gen(x)=area_term(x)+S_bulk(x)+coupling_term(x)` e classificatore two-reader; generator=`tools/qxg_contract_smoke.py`, `tools/qxg_setup_row_operator.py`, `tools/qxg_qes_null_builder.py`, `tools/qxg_qes_observation_producer.py`, `tools/qxg_boundary_classifier.py`; denominator=3 osservazioni row-aligned sul denominatore primario `S_gen = A/(4 l_P^2) + S_bulk`; p_value_definition=not_used/no Monte Carlo; non_possible=promuovere QxG da area-only, S_bulk-only, cambio di denominatore, regime semiclassico grande trattato come QxG, o single-reader promotion; not_tested=misura fisica reale, provider runtime, paper-level QES data, aggiornamento seme/grafo.
+
+## Prima impressione
+
+Il confine non e' nel nome QxG. Il confine appare quando un denominatore tiene insieme area e bulk: togliendo uno dei due lettori, il candidato cade a `BLANK`; con entrambi, il classificatore vede un evento interno ma lo lascia come domanda.
+
+## Respiro fuori-tempo
+
+- **Combo**: A9 terzo incluso + A11 combo + lato vuoto QxG del tetraedro + tensione BOUNDARY "8 domini GUE, 5 Poisson: il confine e' il terzo incluso operativo" + incrocio TxQ/TxG.
+- **Dipolo / punto-zero**: lettore singolo / lettore doppio. Punto-zero: `S_gen = A/(4 l_P^2) + S_bulk`, dove area e bulk sono separabili ma nello stesso denominatore.
+- **Piano superiore**: grafo della conoscenza e bicono dei lettori, non nuova metrica GUE/Poisson.
+- **Proto-ipotesi**: un vuoto non si chiude nominando il ponte; diventa misurabile quando due lettori indipendenti sullo stesso denominatore producono un evento interno che i null one-reader non ricostruiscono.
+- **Possibile/non-possibile**: possibile = usare il classificatore come tool per preparare un futuro runtime QES; non-possibile = chiamare QxG ponte fisico, legge o edge accettato.
+- **Proiezione**: classificazione deterministica su 3 righe: due null one-reader e una co-presenza TxQ+TxG.
+- **Movimento A->M->B**: fisico A = bordo termico/gravitazionale-quantistico QES; matematica M = two-reader classifier su denominatore `S_gen`; fisico B tentato = domanda operativa su quando un evento QES richiede insieme area e bulk. B non viene promosso: resta tool/domanda.
+
+## Esperimento
+
+Pipeline eseguita senza API e senza `lab_agent`:
+
+1. `qxg_contract_smoke`: contratto valido, `runtime_ready=false`, decisione `NO_RUNTIME`.
+2. `qxg_setup_row_operator`: una riga candidata `qes_factorization_boundary`; due guardie `semiclassical_large_horizon` e `charge_or_gauge_censor`; nessuna riga rotta.
+3. `qxg_qes_null_builder`: null definito con due scenari, `preserve_txq_break_txg` e `preserve_txg_break_txq`.
+4. `qxg_qes_observation_producer`: modello deterministico con `area_only.x_star=-0.55`, `bulk_only.x_star=0.7`, `full_s_gen.x_star=0.019`.
+5. `qxg_boundary_classifier`: classificazione finale `BLANK=2`, `QxG_CANDIDATE=1`, `FALL=0`.
+
+## Risultati
+
+| row | scenario | state | reason |
+|---|---|---|---|
+| `qes_null_preserve_txq_break_txg` | preserve TxQ, break TxG | `BLANK` | no stable internal event under declared boundary |
+| `qes_null_preserve_txg_break_txq` | preserve TxG, break TxQ | `BLANK` | no stable internal event under declared boundary |
+| `qes_copresence_txq_txg` | co-presence TxQ+TxG | `QxG_CANDIDATE` | internal event requires TxQ and TxG on same denominator |
+
+Diagnostics del modello:
+
+```json
+{
+  "full_minus_area_only_abs": 0.569,
+  "full_minus_bulk_only_abs": 0.681,
+  "requires_txq": true,
+  "requires_txg": true,
+  "internal_event": true
+}
+```
+
+Verdict operativo: il boundary e' fit-ready come classificatore, non runtime-ready come scoperta fisica.
+
+## Aderenza alla direzione
+
+- `relation`: deliberate_counter_perimeter
+- `why`: la direzione viva cerca il confine come terzo incluso; questo ciclo non ripete Anderson ne' GUE/Poisson, ma costruisce il contro-perimetro formale che impedisce al vuoto QxG di diventare falsa chiusura.
+- `not_drift`: il test ha denominatore, null e classificazione riga-per-riga; non usa percolation/logistica, non usa metriche derivate del blocco L8, non promuove graph-only residue.
+- `return_criterion`: tornare al perimetro vivo solo dopo provider/runtime verificato oppure dopo una riga fisica QES reale che alimenti lo stesso classificatore.
+- `seed_residue`: resta non testato il perimetro empirico "8 domini GUE, 5 Poisson"; questo ciclo produce un tool di boundary, non un nuovo dominio.
+
+## Re-discovery audit
+
+Baseline nota piu' vicina: QES/generalized entropy usa `S_gen = A/(4G_N) + S_bulk` come struttura standard; il Lab non rivendica la formula. Resta lab-specifico il contratto two-reader con stop espliciti: one-reader null -> `BLANK`, co-presence su stesso denominatore -> `QxG_CANDIDATE`, single-reader promotion/regime misuse -> `FALL`.
+
+## Contaminazione cognitiva
+
+CE usati dal campo vivo:
+
+- `CE-0117` come metodo: cascata della possibilita', usata per non chiudere QxG e lasciare il candidato come tool/domanda.
+- `CE-0001` come kernel operativo: KSAR/reiterative semantic kernel, usato per reiterare contratto -> null -> osservazioni -> classificazione invece di saltare a promozione.
+
+Check L6 chiuso: cercati `tools/data/agent_field_live.md` righe CE, `tools/data/cognitive_enzymes_archive.md`, `tools/data/cognitive_enzymes_archive.json`, `tools/LAB_COGNITIVE_CONTAMINATION.md`; archivio presente e operativo, quindi non si usa `CE-none`.
+
+## Fonti e artefatti
+
+- Fonte autoritativa campo: `tools/data/agent_field_live.md`
+- Contesto Lab: `tools/LAB_AGENT_CONTEXT.md`
+- Contratto: `tools/data/qxg_txq_txg_fit_ready_contract_20260604.json`
+- Smoke: `tools/data/preflight/qxg_contract_smoke_20260604_1650.json`
+- Setup rows: `tools/data/preflight/qxg_setup_row_operator_20260604_1650.json`
+- Null: `tools/data/preflight/qxg_qes_null_20260604_1650.json`
+- Osservazioni: `tools/data/preflight/qxg_qes_observations_20260604_1650.json`
+- Classificatore: `tools/data/preflight/qxg_boundary_classifier_20260604_1650.json`
+
+## Verificato / inferito / non verificato
+
+- **Verificato**: contratto valido; runtime non pronto; 1 candidate row; 2 null BLANK; 1 co-presence candidate; nessun `FALL`; API key paid non presenti nell'ambiente.
+- **Inferito**: il classificatore e' utile come tool di ritorno a fisica B per QES, perche' separa domanda, null e caduta.
+- **Non verificato**: dati QES reali, provider runtime, robustezza su osservazioni esterne, integrazione nel grafo o nel seme.
+
+## Consecutio
+
+Non promuovere QxG. La prossima mossa utile e' fornire al classificatore una riga QES fisica o semireale con lo stesso schema (`denominator`, `readings_present`, `readings_missing`, `internal_event`, `promotes_qxg`, `regime`). Se la riga single-reader promuove QxG, cade in `FALL`; se la co-presenza non produce evento interno, il ramo resta `BLANK`; se ripete `QxG_CANDIDATE_WITH_NULLS`, allora si puo' chiedere provider/runtime o revisione operatore prima di qualsiasi ciclo autonomo.
+
+## Side effect
+
+Creati artefatti preflight 20260604_1650 e due markdown in `docs/operations`. Gli script `qxg_qes_observation_producer.py` e `qxg_boundary_classifier.py` hanno aggiornato anche i rispettivi `latest` preflight/docs secondo il loro comportamento interno. Non ho modificato `tools/data/seme.json`, `tools/data/lab_graph.json`, `tools/data/reports/latest.md` o superfici pubbliche.

codex
Report scritto. Faccio una verifica finale sui file prodotti e, se il falsifier locale accetta un report singolo, lo uso; altrimenti dichiaro esplicitamente il limite.
exec
/bin/bash -lc "sed -n '1,260p' tools/data/reports/agent_20260604_1650.md" in /opt/MM_D-ND
 succeeded in 0ms:
# Agent Report - QxG QES Two-Reader Boundary Classifier
**Date**: 2026-06-04 16:50 UTC
**Tension explored**: BOUNDARY / QxG void through TxQ+TxG two-reader boundary
**verdict**: CONSTRAINT / TOOL - Il contratto QxG mediato da TxQ e TxG produce una riga `QxG_CANDIDATE` solo quando `S_gen = A/(4 l_P^2) + S_bulk` contiene insieme lettore geometrico e lettore quantistico. I due null one-reader restano `BLANK`. QxG non viene promosso.
observables_registry: dedicated QxG/QES contract observables
observables_used: [contract_valid, runtime_ready, setup_row_vc_state, null_scenario_state, qes_extremum_x_star, qes_reader_shift, boundary_classification_state]
ssp_value: no

**observable_contract**: claim=il vuoto QxG diventa interrogabile solo se lo stesso denominatore preserva due letture distinguibili TxQ e TxG senza promuovere QxG; observable=classificazione riga-per-riga in `BLANK`, `QxG_CANDIDATE`, `FALL`; operator=modello deterministico `S_gen(x)=area_term(x)+S_bulk(x)+coupling_term(x)` e classificatore two-reader; generator=`tools/qxg_contract_smoke.py`, `tools/qxg_setup_row_operator.py`, `tools/qxg_qes_null_builder.py`, `tools/qxg_qes_observation_producer.py`, `tools/qxg_boundary_classifier.py`; denominator=3 osservazioni row-aligned sul denominatore primario `S_gen = A/(4 l_P^2) + S_bulk`; p_value_definition=not_used/no Monte Carlo; non_possible=promuovere QxG da area-only, S_bulk-only, cambio di denominatore, regime semiclassico grande trattato come QxG, o single-reader promotion; not_tested=misura fisica reale, provider runtime, paper-level QES data, aggiornamento seme/grafo.

## Prima impressione

Il confine non e' nel nome QxG. Il confine appare quando un denominatore tiene insieme area e bulk: togliendo uno dei due lettori, il candidato cade a `BLANK`; con entrambi, il classificatore vede un evento interno ma lo lascia come domanda.

## Respiro fuori-tempo

- **Combo**: A9 terzo incluso + A11 combo + lato vuoto QxG del tetraedro + tensione BOUNDARY "8 domini GUE, 5 Poisson: il confine e' il terzo incluso operativo" + incrocio TxQ/TxG.
- **Dipolo / punto-zero**: lettore singolo / lettore doppio. Punto-zero: `S_gen = A/(4 l_P^2) + S_bulk`, dove area e bulk sono separabili ma nello stesso denominatore.
- **Piano superiore**: grafo della conoscenza e bicono dei lettori, non nuova metrica GUE/Poisson.
- **Proto-ipotesi**: un vuoto non si chiude nominando il ponte; diventa misurabile quando due lettori indipendenti sullo stesso denominatore producono un evento interno che i null one-reader non ricostruiscono.
- **Possibile/non-possibile**: possibile = usare il classificatore come tool per preparare un futuro runtime QES; non-possibile = chiamare QxG ponte fisico, legge o edge accettato.
- **Proiezione**: classificazione deterministica su 3 righe: due null one-reader e una co-presenza TxQ+TxG.
- **Movimento A->M->B**: fisico A = bordo termico/gravitazionale-quantistico QES; matematica M = two-reader classifier su denominatore `S_gen`; fisico B tentato = domanda operativa su quando un evento QES richiede insieme area e bulk. B non viene promosso: resta tool/domanda.

## Esperimento

Pipeline eseguita senza API e senza `lab_agent`:

1. `qxg_contract_smoke`: contratto valido, `runtime_ready=false`, decisione `NO_RUNTIME`.
2. `qxg_setup_row_operator`: una riga candidata `qes_factorization_boundary`; due guardie `semiclassical_large_horizon` e `charge_or_gauge_censor`; nessuna riga rotta.
3. `qxg_qes_null_builder`: null definito con due scenari, `preserve_txq_break_txg` e `preserve_txg_break_txq`.
4. `qxg_qes_observation_producer`: modello deterministico con `area_only.x_star=-0.55`, `bulk_only.x_star=0.7`, `full_s_gen.x_star=0.019`.
5. `qxg_boundary_classifier`: classificazione finale `BLANK=2`, `QxG_CANDIDATE=1`, `FALL=0`.

## Risultati

| row | scenario | state | reason |
|---|---|---|---|
| `qes_null_preserve_txq_break_txg` | preserve TxQ, break TxG | `BLANK` | no stable internal event under declared boundary |
| `qes_null_preserve_txg_break_txq` | preserve TxG, break TxQ | `BLANK` | no stable internal event under declared boundary |
| `qes_copresence_txq_txg` | co-presence TxQ+TxG | `QxG_CANDIDATE` | internal event requires TxQ and TxG on same denominator |

Diagnostics del modello:

```json
{
  "full_minus_area_only_abs": 0.569,
  "full_minus_bulk_only_abs": 0.681,
  "requires_txq": true,
  "requires_txg": true,
  "internal_event": true
}
```

Verdict operativo: il boundary e' fit-ready come classificatore, non runtime-ready come scoperta fisica.

## Aderenza alla direzione

- `relation`: deliberate_counter_perimeter
- `why`: la direzione viva cerca il confine come terzo incluso; questo ciclo non ripete Anderson ne' GUE/Poisson, ma costruisce il contro-perimetro formale che impedisce al vuoto QxG di diventare falsa chiusura.
- `not_drift`: il test ha denominatore, null e classificazione riga-per-riga; non usa percolation/logistica, non usa metriche derivate del blocco L8, non promuove graph-only residue.
- `return_criterion`: tornare al perimetro vivo solo dopo provider/runtime verificato oppure dopo una riga fisica QES reale che alimenti lo stesso classificatore.
- `seed_residue`: resta non testato il perimetro empirico "8 domini GUE, 5 Poisson"; questo ciclo produce un tool di boundary, non un nuovo dominio.

## Re-discovery audit

Baseline nota piu' vicina: QES/generalized entropy usa `S_gen = A/(4G_N) + S_bulk` come struttura standard; il Lab non rivendica la formula. Resta lab-specifico il contratto two-reader con stop espliciti: one-reader null -> `BLANK`, co-presence su stesso denominatore -> `QxG_CANDIDATE`, single-reader promotion/regime misuse -> `FALL`.

## Contaminazione cognitiva

CE usati dal campo vivo:

- `CE-0117` come metodo: cascata della possibilita', usata per non chiudere QxG e lasciare il candidato come tool/domanda.
- `CE-0001` come kernel operativo: KSAR/reiterative semantic kernel, usato per reiterare contratto -> null -> osservazioni -> classificazione invece di saltare a promozione.

Check L6 chiuso: cercati `tools/data/agent_field_live.md` righe CE, `tools/data/cognitive_enzymes_archive.md`, `tools/data/cognitive_enzymes_archive.json`, `tools/LAB_COGNITIVE_CONTAMINATION.md`; archivio presente e operativo, quindi non si usa `CE-none`.

## Fonti e artefatti

- Fonte autoritativa campo: `tools/data/agent_field_live.md`
- Contesto Lab: `tools/LAB_AGENT_CONTEXT.md`
- Contratto: `tools/data/qxg_txq_txg_fit_ready_contract_20260604.json`
- Smoke: `tools/data/preflight/qxg_contract_smoke_20260604_1650.json`
- Setup rows: `tools/data/preflight/qxg_setup_row_operator_20260604_1650.json`
- Null: `tools/data/preflight/qxg_qes_null_20260604_1650.json`
- Osservazioni: `tools/data/preflight/qxg_qes_observations_20260604_1650.json`
- Classificatore: `tools/data/preflight/qxg_boundary_classifier_20260604_1650.json`

## Verificato / inferito / non verificato

- **Verificato**: contratto valido; runtime non pronto; 1 candidate row; 2 null BLANK; 1 co-presence candidate; nessun `FALL`; API key paid non presenti nell'ambiente.
- **Inferito**: il classificatore e' utile come tool di ritorno a fisica B per QES, perche' separa domanda, null e caduta.
- **Non verificato**: dati QES reali, provider runtime, robustezza su osservazioni esterne, integrazione nel grafo o nel seme.

## Consecutio

Non promuovere QxG. La prossima mossa utile e' fornire al classificatore una riga QES fisica o semireale con lo stesso schema (`denominator`, `readings_present`, `readings_missing`, `internal_event`, `promotes_qxg`, `regime`). Se la riga single-reader promuove QxG, cade in `FALL`; se la co-presenza non produce evento interno, il ramo resta `BLANK`; se ripete `QxG_CANDIDATE_WITH_NULLS`, allora si puo' chiedere provider/runtime o revisione operatore prima di qualsiasi ciclo autonomo.

## Side effect

Creati artefatti preflight 20260604_1650 e due markdown in `docs/operations`. Gli script `qxg_qes_observation_producer.py` e `qxg_boundary_classifier.py` hanno aggiornato anche i rispettivi `latest` preflight/docs secondo il loro comportamento interno. Non ho modificato `tools/data/seme.json`, `tools/data/lab_graph.json`, `tools/data/reports/latest.md` o superfici pubbliche.

exec
/bin/bash -lc "python3 tools/lab_falsifier.py --help | sed -n '1,180p'" in /opt/MM_D-ND
 succeeded in 0ms:
usage: lab_falsifier.py [-h] --report REPORT --output OUTPUT
                        [--timeout TIMEOUT]

Counter-pole gate for the lab

options:
  -h, --help         show this help message and exit
  --report REPORT    Path to agent_TS.md
  --output OUTPUT    Path for falsifier_TS.json output
  --timeout TIMEOUT  LLM call timeout seconds

exec
/bin/bash -lc 'git status --short -- tools/data/reports/agent_20260604_1650.md tools/data/preflight/qxg_contract_smoke_20260604_1650.json tools/data/preflight/qxg_setup_row_operator_20260604_1650.json tools/data/preflight/qxg_qes_null_20260604_1650.json tools/data/preflight/qxg_qes_observations_20260604_1650.json tools/data/preflight/qxg_boundary_classifier_20260604_1650.json docs/operations/qxg_qes_observations_20260604_1650.md docs/operations/qxg_boundary_classifier_20260604_1650.md tools/data/preflight/qxg_qes_observations_latest.json tools/data/preflight/qxg_boundary_classifier_latest.json docs/operations/qxg_qes_observations_latest.md docs/operations/qxg_boundary_classifier_latest.md' in /opt/MM_D-ND
 succeeded in 0ms:
?? docs/operations/qxg_boundary_classifier_20260604_1650.md
?? docs/operations/qxg_boundary_classifier_latest.md
?? docs/operations/qxg_qes_observations_20260604_1650.md
?? docs/operations/qxg_qes_observations_latest.md
?? tools/data/preflight/qxg_boundary_classifier_20260604_1650.json
?? tools/data/preflight/qxg_boundary_classifier_latest.json
?? tools/data/preflight/qxg_contract_smoke_20260604_1650.json
?? tools/data/preflight/qxg_qes_null_20260604_1650.json
?? tools/data/preflight/qxg_qes_observations_20260604_1650.json
?? tools/data/preflight/qxg_qes_observations_latest.json
?? tools/data/preflight/qxg_setup_row_operator_20260604_1650.json
?? tools/data/reports/agent_20260604_1650.md

diff --git a/tools/data/reports/agent_20260604_1650.md b/tools/data/reports/agent_20260604_1650.md
new file mode 100644
index 0000000000000000000000000000000000000000..5784b4c293bd9dc4f0819080d0f581b4aaecbea5
--- /dev/null
+++ b/tools/data/reports/agent_20260604_1650.md
@@ -0,0 +1,101 @@
+# Agent Report - QxG QES Two-Reader Boundary Classifier
+**Date**: 2026-06-04 16:50 UTC
+**Tension explored**: BOUNDARY / QxG void through TxQ+TxG two-reader boundary
+**verdict**: CONSTRAINT / TOOL - Il contratto QxG mediato da TxQ e TxG produce una riga `QxG_CANDIDATE` solo quando `S_gen = A/(4 l_P^2) + S_bulk` contiene insieme lettore geometrico e lettore quantistico. I due null one-reader restano `BLANK`. QxG non viene promosso.
+observables_registry: dedicated QxG/QES contract observables
+observables_used: [contract_valid, runtime_ready, setup_row_vc_state, null_scenario_state, qes_extremum_x_star, qes_reader_shift, boundary_classification_state]
+ssp_value: no
+
+**observable_contract**: claim=il vuoto QxG diventa interrogabile solo se lo stesso denominatore preserva due letture distinguibili TxQ e TxG senza promuovere QxG; observable=classificazione riga-per-riga in `BLANK`, `QxG_CANDIDATE`, `FALL`; operator=modello deterministico `S_gen(x)=area_term(x)+S_bulk(x)+coupling_term(x)` e classificatore two-reader; generator=`tools/qxg_contract_smoke.py`, `tools/qxg_setup_row_operator.py`, `tools/qxg_qes_null_builder.py`, `tools/qxg_qes_observation_producer.py`, `tools/qxg_boundary_classifier.py`; denominator=3 osservazioni row-aligned sul denominatore primario `S_gen = A/(4 l_P^2) + S_bulk`; p_value_definition=not_used/no Monte Carlo; non_possible=promuovere QxG da area-only, S_bulk-only, cambio di denominatore, regime semiclassico grande trattato come QxG, o single-reader promotion; not_tested=misura fisica reale, provider runtime, paper-level QES data, aggiornamento seme/grafo.
+
+## Prima impressione
+
+Il confine non e' nel nome QxG. Il confine appare quando un denominatore tiene insieme area e bulk: togliendo uno dei due lettori, il candidato cade a `BLANK`; con entrambi, il classificatore vede un evento interno ma lo lascia come domanda.
+
+## Respiro fuori-tempo
+
+- **Combo**: A9 terzo incluso + A11 combo + lato vuoto QxG del tetraedro + tensione BOUNDARY "8 domini GUE, 5 Poisson: il confine e' il terzo incluso operativo" + incrocio TxQ/TxG.
+- **Dipolo / punto-zero**: lettore singolo / lettore doppio. Punto-zero: `S_gen = A/(4 l_P^2) + S_bulk`, dove area e bulk sono separabili ma nello stesso denominatore.
+- **Piano superiore**: grafo della conoscenza e bicono dei lettori, non nuova metrica GUE/Poisson.
+- **Proto-ipotesi**: un vuoto non si chiude nominando il ponte; diventa misurabile quando due lettori indipendenti sullo stesso denominatore producono un evento interno che i null one-reader non ricostruiscono.
+- **Possibile/non-possibile**: possibile = usare il classificatore come tool per preparare un futuro runtime QES; non-possibile = chiamare QxG ponte fisico, legge o edge accettato.
+- **Proiezione**: classificazione deterministica su 3 righe: due null one-reader e una co-presenza TxQ+TxG.
+- **Movimento A->M->B**: fisico A = bordo termico/gravitazionale-quantistico QES; matematica M = two-reader classifier su denominatore `S_gen`; fisico B tentato = domanda operativa su quando un evento QES richiede insieme area e bulk. B non viene promosso: resta tool/domanda.
+
+## Esperimento
+
+Pipeline eseguita senza API e senza `lab_agent`:
+
+1. `qxg_contract_smoke`: contratto valido, `runtime_ready=false`, decisione `NO_RUNTIME`.
+2. `qxg_setup_row_operator`: una riga candidata `qes_factorization_boundary`; due guardie `semiclassical_large_horizon` e `charge_or_gauge_censor`; nessuna riga rotta.
+3. `qxg_qes_null_builder`: null definito con due scenari, `preserve_txq_break_txg` e `preserve_txg_break_txq`.
+4. `qxg_qes_observation_producer`: modello deterministico con `area_only.x_star=-0.55`, `bulk_only.x_star=0.7`, `full_s_gen.x_star=0.019`.
+5. `qxg_boundary_classifier`: classificazione finale `BLANK=2`, `QxG_CANDIDATE=1`, `FALL=0`.
+
+## Risultati
+
+| row | scenario | state | reason |
+|---|---|---|---|
+| `qes_null_preserve_txq_break_txg` | preserve TxQ, break TxG | `BLANK` | no stable internal event under declared boundary |
+| `qes_null_preserve_txg_break_txq` | preserve TxG, break TxQ | `BLANK` | no stable internal event under declared boundary |
+| `qes_copresence_txq_txg` | co-presence TxQ+TxG | `QxG_CANDIDATE` | internal event requires TxQ and TxG on same denominator |
+
+Diagnostics del modello:
+
+```json
+{
+  "full_minus_area_only_abs": 0.569,
+  "full_minus_bulk_only_abs": 0.681,
+  "requires_txq": true,
+  "requires_txg": true,
+  "internal_event": true
+}
+```
+
+Verdict operativo: il boundary e' fit-ready come classificatore, non runtime-ready come scoperta fisica.
+
+## Aderenza alla direzione
+
+- `relation`: deliberate_counter_perimeter
+- `why`: la direzione viva cerca il confine come terzo incluso; questo ciclo non ripete Anderson ne' GUE/Poisson, ma costruisce il contro-perimetro formale che impedisce al vuoto QxG di diventare falsa chiusura.
+- `not_drift`: il test ha denominatore, null e classificazione riga-per-riga; non usa percolation/logistica, non usa metriche derivate del blocco L8, non promuove graph-only residue.
+- `return_criterion`: tornare al perimetro vivo solo dopo provider/runtime verificato oppure dopo una riga fisica QES reale che alimenti lo stesso classificatore.
+- `seed_residue`: resta non testato il perimetro empirico "8 domini GUE, 5 Poisson"; questo ciclo produce un tool di boundary, non un nuovo dominio.
+
+## Re-discovery audit
+
+Baseline nota piu' vicina: QES/generalized entropy usa `S_gen = A/(4G_N) + S_bulk` come struttura standard; il Lab non rivendica la formula. Resta lab-specifico il contratto two-reader con stop espliciti: one-reader null -> `BLANK`, co-presence su stesso denominatore -> `QxG_CANDIDATE`, single-reader promotion/regime misuse -> `FALL`.
+
+## Contaminazione cognitiva
+
+CE usati dal campo vivo:
+
+- `CE-0117` come metodo: cascata della possibilita', usata per non chiudere QxG e lasciare il candidato come tool/domanda.
+- `CE-0001` come kernel operativo: KSAR/reiterative semantic kernel, usato per reiterare contratto -> null -> osservazioni -> classificazione invece di saltare a promozione.
+
+Check L6 chiuso: cercati `tools/data/agent_field_live.md` righe CE, `tools/data/cognitive_enzymes_archive.md`, `tools/data/cognitive_enzymes_archive.json`, `tools/LAB_COGNITIVE_CONTAMINATION.md`; archivio presente e operativo, quindi non si usa `CE-none`.
+
+## Fonti e artefatti
+
+- Fonte autoritativa campo: `tools/data/agent_field_live.md`
+- Contesto Lab: `tools/LAB_AGENT_CONTEXT.md`
+- Contratto: `tools/data/qxg_txq_txg_fit_ready_contract_20260604.json`
+- Smoke: `tools/data/preflight/qxg_contract_smoke_20260604_1650.json`
+- Setup rows: `tools/data/preflight/qxg_setup_row_operator_20260604_1650.json`
+- Null: `tools/data/preflight/qxg_qes_null_20260604_1650.json`
+- Osservazioni: `tools/data/preflight/qxg_qes_observations_20260604_1650.json`
+- Classificatore: `tools/data/preflight/qxg_boundary_classifier_20260604_1650.json`
+
+## Verificato / inferito / non verificato
+
+- **Verificato**: contratto valido; runtime non pronto; 1 candidate row; 2 null BLANK; 1 co-presence candidate; nessun `FALL`; API key paid non presenti nell'ambiente.
+- **Inferito**: il classificatore e' utile come tool di ritorno a fisica B per QES, perche' separa domanda, null e caduta.
+- **Non verificato**: dati QES reali, provider runtime, robustezza su osservazioni esterne, integrazione nel grafo o nel seme.
+
+## Consecutio
+
+Non promuovere QxG. La prossima mossa utile e' fornire al classificatore una riga QES fisica o semireale con lo stesso schema (`denominator`, `readings_present`, `readings_missing`, `internal_event`, `promotes_qxg`, `regime`). Se la riga single-reader promuove QxG, cade in `FALL`; se la co-presenza non produce evento interno, il ramo resta `BLANK`; se ripete `QxG_CANDIDATE_WITH_NULLS`, allora si puo' chiedere provider/runtime o revisione operatore prima di qualsiasi ciclo autonomo.
+
+## Side effect
+
+Creati artefatti preflight 20260604_1650 e due markdown in `docs/operations`. Gli script `qxg_qes_observation_producer.py` e `qxg_boundary_classifier.py` hanno aggiornato anche i rispettivi `latest` preflight/docs secondo il loro comportamento interno. Non ho modificato `tools/data/seme.json`, `tools/data/lab_graph.json`, `tools/data/reports/latest.md` o superfici pubbliche.

codex
Il falsifier richiede una chiamata LLM (`lab_falsifier.py --report ...`), quindi non lo lancio in questo contesto: non ci sono API key paid nell'ambiente e il ciclo e' dichiarato no-runtime. Verifico invece integrita' JSON e presenza degli artefatti locali.
exec
/bin/bash -lc 'wc -l tools/data/reports/agent_20260604_1650.md tools/data/preflight/qxg_contract_smoke_20260604_1650.json tools/data/preflight/qxg_setup_row_operator_20260604_1650.json tools/data/preflight/qxg_qes_null_20260604_1650.json tools/data/preflight/qxg_qes_observations_20260604_1650.json tools/data/preflight/qxg_boundary_classifier_20260604_1650.json docs/operations/qxg_qes_observations_20260604_1650.md docs/operations/qxg_boundary_classifier_20260604_1650.md' in /opt/MM_D-ND
 succeeded in 0ms:
  101 tools/data/reports/agent_20260604_1650.md
   30 tools/data/preflight/qxg_contract_smoke_20260604_1650.json
  118 tools/data/preflight/qxg_setup_row_operator_20260604_1650.json
   61 tools/data/preflight/qxg_qes_null_20260604_1650.json
  106 tools/data/preflight/qxg_qes_observations_20260604_1650.json
   85 tools/data/preflight/qxg_boundary_classifier_20260604_1650.json
   65 docs/operations/qxg_qes_observations_20260604_1650.md
   54 docs/operations/qxg_boundary_classifier_20260604_1650.md
  620 total

exec
/bin/bash -lc 'python3 -m json.tool tools/data/preflight/qxg_contract_smoke_20260604_1650.json >/dev/null && python3 -m json.tool tools/data/preflight/qxg_setup_row_operator_20260604_1650.json >/dev/null && python3 -m json.tool tools/data/preflight/qxg_qes_null_20260604_1650.json >/dev/null && python3 -m json.tool tools/data/preflight/qxg_qes_observations_20260604_1650.json >/dev/null && python3 -m json.tool tools/data/preflight/qxg_boundary_classifier_20260604_1650.json >/dev/null && echo json_ok' in /opt/MM_D-ND
exec
/bin/bash -lc 'git diff --stat -- tools/data/reports/agent_20260604_1650.md tools/data/preflight/qxg_contract_smoke_20260604_1650.json tools/data/preflight/qxg_setup_row_operator_20260604_1650.json tools/data/preflight/qxg_qes_null_20260604_1650.json tools/data/preflight/qxg_qes_observations_20260604_1650.json tools/data/preflight/qxg_boundary_classifier_20260604_1650.json docs/operations/qxg_qes_observations_20260604_1650.md docs/operations/qxg_boundary_classifier_20260604_1650.md' in /opt/MM_D-ND
 succeeded in 0ms:
diff --git a/tools/data/reports/agent_20260604_1650.md b/tools/data/reports/agent_20260604_1650.md
new file mode 100644
index 0000000000000000000000000000000000000000..5784b4c293bd9dc4f0819080d0f581b4aaecbea5
--- /dev/null
+++ b/tools/data/reports/agent_20260604_1650.md
@@ -0,0 +1,101 @@
+# Agent Report - QxG QES Two-Reader Boundary Classifier
+**Date**: 2026-06-04 16:50 UTC
+**Tension explored**: BOUNDARY / QxG void through TxQ+TxG two-reader boundary
+**verdict**: CONSTRAINT / TOOL - Il contratto QxG mediato da TxQ e TxG produce una riga `QxG_CANDIDATE` solo quando `S_gen = A/(4 l_P^2) + S_bulk` contiene insieme lettore geometrico e lettore quantistico. I due null one-reader restano `BLANK`. QxG non viene promosso.
+observables_registry: dedicated QxG/QES contract observables
+observables_used: [contract_valid, runtime_ready, setup_row_vc_state, null_scenario_state, qes_extremum_x_star, qes_reader_shift, boundary_classification_state]
+ssp_value: no
+
+**observable_contract**: claim=il vuoto QxG diventa interrogabile solo se lo stesso denominatore preserva due letture distinguibili TxQ e TxG senza promuovere QxG; observable=classificazione riga-per-riga in `BLANK`, `QxG_CANDIDATE`, `FALL`; operator=modello deterministico `S_gen(x)=area_term(x)+S_bulk(x)+coupling_term(x)` e classificatore two-reader; generator=`tools/qxg_contract_smoke.py`, `tools/qxg_setup_row_operator.py`, `tools/qxg_qes_null_builder.py`, `tools/qxg_qes_observation_producer.py`, `tools/qxg_boundary_classifier.py`; denominator=3 osservazioni row-aligned sul denominatore primario `S_gen = A/(4 l_P^2) + S_bulk`; p_value_definition=not_used/no Monte Carlo; non_possible=promuovere QxG da area-only, S_bulk-only, cambio di denominatore, regime semiclassico grande trattato come QxG, o single-reader promotion; not_tested=misura fisica reale, provider runtime, paper-level QES data, aggiornamento seme/grafo.
+
+## Prima impressione
+
+Il confine non e' nel nome QxG. Il confine appare quando un denominatore tiene insieme area e bulk: togliendo uno dei due lettori, il candidato cade a `BLANK`; con entrambi, il classificatore vede un evento interno ma lo lascia come domanda.
+
+## Respiro fuori-tempo
+
+- **Combo**: A9 terzo incluso + A11 combo + lato vuoto QxG del tetraedro + tensione BOUNDARY "8 domini GUE, 5 Poisson: il confine e' il terzo incluso operativo" + incrocio TxQ/TxG.
+- **Dipolo / punto-zero**: lettore singolo / lettore doppio. Punto-zero: `S_gen = A/(4 l_P^2) + S_bulk`, dove area e bulk sono separabili ma nello stesso denominatore.
+- **Piano superiore**: grafo della conoscenza e bicono dei lettori, non nuova metrica GUE/Poisson.
+- **Proto-ipotesi**: un vuoto non si chiude nominando il ponte; diventa misurabile quando due lettori indipendenti sullo stesso denominatore producono un evento interno che i null one-reader non ricostruiscono.
+- **Possibile/non-possibile**: possibile = usare il classificatore come tool per preparare un futuro runtime QES; non-possibile = chiamare QxG ponte fisico, legge o edge accettato.
+- **Proiezione**: classificazione deterministica su 3 righe: due null one-reader e una co-presenza TxQ+TxG.
+- **Movimento A->M->B**: fisico A = bordo termico/gravitazionale-quantistico QES; matematica M = two-reader classifier su denominatore `S_gen`; fisico B tentato = domanda operativa su quando un evento QES richiede insieme area e bulk. B non viene promosso: resta tool/domanda.
+
+## Esperimento
+
+Pipeline eseguita senza API e senza `lab_agent`:
+
+1. `qxg_contract_smoke`: contratto valido, `runtime_ready=false`, decisione `NO_RUNTIME`.
+2. `qxg_setup_row_operator`: una riga candidata `qes_factorization_boundary`; due guardie `semiclassical_large_horizon` e `charge_or_gauge_censor`; nessuna riga rotta.
+3. `qxg_qes_null_builder`: null definito con due scenari, `preserve_txq_break_txg` e `preserve_txg_break_txq`.
+4. `qxg_qes_observation_producer`: modello deterministico con `area_only.x_star=-0.55`, `bulk_only.x_star=0.7`, `full_s_gen.x_star=0.019`.
+5. `qxg_boundary_classifier`: classificazione finale `BLANK=2`, `QxG_CANDIDATE=1`, `FALL=0`.
+
+## Risultati
+
+| row | scenario | state | reason |
+|---|---|---|---|
+| `qes_null_preserve_txq_break_txg` | preserve TxQ, break TxG | `BLANK` | no stable internal event under declared boundary |
+| `qes_null_preserve_txg_break_txq` | preserve TxG, break TxQ | `BLANK` | no stable internal event under declared boundary |
+| `qes_copresence_txq_txg` | co-presence TxQ+TxG | `QxG_CANDIDATE` | internal event requires TxQ and TxG on same denominator |
+
+Diagnostics del modello:
+
+```json
+{
+  "full_minus_area_only_abs": 0.569,
+  "full_minus_bulk_only_abs": 0.681,
+  "requires_txq": true,
+  "requires_txg": true,
+  "internal_event": true
+}
+```
+
+Verdict operativo: il boundary e' fit-ready come classificatore, non runtime-ready come scoperta fisica.
+
+## Aderenza alla direzione
+
+- `relation`: deliberate_counter_perimeter
+- `why`: la direzione viva cerca il confine come terzo incluso; questo ciclo non ripete Anderson ne' GUE/Poisson, ma costruisce il contro-perimetro formale che impedisce al vuoto QxG di diventare falsa chiusura.
+- `not_drift`: il test ha denominatore, null e classificazione riga-per-riga; non usa percolation/logistica, non usa metriche derivate del blocco L8, non promuove graph-only residue.
+- `return_criterion`: tornare al perimetro vivo solo dopo provider/runtime verificato oppure dopo una riga fisica QES reale che alimenti lo stesso classificatore.
+- `seed_residue`: resta non testato il perimetro empirico "8 domini GUE, 5 Poisson"; questo ciclo produce un tool di boundary, non un nuovo dominio.
+
+## Re-discovery audit
+
+Baseline nota piu' vicina: QES/generalized entropy usa `S_gen = A/(4G_N) + S_bulk` come struttura standard; il Lab non rivendica la formula. Resta lab-specifico il contratto two-reader con stop espliciti: one-reader null -> `BLANK`, co-presence su stesso denominatore -> `QxG_CANDIDATE`, single-reader promotion/regime misuse -> `FALL`.
+
+## Contaminazione cognitiva
+
+CE usati dal campo vivo:
+
+- `CE-0117` come metodo: cascata della possibilita', usata per non chiudere QxG e lasciare il candidato come tool/domanda.
+- `CE-0001` come kernel operativo: KSAR/reiterative semantic kernel, usato per reiterare contratto -> null -> osservazioni -> classificazione invece di saltare a promozione.
+
+Check L6 chiuso: cercati `tools/data/agent_field_live.md` righe CE, `tools/data/cognitive_enzymes_archive.md`, `tools/data/cognitive_enzymes_archive.json`, `tools/LAB_COGNITIVE_CONTAMINATION.md`; archivio presente e operativo, quindi non si usa `CE-none`.
+
+## Fonti e artefatti
+
+- Fonte autoritativa campo: `tools/data/agent_field_live.md`
+- Contesto Lab: `tools/LAB_AGENT_CONTEXT.md`
+- Contratto: `tools/data/qxg_txq_txg_fit_ready_contract_20260604.json`
+- Smoke: `tools/data/preflight/qxg_contract_smoke_20260604_1650.json`
+- Setup rows: `tools/data/preflight/qxg_setup_row_operator_20260604_1650.json`
+- Null: `tools/data/preflight/qxg_qes_null_20260604_1650.json`
+- Osservazioni: `tools/data/preflight/qxg_qes_observations_20260604_1650.json`
+- Classificatore: `tools/data/preflight/qxg_boundary_classifier_20260604_1650.json`
+
+## Verificato / inferito / non verificato
+
+- **Verificato**: contratto valido; runtime non pronto; 1 candidate row; 2 null BLANK; 1 co-presence candidate; nessun `FALL`; API key paid non presenti nell'ambiente.
+- **Inferito**: il classificatore e' utile come tool di ritorno a fisica B per QES, perche' separa domanda, null e caduta.
+- **Non verificato**: dati QES reali, provider runtime, robustezza su osservazioni esterne, integrazione nel grafo o nel seme.
+
+## Consecutio
+
+Non promuovere QxG. La prossima mossa utile e' fornire al classificatore una riga QES fisica o semireale con lo stesso schema (`denominator`, `readings_present`, `readings_missing`, `internal_event`, `promotes_qxg`, `regime`). Se la riga single-reader promuove QxG, cade in `FALL`; se la co-presenza non produce evento interno, il ramo resta `BLANK`; se ripete `QxG_CANDIDATE_WITH_NULLS`, allora si puo' chiedere provider/runtime o revisione operatore prima di qualsiasi ciclo autonomo.
+
+## Side effect
+
+Creati artefatti preflight 20260604_1650 e due markdown in `docs/operations`. Gli script `qxg_qes_observation_producer.py` e `qxg_boundary_classifier.py` hanno aggiornato anche i rispettivi `latest` preflight/docs secondo il loro comportamento interno. Non ho modificato `tools/data/seme.json`, `tools/data/lab_graph.json`, `tools/data/reports/latest.md` o superfici pubbliche.

 succeeded in 171ms:
json_ok

codex
Ruolo/funzione: AI-Lab D-ND, cycle manuale 20260604_1650.

Fonti lette: `tools/data/agent_field_live.md`, `tools/LAB_AGENT_CONTEXT.md`, shared memory recente, `tools/data/qxg_txq_txg_fit_ready_contract_20260604.json`.

Azioni eseguite:
- Eseguito esperimento QxG/QES controllato: contratto, setup rows, null, osservazioni deterministiche, classifier.
- Scritto il report richiesto: [agent_20260604_1650.md](/opt/MM_D-ND/tools/data/reports/agent_20260604_1650.md).
- Creati artefatti 1650 in `tools/data/preflight/` e markdown in `docs/operations/`.

Verificato:
- JSON artefatti valido (`json_ok`).
- Risultato classifier: `BLANK=2`, `QxG_CANDIDATE=1`, `FALL=0`.
- Nessuna API key paid presente nell’ambiente.
- Non ho modificato `seme.json`, `lab_graph.json` o `reports/latest.md`.

Non verificato:
- Falsifier LLM non lanciato: richiede chiamata LLM e questo ciclo e' no-runtime/no paid API.
- Nessuna promozione fisica QxG; il risultato resta `CONSTRAINT / TOOL`.

Side effect: gli script `qxg_qes_observation_producer.py` e `qxg_boundary_classifier.py` hanno aggiornato anche i rispettivi `latest` preflight/docs, come da comportamento interno.
diff --git a/tools/data/reports/agent_20260604_1650.md b/tools/data/reports/agent_20260604_1650.md
new file mode 100644
index 0000000000000000000000000000000000000000..5784b4c293bd9dc4f0819080d0f581b4aaecbea5
--- /dev/null
+++ b/tools/data/reports/agent_20260604_1650.md
@@ -0,0 +1,101 @@
+# Agent Report - QxG QES Two-Reader Boundary Classifier
+**Date**: 2026-06-04 16:50 UTC
+**Tension explored**: BOUNDARY / QxG void through TxQ+TxG two-reader boundary
+**verdict**: CONSTRAINT / TOOL - Il contratto QxG mediato da TxQ e TxG produce una riga `QxG_CANDIDATE` solo quando `S_gen = A/(4 l_P^2) + S_bulk` contiene insieme lettore geometrico e lettore quantistico. I due null one-reader restano `BLANK`. QxG non viene promosso.
+observables_registry: dedicated QxG/QES contract observables
+observables_used: [contract_valid, runtime_ready, setup_row_vc_state, null_scenario_state, qes_extremum_x_star, qes_reader_shift, boundary_classification_state]
+ssp_value: no
+
+**observable_contract**: claim=il vuoto QxG diventa interrogabile solo se lo stesso denominatore preserva due letture distinguibili TxQ e TxG senza promuovere QxG; observable=classificazione riga-per-riga in `BLANK`, `QxG_CANDIDATE`, `FALL`; operator=modello deterministico `S_gen(x)=area_term(x)+S_bulk(x)+coupling_term(x)` e classificatore two-reader; generator=`tools/qxg_contract_smoke.py`, `tools/qxg_setup_row_operator.py`, `tools/qxg_qes_null_builder.py`, `tools/qxg_qes_observation_producer.py`, `tools/qxg_boundary_classifier.py`; denominator=3 osservazioni row-aligned sul denominatore primario `S_gen = A/(4 l_P^2) + S_bulk`; p_value_definition=not_used/no Monte Carlo; non_possible=promuovere QxG da area-only, S_bulk-only, cambio di denominatore, regime semiclassico grande trattato come QxG, o single-reader promotion; not_tested=misura fisica reale, provider runtime, paper-level QES data, aggiornamento seme/grafo.
+
+## Prima impressione
+
+Il confine non e' nel nome QxG. Il confine appare quando un denominatore tiene insieme area e bulk: togliendo uno dei due lettori, il candidato cade a `BLANK`; con entrambi, il classificatore vede un evento interno ma lo lascia come domanda.
+
+## Respiro fuori-tempo
+
+- **Combo**: A9 terzo incluso + A11 combo + lato vuoto QxG del tetraedro + tensione BOUNDARY "8 domini GUE, 5 Poisson: il confine e' il terzo incluso operativo" + incrocio TxQ/TxG.
+- **Dipolo / punto-zero**: lettore singolo / lettore doppio. Punto-zero: `S_gen = A/(4 l_P^2) + S_bulk`, dove area e bulk sono separabili ma nello stesso denominatore.
+- **Piano superiore**: grafo della conoscenza e bicono dei lettori, non nuova metrica GUE/Poisson.
+- **Proto-ipotesi**: un vuoto non si chiude nominando il ponte; diventa misurabile quando due lettori indipendenti sullo stesso denominatore producono un evento interno che i null one-reader non ricostruiscono.
+- **Possibile/non-possibile**: possibile = usare il classificatore come tool per preparare un futuro runtime QES; non-possibile = chiamare QxG ponte fisico, legge o edge accettato.
+- **Proiezione**: classificazione deterministica su 3 righe: due null one-reader e una co-presenza TxQ+TxG.
+- **Movimento A->M->B**: fisico A = bordo termico/gravitazionale-quantistico QES; matematica M = two-reader classifier su denominatore `S_gen`; fisico B tentato = domanda operativa su quando un evento QES richiede insieme area e bulk. B non viene promosso: resta tool/domanda.
+
+## Esperimento
+
+Pipeline eseguita senza API e senza `lab_agent`:
+
+1. `qxg_contract_smoke`: contratto valido, `runtime_ready=false`, decisione `NO_RUNTIME`.
+2. `qxg_setup_row_operator`: una riga candidata `qes_factorization_boundary`; due guardie `semiclassical_large_horizon` e `charge_or_gauge_censor`; nessuna riga rotta.
+3. `qxg_qes_null_builder`: null definito con due scenari, `preserve_txq_break_txg` e `preserve_txg_break_txq`.
+4. `qxg_qes_observation_producer`: modello deterministico con `area_only.x_star=-0.55`, `bulk_only.x_star=0.7`, `full_s_gen.x_star=0.019`.
+5. `qxg_boundary_classifier`: classificazione finale `BLANK=2`, `QxG_CANDIDATE=1`, `FALL=0`.
+
+## Risultati
+
+| row | scenario | state | reason |
+|---|---|---|---|
+| `qes_null_preserve_txq_break_txg` | preserve TxQ, break TxG | `BLANK` | no stable internal event under declared boundary |
+| `qes_null_preserve_txg_break_txq` | preserve TxG, break TxQ | `BLANK` | no stable internal event under declared boundary |
+| `qes_copresence_txq_txg` | co-presence TxQ+TxG | `QxG_CANDIDATE` | internal event requires TxQ and TxG on same denominator |
+
+Diagnostics del modello:
+
+```json
+{
+  "full_minus_area_only_abs": 0.569,
+  "full_minus_bulk_only_abs": 0.681,
+  "requires_txq": true,
+  "requires_txg": true,
+  "internal_event": true
+}
+```
+
+Verdict operativo: il boundary e' fit-ready come classificatore, non runtime-ready come scoperta fisica.
+
+## Aderenza alla direzione
+
+- `relation`: deliberate_counter_perimeter
+- `why`: la direzione viva cerca il confine come terzo incluso; questo ciclo non ripete Anderson ne' GUE/Poisson, ma costruisce il contro-perimetro formale che impedisce al vuoto QxG di diventare falsa chiusura.
+- `not_drift`: il test ha denominatore, null e classificazione riga-per-riga; non usa percolation/logistica, non usa metriche derivate del blocco L8, non promuove graph-only residue.
+- `return_criterion`: tornare al perimetro vivo solo dopo provider/runtime verificato oppure dopo una riga fisica QES reale che alimenti lo stesso classificatore.
+- `seed_residue`: resta non testato il perimetro empirico "8 domini GUE, 5 Poisson"; questo ciclo produce un tool di boundary, non un nuovo dominio.
+
+## Re-discovery audit
+
+Baseline nota piu' vicina: QES/generalized entropy usa `S_gen = A/(4G_N) + S_bulk` come struttura standard; il Lab non rivendica la formula. Resta lab-specifico il contratto two-reader con stop espliciti: one-reader null -> `BLANK`, co-presence su stesso denominatore -> `QxG_CANDIDATE`, single-reader promotion/regime misuse -> `FALL`.
+
+## Contaminazione cognitiva
+
+CE usati dal campo vivo:
+
+- `CE-0117` come metodo: cascata della possibilita', usata per non chiudere QxG e lasciare il candidato come tool/domanda.
+- `CE-0001` come kernel operativo: KSAR/reiterative semantic kernel, usato per reiterare contratto -> null -> osservazioni -> classificazione invece di saltare a promozione.
+
+Check L6 chiuso: cercati `tools/data/agent_field_live.md` righe CE, `tools/data/cognitive_enzymes_archive.md`, `tools/data/cognitive_enzymes_archive.json`, `tools/LAB_COGNITIVE_CONTAMINATION.md`; archivio presente e operativo, quindi non si usa `CE-none`.
+
+## Fonti e artefatti
+
+- Fonte autoritativa campo: `tools/data/agent_field_live.md`
+- Contesto Lab: `tools/LAB_AGENT_CONTEXT.md`
+- Contratto: `tools/data/qxg_txq_txg_fit_ready_contract_20260604.json`
+- Smoke: `tools/data/preflight/qxg_contract_smoke_20260604_1650.json`
+- Setup rows: `tools/data/preflight/qxg_setup_row_operator_20260604_1650.json`
+- Null: `tools/data/preflight/qxg_qes_null_20260604_1650.json`
+- Osservazioni: `tools/data/preflight/qxg_qes_observations_20260604_1650.json`
+- Classificatore: `tools/data/preflight/qxg_boundary_classifier_20260604_1650.json`
+
+## Verificato / inferito / non verificato
+
+- **Verificato**: contratto valido; runtime non pronto; 1 candidate row; 2 null BLANK; 1 co-presence candidate; nessun `FALL`; API key paid non presenti nell'ambiente.
+- **Inferito**: il classificatore e' utile come tool di ritorno a fisica B per QES, perche' separa domanda, null e caduta.
+- **Non verificato**: dati QES reali, provider runtime, robustezza su osservazioni esterne, integrazione nel grafo o nel seme.
+
+## Consecutio
+
+Non promuovere QxG. La prossima mossa utile e' fornire al classificatore una riga QES fisica o semireale con lo stesso schema (`denominator`, `readings_present`, `readings_missing`, `internal_event`, `promotes_qxg`, `regime`). Se la riga single-reader promuove QxG, cade in `FALL`; se la co-presenza non produce evento interno, il ramo resta `BLANK`; se ripete `QxG_CANDIDATE_WITH_NULLS`, allora si puo' chiedere provider/runtime o revisione operatore prima di qualsiasi ciclo autonomo.
+
+## Side effect
+
+Creati artefatti preflight 20260604_1650 e due markdown in `docs/operations`. Gli script `qxg_qes_observation_producer.py` e `qxg_boundary_classifier.py` hanno aggiornato anche i rispettivi `latest` preflight/docs secondo il loro comportamento interno. Non ho modificato `tools/data/seme.json`, `tools/data/lab_graph.json`, `tools/data/reports/latest.md` o superfici pubbliche.

tokens used
115,879
Ruolo/funzione: AI-Lab D-ND, cycle manuale 20260604_1650.

Fonti lette: `tools/data/agent_field_live.md`, `tools/LAB_AGENT_CONTEXT.md`, shared memory recente, `tools/data/qxg_txq_txg_fit_ready_contract_20260604.json`.

Azioni eseguite:
- Eseguito esperimento QxG/QES controllato: contratto, setup rows, null, osservazioni deterministiche, classifier.
- Scritto il report richiesto: [agent_20260604_1650.md](/opt/MM_D-ND/tools/data/reports/agent_20260604_1650.md).
- Creati artefatti 1650 in `tools/data/preflight/` e markdown in `docs/operations/`.

Verificato:
- JSON artefatti valido (`json_ok`).
- Risultato classifier: `BLANK=2`, `QxG_CANDIDATE=1`, `FALL=0`.
- Nessuna API key paid presente nell’ambiente.
- Non ho modificato `seme.json`, `lab_graph.json` o `reports/latest.md`.

Non verificato:
- Falsifier LLM non lanciato: richiede chiamata LLM e questo ciclo e' no-runtime/no paid API.
- Nessuna promozione fisica QxG; il risultato resta `CONSTRAINT / TOOL`.

Side effect: gli script `qxg_qes_observation_producer.py` e `qxg_boundary_classifier.py` hanno aggiornato anche i rispettivi `latest` preflight/docs, come da comportamento interno.
