Skip to content

Commit 3e569d5

Browse files
committed
docs: aggiorna wiki LOD
1 parent f5b9214 commit 3e569d5

5 files changed

Lines changed: 58 additions & 0 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ docs/gap-analysis-2026-06-28/
2525
docs/gap-analysis-2026-07-01/
2626
docs/note-gestori-lod/
2727
docs/news-agent/
28+
docs/campagna-ripartenza-dati.md
29+
docs/campagna-parlamento-aperto/
2830

2931
# memoria orfana agente (ogni run è vergine)
3032
.claude/agent-memory/

docs/lod-wiki/camera/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Endpoint SPARQL: `https://dati.camera.it/sparql`. Ontologia OCD (namespace `http
1010
* [Date degli atti di sindacato ispettivo (aic)](aic-date.md) - `dc:date` è presentazione (a volte composta `pres-modifica`), `ocd:endDate` è conclusione/trattazione; la seduta NON è un link strutturato (numero solo in `dc:description`). Trappola question time.
1111
* [Iter di un atto — timeline degli stati](iter-statoIter.md) - la cronologia dell'iter è una timeline via `ocd:rif_statoIter` (uno stato per fase, `dc:date`+`dc:title`); copertura alla pari tra legislature (18 = 19). Il ramo Senato dà per design solo lo stato corrente (timeline nel feed RSS), asimmetria di ramo non di legislatura.
1212
* [Votazione → atto collegato](votazioni-atto-collegato.md) - `ocd:rif_attoCamera` manca su circa metà delle votazioni e su alcune sedute manca all'intera giornata (es. `s19_689`, legge elettorale). L'atto si ricostruisce dal testo di `dc:description` (ODG: numero centrale di `9/<atto>/<n>`) e, per i voti a codice secco (`EM 1.1077`), solo dalla monotematicità della seduta — 37% delle sedute leg. 19.
13+
* [Voto a scrutinio segreto — dettaglio per-deputato](voto-segreto-dettaglio.md) - su una votazione `secret_vote=true`, `vote-detail` dà nel campo `vote` solo `Ha votato`/`Non ha votato`/`Astensione`, mai `Favorevole`/`Contrario`: il voto segreto è segreto, la scelta individuale non esiste alla fonte. Regola anti-confabulazione per l'LLM (specchio del caso Senato `segreta`).
1314
* [Firmatari di decreti-legge e atti governativi](firmatari-atti-governativi.md) - sugli atti del Governo `ocd:primo_firmatario` punta a un blank node "membro di governo", non a un deputato: il nome del ministro è via `ocd:rif_persona`, il dicastero in `ocd:ruolo`. Senza seguirli il nome torna vuoto.
1415

1516
# Fonti non-LOD (HTML/PDF)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
type: Gotcha
3+
title: Scrutinio segreto — la scelta individuale non è mai registrata (alla Camera vote-detail dà solo "Ha votato")
4+
description: principio generale, valido per qualsiasi votazione a scrutinio segreto in qualunque contesto (Camera, Senato, ogni organo deliberativo): il voto segreto è segreto, la scelta del singolo NON è registrata alla fonte. Non è un buco del dato. Alla Camera emerge così: vote-detail su secret_vote=true dà nel campo `vote` solo "Ha votato"/"Non ha votato"/"Astensione", mai "Favorevole"/"Contrario". Serve a non far confabulare l'esito individuale a un LLM.
5+
resource: https://dati.camera.it/sparql
6+
tags: [camera, senato, ocd, votazione, vote-detail, scrutinio-segreto, confabulazione, gotcha]
7+
timestamp: 2026-07-24
8+
---
9+
10+
# Principio generale
11+
12+
**Uno scrutinio segreto è segreto.** In *qualsiasi* votazione a scrutinio segreto — Camera, Senato, o qualunque contesto — la scelta del singolo votante **non è registrata alla fonte**, per definizione. Non è un difetto del tool né un buco del dato: il dato è *corretto* così. Quindi alla domanda "come ha votato X?" su un voto segreto la risposta è "scelta individuale non registrata", **mai** un sì/no dedotto o inventato.
13+
14+
Cambia solo *come* questo emerge nei dati di ciascun ramo. Sotto, l'istanza verificata alla Camera.
15+
16+
# Come emerge alla Camera
17+
18+
Su una votazione Camera a **scrutinio segreto** (`secret_vote=true` in `votes`), `vote-detail` restituisce comunque la riga per ogni deputato, ma nel campo `vote` la **scelta espressa non c'è**: compaiono solo `Ha votato`, `Non ha votato`, `Astensione`. Il sì/no del singolo deputato non è nel dato.
19+
20+
# Contrasto voto normale vs voto segreto (verificato 2026-07-24, leg. 19)
21+
22+
| votazione | `vote` — valori distinti |
23+
|---|---|
24+
| **normale** (`vs19_696_005`) | `Favorevole` 101, `Contrario` 134, `Astensione` 5, `Non ha votato` 158 |
25+
| **segreta** (`vs19_691_001`, voto finale legge elettorale 16/7/2026) | `Ha votato` 369, `Non ha votato` 28, `Astensione` 2 — **nessun** Favorevole/Contrario |
26+
27+
In un voto normale la scelta di merito è esplicita; nel voto segreto `Favorevole`/`Contrario` sono sostituiti da un unico `Ha votato` (registra la presenza al voto, non come si è votato).
28+
29+
# Regola pratica per l'orchestratore/LLM
30+
31+
Alla domanda "come ha votato il deputato X?" su una votazione a scrutinio segreto: **non dedurre né inventare** il sì/no — la scelta non esiste nel dato, c'è solo `Ha votato`. Il segnale è già derivabile senza campi extra: il flag `secret_vote` è esposto da `votes`, e nel dettaglio l'assenza di `Favorevole`/`Contrario` (solo `Ha votato`) lo conferma.
32+
33+
Simmetrico al Senato, dove `senato-vote-detail` sui voti `segreta` e `verifica numero legale` dà solo le presenze, mai la scelta — vedi [[votazione-tipo-semantico]].
34+
35+
# Citations
36+
37+
[1] Distribuzione `vote` su `vs19_691_001` (legge elettorale, scrutinio segreto): 369 `Ha votato`, 28 `Non ha votato`, 2 `Astensione`; verificato via `vote-detail` 2026-07-24.
38+
[2] Voto normale di contrasto `vs19_696_005`: 101 `Favorevole`, 134 `Contrario`, 5 `Astensione`, 158 `Non ha votato`.
39+
[3] Emerso dalla gap analysis news-driven `docs/news-agent/2026-07-23_12-50.md` come candidato a documentazione (non bug).

docs/lod-wiki/senato/votazioni-covid-2020.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ timestamp: 2026-07-08
1313

1414
- **Decreto Rilancio** (d.l. 19 maggio 2020 n. 34, S.1874): la fiducia votata al Senato il 16 luglio 2020 **non compare affatto** nel LOD. Le votazioni di luglio 2020 ci sono (57 in tutto il mese), ma sono tutte mozioni e comunicazioni del governo: nessuna riguarda il Rilancio (zero occorrenze di "fiducia"/"rilancio"/"decreto"/"34" tra i label). Le sedute del 16-17 luglio non hanno `osr:Votazione`.
1515
- **Decreto Agosto** (d.l. 14 agosto 2020 n. 104, S.1925): la votazione finale del 7 ottobre 2020 **esiste** nel LOD, ma **non è collegata al DDL** via `osr:oggetto`/`osr:relativoA`. `senato-votes --ddl-uri http://dati.senato.it/ddl/53249` torna vuoto; i voti della seduta n. 262 (7/10/2020) risultano collegati ai soli ddl 53220/53221 (Rendiconto/Assestamento bilancio).
16+
- **Decreto Lockdown/DPCM** (d.l. 25 marzo 2020 n. 19, S.1811): la fiducia votata al Senato il 21 maggio 2020 (esito noto da fonti terze: 155 sì, 123 no) **non è nel LOD** — verificato 2026-07-21 (`senato-votes --legislature 18 --date-from 2020-05-21 --date-to 2020-05-21` → buco "totale", seduta presente senza votazioni). È un buco chirurgico sul singolo giorno: la seduta del 20/5/2020 immediatamente precedente **ha** una votazione regolare sullo stesso ddl (`18-219-1`, questione pregiudiziale, 111 contro 141), quindi il buco colpisce puntualmente la seduta del 21/5 (voto finale), non l'intero DDL né l'intera settimana.
1617

1718
# Le sedute esistono, i voti no
1819

docs/lod-wiki/senato/vuoto-votazioni-diagnosi.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,21 @@ senato-votes list --legislature 18 --date-from 2020-02-26 --date-to 2020-02-26
6565

6666
Conseguenza: qui la mancanza è di **una singola votazione** (la fiducia), non dell'intera seduta di voti. Il buco COVID (seduta con zero voti) e il buco chirurgico (seduta piena ma manca il target) hanno cause probabilmente diverse e vanno segnalati distintamente ai gestori.
6767

68+
# Un quarto stato: falso vuoto da cache stantia dell'endpoint
69+
70+
I tre stati sopra sono buchi **reali** della fonte. Ne esiste un quarto, subdolo, dove il dato **c'è ed è correttamente collegato** ma l'endpoint restituisce comunque vuoto: il Virtuoso Senato può servire un **risultato vuoto rimasto in cache**, generato mentre il grafo era in ricaricamento (finestra tipicamente correlata a uno storm di 403 / endpoint che "flappa"). Se una query per DDL o per data è stata interrogata quando il voto non era ancora caricato, quel vuoto resta cachato e viene riservito anche dopo che il dato è stato caricato.
71+
72+
Firma diagnostica (test A/B/A): la **stessa query byte-per-byte** torna vuota in modo ripetibile, mentre una variante **semanticamente identica ma con testo diverso** (es. uno spazio in più dopo `WHERE`) torna il dato. La cache è keyed sul **testo esatto** della query: cambiando i byte si forza un cache miss → ricalcolo → dato fresco.
73+
74+
```
75+
# stessa query esatta, ripetuta → 0 righe (stantio)
76+
# stessa query + 1 spazio dopo WHERE → 1 riga (dato live)
77+
```
78+
79+
Ma ha anche una **dimensione temporale**: la voce di cache **scade**. Caso verificato 23–24/7/2026 su `senato-votes --ddl-uri http://dati.senato.it/ddl/60262` ("Liberi di scegliere", voto 19-437-4, 142-0-0 del 15/7/2026, con link forte `osr:oggetto → oggettotrattazione/1512289 → osr:relativoA → ddl/60262`): la `datesQuery` interna tornava vuota (stesso testo, ripetibile), mentre la variante con uno spazio tornava la data; ore dopo la **stessa identica query** tornava il dato 3 volte di fila, e il comando reale `--ddl-uri` funzionava di nuovo. Era transitorio e si è auto-risolto alla scadenza della cache.
80+
81+
Regola operativa: se una query per DDL/data torna vuota ma il dato **dovrebbe** esserci (verificalo per altra via — ricerca per data, o SPARQL diretto), non concludere "buco della fonte" e **non** hackerare un cache-bust nel tool (vanificherebbe la cache dell'endpoint, già fragile): sospetta una cache stantia durante un reload e **ri-testa più tardi**. Il test A/B/A distingue subito questo caso dai tre buchi reali sopra.
82+
6883
# Dove è implementato
6984

7085
L'`emptyHint` di `senato-votes` (`src/tools/senato-votes.ts`) esegue questa sonda **al volo, solo sui risultati vuoti con vincolo di data** (2 COUNT leggeri, gate su `offset===0` per non affermare il falso oltre l'ultima pagina) e restituisce l'hint corrispondente allo stato osservato, invece di ripetere un elenco statico di buchi noti. È la funzione pura `buildSenatoVotesEmptyHint` + `probeSenatoDates`.

0 commit comments

Comments
 (0)