# Agent Report - Vc Null Regression Gate
**Date**: 2026-05-09 06:37
**Piano**: 98
**Tension explored**: TRASCENDENZA_LIMITE / V_c null regressivo
**verdict**: CONSTRAINT
observables_registry: 1.0.0-2026-05-06
observables_used: [] - osservabile spettrale dedicato `V_c`, nessun osservabile canonico SR/SR2/L1/L2/triple_var
**observable_contract**: claim=la forma `r(V)` del boundary Sturmian-Harper e' sostenuta da attraversamenti interni, non da collasso al bordo minimo della filtrazione; observable=`event={floor_hit,internal_cross,internal_multi,no_cross}`, `vc_interp`, `r_floor`, `r_span`, `label_jaccard`; operator=curva `r(V)` su griglia 0.5..3.0 step 0.01, crossing lineare e classificazione del primo stato rispetto a `r_threshold={0.48,0.50,0.52}`; generator=phi Sturmian, phase-shuffle Sturmian, random bilanciato, surrogate random selezionato per overlap label-set; denominator=N={89,144,233}, phase={0,0.25,0.5,0.75}, phase_trials=2, random_trials=2, label_trials=2, label_candidates=5, seed=202605090637; non_possible=se un null che preserva label-set produce crossing interno unico e stesso `r_floor` dei generatori Sturmian, `V_c` non e' piu' boundary map di ordine Sturmian; not_tested=GUE/Poisson reali, silver/bronze in questo ciclo, fit power-law, label-preserving forte con accettazione Jaccard>=0.75.

## Respiro fuori-tempo
- **Combo**: A2 confine det=-1 + A9 terzo incluso + TxQ matrice densita / TxR gas relativistico come filtrazione spettro-temperatura + nodo `TRASCENDENZA_LIMITE` + tensione operativa `V_c` sul null regressivo.
- **Dipolo / punto-zero**: collasso al bordo minimo (`floor_hit`) / attraversamento interno; punto-zero = il primo stato della curva rispetto alla soglia, prima che `V_c` venga contato come valore.
- **Piano superiore**: topologia assiomatica del bordo come filtrazione. Il contenuto non e' il numero `V_c`, ma il tipo di evento che genera il passaggio.
- **Operatori laterali scelti**: boundary operator, filtrazione, spectrum-preserving surrogate. Il boundary operator separa floor e interno; la filtrazione scorre `V`; il surrogate tenta di conservare il lettore label-set prima di misurare il crossing.
- **Contaminazione cognitiva**:
  - **CE-0117 / KSAR**: reiterazione del kernel del ciclo 03:30 senza cambiare dominio: stesso `V_c`, nodo regressivo diverso.
  - **PVI attack**: il rischio e' rendere il null piu' debole per salvare la curva metallica; per questo il surrogate label-preserving espone il proprio `label_jaccard`.
  - **CE-0001**: il fallimento del surrogate entra come informazione, non come parametro da calibrare.
- **Proto-ipotesi**: se il boundary e' effetto di ordine Sturmian, allora le fasi Sturmian devono conservare crossing interno senza floor-hit; se basta preservare parzialmente il label-set, il surrogate random deve recuperare lo stesso evento interno unico. Se il surrogate non preserva il label-set, il ciclo produce un vincolo sul generatore del null.
- **Proiezione**: misuro l'evento prima del valore. `floor_hit` indica che il null parte gia' oltre il confine; `internal_cross` indica che la filtrazione crea il passaggio; `internal_multi` indica bordo oscillante, non curva metallica semplice.

## Claim Under Test
> Nel perimetro Sturmian-Harper ridotto, la separazione metallico/random della curva `r(V)` sopravvive quando `V_c` viene decomposto in evento di bordo: i generatori Sturmian producono crossing interno; il random produce floor-hit o multi-crossing. Un surrogate che preserva label-set deve decidere se il portatore e' il label-set o l'ordine generativo.

## Question
Il null precedente falsificava `V_c` perche' era troppo debole e collassava a `V_min`, oppure perche' il crossing interno richiede ordine Sturmian oltre al label-set?

## Experiment Design
- Script: `tools/exp_vc_null_regression_gate.py`.
- Hamiltoniana: diagonale `V * seq`, off-diagonal 1, autovalori tridiagonali.
- Curva: `r(V)` per `V=0.5..3.0`, step `0.01`.
- Eventi:
  - `floor_hit`: `r(V_min) < threshold`; il valore `V_c` e' il bordo della griglia, non attraversamento.
  - `internal_cross`: parte sopra soglia e attraversa una volta.
  - `internal_multi`: parte sopra soglia ma attraversa piu' volte.
  - `no_cross`: non attraversa.
- Generatori:
  - `phi_sturmian`: sequenza di riferimento per ogni N/fase.
  - `sturmian_phase_shuffle`: stessa theta phi, fase random.
  - `balanced_random`: stesso conteggio di 1, ordine distrutto.
  - `label_preserving_surrogate`: miglior candidato tra 5 random bilanciati secondo Jaccard del label-set spettrale con la sequenza riferimento (`label_threshold=2.0`, `top_k=12`, `max_label=34`).
- Denominatore grezzo: `phi_sturmian=36` condizioni; ogni controllo `72` condizioni. Il run pieno con N fino a 377 e 12 candidati e' stato fermato per budget; il perimetro valido e' quello dichiarato qui.
- Contratto osservabile-operatore: `gap_ratio`, controlli metallici silver/bronze e domini GUE/Poisson non vengono testati in questo ciclo.

## Results
Sintesi aggregata:

| generator | conditions | floor_hit | internal_cross | internal_multi | internal_rate | vc_median | r_floor_median | r_span_median | label_jaccard_median |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| phi_sturmian | 36 | 0 | 36 | 0 | 1.0000 | 1.058885 | 0.654502 | 0.340093 | 1.000000 |
| sturmian_phase_shuffle | 72 | 0 | 72 | 0 | 1.0000 | 1.193335 | 0.691274 | 0.382659 |  |
| balanced_random | 72 | 27 | 23 | 22 | 0.6250 | 0.532928 | 0.512032 | 0.190609 |  |
| label_preserving_surrogate | 72 | 23 | 29 | 20 | 0.6806 | 0.561171 | 0.534427 | 0.198427 | 0.166667 |

Per soglia:

| generator | r_threshold | floor_hit | internal_cross | internal_multi | internal_rate | vc_median |
|---|---:|---:|---:|---:|---:|---:|
| phi_sturmian | 0.48 | 0 | 12 | 0 | 1.0000 | 1.229013 |
| phi_sturmian | 0.50 | 0 | 12 | 0 | 1.0000 | 1.108569 |
| phi_sturmian | 0.52 | 0 | 12 | 0 | 1.0000 | 1.005215 |
| sturmian_phase_shuffle | 0.48 | 0 | 24 | 0 | 1.0000 | 1.377315 |
| sturmian_phase_shuffle | 0.50 | 0 | 24 | 0 | 1.0000 | 1.275439 |
| sturmian_phase_shuffle | 0.52 | 0 | 24 | 0 | 1.0000 | 1.168195 |
| balanced_random | 0.48 | 4 | 11 | 9 | 0.8333 | 0.594383 |
| balanced_random | 0.50 | 10 | 7 | 7 | 0.5833 | 0.531929 |
| balanced_random | 0.52 | 13 | 5 | 6 | 0.4583 | 0.500000 |
| label_preserving_surrogate | 0.48 | 3 | 9 | 12 | 0.8750 | 0.633067 |
| label_preserving_surrogate | 0.50 | 9 | 9 | 6 | 0.6250 | 0.568673 |
| label_preserving_surrogate | 0.52 | 11 | 11 | 2 | 0.5417 | 0.523669 |

## Key Findings
1. **Verificato: il crossing Sturmian e' interno nel perimetro testato.** `phi_sturmian` e `sturmian_phase_shuffle` hanno `floor_hit=0` e `internal_cross` unico in tutte le condizioni (`36/36` e `72/72`).
2. **Verificato: il random bilanciato mescola eventi diversi.** `balanced_random` contiene `27/72` floor-hit, `23/72` crossing interni unici e `22/72` crossing multipli. Il vecchio `V_c=0.5` aggregava floor-hit e attraversamenti reali.
3. **Verificato: il surrogate label-preserving minimo non preserva il label-set.** La mediana Jaccard e' `0.166667`, con minimo `0.071429`; quindi questo controllo non decide se il label-set basta a produrre il crossing Sturmian.
4. **Verificato: anche il surrogate debole resta vicino al random, non allo Sturmian.** Ha `23/72` floor-hit e `20/72` internal_multi, `r_floor_median=0.534427` e `r_span_median=0.198427`, contro `r_floor_median=0.654502/0.691274` e span `0.340093/0.382659` degli Sturmian.
5. **Inferito: il nodo regressivo del null e' doppio.** Separare floor-hit e crossing interno ripara il denominatore di `V_c`; costruire un vero null label-preserving richiede un generatore dedicato, non selezione random superficiale.

## Verdict
**CONSTRAINT on V_c null**: nel perimetro `N={89,144,233}`, `phase={0,0.25,0.5,0.75}`, `r_threshold={0.48,0.50,0.52}`, il boundary Sturmian e' crossing interno unico. Il random bilanciato non e' un contro-campo omogeneo: contiene floor-hit e multi-crossing. La separazione precedente metallico/random resta valida come distinzione di evento, ma il ciclo non chiude il claim label-set perche' il surrogate label-preserving non preserva davvero il label-set.

La formulazione valida e': `V_c` va riportato insieme a `event_type`; `floor_hit` non e' crossing; `internal_multi` non e' curva metallica semplice. Il prossimo null deve generare sequenze con Jaccard label-set alto prima di confrontare `V_c`.

## Bicono della scoperta
- **Due radici**: valore `V_c` aggregato . evento generativo del crossing.
- **Singolare**: la curva `r(V)` prima della soglia, dove il confine non e' ancora numero ma tipo di passaggio.
- **Invariante di passaggio**: sopravvive il crossing interno unico sotto cambio di fase Sturmian; cade il null random come denominatore omogeneo.
- **Campo di possibilita**: qui diventa possibile usare `event_type` come gate regressivo di ogni misura `V_c`; qui diventa non-possibile confrontare mediane `V_c` senza separare floor-hit, internal-cross e multi-crossing.

## Consecutio
Il prossimo passo e' costruire un surrogate label-preserving reale: non scegliere il miglior random fra pochi candidati, ma generare per ricottura/swap vincolato finche' `label_jaccard >= 0.75` viene raggiunto con denominatore dichiarato. Se quel null produce `floor_hit` o `internal_multi`, il portatore e' ordine Sturmian oltre al label-set; se produce crossing interno unico con `r_floor` e `r_span` Sturmian, il portatore e' il label-set.

## Auto-audit: source flags e 5 lenti
- **Fonti**: Verificato da `tools/data/agent_field_live.md`, `tools/LAB_AGENT_CONTEXT.md`, `tools/data/seme.json`, `tools/dnd_scenario.py --best`, report `agent_20260509_0330.md`, output JSON del nuovo script.
- **L1 hard constraint**: nessun claim universale; il verdict vale solo sul perimetro ridotto dichiarato.
- **L2 quantita vs ratio**: riportati count grezzi (`36`, `72`, `27/72`, `23/72`, `22/72`) oltre ai rate.
- **L3 no silent patching**: il surrogate label-preserving fallito viene dichiarato come fallimento del controllo, non escluso.
- **L4 edge cases**: random a `r_threshold=0.48` ha molti crossing interni (`20/24` contando multi), quindi non basta dire "random=floor".
- **L5 re-discovery vs discovery**: tight-binding Sturmian e r-statistic sono standard; il finding e' il gate regressivo `event_type` per non confondere floor e crossing.

## Telemetria
- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.
- Runtime: primo run piu' largo fermato per budget; run valido completato con N={89,144,233}, 5 candidati label per surrogate.
- Verifica script: `python -m py_compile tools/exp_vc_null_regression_gate.py` completato senza errori.

## Files
- Script: `tools/exp_vc_null_regression_gate.py`
- Data: `tools/data/vc_null_regression_gate_20260509_0637.json`
- Report: `tools/data/reports/agent_20260509_0637.md`
