Campagnes reproductibles
L'espace de travail experiments/ contient tout ce qu'une campagne produit et tout
ce qu'il faut pour la reproduire. La séparation est stricte : les recettes sont
suivies, les sorties sont locales. Les configurations de campagne et les scripts
exécuteurs vivent dans le contrôle de version ; chaque sortie lourde — benchmarks
générés, enregistrements d'exécution, logs, points de contrôle, lots de preuves et
l'instantané d'environnement — reste sur la machine qui l'a produite et est
régénérée à la demande à partir de la recette.
🗂️ Disposition
| Chemin | Suivi | Contient |
|---|---|---|
configs/ | oui | Configurations de campagne — la recette complète : liste de solveurs, suite de benchmarks, nombres d'exécutions, budgets et la graine maîtresse. |
scripts/ | oui | Exécuteurs de campagne et d'analyse (par exemple run_smoke_pilot.py). |
benchmarks/ | non | Instances de benchmark matérialisées. |
results/ | non | Enregistrements d'exécution dans results/{campaign_id}/{solver_id}/{benchmark_id}/run_{idx}.json. |
logs/ | non | Logs d'exécution dans logs/{campaign_id}_{YYYYMMDD_HHMMSS}.log. |
.checkpoints/ | non | État de campagne reprenable dans .checkpoints/{campaign_id}.json, protégé par un hash de configuration. |
evidence-bundles/ | non | Exports curés et par niveaux de divulgation dans evidence-bundles/{campaign_id}-{tier}/. |
ENVIRONMENT.md | non | Instantané d'hôte, OS, Python et commit capturé au moment de l'exécution. |
Les répertoires de sortie existent localement et sont recréés automatiquement par l'exécuteur de campagne lorsqu'ils sont absents ; rien sous eux n'est jamais mis en zone de préparation.
🧱 Deux couches, une source de vérité
- Couche de reproductibilité (granulaire). Chaque exécution est un
enregistrement JSON dans
results/{campaign_id}/{solver_id}/{benchmark_id}/run_{idx}.json. Le chemin lui-même est l'index — campagne, puis solveur, puis benchmark, puis réplicat — donc toute tranche des preuves est adressable sans base de données. Les enregistrements portent des champs de première classe de temps, convergence, solution et effort de solveur ; rien d'analytique ne se cache dans des notes en forme libre. - Couche de curation (par niveaux).
evidence-bundles/{campaign_id}-{tier}/contient les exports par niveaux de divulgation dérivés des enregistrements d'exécution. Les identifiants de niveau proviennent du vocabulaire fixe sûr pour le public —core,speed,quality,platform— et un lot est toujours dérivé des enregistrements au niveau exécution, jamais une source de vérité indépendante.
🔁 Contrat de reproductibilité
- Chaque campagne déclare une graine maîtresse ; la graine de chaque exécution se dérive déterministiquement d'elle et de la position de l'exécution — même configuration, mêmes graines, mêmes enregistrements, bit pour bit.
.checkpoints/{campaign_id}.jsonenregistre le hash de la configuration. Une configuration inchangée reprend depuis le point de contrôle et saute les exécutions terminées ; tout changement de configuration invalide le point de contrôle d'emblée.ENVIRONMENT.mdcapture un instantané de l'hôte, du système d'exploitation, de Python et du commit du dépôt au moment de l'exécution, de sorte que chaque résultat est traçable jusqu'au code et à la machine exacts qui l'ont produit.- Les logs sont en ajout-seul par exécution.
Ces pratiques — graine par exécution, capture de configuration et d'environnement afin qu'un résultat puisse être régénéré à partir de sa recette — suivent des standards reconnus pour documenter et reproduire les expériences computationnelles (ACM Artifact Review and Badging, Version 1.1, 2020; Gundersen & Kjensmo 2018).
Le manifeste de reproductibilité justifie aussi le plancher de 30 exécutions par un énoncé de puissance dérivé : au plancher, avec un niveau bilatéral de 0,05 et une puissance de 0,80, le plan apparié détecte des effets standardisés d'environ 0,523 ou plus sous l'approximation de Wilcoxon ajustée par l'ARE (Noether 1987 ; cadre : Campelo et Takahashi 2019). La phrase est recalculée à partir du plancher au moment du rendu, si bien qu'elle ne peut jamais dériver du plancher qu'elle justifie. Deux descripteurs de protocole supplémentaires l'accompagnent : une entrée de mise-à-l'échelle-de-budget enregistrant comment le budget d'évaluation croît avec la taille d'instance (le protocole mis à l'échelle par la taille de Vallada, Ruiz et Framiñan 2015, enregistré par le manifeste de comparaison-équitable du laboratoire comme une règle mise à l'échelle par l'évaluation ou comme fixée-par-campagne), et une entrée de parité-de-réglage portant le budget de réglage égal par algorithme que toute campagne comparative déclare (LaTorre, Molina, Osaba, Poyatos, Del Ser et Herrera 2021) ; une parité non déclarée se rend honnêtement comme non déclarée.
🏃 Comment une campagne écrit dans l'espace de travail
-
Créez ou ajustez une configuration de campagne sous
configs/(smoke-pilot.jsonest le point de départ suivi). -
Exécutez-la via l'exécuteur de campagne — programmatiquement comme dans les tutoriels, via un script de recette suivi (
uv run python experiments/scripts/run_smoke_pilot.py), ou via l'interface en ligne de commande :uv run dispatchatlas-lab run --config experiments/configs/smoke-pilot.json -
L'exécuteur valide la configuration en un plan déterministe, écrit
results/{campaign_id}/plan.jsonetenvironment.json, puis persiste un enregistrement haché par contenu par exécution terminée plus toute tentative échouée. -
Inspectez les enregistrements d'exécution sous
results/et reprenez, rejouez ou réexécutez depuis la même configuration. Réexécuter la même configuration reproduit les mêmes enregistrements bit pour bit ; une configuration modifiée invalide le point de contrôle plutôt que de le réutiliser silencieusement.
La page du moteur de campagnes documente intégralement la validation, les budgets en exécution à blanc, les modes d'exécution, les réessais, la reprise et la vérification par rejeu.
📦 Des enregistrements d'exécution aux lots de preuves
La voie d'export transforme un répertoire de campagne terminé en un lot curé sous
evidence-bundles/{campaign_id}-{tier}/ :
uv run dispatchatlas export `
--campaign-dir .\experiments\results\smoke-pilot `
--target-dir .\experiments `
--authorized-output-root .\experiments `
--tier coretools/build_campaign_evidence.py pilote la même voie à grande échelle,
construisant catalogues de benchmarks, campagnes, analyses et lots pour chaque
niveau à partir d'une configuration enregistrée. La page lots de preuves
décrit les niveaux ; exports d'analyse décrit le contenu
statistique.
🔒 Frontière sûre pour le public
Les pages publiques ne lisent jamais cet espace de travail directement : le site de documentation et le portail des résultats consomment uniquement des exports validés et filtrés par divulgation produits à partir de la couche curée. Les registres de programme privés dans l'espace de travail sont ignorés par le contrôle de version et n'atteignent jamais une surface publique.