Toutes les modifications notables de ce projet sont consignees dans ce fichier.
Le format suit Keep a Changelog et le projet adhere au Semantic Versioning.
- Auto-génération de la page
Mentions légalesdans tous les builds : texte LCEN/RGPD pré-rédigé citant la Coopérative Code Commun comme entité technique. Variables auto-remplies depuis frontmatter racine + .env (domaine, éditeur, licence, plateforme, repo, source Docs). Page placée danscontent/source/{root}/mentions-legales/, accessible via URL directe (/mentions-legales/) et lien dans le footer. La page n'apparaît PAS dans la nav du header/sidebar : elle est orpheline volontairement pour ne pas polluer le menu (@JonasFW13). - Injection automatique de la page Mentions légales dans
sitemap.xmlau moment du--deploy(pour que Google et les autres moteurs l'indexent malgré son absence de la nav). Nouvelle fonction_inject_sitemap_entry()danszensical_backend.py(@JonasFW13). - Cle frontmatter
legal_auto: non(racine) pour désactiver l'auto-génération (@JonasFW13). - Override explicite encore possible via
legal_url:(frontmatter racine) qui pointe vers une page Mentions légales custom rédigée par l'éditeur (@JonasFW13).
- Le bloc
legal_urldans le toml utilise désormais la section[project.extra](et non[extra]) pour que Zensical le mappe correctement surconfig.extracôté Jinja (@JonasFW13).
- Le lien Mentions légales du footer n'apparaissait pas car
[extra]n'est pas reconnu par Zensical — corrigé via[project.extra](@JonasFW13).
0.6.7 - 2026-05-10
Cette version regroupe une refonte SEO complete (Open Graph, Twitter Cards, Schema.org JSON-LD enrichi, BreadcrumbList automatique), un correctif critique de chargement .env en mode editable, et l'ajout d'un skill Claude Code pour l'audit editorial pre-build. Inclut les bumps intermediaires 0.6.2 a 0.6.6.
- Generation systematique d'
og:title,og:description,og:url,og:image,og:typepar page (@JonasFW13). - Twitter Cards (
twitter:title,twitter:description,twitter:image) par page (@JonasFW13). - Schema.org JSON-LD
WebSite(home) etWebPage(sous-pages) par page (@JonasFW13). - Type Schema.org specialise via la cle frontmatter
schema_type:(EducationalOrganization,NGO,Organization,Article,Event,FAQPage...) (@JonasFW13). - Auto-detection du type Schema :
event_date:->Event,date+author->Article, sinonWebPage(@JonasFW13). - Schema.org
Organizationenrichie aveclogo(URL absolue),sameAs[](reseaux sociaux),contactPoint,author(@JonasFW13). - Schema.org
EventavecstartDate,endDate,location Place,organizervia les clesevent_date:,event_end:,event_location:(@JonasFW13). - Schema.org
ArticleavecdatePublished,author Person,imageviadate:etauteur·ice:/author:(@JonasFW13). - BreadcrumbList JSON-LD automatique sur toutes les sous-pages depuis
page.ancestors(@JonasFW13).
- Generation automatique de
robots.txt(avecSitemap:) ethumans.txta chaque build (@JonasFW13). - Copie automatique de ces fichiers dans
content/site/au deploiement (@JonasFW13). - Generation automatique du fichier
CNAMEau deploiement quandSITE_URLpointe sur un domaine custom — preserve le mapping GitHub/GitLab Pages a chaque force-push (@JonasFW13). - Skip auto pour
*.github.io,*.gitlab.io,localhost(pas de CNAME inutile) (@JonasFW13).
- Cle
description:injectee automatiquement dans le YAML si absente (depuissummary/résumé/excerpt, tronquee a 160 caracteres) (@JonasFW13). - Cle
title:toujours injectee dans le YAML (la fallback Zensical "Index" disparait) (@JonasFW13). - Generation automatique d'un H1
# {title}au debut du markdown si aucun heading present (regex multiline pour eviter les H1 dupliques) (@JonasFW13). - Nouvelles cles supportees par le moteur :
iframe_title:— H2 semantique au-dessus de l'iframe (a11y) (@JonasFW13).legal_url:(frontmatter racine) — lien Mentions legales dans le footer (@JonasFW13).sameAs:(frontmatter racine) — liste URL des reseaux sociaux pour Schema.org (@JonasFW13).contact_email:,contact_type:(frontmatter racine) — Schema.orgContactPoint(@JonasFW13).event_date:,event_end:,event_location:— Schema.orgEvent(@JonasFW13).schema_type:— override explicite du type Schema.org (@JonasFW13).
@media (prefers-reduced-motion: reduce): desactive animations et transitions pour les utilisateurs qui le demandent (WCAG 2.3.3) (@JonasFW13).aria-hidden="true"sur les tags decoratifs des tiles (faux affordance corrige) (@JonasFW13).<section class="iframe-embed">avecaria-labelledbyouaria-labelselon presence deiframe_title:(@JonasFW13).home-tile__contenttoujours visible sur mobile (@media (hover: none)), evite la troncature inutile (@JonasFW13).- Override
partials/copyright.html: ajoute un lien "Mentions legales" dans le footer siconfig.extra.legal_urlconfigure (@JonasFW13).
- Nouveau skill Claude Code
.claude/skills/docs-content-curator/: audit editorial pre-build via le MCPlasuite-docs(frontmatter, images, SEO, donnees structurees, mentions legales). Score /100, rapport ✅⚠️ ❌💡, patches optionnels avec confirmation. Lien MCP : https://github.com/CoopCodeCommun/lasuite-docs-mcp (@JonasFW13).
- Nouveau fichier
docs/MOTEUR.md: documentation technique exhaustive (12 sections couvrant pipeline, API Docs, cache, frontmatter, formats, backend Zensical, template phantom, SEO, deploiement, pieges Zensical, choix d'archi, evolutions futures) (@JonasFW13). CLAUDE.mdreecrit : commandes a jour, 11 pieges connus avec solutions, mention du skill content-curator (@JonasFW13).
- Reecriture du frontmatter YAML genere via
yaml.safe_dumpau lieu d'un format string manuel : garantit un YAML valide meme avec des valeurs contenant:,", accents ou caracteres speciaux (@JonasFW13). - Override
htmltitledans le template phantom : evite la duplication<title>X - X</title>sur la home quandpage.meta.title == config.site_name(@JonasFW13). og:typeest desormaisarticlepour les sous-pages avecschema_typeArticle-like,websitesinon (@JonasFW13).- Schema.org
urlsur les sous-pages utilisepage.canonical_urlau lieu de la racine du site (@JonasFW13). - Copie recursive de
overrides/->content/overrides/danssetup_zensical_backend: permet le packaging de sous-dossiers commepartials/(@JonasFW13). - Detection "le markdown a-t-il deja un H1 ?" via
re.search(r'^#\s', content, re.MULTILINE)au lieu dere.matchsur la premiere ligne — evite les H1 dupliques quand le markdown commence par une image (@JonasFW13).
- Critique :
load_dotenv()chargeait le mauvais fichier.envquand docs2static est utilise en install editable depuis un autre projet (uv add --editable ../docs2static). Cause :find_dotenv()par defaut remonte depuis le fichier appelant (inspect.stack), pas depuis le cwd. Fix : appel explicite aload_dotenv(find_dotenv(usecwd=True))dansmain()(deplace hors du module-level) (@JonasFW13). - Bug "YAML rendu en clair sur la home" : le frontmatter avec
title: 'ZenDocs : Parent'(le:dans la valeur) cassait le parser YAML strict de Zensical, qui laissait alors le bloc---...---danspage.contentau lieu d'extraire les meta. Resolu viayaml.safe_dump(@JonasFW13). - Bug "double H1 sur sous-pages" : un markdown commencant par
![image]()puis# Titreetait considere "sans H1" et le moteur prefixait un nouveau# {title}(@JonasFW13). - Le
og:titlereflete maintenant le titre de la page courante (auparavant : toujours lesite_name) (@JonasFW13). - Le
<meta name="description">est differencie par page (auparavant : fallbacksite_descriptionglobal identique partout) (@JonasFW13). - Le burger menu mobile n'est plus masque par le sidebar primary desktop (
@media (min-width: 76.25em)) (@JonasFW13).
- Ajout de
pyyaml>=6.0aux dependencies explicites (utilise paryaml.safe_dump) — auparavant transitive via Zensical (@JonasFW13).
0.6.1 - 2026-03-09
- Configuration des extensions Markdown dans
pyproject.toml:admonition,pymdownx.details,pymdownx.superfences(@achabran). - Bloc
home-bodysupplementaire dansphantom/overrides/main.htmlqui convertit les backslashes simples (\) en sauts de ligne<br>via le filtrereplace ... | safe(@achabran).
- Correction du filtre de remplacement des backslashes :
\\\\->\\pour cibler les backslashes simples du contenu (@achabran). - Syntaxe des extensions Markdown : passage de
key = {}akey = truedans[project.markdown_extensions](@achabran).
0.6 - 2026-02-27
- La variable d'environnement
SITE_URLest desormais prioritaire pour la configuration desite_url; commentaires mis a jour et regex ajustee pour le matching multiligne (@JonasFW13).
0.5 - 2026-02-27
- Templates Phantom et Solid State, avec composants SASS pour la mise en page et le style (@JonasFW13).
- Template Phantom : ameliorations d'accessibilite, optimisation des elements
heroet des tuiles (tiles) (@JonasFW13).
0.3.0 - 2026-02-26
- Metadonnees Open Graph et Twitter Cards (@JonasFW13).
- Support iframe ameliore (embed) (@JonasFW13).
- Nettoyage des URLs dans le Markdown source (@JonasFW13).
- Workflow GitHub Actions de publication PyPI (retire puis re-iterations en debug) (@JonasFW13).
0.2.0 - 2026-02-26
- Support des iframes via la cle
iframedans le frontmatter (@JonasFW13). - Option
TEMPLATE(env / frontmatter) pour selectionner un template de homepage (@JonasFW13). - Workflow GitHub Actions de publication automatique sur PyPI (@JonasFW13).
- Integration du template Phantom pour la homepage (refactor + enrichissement metadonnees) (@JonasFW13).
- Style et structure de la homepage, mise en place des metadonnees automatiques (logo, hero_image, excerpt) (@JonasFW13).
- Restructuration en module
docs2static/(@JonasFW13).
- Suppression du module
docs2dsfr(non utilise) (@JonasFW13).
- Backend Zensical : navigation, generation de
zensical.toml, deploiement git par SSH (@JonasFW13). - Support GitLab Pages en plus de GitHub Pages (@JonasFW13).
- Support du frontmatter
draft/brouillon: exclusion des sous-arbres marques comme brouillon (@JonasFW13). - Mode
--test-zensicalpour tester le rendu interactif (@JonasFW13). - Premier squelette d'API et orchestration du pipeline Docs API -> Markdown -> site statique (@JonasFW13).
- Initialisation du depot, licence Apache 2.0 (@JonasFW13).
Merci aux personnes qui ont contribue a ce projet :
- @JonasFW13 — auteur principal, conception du pipeline, backend Zensical, templates, CI/CD.
- @achabran — extensions Markdown (admonition, details, superfences), traitement des sauts de ligne dans la homepage Phantom.
Le projet est porte par CoopCodeCommun et inspire par le travail de Sylvain Zimmer.