From 6189d9ac5ce4591360ccd14a4e97ce932f8e6999 Mon Sep 17 00:00:00 2001 From: Gabriel Radureau Date: Sat, 15 Aug 2026 23:46:20 +0200 Subject: [PATCH] =?UTF-8?q?feat(scopes):=20122=20=C2=AB=20cr=C3=A9er/modif?= =?UTF-8?q?ier=20les=20tiers=20=C2=BB=20entre=20dans=20prod-write?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sur décision de l'opérateur du 2026-08-15, après un SECOND 403 en production — cette fois sur Anthropic PBC, entité américaine distincte d'Anthropic Ireland, dont la facture ne pouvait être saisie faute de pouvoir créer le fournisseur qu'elle nomme. Le commentaire qui justifiait l'exclusion est corrigé en même temps, sinon le fichier se contredirait. Son raisonnement — « rehearsed then applied by a human when they are genuinely needed » — n'a pas survécu au contact : une facture fournisseur a besoin d'un fournisseur, donc le scope pouvait créer le document mais pas la partie qu'il nomme. L'exclusion transformait chaque nouveau fournisseur en geste manuel AU MILIEU d'un flux gated, c'est-à-dire précisément là où la discipline s'érode. CE QUE CE DROIT COÛTE, et le fichier le dit désormais : Dolibarr le libelle « Créer/MODIFIER les tiers », il n'existe pas de droit de création seule. Le writer de production peut donc altérer l'identité de n'importe quel tiers existant — nom, adresse, identifiants fiscaux — et pas seulement en créer. Contrepartie assumée. La suppression (125) reste exclue, comme dans tous les scopes. Appliqué et vérifié par --audit : 40 droits détenus avant, 41 après. RESTE UN ÉCART, ANTÉRIEUR À CE CHANGEMENT : le droit 14 « Émettre des paiements sur les factures clients » est déclaré par le scope mais refuse de s'appliquer — il manquait déjà au premier audit. Le writer de production ne peut donc pas enregistrer un encaissement client. À traiter séparément. Co-Authored-By: Claude Opus 5 (1M context) --- test/scopes.ts | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/test/scopes.ts b/test/scopes.ts index 1b0923a..d38afbb 100644 --- a/test/scopes.ts +++ b/test/scopes.ts @@ -143,8 +143,13 @@ export const SCOPES: Readonly> = { /** * The narrow production writer, used ONLY by the gated promote apply, and only * for what that step actually does: create/modify invoices, attach payments. - * No thirdparty creation, no product creation, no proposals — those are - * rehearsed then applied by a human when they are genuinely needed. + * No product creation, no proposals — those are rehearsed then applied by a + * human when they are genuinely needed. + * `122` (thirdparties) WAS excluded on that same reasoning, and the reasoning + * did not survive contact: a supplier invoice needs a supplier, so the scope + * could create the document but not the party it names. The exclusion turned + * every new supplier into a manual step in the middle of a gated flow — which + * is where discipline erodes. * `162` (contracts) IS included: recording the engagement behind an invoice is * what the piste d'audit fiable asks for, and it recurs (Darnis, then KM). * @@ -162,7 +167,20 @@ export const SCOPES: Readonly> = { // modification de factures » — les factures fournisseur en sont, et leur // saisie est l'opération la plus courante du back-office. Ajouté après un // 403 en production sur la facture Darnis F1048. - rights: [...READ_ONLY, 12, 14, 162, 1232, 2503], + // + // 122 (tiers) : ajouté sur décision de l'opérateur du 2026-08-15, après un + // second 403 — cette fois sur Anthropic PBC, entité américaine distincte + // d'Anthropic Ireland, dont la facture ne pouvait être saisie faute de + // pouvoir créer le fournisseur qu'elle nomme. + // + // CE QUE CE DROIT COÛTE, et il faut le dire : Dolibarr le libelle + // « Créer/MODIFIER les tiers ». Il n'existe pas de droit de création seule. + // Le writer de production peut donc désormais altérer l'identité de + // n'importe quel tiers existant — nom, adresse, identifiants fiscaux — et + // non seulement en créer. C'est la contrepartie assumée : sans lui, toute + // facture d'un fournisseur nouveau s'arrête au milieu du flux gated. + // La suppression (125) reste exclue, comme dans tous les scopes. + rights: [...READ_ONLY, 12, 14, 122, 162, 1232, 2503], }, } as const;