# Agent Report - Vc Generator Class Direction Audit
**Date**: 2026-05-09 08:46
**Piano**: 101
**Tension explored**: TENS_SCALE_TRASCENDENZA_LIMITE / TRASCENDENZA_LIMITE
**verdict**: CONSTRAINT on class-conditional V_c scaling
observables_registry: 1.0.0-2026-05-06
observables_used: [`generator_class`, `source_mode`, `event_type`, `vc_interp`, `label_jaccard`, `hamming_ratio`, `internal_cross_rate`, `no_cross_rate`, `floor_hit_rate`] - osservabili domain-native, non canonici SR/SR2/L1/L2/triple_var
**observable_contract**: claim=il fit di scala di `V_c` rientra solo dopo tipizzazione del generatore; observable=`vc_median` e rate di evento separati per `generator_class` e `r_threshold`; operator=audit direzionale sul deposito row-aligned `agent_20260509_0837`, senza ricomputare spettri; generator=classi `reference_order`, `order_memory`, `periodic_closure`, `random_dispersion`; denominator=JSON `vc_generator_class_scale_gate_20260509_0837`, `N={89,144,233,377}`, phase `{0,0.25,0.5,0.75}`, soglie `r={0.48,0.50,0.52}`, livelli separati `per_mode_best` e `accepted_candidates`; non_possible=se una classe produce `no_cross`, `V_c` non esiste per quelle righe e il fit di scala non e' definito; not_tested=nuovi N oltre 377, nuovi generatori, nuovo calcolo spettrale, gap_ratio, power-law fit parametrico.

## Respiro fuori-tempo
- **Prima impressione**: il fit non fallisce per rumore numerico; fallisce perche' alcune righe non hanno piu' un attraversamento da fittare.
- **Combo**: A2 confine det=-1 + A9 terzo incluso + QxG continuo/discreto + grafo delle classi operative + tensione `TENS_SCALE_TRASCENDENZA_LIMITE`.
- **Dipolo / punto-zero**: `V_c` come valore / `V_c` come evento definito; punto-zero = la riga prima della classificazione `internal_cross/no_cross/floor_hit`, dove il valore e la sua esistenza non sono ancora separati.
- **Piano superiore**: grafo della conoscenza e bicono-dipoli. Il nodo non e' la curva di scala, ma il tipo di arco che collega label reader, generatore ed evento.
- **Operatori laterali scelti**: boundary operator, filtrazione per classe, grafo dei morfismi. Entrano per separare esistenza dell'attraversamento, direzione del valore e classe che conserva o rompe il ponte.
- **Contaminazione cognitiva**:
  - **CE-0001 / KSAR**: reiterazione sul deposito 08:37, senza cambiare campo dati.
  - **CE-0117**: cascata della possibilita; la consecutio 08:37 viene contratta in audit di direzione.
  - **YSN DeltaLink**: il link utile e' `generator_class -> event_type -> vc_defined`, non `N -> V_c`.
  - **PVI attack**: un trend numerico di `vc_median` e' illegittimo quando il denominatore perde le righe `no_cross`; per questo il report separa trend e rate evento.
- **Proto-ipotesi**: `V_c` ha una direzione di scala leggibile solo per le classi che mantengono `internal_cross`. Dove la classe produce `no_cross`, la scala non e' un cattivo fit: e' non-definita per costruzione osservabile.
- **Proiezione**: leggo lo stesso JSON 08:37 con uno strumento nuovo che stratifica per `generator_class`, `r_threshold` e livello di aggregazione. Se i trend cambiano quando passo da `per_mode_best` ad `accepted_candidates`, il denominatore e' parte atomica del claim.

## Claim Under Test
> Nel perimetro `N={89,144,233,377}`, la scala di `V_c` e' interpretabile solo dopo il gate `generator_class + event_type`: `order_memory` resta fittabile, `periodic_closure` diventa non-fittabile quando gli accepted sono `no_cross`, `random_dispersion` non entra negli accepted.

## Question
Il fallimento del fit di scala deriva da una forma non power-law comune, oppure dal fatto che classi diverse producono denominatori diversi per l'esistenza stessa di `V_c`?

## Experiment Design
- Nuovo strumento: `tools/exp_vc_generator_class_direction_audit.py`.
- Input: `tools/data/vc_generator_class_scale_gate_20260509_0837.json`.
- Nessun nuovo spettro calcolato: audit sul deposito verificato del ciclo precedente.
- Classi: `reference_order=phi_sturmian`, `order_memory=block_shuffle_*`, `periodic_closure=periodic_approximant_*`, `random_dispersion=balanced_random+markov_density`.
- Due livelli separati:
  - `per_mode_best`: best per modo, include rejected best quando presenti.
  - `accepted_candidates`: solo candidati accepted dal gate label-preserving.
- Denominatori grezzi dichiarati per `r_threshold=0.50`; le altre soglie sono nel JSON.

## Results

Trend `vc_median` per `per_mode_best`, soglia `r=0.50`:

| class | N=89 | N=144 | N=233 | N=377 | delta 89->377 |
|---|---:|---:|---:|---:|---:|
| reference_order | 1.191 | 1.109 | 1.053 | 0.879 | -0.312 |
| order_memory | 1.317 | 1.174 | 1.042 | 0.774 | -0.543 |
| periodic_closure | 0.999 | 0.662 | 0.648 | 0.650 | -0.349 |
| random_dispersion | 0.763 | 0.606 | 0.521 | 0.500 | -0.263 |

Event rates `per_mode_best`, soglia `r=0.50`:

| class | N=89 | N=144 | N=233 | N=377 |
|---|---:|---:|---:|---:|
| reference_order internal_cross | 4/4 | 4/4 | 4/4 | 4/4 |
| order_memory internal_cross | 12/12 | 12/12 | 12/12 | 11/12 + 1 internal_multi |
| periodic_closure internal_cross | 11/11 | 9/12 | 9/12 | 7/12 |
| periodic_closure no_cross | 0/11 | 3/12 | 3/12 | 5/12 |
| random_dispersion floor_hit | 0/8 | 1/8 | 3/8 | 8/8 |

Accepted candidates, soglia `r=0.50`:

| class | N=89 | N=144 | N=233 | N=377 |
|---|---:|---:|---:|---:|
| order_memory events | 98 internal_cross + 6 internal_multi / 104 | 29 internal_cross / 29 | 116 internal_cross + 1 internal_multi + 1 no_cross / 118 | 27 internal_cross + 1 internal_multi / 28 |
| order_memory vc_median | 1.350 | 1.341 | 1.229 | 0.899 |
| periodic_closure events | 99 internal_cross / 99 | 3 internal_cross + 48 no_cross / 51 | 144 no_cross / 144 | 99 no_cross / 99 |
| periodic_closure vc_median | 1.593 | 0.605 | non definito | non definito |
| random_dispersion accepted | 0 | 0 | 0 | 0 |

## Key Findings
1. **Verificato: `order_memory` resta fittabile nel perimetro testato.** Sugli accepted a `r=0.50`, `order_memory` conserva evento definito in `278/279` righe con crossing o multi-crossing, con un solo `no_cross` a N=233 contato nel deposito come edge case.
2. **Verificato: `periodic_closure` perde il denominatore `V_c` sugli accepted al crescere di N.** A N=233 produce `144/144 no_cross`; a N=377 produce `99/99 no_cross`. In queste righe `vc_interp=None`, quindi il fit non e' un fit povero: non e' definito.
3. **Verificato: il livello `per_mode_best` e il livello `accepted_candidates` dicono cose diverse.** Nel best-per-mode, `periodic_closure` conserva ancora alcuni crossing a N=233 e N=377; negli accepted candidati gli stessi N collassano a `no_cross` pieno. I due livelli non vanno saldati.
4. **Verificato: `random_dispersion` non entra nel gate accepted.** Nel best-per-mode tende al bordo minimo (`floor_hit=8/8` a N=377), ma ha `0` accepted nel deposito 08:37; non puo' fungere da classe di fit.
5. **Inferito: il nodo regressivo del `Fit failed` sta nella definizione di osservabile.** Prima del fit serve dichiarare `vc_defined = event_type in {internal_cross, internal_multi}` per classe e soglia.

## Verdict
**CONSTRAINT**: `V_c` scaling non e' un osservabile atomico finche' `generator_class` ed `event_type` non sono parte del denominatore.

Nel perimetro `N={89,144,233,377}`, `order_memory` permette una curva di scala perche' mantiene crossing sugli accepted; `periodic_closure` accetta label ma rende `V_c` non definito a N=233 e N=377; `random_dispersion` resta fuori dal gate accepted. Il claim corretto non e' "il modello non e' power-law"; e':

`fit(V_c)` e' ammesso solo su righe con `vc_defined=True`, stratificate per `generator_class`.

## Bicono della scoperta
- **Due radici**: valore di soglia `V_c` . esistenza dell'evento `V_c`.
- **Singolare**: la riga boundary prima che `event_type` decida se la soglia esiste, cade al floor o non attraversa.
- **Invariante di passaggio**: `vc_defined` sopravvive al passaggio tra N solo per classi che mantengono crossing; non sopravvive alla chiusura periodica accepted.
- **Campo di possibilita**: qui diventa possibile rifare il fit di scala su denominatori validi e tipizzati; qui diventa non-possibile fittare `V_c` aggregando `internal_cross`, `no_cross` e `floor_hit`.

## Consecutio
Il prossimo ciclo non deve aggiungere un nuovo fit. Deve promuovere nel contratto dello script una colonna esplicita `vc_defined` e produrre una tabella fit-ready per classe: solo righe `internal_cross/internal_multi`, con `no_cross` e `floor_hit` riportati come massa esclusa, non come assenza di dato neutra.

## 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_0837.md`, JSON `tools/data/vc_generator_class_scale_gate_20260509_0837.json`, nuovo JSON `tools/data/vc_generator_class_direction_audit_20260509_0846.json`.
- **L1 hard constraint**: il verdict e' scoped al deposito 08:37; non generalizza oltre quei generatori e N.
- **L2 count grezzi**: riportati `4/4`, `12/12`, `11/12`, `144/144`, `99/99`, `0 accepted`.
- **L3 no observable drift**: non sono testati nuovi spettri, gap_ratio, nuovi N o power-law fit parametrico.
- **L4 edge cases**: `periodic_closure` a N=89 accepted ha `99/99 internal_cross`; la caduta non e' universale su ogni N, e' transizione del denominatore sugli N alti del perimetro.
- **L5 re-discovery vs discovery**: non e' nuova scoperta che gli eventi vadano stratificati; il finding e' che `vc_interp=None` spiega il fallimento del fit meglio di una forma di scala alternativa.

## Telemetria
- No API paid run: `ANTHROPIC_API_KEY` e `OPENAI_API_KEY` non presenti nell'ambiente.
- Verifica script: `python -m py_compile tools/exp_vc_generator_class_direction_audit.py` completato senza errori.
- Run valido: `python tools/exp_vc_generator_class_direction_audit.py --input tools/data/vc_generator_class_scale_gate_20260509_0837.json --out tools/data/vc_generator_class_direction_audit_20260509_0846.json`.

## Files
- Script nuovo: `tools/exp_vc_generator_class_direction_audit.py`
- Data: `tools/data/vc_generator_class_direction_audit_20260509_0846.json`
- Report: `tools/data/reports/agent_20260509_0846.md`
