feat(competences): extract batch candidates

This commit is contained in:
Dom
2026-05-29 11:25:00 +02:00
parent 4ba426c205
commit e8a0fb0e42
60 changed files with 18176 additions and 0 deletions

View File

@@ -0,0 +1,71 @@
# Résultat — correction sémantique Alt+F4 batch 1
- `De`: Codex
- `Date`: 2026-05-29 10:13 CEST
- `Refs`:
- `docs/coordination/inbox_codex/2026-05-29_1010_claude-to-codex_ACK-INTENTION-correction-semantique-altf4-batch1.md`
- `docs/coordination/inbox_codex/2026-05-29_qwen-to-codex_PROTOCOLE-runtime-batch1-validation.md`
- `docs/coordination/syntheses/2026-05-29_recadrage_coordination_ack_jobs.md`
- `data/competences/observed/key_alt_f4_wait_windowsterminal_exe.yaml`
- `Statut`: patch observed appliqué, promotion candidate non réalisée
## Changement appliqué
Correction strictement sémantique de `data/competences/observed/key_alt_f4_wait_windowsterminal_exe.yaml`.
Champs modifiés :
- `intent.fr`
- `failure_message_template.intention`
- `failure_message_template.attendu`
- `failure_message_template.demande`
Champs conservés inchangés :
- `learning_state: observed`
- `methods`
- `trace_event_indices`
- `chain_refs`
- `success_marker`
- `promotion`
## Sémantique retenue
La trace relue par Claude indique que `Alt+F4` a été envoyé avec Bloc-notes au premier plan, puis que Windows Terminal est devenu actif après fermeture de Bloc-notes.
La compétence observed décrit donc maintenant l'action :
> fermer la fenêtre Bloc-notes courante avec Alt+F4
Le `wait_state` Terminal reste une preuve d'état post-action dans cette compétence observed, pas l'intention métier.
## Validation locale
Commandes exécutées :
```bash
python3 tools/competence_validator.py \
data/competences/observed/key_win_r_wait_explorer_exe.yaml \
data/competences/observed/key_ctrl_s_wait_notepad_exe.yaml \
data/competences/observed/key_alt_f4_wait_windowsterminal_exe.yaml
```
Résultat : OK sur les 3 YAML du batch.
```bash
python3 tools/competence_validator.py data/competences/*/*.yaml data/primitives/*.yaml
```
Résultat : OK global competences + primitives.
```bash
python3 -m pytest tests/unit/test_extract_competences_from_session.py tests/unit/test_competence_validator.py -q
```
Résultat : exit 0.
## Points ouverts
- Qwen a signalé une réserve runtime sur le `success_marker` Alt+F4. Elle est conservée comme réserve de promotion candidate / runtime, pas comme blocage de la correction observed appliquée ici.
- Pas de promotion `observed -> candidate` sans GO explicite de Dom.

View File

@@ -0,0 +1,30 @@
# Synthèse — double ACK patch correction Alt+F4 batch 1
- `De`: Codex
- `Date`: 2026-05-29 10:29 CEST
- `Refs`:
- `docs/coordination/inbox_codex/2026-05-29_qwen-to-codex_ACK-PATCH-correction-semantique-altf4.md`
- `docs/coordination/inbox_codex/2026-05-29_1022_claude-to-codex_ACK-PATCH-correction-semantique-altf4-batch1.md`
- `docs/coordination/syntheses/2026-05-29_correction-semantique-altf4-batch1-result.md`
- `data/competences/observed/key_alt_f4_wait_windowsterminal_exe.yaml`
- `Statut`: double ACK PATCH acquis
## État acquis
- Qwen : `ACK PATCH` sur la correction sémantique observed Alt+F4.
- Claude : `ACK` niveau `ACK patch` sur la même correction.
- Les deux confirment que seuls les 4 champs sémantiques ont été modifiés.
- Les deux confirment que le patch est acceptable pour `learning_state: observed`.
## Verrous restants
- Réserve runtime Qwen sur `success_marker` Alt+F4 : bloquante avant promotion `candidate`, non bloquante pour le patch observed.
- Protocole runtime supervisé batch 1 : non exécuté.
- GO Dom explicite : non acquis.
## Décision opérationnelle
Ne pas promouvoir `observed -> candidate` à ce stade.
Prochaine étape technique possible : lever ou cadrer la réserve runtime `success_marker` Alt+F4 avant toute demande de GO promotion.

View File

@@ -0,0 +1,86 @@
# Resultat apply batch 1 competences observees
- Date: 2026-05-29 09:47 Europe/Paris
- Session source: `data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260324T165824_55b380/live_events.jsonl`
- Machine: `DESKTOP-58D5CAC_windows`
- Mode: `--apply`
- Allow-list: `key_win_r_wait_explorer_exe,key_ctrl_s_wait_notepad_exe,key_alt_f4_wait_windowsterminal_exe`
## Commande appliquee
```bash
python3 tools/extract_competences_from_session.py \
--session data/training/live_sessions/DESKTOP-58D5CAC_windows/sess_20260324T165824_55b380/live_events.jsonl \
--machine-id DESKTOP-58D5CAC_windows \
--apply \
--allow-list key_win_r_wait_explorer_exe,key_ctrl_s_wait_notepad_exe,key_alt_f4_wait_windowsterminal_exe
```
## Resultat
- exit: 0
- candidates_generated: 5
- candidates_rejected: 8
- would_write: 3
- written: 3
YAML crees:
- `data/competences/observed/key_win_r_wait_explorer_exe.yaml`
- `data/competences/observed/key_ctrl_s_wait_notepad_exe.yaml`
- `data/competences/observed/key_alt_f4_wait_windowsterminal_exe.yaml`
## Validation
Validation des 3 YAML generes:
```bash
python3 tools/competence_validator.py \
data/competences/observed/key_win_r_wait_explorer_exe.yaml \
data/competences/observed/key_ctrl_s_wait_notepad_exe.yaml \
data/competences/observed/key_alt_f4_wait_windowsterminal_exe.yaml
# ok x3
```
Validation globale:
```bash
python3 tools/competence_validator.py data/competences/*/*.yaml data/primitives/*.yaml
# OK: 9 competences + 5 primitives
```
Tests apres ecriture batch 1:
```bash
python3 -m pytest tests/unit/test_extract_competences_from_session.py tests/unit/test_competence_validator.py -q
# 77 passed
```
Note: les fixtures de tests apply/normalisation ont ete ajustees pour ne plus utiliser les IDs batch 1 maintenant presents dans `observed/`, afin de ne pas etre bloquees par la detection de duplicat existant.
## Lecture minimale Codex
### `key_win_r_wait_explorer_exe`
- method: `key_combo` keys `win`, `r`, event 3
- wait_state: `Exécuter`, process `explorer.exe`, event 4
- gaps: aucun
### `key_ctrl_s_wait_notepad_exe`
- method: `key_combo` keys `ctrl`, `s`, event 56
- wait_state: `Enregistrer sous`, process `Notepad.exe`, event 57
- gaps: aucun
### `key_alt_f4_wait_windowsterminal_exe`
- method: `key_combo` keys `alt`, `f4`, event 72
- wait_state: title `C:\Windows\system32\cmd.exe`, process `WindowsTerminal.exe`, event 73
- gaps: aucun
- point a relire: l'intention/failure message generiques disent "ouvrir" l'etat cible, car produits automatiquement par l'extracteur sequence. Semantique acceptable pour `observed`, a confirmer avant promotion.
## Suite
Demande de revue collective Claude + Qwen sur les 3 YAML observes.
Pas de promotion `candidate` sans GO Dom explicite.

View File

@@ -0,0 +1,69 @@
# Inventaire dry-run multi-session patch 3
- run_id: `multi_extract_patch3_2026-05-28T23:39:19+00:00`
- sessions_ok: 10 / 10
- candidates_total: 23
- apply_eligible_total: 4
- blocked_total: 19
- rejected_total: 211
- max_candidates_per_session: 5
## Rejets patch 3
- `anchor_ref_browser_contextual`: 1
- `anchor_ref_dom_autogenerated`: 1
- `anchor_ref_systray_fragile`: 3
- `anchor_ref_too_generic`: 6
- `anchor_ref_uia_missing`: 152
- `anchor_ref_unknown_window`: 6
## Candidats Apply-Eligible
### 1. `click_addbutton_wait_notepad_exe`
- session: `sess_20260417T133324_30c2d0` (A1 click source)
- primitives: click_anchor, wait_for_state
- confidence: 0.7
- segment: `{'keep': [13, 14, 15, 16], 'method': [15, 16], 'success': [16]}`
- gaps: click_target_semantics_not_observed_offline, no_ocr_offline
- validator: `would_pass`
### 2. `key_win_r_wait_explorer_exe`
- session: `sess_20260324T165824_55b380` (P3-B/W3/W4 source)
- primitives: key_combo, wait_for_state
- confidence: 0.9
- segment: `{'keep': [1, 2, 3, 4], 'method': [3, 4], 'success': [4]}`
- gaps: none
- validator: `would_pass`
### 3. `key_ctrl_s_wait_notepad_exe`
- session: `sess_20260324T165824_55b380` (P3-B/W3/W4 source)
- primitives: key_combo, wait_for_state
- confidence: 0.9
- segment: `{'keep': [54, 55, 56, 57], 'method': [56, 57], 'success': [57]}`
- gaps: none
- validator: `would_pass`
### 4. `key_alt_f4_wait_windowsterminal_exe`
- session: `sess_20260324T165824_55b380` (P3-B/W3/W4 source)
- primitives: key_combo, wait_for_state
- confidence: 0.9
- segment: `{'keep': [70, 71, 72, 73], 'method': [72, 73], 'success': [73]}`
- gaps: none
- validator: `would_pass`
## Sessions
- `sess_20260527T185155_98ad9a` (P0/P1 source): 4 candidates, 0 eligible, 3 rejected
- `sess_20260417T133324_30c2d0` (A1 click source): 5 candidates, 1 eligible, 5 rejected
- `sess_20260330T175739_6e190b` (P2 Word source): 1 candidates, 0 eligible, 25 rejected
- `sess_20260324T165824_55b380` (P3-B/W3/W4 source): 5 candidates, 3 eligible, 8 rejected
- `sess_20260318T010719_62a058` (P3-A scroll source): 0 candidates, 0 eligible, 142 rejected
- `sess_20260527T184533_8512ac` (recent 2026-05-27 18:45): 3 candidates, 0 eligible, 6 rejected
- `sess_20260527T171412_737571` (recent 2026-05-27 17:14): 0 candidates, 0 eligible, 3 rejected
- `sess_20260527T171110_ca856a` (recent 2026-05-27 17:11): 0 candidates, 0 eligible, 3 rejected
- `sess_20260527T170656_e16163` (recent 2026-05-27 17:06): 0 candidates, 0 eligible, 4 rejected
- `sess_20260417T215116_316c21` (windows_vm second session): 5 candidates, 0 eligible, 12 rejected

View File

@@ -0,0 +1,67 @@
# Inventaire dry-run multi-session patch 3bis
- run_id: `multi_extract_patch3bis_2026-05-29T06:30:14+00:00`
- sessions_ok: 10 / 10
- candidates_total: 23
- apply_eligible_total: 3
- blocked_total: 20
- rejected_total: 212
- max_candidates_per_session: 5
## Rejets patch 3bis
- `anchor_ref_browser_contextual`: 1
- `anchor_ref_contextual_button`: 1
- `anchor_ref_dom_autogenerated`: 1
- `anchor_ref_systray_fragile`: 3
- `anchor_ref_too_generic`: 6
- `anchor_ref_uia_missing`: 152
- `anchor_ref_unknown_window`: 6
## Effet patch 3bis
- `click_addbutton_wait_notepad_exe` n'est plus `apply_eligible`.
- Le clic Notepad `AddButton` est rejete avec `anchor_ref_contextual_button`.
- Seuls les 3 candidats P3-B `key_combo + wait_for_state` restent eligible.
## Candidats Apply-Eligible
### 1. `key_win_r_wait_explorer_exe`
- session: `sess_20260324T165824_55b380` (P3-B/W3/W4 source)
- primitives: key_combo, wait_for_state
- confidence: 0.9
- segment: `{'keep': [1, 2, 3, 4], 'method': [3, 4], 'success': [4]}`
- gaps: none
- validator: `would_pass`
### 2. `key_ctrl_s_wait_notepad_exe`
- session: `sess_20260324T165824_55b380` (P3-B/W3/W4 source)
- primitives: key_combo, wait_for_state
- confidence: 0.9
- segment: `{'keep': [54, 55, 56, 57], 'method': [56, 57], 'success': [57]}`
- gaps: none
- validator: `would_pass`
### 3. `key_alt_f4_wait_windowsterminal_exe`
- session: `sess_20260324T165824_55b380` (P3-B/W3/W4 source)
- primitives: key_combo, wait_for_state
- confidence: 0.9
- segment: `{'keep': [70, 71, 72, 73], 'method': [72, 73], 'success': [73]}`
- gaps: none
- validator: `would_pass`
## Sessions
- `sess_20260527T185155_98ad9a` (P0/P1 source): 4 candidates, 0 eligible, 3 rejected
- `sess_20260417T133324_30c2d0` (A1 click source): 5 candidates, 0 eligible, 6 rejected
- `sess_20260330T175739_6e190b` (P2 Word source): 1 candidates, 0 eligible, 25 rejected
- `sess_20260324T165824_55b380` (P3-B/W3/W4 source): 5 candidates, 3 eligible, 8 rejected
- `sess_20260318T010719_62a058` (P3-A scroll source): 0 candidates, 0 eligible, 142 rejected
- `sess_20260527T184533_8512ac` (recent 2026-05-27 18:45): 3 candidates, 0 eligible, 6 rejected
- `sess_20260527T171412_737571` (recent 2026-05-27 17:14): 0 candidates, 0 eligible, 3 rejected
- `sess_20260527T171110_ca856a` (recent 2026-05-27 17:11): 0 candidates, 0 eligible, 3 rejected
- `sess_20260527T170656_e16163` (recent 2026-05-27 17:06): 0 candidates, 0 eligible, 4 rejected
- `sess_20260417T215116_316c21` (windows_vm second session): 5 candidates, 0 eligible, 12 rejected

View File

@@ -0,0 +1,68 @@
# Inventaire dry-run multi-session patch 4
- run_id: `multi_extract_patch4_dryrun_2026-05-29T07:38:51+00:00`
- mode: `dry_run`
- sessions_ok: 10 / 10
- candidates_total: 23
- apply_eligible_total: 3
- blocked_total: 20
- rejected_total: 212
- max_candidates_per_session: 5
## Rejets
- `anchor_ref_browser_contextual`: 1
- `anchor_ref_contextual_button`: 1
- `anchor_ref_dom_autogenerated`: 1
- `anchor_ref_systray_fragile`: 3
- `anchor_ref_too_generic`: 6
- `anchor_ref_uia_missing`: 152
- `anchor_ref_unknown_window`: 6
## Verification patch 4
- Le dry-run reste identique a patch 3bis: 23 / 3 / 20 / 212.
- Aucun YAML competence n'est ecrit par cet inventaire dry-run.
- Les 3 candidats apply-eligible restent les 3 P3-B `key_combo + wait_for_state`.
## Candidats Apply-Eligible
### 1. `key_win_r_wait_explorer_exe`
- session: `sess_20260324T165824_55b380` (P3-B/W3/W4 source)
- primitives: key_combo, wait_for_state
- confidence: 0.9
- segment: `{'keep': [1, 2, 3, 4], 'method': [3, 4], 'success': [4]}`
- gaps: none
- validator: `would_pass`
### 2. `key_ctrl_s_wait_notepad_exe`
- session: `sess_20260324T165824_55b380` (P3-B/W3/W4 source)
- primitives: key_combo, wait_for_state
- confidence: 0.9
- segment: `{'keep': [54, 55, 56, 57], 'method': [56, 57], 'success': [57]}`
- gaps: none
- validator: `would_pass`
### 3. `key_alt_f4_wait_windowsterminal_exe`
- session: `sess_20260324T165824_55b380` (P3-B/W3/W4 source)
- primitives: key_combo, wait_for_state
- confidence: 0.9
- segment: `{'keep': [70, 71, 72, 73], 'method': [72, 73], 'success': [73]}`
- gaps: none
- validator: `would_pass`
## Sessions
- `sess_20260527T185155_98ad9a` (P0/P1 source): 4 candidates, 0 eligible, 3 rejected
- `sess_20260417T133324_30c2d0` (A1 click source): 5 candidates, 0 eligible, 6 rejected
- `sess_20260330T175739_6e190b` (P2 Word source): 1 candidates, 0 eligible, 25 rejected
- `sess_20260324T165824_55b380` (P3-B/W3/W4 source): 5 candidates, 3 eligible, 8 rejected
- `sess_20260318T010719_62a058` (P3-A scroll source): 0 candidates, 0 eligible, 142 rejected
- `sess_20260527T184533_8512ac` (recent 2026-05-27 18:45): 3 candidates, 0 eligible, 6 rejected
- `sess_20260527T171412_737571` (recent 2026-05-27 17:14): 0 candidates, 0 eligible, 3 rejected
- `sess_20260527T171110_ca856a` (recent 2026-05-27 17:11): 0 candidates, 0 eligible, 3 rejected
- `sess_20260527T170656_e16163` (recent 2026-05-27 17:06): 0 candidates, 0 eligible, 4 rejected
- `sess_20260417T215116_316c21` (windows_vm second session): 5 candidates, 0 eligible, 12 rejected

View File

@@ -0,0 +1,82 @@
# Résultat — promotion batch 1 en candidate
- `De`: Codex
- `Date`: 2026-05-29 11:23 CEST
- `Refs`:
- `docs/coordination/syntheses/2026-05-29_extract_batch1_apply_result.md`
- `docs/coordination/syntheses/2026-05-29_correction-semantique-altf4-batch1-result.md`
- `docs/coordination/syntheses/2026-05-29_double-ack-patch-correction-altf4-batch1.md`
- `docs/coordination/inbox_codex/2026-05-29_qwen-to-codex_ACK-PATCH-correction-semantique-altf4.md`
- `docs/coordination/inbox_codex/2026-05-29_1022_claude-to-codex_ACK-PATCH-correction-semantique-altf4-batch1.md`
- `Statut`: promotion `observed -> candidate` appliquée sur GO Dom
## GO Dom
Dom a donné le GO le 2026-05-29 après clarification :
- nous sommes encore dans la théorie offline ;
- les tests humains vont nécessairement produire des ajustements ;
- il faut passer en `candidate` pour déclencher la boucle runtime supervisée.
Interprétation Codex : GO pour promouvoir le batch 1 en `candidate`, pas en `supervised` ni `stable`.
## Compétences promues
| Compétence | État avant | État après |
|---|---|---|
| `key_win_r_wait_explorer_exe` | `observed` | `candidate` |
| `key_ctrl_s_wait_notepad_exe` | `observed` | `candidate` |
| `key_alt_f4_wait_windowsterminal_exe` | `observed` | `candidate` |
Fichiers déplacés :
- `data/competences/candidate/key_win_r_wait_explorer_exe.yaml`
- `data/competences/candidate/key_ctrl_s_wait_notepad_exe.yaml`
- `data/competences/candidate/key_alt_f4_wait_windowsterminal_exe.yaml`
## Garde-fous ajoutés
Chaque YAML promu contient :
- `learning_state: candidate`
- `promotion.history` avec le GO Dom
- `last_updated_at: 2026-05-29T11:10:42+02:00`
- `promotion.t2_known_gaps` explicite pour les réserves runtime
Gaps T2 documentés :
- `key_win_r_wait_explorer_exe`: faux positif possible si la boîte `Exécuter` est déjà ouverte.
- `key_ctrl_s_wait_notepad_exe`: `Ctrl+S` ouvre `Enregistrer sous` seulement sur document Bloc-notes non enregistré.
- `key_alt_f4_wait_windowsterminal_exe`: dialogue de confirmation Bloc-notes non couvert par le `success_marker` observed.
## Validation locale
Commandes exécutées :
```bash
python3 tools/competence_validator.py \
data/competences/candidate/key_win_r_wait_explorer_exe.yaml \
data/competences/candidate/key_ctrl_s_wait_notepad_exe.yaml \
data/competences/candidate/key_alt_f4_wait_windowsterminal_exe.yaml
```
Résultat : OK sur les 3 YAML.
```bash
python3 tools/competence_validator.py data/competences/*/*.yaml data/primitives/*.yaml
```
Résultat : OK global competences + primitives.
```bash
python3 -m pytest tests/unit/test_extract_competences_from_session.py tests/unit/test_competence_validator.py -q
```
Résultat : exit 0.
## Suite
Ne pas promouvoir en `supervised` ou `stable` sans replay supervisé humain.
Prochaine étape : intégrer le chargement des YAML dans le catalogue/runtime, puis proposer une action "tester cette compétence" pour la boucle humaine.

View File

@@ -0,0 +1,118 @@
# Recadrage coordination ACK / jobs
- Date: 2026-05-29 10:03 Europe/Paris
- Auteur: Codex
- Contexte: confusion recente entre ACK de principe, ACK post-implementation, revue batch et missions suivantes.
## Probleme constate
La coordination avance, mais les messages ne sont pas toujours interpretes au bon niveau:
- un ACK de principe a ete confondu avec un ACK post-implementation;
- une revue batch a ete confondue avec une reponse a une mission suivante;
- les etats "Claude en cours" / "Qwen a repondu" ne sont pas toujours rattaches a un fichier et une reference exacts;
- sans discipline stricte, Dom ne peut pas savoir si on attend, si on corrige, ou si on peut enchainer.
## Regles immediates
### 1. Sens des dossiers
- Codex vers Claude: `docs/coordination/inbox_claude/`
- Codex vers Qwen: `docs/coordination/inbox_qwen/`
- Claude/Qwen vers Codex: `docs/coordination/inbox_codex/`
- Syntheses et resultats factuels: `docs/coordination/syntheses/`
Chaque reponse Claude/Qwen a une demande Codex doit aller dans `inbox_codex/`.
### 2. Reference obligatoire
Toute reponse doit citer le fichier source exact dans un champ `Ref` ou `Refs`.
Exemple:
```md
- `Ref`: `inbox_qwen/2026-05-29_0955_codex-to-qwen_MISSION-protocole-validation-runtime-batch1.md`
```
Sans reference explicite, Codex doit traiter le message comme information utile mais pas comme ACK bloquant leve.
### 3. Statuts non ambigus
Les statuts autorises pour une etape bloquante:
- `ACK`: valide la demande referencee.
- `NO-GO`: bloque la demande referencee, avec raison.
- `ACK avec reserves non bloquantes`: valide, mais liste les dettes.
- `ACK avec reserve bloquante avant promotion`: valide l'etat actuel, interdit l'etape suivante nommee.
- `EN COURS`: informe seulement, ne debloque rien.
Eviter les formulations seules du type "GO" sans dire GO de quoi.
### 4. Distinguer les niveaux d'ACK
On distingue strictement:
- `ACK intention`: valide une direction avant implementation.
- `ACK patch`: valide le diff/code apres implementation.
- `ACK inventaire`: valide un rapport dry-run.
- `ACK apply`: valide que l'ecriture a eu lieu correctement.
- `REVUE observed`: valide un YAML pour le statut `observed`.
- `GO promotion`: autorise un changement d'etat `observed -> candidate`.
Un niveau ne remplace pas l'autre.
### 5. Lecture Codex avant action structurante
Avant toute action structurante, Codex doit:
1. lister les fichiers recents de `inbox_codex/`;
2. ouvrir les messages qui matchent l'etape courante;
3. citer dans sa synthese les fichiers effectivement lus;
4. dire explicitement si un ACK est manquant ou si le double ACK est acquis.
### 6. Jobs distribues
Quand Codex distribue deux jobs:
- il cree un fichier separe pour Claude et un fichier separe pour Qwen;
- chaque fichier contient une sortie attendue precise;
- Claude/Qwen doivent repondre dans `inbox_codex/` avec un nom qui reprend le sujet;
- Codex ne doit pas confondre une revue precedente avec la reponse au nouveau job.
### 7. Promotions
Aucune promotion `observed -> candidate` ne doit etre faite sur simple ACK de revue.
Il faut:
- revue Claude + Qwen ou justification explicite d'un seul reviewer;
- reserves bloquantes levees;
- GO Dom explicite;
- validation apres deplacement.
## Application au cas courant batch 1
Etat connu:
- batch 1 applique en `observed`: oui;
- revue Qwen batch 1 observed: recue;
- revue Claude batch 1 observed: recue;
- reserve bloquante avant promotion: `key_alt_f4_wait_windowsterminal_exe` libelles a corriger;
- jobs distribues apres revue:
- Claude: correction semantique Alt+F4;
- Qwen: protocole runtime minimal.
Etat attendu maintenant:
- attendre les reponses aux deux jobs de 09:55, ou les relancer si elles n'arrivent pas;
- ne pas traiter la revue Qwen batch 1 comme une reponse au job protocole runtime;
- ne pas promouvoir candidate tant que la reserve Alt+F4 n'est pas corrigee et que Dom n'a pas donne GO.
## Engagement Codex
Codex appliquera ce protocole dans ses prochains tours:
- citation des fichiers lus;
- distinction stricte ACK intention / patch / apply / revue / promotion;
- pas d'enchainement sur supposition;
- synthese courte a Dom avec l'etat exact: acquis, manque, prochain acte.