[roadmap] Add evidence storage restore drill phase two#39
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b76d75f9ae
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| events: events | ||
| .into_iter() | ||
| .filter(|event| event.event_type.starts_with("storage_")) | ||
| .collect(), |
There was a problem hiding this comment.
Filter storage events before limiting history
This filters storage events only after evidence_integrity_events(..., 100) has already loaded the 100 most recent events of all types. For evidence items with more than 100 newer integrity/legal-hold/disposition events, /storage-events will return an empty or incomplete storage audit trail even though older storage drill events exist. The storage predicate needs to be applied in the event query, or the endpoint needs storage-specific pagination before the limit is enforced.
Useful? React with 👍 / 👎.
Problemstellung und Ziel
Evidence Integrity & Disposition Phase 1 kann Hashes und Disposition-Metadaten verwalten, aber Evidence-Artefakte waren noch nicht ueber eine klar gekapselte Storage-Schicht pruefbar. Dieser PR setzt den Roadmap-Meilenstein "Evidence Object Storage & Restore Drill - Phase 2" um: lokale Evidence-Artefakte werden ueber eine interne Storage-Abstraktion sicher inspiziert und per Restore-/Integrity-Drill gegen die bestehenden SHA-256-Metadaten geprueft.
Ziel ist bewusst kein produktives S3/Object-Storage-Backend, sondern ein erster lokaler Backend-Pfad fuer den bestehenden Media Root mit sicheren Referenzen, tenantgebundenen API-/Web-Flows und auditierbaren Storage-Events.
Geaenderte Funktionen
local_filesystem.valid,mismatch,missing_artifactodercheck_failed.storage_*fuer Start, Artefakt gefunden, Missing/Unreadable, Hash gueltig, Hash-Mismatch, Drill-Fehler und Abschluss./evidence/integrity/mit Storage-Status und Storage-Drill-Aktion fuer schreibende Rollen.Betroffene Dateien
rust/iscy-backend/src/evidence_artifact_storage.rsrust/iscy-backend/src/evidence_store.rsrust/iscy-backend/src/lib.rsrust/iscy-backend/tests/http_tests.rsCHANGELOG.mddocs/ISCY_Handbuch.mddocs/ISCY_Handbuch.pdfdocs/ISCY_STRATEGIC_ROADMAP.mdDatenbankmigrationen
Keine neue Migration. Phase 2 nutzt bewusst die vorhandenen Felder und die bestehende Ereignistabelle aus Migration
0033_rust_evidence_integrity_disposition:Dadurch bleiben bestehende Deployments additiv kompatibel und es gibt keine destruktiven Schemaaenderungen.
Neue oder geaenderte API-Endpunkte
GET /api/v1/evidence/storageGET /api/v1/evidence/{evidence_id}/storagePOST /api/v1/evidence/{evidence_id}/storage-drillPOST /api/v1/evidence/storage-drillsGET /api/v1/evidence/{evidence_id}/storage-eventsDie bestehenden Evidence-Integrity-Endpunkte bleiben erhalten.
GUI-Aenderungen
/evidence/integrity/zeigt jetzt Storage-Backend, Artefaktstatus, sichere Storage-Fehlerklasse und letzten Drill-/Integritaetszeitpunkt.Storage-Drill-Aktion.Tenant- und Berechtigungsgrenzen
Security-Entscheidungen
Ausgefuehrte Tests
cargo fmt --manifest-path rust/iscy-backend/Cargo.toml -- --checkgit diff --checkcargo clippy --locked --manifest-path rust/iscy-backend/Cargo.toml --all-targets -- -D warningscargo test --locked --manifest-path rust/iscy-backend/Cargo.tomlcargo test --locked --manifest-path rust/iscy-backend/Cargo.toml evidence_storage_drill_uses_local_backend_and_keeps_tenant_boundaries -- --nocapturecargo audit --file rust/iscy-backend/Cargo.lock --ignore RUSTSEC-2023-0071cargo deny --manifest-path rust/iscy-backend/Cargo.toml check advisories licenses sourcesmake rust-smokemake rust-restore-smokenix flake check.env.examplemake docs-pdfHinweis:
cargo auditlief mit Exit 0; lokal konnte der crates.io-Index nicht aktualisiert werden (registry: No such file or directory), die RustSec-Datenbank wurde geladen und der Lockfile-Scan hatte keine Funde. Die Compose-Validierung mit der echten.envwar lokal wegen Dateirechten nicht moeglich (.envgehoertnobody:nogroup,0600); fuer Syntaxvalidierung wurde die versionierte.env.exampleverwendet. Der hardened Docker-Build konnte lokal nicht ausgefuehrt werden, weil kein Docker-Daemon unter/var/run/docker.sockerreichbar ist.Bekannte Einschraenkungen
local_filesystem.Bewusst nicht umgesetzt
AI assistance
Prepared with OpenAI Codex assistance. Human review remains required for correctness, security, licensing, provenance, and operational acceptance.