← Concepts

attempt_ledger

Attempt Ledger

Quand une tentative worker échoue ou produit un résultat insuffisant, Elora doit pouvoir la relancer sans effacer ce qui vient de se passer.

Avant mutation

Le snapshot est écrit avant que la queue repasse en pending. L'état terminal reste consultable même si le worker repart.

Preuve locale

Le ledger vit sous execution-handoff/runs/EXEC_ID/attempts/, avec un résumé de tentative et un snapshot complet de queue.

Pourquoi c'est nécessaire

Une queue est une file de travail. Pour relancer une mission, Elora doit modifier l'item: nouvelle consigne, nouveau prompt de révision, retour en attente. Sans ledger, le passage done/failed -> pending peut rendre moins visible la tentative qui a échoué. L'Attempt Ledger sépare donc l'historique de l'exécution de l'état mutable de la queue.

brain@elora:~$ elora-execute revise EXECUTION_ID --apply --reason "livrable incomplet" --json
attempt: attempts/attempt-*.json
queue_snapshot: attempts/attempt-*.queue.json
revision: revisions/rev-*.md
queue: pending

brain@elora:~$ elora-execute attempts EXECUTION_ID --json
count: 1
latest: attempt-* | contract_violation

brain@elora:~$ elora-execute compare EXECUTION_ID --json
status: current_not_terminal | improved | regressed | unchanged

Après comparaison

Quand la tentative révisée est revenue en état terminal, elora-execute compare peut dire si le nouveau résultat s'est amélioré, a régressé ou n'a pas changé. Ensuite, elora-execute learn --apply peut écrire un item Revision Learning Bridge sous forme de proposition inspectable.

Ce qui est conservé

Ce que le ledger ne fait pas

Il ne corrige pas le résultat, ne promeut pas automatiquement un apprentissage, ne modifie pas la mémoire canonique et ne change pas le routing. Il rend seulement la tentative inspectable, pour que l'opérateur ou les outils puissent comparer les essais successifs avec elora-execute compare puis, si utile, capturer une proposition learning explicite.

Invariant: relancer un worker ne doit jamais effacer la preuve qui explique pourquoi il fallait le relancer.