Skip to content

feat(echos): analyse headless, catalogue versionné et retrait de l'interface - #522

Merged
donovan-dev-web merged 6 commits into
developfrom
feature/echos-analyse-v2
Oct 7, 2026
Merged

donovan-dev-web merged 6 commits into
developfrom
feature/echos-analyse-v2

Conversation

@donovan-dev-web

Copy link
Copy Markdown
Owner

Résumé

CI : cette PR cible develop, donc les jobs echos-python, syne-echos-u8-integration, syne-mock-echos-integration, component-manifests et repo-check se déclenchent (pas de job syne-dotnet ni launcher-dotnet : aucun fichier hors ECHOS).

Changements

Sous-branche #518 — code d analyse (feat)

  • echos — analysis/catalog.py : registre versionné des métriques, états measured / exploratory, défaut non-measured + justification ; analysis/headless.py : opérations d analyse sans interface (runs, expériences, comparaisons).
  • echos — api/routes.py / api/app.py : routes catalogue + analyse, create_app() sans montage statique ; storage/*, ingestion/batch.py + file_client.py : ingestion par lot.
  • echos — 2 commits thématiques ; tests dédiés (test_catalog.py, test_headless_analysis.py, test_batch_ingestion.py, test_reference_scenarios.py).

Sous-branche #519 — correctif de provenance (fix)

  • echos — 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)

  • echos — 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 — 62 fichiers supprimés (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

  • API REST ECHOS : routes ajoutées (catalogue, analyse) ; le montage statique disparaît — ECHOS ne sert aucune page (ADR-007).
  • Persistance : état de provenance historisé par métrique ; aucune écriture dans le monde observé.
  • Contrats SYNE (WorldSnapshot / ExternalEvent) : inchangés.
  • Déterminisme : inchangé (jalon J2D toujours vert).

Tests effectués

  • Commandes : dans 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.
  • Résultats : flake8 sans faute, suite complète verte, 6806/6806 lignes, couverture 93,49 % (seuil 80 %), les deux intégrations vertes (U8 réel + mock Node), manifests 3/3 valides.

Checklist

  • Pipeline GitHub Actions vert (sur cette PR)
  • Documentation mise à jour (docs/docs-echos/**, echos/README.md)
  • Aucun secret commité
  • Convention de commits respectée (feat, fix, docs, refactor)

Notes de revue

  • Ordre des sous-livraisons : code → correctif → docs analytiques → retrait de l interface (chaque étape a passé ses propres tests avant la suivante).
  • Deltas volontaires par rapport à létat de référence (tests corrigés, bugs réels de la référence) : 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).
  • Reste à livrer sur develop en aval : docs racine (README.md, ARCHITECTURE.md, INSTALLATION.md, VERSIONING.md, Livex-status.md) — encore alignées sur lancien état à cet instant.

…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.
…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).
…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%).
@donovan-dev-web
donovan-dev-web merged commit 47b69c8 into develop Oct 7, 2026
9 checks passed
@donovan-dev-web
donovan-dev-web deleted the feature/echos-analyse-v2 branch October 7, 2026 12:53
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