Bilan : PREPARE_BALANCE ne transmettait ni les heures HC ni le plancher HC manuel

La regle « tenir jusqu'a la prochaine HC » (8de284c) et le plancher de charge
HC manuelle (2654592, 18/09) etaient muets en production : la colle recopie le
snapshot champ par champ et les avait oublies. Les tests appelaient BALANCE
directement. Garde-fou : tout champ lu par BALANCE doit etre produit par
PREPARE_BALANCE (mutation verifiee).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011uJ47NxgfpGnuuMr3f2n7Z
This commit is contained in:
Tallagrand Thierry
2026-09-28 02:22:58 +02:00
parent 887ad089e0
commit 0d97190900
3 changed files with 29 additions and 1 deletions

View File

@@ -178,6 +178,24 @@ for (const sc of all) {
}
}
// Garde-fou (28/09) : tout champ que BALANCE.js lit sur son entree doit etre
// produit par PREPARE_BALANCE.js. Les scenarios appellent BALANCE directement :
// un champ oublie dans la colle passait tous les tests et rendait une regle
// muette en production (heures HC, nuit du 28/09).
if (!PRINT && (!ONLY || 'prepare-balance-transmet-tout'.includes(ONLY))) {
run++;
const src = fs.readFileSync(path.join(ROOT, 'src/energy-balance/BALANCE.js'), 'utf8');
const lus = new Set([...src.matchAll(/(?<![$\w])input\.([A-Za-z_0-9]+)/g)].map(m => m[1]));
const prep = fs.readFileSync(path.join(ROOT, 'src/energy-balance/PREPARE_BALANCE.js'), 'utf8');
const manquants = [...lus].filter(k => !new RegExp(`^\\s*${k}\\s*:`, 'm').test(prep));
if (manquants.length) {
failed++;
console.log(`❌ prepare-balance-transmet-tout | champs lus par BALANCE absents de PREPARE_BALANCE : ${manquants.join(', ')}`);
} else {
console.log(`✅ prepare-balance-transmet-tout (${lus.size} champs)`);
}
}
if (PRINT) process.exit(0);
console.log('');
if (failed) {