Files
moteurs/fixtures
JulesandClaude Fable 5.1 91c755f884 Noyau : doublons, accessoires forcés orphelins, statut non monotone (SPEC menu §12 n° 1, 2, 3, 5, 7)
Observé le 02/10 sur une maison d'essai et reproduit sur les trois profils de
référence : une même typologie retenue jusqu'à sept fois dans un axe, des
accessoires forcés sans principal (conduit sans poêle, ballon sans poêle hydro),
EAU correcte à 3 000 € mais « budget insuffisant, minimum 7 280 € » à 6 000 €,
chaque FORCE écrit deux à quatre fois dans le journal. Un test par défaut, qui
échoue sur v0.1.0 (master 648015a) et passe ici.

CHANGELOG
- reajuste (CAS B, stratégie 1) : une ligne forcée par couplage n'est plus
  « upgradée » (l'origine la triait en tête avec son score 0,8 et la
  transformait, puis la passe couplages re-forçait l'original) ; la cible d'un
  upgrade n'est jamais le choix d'un autre poste ; le coût des couplages requis
  compte le requis égal au code actuel de la ligne ; un upgrade dont l'effet net
  baisse le total (il lâche un accessoire plus cher que lui) est refusé.
- reajuste (CAS B, stratégie 2) : un poste = une ligne (l'origine testait le
  code et pas le poste, sur une liste figée avant la boucle : jusqu'à cinq
  basse_planche_bec). La quantité d'un poste est sa dimension. La ligne ajoutée
  porte ses vrais couplages (l'origine écrivait []).
- reajuste (CAS A) : un downgrade ne cible jamais le choix d'un autre poste ; la
  baisse réelle compte les accessoires forcés lâchés ; après chaque retrait ou
  downgrade, les accessoires orphelins sont lâchés (le plancher de coût n'est
  plus verrouillé par des couplages que plus rien ne requiert).
- reajuste : une ligne remplacée porte SA dimension, pas celle de la ligne
  remplacée (une batterie au plomb affichait « 0,4 kWc », une chaudière « 6 ml » ;
  le taux énergie lisait ces kWc fantômes).
- couplages : passe 0 — RETIRE les lignes forcées que plus rien ne requiert,
  ABSORBE celles dont la typologie est déjà le choix d'un poste ; helpers
  codesRequisPar, codesChoisis, retireForcesOrphelins exportés.
- algo (finaliseSelection) : le journal ne se ré-ajoute plus à lui-même à
  chaque tour (reajusteBudget le renvoie en écho) ; la boucle vise la bande
  [−underspend, +overrun] et pas seulement le dépassement, trois tours au plus,
  toujours une passe couplages en dernier ; si le dernier forçage refranchit le
  seuil, le statut le dit. finaliseSelection exporté du noyau.

Tests : test/correctifs-v0.1.1.test.mjs (n° 1, 2, 3, 5, 7 + dimension héritée),
test/monotonie.test.mjs (trois profils × trois axes, 1 000 → 40 000 € par 500 :
le statut ne repasse jamais de correct à insuffisant ; le sous-total ne baisse
jamais au-delà de la tolérance de dépassement — la stricte croissance n'est pas
tenue par l'heuristique, −4,4 % au plus sur A/énergie, voir RECAP-LOT-v0.1.1).
Les 28 tests d'origine passent, inchangés.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Tgtn7bJxTLiL2fRCkQMgtR
2026-10-05 16:39:16 +02:00
..

fixtures/ — jeux de données figés et datés

Les tests tournent hors ligne sur ces copies. Aucun fichier d'ici n'est importé par src/ : les moteurs reçoivent leurs données en paramètre. Un consommateur peut lire algo-config.json et profils-reference.json par @transformer/moteurs/fixtures/<fichier> (exposés par exports).

Fichier Contenu Origine Date de l'instantané
postes.json (14 lignes) · options.json (85) · france_climat.json (101, dont 2A, 2B, 971-976) tables du simulateur autonomie, prix compris (ce sont des données de test, jamais des constantes du paquet) astro-pro/tests/fixtures/ (copie de la publication calculs.trans-former.fr/calculs/data/) 2026-08-16
algo-config.json heuristiques de conception du noyau (poids, modulateurs, matrices, tolérances, alias, poids des postes) ; les clés orientation_factors et dju_defaults_by_zone y figurent encore mais ne sont plus lues (les coefficients vivent dans src/commun/coefficients.ts) astro-pro/src/lib/autonomie/algo-config.json 2026-09-28 (inchangé depuis mai 2026)
profils-reference.json les trois profils de calibrage A / B / C astro-pro/tests/profils-reference.json 2026-09-28
coefficients-2026-05.json jeu de coefficients d'origine (valeurs du code de calculs), injecté par le test de non-régression relevé sur astro-pro master c628cf9 2026-09-28
sorties-origine-2026-09-28.json sorties de selectionner() d'origine sur les trois profils (pipeline complet + mode un seul axe), générées par scripts/pin-origine.mjs depuis le code d'astro-pro astro-pro master c628cf9 2026-09-28
ecarts-harmonisation-2026-09-28.json écarts de sélection et de taux entre coefficients d'origine et table harmonisée (npm run ecarts -- --ecrire <date>) ; relus par Jules avec docs/CONSTANTES.md ce paquet 2026-09-28

Refiger une épingle est un acte volontaire : on relit docs/CONSTANTES.md, on relance le script avec la date du jour, on met à jour les tests qui la citent, et on l'écrit dans le message de commit.