Files
nas-runbooks/hermes-tt/nyora-notes-tt-3-bugs-05-08-2026.md

5.1 KiB

nyora-notes-tt / nyora-convert-api -- 3 bugs decouverts en diagnostic (05/08/2026)

Instance auteur : hermes-tt (diagnostic Claude, session nyora-notes-tt) Date : 2026-08-05 Tags : nyora-notes-tt, nyora-convert-api, fts5, sqlite, bifrost, mimo Statut : valide


Probleme

Trois bugs distincts decouverts lors de la reprise du chantier RAG OneDrive :

  1. search_onedrive_archive("RLA 2024/2025") retournait 0 resultat alors que des documents pertinents existent -- reproductible sur toute requete contenant un /.
  2. nyora-convert-api : reponses Bifrost de forme inattendue (~1-2% des appels) faisaient crasher la conversion d'un document au lieu de beneficier des retries deja en place.
  3. PROMPT_TEXT/PROMPT_VISION de nyora-convert-api sans accents depuis leur creation (04/08), n'ayant jamais recu le traitement LANGUE applique aux SOUL.md Hermes le 19/07.

Contexte et contraintes

onedrive_documents/onedrive_fts (SQLite FTS5) + onedrive_vec (sqlite-vec) pour la recherche hybride. Les references AO tunisiennes et les dates contiennent systematiquement des / (AO 19/2026, JJ/MM/AAAA). nyora-convert-api et nyora-notes-tt sont buildes depuis leur Dockerfile local (build: .), pas d'image pre-construite -- toute modif source exige un rebuild + recreate du container pour prendre effet.


Ce qui NE fonctionne PAS

Tentative Erreur obtenue Raison de l'echec
Requete FTS5 brute avec mots separes par espace fts5: syntax error near "/" Le parseur de requete FTS5 interprete / comme un token invalide hors phrase citee
Compter sur le repli LIKE en cas d'echec FTS/vecteur 0 resultat quand meme Le repli utilise la chaine litterale (avec le /), qui ne matche pas non plus
_call_bifrost catchant seulement HTTPStatusError/TimeoutException KeyError('content') non catche, document en echec direct Une reponse 200 de forme inattendue n'est pas une erreur HTTP -- resp.json()["choices"][0]["message"]["content"] explose sans passer par la logique de retry

Solution validee

Bug FTS5 (mcp_server.py, search_onedrive_archive ET search_mail_memory -- meme bug present aux 2 endroits) : chaque terme de la requete est cite comme phrase FTS5 litterale au lieu d'etre passe en bareword.

# avant
clean_q = " ".join([w for w in query.replace('"', ' ').replace("'", ' ').split() if len(w) > 1])

# apres
clean_q = " ".join(
    '"' + w.replace('"', '""') + '"'
    for w in query.replace('"', ' ').replace("'", ' ').split()
    if len(w) > 1
)

Bug KeyError Mimo (converter.py, _call_bifrost) : ajout des exceptions manquantes, converties en ConversionError pour beneficier de la boucle de retry existante (2 tentatives) :

except (KeyError, IndexError) as e:
    raise ConversionError(f"erreur interne : reponse Bifrost de forme inattendue ({type(e).__name__}: {e})")
except json.JSONDecodeError as e:
    raise ConversionError(f"erreur interne : reponse Bifrost non-JSON ({e})")

Bug accents : PROMPT_TEXT/PROMPT_VISION reaccentues + ajout du bloc ## LANGUE — RÈGLE ABSOLUE (copie identique de hermes-agent-tt:/opt/data/SOUL.md).

Deploiement (les deux services sont build: ., pas d'image prete) :

cd /volume1/docker/nyora-convert-api && docker compose build && docker compose up -d
cd /volume1/docker/nyora-notes-tt && docker compose build && docker compose up -d

Verification

import sys; sys.path.insert(0, '/app')
import mcp_server as m
r = m.search_onedrive_archive('RLA 2024/2025', limit=3)
print(r['count'])  # attendu : > 0 (etait 0 avant fix)

Pieges specifiques DSM / NAS

  • Le build docker compose build sur ce NAS (DS920+, charge memoire elevee observee : ~19,4 Go utilises sur 20 Go au moment du diagnostic) peut prendre plusieurs minutes (build-essential/gcc pour compiler les dependances natives) -- ne pas juger un build "bloque" avant 5-8 min, verifier via ps aux | grep 'compose build' plutot que d'interrompre.
  • Verifier aussi search_mail_memory si ce runbook est applique ailleurs : meme pattern de nettoyage de requete, meme bug latent, corrige en meme temps ici mais a chercher systematiquement dans tout code FTS5 similaire (ex. nyora-veille).
  • Ni nyora-convert-api ni nyora-notes-tt n'etaient sur Gitea avant cette session (violation de la regle "tout repo va sur Gitea bolbol") -- bootstrap fait le 05/08/2026, voir bolbol/nyora-convert-api et bolbol/nyora-notes-tt. Attention : ne jamais pousser *.db/*.db-wal/*.db-shm (base live) ni .env (secrets) -- .gitignore ajoute a nyora-notes-tt suite a une quasi-erreur (tentative d'upload d'un .db de 74 Mo via l'API Gitea, timeout cote client avant completion, verifie a posteriori que rien n'avait ete commit).

References