Skip to content

feat(senato-votes): emptyHint dinamico con sonda del grafo#68

Merged
aborruso merged 3 commits into
mainfrom
feat/senato-votes-probe-empty-hint
Jul 15, 2026
Merged

feat(senato-votes): emptyHint dinamico con sonda del grafo#68
aborruso merged 3 commits into
mainfrom
feat/senato-votes-probe-empty-hint

Conversation

@aborruso

Copy link
Copy Markdown
Member

Contesto

Dal report news-agent docs/news-agent/2026-07-15_12-08.md (rilievo P0). L'emptyHint di senato-votes era una stringa statica: su ogni risultato vuoto ripeteva tre blocchi fissi (--ddl-uri, filtri label, buco COVID 10/3–16/4/2020), anche fuori contesto. Cercando la fiducia Milleproroghe (--date-from 2020-02-26 --confidence-vote) l'agente vedeva l'avviso su una finestra che non interseca il 26/2 e il testo su --ddl-uri mai usato → rumore diagnostico che confonde chi legge.

Approccio: osservare, non ricordare

Invece di elencare buchi noti (fragile: sul 26/2 indovinerebbe male), sui risultati vuoti con vincolo di data execute() sonda il grafo al volo e riporta lo stato reale. Meccanismo: result.hint (dinamico) ha già precedenza su emptyHint statico su MCP e CLI — nessuna modifica infrastrutturale.

Sonda = 2 COUNT leggeri (osr:SedutaAssemblea + osr:Votazione) sull'intervallo. Tre esiti:

Osservazione Hint
sedute=0 nessuna seduta d'Assemblea: probabilmente non si è votato in Aula (o non caricato)
sedute>0, votazioni=0 fingerprint di un buco della fonte — rileva il gap #36 dinamicamente, su qualsiasi data, senza hardcode
votazioni>0 dato pieno, è il filtro (caso 26/2: 21 voti ma nessuna fiducia)

Il caso Milleproroghe cade da solo nella riga giusta senza sapere in anticipo che il 26/2 è un buco — ed è un buco diverso dal COVID (9/4 ha zero voti, 26/2 ne ha 21 ma manca la fiducia): la sonda li separa.

Dettagli

  • Gate sonda: dateFrom|dateTo + !ddlUri + offset === 0 (oltre l'ultima pagina la sonda affermerebbe il falso, "N voti ma nessuno matcha").
  • emptyHint statico ridotto a fallback neutro: niente più buchi hardcoded → una sola fonte di verità.
  • Funzione pura buildSenatoVotesEmptyHint estratta e testata.

Verifica

  • tsc pulito, 170/170 test (8 nuovi unitari sui 3 rami sonda + senza-date).
  • CLI live su 5 contesti (leg 18/19, singola data e range, offset 0/100):
    • 26/2/2020 --confidence-vote"21 votazioni… ma nessuna corrisponde ai filtri attivi"
    • 10/3–16/4/2020"9 sedute… ma ZERO votazioni… buco della fonte"
    • 15/8/2020"non risulta alcuna seduta d'Assemblea"
    • --offset 100 oltre l'ultima pagina → hint statico, nessuna falsa affermazione

Fuori scope

🤖 Generated with Claude Code

L'emptyHint statico ripeteva su ogni risultato vuoto tre blocchi fissi
(--ddl-uri, filtri label, buco COVID 10/3-16/4/2020) anche fuori contesto:
per la fiducia Milleproroghe (26/2/2020) mostrava un avviso su una finestra
che non interseca quella data e il testo su --ddl-uri mai usato.

Ora, sui risultati vuoti con vincolo di data (offset 0, non-DDL), execute()
valorizza result.hint sondando il grafo al volo: 2 COUNT (SedutaAssemblea +
Votazione) sull'intervallo distinguono lo stato reale senza sapere dov'e' il
buco:
- sedute=0        -> nessuna seduta d'Assemblea
- sedute>0, vot=0 -> fingerprint di un buco della fonte (rileva #36 su
                     qualsiasi data, non hardcoded)
- vot>0           -> dato pieno, e' il filtro (26/2: 21 voti, nessuna fiducia)

Gate su offset===0: oltre l'ultima pagina la sonda affermerebbe il falso.
emptyHint statico ridotto a fallback neutro (una sola fonte di verita').

Funzione pura buildSenatoVotesEmptyHint + 8 test unitari; 170/170 verdi,
tsc pulito; verificato live su 5 contesti (leg 18/19, data e range, offset 0/100).

Emerso dal report news-agent 2026-07-15_12-08.md (P0).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 15, 2026 10:55

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Questo PR migliora la diagnostica del tool senato-votes (CLI + MCP) quando una query restituisce 0 righe, sostituendo l’emptyHint statico e “rumoroso” con un hint dinamico data-driven basato su una sonda leggera del grafo Senato (2 COUNT) sull’intervallo di date richiesto. L’obiettivo è ridurre falsi indizi e distinguere in modo affidabile tra “nessuna seduta”, “sedute senza votazioni” (gap della fonte) e “ci sono votazioni ma i filtri escludono tutto”.

Changes:

  • Introdotta una sonda SPARQL (sedute/votazioni) eseguita solo su risultati vuoti con vincolo di data, offset===0 e senza ddlUri, e usata per costruire result.hint.
  • Ridotto emptyHint statico a fallback neutro; estratta funzione pura buildSenatoVotesEmptyHint per comporre messaggi coerenti e testabili.
  • Aggiunti test unitari mirati per i tre rami della sonda + fallback senza sonda; aggiornato LOG.md.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
src/tools/senato-votes.ts Aggiunge sonda “COUNT sedute/votazioni” su path vuoto con date e costruzione di result.hint dinamico; riduce emptyHint statico a fallback neutro.
src/tools/senato-votes.test.ts Introduce test unitari per buildSenatoVotesEmptyHint coprendo rami con/senza sonda.
LOG.md Registra la modifica in log con contesto e verifica.

@greptile-apps

greptile-apps Bot commented Jul 15, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adds live diagnostics for empty senato-votes results. The main changes are:

  • Counts Senate sessions and votes for the requested date range.
  • Produces a contextual hint from the observed graph state.
  • Falls back to a neutral hint when the optional probe fails.
  • Combines both counts into one SPARQL request.
  • Adds unit tests and documentation for the three diagnostic states.

Important Files Changed

Filename Overview
src/tools/senato-votes.ts Adds the graph probe, contextual empty-result hints, safe probe fallback, and a combined aggregate query.
src/tools/senato-votes.test.ts Covers the three probe outcomes and the static hint variants.
docs/lod-wiki/senato/vuoto-votazioni-diagnosi.md Documents how session and vote counts distinguish the three empty-result states.

Reviews (3): Last reviewed commit: "fix(senato-votes): sonda resiliente e a ..." | Re-trigger Greptile

Comment thread src/tools/senato-votes.ts
Comment thread src/tools/senato-votes.ts Outdated
aborruso and others added 2 commits July 15, 2026 12:59
Nuova nota vuoto-votazioni-diagnosi.md: sondando sedute (osr:SedutaAssemblea)
vs votazioni si distinguono tre stati con conclusioni opposte — nessuna seduta
/ buco "totale" (sedute senza voti, COVID) / buco "chirurgico" (voti presenti
ma il target manca). Documenta il caso 26/2/2020 Milleproroghe (21 voti ma
fiducia assente, pattern diverso dal COVID e pre-lockdown) e collega il metodo
all'emptyHint dinamico implementato in senato-votes.

Cross-link da index.md (sezione Diagnostica) e da votazioni-covid-2020.md
(distinzione totale vs chirurgico).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Due rilievi Greptile sul path emptyHint dinamico:

- P1 — la sonda è diagnostica accessoria: se snQuery fallisce (es. 403/timeout
  Senato, frequenti) l'eccezione non catturata trasformava un risultato vuoto
  legittimo in un errore MCP/CLI. Aggiunto .catch(() => undefined): degrada
  all'hint statico.
- P2 — le due COUNT separate, col throttle Senato ~2s, aggiungevano ~4s al path
  vuoto. Unite in una sola query (COUNT sedute + COUNT votazioni via OPTIONAL
  sulla stessa seduta): dimezza latenza e richieste all'endpoint (meno 403).
  Risultati identici verificati live (26/2: 1/21, COVID: 9/0, ferragosto: 0/0).

Build/tsc/8 test verdi; verifica live invariata.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@aborruso
aborruso merged commit b150dd0 into main Jul 15, 2026
2 checks passed
@aborruso
aborruso deleted the feat/senato-votes-probe-empty-hint branch July 15, 2026 11:07
aborruso added a commit that referenced this pull request Jul 15, 2026
Bump versione nei 5 punti (package/server/worker/client/manifest); tools 43
invariato. La feature (sonda data-driven dell'emptyHint) e i fix di review
P1/P2 sono gia' in main via PR #68; questa e' la release patch che li versiona.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants