5.9 KiB
5.9 KiB
AGENTS.md — Instructions obligatoires du dépôt ObsiGate
Ces instructions s'appliquent à toute intervention (humaine ou IA) sur ce dépôt. Documentation et réponses en français.
Règle n°1 — Méthode de livraison unique
Avant toute tâche (fonctionnalité, bug, refactor), lire et appliquer
docs/DELIVERY_WORKFLOW.md (Definition of Done).
Aucune tâche n'est terminée avant que sa checklist soit complète et le CI vert
(jobs lint, test, security, build, e2e de .gitea/workflows/ci.yml).
Avant de commencer
- Lire
docs/ROADMAP.md(travail à venir + index) etdocs/ISSUES_TODOLIST.md(bugs). - Identifier ou créer l'ID stable (
#NNpour une feature,BUG-NNNpour un bug — jamais réutilisé) et passer son statut à « en cours » avant de coder.
Architecture (ce qui n'est pas obvious)
- Backend : FastAPI/Python 3.11, point d'entrée
backend/main.py(endpoints + rendu markdown), index en mémoire (indexer.py,search.py), watcher (watcher.py), auth dansbackend/auth/. Pas de base de données : JSON dansdata/. - Frontend : vanilla JS zéro framework, zéro build npm (
frontend/app.js,index.html,style.css). Ne pas ajouter de dépendances npm ni d'étape de build. - Desktop : Tauri (Rust) dans
desktop/;tauri.conf.jsonembarquebackend/**etfrontend/**depuisdesktop/— les scripts de build font le staging (copie) avantcargo tauri build, sinon le build échoue. - i18n : tout texte d'interface doit exister en FR et EN
(
frontend/locales/fr.json+en.json).
Vérifications locales (pwsh, à faire passer avant tout commit/push)
# Backend (venv à la racine)
.\.venv\Scripts\python.exe -m pytest tests/
.\.venv\Scripts\python.exe -m ruff check backend/
.\.venv\Scripts\python.exe -m mypy backend/ --ignore-missing-imports
# Frontend : scripts Node à exécuter directement (pas de runner)
node tests/frontend/validate-imports.mjs
node tests/frontend/unit.test.mjs
# Tests JSDOM : node_modules dans tests/frontend/ (npm install là-bas si absent), ex :
node tests/frontend/pane-manager.test.mjs
# E2E (si UI touchée, ~10 min) : reproduit le job CI e2e (port 2029, auth désactivée)
npm run test:e2e # prérequis : uv, Node >= 20, npx playwright install chromium
bash scripts/run-e2e-local.sh -g "nom du test" # filtre / --headed
# Windows sans bash exploitable (WSL HS, git-bash bloqué par App Control) :
npm run test:e2e:ps # équivalent PowerShell, mêmes conditions que le CI
pwsh -File scripts/run-e2e-local.ps1 -PlaywrightArgs @('-g','nom du test')
- Un seul test backend :
.\.venv\Scripts\python.exe -m pytest tests/test_search.py -q. - Sélection E2E : vérifier chaque sélecteur dans le DOM réel avant de l'utiliser dans un
test ; tout test nouveau/modifié doit passer en local avant push ; pas de contournement
qui masque la flakiness (
waitForTimeoutarbitraires, fallbacks silencieux). - La suite E2E doit finir à 100 % sans s'appuyer sur les retries. Jamais de
git pushavant que les 5 étapes locales soient vertes.
Version & hooks (pièges)
VERSION(racine) = source unique de vérité (SemVer), incrémenté automatiquement à chaque commit par le hook.githooks/prepare-commit-msg—feat→ mineur,!:/BREAKING CHANGE→ majeur, sinon correctif. Le même commit resynchronisepackage.json, le desktop Tauri,README.md/README.fr.md,docs/ROADMAP.mdet publie la section[Unreleased]duCHANGELOG.mden[X.Y.Z] — date; tagvX.Y.Zcréé au commit, publié au push (push.followTags).- Hooks obligatoires, à installer une fois par clone :
scripts/install-hooks.sh(sinon la version ne suit plus et le CI échoue via le garde-foutests/test_version.py). - Le rattachement des fichiers de bump se fait par un
--amendimmédiat : le SHA affiché pargit commitchange — ne pas s'y fier. - Commit sans incrément (exceptionnel) :
SKIP_VERSION_BUMP=1 git commit …. - Ne jamais réécrire une version déjà publiée dans le CHANGELOG ; jamais de détail dupliqué entre Roadmap et CHANGELOG.
À la fin de chaque tâche (obligatoire)
- Tests unitaires ajoutés/mis à jour (correctif sans test de non-régression = pas terminé).
- Toutes les vérifications locales ci-dessus vertes (
E2Esi UI). - Documentation mise à jour :
CHANGELOG.md([Unreleased]),docs/ROADMAP.md(statut + index), fichedocs/features/oudocs/archive/,docs/ISSUES_TODOLIST.md(si bug), guide utilisateur i18n FR/EN + README si impact utilisateur, docstrings +response_modelsi API. - Commit conventionnel référençant l'ID (
feat: … #12), puis push et CI vert.
Cartographie documentaire
| Sujet | Fichier |
|---|---|
| Méthode de livraison / DoD | docs/DELIVERY_WORKFLOW.md |
| Version livrée (source unique) | VERSION + scripts/bump_version.py |
| Travail à venir + index | docs/ROADMAP.md |
| Historique des versions | CHANGELOG.md |
| Conception par feature | docs/features/<slug>.md |
| Guides d'utilisation | docs/GUIDES/ |
| Archive du complété | docs/archive/COMPLETED_v1-v2.md |
| Bugs / TODO | docs/ISSUES_TODOLIST.md |
| Build & releases | docs/DEVELOPMENT_AND_RELEASES.md |
| Standards de code | docs/CONTRIBUTING.md |
Conventions
- Commits :
type: description—feat,fix,perf,refactor,docs,style,chore,test. - Sécurité : tout chemin fichier fourni par l'utilisateur passe par
_resolve_safe_path(). - Ne jamais committer de secrets, clés ou tokens (
.envjamais committé ; secrets dansdata/api_keys.jsonou variablesOBSIGATE_*). - Respecter le style du code existant (ruff/mypy 0 erreur ; CSS variables, pas de couleurs
hardcodées ;
safeCreateIcons()plutôt quelucide.createIcons()direct).