You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(senato-votes): elimina i 403 da query troppo lunga (chunking + query compatta) (#76)
* fix(senato-votes): spezza le OR-chain in query da 25 termini (#72)
L'endpoint Senato respinge con 403 le richieste con query string oltre
~2 KB, e il POST è sempre rifiutato: l'unica strada è tenere corta la
GET. Con 53 fiducie in leg. 19 la OR-chain su osr:fase superava la
soglia e --keyword falliva sistematicamente.
Due i punti interessati: il supplemento fiducie e il Fallback 1. Il
merge resta first-wins, quindi l'esito non dipende dai confini dei
blocchi.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix(senato-votes): compatta la query principale sotto i 2047 byte (#72)
Il chunking non bastava: la query principale sfora da sola con keyword
multi-parola (2059 byte con "corte dei conti", limite 2047), e lì non
c'è nessuna lista da spezzare. Indentazione rimossa e header prefissi
ridotto ai due usati: 2081 -> 1926 byte di URL.
La keyword entra tre volte nella query, quindi il margine non è
infinito: assertQueryFits blocca in partenza le query troppo lunghe con
un messaggio che dice cosa fare, invece del 403 opaco.
Soglia misurata al byte per bisezione (2047 passa, 2048 no), con query
di controllo a 200 prima e dopo: non è il blocco per frequenza.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* docs(skill-cli): distingui i due 403 del Senato (dimensione vs frequenza)
Stesso codice e stessa pagina di errore per due cause opposte: nel primo
caso ritentare è inutile (va accorciata la query), nel secondo è dannoso.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* fix(review): riferimento corretto alla soglia e test fedele al client
- il commento sulla query compatta rimandava a SENATO_MAX_OR_TERMS, che
riguarda il chunking: il vincolo qui è SENATO_MAX_REQUEST_URI
- l'asserzione sulla dimensione usava encodeURIComponent su un frammento;
ora sta accanto agli helper, misura con senatoRequestUriLength (stesso
encoding del client) su una query intera con i suoi prefissi
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* docs: rimanda a SENATO_MAX_REQUEST_URI invece del valore approssimato
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: skills/italian-parliament-cli/SKILL.md
+5Lines changed: 5 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -115,6 +115,7 @@ Regole d'oro:
115
115
-**Prova più sinonimi e radici di parola** prima di concludere. Preferisci la **radice** breve che copre più forme: `elett` → elettorale/elettori, `elez` → elezione/elezioni (occhio: `elezioni` al plurale non matcha un titolo con `elezione` al singolare — la radice sì); `ambient` → ambiente/ambientale. Se il tool matcha a confini di parola (es. `aic --keyword`), usa più keyword separate.
116
116
-**Vuoto ≠ assente.** Se non trovi nulla, riformula con un sinonimo o una radice prima di dire all'utente che il dato non c'è. Solo dopo 2-3 varianti fallite l'assenza è credibile.
117
117
-**Sindacato ispettivo (Senato) non è ricercabile per argomento**: `sindacato-ispettivo --keyword` non filtra sull'oggetto perché il LOD Senato non espone l'oggetto/testo dell'atto (solo tipo, numero, data, firmatari). Il testo vive solo nella pagina HTML esterna. Non promettere ricerche tematiche su questo tool.
118
+
-**Sul Senato la keyword corta conviene due volte.** Oltre a matchare più forme, evita di sbattere contro il limite di dimensione delle richieste (vedi Tips): sui tool Senato la keyword entra tre volte nella query, quindi una frase lunga la fa crescere in fretta.
118
119
119
120
## Grounding (non inventare)
120
121
@@ -133,3 +134,7 @@ Quando ricostruisci iter, voti o schede, il rischio è la **confabulazione su sc
133
134
-**Senato confidence votes have empty `ddl_uri` at the source**, but `senato-votes list --ddl-uri <uri>`**now returns the *fiducia* anyway** (it resolves the DDL's seduta dates and re-links the confidence vote of that day). Still check `ddl_uri` on any "final" vote found by date: it may belong to a different act (unified text). `--ddl-uri`**derives the legislature from the DDL**, so a historical DDL (e.g. leg.18 `http://dati.senato.it/ddl/52988`) works without passing `--legislature`.
134
135
-**Senato — quando c'è il voto individuale**: `senato-vote-detail` dà il sì/no del singolo senatore solo per i voti di **merito** (`type` = `elettronica`, `nominale con appello`, `controprova`). Per `segreta` (voto segreto) e `verifica numero legale` (conteggio del quorum) restituisce solo le presenze (`Presente non votante`, `In congedo/missione`), **mai** una scelta espressa (né `Favorevole`, né `Contrario`, né `Astenuto`): la scelta non è nel dato. Non dedurre il voto individuale su queste due modalità.
135
136
-**Question time Camera per sede**: le interrogazioni a risposta immediata hanno la sede nel label in modo regolare, e `aic --type` matcha anche sul label. Quindi la sede è già filtrabile senza campo dedicato: `aic list --type "immediata in assemblea"` = question time in Aula, `aic list --type "immediata in commissione"` = in commissione (combinabile con `--keyword <tema>`).
137
+
-**Senato: due errori diversi si presentano allo stesso modo.** L'endpoint del Senato accetta richieste fino a **2047 byte** di URL e rifiuta le più lunghe, ma risponde `403` sia in quel caso sia quando le richieste sono troppo ravvicinate — e la pagina di errore è identica. Regola pratica:
138
+
-**"Query troppo lunga per l'endpoint del Senato"** (errore della CLI, prima di uscire in rete): accorcia la keyword — una radice breve basta, il match è per sottostringa — oppure restringi l'intervallo di date. Ritentare identico non serve a nulla.
139
+
-**`403` restituito dall'endpoint**: sono troppe richieste ravvicinate. Aspetta qualche minuto, non ritentare a raffica. La CLI già distanzia di 2 secondi le proprie chiamate al Senato: il blocco arriva quando si sommano più comandi o test in sequenza.
140
+
- Nota: il limite riguarda **solo il Senato**. La Camera accetta richieste molto più grandi.
? ` La parola chiave "${keyword}" pesa circa tre volte la sua lunghezza: accorciala (una radice più corta basta, il match è per sottostringa)`
41
+
: " Restringi i filtri";
42
+
thrownewError(
43
+
`Query troppo lunga per l'endpoint del Senato: ${len} byte di request-URI, il massimo accettato è ${SENATO_MAX_REQUEST_URI}.${perche} oppure aggiungi un intervallo di date più stretto.`,
0 commit comments