# Agent Report — Substitution Grammar Gate Del Core Phi
**Date**: 2026-05-08 18:34
**Piano**: 88
**Tension explored**: M_trascendenza_limite_attuale_L0 (0.529179606750063)
**verdict**: CONSTRAINT
observables_registry: n/a
observables_used: [gap_label_set, block_internal_order, high_label_condition_rate, low_label_condition_rate]
**observable_contract**: claim=il core phi dei gap larghi separa lunghezza di blocco e grammatica interna del generatore; observable=retention dei label core sotto perturbazioni che preservano o distruggono ordine interno; operator=Hamiltoniana tight-binding V=1, label IDS con reader theta=1/phi, Jaccard/retention/frequenza per mode e block_size; generator=phi_sturmian con contiguous_block_shuffle, internal_block_shuffle, global_balanced_shuffle; denominator=N={377,610}, phase={0,0.25,0.5,0.75}, threshold={2.0}, trials=5, top_k=12, |n|<=34, block_size={34,40,55,64,89,96,128,144}; not_tested=gap_ratio, soglie 1.75/2.25, N fuori {377,610}, generatori Sturmiani non-phi, tiling esatto in supertile Fibonacci.

## Claim Under Test
> Cosa manca per confermare completamente gap_ratio: phi=0.4090 vs ctrl_mean=1.1755 (ratio=0.35). gap_ratio(phi) piu' vici?

## Question
Il rientro dei label alti del core phi misura soltanto blocchi lunghi su scala Fibonacci, o misura l'ordine interno di sostituzione conservato dentro quei blocchi?

## Experiment Design
- Perimetro: stesso lettore label dei cycle 16:32, 17:15 e 18:05; `gap_ratio` non testato in questo ciclo.
- Reference core verificato sul generatore `phi_sturmian`: `[-1, 1, -2, 2, 3, -4, 4, 6]`.
- Nucleo basso: `[-1, 1, -2, 2]`. Label alti: `[3, -4, 4, 6]`.
- Modes:
  - `contiguous_block_shuffle`: conserva ordine interno del blocco e mescola l'ordine tra blocchi.
  - `internal_block_shuffle`: conserva lunghezza e conteggio di ogni blocco, ma mescola i simboli dentro il blocco.
  - `global_balanced_shuffle`: conserva solo conteggio globale.
- Blocchi Fibonacci: `34, 55, 89, 144`. Blocchi non-Fibonacci: `40, 64, 96, 128`.
- Denominatori grezzi: per ogni `mode|block_size`, 40 condizioni (`2 N * 4 phase * 1 threshold * 5 trials`); per `global_balanced_shuffle`, 40 condizioni totali.

## Results
Reference phi su 8 condizioni (`N x phase x threshold`): core completo `[-1, 1, -2, 2, 3, -4, 4, 6]`, Jaccard mediano `0.909091`, min `0.727273`.

Sintesi per mode:

| mode | conditions | median Jaccard | low retention | high retention | all-high condition rate |
|---|---:|---:|---:|---:|---:|
| contiguous_block_shuffle | 320 | 0.583333 | 1.00 | 0.50 | 82/320 = 0.25625 |
| internal_block_shuffle | 320 | 0.157895 | 0.25 | 0.25 | 0/320 = 0.00000 |
| global_balanced_shuffle | 40 | 0.150000 | 0.25 | 0.25 | 0/40 = 0.00000 |

Dettaglio per blocco:

| mode | block_size | family | median Jaccard | low retention | high retention | all-high condition rate | stable labels 75% |
|---|---:|---|---:|---:|---:|---:|---|
| contiguous_block_shuffle | 34 | Fibonacci | 0.666667 | 1.00 | 0.50 | 3/40 = 0.075 | [-1, 1, -2, 2, -4, 4] |
| contiguous_block_shuffle | 40 | non-Fibonacci | 0.500000 | 0.75 | 0.00 | 0/40 = 0.000 | [-1, 1, -2] |
| contiguous_block_shuffle | 55 | Fibonacci | 0.750000 | 1.00 | 0.75 | 11/40 = 0.275 | [-1, 1, -2, 2, -3, 3, -4, 4] |
| contiguous_block_shuffle | 64 | non-Fibonacci | 0.571429 | 1.00 | 0.25 | 0/40 = 0.000 | [-1, 1, -2, 2] |
| contiguous_block_shuffle | 89 | Fibonacci | 0.818182 | 1.00 | 1.00 | 26/40 = 0.650 | [-1, 1, -2, 2, -3, 3, -4, 4] |
| contiguous_block_shuffle | 96 | non-Fibonacci | 0.625000 | 1.00 | 0.50 | 3/40 = 0.075 | [-1, 1, -2, 2] |
| contiguous_block_shuffle | 128 | non-Fibonacci | 0.666667 | 1.00 | 0.75 | 7/40 = 0.175 | [-1, 1, -2, 2, -4, 4] |
| contiguous_block_shuffle | 144 | Fibonacci | 0.909091 | 1.00 | 1.00 | 32/40 = 0.800 | [-1, 1, -2, 2, -3, 3, -4, 4, -6, 6] |
| internal_block_shuffle | 34 | Fibonacci | 0.157895 | 0.25 | 0.25 | 0/40 = 0.000 | [34] |
| internal_block_shuffle | 40 | non-Fibonacci | 0.157895 | 0.25 | 0.25 | 0/40 = 0.000 | [34] |
| internal_block_shuffle | 55 | Fibonacci | 0.150000 | 0.25 | 0.25 | 0/40 = 0.000 | [34] |
| internal_block_shuffle | 64 | non-Fibonacci | 0.157895 | 0.25 | 0.25 | 0/40 = 0.000 | [34] |
| internal_block_shuffle | 89 | Fibonacci | 0.157895 | 0.25 | 0.25 | 0/40 = 0.000 | [34] |
| internal_block_shuffle | 96 | non-Fibonacci | 0.166667 | 0.25 | 0.25 | 0/40 = 0.000 | [34] |
| internal_block_shuffle | 128 | non-Fibonacci | 0.166667 | 0.25 | 0.25 | 0/40 = 0.000 | [34] |
| internal_block_shuffle | 144 | Fibonacci | 0.157895 | 0.25 | 0.25 | 0/40 = 0.000 | [34] |
| global_balanced_shuffle | n/a | none | 0.150000 | 0.25 | 0.25 | 0/40 = 0.000 | [34] |

## Key Findings
1. **Verificato: distruggere l'ordine interno del blocco collassa il core al livello random.** `internal_block_shuffle` resta su Jaccard mediano `0.150000-0.166667`, low retention `0.25`, high retention `0.25`, all-high `0/40` per ogni block_size. Il suo profilo coincide con `global_balanced_shuffle` entro il perimetro osservato.

2. **Verificato: il vantaggio dei blocchi Fibonacci lunghi dipende dall'ordine interno conservato.** Con `contiguous_block_shuffle`, `89` porta all-high `26/40` e `144` porta `32/40`; con `internal_block_shuffle`, gli stessi `89` e `144` restano `0/40`. La lunghezza e il conteggio del blocco non trasportano il core alto quando l'ordine interno e' rimosso.

3. **Verificato: gli edge case non-Fibonacci restano parziali, non nulli.** `128` conserva `-4` e `4` come stable labels 75% e ha high retention mediana `0.75`, ma all-high resta `7/40`. Questo impedisce la formula "solo Fibonacci"; la formula valida e' che, in questo perimetro, l'ordine interno conservato e le scale Fibonacci lunghe aumentano insieme la frequenza del core alto completo.

4. **Inferito dal confronto 18:05 -> 18:34: il nodo regressivo non era solo block_size.** Il cycle 18:05 vedeva scala Fibonacci; questo cycle localizza la condizione mancante dentro il blocco: la grammatica interna del generatore deve restare leggibile. Il test non isola ancora il tiling esatto in supertile Fibonacci.

## Verdict
**CONSTRAINT on TRASCENDENZA_LIMITE / QPG_GAP_RATIO_DENOMINATOR_GATE**: nel perimetro `N={377,610}`, `phase={0,0.25,0.5,0.75}`, `threshold={2.0}`, `trials=5`, `top_k=12`, `|n|<=34`, il core alto `[3, -4, 4, 6]` non e' portato da lunghezza e conteggio del blocco. Quando il blocco conserva ordine interno, le scale Fibonacci `89` e `144` rendono frequente il core alto completo (`26/40`, `32/40`). Quando l'ordine interno viene distrutto dentro gli stessi blocchi, il core alto completo non compare (`0/40`) e il profilo cade sul controllo bilanciato globale.

La formulazione valida e': il label-set alto phi misura memoria di grammatica interna del generatore su blocchi lunghi, con vantaggio forte alle scale Fibonacci testate; non misura lunghezza generica, conteggio di simboli o valore `gap_ratio`.

## Bicono della scoperta
- **Due radici**: blocco come lunghezza/conteggio · blocco come grammatica ordinata.
- **Singolare**: il blocco stesso, prima della scelta tra memoria interna e contenitore numerico.
- **Invariante di passaggio**: il lettore label theta=1/phi e il perimetro spettrale restano fissi; cambia solo la leggibilita dell'ordine interno.
- **Campo di possibilita**: qui diventa possibile testare supertile Fibonacci esatti contro blocchi contigui arbitrari; qui diventa non-possibile spiegare il core alto con sola lunghezza o densita locale.

## Consecutio
Costruire un `supertile_tiling_gate`: segmentare la parola phi in supertile Fibonacci reali e confrontare tre perturbazioni separate, `supertile_shuffle`, `same_length_contiguous_shuffle`, `same_count_internal_shuffle`. Se il supertile batte il blocco contiguo alla stessa lunghezza, la grammatica non e' solo interna al blocco ma vive anche nel confine tra supertile.

## Auto-audit: 5 lenti
- **L1 hard constraint vs bias**: il verdict dichiara perimetro, denominator e count grezzi; non formula universalita su tutti i generatori Sturmiani.
- **L2 quantita vs ratio**: Jaccard, retention e all-high rate restano separati; `gap_ratio` dichiarato non testato.
- **L3 no silent patching**: il claim precedente su block_size viene raffinato al nodo regressivo interno; il report non salva il framing "solo Fibonacci" perche `128` e' parziale.
- **L4 edge cases**: `128` non-Fibonacci e' nominato come parziale forte (`7/40`, high retention `0.75`), non trattato come rumore.
- **L5 re-discovery**: gap labeling e Sturmian sono meccanismi noti; il finding del cycle e' la separazione sperimentale tra lunghezza/conteggio e ordine interno del blocco.

## Files
- Script: `tools/exp_gap_label_substitution_grammar_gate.py`
- Data: `tools/data/gap_label_substitution_grammar_gate_20260508_1834.json`
- Report: `tools/data/reports/agent_20260508_1834.md`
