Skip to content

feat(provenance): copie hors poste de l'archive et archivages concurrents - #48

Merged
PhilippeVienne merged 2 commits into
devfrom
feat/provenance-mirror
Sep 26, 2026
Merged

PhilippeVienne merged 2 commits into
devfrom
feat/provenance-mirror

Conversation

@PhilippeVienne

Copy link
Copy Markdown
Contributor

Objet

Suite de #46 : renforce l'archive de provenance.

  • --mirror <répertoire> (répétable, ou OPENEIDAS_PROVENANCE_MIRROR) : chaque archive recopie objets, manifestes et jetons vers un support hors poste (disque externe, NAS, stockage objet monté) ; sous-commande mirror pour rattraper un support resté débranché.
  • La copie ne crée jamais la destination (support non monté signalé, code 3), n'écrase jamais un fichier existant, abandonne une copie dont l'empreinte ne correspond pas.
  • Verrou sur l'archive et un manifeste par seconde au plus : deux sessions qui se terminent en même temps ne divisent plus la chaîne des manifestes.
  • PROVENANCE.md : copie hors poste et archivage automatique en fin de session (hook SessionEnd côté poste, hors dépôt).

Base : dev (4ba7ab0). Aucun code Rust modifié.

Vérifications

Sur une copie de l'archive réelle :

  • copie initiale vers un miroir, puis --archive <miroir> verify --tsa-ca : jetons vérifiés, archive intègre ;
  • second passage : 0 fichier copié ;
  • support absent : signalé, code 3, répertoire non créé ;
  • fichier divergent dans le miroir : signalé, laissé en l'état ;
  • archive --mirror : nouveaux objets et manifeste recopiés ;
  • trois archive lancés simultanément : trois manifestes consécutifs, chaîne intègre (avant le correctif : collision de nom et chaîne divisée).

Revue humaine obligatoire

Voir PROVENANCE.md. Chaque case est cochée par le contributeur humain qui valide la PR, après l'avoir fait lui-même.

  • Revue d'architecture validée par l'humain
  • Code relu et tests unitaires/intégration vérifiés localement
  • Absence de dépendances tierces incompatibles avec la double licence EUPL-1.2 / AGPL-3.0 (make licenses)
  • Validation de l'apport intellectuel et de la paternité humaine sur la modification

Assistance par IA

  • Cette PR a été produite avec l'assistance de Claude Code : les commits concernés portent la remorque Co-authored-by: Claude <noreply@anthropic.com>, auteur et committer restent humains, et scripts/provenance.py archive a été lancé
  • Cette PR a été écrite sans assistance par IA

PhilippeVienne and others added 2 commits September 26, 2026 10:51
…ents

- `--mirror <répertoire>` (répétable, ou OPENEIDAS_PROVENANCE_MIRROR) :
  chaque `archive` recopie objets, manifestes et jetons vers un support
  distinct du poste (disque externe, NAS, stockage objet monté) ; sous-commande
  `mirror` pour rattraper un support resté débranché
- la copie ne crée jamais la destination (un support non monté est signalé,
  code 3, au lieu de remplir le disque local), n'écrase jamais un fichier
  existant et abandonne une copie dont l'empreinte ne correspond pas
- verrou sur l'archive et un manifeste par seconde au plus : des archivages
  simultanés (fins de session parallèles) ne divisent plus la chaîne
- PROVENANCE.md : copie hors poste et archivage automatique en fin de
  session (hook SessionEnd)

Vérifié sur une copie de l'archive réelle : copie initiale puis `verify`
du miroir (jetons vérifiés), second passage idempotent, support absent non
créé, fichier divergent laissé en l'état, trois archivages simultanés sans
rupture de chaîne.

Co-authored-by: Claude <noreply@anthropic.com>
La mise en lecture seule des fichiers copiés échoue sur un disque externe
formaté en exFAT ou NTFS, ce qui interrompait la copie. Elle devient
facultative sur le miroir : l'empreinte vérifiée après copie reste le
contrôle d'intégrité.

Vérifié avec un chmod refusé : 30 fichiers copiés, 0 erreur, miroir
revérifié (archive intègre).

Co-authored-by: Claude <noreply@anthropic.com>
@PhilippeVienne
PhilippeVienne merged commit 0a3d834 into dev Sep 26, 2026
17 checks passed
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.

1 participant