Files
IliesAllaliandClaude Fable 5.1 3be95b1a0f Banc du placement v2 : invariants, défauts sur le tracé réel, archétypes en texte, stabilité
Le banc mesure maintenant le code de production (computeBlockLayout), sans
écran, en quatre étages lus dans l'ordre et jamais additionnés :

- invariants qui doivent valoir zéro (chevauchement, couple non adjacent,
  fratrie coupée ou hors de l'ordre choisi, rangée différente de la génération
  de parenté recalculée ici, années de naissance qui redescendent) ;
- défauts comptés sur la géométrie vraiment dessinée (renvois, lignes de
  fratrie au-dessus d'un portrait étranger, croisements, lignes et foyers plus
  larges qu'un écran, proches de la référence visibles dans un écran) ;
- quatorze archétypes (ordre d'une fratrie, issue #67, branche courte, Marc et
  Nadia, petit conjoint, fratrie de douze, remariage, cousins, oncle et nièce,
  parent seul, adoption, deux familles, belle-famille, trois familles
  enchaînées) rendus en texte, témoins dans __snapshots__/archetypes, testés
  par vitest ; deux échecs connus (belle-famille, trois-belles-familles) en
  attendant la règle « le sang de la référence garde son enfant » ;
- stabilité : retirer une feuille ne devrait déplacer que son foyer.

Les modèles ELK écartés en septembre, elk-common et l'ancienne mesure sur
segments droits sont supprimés, avec la dépendance elkjs. Le générateur
d'arbres fictifs (gen-fr.mjs) entre dans le dépôt ; les arbres réels restent
dans fixtures/, ignoré par git.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-19 14:14:03 +02:00

14 lines
961 B
JavaScript

// Compare deux rapports du banc (out/rapport-<tag>.json), par arbre et par colonne. Usage : node diff.mjs <tag A> <tag B>
import { readFileSync } from 'node:fs'
const [a, b] = process.argv.slice(2)
if (!a || !b) { console.error('Usage : node diff.mjs <tag A> <tag B>'); process.exit(1) }
const read = (t) => new Map(JSON.parse(readFileSync(new URL(`./out/rapport-${t}.json`, import.meta.url), 'utf8')).map((r) => [r.arbre, r]))
const A = read(a), B = read(b)
const cols = ['invariants', 'rangees_fausses', 'fratries_coupees', 'renvois', 'renvois_sang', 'fils_sur_etranger', 'croisements', 'superpositions', 'cables_ecran', 'foyers_larges', 'proches_ecran', 'max_bouges', 'max_deplacement_px', 'largeur']
for (const [name, ra] of A) {
const rb = B.get(name)
if (!rb) continue
const changes = cols.filter((c) => ra[c] !== rb[c]).map((c) => `${c} ${ra[c]} → ${rb[c]}`)
console.log(name.padEnd(22), changes.length ? changes.join(' · ') : 'identique')
}