From 6a5b7baa23b8ac80eb3864fc3fc5bf63a3dfb1b5 Mon Sep 17 00:00:00 2001 From: Gabriel Radureau Date: Fri, 14 Aug 2026 22:04:43 +0200 Subject: [PATCH] =?UTF-8?q?chore:=20r=C3=A9concilier=20le=20trunk=20avec?= =?UTF-8?q?=20main,=20et=20corriger=20la=20note=20du=20mode=20vierge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DEUX CHOSES. 1. RÉCONCILIATION. Le trunk accusait 49 commits de retard, 0 d'avance : tout son delta vivait dans l'arbre de travail, mélange d'améliorations réelles et d'état périmé. Il est remis sur origin/main, et son état est préservé sur la branche trunk-snapshot-20260814. Ce qui méritait d'être porté l'est ici : - test/main.ts : chemin Work/ au lieu de Desktop/ (l'ancien n'existe plus) et module TIERS activé. L'URL par défaut reste corrigée par la garde d'hôte ; - ansible README : la commande du playbook recurrentBackup ; - company.json : siteWeb arcodange.fr et email @arcodange.fr — le trunk était à jour sur ces deux champs quand main portait encore duckdns et gmail. NE SONT PAS PORTÉS, délibérément : - le .gitignore du trunk, qui avait PERDU les règles replay-packs ; - company.json SAS / 6201Z, périmé — main porte SARL / 6201Z depuis le PR #77 ; - un console.log de débogage dans forms.ts ; - createEphemeralAgent + permissions.ts + orchestratorExample.ts : travail cohérent mais qui DOUBLE le modèle de scopes durables (scopes.ts + provisionAiUser.ts) effectivement livré. Deux conceptions concurrentes de la même chose ne se portent pas en silence — arbitrage opérateur. 2. LA NOTE DU MODE VIERGE ÉTAIT FAUSSE. Elle annonçait qu'il manquait un « golden empty ». Rien ne manquait : la chaîne existe en entier dans test/, et c'est main.ts qui pilote l'installeur. J'avais proposé de construire ce qui était déjà là, faute d'avoir regardé — exactement le contrôle inscrit dans AGENTS.md le matin même. La note décrit désormais la chaîne réelle : blank --yes -> main.ts -> install.lock -> provisionSandbox.ts Co-Authored-By: Claude Opus 5 (1M context) --- ansible/arcodange/erp/README.md | 4 ++++ ops/sandbox/sandbox-lifecycle.sh | 28 +++++++++++----------------- static/config/company.json | 8 ++++---- test/main.ts | 4 ++-- 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/ansible/arcodange/erp/README.md b/ansible/arcodange/erp/README.md index 289e04a..4830a4f 100644 --- a/ansible/arcodange/erp/README.md +++ b/ansible/arcodange/erp/README.md @@ -1,3 +1,7 @@ # Ansible Collection - arcodange.erp Documentation for the collection. + +```sh + ansible-playbook playbooks/recurrentBackup.yml -i ~/.ansible/collections/ansible_collections/arcodange/factory/inventory -vv + ``` \ No newline at end of file diff --git a/ops/sandbox/sandbox-lifecycle.sh b/ops/sandbox/sandbox-lifecycle.sh index c4122f5..a0112a2 100755 --- a/ops/sandbox/sandbox-lifecycle.sh +++ b/ops/sandbox/sandbox-lifecycle.sh @@ -182,25 +182,19 @@ sync_documents() { } # --- mode vierge ------------------------------------------------------------- -# ÉTAT : INCOMPLET. La purge fonctionne, l'instance ne se reconstruit PAS. +# Vide la base du bac à sable pour qu'un rejeu d'exercice reparte de zéro. +# `refresh-from-prod` réimporterait précisément les défauts que le rejeu doit +# corriger : reconstruire suppose donc une base vide, pas iso-prod. # -# Vérifié le 2026-08-14 : après DROP OWNED et retrait de install.lock, Dolibarr -# sert une page de login sur un schéma à ZÉRO table et l'API répond « Module Api -# must be enabled ». L'entrypoint de l'image NE LANCE PAS d'installation -# automatique — retirer le verrou ne suffit pas. +# CETTE COMMANDE N'EST QU'UNE ÉTAPE. Seule, elle laisse le bac à sable sans +# schéma — Dolibarr sert alors une page de login sur une base vide. La chaîne +# complète, déjà outillée dans test/ : # -# CE QU'IL MANQUE : un « golden empty », c'est-à-dire un pg_dump d'une instance -# Dolibarr fraîchement installée — schéma + données de référence (dictionnaires, -# pays, plan comptable) — sans aucune donnée métier. `blank` restaurerait ce dump -# au lieu de laisser la base vide, exactement comme `refresh-from-prod` restaure -# le dump de production. Seule la source change. -# -# En l'état, `blank` laisse le bac à sable INUTILISABLE : ne l'employer que suivi -# de `refresh-from-prod`, ou une fois le golden empty constitué. -# -# Vide la base du bac à sable SANS rien restaurer, pour qu'un rejeu d'exercice -# reparte de zéro. `refresh-from-prod` réimporterait précisément les défauts que -# le rejeu doit corriger : reconstruire suppose donc une base vide, pas iso-prod. +# 1. sandbox-lifecycle.sh blank --yes purge la base, retire install.lock +# 2. cd test && deno run -A main.ts pilote l'installeur (/install/), la +# société, l'affichage et les modules +# 3. touch install.lock dans le pod reverrouille (recette du test/README.md) +# 4. deno run -A provisionSandbox.ts agent d'écriture, droits, clé API # # CE QUI REND L'OPÉRATION SÛRE : elle est ANNULABLE. `refresh-from-prod` restaure # un bac à sable iso-prod en trois minutes. On peut donc casser sans regret — et diff --git a/static/config/company.json b/static/config/company.json index 253fb1b..d78af01 100644 --- a/static/config/company.json +++ b/static/config/company.json @@ -6,8 +6,8 @@ "ville": "Evry Courcouronnes", "pays": "France (FR)", "telephonePortable": "0664574539", - "siteWeb": "gitea.arcodange.duckdns.org", - "email": "arcodange@gmail.com", + "siteWeb": "arcodange.fr", + "email": "gabrielradureau@arcodange.fr", "logoFilePath": "$IMG/logo512.png" }, "ID": { @@ -22,5 +22,5 @@ "numTva": "FR00999657455", "rcs_rm": "R.C.S. Évry", "moisDebutExercice": "Janvier" - } -} \ No newline at end of file + } +} diff --git a/test/main.ts b/test/main.ts index a745c3f..7c22e2d 100644 --- a/test/main.ts +++ b/test/main.ts @@ -27,7 +27,7 @@ const adminCredentials = { }; const rootFolderPath = Deno.env.get("ROOT_FOLDER") || - "/Users/gabrielradureau/Desktop/ARCODANGE/erp"; + "/Users/gabrielradureau/Work/Arcodange/erp"; const imgFolderPath = Deno.env.get("IMG_FOLDER") || path.join(rootFolderPath, "static/img"); const configFolderPath = Deno.env.get("CONFIG_FOLDER") || @@ -78,7 +78,7 @@ const globalCtx = { try { // await displaySetup.setupDisplay(globalCtx); - await moduleSetup.configureModule(globalCtx, {moduleName: 'TIERS' ,enabled: false, onConfiguration: async () => { + await moduleSetup.configureModule(globalCtx, {moduleName: 'TIERS' , enabled: true, onConfiguration: async () => { await globalCtx.page.screenshot({path: 'save.png'}) }}); } catch (error) {