Skip to content

fix(echos): saute l'écriture des runs moteur quand le binaire SYNE est absent - #524

Merged
donovan-dev-web merged 1 commit into
feature/echos-analyse-v2from
fix/echos-batch-saut-si-moteur-absent
Oct 7, 2026
Merged

donovan-dev-web merged 1 commit into
feature/echos-analyse-v2from
fix/echos-batch-saut-si-moteur-absent

Conversation

@donovan-dev-web

Copy link
Copy Markdown
Owner

Résumé

Changements

  • echos — tests/test_batch_ingestion.py : skip dans _write_run (+ retour à la fixture simple, docstring recadré).

Impact contrat

  • API, persistance, moteurs, déterminisme : inchangés.
  • Tests uniquement — pas de code de production touché.

Tests effectués

  • Commandes (répertoire echos/) : python -m flake8 . ; python -m pytest -q ; LIVEX_SYNE_E2E=1 python -m pytest echos/tests/test_batch_ingestion.py -q --no-cov.
  • Résultats : flake8 sans faute ; suite complète verte (couverture 91,23 %, seuil 80 %) avec 5 tests batch passant et 11 sautés sans le flag ; 16/16 verts sur le moteur réel avec le flag.

Checklist

… absent

La premiere garde ne couvrait que la fixture `syne_run` : le test du
flux tronque appelle `_write_run` en direct et plantait encore le job
Python pur (CI #522 rouge, 12:49). La garde remonte dans `_write_run`,
unique point de depart dun processus SYNE : 11 tests sautes sans
`LIVEX_SYNE_E2E=1`, aucun appel au moteur dans le job echos-python.

Le job U8, qui compile SYNE Release, execute toujours les 16 tests avec
le vrai moteur. flake8 sans faute, suite complete verte (couverture
91,23%, seuil 80%).
@donovan-dev-web
donovan-dev-web merged commit a1c7ae3 into feature/echos-analyse-v2 Oct 7, 2026
@donovan-dev-web
donovan-dev-web deleted the fix/echos-batch-saut-si-moteur-absent branch October 7, 2026 12:52
donovan-dev-web added a commit that referenced this pull request Oct 7, 2026
…terface (#522)

* feat(echos): catalogue versionné, provenance par état, analyse headless et ingestion par lot (#518)

* feat(echos): catalogue versionne des metriques, provenance par etat et analyse headless

catalog.py est la source unique de verite documentaire des metriques :
identite, unite, formule, population, fenetre, direction, statut
(measured/exploratory/suspended), etats de provenance possibles,
avertissement, forme visuelle et historique des renommages. CATALOG_VERSION
suit le semver : toute formule ou unite changee le fait monter.

La provenance nest plus un booleen seul : chaque point porte un etat
(explicitement observe, fenetre vide, couverture insuffisante, absente,
repli neutre, censuree) de sorte quun 0.0 observe ne se confonde plus
avec un repli.

headless.py rejoue lanalyse hors serveur depuis un run archive, ce qui
permet au Launcher de produire un rapport sans API REST ni bundle front.

Les modules existants adoptent le vocabulaire : chaque metrique declare
son statut, ses etats possibles et son avertissement depuis le catalogue
plutot que depuis une chaine en dur.

Scenarios de reference et dore contredisent lanalyse de tete : les formules
sont verifiees sur des mondes connus plutot que sur des tirages aleatoires.

* feat(echos): expose le catalogue, ingere par lot et aligne le serveur

/api/metrics/catalog publie le contrat du catalogue (formatage, axes,
filtrage) sans jamais recalculer un score : le Launcher restore, ECHOS
reste proprietaire du calcul.

Lingestion par lot lit un run archive (manifeste, flux aligne, resultats)
et le rejoue dans une base neuve : meme archive, meme analyse, que le
flux vienne dun WebSocket ou dun fichier. file_client refuse un champ
inconnu au lieu de laisser passer une donnee qui ny aurait pas sa place.

Les routes exposent valeur ET drapeau de provenance cote a cote, ce qui
permet a linterface de distinguer un 0.0 mesure dun repli.

Le serveur, le reporting et le contrat Launcher suivent le catalogue :
identifiants stables, statuts declares, etats de donnees rendus tels quels.

Ensemble vert avec la branche de lanalyse : flake8 sans faute, 94 % de
couverture (seuil 80 %), scenarios de reference et determinisme J2 verts.

* fix(echos): borne la liste des métriques non mesurables sur les tirs courts (#519)

Les deux integrations (SYNE reel et mock) exigeaient que toutes les
metriques soient mesurees sur un run reel : lanalyse V2 refuse desormais
dinventer une valeur quand la condition de mesure nenst pas reunie, et
six metriques tombent en non mesure sur ce tir de 3 ticks / 9 agents
(BeliefDiversityNorm dont le denominateur repose sur les categories
observees, plus cinq metriques declarees exploratoires au catalogue).

La liste blanche vit dans provenance_expectations.py, partagee par les
deux tests, et ne peut que retrecir : une metrique non mesuree qui ny
figure pas est une regression de provenance, et une metrique redevenue
mesurable doit en sortir pour que la liste ne devienne pas un sac de
recharge silencieux.

Verifie sur les deux integrations (LIVEX_SYNE_E2E=1, LIVEX_MOCK_E2E=1),
lintegralite de la suite et flake8 : 0 faute, couverture 93,49 %.

* docs(echos): fondements analytiques, métriques, scénarios de référence et API (#520)

ANALYSIS_FOUNDATIONS pose les equations, les hypotheses et les limites de
chaque moteur plutot que denoncer un resultat sans contexte. METRICS_SPEC
et METRICS_DICTIONARY donnent formule, unite et matrice metrique vers API
vers vue, avec lexplicite de ce qui est retire et de pourquoi.

REFERENCE_SCENARIOS fournit les cas etalons et les baselines, ce qui rend
les ors des scenarios opposables et non plus indicatifs. DYNAMIC_VIABILITY_INDEX
enregistre le successeur conceptuel demergenceScore, documente mais pas
encore implemente.

API_REST documente le catalogue, la provenance fournie avec chaque valeur
et les nouvelles routes d analyse; le README du composant décrit lingestion
par lot et lanalyse headless, qui nen dependent denservir de fenetre.

TESTING et EMERGENCE_INDICATORS suivent le nombre de tests (365) et les
identifiants renomes. Aucune regle de comportement nest changee.

* refactor(echos)!: retire l'interface web et le shell Electron (ADR-007) (#521)

* refactor(echos): retire linterface web et le shell Electron (ADR-007)

ECHOS redevient un moteur : echos-ui (React + Vite) et echos-desktop
(Electron, PyInstaller ondir) sont supprimes, de meme que la CI qui les
construisait (job echos-ui de ci.yml, workflow echos-desktop.yml sur
matrice ubuntu/windows et release.yml) et le lancement de linterface
dans dev-stack.sh et dev-stack-electron.sh.

Lintroduction de lanalyse headless la veille a rendu cette separation
possible : API et analyse ne dependent denservir de fenetres, et la
presentation est portee par les fenetres natives du Launcher (consoles
de logs, fenetre d analyse) qui sondent lAPI locale.

Suppression de 62 fichiers, aucun fichier code Python ou TypeScript
conservant de reference a ces chemins : server.py et create_app() ne
desservent plus de statique depuis lanalyse V2.

* docs(echos): archive linterface retiree et recale ADR-001 et ADR-003

Les documents qui affirment lexistence de linterface web sont
recalibres sur le retrait : README index, ARCHITECTURE, ROADMAP,
ISSUES et CHANGELOG mentionnent ADR-007 et renvoient vers les
fenetres natives du Launcher.

FRONTEND_VISION et USER_STORIES basculent en statut historique, le
design system reste comme trace de lintention. ADR-001 (stack
applicative) et ADR-003 (shell Electron) portent la decision du
5 octobre 2026 avec le lien vers lADR-007 du Launcher.

Aucun document analytique ni contrat API nest modifie ici : la
documentation d analyse a ete livree avec la branche dadaptation
analytique, seule la couche qui decrit linterface change.

* fix(echos): rattache l'ingestion batch au job U8 et gate le vrai moteur (#523)

Le job echos-python est Python pur : pas de dotnet, pas de build Release.
test_batch_ingestion.py declenchait pourtant le binaire SYNE et plantait
la CI de la PR parente (echos-python en rouge, integrations vertes).

A l'image de l'integration WebSocket, la fixture `syne_run` est sautee
sans `LIVEX_SYNE_E2E=1` ; les tests qui ne touchent pas au moteur
(lecture de flux, `inspect`, routes de refus) restent actifs partout. Le
job U8, qui compile SYNE Release, execute desormais aussi le fichier avec
le vrai moteur.

Verifie : flake8 sans faute, suite complete verte (couverture 91,86%,
seuil 80%), U8 etendue verte (WebSocket + batch sur le moteur reel).

* fix(echos): saute l'écriture des runs moteur quand le binaire SYNE est absent (#524)

La premiere garde ne couvrait que la fixture `syne_run` : le test du
flux tronque appelle `_write_run` en direct et plantait encore le job
Python pur (CI #522 rouge, 12:49). La garde remonte dans `_write_run`,
unique point de depart dun processus SYNE : 11 tests sautes sans
`LIVEX_SYNE_E2E=1`, aucun appel au moteur dans le job echos-python.

Le job U8, qui compile SYNE Release, execute toujours les 16 tests avec
le vrai moteur. flake8 sans faute, suite complete verte (couverture
91,23%, seuil 80%).
donovan-dev-web added a commit that referenced this pull request Oct 12, 2026
…terface (#522)

* feat(echos): catalogue versionné, provenance par état, analyse headless et ingestion par lot (#518)

* feat(echos): catalogue versionne des metriques, provenance par etat et analyse headless

catalog.py est la source unique de verite documentaire des metriques :
identite, unite, formule, population, fenetre, direction, statut
(measured/exploratory/suspended), etats de provenance possibles,
avertissement, forme visuelle et historique des renommages. CATALOG_VERSION
suit le semver : toute formule ou unite changee le fait monter.

La provenance nest plus un booleen seul : chaque point porte un etat
(explicitement observe, fenetre vide, couverture insuffisante, absente,
repli neutre, censuree) de sorte quun 0.0 observe ne se confonde plus
avec un repli.

headless.py rejoue lanalyse hors serveur depuis un run archive, ce qui
permet au Launcher de produire un rapport sans API REST ni bundle front.

Les modules existants adoptent le vocabulaire : chaque metrique declare
son statut, ses etats possibles et son avertissement depuis le catalogue
plutot que depuis une chaine en dur.

Scenarios de reference et dore contredisent lanalyse de tete : les formules
sont verifiees sur des mondes connus plutot que sur des tirages aleatoires.

* feat(echos): expose le catalogue, ingere par lot et aligne le serveur

/api/metrics/catalog publie le contrat du catalogue (formatage, axes,
filtrage) sans jamais recalculer un score : le Launcher restore, ECHOS
reste proprietaire du calcul.

Lingestion par lot lit un run archive (manifeste, flux aligne, resultats)
et le rejoue dans une base neuve : meme archive, meme analyse, que le
flux vienne dun WebSocket ou dun fichier. file_client refuse un champ
inconnu au lieu de laisser passer une donnee qui ny aurait pas sa place.

Les routes exposent valeur ET drapeau de provenance cote a cote, ce qui
permet a linterface de distinguer un 0.0 mesure dun repli.

Le serveur, le reporting et le contrat Launcher suivent le catalogue :
identifiants stables, statuts declares, etats de donnees rendus tels quels.

Ensemble vert avec la branche de lanalyse : flake8 sans faute, 94 % de
couverture (seuil 80 %), scenarios de reference et determinisme J2 verts.

* fix(echos): borne la liste des métriques non mesurables sur les tirs courts (#519)

Les deux integrations (SYNE reel et mock) exigeaient que toutes les
metriques soient mesurees sur un run reel : lanalyse V2 refuse desormais
dinventer une valeur quand la condition de mesure nenst pas reunie, et
six metriques tombent en non mesure sur ce tir de 3 ticks / 9 agents
(BeliefDiversityNorm dont le denominateur repose sur les categories
observees, plus cinq metriques declarees exploratoires au catalogue).

La liste blanche vit dans provenance_expectations.py, partagee par les
deux tests, et ne peut que retrecir : une metrique non mesuree qui ny
figure pas est une regression de provenance, et une metrique redevenue
mesurable doit en sortir pour que la liste ne devienne pas un sac de
recharge silencieux.

Verifie sur les deux integrations (LIVEX_SYNE_E2E=1, LIVEX_MOCK_E2E=1),
lintegralite de la suite et flake8 : 0 faute, couverture 93,49 %.

* docs(echos): fondements analytiques, métriques, scénarios de référence et API (#520)

ANALYSIS_FOUNDATIONS pose les equations, les hypotheses et les limites de
chaque moteur plutot que denoncer un resultat sans contexte. METRICS_SPEC
et METRICS_DICTIONARY donnent formule, unite et matrice metrique vers API
vers vue, avec lexplicite de ce qui est retire et de pourquoi.

REFERENCE_SCENARIOS fournit les cas etalons et les baselines, ce qui rend
les ors des scenarios opposables et non plus indicatifs. DYNAMIC_VIABILITY_INDEX
enregistre le successeur conceptuel demergenceScore, documente mais pas
encore implemente.

API_REST documente le catalogue, la provenance fournie avec chaque valeur
et les nouvelles routes d analyse; le README du composant décrit lingestion
par lot et lanalyse headless, qui nen dependent denservir de fenetre.

TESTING et EMERGENCE_INDICATORS suivent le nombre de tests (365) et les
identifiants renomes. Aucune regle de comportement nest changee.

* refactor(echos)!: retire l'interface web et le shell Electron (ADR-007) (#521)

* refactor(echos): retire linterface web et le shell Electron (ADR-007)

ECHOS redevient un moteur : echos-ui (React + Vite) et echos-desktop
(Electron, PyInstaller ondir) sont supprimes, de meme que la CI qui les
construisait (job echos-ui de ci.yml, workflow echos-desktop.yml sur
matrice ubuntu/windows et release.yml) et le lancement de linterface
dans dev-stack.sh et dev-stack-electron.sh.

Lintroduction de lanalyse headless la veille a rendu cette separation
possible : API et analyse ne dependent denservir de fenetres, et la
presentation est portee par les fenetres natives du Launcher (consoles
de logs, fenetre d analyse) qui sondent lAPI locale.

Suppression de 62 fichiers, aucun fichier code Python ou TypeScript
conservant de reference a ces chemins : server.py et create_app() ne
desservent plus de statique depuis lanalyse V2.

* docs(echos): archive linterface retiree et recale ADR-001 et ADR-003

Les documents qui affirment lexistence de linterface web sont
recalibres sur le retrait : README index, ARCHITECTURE, ROADMAP,
ISSUES et CHANGELOG mentionnent ADR-007 et renvoient vers les
fenetres natives du Launcher.

FRONTEND_VISION et USER_STORIES basculent en statut historique, le
design system reste comme trace de lintention. ADR-001 (stack
applicative) et ADR-003 (shell Electron) portent la decision du
5 octobre 2026 avec le lien vers lADR-007 du Launcher.

Aucun document analytique ni contrat API nest modifie ici : la
documentation d analyse a ete livree avec la branche dadaptation
analytique, seule la couche qui decrit linterface change.

* fix(echos): rattache l'ingestion batch au job U8 et gate le vrai moteur (#523)

Le job echos-python est Python pur : pas de dotnet, pas de build Release.
test_batch_ingestion.py declenchait pourtant le binaire SYNE et plantait
la CI de la PR parente (echos-python en rouge, integrations vertes).

A l'image de l'integration WebSocket, la fixture `syne_run` est sautee
sans `LIVEX_SYNE_E2E=1` ; les tests qui ne touchent pas au moteur
(lecture de flux, `inspect`, routes de refus) restent actifs partout. Le
job U8, qui compile SYNE Release, execute desormais aussi le fichier avec
le vrai moteur.

Verifie : flake8 sans faute, suite complete verte (couverture 91,86%,
seuil 80%), U8 etendue verte (WebSocket + batch sur le moteur reel).

* fix(echos): saute l'écriture des runs moteur quand le binaire SYNE est absent (#524)

La premiere garde ne couvrait que la fixture `syne_run` : le test du
flux tronque appelle `_write_run` en direct et plantait encore le job
Python pur (CI #522 rouge, 12:49). La garde remonte dans `_write_run`,
unique point de depart dun processus SYNE : 11 tests sautes sans
`LIVEX_SYNE_E2E=1`, aucun appel au moteur dans le job echos-python.

Le job U8, qui compile SYNE Release, execute toujours les 16 tests avec
le vrai moteur. flake8 sans faute, suite complete verte (couverture
91,23%, seuil 80%).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant