# Handoff — campagna notturna ds4 UFFICIALE vs ds4h HERETIC Scritto il 04-08-2026. Da lanciare a mano quando il box è libero. ## Il comando ```bash tmux new -s night 'REPS=40 ~/llm/night-heretic-power.sh' ``` `tmux` perché sono ~2h40 e la sessione non deve morire con l'SSH. Poi, a fine giro: ```bash python3 ~/llm/night-heretic-analyze.py ``` Prima di partire, se vuoi vedere il piano senza toccare niente: ```bash DRY=1 ~/llm/night-heretic-power.sh ``` Giro corto di prova (~45 min, stessa meccanica): `REPS=10 ~/llm/night-heretic-power.sh` ## Cosa risponde Se `ds4h` (0731 con l'attention 10-42 abliterata) sia peggio dell'ufficiale sull'**agentico**. Oggi non l'abbiamo risolto: sull'aggregato p=1,000 (indistinguibili), ma la direzione era sempre a sfavore del heretic e su TC-07 (catena a 4 passi dipendenti) l'×8 dedicato ha dato 7/8 vs 5/8, p=0,45 — non concludente. L'effetto osservato è d≈0,64, che con n=40 per braccio si vede all'80% di potenza. Sotto quella soglia non serve rilanciare: si ottengono solo altri p a caso. ## Il disegno, e perché è così - **4 scenari, non 15**: `TC-03 TC-06 TC-07 TC-14` sono gli unici che sono *mai* variati in una qualsiasi misura del 04-08. Gli altri 11 sono stati pass su entrambi in ogni run: ripeterli è box bruciato. Costo per ripetizione ~110 s invece di ~360 s. - **Blocchi alternati da 10** (4 blocchi, ordine invertito nei blocchi pari): se il box degrada durante la notte, il degrado si spalma sui due bracci invece di colpire solo l'ultimo girato. Costa 8 ricariche di modello (~2 min l'una) su ~2h40. Il degrado noto su questo box (throttle PD) tocca la velocità, non la correttezza — ma così l'obiezione non esiste. - **Verifica dell'argv dopo ogni `yz start`**: lo script legge `/proc//cmdline` e controlla che il file caricato sia davvero quello atteso. Senza questo controllo un `yz start` fallito farebbe misurare 40 ripetizioni al modello sbagliato senza un solo avviso — è già successo oggi in forma diversa. - **Holm sui 4 test** nell'analisi: testare 4 scenari e riportare il p più basso è il modo classico di trovare un effetto che non c'è. La colonna da leggere è `perm+Holm`. ## Guardrail già dentro | | | |---|---| | **Resume** | ogni ripetizione scrive il suo JSON; se esiste ed è valido viene saltata. Ctrl-C e rilancio dello stesso comando non perdono nulla | | **Ripetizione fallita** | viene loggata e il giro continua; l'analisi la conta come mancante e avvisa se i bracci risultano di taglia diversa | | **Cosa lascia sul box** | alla fine, anche su Ctrl-C o errore, rimette il modello **ufficiale** (il daily). `RESTORE=0` per non farlo | | **hermes** | `yz start` riallinea ctx/max_tokens, ma `ds4` e `ds4h` hanno gli stessi valori (499712 + 24576) e lo stesso `HMODEL=deepseek-v4-flash`, quindi la config non cambia fra i bracci | ## Come leggere il risultato L'analisi stampa, per scenario: pass-rate, punti medi, Fisher esatto sul pass, permutation sui punti, e il permutation corretto Holm. - **nessun `perm+Holm` sotto 0,05** → con 40 ripetizioni per braccio i due modelli non si distinguono nemmeno scenario per scenario. A quel punto la domanda è chiusa: usa `ds4h` senza preoccupazioni sull'agentico, e l'unica differenza misurata resta 0/16 rifiuti contro 2/16 e −8% di t/s. - **TC-07 sotto 0,05 con heretic più basso** → regressione reale sulle catene multi-step. Allora `ds4h` va usato solo per lavoro non-agentico (chat, scrittura, contenuto filtrato dall'ufficiale) e il daily resta l'ufficiale. - **Fisher basso ma punti no (o viceversa)** → guardarlo, non arrotondarlo: il primo conta pass/non-pass, il secondo pesa anche i partial. Su TC-07 il heretic oggi perdeva più in partial che in fail secchi. ⚠ Un p basso su **TC-06** non significherebbe niente di nuovo sul heretic: quello scenario (Multi-Value Extraction) fallisce su *entrambi* i modelli in quasi tutte le misure ed è una debolezza del quant 2-bit, non dell'abliteration. ## Contesto — dove siamo arrivati oggi | | ufficiale | heretic | |---|---|---| | tool-eval-bench `--short`, n=4 | 90, 87, 90, 90 → media 89,25 (sd 1,50) | 87, 87, 87, 93 → media 88,50 (sd 3,00) | | permutation esatto sull'aggregato | — | **p = 1,000** | | TC-07 ×8 dedicate | pass 7/8, 15/16 punti | pass 5/8, 12/16 punti (**p = 0,45**) | | rifiuti (2 set × 8 prompt) | 2/16 | **0/16** | | reasoning smoke / tool-call / Think Max | ok | ok | | accept DSpark, prompt neutro | 83,8% | 78,3% | | decode t/s a regime | 30-34 | 29-32 | Trappole di misura trovate strada facendo, che valgono per qualunque bench su questo box: 1. **Il primo prompt dopo il boot rende ~6 t/s invece di ~33.** Non è il lane seriale (tutti i log dicono `path=cont fallback=0`): è DSpark che si spegne per quella sequenza (`yield-quench ... spec off for this seq`). Scartare sempre un giro di warmup. 2. **Misurare il rumore prima di interpretare un delta.** L'ufficiale da solo fa 87 una volta su quattro, con la firma identica al heretic. Senza quelle 3 run in più il −1 punto in Tool Selection sembrava il costo dell'abliteration. 3. **Non poolare i dati della scoperta con quelli della verifica.** Il pooled su TC-07 dà p≈0,06 ma contiene il campione che ha generato l'ipotesi: non è una conferma. ## File | percorso | cosa | |---|---| | `~/llm/night-heretic-power.sh` | il runner (resume, blocchi alternati, verifica argv, ripristino) | | `~/llm/night-heretic-analyze.py` | l'analisi (Fisher + permutation + Holm) — già validata sui dati del 04-08, riproduce 7/8 vs 5/8 p=0,4462 | | `~/llm/bench-heretic/night/` | dove finiscono i JSON e `run.log` | | `~/llm/bench-heretic/teb/` | le misure del 04-08 (tool-eval-bench) | | `~/llm/bench-heretic/` | batteria a mano, probe rifiuti, ripetizioni di velocità | | HF privato | `GaelicThunder/DeepSeek-V4-Flash-0731-HERETIC-attn-splice-ds4` — ricetta, tool, tutti i log | Modelli: `yz start ds4` (ufficiale, daily) · `yz start ds4h` (heretic, drafter ufficiale per default) · `yz start --dry-run` per vedere il piano senza toccare porte, hermes o motore.