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 :
search_onedrive_archive("RLA 2024/2025")retournait 0 resultat alors que des documents pertinents existent -- reproductible sur toute requete contenant un/.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.PROMPT_TEXT/PROMPT_VISIONdenyora-convert-apisans 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 buildsur 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 viaps aux | grep 'compose build'plutot que d'interrompre. - Verifier aussi
search_mail_memorysi 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-apininyora-notes-ttn'etaient sur Gitea avant cette session (violation de la regle "tout repo va sur Gitea bolbol") -- bootstrap fait le 05/08/2026, voirbolbol/nyora-convert-apietbolbol/nyora-notes-tt. Attention : ne jamais pousser*.db/*.db-wal/*.db-shm(base live) ni.env(secrets) --.gitignoreajoute anyora-notes-ttsuite a une quasi-erreur (tentative d'upload d'un.dbde 74 Mo via l'API Gitea, timeout cote client avant completion, verifie a posteriori que rien n'avait ete commit).
References
- Bug FTS5 slash : SQLite FTS5 query syntax -- https://www.sqlite.org/fts5.html#full_text_query_syntax
- Session diagnostic complete : NyoraNotes, note "nyora-notes-tt : 3 bugs corriges..." (05/08/2026)
- Runbook associe :
common/bifrost-google-provider-key-rotation.md