Skip to content

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

Merged
donovan-dev-web merged 1 commit into
feature/echos-analyse-v2from
fix/echos-provenance-integration
Oct 7, 2026
Merged

donovan-dev-web merged 1 commit into
feature/echos-analyse-v2from
fix/echos-provenance-integration

Conversation

@donovan-dev-web

Copy link
Copy Markdown
Owner

Résumé

  • Quoi : liste blanche explicite et partagée (echos/tests/provenance_expectations.py) des six métriques légitimement non mesurées sur un tir de 3 ticks / 9 agents ; les deux tests dintégration lexigent au lieu de lexiger toutes.
  • Pourquoi : lanalyse V2 refuse dinventer une valeur quand la condition de mesure nenst pas réunie. Lexigence « toutes mesurées » cassait donc test_real_syne_stream_is_ingested_and_served_by_echos et test_mock_stream_is_ingested_and_served_by_echos de façon déterministe, et aurait bloqué la CI parente.
  • Issue liée : sous-branche fix/ de feature/echos-analyse-v2.

Note : sous-branche de feature/echos-analyse-v2 — aucune CI ne se déclenche sur ce type de PR (cible hors develop/main).

Changements

  • echos — tests/provenance_expectations.py (nouveau) : EXPECTED_UNMEASURED + unexpected_unmeasured(), source unique pour les deux tests.
  • echos — tests/test_syne_echos_integration.py : substitution de unmeasured == {} par la liste blanche.
  • echos — tests/test_syne_mock_integration.py : idem pour lassertion équivalente.

Impact contrat

  • WorldSnapshot / ExternalEvent, API REST ECHOS, persistance : inchangés.
  • Déterminisme : inchangé.
  • Tests uniquement — aucun code de production touché.

Tests effectués

  • Commandes (répertoire echos/) : LIVEX_SYNE_E2E=1 python -m pytest echos/tests/test_syne_echos_integration.py -q --no-cov ; LIVEX_MOCK_E2E=1 python -m pytest echos/tests/test_syne_mock_integration.py -q --no-cov ; python -m flake8 . ; python -m pytest -q.
  • Résultats : les deux intégrations vertes (elles échouaient avant), flake8 sans faute, suite complète verte, couverture 93,49 % (seuil 80 %).

Checklist

  • Pipeline GitHub Actions vert (sera vérifié sur la PR parente vers develop)
  • Documentation mise à jour (lexplication vit dans le module partagé)
  • Aucun secret commité
  • Convention de commits respectée (fix())

Notes de revue

  • La liste ne peut que rétrécir : une métrique qui sortirait de letat non mesuré doit être retirée de la liste, sinon elle devient un sac de recharge silencieux.
  • Les cinq métriques sur six sont exploratory au catalogue ; BeliefDiversityNorm y est measured mais son dénominateur repose sur les catégories observées — les deux cas sont documentés dans le module.

…courts

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 %.
@donovan-dev-web
donovan-dev-web merged commit 825d39c into feature/echos-analyse-v2 Oct 7, 2026
2 checks passed
@donovan-dev-web
donovan-dev-web deleted the fix/echos-provenance-integration branch October 7, 2026 12:27
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%).
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