feat(competences): extract batch candidates
This commit is contained in:
@@ -0,0 +1,256 @@
|
||||
# Handoff Codex - Reprise extract batch Lea patch 3
|
||||
|
||||
Date: 2026-05-29 02:05 Europe/Paris
|
||||
Pilote sortant: Codex
|
||||
Participants: Dom, Claude, Qwen
|
||||
Etat: pause volontaire avant changement de session Codex
|
||||
|
||||
## Resume court
|
||||
|
||||
Le socle `competence courte verifiee` a bien avance. On n'est plus bloque sur `Win+S`: les primitives de base existent, plusieurs competences sont validees en `candidate` ou `observed`, et l'extracteur batch dry-run multi-session fonctionne.
|
||||
|
||||
Dernier etat stable:
|
||||
|
||||
- patch 3 `fragile anchors` implemente;
|
||||
- double ACK recu de Claude et Qwen;
|
||||
- `--apply` encore bloque volontairement;
|
||||
- prochaine action recommandee: mini patch 3bis pour rejeter `click_addbutton_wait_notepad_exe`, puis patch 4 `--apply` avec `--allow-list` obligatoire.
|
||||
|
||||
Ne pas lancer d'ecriture YAML automatique au demarrage de la prochaine session.
|
||||
|
||||
## Fichiers principaux
|
||||
|
||||
Code:
|
||||
|
||||
- `tools/competence_validator.py`
|
||||
- `tools/extract_competences_from_session.py`
|
||||
- `tests/unit/test_competence_validator.py`
|
||||
- `tests/unit/test_extract_competences_from_session.py`
|
||||
|
||||
Primitives:
|
||||
|
||||
- `data/primitives/key_combo.yaml`
|
||||
- `data/primitives/text_input_focused.yaml`
|
||||
- `data/primitives/scroll_view.yaml`
|
||||
- `data/primitives/click_anchor.yaml`
|
||||
- `data/primitives/wait_for_state.yaml`
|
||||
|
||||
Competences actuelles:
|
||||
|
||||
- `data/competences/candidate/open_windows_search.yaml`
|
||||
- `data/competences/candidate/open_windows_search_taskbar_click.yaml`
|
||||
- `data/competences/candidate/saisir_texte_word.yaml`
|
||||
- `data/competences/observed/saisir_requete_recherche.yaml`
|
||||
- `data/competences/observed/open_application_via_run.yaml`
|
||||
- `data/competences/observed/scroll_down_pdf_edge.yaml`
|
||||
|
||||
Inventaires:
|
||||
|
||||
- `docs/coordination/syntheses/2026-05-28_extract_inventory_multi_session.json`
|
||||
- `docs/coordination/syntheses/2026-05-28_extract_inventory_multi_session.md`
|
||||
- `docs/coordination/syntheses/2026-05-29_extract_inventory_multi_session_patch3.json`
|
||||
- `docs/coordination/syntheses/2026-05-29_extract_inventory_multi_session_patch3.md`
|
||||
|
||||
## Ce qui est fait
|
||||
|
||||
### Validateur
|
||||
|
||||
`tools/competence_validator.py` valide maintenant:
|
||||
|
||||
- les primitives sous `data/primitives`;
|
||||
- `primitive_ref`;
|
||||
- les schemas de parametres;
|
||||
- l'absence de coordonnees durables;
|
||||
- les sequences de methodes et indices de trace;
|
||||
- les sources raw `live_events.jsonl` avec `source_event_format: raw_live_events_jsonl`;
|
||||
- les traces `wait_state`;
|
||||
- les variantes de raccourci `ctrl+s`.
|
||||
|
||||
Derniere validation connue:
|
||||
|
||||
```bash
|
||||
python3 tools/competence_validator.py data/competences/*/*.yaml data/primitives/*.yaml
|
||||
# OK: 6 competences + 5 primitives
|
||||
```
|
||||
|
||||
### Extracteur batch dry-run
|
||||
|
||||
`tools/extract_competences_from_session.py` est encore volontairement read-only.
|
||||
|
||||
Fonctionnalites actuelles:
|
||||
|
||||
- lit une session raw `live_events.jsonl` ou streaming JSON;
|
||||
- propose des candidats en memoire;
|
||||
- valide les YAML temporaires;
|
||||
- produit un rapport JSON ou Markdown;
|
||||
- bloque `--apply` avec exit 2;
|
||||
- calcule `apply_eligible`, `quality_flags`, duplicats et gaps T2;
|
||||
- hard-cap `--max-candidates` a 10.
|
||||
|
||||
Patch 3 applique:
|
||||
|
||||
- `anchor_ref_systray_fragile`;
|
||||
- `anchor_ref_dom_autogenerated`;
|
||||
- `anchor_ref_unknown_window`;
|
||||
- `anchor_ref_too_generic`;
|
||||
- `anchor_ref_browser_contextual`.
|
||||
|
||||
Dernieres validations connues:
|
||||
|
||||
```bash
|
||||
python3 -m pytest tests/unit/test_extract_competences_from_session.py tests/unit/test_competence_validator.py -q
|
||||
# 72 passed
|
||||
|
||||
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
|
||||
# exit 2: --apply is not implemented in the dry-run bootstrap
|
||||
```
|
||||
|
||||
## Etat inventaire patch 3
|
||||
|
||||
Rapport:
|
||||
|
||||
- `docs/coordination/syntheses/2026-05-29_extract_inventory_multi_session_patch3.md`
|
||||
- `docs/coordination/syntheses/2026-05-29_extract_inventory_multi_session_patch3.json`
|
||||
|
||||
Resume:
|
||||
|
||||
- sessions_ok: 10 / 10
|
||||
- candidates_total: 23
|
||||
- apply_eligible_total: 4
|
||||
- blocked_total: 19
|
||||
- rejected_total: 211
|
||||
|
||||
Effet important:
|
||||
|
||||
- la session Chrome/systray `sess_20260417T215116_316c21` passe de 3 eligible a 0 eligible;
|
||||
- les trois candidats suspects Chrome/systray sont rejetes automatiquement.
|
||||
|
||||
Apply-eligible restants:
|
||||
|
||||
1. `click_addbutton_wait_notepad_exe` - conf 0.7, gaps click/OCR, hors batch 1.
|
||||
2. `key_win_r_wait_explorer_exe` - conf 0.9, no gaps.
|
||||
3. `key_ctrl_s_wait_notepad_exe` - conf 0.9, no gaps.
|
||||
4. `key_alt_f4_wait_windowsterminal_exe` - conf 0.9, no gaps.
|
||||
|
||||
Batch 1 valide par tout le monde:
|
||||
|
||||
- `key_win_r_wait_explorer_exe`
|
||||
- `key_ctrl_s_wait_notepad_exe`
|
||||
- `key_alt_f4_wait_windowsterminal_exe`
|
||||
|
||||
## Coordination recue
|
||||
|
||||
Demandes Codex envoyees:
|
||||
|
||||
- `docs/coordination/inbox_claude/2026-05-29_0145_codex-to-claude_DEMANDE-ACK-extract-batch-patch3-fragile-anchor.md`
|
||||
- `docs/coordination/inbox_qwen/2026-05-29_0145_codex-to-qwen_DEMANDE-ACK-extract-batch-patch3-fragile-anchor.md`
|
||||
|
||||
Retours recus:
|
||||
|
||||
- `docs/coordination/inbox_codex/2026-05-29_0200_claude-to-codex_ACK-EXTRACT-BATCH-PATCH3-FRAGILE-ANCHOR.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-29_0200_qwen-to-codex_ACK-patch3-fragile-anchors.md`
|
||||
|
||||
Claude:
|
||||
|
||||
- ACK complet patch 3;
|
||||
- valide `--apply` avec contraintes strictes;
|
||||
- accepte de laisser `click_addbutton_wait_notepad_exe` eligible mais hors batch 1.
|
||||
|
||||
Qwen:
|
||||
|
||||
- ACK complet patch 3;
|
||||
- confirme batch 1 limite aux 3 key_combo P3-B;
|
||||
- demande de rejeter automatiquement `click_addbutton_wait_notepad_exe` avec un code du type `anchor_ref_contextual_button`.
|
||||
|
||||
Decision recommandee par Codex sortant:
|
||||
|
||||
- suivre Qwen sur ce point, car c'est plus strict et plus sain avant d'ouvrir `--apply`;
|
||||
- faire un patch 3bis court avant patch 4.
|
||||
|
||||
## Prochaine sequence recommandee
|
||||
|
||||
### 1. Lire les messages
|
||||
|
||||
Au debut de la prochaine session, lire imperativement:
|
||||
|
||||
- `docs/coordination/inbox_codex/2026-05-29_0200_claude-to-codex_ACK-EXTRACT-BATCH-PATCH3-FRAGILE-ANCHOR.md`
|
||||
- `docs/coordination/inbox_codex/2026-05-29_0200_qwen-to-codex_ACK-patch3-fragile-anchors.md`
|
||||
- `docs/coordination/syntheses/2026-05-29_extract_inventory_multi_session_patch3.md`
|
||||
|
||||
### 2. Patch 3bis
|
||||
|
||||
But: rejeter automatiquement `click_addbutton_wait_notepad_exe`.
|
||||
|
||||
Suggestion:
|
||||
|
||||
- ajouter `anchor_ref_contextual_button`;
|
||||
- cibler les boutons contextuels faibles de type `AddButton`, `add button`, `bouton ajouter`, quand la semantique metier n'est pas prouvee;
|
||||
- ajouter un test unitaire;
|
||||
- relancer inventaire patch 3bis;
|
||||
- demander ACK rapide Claude/Qwen.
|
||||
|
||||
Effet attendu:
|
||||
|
||||
- `apply_eligible_total` passe de 4 a 3;
|
||||
- seuls les 3 candidats batch 1 restent eligible.
|
||||
|
||||
### 3. Patch 4
|
||||
|
||||
Debloquer `--apply` uniquement avec garde-fous:
|
||||
|
||||
- `--allow-list <id1,id2,...>` obligatoire;
|
||||
- pas de `--all`;
|
||||
- chaque ID doit exister dans le rapport dry-run de la meme session;
|
||||
- atomicite: si un YAML echoue la validation pre-ecriture, aucun fichier n'est ecrit;
|
||||
- hard-cap `--max-candidates` conserve.
|
||||
|
||||
Tests demandes par Claude:
|
||||
|
||||
- `test_apply_requires_allow_list`
|
||||
- `test_apply_rejects_unknown_id_in_allow_list`
|
||||
- `test_apply_atomic_rollback_on_validation_failure`
|
||||
- `test_apply_writes_only_allowed_ids`
|
||||
- `test_apply_respects_max_candidates_cap`
|
||||
|
||||
### 4. Apply batch 1
|
||||
|
||||
Commande cible apres double ACK patch 4:
|
||||
|
||||
```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 attendu:
|
||||
|
||||
- 3 YAML crees dans `data/competences/observed/`;
|
||||
- revue collective Claude/Qwen;
|
||||
- promotion candidate par lot seulement apres GO Dom.
|
||||
|
||||
## Regles importantes
|
||||
|
||||
- Ne pas travailler seul: toujours lire `docs/coordination/inbox_codex` avant une etape structurante.
|
||||
- Demander ACK/NO-GO explicite a Claude et Qwen.
|
||||
- Pas d'ecriture automatique sans `--allow-list`.
|
||||
- Pas de `--all`.
|
||||
- Pas de promotion `candidate` ou `stable` sans GO Dom.
|
||||
- Ne pas transformer les gaps OCR/click en preuve visuelle.
|
||||
- Pas de coordonnees comme savoir durable.
|
||||
- Ne pas recapturer P0/P1/P2/P3 si les traces offline suffisent.
|
||||
|
||||
## Prompt de reprise conseille
|
||||
|
||||
Lire ce handoff, puis:
|
||||
|
||||
1. ouvrir les deux ACK patch 3 dans `docs/coordination/inbox_codex`;
|
||||
2. verifier l'etat local avec `git diff -- tools/extract_competences_from_session.py tests/unit/test_extract_competences_from_session.py`;
|
||||
3. implementer patch 3bis `anchor_ref_contextual_button`;
|
||||
4. relancer tests + inventaire;
|
||||
5. demander ACK Claude/Qwen avant patch 4.
|
||||
|
||||
Reference in New Issue
Block a user