refactor(skills): rinomina step6-fix → post-chunk

- rimpiazza .claude/commands/step6-fix.md con post-chunk.md
- aggiorna path da step-6/ a chunks/ in tutta la skill
- aggiunge gestione incomplete_math nel report summary
- scope ampliato: workflow completo fino alla vettorizzazione
- CLAUDE.md: aggiorna /step6-fix → /post-chunk
This commit is contained in:
2026-04-20 14:25:18 +02:00
parent fe0ecc24ad
commit a7b71fa508
2 changed files with 24 additions and 25 deletions
@@ -1,25 +1,23 @@
--- ---
description: Verifica i chunk di step 5, mostra i problemi, propone e applica le fix tramite fix_chunks.py con ri-verifica automatica finale. description: Perfeziona i chunk di un documento (verifica, dry-run, fix, ri-verifica) e li prepara per la vettorizzazione.
allowed-tools: Read Bash Grep allowed-tools: Read Bash Grep
argument-hint: <stem> argument-hint: <stem>
--- ---
## Passo 0 — Verifica fresca (sempre) ## Passo 0 — Verifica fresca
Esegui sempre `verify_chunks.py` per avere un report aggiornato (non fidarti di un report.json preesistente): Esegui sempre `verify_chunks.py` per un report aggiornato:
```bash ```bash
source .venv/bin/activate && python step-6/verify_chunks.py --stem $ARGUMENTS source .venv/bin/activate && python chunks/verify_chunks.py --stem $ARGUMENTS
``` ```
---
Leggi il report appena generato: Leggi il report appena generato:
!`python3 -c " !`python3 -c "
import json, sys import json, sys
try: try:
r = json.load(open('step-6/$ARGUMENTS/report.json')) r = json.load(open('chunks/$ARGUMENTS/report.json'))
v = r.get('verdict','?') v = r.get('verdict','?')
s = r.get('stats', {}) s = r.get('stats', {})
t = r.get('thresholds', {}) t = r.get('thresholds', {})
@@ -35,7 +33,7 @@ try:
print(f' 🔴 {label}: {len(items)}') print(f' 🔴 {label}: {len(items)}')
for c in items[:3]: for c in items[:3]:
print(f' [{c[\"chunk_id\"]}] {c[\"n_chars\"]} char → {c[\"last_text\"][-60:]!r}') print(f' [{c[\"chunk_id\"]}] {c[\"n_chars\"]} char → {c[\"last_text\"][-60:]!r}')
for cat, label in [('too_short','Troppo corti'), ('too_long','Troppo lunghi')]: for cat, label in [('too_short','Troppo corti'), ('too_long','Troppo lunghi'), ('incomplete_math','Math incompleto')]:
items = wa.get(cat, []) items = wa.get(cat, [])
if items: if items:
print(f' 🟡 {label}: {len(items)}') print(f' 🟡 {label}: {len(items)}')
@@ -48,14 +46,14 @@ except Exception as e: print(f'ERRORE lettura report: {e}')
## Se verdict == "ok" ## Se verdict == "ok"
✅ Nessun problema. Comunica: ✅ Nessun problema bloccante. Comunica:
``` ```
✅ Chunk puliti — procedi con la vettorizzazione: ✅ Chunk pronti — procedi con la vettorizzazione:
python step-8/ingest.py --stem $ARGUMENTS python step-8/ingest.py --stem $ARGUMENTS
``` ```
Fermati qui. Non eseguire nessun altro passo. Se ci sono solo 🟡, spiega brevemente i warning e chiedi se l'utente vuole risolverli prima o procedere.
--- ---
@@ -64,15 +62,16 @@ Fermati qui. Non eseguire nessun altro passo.
### Passo 1 — Dry-run ### Passo 1 — Dry-run
```bash ```bash
source .venv/bin/activate && python step-6/fix_chunks.py --stem $ARGUMENTS --dry-run source .venv/bin/activate && python chunks/fix_chunks.py --stem $ARGUMENTS --dry-run
``` ```
Spiega in italiano ogni operazione pianificata: Spiega in italiano ogni operazione pianificata:
- **rimuovi chunk vuoti** — chunk privi di testo, non contribuiscono al retrieval
- **aggiungi prefisso** — il prefisso `[sezione > titolo]` fornisce contesto all'embedding; senza, il chunk è semanticamente decontestualizzato - **rimuovi chunk vuoti** — privi di testo, non contribuiscono al retrieval
- **aggiungi prefisso**`[sezione > titolo]` fornisce contesto all'embedding; senza, il chunk è decontestualizzato
- **fondi incompleti** — frase spezzata a metà: il chunk corrente e il successivo formano una frase unica - **fondi incompleti** — frase spezzata a metà: il chunk corrente e il successivo formano una frase unica
- **fondi troppo corti** chunk sotto MIN_CHARS: troppo brevi per portare informazione semantica utile - **fondi troppo corti** — sotto MIN_CHARS: troppo brevi per portare informazione semantica utile
- **spezza troppo lunghi** chunk sopra MAX_CHARS×1.5: troppo densi, degradano la precision del retrieval - **spezza troppo lunghi** — sopra MAX_CHARS×1.5: troppo densi, degradano la precision del retrieval
Se ci sono solo 🟡 (nessun 🔴), informa che si può procedere anche senza fix e chiedi la preferenza. Se ci sono solo 🟡 (nessun 🔴), informa che si può procedere anche senza fix e chiedi la preferenza.
@@ -85,16 +84,16 @@ Applica solo su risposta affermativa esplicita.
### Passo 3 — Applica ### Passo 3 — Applica
```bash ```bash
source .venv/bin/activate && python step-6/fix_chunks.py --stem $ARGUMENTS source .venv/bin/activate && python chunks/fix_chunks.py --stem $ARGUMENTS
``` ```
### Passo 4 — Ri-verifica automatica ### Passo 4 — Ri-verifica automatica
```bash ```bash
source .venv/bin/activate && python step-6/verify_chunks.py --stem $ARGUMENTS source .venv/bin/activate && python chunks/verify_chunks.py --stem $ARGUMENTS
``` ```
Leggi il nuovo `step-6/$ARGUMENTS/report.json` e riporta: Leggi il nuovo `chunks/$ARGUMENTS/report.json` e riporta:
- Nuovo verdict - Nuovo verdict
- Delta chunk (N prima → N dopo) - Delta chunk (N prima → N dopo)
- Problemi residui se presenti - Problemi residui se presenti
@@ -104,17 +103,17 @@ Leggi il nuovo `step-6/$ARGUMENTS/report.json` e riporta:
Se verdict finale è `ok` o `warnings_only` senza 🔴: Se verdict finale è `ok` o `warnings_only` senza 🔴:
``` ```
✅ Chunk pronti in step-6/$ARGUMENTS/chunks.json ✅ Chunk pronti in chunks/$ARGUMENTS/chunks.json
Procedi con la vettorizzazione: Procedi con la vettorizzazione:
python step-8/ingest.py --stem $ARGUMENTS python step-8/ingest.py --stem $ARGUMENTS
``` ```
Se rimangono 🔴 dopo il fix (raro — testo non spezzabile o struttura anomala): Se rimangono 🔴 dopo il fix (testo non spezzabile o struttura anomala nel sorgente):
``` ```
🔴 X problemi residui non risolvibili automaticamente. 🔴 X problemi residui non risolvibili automaticamente.
Torna a step-4/$ARGUMENTS/clean.md e correggi manualmente le sezioni indicate, Torna a conversione/$ARGUMENTS/clean.md e correggi manualmente le sezioni indicate,
poi riesegui nell'ordine: poi riesegui nell'ordine:
python step-5/chunker.py --stem $ARGUMENTS --force python chunks/chunker.py --stem $ARGUMENTS --force
python step-6/verify_chunks.py --stem $ARGUMENTS python chunks/verify_chunks.py --stem $ARGUMENTS
``` ```
+1 -1
View File
@@ -43,4 +43,4 @@ Per i path degli script e degli output usa `git ls-files` o esplora la root: la
## Skills custom ## Skills custom
- `/prepare-md <path|stem>` — corregge `clean.md`: sillabazione, artefatti, header, paragrafi spezzati, gerarchia. - `/prepare-md <path|stem>` — corregge `clean.md`: sillabazione, artefatti, header, paragrafi spezzati, gerarchia.
- `/step6-fix <stem>` — verifica chunk, dry-run e applicazione fix via `fix_chunks.py`. - `/post-chunk <stem>` — verifica chunk, dry-run, fix via `fix_chunks.py` e prepara per la vettorizzazione.