Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .claude/skills/repas-front-dev/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ Utiliser `<UiTextInput capitalize-first …/>` (ADR 0018) : la première lettre

Passer par `useCopyRecipeAction` (`src/features/recipes/`) : la copie ne navigue pas, un message confirme, le bouton de la recette passe à « Copiée » (`copiedRecipes`, en mémoire, vidé par `forgetAccountData`). Sur la fiche, le jeu d'actions dépend de la propriété déduite de SES recettes (`mine | other | unknown`) : jamais d'action tant qu'elle est inconnue, « Copier » seul pour un autre, `PlanButton`/Modifier/Supprimer pour soi (ADR 0017, amendement du 2026-10-30).

### 4.6 La version commune d'une recette Marmiton

Voir `CLAUDE.md` (« Version commune… », MAR-005) : `useRecipeStance` pour savoir à qui est une fiche, `findOwnCopy` pour la copie de l'administrateur, `useDeleteRecipe(true)` quand l'écran dit lui-même ses refus. Mot à l'écran : « version commune ».

## 5. Definition of Done

- [ ] `make check` vert (lint, format, `api-check`, types, tests) ; `make quality` avant la PR ; seuil de couverture non abaissé
Expand Down
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ L'image de production ne contient ni nom de domaine ni secret ; ne jamais en ajo
- **Pâques et registre de saisons** ([ADR 0014](docs/adr/0014-theme-saisonnier-paques-et-registre-de-saisons.md)) : « Prairie & œufs » du dimanche de Pâques moins 21 jours au lundi de Pâques inclus (date CALCULÉE par `easterSunday()`, recopiée dans `public/theme-init.js`) ; `season.ts` porte un **registre** `DEFINITIONS` (clé, couleur de barre, règle de dates) dont dérivent `Season`, `SEASONS` (ordre de l'année), `currentSeason()` et le tableau équivalent de `theme-init.js` : une saison nouvelle = une entrée dans chacun, ses fichiers, ses blocs CSS, ses libellés, une ligne de la table de `season.spec.ts`, une du tableau de couleurs de `seasonTokens.spec.ts` (bandeau et fond, clair et sombre) et une de la boucle « pour chaque saison » de `e2e/theme-season.spec.ts`.
- **Galette & crêpes et Saint-Valentin** ([ADR 0015](docs/adr/0015-themes-de-la-galette-et-de-la-saint-valentin.md)) : « Or & bleu roi » (`galette`, du 6 janvier au 2 février) et « Rose & cœur » (`valentin`, du 7 au 14 février), deux entrées du registre `DEFINITIONS` (`SEASONS` : `galette, valentin, paques, halloween, noel`) sans aucune autre mécanique ; leur or et leur rose clair ne portent jamais de texte.
- **Été et automne** ([ADR 0016](docs/adr/0016-themes-de-l-ete-et-de-l-automne.md)) : « Soleil & mer » (`ete`, du 21 juin au 31 août) et « Forêt & feuilles » (`automne`, du 1er septembre au 14 octobre, la veille d'Halloween), deux entrées du registre `DEFINITIONS` (`SEASONS` : `galette, valentin, paques, ete, automne, halloween, noel`) ; leurs scènes n'ont ni soleil ni nuage (ils vivent dans le héros et le coin) et leur accent ne porte jamais de texte.
- **Version commune d'une recette Marmiton (MAR-005, ADR 0037 du back, amendement du 2026-11-08)** : la recette Marmiton sans propriétaire est modifiée et supprimée par l'ADMINISTRATEUR seul, avec l'éditeur ordinaire ; le mot à l'écran est « version commune » (jamais « neutre », « sans propriétaire » ni « originale »). `recipeStance.ts` / `useRecipeStance` disent à qui est une fiche (`mine | other | common | unknown`) : un utilisateur ordinaire suit `canEdit` du back sans attendre la liste de ses recettes ; pour l'administrateur (`canEdit` vrai partout) la liste de SES recettes tranche, et la version commune est une recette Marmiton (`sourceUrl`) qui n'est la copie d'aucune autre (`originalId` nul), la fiche n'en disant pas plus. Sa copie : le back ne rend que `alreadyCopied` (liste « Recettes des autres », administrateur seul) ; `ownCopy.ts` la retrouve parmi ses recettes du type, de même nom, confirmée par `originalId` (« Ma copie » et « Ta copie » ; introuvable : la version commune s'ouvre). Sur la fiche de la commune : bandeau, Modifier seul bouton principal, Copier ou Ta copie, « Supprimer cette recette » tout en bas, pas d'ajout à la liste, de favori ni d'interrupteur « secrète » ; sur SA copie, l'administrateur a « Ouvrir la version commune » (`originalId`). Un 409 à la suppression (la commune est dans une liste de courses) ouvre sa propre fenêtre (`useDeleteRecipe(true)`, hors message commun des écritures). **L'éditeur ajoute aux options l'ingrédient de chaque ligne existante absent de la liste** (nom et rayon de la ligne) : les ingrédients du propriétaire réservé ne sont dans la liste de personne. Tests : `RecipeCommon.spec.ts`, `recipeStance.spec.ts`, `e2e/recipe-common.spec.ts`.
- **Pas de chaîne en dur** dans un composant : textes dans `vue-i18n` (français seul).
- **Pas de logique métier** dans les composants : elle reste dans le back. Le front affiche, saisit, appelle l'API et relit l'état.
- **Types de l'API générés, jamais écrits à la main** : un changement de contrat doit casser la compilation, pas la production.
Expand Down
2 changes: 1 addition & 1 deletion api/contract.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"repository": "kcharignon/repas",
"ref": "e2e0f8cc3c7f4016afe6d34893bf6fce7c8419ee",
"ref": "a39f9cf114e138f638f65751b552dfb3411bbcd3",
"path": "docs/api/openapi.json"
}
Loading
Loading