Gestire il Technical Debt
"Perché il mio punteggio è sceso dopo aver ignorato un errore?"
Quando sopprimi un finding in Zenzic — tramite un commento inline o una voce di configurazione per-file — non stai cancellando il problema. Stai assumendoti la responsabilità di esso. Quell'assunzione ha un costo: punti di Technical Debt detratti dal tuo quality score.
Questa guida spiega come leggere il debt, comprendere la formula del costo e ridurlo nel tempo.
Leggere l'Output dello Score
Dopo aver eseguito zenzic score, potresti vedere una riga aggiuntiva sotto la tabella del punteggio:
Score: 93/100
! Technical Debt (Suppressions): -7 pts
Suppression Audit: 7/30 (inline: 5, per-file: 2)
Questo significa:
- 7 soppressioni attive stanno nascondendo finding dal flusso di audit.
- 5 sono commenti
zenzic:ignoreinline in file Markdown/MDX. - 2 sono voci per-file in
governance.per_file_ignores. - La formula del debt ha ridotto il punteggio di 7 pt.
La Formula del Costo
Dove:
- = soppressioni attive totali (inline + per-file)
cap=governance.suppression_capin.zenzic.toml(default: 30)
Il costo del debt è flat: ogni soppressione costa sempre 1 pt.
| Soppressioni | Debt | Punteggio (da 100) |
|---|---|---|
| 0 | 0 pt | 100 |
| 10 | 10 pt | 90 |
| 30 | 30 pt | 70 |
| 31 | 31 pt | 69 |
| 35 | 35 pt | 65 |
Quando le soppressioni superano il cap configurato, l'esecuzione fallisce comunque tramite il gate di governance (suppression_cap), anche se il debt resta lineare. Il gate di punteggio (fail_under) e il gate del cap sono ortogonali e valutati in modo indipendente.
Passo 1: Vedi Cosa Stai Nascondendo
Esegui un sovereign audit per vedere tutti i finding attualmente soppressi:
zenzic check all --audit
Il flag --audit bypassa tutti i commenti zenzic:ignore inline e tutte le voci
governance.per_file_ignores. Mostra lo stato reale della tua documentazione.
Confronta l'output di --audit con una normale esecuzione di zenzic check all per
vedere esattamente quali finding sono nascosti.
Passo 2: Comprendi il Costo della Regola
Per ogni finding soppresso, usa zenzic explain per vedere il suo impatto sul punteggio:
zenzic explain Z601
L'output mostra:
- Il tier di scoring della regola (structural / navigation / content / brand)
- La penalità per occorrenza (pt/occorrenza)
- Lo stato di soppressione per-file dall'attuale
.zenzic.toml
Passo 3: Correggere vs Riconoscere
Per ogni finding soppresso, prendi una decisione esplicita:
Correggilo (riduci il debt)
Rimuovi la soppressione e correggi il problema sottostante:
- Elimina il commento
<!-- zenzic:ignore ZXXX -->dalla riga Markdown. - Oppure rimuovi la voce da
governance.per_file_ignores. - Poi correggi la violazione effettiva (aggiorna il link, rimuovi il termine obsoleto, ecc.).
- Esegui
zenzic check allper verificare.
Riconoscilo (documenta l'intento)
Se la soppressione è genuinamente intenzionale (riferimento storico, contesto di migrazione, ecc.):
- Mantieni la soppressione ma aggiungi un commento in prosa che spiega il perché.
- Preferisci la soppressione per-file rispetto ai commenti inline per le eccezioni strutturali —
centralizza la policy in
.zenzic.toml. - Aggiusta
governance.suppression_capse il tuo progetto ha una baseline di soppressione legittimamente più alta.
Passo 4: Aggiustare il Cap di Governance
Se il tuo progetto ha una baseline di soppressione consolidata che è superiore a 30, alza
il cap in .zenzic.toml:
[governance]
suppression_cap = 45 # aggiustato per un progetto i18n di grandi dimensioni
suppression_cap_fail_hard = true
Impostare il cap al conteggio di soppressione corrente ti dà un floor di governance: le nuove
soppressioni aumenteranno immediatamente il costo e alla fine attiveranno suppression_cap_fail_hard.
Perché le Violazioni di Sicurezza Non Possono Essere Soppresse
I finding nella categoria Security Gate Z2xx — Z201 CREDENTIAL_SECRET, Z202 PATH_TRAVERSAL,
Z203 PATH_TRAVERSAL_FATAL e Z204 FORBIDDEN_TERM — non possono essere soppressi con nessun
meccanismo.
Un commento <!-- zenzic:ignore: Z201 --> viene silenziosamente ignorato. Il finding viene
comunque emesso. L'exit code è comunque 2 o 3. Il punteggio crolla a 0.
Questo è per design. I finding di sicurezza sono fatti, non opinioni di stile. Non puoi assumerti la responsabilità di una perdita di credenziali e chiamarla eccezione validata.
Riferimento
- Politica di Soppressione — Riferimento completo per tutti e tre i livelli di soppressione.
- Algoritmo di Scoring — Come il debt interagisce con il Gravity Cap e i pesi delle categorie.
zenzic explain— Ispeziona il costo e lo stato di soppressione di qualsiasi regola.- Esempio: Suppression Mechanics — Demo eseguibile con 7 soppressioni attive.