From e175f1fead07a30c8cb0eb2741f3dfdd43c8b018 Mon Sep 17 00:00:00 2001 From: Gabriel Radureau Date: Fri, 14 Aug 2026 19:32:17 +0200 Subject: [PATCH] =?UTF-8?q?fix(test):=20garde=20d'h=C3=B4te=20sur=20main.t?= =?UTF-8?q?s=20=E2=80=94=20le=20script=20qui=20pilote=20l'installeur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit main.ts pilote l'ASSISTANT D'INSTALLATION de Dolibarr (initialSetup.ts va sur /install/). C'est le script le plus destructeur du dépôt, et il était le seul des scripts UI à n'avoir aucune garde d'hôte — alors que la docstring de guard.ts nomme précisément le danger : « test/.env ships DOLIBARR_ADDRESS pointing at PRODUCTION, so a script run with the ambient environment would drive the real ERP ». Pointé sur la production avec l'environnement ambiant, il relançait l'installeur sur l'ERP réel. assertSandbox() n'autorise désormais que le bac à sable, sauf double opt-in explicite (ARCO_ALLOW_PRODUCTION + ARCO_PROD_CONFIRM) — que l'installation initiale d'un nouvel environnement justifie, et qui reste un geste d'opérateur. Vérifié : DOLIBARR_ADDRESS=https://erp.arcodange.lab est refusé. Ceci clôt le mode vierge, qui n'avait rien à inventer. La chaîne existait déjà en entier : sandbox-lifecycle.sh blank --yes purge la base, retire install.lock test/main.ts pilote l'installeur, société, affichage, modules touch install.lock reverrouille (procédure du README) test/provisionSandbox.ts agent d'écriture, droits, clé API Le « golden empty » proposé au commit précédent était une invention pour un problème résolu : je n'avais pas regardé test/. C'est exactement le contrôle inscrit dans AGENTS.md le matin même — lire l'existant avant de modéliser. Co-Authored-By: Claude Opus 5 (1M context) --- test/main.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/test/main.ts b/test/main.ts index 5149f84..a745c3f 100644 --- a/test/main.ts +++ b/test/main.ts @@ -2,6 +2,7 @@ import "load_dotenv"; import { chromium } from "playwright"; import initialSetup from "./scripts/admin/initialSetup.ts"; import login from "./scripts/login.ts"; +import { assertSandbox } from "./scripts/guard.ts"; import companySetup, { Company } from "./scripts/admin/companySetup.ts"; import path from "node:path"; import displaySetup from "./scripts/admin/displaySetup.ts"; @@ -10,8 +11,14 @@ import moduleSetup from "./scripts/admin/moduleSetup.ts"; /* Initialisation */ -const dolibarrAddress = Deno.env.get("DOLIBARR_ADDRESS") || - "https://erp.arcodange.duckdns.org"; +// GARDE D'HÔTE. main.ts pilote l'ASSISTANT D'INSTALLATION (`/install/`) : c'est +// le script le plus destructeur du dépôt. Pointé sur la production avec +// l'environnement ambiant — et `test/.env` porte justement DOLIBARR_ADDRESS sur +// la PRODUCTION — il relancerait l'installeur sur l'ERP réel. +// assertSandbox() n'autorise que le bac à sable, sauf double opt-in explicite +// (ARCO_ALLOW_PRODUCTION + ARCO_PROD_CONFIRM) pour l'installation initiale d'un +// nouvel environnement, qui reste un geste d'opérateur. +const dolibarrAddress = assertSandbox(); const debug = true; const DBpassword = Deno.env.get("DOLI_DB_PASSWORD") || "undefined"; const adminCredentials = {