Dom
af4ffa189a
feat(analytics): normalise API + contrat explicite get_next_action (Lot A)
Contrat get_next_action() — suppression du None ambigu :
{"status": "selected", "edge": ..., ...}
{"status": "terminal"}
{"status": "blocked", "reason": "no_valid_edge" | ...}
ExecutionLoop dispatche proprement : blocked -> PAUSED + _pause_requested,
terminal -> succès légitime. Rétrocompat défensive (None legacy -> blocked).
Analytics API normalisée (kwargs-only) :
on_execution_complete(duration_ms, status, steps_total|completed|failed)
on_step_complete(duration_ms, ...)
on_recovery_attempt(duration_ms, ...)
Découverte critique : les anciens appels utilisaient des méthodes et champs
inexistants (ExecutionMetrics.duration, metrics_collector.record_execution).
Le code n'avait jamais tourné au runtime — zéro analytics remontée.
L'exception était avalée par le try/except englobant.
58 tests (18 analytics + 11 contrat + 20 ExecutionLoop + 12 edge_scorer
non-régression). Migration complète, pas de pont legacy.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 09:06:19 +02:00
..
2026-04-12 11:35:31 +02:00
2026-04-14 16:47:45 +02:00
2026-04-14 16:47:45 +02:00
2026-03-18 16:05:36 +01:00
2026-03-26 10:19:18 +01:00
2026-03-15 10:02:09 +01:00
2026-03-26 10:19:18 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-04-15 09:06:19 +02:00
2026-01-29 11:23:51 +01:00
2026-03-26 10:19:18 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-02-17 08:11:45 +01:00
2026-03-26 10:19:18 +01:00
2026-03-26 10:19:18 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-01-29 11:23:51 +01:00
2026-04-14 16:48:23 +02:00