#!/usr/bin/env bash # Crée les issues GitHub du plan « Backlog GitHub, domaines et suite prod » # si aucune issue ouverte du même titre n’existe déjà. # Prérequis : GitHub CLI (`gh`) authentifié, `jq` installé. set -euo pipefail REPO="${1:-kazerlelutin/ben-to}" issue_exists() { local title="$1" local n n="$(gh issue list -R "$REPO" --state open --limit 500 --json title | jq --arg t "$title" '[.[] | select(.title == $t)] | length')" [[ "${n:-0}" -gt 0 ]] } create_if_absent() { local title="$1" local body_file="$2" if issue_exists "$title"; then echo "SKIP (déjà ouvert): $title" return 0 fi gh issue create -R "$REPO" -t "$title" -F "$body_file" -l enhancement echo "OK: $title" } TMP="$(mktemp -d)" trap 'rm -rf "$TMP"' EXIT # --- Meta audit --- cat >"$TMP/meta.md" <<'EOF' ## Synthèse audit backlog (scripts/github/BACKLOG-AUDIT.md) Voir le fichier **BACKLOG-AUDIT.md** dans `scripts/github/` du dépôt pour le tableau détaillé des issues #1–#6 et l’architecture `app` / `book` / contenus (`ressources/`). **Résumé :** #1 et #2 fermées ; #3–#6 ouvertes — interprétation : builder et CI largement avancés côté code ; PocketBase à reclarifier ; delivery mobile à compléter (signing / Gradle). Prochaine étape : traiter les nouvelles issues « API assets » et « Play » créées par le même plan. EOF create_if_absent "[Meta] Audit backlog prod — avril 2026" "$TMP/meta.md" # --- API / assets --- cat >"$TMP/api-bases.md" <<'EOF' ## Contexte Recettes et sprites sont **versionnés dans le dépôt** (`ressources/bentext`, `ressources/public/ingredient-sprites.bentext`). Il manque encore des tuiles cohérentes pour certaines bases canoniques. ## À faire - Fournir ou ajuster les **sprites / alias** pour les bases : **mandu**, **dan bing**, **muffin**, **madeleine** (même pipeline que les autres bases dans le catalogue). - Vérifier que `ingredient-sprites.bentext` et `npm run pipeline:recipes` reflètent les slugs / alias attendus. ## Critères - Les bases concernées affichent une icône correcte dans le builder après `npm run pipeline:recipes`. EOF create_if_absent "Catalogue — icônes bases manquantes (mandu, dan bing, muffin, madeleine)" "$TMP/api-bases.md" cat >"$TMP/api-variants.md" <<'EOF' ## Contexte Le catalogue expose de nombreuses variantes ; les icônes d’ingrédients / tuiles doivent être cohérentes pour toutes. ## À faire - Inventaire dans le dépôt des variantes / alias d’ingrédients nécessitant une entrée dans `ingredient-sprites.bentext`. - Couvrir **toutes les variantes** ou documenter une **règle de fallback** (placeholder, sprite générique) lorsque aucune tuile ne correspond. ## Critères - Aucune variante « cassée » visuellement dans le builder ; fallback explicite documenté. EOF create_if_absent "Catalogue — icônes pour toutes les variantes (+ fallback)" "$TMP/api-variants.md" cat >"$TMP/placeholders.md" <<'EOF' ## Contexte Certaines recettes n’ont pas encore de visuel final ; le build gère déjà des placeholders (`ressources/recipe-placeholder-covers`, logique dans `scripts/build-recipes.mjs`). ## À faire - Définir la **convention** (nommage, par locale ou unique) pour les couvertures manquantes. - Produire / brancher les **placeholders** dans le dépôt pour toutes les recettes sans image finale. ## Critères - Build sans trou visuel critique ; liste des recettes encore en placeholder documentée. EOF create_if_absent "Assets — placeholders couvertures recettes manquantes" "$TMP/placeholders.md" # --- Play / Android --- cat >"$TMP/play-account.md" <<'EOF' ## À faire - Créer le **compte développeur Google Play** (frais d’enregistrement one-shot). - Accepter les accords distributeur ; définir pays / zones de distribution. ## Références - `appId` : `com.kazerlelutin.bento` (`apps/mobile/capacitor.config.ts`). EOF create_if_absent "Play Store — compte développeur Google Play" "$TMP/play-account.md" cat >"$TMP/play-listing.md" <<'EOF' ## À faire - Fiche **Play Console** : nom, descriptions courte/longue, captures d’écran, icône haute résolution. - **Classification du contenu** (questionnaire Play). - Alignement avec la marque **Bento** / Ben-to. ## Package - `com.kazerlelutin.bento` — vérifier cohérence avec la fiche avant publication. EOF create_if_absent "Play Store — fiche produit (captures, descriptions, classement)" "$TMP/play-listing.md" cat >"$TMP/play-privacy.md" <<'EOF' ## À faire - Publier une **URL HTTPS** de politique de confidentialité (obligatoire Play). - Cohérence avec les mentions légales / confidentialité de l’app (`packages/shared/i18n`, pages statiques). ## Notes - Peut être servie depuis `ben-to.fr` (domaine apex de l’app) ou autre sous-domaine stable. EOF create_if_absent "Play Store — URL politique de confidentialité (HTTPS)" "$TMP/play-privacy.md" cat >"$TMP/play-data-safety.md" <<'EOF' ## À faire - Remplir le formulaire **Data safety** (données collectées, partagées, chiffrement, etc.). - Aligner sur le comportement réel : stockage local (constructeur), catalogue embarqué, mesure d’audience optionnelle (Matomo). ## Fichiers utiles - `apps/web/index.html`, `apps/web/src/infra/analytics.ts` EOF create_if_absent "Play Store — déclaration Data safety" "$TMP/play-data-safety.md" cat >"$TMP/play-signing.md" <<'EOF' ## À faire - **Keystore** upload / **Play App Signing**. - Pipeline **AAB** (`bundleRelease`) — aujourd’hui `.github/workflows/mobile-release.yml` ne fait qu’un placeholder après `mobile:sync`. ## Critères - Documenter release locale (Android Studio) ou CI avec secrets (`KEYSTORE_*`, etc.). EOF create_if_absent "Android — signature release + CI (remplacer placeholder mobile-release)" "$TMP/play-signing.md" # --- Optionnel (regroupement plan §4) --- cat >"$TMP/optional-infra.md" <<'EOF' ## Périmètre (optionnel / dette) - **i18n** : formulations `ben-to.fr` vs `book.ben-to.fr` dans `packages/shared/i18n/src/dictionary.ts` (depuis la migration vers le domaine apex, l’app n’est plus servie sur `app.ben-to.fr`). - **CORS** : pertinent seulement si un jour le catalogue ou des assets sont chargés en runtime depuis un autre domaine (hors périmètre actuel : tout est embarqué au build). - **Redirects** : migration utilisateurs `ben-to.fr` → `book.ben-to.fr` (SEO, signets). - **Matomo** : si activation du tracker complet → bandeau cookies + mise à jour privacy. Découper en sous-tickets si besoin. EOF create_if_absent "Tech — i18n domaines, CORS bentext runtime, redirects book, Matomo/cookies" "$TMP/optional-infra.md" echo "Terminé."