Aller au contenu

Rapport final — FW-REPO-STRUCTURE-001

Date : 2026-05-23 Branche : main Périmètre exécuté : strictement celui du ticket. Aucun import documentaire. Aucun mkdocs.yml. Aucun fichier Forge core touché.


Résumé

L'arborescence cible définie au §12 de FW-AUDIT-EXISTING-001 est en place. Les documents internes Forge-web ont été déplacés dans docs/meta/. Le dossier docs/forge/ est créé mais vide (prêt pour l'import de FW-DOCS-IMPORT-001). Le doublon index.before-forge-web-links.html a été supprimé après vérification d'identité stricte. LICENSE est créé. Le .gitignore est durci sans perte de règles existantes.

Aucun commit n'a été créé (le ticket ne le demande pas — à valider/grouper par l'utilisateur).

Toutes les opérations Git utilisent git mv / git rm afin de préserver l'historique des fichiers déplacés/supprimés.


Source documentaire locale

Vérification en lecture seule effectuée sur le poste (aucune copie, aucune modification) :

test -d /home/roger/Projets/Forge/docs
 Source docs Forge présente

Caractéristiques de la source à la date du ticket (2026-05-23) :

Mesure Valeur
Chemin absolu /home/roger/Projets/Forge/docs/
Fichiers .md à la racine 47
Sous-dossiers (adr/, entities/, reference/, starters/, history/, testing/, roadmap/, project/, contributing/, security/, stylesheets/, static/, quarkdown/) 13
Volume total ~4,3 Mo
Dernière modification observée 2026-05-22
État Git côté Forge core main, propre

Source documentaire locale canonique future :

/home/roger/Projets/Forge/docs/

Règle d'usage actée pour les tickets suivants :

  • Lecture autorisée depuis Forge-web (Forge et Forge-web cohabitent sur la même machine).
  • Import contrôlé en liste blanche autorisé à partir de FW-DOCS-IMPORT-001.
  • Copie globale interdite : pas de rsync -a, pas de cp -r à la racine.
  • Modification de Forge interdite : Forge-web n'écrit jamais sous /home/roger/Projets/Forge/.
  • Aucun import n'est fait par ce ticket.

Fichiers créés

Fichier Rôle
LICENSE Licence propre à Forge-web (le framework Forge a la sienne séparément)
docs/forge/.gitkeep Marqueur du dossier cible de l'import documentaire (vide à ce stade)
docs/audits/FW-REPO-STRUCTURE-001.md Ce rapport final

Dossiers créés (vides ou consacrés à un futur usage) :

  • docs/meta/ (reçoit les fichiers déplacés ci-dessous)
  • docs/forge/ (réservé à la doc Forge importée — vide)
  • docs/audits/ (créé par FW-AUDIT-EXISTING-001, conservé)

Aucun autre dossier n'a été créé : scripts/, infra/, notes/ existaient déjà avec leur .gitkeep.


Fichiers déplacés

Via git mv (l'historique est préservé, Git détecte le rename à 100 %) :

Source Cible
docs/01-architecture-generale-forge-web.md docs/meta/01-architecture-generale-forge-web.md
docs/02-creation-depot-forge-web.md docs/meta/02-creation-depot-forge-web.md

Aucune modification de contenu de ces deux fichiers — ils ne contenaient aucun lien Markdown relatif vers d'autres fichiers du dépôt (seulement des chemins shell dans des blocs de code et des URLs absolues), donc le déplacement n'a brisé aucun lien interne.

Mise à jour des liens cassés dans FW-AUDIT-EXISTING-001.md (§8.2) : deux références ../../docs/0X-...md ont été corrigées en ../meta/0X-...md.


Fichiers supprimés

Fichier Justification
sources/forge-landing/index.before-forge-web-links.html Vérification cmp stricte contre index.original.html : identique au bit près. Le fichier n'apportait aucune information distincte et entretenait une confusion sur le snapshot de référence.

Conservé : sources/forge-landing/index.original.html (snapshot unique de la landing Forge core, à valeur de traçabilité).


.gitignore

Avant : 27 lignes, 6 sections. Après : 35 lignes, 8 sections.

Ajouts (aucune règle existante retirée) :

+ # Caches
+ .cache/

+ # Node / front toolchain
+ node_modules/

  # Environnements et secrets
  .env
  .env.*
+ !.env.example
  *.key
  *.pem
  *.crt
+ cert.pem
+ key.pem
  secrets/
  .envrc

Points notables :

  • !.env.example permet d'ajouter un fichier d'exemple non sensible à l'avenir sans qu'il soit ignoré par les règles .env.*.
  • cert.pem et key.pem sont déjà couverts par *.pem et *.key, mais sont listés explicitement pour rappeler la leçon de l'audit (Forge core en contient à sa racine — risque concret en cas d'import naïf).
  • node_modules/ ajouté en prévision d'éventuels outils front (Tailwind CLI, etc.) — pas encore utilisés mais probables.

Vérifications

Arborescence finale (find . -maxdepth 3 -type f)

./.claude/hooks/forge-write-if-new.sh        (hors périmètre — hook local, non versionné)
./.claude/settings.json                       (hors périmètre — config locale, non versionnée)
./.gitignore                                  M (modifié)
./LICENSE                                     ?? (nouveau)
./README.md                                   (inchangé)
./docs/.gitkeep                               (résiduel — pourra être retiré quand le dossier ne sera plus considéré vide ; non gênant)
./docs/audits/FW-AUDIT-EXISTING-001.md        (mis à jour : §8.2)
./docs/audits/FW-REPO-STRUCTURE-001.md        (ce rapport)
./docs/forge/.gitkeep                         (nouveau, dossier vide réservé)
./docs/meta/01-architecture-generale-forge-web.md   (déplacé)
./docs/meta/02-creation-depot-forge-web.md          (déplacé)
./infra/.gitkeep                              (inchangé)
./notes/.gitkeep                              (inchangé)
./public/index.html                           (inchangé)
./public/static/tailwind.css                  (inchangé)
./scripts/.gitkeep                            (inchangé)
./sources/forge-landing/index.original.html   (inchangé)

git diff --check

EXITCODE=0

Aucun problème de whitespace ou de conflit non résolu.

Hash de l'identité du doublon supprimé

cmp sources/forge-landing/index.original.html \
    sources/forge-landing/index.before-forge-web-links.html
→ STRICTLY_IDENTICAL

Fichiers Forge core touchés

0

Aucune lecture en écriture, aucune modification, aucun déplacement sous /home/roger/Projets/Forge/.


État Git

 M .gitignore
R  docs/01-architecture-generale-forge-web.md -> docs/meta/01-architecture-generale-forge-web.md
R  docs/02-creation-depot-forge-web.md -> docs/meta/02-creation-depot-forge-web.md
D  sources/forge-landing/index.before-forge-web-links.html
?? .claude/
?? LICENSE
?? docs/audits/
?? docs/forge/

Lecture :

  • 1 modification (.gitignore durci)
  • 2 renames détectés à 100 % (déplacements vers docs/meta/)
  • 1 suppression (doublon landing)
  • 3 nouveautés à ajouter : LICENSE, docs/audits/ (contenant les deux rapports), docs/forge/ (vide avec .gitkeep)
  • 1 nouveauté hors périmètre : .claude/ — hook local du projet, à laisser non versionné (à confirmer par l'utilisateur s'il souhaite l'inclure dans .gitignore ou non — non traité ici car non demandé par le ticket)

Branche : main. Aucun commit créé par ce ticket. La mise en commit (idéalement deux commits — un pour la structure, un pour LICENSE/gitignore — ou un seul groupé) reste à la main de l'utilisateur.

Commande de commit suggérée (à exécuter manuellement, non exécutée par cet agent) :

git add .gitignore LICENSE docs/forge/.gitkeep docs/audits/
git add -A docs/meta/ docs/01-architecture-generale-forge-web.md docs/02-creation-depot-forge-web.md
git add sources/forge-landing/index.before-forge-web-links.html
git commit -m "chore(repo): align structure (FW-REPO-STRUCTURE-001)"

Limites restantes

Ce qui n'est volontairement pas fait dans ce ticket et reste à faire ensuite :

  1. mkdocs.yml toujours absent → traité par FW-MKDOCS-INIT-001.
  2. requirements-docs.txt toujours absent → traité par FW-MKDOCS-INIT-001.
  3. docs/forge/ est vide → rempli par FW-DOCS-IMPORT-001.
  4. notes/ reste vide (seulement .gitkeep) → rempli par FW-NOTES-RECREATE-001.
  5. infra/ reste vide (seulement .gitkeep) → enrichi par FW-DEPLOY-PREP-001 / FW-CADDY-CONFIG-001.
  6. scripts/sync-docs-from-forge.sh non créé → fait par FW-DOCS-IMPORT-001.
  7. scripts/build-site.sh non créé → fait par FW-BUILD-SCRIPT-001.
  8. docs/index.md (accueil MkDocs) non créé → fait par FW-MKDOCS-INIT-001.
  9. docs/.gitkeep est devenu redondant (docs/ contient maintenant meta/, forge/, audits/) mais a été laissé — sa suppression sera triviale au prochain ticket.
  10. public/index.html non modifié : le ticket l'interdisait sauf nécessité, et aucune nécessité n'est apparue (les chemins relatifs ./docs/... restent valides puisque la structure cible publie la doc sous /docs/).
  11. Aucun commit créé : la stratégie de commit reste à décider par l'utilisateur (groupé ou séparé).
  12. Le dossier non versionné .claude/ (hooks/settings locaux) n'a pas été ajouté au .gitignore — il sort du périmètre de ce ticket et reste à arbitrer.

Prochain ticket recommandé

FW-MKDOCS-INIT-001 — Initialiser MkDocs dans Forge-web

Pré-requis désormais satisfaits :

  • arborescence cible en place ;
  • docs/forge/ réservé et vide (n'interférera pas avec la première compilation MkDocs minimale) ;
  • docs/meta/ isole la doc interne ;
  • docs/audits/ accueille les rapports ;
  • .gitignore ignore déjà site/ (build MkDocs) ;
  • source documentaire locale /home/roger/Projets/Forge/docs/ identifiée et accessible en lecture.

Décision rappelée par l'audit : ne pas court-circuiter par un import documentaire avant MkDocs. L'ordre reste : structure → MkDocs vide mais valide → import documentaire.

Périmètre attendu pour FW-MKDOCS-INIT-001 (à confirmer dans son propre ticket) :

  • créer mkdocs.yml minimal (theme material, langue fr, site_url provisoire) ;
  • créer requirements-docs.txt (3 lignes, copie de Forge core) ;
  • créer une docs/index.md minimale ("Documentation Forge-web — en construction") ;
  • exécuter mkdocs serve localement et vérifier qu'il sert sans erreur ;
  • ne pas importer la doc Forge ;
  • ne pas déployer.

Puis seulement après :

FW-DOCS-IMPORT-001 — Importer en liste blanche depuis /home/roger/Projets/Forge/docs/

  • script scripts/sync-docs-from-forge.sh avec liste blanche explicite ;
  • import vers docs/forge/ uniquement ;
  • audit/correction des liens internes (caucrogegit.github.io/Forge/) ;
  • aucun secret, aucun .env, aucun code applicatif Forge importé.