Audit — pilier ai-platform
Quatrieme tour de la rotation (docs/team/roster.md, @codebase-auditor), apres data-platform, security-identity et billing. Lecture seule sur le code. Ce document, trois items de backlog et une correction apportee a…
Quatrieme tour de la rotation (
docs/team/roster.md, @codebase-auditor), apresdata-platform,security-identityetbilling.Lecture seule sur le code. Ce document, trois items de backlog et une correction apportee a l'audit
security-identitysont la sortie complete.Perimetre :
src/features/ai|sidekick/**,src/lib/orchestrator|prompts|memory|workflows|sops/**,src/services/agents|agent-autonomy|agent-ledger|ai-models/**,src/app/api/chat|agents|workflow|sidekick|tasks/**,docs/architecture/agentic-stack.md,docs/architecture/memory-layer.md.Etat du depot :
origin/maina44e1a277, 25 aout 2026.Le plus gros pilier du depot : 399 fichiers, ~75 700 lignes pour
src/features/ai/seul. Cet audit n'en a lu qu'une fraction, et dit laquelle a la fin.
Ce qui a ete verifie
| Sonde | Resultat |
|---|---|
Imports directs @ai-sdk/anthropic / @ai-sdk/openai | 3 — tous legitimes, voir constat 2 |
| Modeles routes hors AI Gateway | 0 |
Repertoires ne contenant qu'un README.md | 13 |
… dont le README cite des .ts absents | 7 |
README titres sous l'arborescence packages/… abandonnee en avril | 21 |
Derniere modification de agentic-stack.md | 22 mai 2026 (3 mois) |
Branche citee par ce doc (claude/confident-mayer-cwLbA) | n'existe plus |
| Surfaces actuelles du pilier citees par ce doc | 0 |
Constat 1 — treize repertoires ne contiennent qu'un README, et sept documentent des fichiers absents
Severite : moyenne. → backlog/ai-platform/0056
Treize repertoires de src/ ne contiennent qu'un README.md. Sept de ces
README citent nommement des fichiers .ts qui n'existent pas :
| Repertoire | Le README annonce | Presents |
|---|---|---|
src/lib/orchestrator | index.ts — BrainOrchestrator principal | 0 |
src/lib/prompts | builder.ts, index.ts, types.ts | 0 |
src/lib/memory | index.ts — Brain Memory System | 0 |
src/lib/validation | feedback.ts, index.ts, validator.ts | 0 |
src/lib/health | index.ts | 0 |
src/lib/observability | fix-actions.ts, index.ts, logbus.ts, types.ts | 0 |
src/services/algorithms/retrieval | 7 fichiers (chunker.ts, embedder.ts, retriever.ts…) | 0 |
src/lib/orchestrator/README.md commence litteralement par
// ... existing code ..., un artefact d'edition assistee laisse en place.
Et 21 README portent encore un titre de la forme # packages/core/src/…,
# packages/ai/src/…, # packages/ui/src/…, l'arborescence monorepo que
CLAUDE.md declare abandonnee : « Repository plat (depuis avril 2026),
tout le code applicatif vit dans src/ au root ».
Deux de ces repertoires sont deliberes et le disent :
src/lib/intelligence (« frontiere reservee, pas un module ») et
src/lib/collaboration. Ceux-la ne sont pas le probleme : ils sont la
preuve qu'un placeholder assume se distingue d'un vestige, quand on prend
la peine de l'ecrire.
La preuve que ce n'est pas cosmetique
Cet audit-ci a fait trebucher l'audit precedent.
Le tour security-identity, quelques heures plus tot, a conclu que
src/lib/validation/** « contient zero fichier » et a ouvert
backlog/security-identity/0053 sur cette base. C'est faux : le
repertoire existe et contient un README, qui documente trois fichiers
absents.
La sonde ne mentait pas, elle comptait les .ts. Le README a suffi a faire
exister le repertoire pour un outil et pas pour l'autre. Un contributeur qui
ouvre src/lib/orchestrator/README.md lit qu'un BrainOrchestrator y vit ;
un agent qui le lit le croira aussi.
La correction de l'audit security-identity et de son item 0053 fait partie
de cette livraison.
Constat 2 — la regle « AI Gateway uniquement » est ecrite en absolu et a une exception structurelle
Severite : faible. → backlog/ai-platform/0057
docs/team/roster.md, section @ai-platform-engineer :
« Routage AI Gateway uniquement (jamais
@ai-sdk/anthropicou@ai-sdk/openaien direct) »
Trois fichiers importent @ai-sdk/anthropic :
| Fichier | Usage |
|---|---|
orchestrator/runtime/handler-tools-build.ts:65 | anthropic.tools.webSearch_20250305({ maxUses: 5 }) |
bot/bot-handlers.ts:357 | idem |
bot/whatsapp-per-store.ts:195 | idem |
Les trois sont corrects. Aucun ne route un modele : les trois fichiers
declarent MODEL_ID = "anthropic/claude-sonnet-4.6" et
gatewayProvider: "anthropic", le modele passe bien par le Gateway. Ce que
l'import direct fournit est un provider-defined tool, que la chaine de
modele du Gateway ne sait pas exprimer.
Zero modele route hors Gateway. La regle est respectee ; c'est son enonce qui est trop absolu.
Le cout est reel quoique petit : trois violations apparentes qu'un relecteur, une garde automatique ou un agent appliquant la regle a la lettre signalerait a tort. Une regle qui produit des faux positifs cesse d'etre lue.
Constat 3 — le doc du pilier est un instantane de plan vieux de trois mois
Severite : moyenne. → backlog/ai-platform/0058
docs/architecture/agentic-stack.md est, avec memory-layer.md, la
documentation que le roster attribue a ce pilier. Elle n'a pas ete touchee
depuis le 22 mai 2026.
Ce qu'elle contient :
- une section « ✅ Deja livre dans ce repo (4 commits sur
claude/confident-mayer-cwLbA) », cette branche n'existe plus ; - trois sections « 🟡 A faire » adressees a ce repo, au repo Theme Copilot et aux ops ;
- une vue « les 3 projets de l'ecosysteme ».
Ce qu'elle ne contient pas : aucune mention des skills, de
creative-ads, de saveStudioAsset, de saveCreativeConcept, du registre
d'outils, de la matrice de permissions. Verifie — zero occurrence.
Le pilier fait 399 fichiers et ~75 700 lignes. Sa doc de reference decrit un plan de mai contre une branche supprimee.
Ce n'est pas un document faux : c'etait vrai le 22 mai. C'est un document qui ne dit pas ce qu'il est. Un lecteur y cherche l'architecture et y trouve un plan ; les « 🟡 A faire » se lisent comme du travail en attente alors que personne ne sait s'ils ont ete faits.
Releve, sans item
src/lib/sops/README.mdne cite aucun fichier, donc il echappe au constat 1 au sens strict : mais il documente un concept (« Standard Operating Procedures ») dont l'implementation reelle vit ailleurs (features/ai/skills/). Meme famille, degre moindre ; a traiter avec l'item 0056 si son auteur veut elargir.
Ce que cet audit n'a pas couvert
A dire franchement, car la disproportion est grande : ~75 700 lignes dans le perimetre, une fraction lue.
- le runtime de chat lui-meme :
handler.tset ses satellites ont ete lus lors des items 0036/0037, pas audites ; - la memoire (
memory-layer.mdet son implementation) : non ouverte ; - le routeur de skills, la selection d'intention, le budget par tour : non exerces ;
- la matrice de permissions d'outils : verifiee sur deux entrees lors d'un item precedent, pas dans son ensemble ;
- le cout par tour, que la DoD du pilier exige de ne pas laisser regresser : aucune mesure n'existe pour le dire, ni ici ni ailleurs.
Ce dernier point meriterait probablement un item a lui seul. Je ne l'ouvre pas : je n'ai pas verifie s'il existe une mesure ailleurs dans le depot, et ouvrir un item sur une absence non verifiee serait exactement le defaut que le constat 1 documente.
Prochain pilier de la rotation : integrations. Motif : un item 0008
y dort depuis le 19 aout avec une PR (#510) et une branche deja renseignees,
ce qui en fait le seul pilier dont le backlog porte un travail commence et
non termine.