runbook: phases 3-4-5-6 completees (scope coding, git sync, agents dynamiques, bootstraps)

This commit is contained in:
2026-07-30 08:45:38 +00:00
parent 5f5de0e119
commit f613d7e738
@@ -58,3 +58,61 @@ GEMINI autorise sur son propre scope `llm` (non-regression), CLAUDE autorise sur
toujours fonctionnel), verification directe DB qu'aucune ecriture usurpee n'a atterri dans `tt`. Les 5 toujours fonctionnel), verification directe DB qu'aucune ecriture usurpee n'a atterri dans `tt`. Les 5
passent. Le endpoint MCP de context-hub est maintenant reellement fonctionnel et securise -- pas juste passent. Le endpoint MCP de context-hub est maintenant reellement fonctionnel et securise -- pas juste
"corrige sur le papier". "corrige sur le papier".
## Phases 3-4-5-6 (30/07/2026, meme session) : scope coding, Markdown+Git, agents dynamiques, bootstraps
**Phase 3** : scope `coding` ajoute (CLAUDE, GEMINI, NABIL -- pas les Hermes, agents
d'exploitation pas de dev). Tools MCP `record_lesson` (ecrit une entree typee) et
`get_context_pack` (charge selectif, filtrable par `project`). Teste : ecriture
CLAUDE et GEMINI, refus HERMES_TT (pas le scope), filtrage par projet.
**Phase 4** : `app/git_sync.py` -- projection Markdown de `memory_entries` vers
`docs/context-memory/{scope}.md`, commit Gitea automatique (httpx, deja
dependance transitive de `mcp`) a chaque `record_lesson`. SQLite reste seul
lu par l'API (jamais le .md) ; le fichier n'est qu'une projection versionnee,
lisible et diffable. Teste : contenu genere verifie directement sur Gitea.
**Piege trouve en cours de route** : `.env` sur disque avait un `GITEA_TOKEN`
different de celui charge dans l'environnement du container (docker restart
ne relit pas `env_file`, seul un recreate le ferait -- bloque par les droits
root:600 sur `.env` pour Best0f). Les deux tokens restent valides actuellement
(verifie via `/api/v1/user`), donc pas bloquant aujourd'hui, mais si l'un est
revoque un jour sans recreate du container, le token vivant devient invalide
silencieusement. A surveiller lors d'une prochaine rotation.
**Phase 5** : table `agents` (agent_name, agent_type, scopes JSON, repo_url),
remplace `AGENT_SCOPES` code en dur. `has_scope_access`/`get_allowed_scopes`
(`app/scopes.py`) restent volontairement synchrones -- lecture sqlite3 directe
(pas aiosqlite) pour ne toucher aucun des 13 points d'appel existants dans
`api.py`/`mcp.py`. Seed initial en upsert (migration depuis l'ancien dict).
Teste : non-regression CLAUDE/GEMINI sur `tt`, **nouvel agent ajoute par simple
insertion SQL, sans redemarrage ni redeploiement, operationnel immediatement**
(objectif central de la migration : brancher un futur repo/IA = une ligne DB +
une cle API + un bootstrap, zero modification de code).
**Piege trouve** : ecriture directe (`cat >`, `open().write()`) refusee sur
`app/seed.py` en particulier (Permission denied) alors que les autres fichiers
du meme dossier s'ecrivent normalement en root -- delete+recreate fonctionne
(`rm` puis nouveau fichier), pas de cause identifiee avec certitude (ACL
Synology au-dela des permissions POSIX affichees par `ls -la` suspectee).
Pattern a retenir : si `str_replace`/`cat >` echoue en Permission denied sur un
fichier NAS specifique alors que le dossier est normalement inscriptible,
essayer `rm` + recreation plutot que de s'acharner sur la modification en place.
**Phase 6** : `AGENTS.md` (Gemini/Antigravity) mis a jour -- scope `coding`
ajoute au perimetre autorise, section 10 ajoutee expliquant la connexion MCP
(`https://context.bolbol.tn/mcp`) et les deux tools `record_lesson`/
`get_context_pack` (le scope coding n'a pas d'equivalent REST `/api/rules/`,
MCP uniquement). `CLAUDE.md` cree en miroir pour Claude Code, avec en plus
le protocole Git complet, la regle docker restart-vs-rebuild, et le principe
de fonctionnement acte avec Nabil (agir sans redemander a chaque action
courante). Cle API verifiee coherente avec la base avant modification.
**Etat final** : toute la batterie de tests (securite, phase3, phase4, phase5)
rejouee en sequence apres le dernier restart -- tout passe. Donnees de test
nettoyees, `docs/context-memory/coding.md` regenere vide. Migration context-hub
consideree complete pour cette iteration ; reste ouvert : endpoints REST pour
memory_entries (non fait, MCP suffit pour l'instant), connexion MCP reelle
d'Antigravity a valider cote client (le serveur est pret et teste, jamais
teste depuis Antigravity lui-meme plutot que le SDK Python).