Audit — pilier app-shell
Dixieme tour de la rotation (docs/team/roster.md, @codebase-auditor). Lecture seule sur le code. Ce tour differe des six precedents : les six piliers restants ont ete audites en une passe, a la demande. La profondeur…
Dixieme tour de la rotation (
docs/team/roster.md, @codebase-auditor).Lecture seule sur le code. Ce tour differe des six precedents : les six piliers restants ont ete audites en une passe, a la demande. La profondeur par pilier est donc moindre, et chaque document dit ou il s'arrete. La sonde commune est la meme partout : les invariants que le roster declare pour le pilier, parce que six tours ont montre que c'est la que l'ecart se loge.
Perimetre :
src/app/(dashboard)/**hors sous-arbres revendiques par d'autres piliers,src/services/organizations/**, routes organizations / account / admin / me.Etat du depot :
origin/maina3e23edb7, 27 aout 2026.
Ce qui a ete verifie
| Sonde | Resultat |
|---|---|
Invariant — /api/me : select explicites, jamais include: true | respecte |
include: true dans /api/me | 0 — la seule occurrence est le commentaire qui l'interdit |
select explicites | 6 |
| Rattrapage du drift schema (P2021/P2022) | present, 3 references |
TTL du cache /api/me | 30 s |
Aucun constat, et c'est le resultat
Le roster declare :
«
/api/meest un chemin chaud :selectexplicites uniquement, jamaisinclude: true, pour ne pas coupler la route aux colonnes futures. »
L'invariant tient. Et la raison est ecrite dans le fichier, avec l'incident qui l'a produite :
« A bare include selects every column of the model, so a schema-only deploy whose DB sync lagged turns into "column X does not exist" and the WHOLE org list 500s (that's precisely how
subscription: true+ the unsyncedSubscription.canceledAtcolumn blanked every dashboard on June 10 2026). […] add a field here only once a deploy has shipped it and the UI actually reads it. »
C'est le meilleur commentaire rencontre de toute la rotation : il ne dit pas seulement la regle, il dit la panne qui l'a fait naitre, avec sa date, et il donne la conduite a tenir pour l'avenir. Un lecteur pressé n'a pas besoin de croire la regle sur parole.
Je n'ouvre pas d'item.
Releve, sans item
- Le piege du commentaire, encore. Ma sonde
grep "include: true"remonte une ligne : la ligne 124, qui est le commentaire interdisantinclude: true. C'est la deuxieme fois de la session qu'une prose enoncant une propriete de securite se lit comme sa violation (la premiere :--accept-data-lossdans le script de build). Verifie a la main avant publication.
Ce que cet audit n'a pas couvert
Le pilier est vaste et je n'ai sonde qu'un fichier :
- Tout
(dashboard)/hors/api/me, organisations, membres, RBAC, compte, admin, onboarding : non ouverts. services/organizations/— non ouvert.- Le panneau admin — non ouvert. C'est pourtant la surface la plus privilegiee du produit.
- Le cache
/api/me— son TTL de 30 s a ete lu, pas exerce. Le defaut connu (data-platform/0047: le cache d'un membre retire n'est jamais invalide) reste ouvert et n'a pas ete revalide ici.
Un auditeur qui ne borne pas sa portee laisse croire qu'il a tout vu.