{
  "canon": "refetik",
  "purpose": "Couche design & artefacts réutilisables EtikPharma (chartes, templates, registres, prompt-packs).",
  "updated": "2026-07-31",
  "authority": "DECISION.md",
  "schema": "/registry.schema.json",
  "types": ["charte", "template", "registre", "prompt-pack", "pointeur"],
  "status_values": ["canonique", "a-importer", "deprecie", "tombstone"],
  "entries": [
    {
      "id": "charte-apothicaire",
      "type": "charte",
      "kind": "reference",
      "title": "Charte apothicAIre (magazine IA & officine)",
      "version": "2.0",
      "status": "canonique",
      "paths": ["charte/apothicaire.md"],
      "raw": "/charte/apothicaire.md",
      "tags": ["charte", "apothicaire", "print", "pdf", "fraunces", "ibm-plex"],
      "note": "Tokens couleur/typo + logo mortier & pilon. Le bloc JSON `tokens` du .md est la source unique des valeurs : le template `fiche-apothicaire` le lit à l'exécution au lieu de recopier les couleurs."
    },
    {
      "id": "fiche-apothicaire",
      "type": "template",
      "kind": "runnable",
      "title": "Générateur de fiches PDF apothicAIre (HTML -> Chromium)",
      "version": "2.1",
      "status": "canonique",
      "paths": ["templates/fiche-apothicaire/"],
      "raw": "/templates/fiche-apothicaire/render-fiches.js",
      "runner": {
        "cmd": "npm install && node render-fiches.js",
        "manifest": "templates/fiche-apothicaire/package.json",
        "out": "templates/fiche-apothicaire/out/*.pdf"
      },
      "tags": ["template", "generateur", "pdf", "fiche", "playwright"],
      "note": "Données = fiches.json ; couleurs et polices lues dans charte/apothicaire.md (aucune valeur dupliquée). Si le Chromium de Playwright manque, bascule automatiquement sur le Google Chrome installé."
    },
    {
      "id": "fiche-apothicaire-outillage",
      "type": "template",
      "kind": "runnable",
      "title": "Générateur de fiches PDF apothicAIre — série outillage (sujets techniques)",
      "version": "1.0",
      "status": "canonique",
      "paths": ["templates/fiche-apothicaire-outillage/"],
      "raw": "/templates/fiche-apothicaire-outillage/render-fiche.js",
      "runner": {
        "cmd": "node render-fiche.js",
        "manifest": "templates/fiche-apothicaire-outillage/package.json",
        "out": "templates/fiche-apothicaire-outillage/out/*.pdf"
      },
      "tags": ["template", "generateur", "pdf", "fiche", "playwright", "outillage", "claude-code"],
      "note": "Fiches A4 sur des sujets TECHNIQUES (commandes, outils de dev, concepts) sous identité apothicAIre, hors dossier « 5 outils au banc d'essai ». Premier exemplaire versé le 2026-07-21 : « claude doctor », 2 pages. Couleurs et polices lues à l'exécution dans charte/apothicaire.md, comme le kit voisin — aucune valeur recopiée. Accent = le VERT SIGNATURE, les 5 accents nommés de tokens.accents restant réservés aux outils du dossier n°01. Sections avis/note/verbatims, prix, PAYG et concurrence SUPPRIMÉES du gabarit : sans objet pour un sujet technique, et les remplir reviendrait à inventer (le README du kit voisin l'interdit déjà pour les verbatims). Promesse ↔ Réalité CONSERVÉ, c'est le gabarit qui porte le mieux ce type de sujet. ÉTAT : le contenu vit encore EN DUR dans l'objet `D` du script, délibérément — avec un seul exemplaire, le sortir en JSON reviendrait à deviner ce qui varie d'une fiche à l'autre ; le kit voisin n'a pu se structurer que parce qu'il avait cinq fiches sous les yeux. À la 2e fiche : extraire `D` dans un fiches.json local. Playwright et les polices ne sont PAS dupliqués : cherchés ici, puis chez ../fiche-apothicaire (~200 Mo de Chromium). PIÈGE VÉCU le 2026-07-21 : refetik/package.json déclare \"type\": \"module\", donc tout .js du repo est traité comme module ES et `require` n'y existe pas (ReferenceError au lancement) ; ce qui sauve les deux kits est leur package.json LOCAL sans champ \"type\", qui les ramène en CommonJS — ne pas le supprimer, ne pas y ajouter \"type\": \"module\"."
    },
    {
      "id": "charte-etikpharma-maison",
      "type": "charte",
      "kind": "reference",
      "title": "Charte maison EtikPharma (corail/teal)",
      "version": "1.4",
      "status": "canonique",
      "paths": ["charte/etikpharma-maison.md"],
      "raw": "/charte/etikpharma-maison.md",
      "tags": ["charte", "etikpharma", "maison", "corail", "teal", "petrole", "fraunces", "inter"],
      "note": "Versée le 2026-07-19 (arbitrage Mehdi) depuis ~/Documents/charte-etikpharma/styleguide-v4.html, qui devient une archive. DEUX primaires à égalité — corail et teal — chacune en 3 niveaux (base / -deep / -soft). La divergence annoncée ici jusqu'au 2026-07-18 était FAUSSE : elle comparait #1F5764 à #F26A45 comme si c'était pétrole vs corail, alors que ce sont teal-deep et corail-deep, deux niveaux de deux familles différentes. firefly-studio est donc CONFORME. Le styleguide nommait #1F5764 simplement --deep, sans préfixe de famille : renommé teal-deep ici, repointer les consommateurs. Vraies divergences restantes, hors charte : #E8604C (icone-maker, etikpharma-visuels) et #1B3A4B (etikpharma-visuels) — constat repris du 2026-07-18, NON revérifié à la source. Le violet #6C4BF0 est documenté mais volontairement HORS du bloc tokens : alternative d'un projet ponctuel, pas une couleur signature. v1.1 (2026-07-20) ajoute la couche MOUVEMENT, requise pour la vidéo programmatique : grammaire couleur arbitrée (le teal porte le fond, le corail porte l'accent — un seul élément corail à l'écran à la fois), trois easings maison dont le défaut est une décélération franche sans dépassement [0.16,1,0.3,1], trois durées de référence en frames à 30 fps, et l'échelle typographique (84/44/32 px pour 1080 px de large, Fraunces/Inter/Space Grotesk). Cette section ne répète PAS ce que Remotion fournit déjà (courbes, règle enter/exit, safe areas) : elle pointe timing.md et video-layout.md des skills officielles. v1.2 (2026-07-20) = ce qu'un premier rendu JUGE A L'OEIL a corrige. Les trois durees inventees etaient fausses toutes les trois : dur-base 18->30, decalage 8->14 et promu en jeton distinct stagger-frames (un decalage n'est pas une duree), amplitude-px 28->64 (cause sous-estimee : le deplacement etait trop court pour se voir). ease-enter INCHANGEE, testee contre deux courbes a depassement et preferee aux deux — le \"trop sage\" venait de la vitesse, pas de la courbe. QUATRE jetons de mouvement sur cinq sont desormais valides a l'oeil (dur-micro, dur-base, stagger, amplitude) ; seul dur-ample-frames reste derive, il exige une sequence multi-plans. Les -soft sont TRANCHES : interdits comme aplat porteur de sens, autorises comme couleur de texte secondaire sur fond fonce. Manquent encore : logo/lockups (SVG jamais ouverts), la DENSITE en format vertical (repartir les groupes sur la hauteur aide, mais quatre lignes de texte ne remplissent pas un 9:16 — la reponse est la densite, pas la disposition), et la repartition -deep vs base sur support statique. v1.3 (2026-07-21) ajoute la BRANCHE CLAIRE, mesuree et non inferee : 6 ratios WCAG dont creme+teal-deep 7,71 (exactement le symetrique de creme sur teal-deep, deja mesure la veille sans que personne le voie), aplat corail+ink 6,04 et corail-soft+ink 12,45. Regle : sur fond clair le corail NE PORTE PAS DE TEXTE a aucune taille (2,30 et 2,90, sous le seuil des grands caracteres) — il devient sol, aplat ou filet, et y gagne en contraste. La contradiction datee entre parite (19/07, en-tete et Palette) et fond-accent (20/07, Mouvement) est TRANCHEE : la parite se joue ENTRE les plans, la rarete du corail DANS un plan. Regle neuve : quand une couleur porte de l information dans un schema, le decor ne peut plus l employer — vecu, une barre corail sur sol corail disparait a l instant exact de sa bascule. Corollaire : la charte mesure des paires texte/fond, un schema colore impose de mesurer aussi surface/fond. CORRECTIF v1.3 : dur-ample-frames reste DERIVE — une capsule a trois plans a bien ete produite mais ne l a pas employe, l occasion a ete manquee ; ne pas croire le jeton valide du seul fait qu une sequence multi-plans existe. Densite 9:16 partiellement repondue : un objet graphique porteur de sens remplit ce que le texte ne remplit pas ; reste ouvert le vide de debut de plan. v1.4 (2026-07-22) TRANCHE le FORMAT, et invalide une prediction de la v1.2. La densite a bien ete ajoutee (un schema porteur de sens, pas un ornement) et le 9:16 restait a moitie vide sur trois capsules livrees. La reponse n etait ni la densite ni la disposition mais le FORMAT : le contenu d une capsule (titre court, schema large, un paragraphe) occupe un carre, et le placer dans un cadre deux fois plus haut que large laisse la moitie inoccupee par construction. Comparaison rendue a contenu identique : 9:16 moitie vide, 4:5 environ 350 px de vide sous le header, 1:1 plein sans debordement sur le plan le plus charge. Regle : choisir le format d apres la FORME du contenu, jamais d apres la destination — un carton de titre tient en 9:16, une capsule explicative non. ref-width reste 1080 (la mise a l echelle depend de la largeur seule, rien a recalculer). Corollaire : sur une serie, un format mixte est pire que l un ou l autre ; reformater une piece deja validee est legitime pour l homogeneite, mais doit etre dit."
    },
    {
      "id": "prompts-video-courte",
      "type": "prompt-pack",
      "kind": "reference",
      "title": "Prompt-pack vidéos courtes avec Claude Code",
      "version": "1.3",
      "status": "canonique",
      "paths": ["prompts/video-courte.md"],
      "raw": "/prompts/video-courte.md",
      "tags": ["prompt-pack", "video", "remotion", "claude-code", "animation", "motion-design"],
      "note": "9 prompts ORDONNÉS qui implémentent un seul geste : verrouiller le style une fois, puis ne faire varier que l'action. L'ordre compte — attaquer la génération sans passer par la charte donne du propre mais générique. Le prompt `cost gate` est transférable tel quel à toute chaîne qui consomme des crédits, vidéo ou non. v1.1 (2026-07-20), après première mise en oeuvre réelle : commandes exactes vérifiées (--no-tailwind vient du skill officiel, le llms.txt l'omet) ; les skills sont scopées AU REPO, donc installer ne suffit pas — un agent lancé d'ailleurs réinvente des API sans aucun signal d'erreur ; versionner .agents/skills plutôt que le gitignorer (la restauration par lock est experimental_) ; lire video-layout.md du skill remotion-create AVANT d'écrire la charte, il couvre déjà la grammaire vidéo et le redire créerait une divergence. v1.2 (2026-07-20) : un reglage NUMERIQUE se tranche par comparaison, pas par description — face a un \"trop rapide\" ou \"trop sage\", rendre 2-3 temperaments coherents (duree + decalage + courbe + amplitude bougent ENSEMBLE) plutot que de proposer d'autres nombres. Un tour au lieu de cinq, et la conclusion fut contre-intuitive : la courbe accusee etait la bonne. v1.3 (2026-07-21), apres une capsule REJETEE DEUX FOIS SUR LE FOND : le pack outillait la forme et SUPPOSAIT le script deja ecrit — l etape 4 s ouvre sur Lis mon script alors qu aucune etape ne dit d en ecrire un. Etape 3bis ajoutee. Cout mesure de ce manque : deux modeles produits puis jetes (10 cartes de 12 s, 3 pilotes de 30 s), irreprochables sur la charte et les contrastes, rejetes sur le fond. La rigueur graphique ne rattrape jamais un script absent. Ajout aussi : le debit reel de Zephyr est 183 mots/min (une estimation a 130-150 se trompe de 25 pourcent) ; et deux pieges de calage vecus — prendre la FIN d une phrase pour son debut (7,9 s de retard) et faire DEMARRER une animation sur le beat au lieu de l y faire ATTERRIR. Aucun controle automatique ne voit ces decalages, ils sont invisibles sur image fixe. NUANCE sur le scope des skills : dans une session Claude Code, elles se chargent selon le CHEMIN DES FICHIERS edites et non le dossier de lancement — ca ne refute pas l avertissement d origine, qui visait un agent CLI, mais verifier lequel s applique."
    },
    {
      "id": "magazine-apothicaire",
      "type": "template",
      "kind": "reference",
      "title": "Gabarits du magazine « Au Comptoir de l'ApothicAIre » (maquette print A4)",
      "version": "1.0",
      "status": "canonique",
      "paths": ["templates/magazine-apothicaire/"],
      "raw": "/templates/magazine-apothicaire/README.md",
      "tags": ["template", "apothicaire", "magazine", "print", "a4", "html", "pdf", "chrome-headless"],
      "note": "Les 15 gabarits HTML du N°01 (juillet 2026, 20 pages) : maquette print A4 complète — @page 210x297mm, palette croquis-journal (crème #FBF6E4, ocre #C2712A, teal #0E9E8A réservé au « AI »), typo Didot / Hoefler Text / Charter / Futura — plus 2 mockups d'écran WhatsApp en CSS pur (l'IA-image massacre le texte : tout écran à texte exact se construit en HTML, jamais en génération d'image). IDENTITÉ VOLONTAIREMENT DIFFÉRENTE des fiches outil : voir charte-apothicaire § Périmètre — deux supports, deux identités, décision Mehdi du 2026-07-18, ne pas aligner l'un sur l'autre. Les ILLUSTRATIONS ne sont PAS versées (contenu daté, régénéré à chaque numéro via le skill etikpharma-visuels) : ouvrir un gabarit montre donc des images manquantes, c'est normal — la valeur est la maquette CSS. Chaîne de rendu : Chrome headless --print-to-pdf page par page, QA visuelle obligatoire (pdftoppm puis lecture de l'image), fusion pypdf, contrôle du compte de pages. DETTE CONNUE : la palette est recopiée dans le :root de chacun des 15 fichiers au lieu d'être lue depuis un jeton unique comme le fait fiche-apothicaire — à centraliser au prochain numéro. Recette éditoriale et technique complète : skill `apothicaire`."
    },
    {
      "id": "design-system-ui",
      "type": "pointeur",
      "kind": "reference",
      "title": "Design system COMPOSANTS / UI — canonique hors refetik (Claude Design)",
      "version": "1.0",
      "status": "canonique",
      "paths": ["pointeurs/design-system-ui.md"],
      "raw": "/pointeurs/design-system-ui.md",
      "tags": ["pointeur", "design-system", "composants", "ui", "claude-design", "etikpharma", "comptoir", "public"],
      "note": "Décision Mehdi du 2026-07-31 : les COMPOSANTS et l'UI sont canoniques dans Claude Design, refetik garde les CHARTES et les TEMPLATES PDF. Les deux périmètres ne se recouvraient pas — au moment de la décision refetik ne contenait aucun composant UI (2 chartes + 3 templates). Motif du déplacement : un design system porté par Claude Design est LU ET APPLIQUÉ au moment où l'écran se fabrique, là où un fichier de charte n'est consulté que si quelqu'un y songe. VÉRIFIÉ le 2026-07-31 sur le premier écran généré — le modèle a lu les fiches, NOMMÉ DE LUI-MÊME la famille retenue (« Comptoir »), appliqué la grammaire et pas seulement les teintes (chip actif pétrole vs navigation corail, en-têtes de tableau pétrole, KPI display + label mono), et repris une règle rédigée (« un tableau dense ne se réduit pas, il s'élague ») sur un cas qu'elle ne décrivait pas. ⚠️ SUIVI, PAS OPPOSABLE : le mécanisme est la LECTURE des fiches, pas un contrôle automatique — le linter d'adhérence de l'outil est vide et attend des composants de code non fournis, et un fichier de jetons CSS déposé à la racine n'est PAS récolté (essayé et mesuré le même jour). Conséquence pratique : ce qui est appliqué, ce sont les RÈGLES ÉCRITES dans les fiches — une fiche qui explique pourquoi vaut mieux qu'une fiche qui montre. Mesure qui a tranché : 21 fichiers de apps/ portaient encore le teal legacy v3 contre 10 en v4, alors qu'une feuille de style se déclarait « partagée » par six applications — le partage était DÉCLARATIF et jamais mécanique, aucun fichier ne l'importait. Contenu : un socle commun (couleurs de marque, typo, échelles) + DEUX familles assumées comme distinctes — « Comptoir » (dense, desktop, équipe : bordure 2px encre, ombres dures, échelle de rayons fermée, vocabulaire data) et « Public » (grand public, mobile-first : filet chaud 1px, ombre floue, rayon unique) — plus un groupe « Standards » portant les contraintes de flotte (app-shell ancré, auto-MAJ, bouton version, garde-fou de coût de build). Ce ne sont PAS deux versions d'un même système : bouton primaire teal ici et corail là, 8 rayons contre 1, ombre dure contre ombre floue. HIÉRARCHIE EN CAS DE CONFLIT : sur une couleur de marque ou un jeton de mouvement, charte/etikpharma-maison.md FAIT FOI — le design system UI en est un consommateur, pas un remplaçant. L'identifiant du projet reste dans le repo privé EtikPharma, jamais ici (DECISION.md § dépôt servi publiquement)."
    }
  ],
  "hors_perimetre_pointeurs": [
    { "quoi": "Référentiels données pharma (LPP, articles ameli, marché para, standards)", "ou": "Supabase — identifiants et schémas dans le repo privé, non publiés ici" },
    { "quoi": "Lexique dicodev", "ou": "app lexiquedev + DATA.terms" },
    { "quoi": "Domi Knows / souffleur, scrapers, corpus, apps metier", "ou": "repos dedies" }
  ]
}
