Repository navigation
feat(echos): analyse headless, catalogue versionné et retrait de l'interface - #522
Merged
Merged
Conversation
…ss 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.
…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 %.
…e 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.
…7) (#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.
6 of 9 tasks
…ur (#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).
5 of 7 tasks
…t 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%).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Résumé
measured/exploratory/unmeasured), et rendre lanalyse utilisable par le Launcher sans passer par un navigateur.Changements
Sous-branche #518 — code d analyse (
feat)analysis/catalog.py: registre versionné des métriques, étatsmeasured/exploratory, défaut non-measured+ justification ;analysis/headless.py: opérations d analyse sans interface (runs, expériences, comparaisons).api/routes.py/api/app.py: routes catalogue + analyse,create_app()sans montage statique ;storage/*,ingestion/batch.py+file_client.py: ingestion par lot.test_catalog.py,test_headless_analysis.py,test_batch_ingestion.py,test_reference_scenarios.py).Sous-branche #519 — correctif de provenance (
fix)tests/provenance_expectations.py: liste blanche partagée des 6 métriques non mesurables sur un tir 3 ticks / 9 agents, ne pouvant que rétrécir ; les deux intégrations lexigent désormais correctement.Sous-branche #520 — documentation (
docs)ANALYSIS_FOUNDATIONS,DYNAMIC_VIABILITY_INDEX,REFERENCE_SCENARIOS(nouveaux),METRICS_SPEC,METRICS_DICTIONARY,EMERGENCE_INDICATORS,TESTING,API_REST,echos/README.md.Sous-branche #521 — retrait de l interface (
refactor+docs)echos-ui/**,echos-desktop/**) ;ci.yml(job UI),echos-desktop.yml,release.yml,dev-stack.sh,dev-stack-electron.sh; docs ECHOS archivées (ADR-001, ADR-003, UI_DESIGN, FRONTEND_VISION, USER_STORIES, ROADMAP, ISSUES, CHANGELOG, README, ARCHITECTURE).Impact contrat
WorldSnapshot/ExternalEvent) : inchangés.Tests effectués
echos/→python -m flake8 .,python -m pytest -q,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; racine →python3 launcher/contracts/validate_manifests.py.Checklist
docs/docs-echos/**,echos/README.md)feat,fix,docs,refactor)Notes de revue
tests/provenance_expectations.py(nouveau),tests/test_syne_echos_integration.py,tests/test_syne_mock_integration.py,launcher/.../PublishedSyneCampaignEndToEndTests.cs(livré via fix(launcher): mesure la progression du run sur les échantillons en cours #515).developen aval : docs racine (README.md,ARCHITECTURE.md,INSTALLATION.md,VERSIONING.md,Livex-status.md) — encore alignées sur lancien état à cet instant.