LOT P1.0 : paquet @transformer/moteurs v0.1.0
Extraction du cœur autonomie de calculs.trans-former.fr (12 modules, sans singleton, couplages sans mutation, console derrière debug), découpage en trois moteurs d'axe + intégrateur (mode global = calculs, mode par_axe = plateforme), moteurs commun.contexte (Corse 2A/2B, DOM 97x corrigés) et commun.geometrie, table des coefficients harmonisés (docs/CONSTANTES.md pour Jules, R-7), validation structurelle des données (schemas/), tests hors ligne : 28 assertions d'origine + épingle générée depuis le code d'astro-pro + écarts d'harmonisation figés + contrat des moteurs. dist/ committé. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019UBHYPdeQYy2m1GVJp6b12
This commit is contained in:
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// contrat.ts — le contrat d'un moteur (SPEC phase 1 §4.1).
|
||||
//
|
||||
// Quatre règles opposables au code :
|
||||
// ① `calculer` ne lit ni réseau, ni disque, ni horloge, ni DOM, ni variable
|
||||
// globale, ni aléa : mêmes entrées + mêmes données = même résultat.
|
||||
// ② les données entrent en paramètre, validées à la frontière par l'appelant
|
||||
// (`valider(table, json)`) ;
|
||||
// ③ aucun prix, aucun barème dans le paquet ;
|
||||
// ④ toute valeur par défaut appliquée est déclarée dans `avertissements`,
|
||||
// toute constante utilisée dans `sources`.
|
||||
/**
|
||||
* Collecteur de sources et d'avertissements d'un calcul. Une source est
|
||||
* enregistrée une fois par clé (la première valeur gagne) ; un avertissement
|
||||
* une fois par texte. Objet interne, sans I/O.
|
||||
*/
|
||||
export class Trace {
|
||||
sources = new Map();
|
||||
avertissements = new Set();
|
||||
source(cle, valeur, source, date) {
|
||||
if (!this.sources.has(cle))
|
||||
this.sources.set(cle, { cle, valeur, source, date });
|
||||
}
|
||||
avertit(texte) {
|
||||
this.avertissements.add(texte);
|
||||
}
|
||||
/** Verse dans ce collecteur les sources et avertissements d'un autre résultat. */
|
||||
absorbe(autre) {
|
||||
for (const s of autre.sources)
|
||||
this.source(s.cle, s.valeur, s.source, s.date);
|
||||
for (const a of autre.avertissements)
|
||||
this.avertit(a);
|
||||
}
|
||||
resultat(sorties, version) {
|
||||
return {
|
||||
sorties,
|
||||
sources: [...this.sources.values()],
|
||||
avertissements: [...this.avertissements],
|
||||
version,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user