OpenComb - chantier contextes et mémoires

L'horizon

Le proche est net, le lointain s'estompe. Chaque abeille regarde son passé comme un paysage.

Spec du 2026-07-12 - commit 911259d - tag de retour AVANT_CONTEXTE - en relecture par l'apicultrice

Le voyage d'un échange

Deux journaux : l'intégral, sacré, et l'horizon, la vue de travail que le moteur injecte dans le prompt. Rien n'est jamais réécrit dans l'intégral ; l'horizon n'est qu'une couche de lecture.

Journal intégral window/mia-messages.jsonl

jamais résumé, jamais réécrit
Chaque échange y entre entier et y reste. Rotation d'archive à 500 entrées (déplace, ne détruit pas). C'est la source de vérité : l'horizon peut toujours être reconstruit depuis lui.
chaque écriture est copiée en zone nette
Zone nette
Les échanges récents, intégraux. Garde toujours au moins le dernier échange, même s'il déborde seul le budget.
12 000 car.
budget_net
déborde (budget ou âge > 24 h) -> éviction : le condensé LLM est fabriqué à ce moment
Zone condensée
Chaque échange évincé, condensé par LLM en 2 à 4 phrases factuelles. Reste adressable : date, type, outil. La question reste intégrale.
6 000 car.
budget_condense
déborde -> fondu par fournée : un seul appel LLM roulant
Le récit de soi
Résumé roulant structuré (gabarit strict : mission, décisions, fichiers, erreurs, paroles de l'apicultrice, travail en cours, prochaine étape). Rien ne sort de la vue : le passé lointain vit fondu ici.
3 000 car.
budget_recit
lecture sous budget, coupe dure au point d'injection

Le prompt du cycle

garantie dure
Récit d'abord, puis condensés, puis nets (ordre chronologique), avec la mention déclarée : « [horizon : le passé plus ancien est condensé ci-dessus ; l'historique intégral vit au journal] ». L'abeille sait qu'il lui manque du volume et où il vit - elle n'invente pas.

Le budget, la seule vraie monnaie

Fini le « 3 entrées peu importe leur taille » : chaque zone a un plafond en caractères, réglable par ruche et par abeille.

Ce qui compte dans le budget : les caractères effectivement injectés - question + réponse + enrobage de rendu. Une consigne très longue consomme du budget, elle ne le contourne pas. Même définition partout : zones, coupe dure, critères.
net 12 000
condensé 6 000
récit 3 000
contexte mémoire maximal injecté par cycle : 21 000 caractères
12 000
6 000
3 000

Essaie les profils : c'est exactement ce que la cascade de config permet de régler, à chaud, sans rebuild.

La coupe dure : l'ordre de sacrifice

Si l'horizon est en retard d'entretien, le moteur coupe au budget à l'injection. On sacrifie du moins précieux au plus précieux :

  1. Les condensés non-phares, du plus ancien au plus récent
  2. Le récit de soi, sauf sa section « Paroles de l'apicultrice »
  3. Les échanges nets non-phares, du plus ancien au plus récent
  4. En tout dernier : les phares et tes paroles

Les phares

Un phare se voit de loin, malgré la brume. Tout échange où tu parles à l'abeille (type « conversation ») est phare d'office ; tu peux aussi flaguer n'importe quelle entrée à la main (persistant, survit à tout). Ta question reste intégrale à travers TOUTES les zones - seule la réponse s'estompe.

en zone nette
« mia, compose la page fromagerie » - réponse complète de mia : le template entier, 84 000 caractères
en zone condensée
« mia, compose la page fromagerie » - condensé : a composé template-fromagerie.html (84 ko) dans honey/, style ardoise et lin, le 2026-07-10
dans le récit
« mia, compose la page fromagerie » - recopiée telle quelle dans la section « Paroles de l'apicultrice » du récit de soi

Deux cascades

Qui résume, et qui règle : toujours du plus spécifique au filet de sécurité.

Le résumeur

  • Modèle dédié configuré - ex. ollama/qwen3, respecte les interrupteurs
  • fermé ou en erreur ↓
  • Le modèle de l'abeille elle-même - défaut
  • fermé ou en erreur ↓
  • Troncature déterministe - fonctionne TOUJOURS, même tout fermé, zéro LLM

Les réglages

  • config.json - défauts globaux
  • surchargé par ↓
  • {ruche}/horizon.toml - par ruche
  • surchargé par ↓
  • bees/{nom}.toml [horizon] - par abeille
[horizon]
actif = false    # interrupteur !
budget_net = 12000
budget_condense = 6000
budget_recit = 3000
age_net_heures = 24
resumeur = "abeille"
phares = ["apicultrice"]
plancher_phare = "condense"

Les sept garanties