feat(conscience): sélection compétitive des croyances de soi (spec v0) #17

Merged
kevin merged 1 commit from feat/conscience-selection-competitive into main 2026-07-14 09:58:30 +00:00
Owner

Sélection compétitive des croyances de soi (spec v0)

Chantier ratifié 07-12 (~/CONSCIENCE-SELECTION-COMPETITIVE-v0.md), gate Brier franchi à l'audit J+1 post-v5.126.0, GO Kevin 07-14.

Principe

La consolidation ne stocke plus UNE croyance en espérant qu'elle soit bonne : belief_selection.intake() génère K=3 formulations concurrentes du même insight ({large, étroite/conditionnelle, contre-prudente} — 1 appel modèle de fond, double filet repli+escalade), les fait parier sur une ardoise commune de questions falsifiables sur les flux internes mesurés (taux de justesse des décisions global/par méthode, Brier des sims, cohérence du self_model, top_need, valence, goals), résolution déterministe à échéance (horizon en jours). La survivante au Brier se consolide ; le reste s'élague avec trace. Empêche l'enjolivement en amont — self_fidelity ne le corrigeait qu'en aval.

Durcissements pré-enregistrés (leçons campagne RWKV 07-13)

  • Marge ε = 0.05 figée avant tout concours : écart de Brier < ε = égalité → la falsifiabilité tranche (paris engagés |p−0.5|≥0.15), victoire « provisoire » — jamais de mérite narratif sur du bruit à n=4 ;
  • Trace enrichie : n de paris résolus + marge consignés par concours → re-jugement v1 possible, récit honnête ;
  • Fail-closed → passthrough : payload LLM invalide / cap de concours / mécanisme désactivé (selection.enabled) = stockage direct identique au comportement historique. On ne perd une consolidation QUE par la règle de spec « fenêtre expirée sans résolution suffisante = pas de gagnant par défaut ».

Règles dures spec tenues

  • Claims empiriques only (prompt) ; hypothèse sans ≥2 paris engagés élaguée d'office ; <2 survivantes = concours dégénéré → passthrough ;
  • Paris sur flux internes, PAS le détecteur conversationnel ; métrique illisible à l'échéance = pari VOID (jamais scoré — « préférer ne pas scorer à scorer faux ») ;
  • Croyance en instance hors prompt (rien n'entre en mémoire avant la décision — automatique).

Gel Conscience

  • Swap net-négatif (−2) du site de stockage dans __init__.py : 2682 → 2680, cliquet abaissé dans test_consciousness_freeze.py ;
  • engine.py intouché (1362) ; tick délégué via self_model.tick() (seam établi, pattern valence/rumination/self_fidelity) ;
  • Toute la logique dans cognition/belief_selection.py (hors gel).

Expo & coût

  • GET /api/plugins/consciousness/belief-selection + clé belief_selection dans /status (« 3 chiffres » : ouverts/tranchés/expirés, survie par type, délai moyen) — pas d'UI dans ce lot (zéro dette i18n) ;
  • +1 appel background par consolidation (les K d'un coup) ; résolution/décision au tick = no-LLM.

Tests

23 tests dédiés (test_belief_selection.py) : parsing strict, passthrough fail-closed ×4, élagage, résolution déterministe, VOID, marge ε → égalité → falsifiabilité, expiration sans gagnant, idempotence, trace, summary. Suites conscience 137 verts + cliquet ; 816 backend local (échecs restants = Postgres absent en local, couverts par la CI).

Plugin conscience 4.34.0.

🤖 Generated with Claude Code

## Sélection compétitive des croyances de soi (spec v0) Chantier ratifié 07-12 (`~/CONSCIENCE-SELECTION-COMPETITIVE-v0.md`), gate Brier franchi à l'audit J+1 post-v5.126.0, GO Kevin 07-14. ### Principe La consolidation ne stocke plus UNE croyance en espérant qu'elle soit bonne : `belief_selection.intake()` génère **K=3 formulations concurrentes** du même insight ({large, étroite/conditionnelle, contre-prudente} — 1 appel modèle de fond, double filet repli+escalade), les fait **parier sur une ardoise commune** de questions falsifiables sur les **flux internes mesurés** (taux de justesse des décisions global/par méthode, Brier des sims, cohérence du self_model, top_need, valence, goals), résolution **déterministe** à échéance (horizon en jours). La **survivante au Brier** se consolide ; le reste s'élague **avec trace**. Empêche l'enjolivement en amont — `self_fidelity` ne le corrigeait qu'en aval. ### Durcissements pré-enregistrés (leçons campagne RWKV 07-13) - **Marge ε = 0.05** figée avant tout concours : écart de Brier < ε = égalité → la **falsifiabilité** tranche (paris engagés |p−0.5|≥0.15), victoire « provisoire » — jamais de mérite narratif sur du bruit à n=4 ; - **Trace enrichie** : n de paris résolus + marge consignés par concours → re-jugement v1 possible, récit honnête ; - **Fail-closed → passthrough** : payload LLM invalide / cap de concours / mécanisme désactivé (`selection.enabled`) = stockage direct **identique au comportement historique**. On ne perd une consolidation QUE par la règle de spec « fenêtre expirée sans résolution suffisante = pas de gagnant par défaut ». ### Règles dures spec tenues - Claims empiriques only (prompt) ; hypothèse sans ≥2 paris engagés **élaguée d'office** ; <2 survivantes = concours dégénéré → passthrough ; - Paris sur flux internes, PAS le détecteur conversationnel ; métrique illisible à l'échéance = pari **VOID** (jamais scoré — « préférer ne pas scorer à scorer faux ») ; - Croyance en instance **hors prompt** (rien n'entre en mémoire avant la décision — automatique). ### Gel Conscience - Swap **net-négatif (−2)** du site de stockage dans `__init__.py` : 2682 → 2680, **cliquet abaissé** dans `test_consciousness_freeze.py` ; - `engine.py` intouché (1362) ; tick délégué via `self_model.tick()` (seam établi, pattern valence/rumination/self_fidelity) ; - Toute la logique dans `cognition/belief_selection.py` (hors gel). ### Expo & coût - `GET /api/plugins/consciousness/belief-selection` + clé `belief_selection` dans `/status` (« 3 chiffres » : ouverts/tranchés/expirés, survie par type, délai moyen) — pas d'UI dans ce lot (zéro dette i18n) ; - +1 appel background par consolidation (les K d'un coup) ; résolution/décision au tick = no-LLM. ### Tests 23 tests dédiés (`test_belief_selection.py`) : parsing strict, passthrough fail-closed ×4, élagage, résolution déterministe, VOID, marge ε → égalité → falsifiabilité, expiration sans gagnant, idempotence, trace, summary. Suites conscience 137 verts + cliquet ; 816 backend local (échecs restants = Postgres absent en local, couverts par la CI). Plugin conscience **4.34.0**. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
À chaque consolidation, belief_selection ouvre un CONCOURS au lieu de
stocker l'insight directement : K=3 formulations concurrentes ({large,
étroite, contre-prudente}, 1 appel background, double filet), paris
falsifiables sur une ardoise commune de FLUX INTERNES mesurés
(calibration, Brier des sims, cohérence, top_need, valence, goals),
résolution déterministe à échéance (jours), survivante au meilleur
Brier consolidée, le reste élagué avec trace. Empêche l'enjolivement
en AMONT (self_fidelity le corrige en aval).

Durcissements pré-enregistrés (leçons campagne RWKV 07-13) :
- marge ε=0.05 figée AVANT tout concours : écart < ε = égalité →
  falsifiabilité tranche (paris engagés), victoire « provisoire » ;
- trace enrichie (n de paris résolus + marge) → re-jugement v1 possible ;
- fail-closed → passthrough : payload invalide / cap / désactivé =
  stockage direct identique à l'ancien comportement.

Règles dures spec : hypothèse sans ≥2 paris engagés élaguée d'office ;
fenêtre expirée sans résolution suffisante = AUCUNE consolidation (pas
de gagnant par défaut) ; croyance en instance hors prompt (rien stocké
avant décision).

Gel respecté : swap NET-NÉGATIF (−2) du site de stockage dans
__init__.py (2682→2680, cliquet abaissé), tick délégué via
self_model.tick() (seam établi), toute la logique dans cognition/.
Expo : GET /belief-selection + clé status. Plugin conscience 4.34.0.
23 tests dédiés, 137 tests conscience verts, 816 backend local.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
kevin merged commit 8304ecf1c1 into main 2026-07-14 09:58:30 +00:00
kevin deleted branch feat/conscience-selection-competitive 2026-07-14 09:58:31 +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!17
No description provided.