DossierDossier

Le ticket dit enfin qui a retenu l’assietteL’exécution des hooks est devenue un état observable de l’agentThe ticket now says who held the plate backHook execution became observable agent state

Au passe, quelqu’un vérifie chaque assiette avant son départ. Longtemps, une assiette immobile pouvait être refusée ou simplement oubliée. Maintenant, le ticket indique si elle est partie, si elle est retenue et par qui. Le même contrôle devient enfin lisible.OpenHands expose les événements d’exécution de hooks avec des résultats distincts, succès ou blocage, via ses surfaces runtime et UI/API. Le comportement des garde-fous devient inspectable au lieu de rester implicite. Un contrôle placé sur le chemin d’action peut observer, bloquer ou décider, et le risque tient à ce que son autorité change sans être annoncée.At the pass, someone checks every plate before it leaves. For a long time, a waiting plate might be refused or merely forgotten. Now the ticket says whether it left, whether it was held, and by whom. The same check finally becomes readable.Hook execution surfaces in OpenHands as events carrying distinct success and blocked outcomes, on both the runtime and the UI/API side. Guardrail behaviour is therefore inspectable rather than implicit. A control on the action path may observe, block or decide, and the risk is that its authority shifts without being declared.

La cuissonExécution et cycle de vieCookingExecution and lifecycle

Chaque assiette retenue reçoit enfin un ticketChronologieEvery held plate finally receives a ticketTimeline

Le garde intervient désormais au passe pendant l’envoi de l’assiette. Il n’agit plus depuis un coin de la cuisine.Les hooks sont intégrés aux actions runtime plutôt qu’exécutés à côté.The guard now acts at the pass while the plate is being sent. He no longer works from a corner of the kitchen.Hooks were integrated into runtime actions rather than run alongside them.

Chaque décision produit désormais un bon lisible. Cela vaut pour une assiette servie comme pour une assiette retenue.Les résultats d’exécution deviennent des événements explicites.Every decision now produces a readable slip. That applies whether the plate was served or held.Execution outcomes became explicit events.

Le bon indique clairement le sort de l’assiette. Il porte « partie en salle » ou « bloquée au passe ».Les états blocked et success deviennent distinguables.The slip clearly states the plate’s fate. It says either “sent to the dining room” or “held at the pass.”Blocked and successful outcomes became distinguishable.

Le tableau montre ces décisions à toute la brigade. Les bons ne restent plus cachés dans l’arrière-cuisine.Les surfaces UI/API peuvent exposer l’état du service de hooks.The board shows these decisions to the whole brigade. The slips no longer stay hidden in back.The UI and API surfaces could expose hook service state.

Le passage devant le garde devient visible comme le dressage ou l’envoi. La brigade peut suivre son résultat.L’exécution du contrôle devient une étape du lifecycle observable de l’agent.Passing the guard becomes as visible as plating or serving. The brigade can follow its result.Control execution became part of the agent’s observable lifecycle.

Sans ticket, un plat absent n’explique rienMécanismeWithout a ticket, a missing plate explains nothingMechanism

Quand une assiette disparaît sans mot, les commis accusent le four, refont la préparation ou changent de poste. Un ticket « retenue par le garde » montre immédiatement ce qui s’est réellement passé.Un garde-fou invisible est difficile à déboguer : son effet se déduit d’une absence. En représentant le résultat du hook comme un état runtime, le système rend la politique inspectable sans exiger la lecture de logs bruts de scripts.When a plate vanishes without a word, cooks blame the oven, remake it, or switch stations. A slip saying “held by the guard” immediately shows what happened.Invisible guardrails are hard to debug because their effect is inferred from an absence. Representing the hook outcome as runtime state makes policy behaviour inspectable without reading raw script logs.

Rendre un bon clair après chaque contrôleRéponseEvery check returns a clear slipResponse

Après chaque assiette, le passe doit afficher son sort et le poste qui a décidé. Des notes éparses rangées au fond ne remplacent pas ce bon compris immédiatement par la brigade.Rendre l’exécution des contrôles observable sous forme d’état et d’événements structurés, et non de sorties de scripts à interpréter. Le résultat doit séparer explicitement l’autorisation du blocage.After every plate, the pass should show its fate and the station that decided. Scattered notes stored in back cannot replace a slip the brigade understands at once.Expose control execution as structured state and events rather than script output to be interpreted. The result should separate allow from block explicitly.

Le ticket s’installe, mais rien d’autre n’est figéÉtat actuelThe house keeps the ticket; nothing else is settledCurrent state

La maison rend progressivement le contrôle visible dans le service lui-même. Les travaux continuent toutefois, et aucun agencement final n’est encore établi.L’architecture continue d’évoluer, mais la direction observée est celle de hooks devenus des primitives runtime explicites. Aucun état final n’est établi.The house is steadily making the check visible inside service itself. Work continues, however, and no final arrangement is established.The architecture is still evolving, though the observed direction is toward hooks as explicit runtime primitives. No final state is established.

Toute assiette bloquée doit porter la raison du passeLeçonEvery blocked plate must carry the pass decisionLesson

Si le garde arrête un plat, il laisse un bon disant ce qu’il a décidé. Sans cette trace, la brigade ignore quelle règle agit réellement et ne voit pas quand elle change.Un garde-fou doit laisser une trace observable de ce qu’il a décidé. Sans cette trace, l’autorité effective du contrôle n’est pas vérifiable et son évolution passe inaperçue.If the guard stops a dish, he leaves a slip saying what he decided. Without that trace, the brigade cannot know which rule truly acts or notice when it changes.A guardrail should leave an observable trace of what it decided. Without one, the control’s effective authority cannot be verified and changes to it go unnoticed.