smart_ide/services/ia_dev/.smartIde/rules/cloture-evolution.mdc
Nicolas Cantu 58cc2493e5 chore: consolidate ia_dev module, sync tooling, and harden gateways (0.0.5)
Initial state:
- ia_dev was historically referenced as ./ia_dev in docs and integrations, while the vendored module lives under services/ia_dev.
- AnythingLLM sync and hook installation had error masking / weak exit signaling.
- Proxy layers did not validate proxy path segments, allowing path normalization tricks.

Motivation:
- Make the IDE-oriented workflow usable (sync -> act -> deploy/preview) with explicit errors.
- Reduce security footguns in proxying and script automation.

Resolution:
- Standardize IA_DEV_ROOT usage and documentation to services/ia_dev.
- Add SSH remote data mirroring + optional AnythingLLM ingestion.
- Extend AnythingLLM pull sync to support upload-all/prefix and fail on upload errors.
- Harden smart-ide-sso-gateway and smart-ide-global-api proxying with safe-path checks and non-leaking error responses.
- Improve ia-dev-gateway runner validation and reduce sensitive path leakage.
- Add site scaffold tool (Vite/React) with OIDC + chat via sso-gateway -> orchestrator.

Root cause:
- Historical layout changes (submodule -> vendored tree) and missing central contracts for path resolution.
- Missing validation for proxy path traversal patterns.
- Overuse of silent fallbacks (|| true, exit 0 on partial failures) in automation scripts.

Impacted features:
- Project sync: git pull + AnythingLLM sync + remote data mirror ingestion.
- Site frontends: SSO gateway proxy and orchestrator intents (rag.query, chat.local).
- Agent execution: ia-dev-gateway script runner and SSE output.

Code modified:
- scripts/remote-data-ssh-sync.sh
- scripts/anythingllm-pull-sync/sync.mjs
- scripts/install-anythingllm-post-merge-hook.sh
- cron/git-pull-project-clones.sh
- services/smart-ide-sso-gateway/src/server.ts
- services/smart-ide-global-api/src/server.ts
- services/smart-ide-orchestrator/src/server.ts
- services/ia-dev-gateway/src/server.ts
- services/ia_dev/tools/site-generate.sh

Documentation modified:
- docs/** (architecture, API docs, ia_dev module + integration, scripts)

Configurations modified:
- config/services.local.env.example
- services/*/.env.example

Files in deploy modified:
- services/ia_dev/deploy/*

Files in logs impacted:
- logs/ia_dev.log (runtime only)
- .logs/* (runtime only)

Databases and other sources modified:
- None

Off-project modifications:
- None

Files in .smartIde modified:
- .smartIde/agents/*.md
- services/ia_dev/.smartIde/**

Files in .secrets modified:
- None

New patch version in VERSION:
- 0.0.5

CHANGELOG.md updated:
- yes
2026-04-04 18:36:43 +02:00

101 lines
5.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: Règles pour tous les réponses (en fin de réponse)
alwaysApply: true
model: inherit
---
# Clôture évolution / correction
- **Principe** : tout agent ou règle invoqué dans ce document ou dans un agent doit être **appliqué intégralement**, sans omission (exécuter l'agent en entier ou appliquer toutes les étapes de la règle concernée).
- Clôturer toute réponse en **appliquant intégralement** ces règles /!\ TTRES IMPORTANT ET NON NEGOCIABLE, - **Périmètre** : la clôture est **toujours complète** pour **tous les agents** — sans exception. Aucune exception : même pour les agents qui ne modifient pas le code (ex. branch-align, push-by-script), les points 2 (5 sub-agents par projet), 14 (docupdate), 16 et 17 sappliquent. C'est toujours applicable de 1 à 19. Lister toutes les actions réaliées et non réalisées dans tous les cas de tous les points.
**Contexte projet :** Les agents sont définis et lancés depuis ia_dev (centralisé) mais sont **dédiés aux projets configurés** (lecoffreio, enso, algo, etc.), pas à ia_dev. La configuration et la documentation de chaque projet sont dans `projects/<id>/`. L'identifiant `<id>` est résolu par MAIL_TO ou AI_AGENT_TOKEN. Rappeler le projet et la branche au début de chaque agent.
**Répertoire d'exécution des scripts (standalone) :** Racine de ia_dev. Tous les scripts `deploy/` et `git-issues/` doivent être invoqués depuis la racine de ia_dev, ex. `./deploy/pousse.sh`, `./git-issues/wiki-migrate-docs.sh`. Les chemins absolus dans `conf.json` pointent vers les dépôts des projets.
**Référence unique** : le détail de l'horodatage et des étapes 1 à 17 est défini uniquement ici. Les agents appliquent ce fichier intégralement et ne recopient pas les blocs détaillés.
À la fin de toutes réponses il faut obligatoirement afficher :
1. **Horodatage et contexte obligatoires pour tous les agents** : à chaque exécution d'un agent (pas seulement en clôture), horodater (date et heure, format explicite ou ISO 8601) et afficher ou logger :
- **Projet et branche** : **projet** = id résolu par MAIL_TO ou AI_AGENT_TOKEN (config dans `projects/<id>/`). **Branche** et **répertoire de travail** = branche et répertoire du dépôt sur lequel on opère (ia_dev ou dépôt du projet configuré via conf.json, ex. `git branch --show-current`, `pwd`).
- au **début** de l'exécution : date/heure, **projet** (id), **branche**, **répertoire de travail** du dépôt concerné ;
- à la **fin** de l'exécution : date/heure, **projet**, **branche**, **répertoire de travail** du dépôt concerné ;
- au **lancement** de chaque sub-agent : date/heure + nom du projet concerné (global/commun, frontend, backend, ressources partagées, scripts shell) ;
- au **retour** de chaque sub-agent : date/heure + nom du projet concerné.
2. Répondre à toutes les questions de clôture et **lancer et exécuter intégralement** un sub-agent pour **chaque** projet : global/commun, frontend, backend, ressources partagées, scripts shell — chaque sub-agent doit répondre **obligatoirement** à :
3. **Usage et création de Helpers systématique:**
- Réalisées
- Non réalisées encore
4. **Texte i18n systématique + `.secrets/<env>/env-full` (obligatoire) :**
- Réalisées
- Non réalisées encore
5. **Fallback interdits obligatoire:**
- Réalisées
- Non réalisées encore
6. **Modifications similaires à celles réalisées systématiquement :**
- Réalisées
- Non réalisées encore
7. **Optimisation / mutualisation / centralisation systématique:**
- Réalisées
- Non réalisées encore
- Si « Non réalisées encore » : justification obligatoire par périmètre (voir `.smartIde/agents/closure-point-7-justification.md`).
8. **Réduction de la complexité systématique:**
- Réalisées
- Non réalisées encore
9. **Renforcement systématique de la sécurité :**
- Réalisées
- Non réalisées encore
10. **Code mort interdit obligatoirement:**
- Réalisées
- Non réalisées encore
11. **Lint corrigé obligatoirement :**
- Réalisées
- Non réalisées encore
12. Lister ce qu'il reste à faire (puces)
13. Réalise le "Non réalisées encore"
14. réalise le reste à faire.
15. Si il n'a pas été lancé avant, lancer l'agent `.smartIde/agents/push-by-script.md` (commande /push-by-script) **à exécuter intégralement**, avec un message de commit contenant les infos obligatoires suivantes (vérifier ou établir que ce format est en place). Voir `.smartIde/agents/push-by-script.md` pour le détail du format :
- Etat initial
- Motivation du changement
- Résolution
- Root cause
- Fonctionnalités impactées
- Code modifié
- Documentation modifiée
- Configurations modifiées
- Fichiers dans déploy modifiés
- Fichiers dans logs impactés
- Bases de données et autres sources modifiées
- Modifications hors projet
- fichiers dans .smartIde/ modifiés
- fichiers dans .secrets/ modifiés
- nouvelle sous sous version dans VERSION
- CHANGELOG.md mise à jour (oui/non)
16. Afficher le texte du commit.
## Preparer au maximum à l'aide d'outils et de scripts
En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (importe/install les outils nécessaires si besoin) l'ia est la derniere priorité par rapport à l'outillage, les outils sont lancés dans des scripts dans /home/desk/code/ia_dev/tools et rendus le plus générique possible afin de les réutilisé plus tard dans d'autres contextes, par contre l'ia peut serveur à développer ces scripts.