{
  "schema_version": "sf-contrat/1.0",
  "contrat": {
    "cible": "tgt-rfwd-075atrpct",
    "protocoles": [
      "A",
      "B",
      "6h"
    ],
    "cout_canonique": "cst-ar-030-v1",
    "fichier_source": "cron/contrat_donnees.py"
  },
  "versions": [
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|TIAUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|TIAUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|ETCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|ETCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|ADAUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|ADAUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|XRPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|XRPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|SEIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|SEIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-23_1d_long|1d|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-23_1d_long|1d|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|NEARUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|NEARUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|SEIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|SEIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|INJUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|INJUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_long|1d|XRPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_long|1d|XRPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_short|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_short|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_short|1d|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_short|1d|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-24_1d_short|1d|ATOMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-24_1d_short|1d|ATOMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|ONDOUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|ONDOUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|XPLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|XPLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|ETCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|ETCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|PLUMEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|PLUMEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|MORPHOUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|MORPHOUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_long|1d|LINKUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_long|1d|LINKUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_short|1d|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_short|1d|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_short|1d|PLUMEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_short|1d|PLUMEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-25_1d_short|1d|PYTHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-25_1d_short|1d|PYTHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|SEIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|SEIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|FETUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|FETUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|GRAMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|GRAMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|PLUMEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|PLUMEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|AEROUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|AEROUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|SUIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|SUIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_long|1d|JTOUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_long|1d|JTOUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_short|1d|PLUMEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_short|1d|PLUMEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_short|1d|SEIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_short|1d|SEIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-26_1d_short|1d|ONDOUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-26_1d_short|1d|ONDOUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|GRAMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|GRAMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|POLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|POLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|PYTHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|PYTHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|DASHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|DASHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|JTOUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|JTOUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|LINKUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|LINKUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|IMXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|IMXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_long|1d|WLDUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_long|1d|WLDUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_short|1d|GRAMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_short|1d|GRAMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_short|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_short|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-27_1d_short|1d|SEIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-27_1d_short|1d|SEIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|PUMPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|PUMPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|ONDOUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|ONDOUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|SUIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|SUIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|IMXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|IMXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|VIRTUALUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|VIRTUALUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|SEIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|SEIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|RENDERUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|RENDERUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_long|1d|GRAMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_long|1d|GRAMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_short|1d|GRAMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_short|1d|GRAMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_short|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_short|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-28_1d_short|1d|ASTERUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-28_1d_short|1d|ASTERUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|LINKUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|LINKUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|HBARUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|HBARUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|XLMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|XLMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|CRVUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|CRVUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|VIRTUALUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|VIRTUALUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|ALGOUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|ALGOUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|GRAMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|GRAMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_long|1d|PUMPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_long|1d|PUMPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_short|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_short|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_short|1d|LINKUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_short|1d|LINKUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-29_1d_short|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-29_1d_short|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|ICPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|ICPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|PUMPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|PUMPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|ASTERUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|ASTERUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|AAVEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|AAVEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|AVAXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|AVAXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|POLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|POLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_long|1d|XLMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_long|1d|XLMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_short|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_short|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_short|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_short|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-09-30_1d_short|1d|DEXEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-09-30_1d_short|1d|DEXEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|ASTERUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|ASTERUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|STXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|STXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|PUMPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|PUMPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|CRVUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|CRVUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|AAVEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|AAVEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_long|1d|XLMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_long|1d|XLMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_short|1d|WLFIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_short|1d|WLFIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_short|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_short|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-01_1d_short|1d|ETCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-01_1d_short|1d|ETCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|AAVEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|AAVEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|GRAMUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|GRAMUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|DEXEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|DEXEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|ZROUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|ZROUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|STXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|STXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|WLFIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|WLFIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_long|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_long|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_short|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_short|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_short|1d|ASTERUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_short|1d|ASTERUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-02_1d_short|1d|ZROUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-02_1d_short|1d|ZROUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|AAVEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|AAVEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|JSTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|JSTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|DEXEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|DEXEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|WLDUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|WLDUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_long|1d|IMXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_long|1d|IMXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_short|1d|WLFIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_short|1d|WLFIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_short|1d|ASTERUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_short|1d|ASTERUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal.csv",
      "ligne": "2026-10-03_1d_short|1d|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal.csv",
        "ligne": "2026-10-03_1d_short|1d|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|UNIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|UNIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|XRPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|XRPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|SUIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|SUIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|FETUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|FETUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-23_6h_long|6h|INJUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-23_6h_long|6h|INJUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|UNIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|UNIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|INJUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|INJUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|XRPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|XRPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-24_6h_long|6h|DOGEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-24_6h_long|6h|DOGEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|LINKUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|LINKUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|SEIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|SEIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|FETUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|FETUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|SUIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|SUIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-25_6h_long|6h|NEARUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-25_6h_long|6h|NEARUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|LINKUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|LINKUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|DOTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|DOTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|SEIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|SEIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|INJUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|INJUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|ADAUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|ADAUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-26_6h_long|6h|FETUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-26_6h_long|6h|FETUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|ADAUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|ADAUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|NEARUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|NEARUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|DOTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|DOTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-27_6h_long|6h|SUIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-27_6h_long|6h|SUIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|SEIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|SEIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|SUIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|SUIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|PEPEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|PEPEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|UNIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|UNIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-28_6h_long|6h|DOTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-28_6h_long|6h|DOTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|AVAXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|AVAXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|LINKUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|LINKUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|UNIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|UNIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|TIAUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|TIAUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|SUIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|SUIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-29_6h_long|6h|ADAUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-29_6h_long|6h|ADAUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|XRPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|XRPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|FETUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|FETUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|TIAUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|TIAUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|AVAXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|AVAXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-09-30_6h_long|6h|DOGEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-09-30_6h_long|6h|DOGEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|INJUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|INJUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|PEPEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|PEPEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|ADAUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|ADAUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|NEARUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|NEARUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-01_6h_long|6h|XRPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-01_6h_long|6h|XRPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|DOGEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|DOGEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|XRPUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|XRPUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|PEPEUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|PEPEUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-02_6h_long|6h|ADAUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-02_6h_long|6h|ADAUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|TRXUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|TRXUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|INJUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|INJUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|UNIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|UNIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|BNBUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|BNBUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|LTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|LTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|DOTUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|DOTUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|SUIUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|SUIUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|SOLUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|SOLUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|ETHUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|ETHUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_6h.csv",
      "ligne": "2026-10-03_6h_long|6h|BTCUSDT",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_6h.csv",
        "ligne": "2026-10-03_6h_long|6h|BTCUSDT",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|TRXUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|TRXUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|AAVEUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|AAVEUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|GRAMUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|GRAMUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|BTCUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|BTCUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|DEXEUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|DEXEUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|ZROUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|ZROUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|STXUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|STXUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|BNBUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|BNBUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|WLFIUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|WLFIUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|JSTUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|JSTUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|HEMIUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|HEMIUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|SOLUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|SOLUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|ETHUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|ETHUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|LTCUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|LTCUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|XRPUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|XRPUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|SHIBUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|SHIBUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|LINKUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|LINKUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|ADAUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|ADAUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|PUMPUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|PUMPUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|ASTERUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|ASTERUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|XLMUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|XLMUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|VIRTUALUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|VIRTUALUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|ETCUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|ETCUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|ATOMUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|ATOMUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|DOGEUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|DOGEUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|ICPUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|ICPUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|PROMUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|PROMUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|ALGOUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|ALGOUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|MORPHOUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|MORPHOUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_long|SUIUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_long|SUIUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|TRXUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|TRXUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|ASTERUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|ASTERUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|ZROUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|ZROUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|OPUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|OPUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|TIAUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|TIAUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|JSTUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|JSTUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|BTCUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|BTCUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|POLUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|POLUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|AAVEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|AAVEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|TRUMPUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|TRUMPUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|ATOMUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|ATOMUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|WLFIUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|WLFIUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|LDOUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|LDOUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|ACEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|ACEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|ZECUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|ZECUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|EIGENUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|EIGENUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|HEMIUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|HEMIUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|PENDLEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|PENDLEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|DOTUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|DOTUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|XRPUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|XRPUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|BNBUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|BNBUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|ETHUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|ETHUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|SOLUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|SOLUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|VIRTUALUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|VIRTUALUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|STXUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|STXUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|DEXEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|DEXEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|ALGOUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|ALGOUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|XLMUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|XLMUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|SHIBUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|SHIBUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-02_b_short|GIGGLEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "20 colonnes",
      "apres": "23 colonnes (sf-contrat/1.0 : protocol_id, cost_model_id, target_id dérivés)",
      "horodatage": "2026-10-05T20:55Z",
      "motif": "palier 0 tâche 38 — migration de schéma dérivée ; mesures (prix, rendements) intactes ; atteste cron/migrate_contrat_palier0.py ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-02_b_short|GIGGLEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "*",
      "version": 2,
      "champ": "schema",
      "nature": "schema-derive",
      "avant": "23 colonnes",
      "apres": "24 colonnes (statut pending/mesuré)",
      "horodatage": "2026-10-06T06:00Z",
      "motif": "palier 2 tâche 38 — statuts de reprise idempotente (fiche 17) ; valeurs mesurées intactes ; dérivation attestée par cron/migrate_statut_palier2.py",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "*",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|AAVEUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|AAVEUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|JSTUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|JSTUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|BTCUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|BTCUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|BNBUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|BNBUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|TRXUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|TRXUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|DEXEUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|DEXEUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|SOLUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|SOLUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|WLDUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|WLDUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|ETHUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|ETHUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|IMXUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|IMXUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|MINAUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|MINAUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|ZROUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|ZROUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|LTCUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|LTCUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|SHIBUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|SHIBUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|TRUMPUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|TRUMPUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|ADAUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|ADAUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|ALGOUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|ALGOUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|ASTERUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|ASTERUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|PUMPUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|PUMPUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|XRPUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|XRPUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|LINKUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|LINKUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|AVAXUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|AVAXUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|TIAUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|TIAUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|EIGENUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|EIGENUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|STXUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|STXUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|DOGEUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|DOGEUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|GIGGLEUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|GIGGLEUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|VIRTUALUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|VIRTUALUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|ETHFIUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|ETHFIUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_long|LDOUSDT|long",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_long|LDOUSDT|long",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|WLFIUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|WLFIUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|ASTERUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|ASTERUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|TRXUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|TRXUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|DEXEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|DEXEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|LINKUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|LINKUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|POLUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|POLUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|DOGEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|DOGEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|XRPUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|XRPUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|ETHUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|ETHUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|ATOMUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|ATOMUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|ZECUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|ZECUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|FFUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|FFUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|TAOUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|TAOUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|DOTUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|DOTUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|BNBUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|BNBUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|ETHFIUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|ETHFIUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|TIAUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|TIAUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|SHIBUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|SHIBUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|GIGGLEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|GIGGLEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|VIRTUALUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|VIRTUALUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|PENGUUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|PENGUUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|OPUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|OPUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|ETCUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|ETCUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|HEMIUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|HEMIUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|PEPEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|PEPEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|ADAUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|ADAUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|BTCUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|BTCUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|CRVUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|CRVUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|CAKEUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|CAKEUSDT|short",
        "version": 1
      }
    },
    {
      "fichier": "journal_b.csv",
      "ligne": "2026-10-03_b_short|JTOUSDT|short",
      "version": 2,
      "champ": "schema",
      "avant": "sans colonne statut",
      "apres": "colonne statut = « mesuré » (valeur dérivée de l'état de mesure)",
      "horodatage": "2026-10-06T18:44Z",
      "motif": "palier 2 tâche 38 — dérivation de colonne statut (fiche 17) ; mesures (prix, rendements) intactes ; dérogation chaîne d'empreintes : dérivation de colonnes attestée par cron/migrate_contrat_palier0.py (même traitement que les lignes 2026-10-02)",
      "nature": "schema-derive",
      "lien_original": {
        "fichier": "journal_b.csv",
        "ligne": "2026-10-03_b_short|JTOUSDT|short",
        "version": 1
      }
    }
  ],
  "note": "Registre des corrections versionnées (tâche 29) : après publication, une ligne du forward test ne change jamais en place. Une correction crée une NOUVELLE ligne (version 2, 3...) avec horodatage, motif, champ, valeur avant et valeur après — la version initiale reste visible à jamais dans les journaux et le manifeste d'immutabilité. Provenance par observation (palier 0, tâche 38) : chaque ligne porte protocol_id, cost_model_id, target_id ; le manifeste de bundle relie les observations aux fichiers et empreintes."
}