Livello dei casi 1/5 — provenienza: una riga di prova per ogni chiamata a monte #4
No reviewers
Labels
No labels
Doing
P1: critical
P2: important
P3: useful
P4: nice to have
P5: reminder
To Do
bug
invalid
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
peacelink/mcp-peacedata!4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "case-layer-1-provenienza"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Branch
case-layer-1-provenienza→develop. Circa 1.370 righe: 476 di codice (445 sonoprovenance.py), 893 di test.Spento di default: senza
PROVENANCE_LOGnon scrive niente e non cambia niente.Cosa fa
provenance.py(nuovo).record()scrive una riga JSON per ogni chiamata HTTP a monte: modulo, tool, URL, richiesta, stato,retrieved_at, byte e sha256 dei byte grezzi,case_id. Va nel file indicato daPROVENANCE_LOG. Se imposti anchePROVENANCE_BLOBS, salva pure i byte grezzi, per hash (<sha256>.bin).read_records(case_id)rilegge le righe di un caso, e fa il parsing solo delle righe che contengono quelcase_id.arpa_taranto._get_csv;eea_air_quality(_get_json,_post_json,_post_parquet);ispra_air_quality.fetch_wfs, dentro la funzione, perchécorrelationla importa per nome;correlation._fetch_eea;SupersetClient.execute_sql: qui l'hash è del JSON canonico delle righe restituite, e il record lo dice (sha256_of: "canonical_json").CaseIdMiddlewareinserver.py, montato dopoMetricsMiddleware: legge l'headerX-Case-Ide lo mette su ogni riga di quella richiesta. È un middleware ASGI puro. Oggi nessuno manda l'header, quindicase_idènull.Dockerfile: una riga,COPY provenance.py .. I domini lo importano al caricamento.Perché
[arpa] GET …). Un valore di benzene in una risposta non si riesce a ricondurre ai byte da cui viene.dati_nrt_informambiente_mv) tiene circa 8 giorni e omette le ore invalidate senza dirlo, e gli archivi EEA e ARPA si correggono. I byte fanno da prova solo se li fissi quando arrivano.Cosa NON cambia
PROVENANCE_LOG,record()esce prima di fare qualsiasi cosa: nessun file, nessun hash. È lo stato di default.record()non solleva mai. Con un disco pieno o un percorso sbagliato si perde la riga, mai la risposta. Anche questo è testato: con il sink rotto, output identici.audit_answerefindings.py. Nessuna nuova dipendenza: solo stdlib.Come si prova
Il test gira offline: blocca la rete e sostituisce httpx, fastmcp, pyarrow, starlette e prometheus con finti. Controlla anche che ogni hook sia uno solo per punto di uscita e che i file toccati passino il parser di Python 3.11.
Decisioni per te
PROVENANCE_LOGva messo su un volume persistente del pod. Crescono tutti e due i file:case_idnullo): nelle prove offline una riga pesa fra 0,5 e 1,2 KB.stamp_case(MR3) scorre tutto il file a ogni risposta timbrata, quindi conviene una rotazione. Si può fare senza fermare niente:record()riapre il file a ogni scrittura, e astamp_caseservono solo le righe del turno in corso;PROVENANCE_BLOBSresta vuota e si tengono solo le righe.X-Case-Id.<share_id>:<turno>:<nonce>, con un nonce nuovo a ogni turno: il solo<share_id>:<turno>si ripete, per esempio dopo «Cancella chat».headerssolo su quella rotta, concustomRequestHeaders: {X-Case-Id: ""}(un valore vuoto toglie l'header). La rotta interna resta com'è.provenance.py, in due punti.Se vuoi vedere dove va a finire, gli altri quattro pezzi sono già sul server come branch, senza merge request: case-layer-2-fondamenta, case-layer-3-timbro, case-layer-4-esame e case-layer-5-prosa (facoltativo). Ognuno parte dal precedente, quindi case-layer-5-prosa li contiene tutti. Le merge request le apro una alla volta, dopo questa o come preferisci.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.