test(kb): couvre le chantier B-full (B3) livré sans test — caviardage + isolation groupe + modération #25
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "test/kb-b3-coverage"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Le chantier KB entreprise B-full (scope group, modération curateur, caviardage secrets-only) a été livré v5.76→5.79 mais JAMAIS testé (ni unitaire ni runtime). Ces tests verrouillent ses invariants de sécurité — le socle de l'offre multi-tenant souveraine. 1. test_kb_group_caviardage (10, purs) — le contrat B3c : - scope group = sanitize_secrets_only : masque TOUS les motifs de secret (clé=valeur, Bearer, FERNET, hex 64+, password) mais GARDE les PII (email/tél/IP/chemin = infos client, matière d'équipe) ; - scope collective = sanitize_for_collective : masque secrets ET PII ; - contraste prouvé en une assertion (même entrée → secret mort dans les deux, PII vivante en group / morte en collective). 2. test_kb_group_isolation (3, Postgres) — le REMPART, testé sur le VRAI _vector_search avec un store HOSTILE qui fuit tous les chunk_ids toutes collections confondues : la sécurité vient donc uniquement du filtre SQL d'hydratation. Prouve qu'un non-membre ne récupère jamais un chunk d'un groupe où il n'est pas, que le privé d'autrui reste invisible, et que la porte de modération (pending_review) cache un doc de groupe jusqu'à approbation — même pour un membre. 3. test_kb_retrieval_fusion étendu — isolation au niveau du VECTOR STORE : chaque groupe a sa collection (kb_chunks_group_<gid>), distincte des autres groupes / du privé / du collectif ; group sans group_id retombe sur le privé (jamais de collection groupe fourre-tout). Tests only, zéro changement runtime. Les 3 DB s'exécutent en CI (service Postgres), skip propre sans DATABASE_URL. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>