Vai al contenuto

← Skills

assert-what-the-generator-found

Un generatore che va in crash ti dice che ha fallito; uno che produce output plausibile non ti dice nulla. Verifica ciò che ha trovato, mai che è stato eseguito.

PatternProvenienza: cleanStato: activev0.1.0 · Apache-2.0

Conferita da chi ha letto la scheda, non rivendicata dal file su se stesso. Una scheda che l'agente distilla durante un'esecuzione che ha consumato contenuti non affidabili nasce contaminata e resta in attesa di revisione prima di essere mai recuperata.

Quando viene in mente

  • ho scritto un generatore di codice
  • sto testando un dump dello schema
  • l'output sembra a posto
  • estraggo la struttura da una libreria

Il valore di solito sta in Evita e Verifica. Fai è la sezione che scrivono tutti.

Il corpo della scheda qui sopra è una traduzione. L'originale inglese è ciò che la CLI importa, ciò che l'agente legge in esecuzione e ciò che l'hash qui sotto attesta.

Trigger

Hai scritto qualcosa che legge una rappresentazione e ne emette un'altra: un dump di schema, un estrattore di riferimenti, una migrazione, uno scraper, un generatore di indici. Qualsiasi cosa il cui output nessuno legge per intero perché è troppo voluminoso.

Non si applica a una funzione che restituisce un solo valore che puoi controllare a colpo d'occhio. Il rischio qui riguarda in modo specifico un output abbastanza grande che "sembra corretto" è l'unica revisione che riceverà mai.

Fai

  1. Prima di scrivere il test, definisci il conteggio atteso. Quanti comandi, righe, file o campi dovrebbero uscire? Ricava quel numero da qualcosa che non sia il generatore — la fonte, la documentazione, un conteggio manuale.
  2. Verifica il conteggio, o una soglia minima su di esso. assert len(groups) >= 10, non assert result.
  3. Verifica la presenza di elementi specifici e nominati che sai devono esistere. Tre o quattro bastano, scegliendone da forme diverse di input.
  4. Se il generatore classifica le cose, verifica che ogni classe non sia vuota. Un classificatore che mette tutto in un unico contenitore è il fallimento che questo controllo cattura.

Evita

assert build() — passa anche quando il generatore restituisce una lista vuota, una lista parziale, o una lista in cui ogni elemento è del tipo sbagliato in modo subdolo.

Evita anche di fidarti di isinstance quando attraversi una struttura di terze parti. Le librerie vendorizzano le proprie dipendenze: un TyperGroup non è un'istanza del click.Group importato dal tuo file, perché Typer distribuisce una propria copia di Click. Chiediti se l'oggetto ha ciò di cui hai bisogno — una mappa commands, un metodo items — piuttosto che quale classe dichiara di essere. Il duck-typing sopravvive a una dipendenza vendorizzata e a un major version bump; un controllo di classe non sopravvive a nessuno dei due, e fallisce classificando male anziché sollevando un errore.

Verifica

Rompi il generatore di proposito e osserva il test fallire. Commenta la ricorsione nei sottocomandi, oppure fai in modo che il controllo di tipo rifiuti tutto, e lancia la suite.

Se la suite passa comunque, il test verifica solo che il generatore sia stato eseguito, e hai scritto esattamente il test che questa skill esiste per evitare.

Rischio

Codificare un conteggio esatto trasforma il test in un onere di manutenzione: ogni comando aggiunto legittimamente lo fa diventare rosso. Preferisci una soglia minima (>= 10) più elementi nominati, e riserva i conteggi esatti a cose che davvero non dovrebbero cambiare senza una decisione esplicita.

C'è anche un limite. Queste asserzioni catturano un generatore che ha perso un'intera categoria. Non catturano uno che sbaglia un singolo campo su un solo elemento, e fingere il contrario è a sua volta una forma di falsa sicurezza.

Come usarla

La scheda è un dato. Clona il repository e importala per percorso — ciò che arriva dalla rete è trattato come contaminato e trattenuto in attesa di approvazione, che è il comportamento desiderabile e il motivo per cui qui non c'è un installatore in una riga.

git clone https://github.com/brcampidelli/chimera-agent.git
chimera skills-import chimera-agent/skills/assert-what-the-generator-found/SKILL.md

Integrità

SHA-256 del file così com'è pubblicato. Chi lo importa può verificare che ciò che ha ricevuto sia ciò che questa pagina mostrava.

0ffc1fdde72d3f2c416461f0f312ca5ca2a43d3b1ff33aaf7b20be155de711c9

Leggi la scheda nel repository →