fix(conscience): recall réformé — saillance en départage + termes SQL significatifs (8%→52%) #18

Merged
kevin merged 1 commit from fix/conscience-recall-reforme into main 2026-07-14 16:11:07 +00:00
Owner

Recall Conscience réformé — hit@5 tours réels : 8 % → 52 %

Suite du harnais recall (gungnir-bench, 136 souvenirs réels de WOLF, golds synthétique 103 q + tours réels 25 q). Toutes les variantes ont été mesurées avant d'être codées, et le code final re-validé bout-en-bout par le harnais (qui importe le vrai _sql_recall_fallback).

Les deux causes de quasi-cécité (8-11 % avant)

  1. _rerank_salience additif : bonus leçon +0.12 / affect +0.25 plus grands que les écarts de score réels → tri par catégorie, pas par pertinence. 89/136 souvenirs étant des leçons, tout non-leçon (rdv, préférence, décision, fait) était enterré — granite passait de 48 % à 4-12 % une fois re-ranké.
  2. Extraction de termes SQL avec stopwords (« avec », « est », « quand ») → l'ILIKE matchait presque tout le corpus → la récence pure décidait → les souvenirs anciens pertinents perdaient toujours.

La réforme

  • _rerank_saliencedépartage uniquement : la saillance ne s'exprime qu'à quasi-égalité de score (bins ε=0.01), tri stable (récence préservée dans les égalités). À scores égaux l'ordre historique reste affect > leçon > neutre → la caractérisation existante passe telle quelle.
  • _sql_recall_fallback → termes significatifs (stopwords FR exclus, accents pliés ; mots courts porteurs gardés — « s24 », « kb » : +16 pts mesurés) ; score = nb de termes matchés, récence en départage ; pool 50.

Chiffres (harnais, vrai code réformé)

avant après
tours réels (25 q) 8 % 52 % (devant le dense pur : 48 %)
synthétique (103 q) 11 % 34 %

Le rerank réformé s'applique aussi au futur chemin vectoriel (il ne le détruira plus : 48 % préservés vs 4-12 % avant). ports/memory.py = hors gel, cliquet intact. 8 tests dédiés dont l'anti-régression « pertinence > saillance au-delà d'epsilon ». Plugin conscience 4.35.0.

🤖 Generated with Claude Code

## Recall Conscience réformé — hit@5 tours réels : 8 % → 52 % Suite du harnais recall (gungnir-bench, 136 souvenirs réels de WOLF, golds synthétique 103 q + tours réels 25 q). Toutes les variantes ont été **mesurées avant d'être codées**, et le code final re-validé bout-en-bout par le harnais (qui importe le vrai `_sql_recall_fallback`). ### Les deux causes de quasi-cécité (8-11 % avant) 1. **`_rerank_salience` additif** : bonus leçon +0.12 / affect +0.25 **plus grands que les écarts de score réels** → tri par catégorie, pas par pertinence. 89/136 souvenirs étant des leçons, tout non-leçon (rdv, préférence, décision, fait) était enterré — granite passait de 48 % à 4-12 % une fois re-ranké. 2. **Extraction de termes SQL avec stopwords** (« avec », « est », « quand ») → l'ILIKE matchait presque tout le corpus → la récence pure décidait → les souvenirs anciens pertinents perdaient toujours. ### La réforme - `_rerank_salience` → **départage uniquement** : la saillance ne s'exprime qu'à quasi-égalité de score (bins ε=0.01), tri stable (récence préservée dans les égalités). À scores égaux l'ordre historique reste affect > leçon > neutre → **la caractérisation existante passe telle quelle**. - `_sql_recall_fallback` → termes **significatifs** (stopwords FR exclus, accents pliés ; mots courts porteurs gardés — « s24 », « kb » : +16 pts mesurés) ; **score = nb de termes matchés**, récence en départage ; pool 50. ### Chiffres (harnais, vrai code réformé) | | avant | après | |---|---|---| | tours réels (25 q) | 8 % | **52 %** (devant le dense pur : 48 %) | | synthétique (103 q) | 11 % | 34 % | Le rerank réformé s'applique aussi au **futur chemin vectoriel** (il ne le détruira plus : 48 % préservés vs 4-12 % avant). `ports/memory.py` = hors gel, cliquet intact. 8 tests dédiés dont l'anti-régression « pertinence > saillance au-delà d'epsilon ». Plugin conscience 4.35.0. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Harnais recall (gungnir-bench, 136 souvenirs réels, golds synthétique
103 q + tours réels 25 q, mesuré AVANT de coder) — deux causes de
quasi-cécité (hit@5 8-11 %) :

1. _rerank_salience ADDITIF : bonus leçon +0.12 / affect +0.25 plus
   grands que les écarts de score réels → tri par catégorie, pas par
   pertinence (89/136 souvenirs = leçons → tout non-leçon enterré ;
   granite passait de 48 % à 4-12 % une fois re-ranké).
   → DÉPARTAGE uniquement : la saillance ne s'exprime qu'à quasi-
   égalité de score (bins _RERANK_EPS=0.01), tri stable (récence
   préservée dans les égalités). À scores égaux, l'ordre historique
   reste : affect > leçon > neutre (caractérisation intacte).

2. _sql_recall_fallback : termes avec stopwords (« avec », « est »)
   → ILIKE matchait tout le corpus → récence pure décidait.
   → termes SIGNIFICATIFS (stopwords FR exclus, accents pliés ; mots
   courts porteurs gardés — « s24 », « kb » : +16 pts mesurés) ;
   score = nb de termes matchés, récence en départage ; pool 50.

Validé bout-en-bout par le harnais sur le VRAI code réformé :
tours réels 8 % → 52 % (devant le dense pur 48 %), synthétique
11 % → 34 %. La garde anti-dérive du harnais (copie rerank vérifiée
à chaque run) a mordu pendant le chantier — resynchronisée.

Chemins touchés : SQL fallback ET futur chemin vectoriel (le rerank
s'applique aux deux). ports/memory.py = hors gel. 8 tests dédiés
(anti-régression : pertinence > saillance au-delà d'epsilon).
Plugin conscience 4.35.0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kevin merged commit 71204e1725 into main 2026-07-14 16:11:07 +00:00
kevin deleted branch fix/conscience-recall-reforme 2026-07-14 16:11:07 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
kevin/Gungnir!18
No description provided.