Dépôt canonique Forge et récupération de commits¶
Document opérationnel. Verrouille la procédure de contrôle du dépôt de travail avant tout ticket Forge, et la procédure officielle de récupération si des commits ont été faits hors du dépôt canonique (projet généré, clone temporaire, environnement WSL secondaire…).
Audience : contributeurs (humains et agents IA) qui s'apprêtent à ouvrir un ticket Forge ou à porter des commits faits par erreur dans un autre dépôt.
Origine : ticket
GIT-RECOVERY-WORKFLOW-GUARD-001— après la release1.0.0-beta.11, plusieurs tickets ont été commités par erreur dans un projet généré WSL (~/Projets/forge-test-b11) avant d'être portés par patchs dans le dépôt canonique. Cette page rend la procédure officielle et reproductible.
1. Dépôt canonique Forge¶
Le seul dépôt de référence pour le framework Forge est :
| Champ | Valeur attendue |
|---|---|
| Chemin local | /home/roger/Projets/Forge |
| Branche par défaut | main (ou une branche ticket issue de main) |
Remote origin (fetch et push) |
git@github.com:caucrogeGit/Forge.git |
| Working tree | propre avant démarrage d'un ticket |
Tout commit Forge doit être créé dans ce dépôt. Aucun travail sur le framework ne doit être effectué dans :
- un projet généré par
forge new(présence d'un dossiermvc/à plat sans la structure complète du dépôt framework) ; - un dossier nommé
forge-test-*,forge-beta*,forge-sandbox-*; - un clone temporaire posé dans
/tmp/, un WSL secondaire, une VM d'essai ; - toute branche
master(Forge utilisemainexclusivement).
2. Checklist pré-ticket¶
À exécuter avant d'écrire la moindre ligne d'un nouveau ticket :
Critères pour valider le dépôt courant comme Forge canonique :
pwdcontient/home/roger/Projets/Forge;- la branche courante est
mainou une branche ticket (port/...,ticket/...) explicitement créée à partir demain; originpointe surgit@github.com:caucrogeGit/Forge.git(fetch et push) ;- le working tree est propre (
git status --shortne retourne rien).
Si l'un des critères n'est pas rempli, arrêter immédiatement. Ne pas continuer le ticket. Soit corriger le contexte (changer de dossier, basculer de branche, nettoyer le working tree), soit suivre la procédure de récupération de la section 4 si des commits ont déjà été créés hors du dépôt canonique.
3. Signes d'un mauvais dépôt¶
Indicateurs qui doivent déclencher un arrêt immédiat :
- branche courante =
master(Forge n'utilise pasmaster) ; - commit initial du type « based on Forge … » ou « generated by forge new » (c'est un projet généré, pas le framework) ;
- chemin courant sous
forge-test-*,forge-sandbox-*,/tmp/; git remote -vne fait pas apparaîtrecaucrogeGit/Forge.git(ou pointe vers un fork, un mirror ou un dépôt local) ;- présence d'un dossier
mvc/sans les dossierscore/,forge_cli/,packages/,tests/,docs/côte à côte (signe caractéristique d'un projet généré : seulmvc/est extrait).
Dans tous ces cas, on n'est pas dans Forge canonique. Les modifications faites ici ne seront pas reflétées dans la release publique du framework tant qu'elles n'auront pas été portées explicitement.
4. Procédure officielle de récupération¶
À appliquer si des commits ont été faits par erreur dans un dépôt secondaire (projet généré, WSL local, clone temporaire) et doivent être portés dans Forge canonique.
4.1 Ne pas continuer dans le mauvais dépôt¶
Premier réflexe : arrêter d'ajouter des commits dans le dépôt fautif. Continuer ne ferait qu'augmenter la dette à porter et le risque de divergence.
4.2 Exporter les commits avec git format-patch¶
Dans le dépôt source (le mauvais) :
<base> est le dernier commit présent aussi dans Forge canonique
(souvent origin/main au moment où le dépôt secondaire a été créé).
<head> est HEAD ou la branche locale fautive.
Les éventuels changements non commités (WIP) doivent être exportés
séparément (par exemple via git diff > /tmp/forge-recovery-patches/wip.patch)
et ne pas être appliqués automatiquement à l'étape 4.6 — ils sont
revus manuellement.
4.3 Copier les patchs vers la machine canonique¶
Adapter l'hôte / l'utilisateur selon l'environnement :
4.4 Créer une branche de portage dans Forge canonique¶
cd /home/roger/Projets/Forge
git switch main
git status --short # doit être vide
git switch -c port/recovery-$(date +%Y%m%d)
Le préfixe port/recovery-YYYYMMDD rend la branche identifiable comme
branche de portage temporaire.
4.5 Vérifier chaque patch avec git apply --check¶
Patch par patch, dans l'ordre d'export :
Si git apply --check échoue (conflits, contexte introuvable, fichiers
absents), ne pas forcer. Relire le patch, comprendre la divergence,
adapter manuellement.
4.6 Appliquer avec git am les patchs validés¶
git am préserve auteur, date et message original. Les patchs WIP
ne sont pas appliqués automatiquement : ils sont relus à la main,
recoupés en commits propres, puis intégrés via des commits explicites.
4.7 Valider avec les contrôles canoniques¶
Avant la fusion dans main, lancer les cinq validations Forge :
.venv/bin/python -m pytest -x -q
.venv/bin/python -m compileall -q .
.venv/bin/python -m ruff check .
.venv/bin/python -m mkdocs build --strict
git diff --check
Pour un portage purement documentaire, restreindre la suite pytest à
tests/meta (plus rapide) est acceptable, à condition que les commits
portés ne touchent que de la documentation et des tests méta.
4.8 Fusionner en fast-forward dans main¶
Le --ff-only garantit qu'il n'y a pas de commit de merge implicite
qui obscurcirait l'historique. Si le fast-forward échoue, c'est que
main a divergé pendant le portage — rebaser la branche de portage sur
main à jour, refaire les validations, puis retenter.
4.9 Pousser¶
Vérifier ensuite que les commits attendus apparaissent bien dans le log distant.
5. Interdits explicites¶
Pendant une récupération, jamais :
- merger directement un projet généré dans Forge canonique
(
git merge <chemin-vers-projet-généré>) — la structure ne correspond pas ; - copier-coller un gros diff manuel sans audit patch par patch ;
- appliquer un patch WIP automatiquement (
git am wip.patch) — le WIP est revu à la main et recoupé en commits explicites ; - continuer un ticket si le dépôt courant est ambigu (échec d'un seul critère de la section 2) ;
- travailler depuis un dossier
forge-test-*,forge-sandbox-*,/tmp/ou un projet généré pour modifier le core Forge ; - supprimer les patchs
/tmp/forge-recovery-patches/avant que les commits portés soient poussés et confirmés surorigin/main.
6. Pour aller plus loin¶
- Conventions internes de Forge — patterns opérationnels (audit avant action, tests, code, doc).
- Vue d'ensemble du contributeur — préparation de l'environnement, sélection du ticket, validations canoniques.
- Procédure de release — pour les tags officiels, qui ne sont jamais créés depuis un dépôt secondaire.
CLAUDE.md(racine du dépôt) — briefing IA, mentionne cette page comme étape 0 obligatoire avant tout ticket.