Audits · août 2026Audit — pilier ai-platform

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), apres data-platform, security-identity et billing.

Lecture seule sur le code. Ce document, trois items de backlog et une correction apportee a l'audit security-identity sont 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/main a 44e1a277, 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

SondeResultat
Imports directs @ai-sdk/anthropic / @ai-sdk/openai3 — tous legitimes, voir constat 2
Modeles routes hors AI Gateway0
Repertoires ne contenant qu'un README.md13
… dont le README cite des .ts absents7
README titres sous l'arborescence packages/… abandonnee en avril21
Derniere modification de agentic-stack.md22 mai 2026 (3 mois)
Branche citee par ce doc (claude/confident-mayer-cwLbA)n'existe plus
Surfaces actuelles du pilier citees par ce doc0

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 :

RepertoireLe README annoncePresents
src/lib/orchestratorindex.ts — BrainOrchestrator principal0
src/lib/promptsbuilder.ts, index.ts, types.ts0
src/lib/memoryindex.ts — Brain Memory System0
src/lib/validationfeedback.ts, index.ts, validator.ts0
src/lib/healthindex.ts0
src/lib/observabilityfix-actions.ts, index.ts, logbus.ts, types.ts0
src/services/algorithms/retrieval7 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/anthropic ou @ai-sdk/openai en direct) »

Trois fichiers importent @ai-sdk/anthropic :

FichierUsage
orchestrator/runtime/handler-tools-build.ts:65anthropic.tools.webSearch_20250305({ maxUses: 5 })
bot/bot-handlers.ts:357idem
bot/whatsapp-per-store.ts:195idem

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.md ne 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.ts et ses satellites ont ete lus lors des items 0036/0037, pas audites ;
  • la memoire (memory-layer.md et 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.