# Agent Report - Reader Regression Audit
**Date**: 2026-05-28 21:38
**Tension explored**: BOUNDARY / reader-regression of graph-only residues
**verdict**: CONSTRAINT - Nel perimetro corrente `13 x 27`, `logistica_biforcazione_var_3.5699:cycle_13` e `percolation:cycle_9` non sono promuovibili come candidati fisici. Il loro `27/27` viene ricostruito dal null fisico interno e da due reader separati (`centroid_only_no_knn`, `knn_only_no_centroid`). Il componente attivo e' la geometria del reader label/centroid/kNN applicata alle feature canoniche; non una dinamica fisica B osservabile nel perimetro attuale.
observables_registry: 1.0.0-2026-05-06 via boundary_graph_curvature_gate
observables_used: [target_graph_bridge_hits, physical_internal_null_hits, label_permutation_ge_full, degree_rewire_ge_full, feature_column_shuffle_ge_full, centroid_only_no_knn_hits, knn_only_no_centroid_hits]
ssp_value: yes

**observable_contract**: claim=il target graph-only e' reader-regressed se null fisico interno e due reader indipendenti ricostruiscono il full-reader hit; observable=target hit count su 27 letture row-aligned; operator=join regressivo tra physical-internal null, null label/degree/feature e reader centroid/kNN separati; denominator=13 righe BOUNDARY, 27 reader reads, physical null N=32, graph null N=128; p_value_definition=right-tail raw_p=k/N dai JSON sorgente, k = trial null con hit count >= observed full hits; non_possible=promuovere candidato fisico quando null fisico interno o reader-only projection ricostruiscono il full hit; not_tested=nuovi domini fisici, physical null N=128, prova analitica delle source label.

## Source directive
Seguita la direttiva one-shot in `tools/data/agent_field_live.md`: non cercare nuova promozione fisica degli stessi residui, non ripetere un preflight single-reader, trasformare il blocco in audit regressivo del reader BOUNDARY, confrontando null fisico interno, null graph/label-degree e almeno due reader indipendenti.

## Respiro fuori-tempo
- **Combo**: A9 terzo incluso + A11 combo + BOUNDARY `8 GUE / 5 Poisson` + grafo conoscenza come reader + CE-0001 KSAR come reiterazione regressiva del kernel 20:42.
- **Dipolo / punto-zero**: dinamica fisica interna / geometria del reader. Punto-zero: la stessa riga target quando il nome fisico resta fisso ma il generatore o il predicate del reader cambia.
- **Piano superiore**: grafo della conoscenza e bicono possibile/non-possibile; il reader e' trattato come superficie topologica, non come prova fisica.
- **Contaminazione cognitiva**: CE-0001 letto nel campo vivo come adapter KSAR; usato per reiterare il blocco 20:42 senza cambiare perimetro. CE-0117 resta sullo sfondo come cascata della possibilita': il risultato cade nel seme solo se diventa osservabile e portabile.
- **Proto-ipotesi**: se un target resta candidato quando separo centroid reader e kNN reader, e cade solo quando altero gruppi di feature, il residuo appartiene al predicate feature-label del reader.
- **Possibile/non-possibile**: possibile = costruire una cache row-aligned per futuri null fisici ad alto N; non-possibile = chiamare logistica/percolation candidati fisici nel perimetro corrente.
- **Movimento A->M->B**: fisico A = confine GUE/Poisson con residui logistica/percolation; matematica M = predicate kNN/centroid su feature canoniche; fisico B = null interno di orbita/cluster. B non emerge come costo: resta vincolo sul reader.

## Aderenza alla direzione
- `relation`: `follows_direction`
- `why`: l'esperimento chiude il blocco lasciato dal preflight usando il full `27/27` gia' computato, lo confronta con null graph/label-degree e separa due reader indipendenti.
- `not_drift`: non aggiunge domini, non torna a V_c/phi/Sturmian, non promuove i target; lavora sul nodo regressivo nominato dalla direzione viva.
- `seed_residue`: resta da alzare il physical null da N=32 a N=128 solo se serve quantificare meglio il costo, non per riaprire la promozione.
- `return_criterion`: ritorno al seme solo con cache row-aligned che produce, per ogni target, `observed 27/27` contro physical-null N>=128 e contro null graph N-matched sullo stesso denominatore.

## Blocco regressivo
- `block_origin`: `agent_20260528_2042` ha mostrato ricostruzione single-reader `128/128`; la direttiva chiede di non ripetere quel blocco ma di auditare il reader.
- `node_regressivo`: predicate BOUNDARY prima della fusione tra feature canoniche, label geometry, centroid e kNN.
- `dipolo`: fisico interno / reader matematico.
- `possibile/non-possibile`: possibile = audit computabile e row-aligned; non-possibile = promozione fisica dei due residui nel perimetro attuale.
- `det+1_patch_risk`: aumentare N o aggiungere nuovi domini per salvare il candidato accumula calcolo senza separare il reader.
- `det-1_next_move`: cache feature row-aligned che registra per ogni trial target le feature sostitutive e il risultato per ciascun reader, cosi il componente che ricostruisce resta tracciabile.
- `return_criterion`: se un target non e' ricostruito da physical-null N>=128 e cade anche sotto almeno un reader separato, il ramo puo' tornare a test fisico; altrimenti resta reader-regressed.

## Experiment Design
- **Script**: `tools/exp_boundary_reader_regression_audit.py`.
- **Run**: `python3 tools/exp_boundary_reader_regression_audit.py --out tools/data/boundary_reader_regression_audit_20260528_2138.json`.
- **Source fisica interna**: `tools/data/boundary_physical_internal_null_20260528_2042.json`.
- **Source graph/label-degree**: `tools/data/boundary_graph_mechanism_ablation_20260516_1230.json`.
- **Reader indipendenti**: `centroid_only_no_knn` e `knn_only_no_centroid`, confrontati col full reader sullo stesso denominatore `27`.
- **Non misurato**: nuovo full physical N=128; nuovi domini; proof fisica delle label.

## Results
| target | observed | physical null ge/full | label perm ge | degree rewire ge | feature shuffle ge | centroid-only | kNN-only | component |
|---|---:|---:|---:|---:|---:|---:|---:|---|
| `logistica_biforcazione_var_3.5699:cycle_13` | 27/27 | 32/32, full 32/32 | 62/128 | 1/128 | 4/128 | 27/27 | 27/27 | canonical features + label geometry |
| `percolation:cycle_9` | 27/27 | 31/32, full 31/32 | 69/128 | 95/128 | 31/128 | 27/27 | 27/27 | canonical + shuffle-z features + label geometry |

## Re-discovery audit
- **Baseline noto piu vicino**: kNN boundary stability, centroid-margin classifier, degree-preserving graph null, feature-column shuffle, percolation-on-graph.
- **Cosa assorbe il baseline**: entrambi i target sono ricostruiti da centroid-only e kNN-only in `27/27`; il nome fisico non aggiunge costo quando il null interno ricostruisce `32/32` per logistica e `31/32` per percolation.
- **Cosa resta Lab-specific**: la separazione regressiva fra target graph-only, null fisico interno e componenti del reader BOUNDARY sul denominatore vivo `8 GUE / 5 Poisson`.
- `two_reader_boundary_confirmed`: no.
- `graph_only_residue`: `logistica_biforcazione_var_3.5699:cycle_13`, `percolation:cycle_9`.
- `scope_change_declared`: no; il report resta sul full `27/27` disponibile, con physical null N=32.
- `graph_baseline_audit`: null label/degree/feature da `20260516_1230`, N=128, stesso target e stesso denominatore.

## Key Findings
1. Verificato: il full reader osserva entrambi i target in `27/27`.
2. Verificato: il null fisico interno ricostruisce logistica in `32/32` e percolation in `31/32` trial full.
3. Verificato: `centroid_only_no_knn` e `knn_only_no_centroid` ricostruiscono entrambi i target in `27/27`.
4. Verificato: logistica cade solo quando vengono ablate feature canoniche (`drop_without_canonical=9`); percolation cade con feature canoniche e shuffle-z (`drop_without_canonical=3`, `drop_without_shuffle_z=9`).
5. Inferito: il candidate hit e' generato dalla geometria label/centroid/kNN sulle feature canoniche, con shuffle-z aggiuntivo per percolation; non da un costo fisico interno visibile.

## Verdict
CONSTRAINT.

Il blocco non richiede nuova promozione, ma separazione del reader. Nel perimetro corrente la dinamica fisica e il reader matematico si confondono nel punto in cui feature canoniche e label geometry bastano a ricostruire il target. La riga puo' restare utile come caso-test del reader BOUNDARY; non entra come candidato fisico.

## Consecutio
Costruire una cache row-aligned per physical null N>=128 solo se il prossimo ciclo deve quantificare il costo residuo. La cache deve salvare, per ogni trial e target: feature sostitutive, hit full, hit centroid-only, hit kNN-only, label-permutation baseline e degree-rewire baseline. Senza caduta sotto questa cache, i due target restano `reader_regressed`.

## Telemetria
- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.
- `python3 -m py_compile tools/exp_boundary_reader_regression_audit.py` completato.
- Run completato: `tools/data/boundary_reader_regression_audit_20260528_2138.json`.
- Worktree gia dirty prima del ciclo; modificati solo nuovo script, nuovo JSON e questo report.
- Nessun update del seme, nessuna promozione, nessun public sync.

## Files
- Script: `tools/exp_boundary_reader_regression_audit.py`
- Data: `tools/data/boundary_reader_regression_audit_20260528_2138.json`
- Report: `tools/data/reports/agent_20260528_2138.md`
