docs(agents): drop push-by-script steps from deploy-pprod-or-prod

**Motivations:**
- deploy-pprod-or-prod must not invoke /push-by-script; push test is a prerequisite outside this workflow.

**Root causes:**
- Workflow duplicated push (start and end) and coupled push to align-only step.

**Correctives:**
- Etape 2: only change-to-all-branches.sh --align-only; document origin/test prerequisite.
- Remove former etape 5 push-by-script; renumber lint to etape 5; closure and correction loops updated.
- Table and anti-duplication checks adjusted.
- change-to-all-branches: fix cross-reference to deploy-pprod (no inclusion of /change-to-all-branches agent).

**Evolutions:**
- None.

**Pages affectées:**
- .smartIde/agents/deploy-pprod-or-prod.md, .smartIde/agents/change-to-all-branches.md
This commit is contained in:
Nicolas Cantu 2026-04-22 22:23:11 +02:00
parent 2baae6ca48
commit bf12456bfd
2 changed files with 22 additions and 24 deletions

View File

@ -30,7 +30,7 @@ En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (imp
3. Présenter résumé (étapes, options, effets). 3. Présenter résumé (étapes, options, effets).
4. Vérifier branche du dépôt projet = **test** (sinon retour 1). 4. Vérifier branche du dépôt projet = **test** (sinon retour 1).
5. Exécuter **/push-by-script** (message fourni par l'agent). 5. Exécuter **/push-by-script** (message fourni par l'agent).
6. Exécuter `./deploy/change-to-all-branches.sh [project_id]` (timeout long). 6. Exécuter `./deploy/change-to-all-branches.sh [project_id]` (timeout long). **Sans** loption **`--align-only`** : le script enchaîne alignement **et** déploiement **test**. Loption **`--align-only`** (alignement uniquement) est réservée au workflow **`/deploy-pprod-or-prod`** — ne pas lutiliser pour clôturer **cet** agent si un déploiement **test** est attendu.
7. **En échec du script** : identifier la cause (sortie + logs/deploy_*.log). Si typecheck / lint / build : lancer **intégralement** l'agent **/fix-lint** pour le projet, puis **/push-by-script**, puis relancer `./deploy/change-to-all-branches.sh [project_id]`. Répéter jusqu'à succès ou **maximum 5 tentatives** ; au-delà, documenter les erreurs et s'arrêter. 7. **En échec du script** : identifier la cause (sortie + logs/deploy_*.log). Si typecheck / lint / build : lancer **intégralement** l'agent **/fix-lint** pour le projet, puis **/push-by-script**, puis relancer `./deploy/change-to-all-branches.sh [project_id]`. Répéter jusqu'à succès ou **maximum 5 tentatives** ; au-delà, documenter les erreurs et s'arrêter.
8. **Lint min. 5 avant clôture** : sur `repository_root`, lint **chaque** `build_dir` (tout le périmètre déclaré, pas seulement le sous-projet modifié dans la session) ; si **N ≥ 1**, corriger **au moins min(5, N)** dans **ce** run ; décompte avant/après. **Interdit** de clôturer en reportant seul sur un **`/fix-lint` ultérieur** sans ces corrections. **Interdit** dignorer des warnings/erreurs parce quils sont « préexistants » ou hors fichiers modifiés ce run : voir `.smartIde/rules/cloture-lint.mdc` — section **Diagnostics préexistants / hors périmètre de la session**. Si fichiers modifiés : **/push-by-script** avant clôture si le dépôt nest pas clean. 8. **Lint min. 5 avant clôture** : sur `repository_root`, lint **chaque** `build_dir` (tout le périmètre déclaré, pas seulement le sous-projet modifié dans la session) ; si **N ≥ 1**, corriger **au moins min(5, N)** dans **ce** run ; décompte avant/après. **Interdit** de clôturer en reportant seul sur un **`/fix-lint` ultérieur** sans ces corrections. **Interdit** dignorer des warnings/erreurs parce quils sont « préexistants » ou hors fichiers modifiés ce run : voir `.smartIde/rules/cloture-lint.mdc` — section **Diagnostics préexistants / hors périmètre de la session**. Si fichiers modifiés : **/push-by-script** avant clôture si le dépôt nest pas clean.
9. Clôture : points 1 à 16 de cloture-evolution.mdc (horodatage, 5 périmètres 3-11, 12-14, 15, 16). 9. Clôture : points 1 à 16 de cloture-evolution.mdc (horodatage, 5 périmètres 3-11, 12-14, 15, 16).
@ -41,11 +41,11 @@ En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (imp
**Documentation** : La doc des projets gérés est dans **`projects/<id>/docs`** ; la doc ia_dev est dans **`projects/ia_dev/docs`**. **Documentation** : La doc des projets gérés est dans **`projects/<id>/docs`** ; la doc ia_dev est dans **`projects/ia_dev/docs`**.
**Rôle de lagent :** vérifier que la branche locale est test (sinon retour 1), fournir le message de commit (via /push-by-script), lancer le script, contrôler la sortie et le code de retour. **Rôle du script :** exécution déterministe (vérif branche test, `branch-align.sh test`, orchestrateur ou `deploy.sh test --no-sync-origin` ; flags métier uniquement via `$SECRETS_BASE/test/deploy.conf` ; journalisation toujours `./logs/deploy_*.log`). Préparation OS cible : agent **`/setup-host`** + `deploy/scripts_v2/run-setup-host.sh`, pas `deploy.sh`. **Rôle de lagent :** vérifier que la branche locale est test (sinon retour 1), fournir le message de commit (via /push-by-script), lancer le script, contrôler la sortie et le code de retour. **Rôle du script :** exécution déterministe (vérif branche test, `branch-align.sh test`, puis sauf **`--align-only`** : **`orchestrator.sh test --no-sync-origin`** ou, à défaut, **`bash deploy/scripts_v2/deploy-lecoffre-all-sites.sh test --no-sync-origin`** — **toujours les trois lignes** lecoffreio / enso / genealogie lorsque le dépôt expose **`deploy-lecoffre-all-sites.sh`** ; repli historique **`deploy.sh test`** uniquement si ce script est absent). Flags métier via **`$SECRETS_BASE/<site>/test/deploy.conf`** (par ligne) ; journalisation **`./logs/deploy_*.log`**. Préparation OS : **`/setup-host`** + **`run-setup-host.sh`**, pas confondre avec le déploiement applicatif.
**Projet kogus (monorepo LeCoffre) :** si le script enchaîne **`deploy/scripts_v2`**, appliquer le contrat multisite (**`SITE_CODE`** / **`deploy-site.sh`** / **`deploy-lecoffre-all-sites.sh`**, secrets **`.secrets/<site>/<env>/`**) décrit dans **`repository_root/docs/features/multi-site-architecture.md`** et **`repository_root/.cursor/agents/agent-paths-registry.md`** §3 bis (les agents Cursor du dépôt applicatif sont sous **`.cursor/agents/`**, pas **`.smartIde`**). **Projet kogus (monorepo LeCoffre) :** si le script enchaîne **`deploy/scripts_v2`**, appliquer le contrat multisite (**`SITE_CODE`** / **`deploy-site.sh`** / **`deploy-lecoffre-all-sites.sh`**, secrets **`.secrets/<site>/<env>/`**) décrit dans **`repository_root/docs/features/multi-site-architecture.md`** et **`repository_root/.cursor/agents/agent-paths-registry.md`** §3 bis (les agents Cursor du dépôt applicatif sont sous **`.cursor/agents/`**, pas **`.smartIde`**).
**Branche applicative test-first (obligatoire) :** Toute correction de code, configuration ou documentation dans le **dépôt applicatif** (`repository_root` dans `projects/<id>/conf.json`) pendant lexécution de cet agent doit être réalisée sur la branche locale **test**. Avant toute modification : si le dépôt applicatif nest pas sur **test**, exécuter **`git checkout test`** (ou équivalent validé projet). **Interdit** : committer un correctif **uniquement** sur **pprod** ou **prod** depuis cet agent. Si léchec ou le contexte provient dune phase **pprod**/**prod** (correctifs identifiés après déploiement ou analyse sur ces branches), appliquer la procédure **Corrections découvertes sur pprod ou prod** dans `.smartIde/agents/deploy-pprod-or-prod.md` : correctifs sur **test**, puis **rejouer** le workflow complet depuis létape 2 de cet agent dans ce flux (**`/change-to-all-branches`** inclus dans **`/deploy-pprod-or-prod`**), sans court-circuiter lalignement **test → pprod → prod**. **Branche applicative test-first (obligatoire) :** Toute correction de code, configuration ou documentation dans le **dépôt applicatif** (`repository_root` dans `projects/<id>/conf.json`) pendant lexécution de cet agent doit être réalisée sur la branche locale **test**. Avant toute modification : si le dépôt applicatif nest pas sur **test**, exécuter **`git checkout test`** (ou équivalent validé projet). **Interdit** : committer un correctif **uniquement** sur **pprod** ou **prod** depuis cet agent. Si léchec ou le contexte provient dune phase **pprod**/**prod** (correctifs identifiés après déploiement ou analyse sur ces branches), appliquer la procédure **Corrections découvertes sur pprod ou prod** dans `.smartIde/agents/deploy-pprod-or-prod.md` : correctifs sur **test**, pousser **hors** **`/deploy-pprod-or-prod`** si besoin, puis **rejouer** **`/deploy-pprod-or-prod`** depuis son **étape 2** (**`change-to-all-branches.sh --align-only`**, puis **`deploy-by-script-to`**, etc.), sans court-circuiter lalignement **test → pprod → prod**. **Ne pas** confondre avec lagent **`/change-to-all-branches`** (déploiement **test** multisite).
**Focus qualité et résolution de problèmes :** **Focus qualité et résolution de problèmes :**
@ -72,8 +72,8 @@ Si la branche locale actuelle n'est pas test, retourner 1.
Uniquement en test (branche git), exécuter dans l'ordre : Uniquement en test (branche git), exécuter dans l'ordre :
1. **/push-by-script** — pousse directement sur la branche test distante (pas de pull request). Message de commit fourni par l'agent. 1. **/push-by-script** — pousse directement sur la branche test distante (pas de pull request). Message de commit fourni par l'agent.
2. **Exécuter depuis la racine de ia_dev** : `./deploy/change-to-all-branches.sh [project_id]` — aligne origin/test, origin/pprod, origin/prod sur le SHA de test, puis déploie l'environnement test (`orchestrator.sh` ou `deploy.sh test --no-sync-origin` ; métier via `deploy.conf` ; logs `./logs/`). project_id optionnel pour cibler le projet. Push direct uniquement ; aucun script ni agent ne crée de pull request. 2. **Exécuter depuis la racine de ia_dev** : `./deploy/change-to-all-branches.sh [project_id]` — aligne origin/test, origin/pprod, origin/prod sur le SHA de test, puis déploie **test** en **multisite** (`orchestrator.sh` ou **`deploy-lecoffre-all-sites.sh test --no-sync-origin`** ; métier via **`deploy.conf`** par site ; logs **`./logs/`**). project_id optionnel. Push direct uniquement ; aucun PR. **Ne pas** passer **`--align-only`** pour cet agent (cette option saute le déploiement **test** ; elle est utilisée par **`/deploy-pprod-or-prod`** étape 2 uniquement).
- **Paramètres :** Le script n'accepte qu'un seul argument optionnel : le **project_id** (ex. kogus). La branche est toujours **test** (imposée par le script, pas un paramètre). Si l'utilisateur fournit deux tokens (ex. « test kogus » ou « kogus test »), extraire celui qui correspond à un projet (existence de `projects/<id>/conf.json`) et appeler le script avec uniquement ce project_id : `./deploy/change-to-all-branches.sh kogus`. - **Paramètres :** Arguments : **project_id** optionnel (ex. kogus), puis optionnellement **`--align-only`** (hors périmètre de **cet** agent). La branche git est toujours **test**. Si l'utilisateur fournit des tokens ambigus (ex. « test kogus »), extraire le **project_id** quand `projects/<id>/conf.json` existe : `./deploy/change-to-all-branches.sh kogus`.
- **Pas de timeout :** Ne pas lancer la commande avec un timeout court (ex. 5 min). Le déploiement (build, migrations, import-v1, redémarrage services, vérifications) peut durer 10 à 30 min ; utiliser un timeout long ou aucun timeout pour laisser le script aller au bout. - **Pas de timeout :** Ne pas lancer la commande avec un timeout court (ex. 5 min). Le déploiement (build, migrations, import-v1, redémarrage services, vérifications) peut durer 10 à 30 min ; utiliser un timeout long ou aucun timeout pour laisser le script aller au bout.
Retourner 0 en cas de succès. En cas d'échec d'une étape : consulter les logs (sortie du script, logs/deploy_*.log), identifier la cause. **Si la cause est typecheck / lint / build** : lancer **intégralement** l'agent **/fix-lint** pour le projet, puis /push-by-script, puis **relancer immédiatement** change-to-all-branches.sh (sans demander à l'utilisateur). Répéter jusqu'à succès ou **5 tentatives** ; au-delà, documenter et s'arrêter. Pour les autres causes (erreur serveur, secret manquant, infra) : s'arrêter si la correction n'est pas possible sans instruction utilisateur. Retourner 0 en cas de succès. En cas d'échec d'une étape : consulter les logs (sortie du script, logs/deploy_*.log), identifier la cause. **Si la cause est typecheck / lint / build** : lancer **intégralement** l'agent **/fix-lint** pour le projet, puis /push-by-script, puis **relancer immédiatement** change-to-all-branches.sh (sans demander à l'utilisateur). Répéter jusqu'à succès ou **5 tentatives** ; au-delà, documenter et s'arrêter. Pour les autres causes (erreur serveur, secret manquant, infra) : s'arrêter si la correction n'est pas possible sans instruction utilisateur.

View File

@ -1,6 +1,6 @@
--- ---
name: deploy-pprod-or-prod name: deploy-pprod-or-prod
description: Déploie vers pprod ou prod : push-by-script, alignement branches (change-to-all-branches.sh --align-only, sans déploiement test), deploy-by-script-to, puis push-by-script. Toute correction issue dune phase pprod/prod se fait sur test puis le workflow est rejoué depuis létape 2. Paramètre obligatoire pprod ou prod. description: Déploie vers pprod ou prod : alignement branches (change-to-all-branches.sh --align-only, sans déploiement test), deploy-by-script-to. Prérequis : **origin/test** à jour (push hors cet agent : **pousse.sh** ou **/push-by-script**). Toute correction issue dune phase pprod/prod se fait sur test puis le workflow est rejoué depuis létape 2. Paramètre obligatoire pprod ou prod.
model: inherit model: inherit
is_background: false is_background: false
--- ---
@ -16,7 +16,7 @@ En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (imp
- Sous-agents : uniquement si nécessaire ; descriptions courtes ; éviter « explore » si grep/read/chemin connu suffit. - Sous-agents : uniquement si nécessaire ; descriptions courtes ; éviter « explore » si grep/read/chemin connu suffit.
- Réponses concises, sans répéter règles ou docs déjà référencées. - Réponses concises, sans répéter règles ou docs déjà référencées.
- **Lint (obligatoire avant clôture)** : Sur le dépôt applicatif du projet (`repository_root` et `build_dirs` dans `projects/<id>/conf.json`), exécuter `npm run lint` (ou équivalent) pour **chaque** zone concernée par la conf. Compter **erreurs + warnings**. Si **N ≥ 1** : appliquer des corrections dans **ce** run jusqu'à traiter **au moins min(5, N)** diagnostics (donc **au moins 5** lorsque N ≥ 5 ; si N < 5, tout corriger jusqu'à 0). **Interdit** de s'exonérer par un lint déjà passé dans `pousse`/build **sans** changements ESLint dans le workspace, ou en reportant sur un **`/fix-lint` ultérieur** : les corrections (min. 5 quand N 5) font partie **du même run** que la clôture. Clôture : commandes, périmètres, **décompte avant/après**. Voir `.smartIde/rules/cloture-lint.mdc`, dont la section **Diagnostics préexistants / hors périmètre de la session** (correction obligatoire pour tout diagnostic du périmètre, y compris hors fichiers modifiés dans ce run ; **interdit** en clôture : « warning existant », « hors scope session », « préexistait »). - **Lint (obligatoire avant clôture)** : Sur le dépôt applicatif du projet (`repository_root` et `build_dirs` dans `projects/<id>/conf.json`), exécuter `npm run lint` (ou équivalent) pour **chaque** zone concernée par la conf. Compter **erreurs + warnings**. Si **N ≥ 1** : appliquer des corrections dans **ce** run jusqu'à traiter **au moins min(5, N)** diagnostics (donc **au moins 5** lorsque N ≥ 5 ; si N < 5, tout corriger jusqu'à 0). **Interdit** de s'exonérer par un lint déjà passé **sans** changements ESLint enregistrés dans le workspace, ou en reportant sur un **`/fix-lint` ultérieur** : les corrections (min. 5 quand N 5) font partie **du même run** que la clôture. Clôture : commandes, périmètres, **décompte avant/après**. Voir `.smartIde/rules/cloture-lint.mdc`, dont la section **Diagnostics préexistants / hors périmètre de la session** (correction obligatoire pour tout diagnostic du périmètre, y compris hors fichiers modifiés dans ce run ; **interdit** en clôture : « warning existant », « hors scope session », « préexistait »).
# Agent deploy-pprod-or-prod # Agent deploy-pprod-or-prod
@ -44,33 +44,33 @@ En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (imp
- **Contexte** : analyse des logs, échec de **`deploy-by-script-to`**, constat sur le dépôt applicatif alors que la branche locale est **pprod** ou **prod**, ou toute autre intervention qui amène à modifier code, configuration ou documentation du projet cible. - **Contexte** : analyse des logs, échec de **`deploy-by-script-to`**, constat sur le dépôt applicatif alors que la branche locale est **pprod** ou **prod**, ou toute autre intervention qui amène à modifier code, configuration ou documentation du projet cible.
- **Interdit** : appliquer la correction **uniquement** sur la branche **pprod** ou **prod** du dépôt applicatif (`repository_root` dans `projects/<id>/conf.json`) et poursuivre sans repasser par **test** (pas de « correctif local pprod/prod puis push ciblé » en dehors du flux test-first). - **Interdit** : appliquer la correction **uniquement** sur la branche **pprod** ou **prod** du dépôt applicatif (`repository_root` dans `projects/<id>/conf.json`) et poursuivre sans repasser par **test** (pas de « correctif local pprod/prod puis push ciblé » en dehors du flux test-first).
- **Obligation** : - **Obligation** :
1. **`git checkout test`** (ou équivalent validé projet) sur le **dépôt applicatif** ; y **réaliser** les corrections (commits selon règles du projet ; le premier push du cycle est en principe celui de l**étape 2** via **`/push-by-script`**). 1. **`git checkout test`** (ou équivalent validé projet) sur le **dépôt applicatif** ; y **réaliser** les corrections (commits selon règles du projet) ; **pousser** **`test`** → **`origin/test`** **hors** cet agent (**`/push-by-script`** ou **`./deploy/pousse.sh kogus`**, etc.) tant que le tip local nest pas sur le remote.
2. **Rejouer intégralement** le workflow **depuis létape 2** : **`/push-by-script`** puis **`./deploy/change-to-all-branches.sh [project_id] --align-only`**, puis **étape 3** **`deploy-by-script-to`** vers la cible **pprod** ou **prod**, puis **étapes 4 à 6** comme décrit ci-dessous. Pour un **déploiement test** complet après correctif, enchaîner lagent **`/change-to-all-branches`** en flux **séparé**. 2. **Rejouer intégralement** le workflow **depuis létape 2** : **`./deploy/change-to-all-branches.sh [project_id] --align-only`**, puis **étape 3** **`deploy-by-script-to`** vers la cible **pprod** ou **prod**, puis **étapes 4 à 5** comme décrit ci-dessous. Pour un **déploiement test** complet après correctif, enchaîner lagent **`/change-to-all-branches`** en flux **séparé**.
- Si plusieurs cycles correction → alignement → déploiement sont nécessaires, **chaque** correction part toujours de **test** puis enchaîne **étape 2 → 6** jusquà succès ou blocage utilisateur. - Si plusieurs cycles correction → alignement → déploiement sont nécessaires, **chaque** correction part toujours de **test** puis enchaîne **étape 2 → 5** jusquà succès ou blocage utilisateur.
## Ordre des agents et anti-duplication (obligatoire) ## Ordre des agents et anti-duplication (obligatoire)
Règles **décisionnelles** (ne pas lancer en double ce quun agent en aval exécute déjà) : Règles **décisionnelles** (ne pas lancer en double ce quun agent en aval exécute déjà) :
| Action en amont | Condition | Application (tant que létape 2 ci-dessous existe dans ce fichier) | | Action en amont | Condition | Application |
| --- | --- | --- | | --- | --- | --- |
| **`/push-by-script`** (branche **test**) | Lancer **avant** ce workflow **seulement si** l**étape 2** de ce fichier ne le lance **pas** aussi. | L**étape 2** exécute **`/push-by-script`** **puis** `./deploy/change-to-all-branches.sh [project_id] --align-only`. **Interdit** de lancer **`/push-by-script`** sur test **séparément avant** létape 2 de ce workflow (évite la double exécution). | | **Push `test` → `origin/test`** | Ce workflow **nexécute pas** **`/push-by-script`** ni **`pousse.sh`**. | Avant l**étape 2**, le tip à déployer doit être sur **`origin/test`** (push **hors** cet agent si besoin). L**étape 2** exécute uniquement **`./deploy/change-to-all-branches.sh [project_id] --align-only`**. |
| **Agent `/change-to-all-branches`** (déploiement **test** inclus) | Lancer **avant** ce workflow **seulement** pour un besoin explicite de **déploiement test** (flux séparé). | Ce fichier **ninvoque pas** lagent **`/change-to-all-branches`** : létape 2 aligne les branches via **`change-to-all-branches.sh --align-only`** **sans** **`deploy.sh` test**. **Interdit** de lancer lagent **`/change-to-all-branches`** juste avant ce workflow pour « pré-déployer test » dans le même objectif pprod/prod — utiliser **`/change-to-all-branches`** en session **dédiée** si le déploiement test est requis. | | **Agent `/change-to-all-branches`** (déploiement **test** inclus) | Lancer **avant** ce workflow **seulement** pour un besoin explicite de **déploiement test** (flux séparé). | Ce fichier **ninvoque pas** lagent **`/change-to-all-branches`** : létape 2 aligne les branches via **`change-to-all-branches.sh --align-only`** **sans** **`deploy.sh` test**. **Interdit** de lancer lagent **`/change-to-all-branches`** juste avant ce workflow pour « pré-déployer test » dans le même objectif pprod/prod — utiliser **`/change-to-all-branches`** en session **dédiée** si le déploiement test est requis. |
**Si** une future version de ce fichier **supprime** létape 2 : réévaluer le tableau (alignement branches + push en amont manuel si besoin). **Si** une future version de ce fichier **supprime** létape 2 : réévaluer le tableau (alignement branches ; push **test** manuel si besoin).
### Vérification obligatoire — début dexécution ### Vérification obligatoire — début dexécution
Avant l**étape 1** du workflow, **afficher et cocher** (dans la sortie de lagent) : Avant l**étape 1** du workflow, **afficher et cocher** (dans la sortie de lagent) :
1. **Anti-duplication agent `change-to-all-branches`** : je **nai pas** enchaîné lagent **`/change-to-all-branches`** (déploiement **test**) dans le même run **pour le même objectif** pprod/prod **avant** létape 2, sauf exigence utilisateur documentée (flux test dédié). 1. **Anti-duplication agent `change-to-all-branches`** : je **nai pas** enchaîné lagent **`/change-to-all-branches`** (déploiement **test**) dans le même run **pour le même objectif** pprod/prod **avant** létape 2, sauf exigence utilisateur documentée (flux test dédié).
2. **Anti-duplication `push-by-script`** : je **nai pas** exécuté **`/push-by-script`** sur test **uniquement pour préparer** ce déploiement avant létape 2 (le premier push est celui de l**étape 2**). 2. **Prérequis `origin/test`** : le tip local **test** est déjà sur **`origin/test`**, ou jindique quun push **hors** cet agent (**`/push-by-script`**, **`pousse.sh`**, etc.) est nécessaire avant de poursuivre.
Si lutilisateur ou un autre processus **a** déjà aligné / poussé : **le signaler** ; ne **pas** refaire **`/push-by-script`** en amont par habitude — suivre quand même létape 2 (idempotence gérée par les scripts). Si lutilisateur ou un autre processus **a** déjà aligné les branches distantes : **le signaler** ; l**étape 2** (`--align-only`) reste à exécuter selon le playbook (idempotence gérée par les scripts).
### Vérification obligatoire — fin dagent (avant clôture) ### Vérification obligatoire — fin dagent (avant clôture)
Cocher explicitement : **« Ordre anti-duplication : respecté (pas de `/push-by-script` standalone avant létape 2 hors ce workflow ; pas dagent `/change-to-all-branches` complet en doublon pour le même objectif pprod/prod) »** — ou documenter lexception. Cocher : **« Corrections pprod/prod : si applicable, faites sur test puis workflow rejoué depuis étape 2 (aucun correctif applicatif « seulement pprod/prod ») »**. Cocher aussi : **« Lint min. 5 : exécuté sur repository_root + décompte avant/après (ou 0 diagnostic) ; pas de report seul sur /fix-lint »**. Cocher explicitement : **« Ordre anti-duplication : respecté (pas dagent `/change-to-all-branches` complet en doublon pour le même objectif pprod/prod ; push **test** géré hors cet agent si requis) »** — ou documenter lexception. Cocher : **« Corrections pprod/prod : si applicable, faites sur test puis workflow rejoué depuis étape 2 (aucun correctif applicatif « seulement pprod/prod ») »**. Cocher aussi : **« Lint min. 5 : exécuté sur repository_root + décompte avant/après (ou 0 diagnostic) ; pas de report seul sur /fix-lint »**.
## Multisite — projet **kogus** (monorepo LeCoffre ; code produit site `lecoffreio` inchangé) ## Multisite — projet **kogus** (monorepo LeCoffre ; code produit site `lecoffreio` inchangé)
@ -80,9 +80,9 @@ Quand **`repository_root`** est le monorepo LeCoffre et **`deploy-by-script-to`*
1. **Vérifier la branche** : La machine doit être sur la branche **test** au démarrage. Si ce n'est pas le cas, indiquer à l'utilisateur de passer sur test (ou exécuter `git checkout test` depuis la racine projet) avant de continuer. 1. **Vérifier la branche** : La machine doit être sur la branche **test** au démarrage. Si ce n'est pas le cas, indiquer à l'utilisateur de passer sur test (ou exécuter `git checkout test` depuis la racine projet) avant de continuer.
2. **Alignement branches sur test (sans déploiement test)** : 2. **Alignement branches (sans déploiement test)** :
- Exécuter intégralement **`/push-by-script`** (message selon règles du projet ; stdin obligatoire en non interactif). - **Prérequis** : **`origin/test`** porte le commit à déployer (commits locaux poussés **hors** cet agent : **`/push-by-script`**, **`./deploy/pousse.sh kogus`**, etc.). Si le clone **test** est en avance sur **`origin/test`**, **arrêter** et indiquer de pousser dabord.
- Puis, depuis la racine ia_dev : **`./deploy/change-to-all-branches.sh [project_id] --align-only`** (équivalent **`branch-align.sh test`** après push ; **pas** dappel **`deploy-lecoffre-all-sites.sh test`** / **`orchestrator.sh test`** dans cette étape). - Depuis la racine ia_dev : **`./deploy/change-to-all-branches.sh [project_id] --align-only`** (**pas** dappel **`deploy-lecoffre-all-sites.sh test`** / **`orchestrator.sh test`** dans cette étape).
- **Ne pas** invoquer lagent **`/change-to-all-branches`** ici : cet agent enchaîne le déploiement **test** ; pour un déploiement test complet, flux séparé **`/change-to-all-branches`**. - **Ne pas** invoquer lagent **`/change-to-all-branches`** ici : cet agent enchaîne le déploiement **test** ; pour un déploiement test complet, flux séparé **`/change-to-all-branches`**.
- **Si KO :** Analyser la sortie (et **`logs/deploy_*.log`** si un outil amont les a alimentés). Toute correction sur le dépôt applicatif : **test** dabord (voir section **Corrections découvertes sur pprod ou prod**), puis relancer l**étape 2** jusqu'à succès. - **Si KO :** Analyser la sortie (et **`logs/deploy_*.log`** si un outil amont les a alimentés). Toute correction sur le dépôt applicatif : **test** dabord (voir section **Corrections découvertes sur pprod ou prod**), puis relancer l**étape 2** jusqu'à succès.
- **Si OK :** Passer à l'étape 3. - **Si OK :** Passer à l'étape 3.
@ -91,14 +91,12 @@ Quand **`repository_root`** est le monorepo LeCoffre et **`deploy-by-script-to`*
- Le script est lancé depuis la racine de ia_dev. Avec project_id (optionnel), MAIL_TO ou AI_AGENT_TOKEN le dépôt cible est celui de la conf (deploy.secrets_path). Lancer : `./deploy/deploy-by-script-to.sh [project_id] <pprod|prod>`. - Le script est lancé depuis la racine de ia_dev. Avec project_id (optionnel), MAIL_TO ou AI_AGENT_TOKEN le dépôt cible est celui de la conf (deploy.secrets_path). Lancer : `./deploy/deploy-by-script-to.sh [project_id] <pprod|prod>`.
- **`deploy.host_stays_on_test: true`** dans `projects/<id>/conf.json` (LeCoffre : **true** dans `projects/kogus/conf.json`) : le clone applicatif reste sur **`test`** ; `deploy-by-script-to.sh` ne fait **pas** de `checkout` **pprod**/**prod** ni `reset --hard` sur ces branches ; le playbook **`deploy/scripts_v2`** aligne les remotes / **worktree** et enchaîne **les trois lignes** (**`orchestrator.sh`** ou **`deploy-lecoffre-all-sites.sh`**) — voir **`deploy/README.md`** du dépôt applicatif. - **`deploy.host_stays_on_test: true`** dans `projects/<id>/conf.json` (LeCoffre : **true** dans `projects/kogus/conf.json`) : le clone applicatif reste sur **`test`** ; `deploy-by-script-to.sh` ne fait **pas** de `checkout` **pprod**/**prod** ni `reset --hard` sur ces branches ; le playbook **`deploy/scripts_v2`** aligne les remotes / **worktree** et enchaîne **les trois lignes** (**`orchestrator.sh`** ou **`deploy-lecoffre-all-sites.sh`**) — voir **`deploy/README.md`** du dépôt applicatif.
- **Sinon :** le script fait en général : passage dans le dépôt du projet, `checkout` sur la branche paramètre, vérification que la base secrets attendue par le projet existe (**kogus** / monorepo LeCoffre : imbriquée **`.secrets/<site>/<env>/`**, voir **`repository_root/docs/features/multi-site-architecture.md`** — le seul plat **`.secrets/<env>/`** nest pas le contrat nominal multisite), `reset --hard` sur **`origin/<branche>`**, déploiement (**orchestrateur** ou **`deploy-lecoffre-all-sites.sh`** / repli **`deploy.sh`**), puis **`checkout test`**. - **Sinon :** le script fait en général : passage dans le dépôt du projet, `checkout` sur la branche paramètre, vérification que la base secrets attendue par le projet existe (**kogus** / monorepo LeCoffre : imbriquée **`.secrets/<site>/<env>/`**, voir **`repository_root/docs/features/multi-site-architecture.md`** — le seul plat **`.secrets/<env>/`** nest pas le contrat nominal multisite), `reset --hard` sur **`origin/<branche>`**, déploiement (**orchestrateur** ou **`deploy-lecoffre-all-sites.sh`** / repli **`deploy.sh`**), puis **`checkout test`**.
- **Si KO :** Analyser la sortie et les logs, identifier la cause. **Ne pas** se limiter à corriger sur la branche **pprod**/**prod** : retour **test**, corrections, puis **rejouer depuis létape 2** (**`/push-by-script`** + **`change-to-all-branches.sh --align-only`**, puis **`deploy-by-script-to`**) jusqu'à succès (section **Corrections découvertes sur pprod ou prod**). - **Si KO :** Analyser la sortie et les logs, identifier la cause. **Ne pas** se limiter à corriger sur la branche **pprod**/**prod** : retour **test**, corrections, push **hors** cet agent si besoin, puis **rejouer depuis létape 2** (**`change-to-all-branches.sh --align-only`**, puis **`deploy-by-script-to`**) jusqu'à succès (section **Corrections découvertes sur pprod ou prod**).
- **Si OK :** Passer à l'étape 4. - **Si OK :** Passer à l'étape 4.
4. **Branche test après létape 3 :** si **`deploy.host_stays_on_test`**, le clone est déjà sur **`test`**. Sinon, le script a remis **`test`** : vérifier que la branche courante est **`test`**. 4. **Branche test après létape 3 :** si **`deploy.host_stays_on_test`**, le clone est déjà sur **`test`**. Sinon, le script a remis **`test`** : vérifier que la branche courante est **`test`**.
5. **Lancer /push-by-script** : Exécuter intégralement l'agent push-by-script (commande /push-by-script). Message de commit fourni par l'agent selon les règles du projet. 5. **Lint min. 5 sur le dépôt applicatif** : Avant la clôture, se placer dans `repository_root` (`projects/<id>/conf.json`). Exécuter le lint dans **chaque** entrée de `build_dirs`. Si **N ≥ 1** diagnostics (erreurs+warnings) : corriger **au moins min(5, N)** dans **ce** run. **Interdit** de clôturer le point lint en renvoyant uniquement à un **`/fix-lint` ultérieur**. Documenter décompte avant/après. Si des fichiers sont modifiés : committer et pousser **hors** les étapes numérées de cet agent (**`./deploy/pousse.sh`**, **`/push-by-script`**, ou équivalent) avant de finaliser la clôture lorsque le dépôt nest pas clean.
6. **Lint min. 5 sur le dépôt applicatif** : Avant la clôture, se placer dans `repository_root` (`projects/<id>/conf.json`). Exécuter le lint dans **chaque** entrée de `build_dirs`. Si **N ≥ 1** diagnostics (erreurs+warnings) : corriger **au moins min(5, N)** dans **ce** run. **Interdit** de clôturer le point lint en renvoyant uniquement à un **`/fix-lint` ultérieur**. Documenter décompte avant/après. Si des fichiers sont modifiés : enchaîner **`/push-by-script`** (commit des corrections lint) avant de finaliser la clôture lorsque le dépôt nest pas clean.
## Horodatage et contexte ## Horodatage et contexte
@ -106,4 +104,4 @@ Appliquer intégralement le bloc défini dans `.smartIde/rules/cloture-evolution
## Clôture complète obligatoire (tous les cas, sans exception) ## Clôture complète obligatoire (tous les cas, sans exception)
En fin d'exécution de cet agent, **toujours** appliquer intégralement `.smartIde/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.smartIde/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si une étape a échoué, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. En fin d'exécution de cet agent, **toujours** appliquer intégralement `.smartIde/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.smartIde/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, affichage du texte du commit ou constat « rien à committer »). **Aucune exception** : même si une étape a échoué, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point.