fix(backend,orchestrator,chat): l'objectif suspendu guide le premier tour post-restart — #290 regression partielle (register_suspended_turn capture la demande utilisateur exacte au point d'entrée chat agent_send/chat.send avec source diagnostique, RestartRendezvousCoordinator conserve tour/objectif/restart_attempt_id, take_continuation consommable exactement une fois et seulement par la tentative courante: suspended_restart_continuation_prompt place l'objectif utilisateur avant toute consigne generique et StructuredHumanTurnTransition::Resume porte le prompt host-provided injecte au runtime de remplacement; nettoyage du tour suspendu sur succes, echec, annulation et abandon/expiration; diagnostics projet/agent/turn_id/restart_attempt_id/source; rendez-vous inter-agents #289 inchanges; QA verte reconfirmee par Git: cargo check --workspace, backend self_restart_contract_tests 3/3, orchestrator_service restart 10/10, workstate_actions 9/9, app-tauri chat_bridge 31/31, web-server websocket_chat_send 3/3, fmt --check, diff --check; restants: rebuild AppImage + validation live reprise objectif apres restart; carnet #290 iteration regression + passage store qa inclus; scripts/ hors périmètre; aucun push)
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
---
|
||||
issueRef: "#290"
|
||||
version: 9
|
||||
version: 11
|
||||
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
updatedAt: 1788936952028
|
||||
updatedAt: 1788937781234
|
||||
---
|
||||
# Ticket #290 - Redemarrage agent finalise le tour et bloque le chat
|
||||
|
||||
@ -24,12 +24,12 @@ updatedAt: 1788936952028
|
||||
- Stop ne doit etre cliquable que si une requete stoppable existe; ne pas exposer "Request already stopped" brut.
|
||||
- Le message de succes ne doit etre affiche qu'apres preuve runtime d'un agent relance/reconnecte.
|
||||
|
||||
## Cadrage Architecture
|
||||
## Cadrage Architecture initial
|
||||
- Bug de contrat entre restart autonome et chat humain `agent_send`.
|
||||
- `ask_structured` etait deja restart-aware; `agent_send` devait ignorer le Final de l'ancien runtime pendant restart et attendre la session remplacee.
|
||||
- Correctif backend-first, pas de filtre frontend sur le texte.
|
||||
|
||||
## Implementation DevBackend
|
||||
## Implementation DevBackend initiale
|
||||
- Branche: `fix/290-restart-agent-send-premature-final`.
|
||||
- Le tour humain s'enregistre dans `RestartRendezvousCoordinator`.
|
||||
- `Final`/`Error` de l'ancien provider ignore pendant restart actif.
|
||||
@ -38,7 +38,7 @@ updatedAt: 1788936952028
|
||||
- Stop utilisateur annule aussi le rendez-vous restart.
|
||||
- Pas de changement frontend/protocole signale.
|
||||
|
||||
## Fichiers modifies annonces
|
||||
## Fichiers modifies initiaux annonces
|
||||
- `crates/application/src/orchestrator/service.rs`
|
||||
- `crates/application/src/orchestrator/mod.rs`
|
||||
- `crates/application/src/lib.rs`
|
||||
@ -48,7 +48,7 @@ updatedAt: 1788936952028
|
||||
- `crates/app-tauri/src/commands.rs`
|
||||
- `crates/web-server/src/lib.rs`
|
||||
|
||||
## Validations DevBackend annoncees vertes
|
||||
## Validations DevBackend initiales annoncees vertes
|
||||
- `cargo check --workspace`
|
||||
- `cargo test -p backend self_restart_contract_tests -- --nocapture` — 3/3
|
||||
- `cargo test -p application --test orchestrator_service restart -- --nocapture` — 8/8
|
||||
@ -58,9 +58,9 @@ updatedAt: 1788936952028
|
||||
- `cargo fmt --all -- --check`
|
||||
- `git diff --check`
|
||||
|
||||
## Validation QA - 2026-09-09
|
||||
## Validation QA initiale - 2026-09-09
|
||||
|
||||
Verdict: VERT sur le perimetre #290, avec reserves globales reproduites hors perimetre.
|
||||
Verdict: VERT sur le perimetre initial #290, avec reserves globales reproduites hors perimetre.
|
||||
|
||||
Commandes ciblees executees:
|
||||
- `cargo check --workspace` -> vert.
|
||||
@ -82,13 +82,13 @@ Suites globales rouges reproduites hors perimetre:
|
||||
- `cargo test -p web-server -- --test-threads=1` -> 103 passed, 7 failed. Les 7 echecs sont les tests PTY `websocket_*terminal*`/`websocket_launch_agent_*` qui recoivent `error` au lieu de `terminal.attached`.
|
||||
- `cargo test -p application -- --test-threads=1` -> rouge dans `tests/layout_usecases.rs`, 2 failed: `create_layout_plugin_validates_active_runtime_contribution_and_persists_root` et `mutate_set_plugin_layout_state_persists_opaque_state`, tous deux sur `NotFound("plugin package")`.
|
||||
|
||||
## Git
|
||||
## Git initial
|
||||
- Fix commit: `d03300a` sur `fix/290-restart-agent-send-premature-final`.
|
||||
- Merge local no-ff vers `develop`: `546c7b7`.
|
||||
- Aucun push.
|
||||
- Worktree restant propre sauf `scripts/` non suivi hors perimetre recurrent.
|
||||
|
||||
## Build AppImage
|
||||
## Build AppImage initial
|
||||
- Skill `build-appimage` applique le 2026-09-09.
|
||||
- `npm --prefix frontend run build` -> vert.
|
||||
- `CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage` depuis `crates/app-tauri` -> vert.
|
||||
@ -100,4 +100,73 @@ Suites globales rouges reproduites hors perimetre:
|
||||
- Observation: IdeA semble bien avoir redemarre l'agent, mais au retour Main ne reprend pas l'objectif suspendu; il repond sur l'etat general du ticket #290 et parle d'autre chose.
|
||||
- Interpretation: le fix precedent traite le terminal premature et la disponibilite du chat, mais pas la conservation/reinjection de l'intention de reprise dans le nouveau runtime.
|
||||
- Attendu additionnel: apres un restart self controle par IdeA, le nouveau tour doit recevoir un handoff explicite contenant la demande utilisateur en cours, par exemple: "reprends apres redemarrage et confirme le succes", et ne doit pas repartir d'un contexte projet/ticket generique.
|
||||
- A cadrer: source de verite de cette intention suspendue, borne de retention, nettoyage apres reprise, et tests qui prouvent que le premier message post-restart est guide par le handoff exact.
|
||||
- A cadrer: source de verite de cette intention suspendue, borne de retention, nettoyage apres reprise, et tests qui prouvent que le premier message post-restart est guide par le handoff exact.
|
||||
|
||||
## Cadrage Architecture regression partielle
|
||||
- Le bug restant est la perte de l'intention metier suspendue, pas la fin prematuree du tour.
|
||||
- Source de verite: etat applicatif explicite de tour suspendable proche/au sein de `RestartRendezvousCoordinator`; le transcript n'est pas autorite.
|
||||
- Pour `agent_send`, `objective_text` doit etre la demande utilisateur originale envoyee a l'agent.
|
||||
- `idea_restart_self` ne fabrique pas l'objectif: il attache un `restart_attempt_id` au tour actif.
|
||||
- Apres relance, le nouveau runtime recoit une consigne host-provided contenant l'objectif suspendu, correlee a la tentative courante.
|
||||
- Retention en memoire suffisante pour ce lot; nettoyage sur succes terminal, cancel utilisateur, erreur terminale ou expiration.
|
||||
- Idempotence: pas de double injection pour une meme tentative, et pas d'ancien handoff injecte dans un runtime plus recent.
|
||||
- Tests minimaux: agent_send+restart+self+relance recoit l'objectif exact, cloture du meme tour, double restart sans double injection, cancel/expiration nettoient, non-regression #289.
|
||||
|
||||
## Branche regression partielle
|
||||
- Branche: `fix/290-self-restart-resume-objective`.
|
||||
- Base: `develop` @ `93a1c23`.
|
||||
- Git a commite le sync store de reouverture sur develop avant branchement: `93a1c23`.
|
||||
- Worktree signale propre sauf `scripts/restart-idea-over-ssh.sh` non suivi hors perimetre recurrent.
|
||||
|
||||
## Implementation DevBackend regression partielle - 2026-09-09
|
||||
- L'objectif utilisateur original est capture par `agent_send` et `chat.send`.
|
||||
- `RestartRendezvousCoordinator` conserve explicitement le tour, la source, l'objectif et le `restart_attempt_id`.
|
||||
- Le nouveau runtime recoit une consigne host-provided commencant par l'objectif suspendu.
|
||||
- Injection consommable une seule fois et uniquement par la tentative courante.
|
||||
- Nettoyage sur succes, echec, annulation et abandon/expiration.
|
||||
- Diagnostics ajoutes avec projet, agent, `turn_id`, `restart_attempt_id` et source.
|
||||
- Les rendez-vous inter-agents #289 conservent leur comportement existant.
|
||||
|
||||
## Fichiers modifies annonces pour regression partielle
|
||||
- `crates/application/src/orchestrator/service.rs`
|
||||
- `crates/application/src/orchestrator/mod.rs`
|
||||
- `crates/application/src/lib.rs`
|
||||
- `crates/backend/src/lib.rs`
|
||||
- `crates/app-tauri/src/commands.rs`
|
||||
- `crates/web-server/src/lib.rs`
|
||||
- `crates/application/tests/orchestrator_service.rs`
|
||||
|
||||
## Validations DevBackend regression partielle annoncees vertes
|
||||
- `cargo check --workspace` -> vert.
|
||||
- `cargo test -p backend self_restart_contract_tests -- --nocapture` -> 3/3 verts.
|
||||
- `cargo test -p application --test orchestrator_service restart -- --nocapture` -> 10/10 verts.
|
||||
- `cargo test -p application --test workstate_actions -- --test-threads=1` -> 9/9 verts.
|
||||
- `cargo test -p app-tauri --test chat_bridge` -> 31/31 verts.
|
||||
- `cargo test -p web-server websocket_chat_send -- --test-threads=1` -> 3/3 verts.
|
||||
- `cargo fmt --all -- --check` -> vert.
|
||||
- `git diff --check` -> vert.
|
||||
|
||||
## Validation QA regression partielle - 2026-09-09
|
||||
|
||||
Verdict: VERT sur `fix/290-self-restart-resume-objective`.
|
||||
|
||||
Commandes executees:
|
||||
- `cargo check --workspace` -> vert.
|
||||
- `cargo test -p backend self_restart_contract_tests -- --nocapture` -> vert, 3 passed.
|
||||
- `cargo test -p application --test orchestrator_service restart -- --nocapture` -> vert, 10 passed.
|
||||
- `cargo test -p application --test workstate_actions -- --test-threads=1` -> vert, 9 passed.
|
||||
- `cargo test -p app-tauri --test chat_bridge` -> vert, 31 passed.
|
||||
- `cargo test -p web-server websocket_chat_send -- --test-threads=1` -> vert, 3 passed.
|
||||
- `cargo fmt --all -- --check` -> vert.
|
||||
- `git diff --check` -> vert.
|
||||
|
||||
Couverture verifiee:
|
||||
- `agent_send` Tauri capture `prompt` utilisateur brut comme objectif suspendu, pas `prompt_for_model`.
|
||||
- `chat.send` websocket capture egalement le prompt utilisateur brut.
|
||||
- `RestartRendezvousCoordinator` conserve `turn_id`, `objective_text`, `source` et `restart_attempt_id`.
|
||||
- L'injection est bornee a l'etat `Ready` de la tentative courante et marquee `injected` apres lecture, donc non rejouable.
|
||||
- Les chemins cancel, failure et drop nettoient `suspended_turn`.
|
||||
- Les tests de regression #289 restent verts dans `orchestrator_service restart`.
|
||||
|
||||
Reserve:
|
||||
- Validation runtime AppImage/live non executee dans cette passe QA; les tests automatises prouvent le contrat backend/transport, pas une relance manuelle de l'AppImage en cours d'utilisation.
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
id: "00547de0-3061-4d45-ad9b-f798152f75ce"
|
||||
number: 290
|
||||
title: "Corriger le redemarrage agent qui finalise le tour et bloque le chat"
|
||||
status: "inProgress"
|
||||
status: "qa"
|
||||
priority: "high"
|
||||
sprint: null
|
||||
links: []
|
||||
@ -11,7 +11,7 @@ attachments: []
|
||||
createdBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
|
||||
createdAt: 1788934173642
|
||||
updatedAt: 1788936952028
|
||||
version: 9
|
||||
updatedAt: 1788937781234
|
||||
version: 11
|
||||
---
|
||||
Bug rapporte par l'utilisateur le 2026-09-09: apres une demande de redemarrage, l'agent lance le redemarrage puis envoie un message; ce message est considere comme Final, le tour se termine, Stop repond "Request already stopped", et le chat devient bloque en ecriture. Attachement de reproduction: /home/anthony/Documents/Projects/IdeA/.ideai/attachments/agent-chat/7d2abba7-ed93-405f-9fe5-857c8455e436/9a881769-d8e8-410d-85f1-7a3ec2afdde0-clipboard-image-1788934010151.png. Objectif: corriger le flux pour que le redemarrage aboutisse vraiment, que l'utilisateur recupere un chat utilisable, et que le message de succes ne soit pas capture comme final prematurant le rendez-vous.
|
||||
@ -3968,7 +3968,7 @@
|
||||
"issueRef": "#290",
|
||||
"path": "290",
|
||||
"title": "Corriger le redemarrage agent qui finalise le tour et bloque le chat",
|
||||
"status": "inProgress",
|
||||
"status": "qa",
|
||||
"priority": "high",
|
||||
"sprint": null,
|
||||
"assignedAgentIds": [
|
||||
@ -3978,7 +3978,7 @@
|
||||
"kind": "agent",
|
||||
"agent_id": "a6c6ea12-bfc6-4bdc-8031-324102dfa34d"
|
||||
},
|
||||
"updatedAt": 1788936952028
|
||||
"updatedAt": 1788937781234
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user