Pilote Fessenheim — paquet de vérification 2.0.1
Résultats scientifiques et manuel : version 2.0, avant arbitrage.
Cette révision corrige la distribution et le logiciel ; elle ne recode aucune demande.

PRÉREQUIS
Python 3.9 ou ultérieur, bibliothèque standard uniquement.
Vérifié localement avec Python 3.9.13. Aucun paquet à installer, aucun réseau utilisé
par les commandes de vérification. GNU Make est facultatif.
Le Makefile utilise python3 par défaut. Sous Windows, si seul python est disponible :
    make verify PYTHON=python

DÉMARRAGE
Décompresser paquet-verification.zip et ouvrir un terminal à sa racine.
Conserver l'arborescence : télécharger le seul fichier .py ne suffit pas.

    python donnees/fessenheim/verifier.py

Ou, si GNU Make est installé :

    make verify

Le programme contrôle MANIFEST.sha256, le manifeste CSV et les fichiers publics,
recalcule les trois sorties, puis les compare OCTET PAR OCTET aux références.
Il écrit uniquement dans donnees/fessenheim/out/ : resultats.json, demandes.csv,
decisions.csv et verification.json. Les références publiées restent intactes.
Succès : code de sortie 0 et JSON status=ok. Échec : code 1 et explication JSON.
Les sources et les références peuvent être rendues non modifiables ; out/ doit
rester accessible en écriture. Les contrôles restent actifs avec python -O.

CALCUL SEUL
    python donnees/fessenheim/calculer-resultats.py
Écrit les trois sorties dans out/, sans comparer ni modifier les références.
Utiliser verifier.py pour un contrôle complet des empreintes et du résultat.

PDF OFFICIELS
Le manifeste donne les neuf URL officielles, leurs SHA-256, la consultation,
les pages identifiées et les limites de connaissance sur les pages utilisées.
Ces PDF de tiers sont conservés localement ; ils ne sont pas redistribués dans
le ZIP et ne sont pas nécessaires au seul recalcul des codes.
Pour contrôler également les PDF, les placer aux chemins preuves/fessenheim/...
indiqués dans manifest.csv, puis lancer :

    python donnees/fessenheim/verifier.py --avec-sources

Sans cette option, tout PDF présent est contrôlé et les PDF absents sont énumérés.
L'option exige les neuf PDF. Un succès sans eux valide le calcul et l'intégrité du
paquet public ; il ne signifie pas que les sources documentaires ont été relues.

MANIFESTES
manifest.csv décrit tous les fichiers publics du paquet et les neuf PDF externes.
Les chemins sont relatifs à la racine de ce fichier README.
requis_calcul=oui désigne les dépendances du calcul seul, programme compris.
requis_verification=oui désigne les fichiers nécessaires au contrôle complet.
MANIFEST.sha256 scelle les fichiers publics ainsi que manifest.csv. Il ne peut
contenir sa propre empreinte. Le ZIP dérivé et les sorties out/ sont exclus pour
éviter une autoréférence ; le fabricant affiche l'empreinte du ZIP final.
Une empreinte garantit une identité de contenu par rapport au manifeste reçu ;
elle n'authentifie pas à elle seule l'auteur ou la date de publication.

PROVENANCE
provenance/session-A.json et session-B.json identifient les sessions et les traces
retrouvées. Le modèle déclaré était gpt-6.1-sol, effort xhigh. La révision interne
exacte est inconnue. Les consignes initiales et relances ne sont pas récupérables
en texte clair dans les traces consultées : elles sont déclarées inconnues, sans
reconstitution présentée comme originale. Les critères conservés se trouvent
dans les protocoles figés. La liste exhaustive des pièces effectivement fournies
reste inconnue ; les pièces attestées par les codes et la note sont distinguées.
Les journaux de session complets, qui contiennent un contexte privé, ne sont pas
redistribués. Les métadonnées publiées ne valent pas publication de ces journaux.

VERSION ET PUBLICATION
Version du paquet préparé : 2.0.1 ; état des codes et résultats : 2.0 avant arbitrage.
Lire CHANGELOG, CITATION.cff, LICENCES.txt et publication.json.
Le dépôt scientifique dédié est https://github.com/stephaneerard/pilote-fessenheim.
publication.json est l'instantané des démarches au moment du scellement, avant
création de l'étiquette. Leur progression ultérieure est suivie dans le fichier
etat-publication.json de la branche principale, hors de ce paquet figé.
Aucune capture, archive ou DOI n'est annoncé comme obtenu avant confirmation.
L'étiquette proposée est pilote-fessenheim-v2.0.1.
Ne jamais déplacer une étiquette publiée pour corriger une version : préparer
une nouvelle version et conserver les codes initiaux.

ARCHIVAGE À EFFECTUER APRÈS PUBLICATION
1. Publier le sous-ensemble scientifique et son historique dans un dépôt public
   explicitement choisi ; préserver les octets des fichiers initiaux.
2. Vérifier ce commit, créer l'étiquette de version puis la release correspondante.
3. Soumettre séparément les URL du manifeste à Save Page Now. Une demande de
   capture ne prouve pas une capture réussie. Vérifier le PDF de chaque capture
   et son empreinte avant de renseigner archive_url et archive_statut.
4. Demander l'archivage du dépôt à Software Heritage, attendre son ingestion et
   noter le SWHID réellement obtenu ainsi que la révision visée.
5. Déposer la version étiquetée dans Zenodo, via l'intégration d'un dépôt dédié
   ou un dépôt manuel de ce paquet. Un tag seul ne déclenche pas un DOI.
6. Enregistrer le DOI de cette version, compléter CITATION.cff, et journaliser
   ces ajouts dans une nouvelle révision des métadonnées sans réécrire l'état figé.

Documentation officielle :
https://help.archive.org/help/save-pages-in-the-wayback-machine/
https://www.softwareheritage.org/software-heritage-faq/
https://help.zenodo.org/docs/github/archive-software/github-upload/
https://help.zenodo.org/docs/github/describe-software/citation-file/

RECONSTRUIRE LE ZIP
    python donnees/fessenheim/fabriquer-paquet.py
Ou : make package
Cette commande explicite vérifie le paquet puis écrit paquet-verification.zip
à sa racine. Elle utilise uniquement les fichiers scellés, avec ordre et dates
ZIP fixes. Elle n'archive pas les PDF, le contexte privé, out/ ou les caches.
Une reconstruction avec la même version de Python et zlib est déterministe.
L'empreinte exacte du ZIP diffusé est publiée dans paquet-verification.zip.sha256,
avec Python, zlib, taille et empreinte du manifeste dans
paquet-verification.zip.metadata.json. Ces deux fichiers dérivés sont diffusés
à côté du ZIP ; ils ne sont pas inclus dedans ni dans son propre scellement.
Un ZIP reconstruit ailleurs peut avoir d'autres octets sans changer les entrées.

Les empreintes sont un état figé à réviser explicitement lors d'une nouvelle
version. Ni le vérificateur ni le fabricant ne les régénèrent pour faire passer
un contrôle en échec. Les tests de non-régression sont dans
donnees/fessenheim/test_verification.py. Ils fonctionnent sans ZIP préexistant :
    python donnees/fessenheim/test_verification.py
Les fixtures sont copiées depuis les fichiers scellés, même sur un paquet juste
décompressé. Un test fabrique sa propre archive et en contrôle l'empreinte publiée.

RÉFÉRENCES JURIDIQUES
donnees/references-juridiques.json décrit les URL officielles, l'état d'accès et
les compléments institutionnels disponibles. Une erreur d'accès n'établit pas
que le lien ou la version est faux. La fiche juridique originale est conservée.
