first commit
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
# Audit backlog GitHub — Ben-to (plan prod / domaines)
|
||||
|
||||
Date de référence : 2026-04-26. Repo : `kazerlelutin/ben-to`.
|
||||
|
||||
## Architecture (rappel)
|
||||
|
||||
| Rôle | URL |
|
||||
|------|-----|
|
||||
| App web (Solid / Vite) | `https://ben-to.fr/` |
|
||||
| Livre / ancienne vitrine | `https://book.ben-to.fr/` (bascule depuis `ben-to.fr`) |
|
||||
| Contenus recettes | Dépôt Git (`ressources/bentext`, `ressources/public`) — build hors ligne |
|
||||
|
||||
Liens de partage recette : `window.location.origin` + `/r/{base}/{variant}` — cohérent avec le domaine où l’app est servie (`ben-to.fr`).
|
||||
|
||||
## Issues MVP existantes (#1–#6)
|
||||
|
||||
| # | Titre | État | Lecture « traité vs restant » |
|
||||
|---|--------|------|--------------------------------|
|
||||
| 1 | MVP: fondations monorepo Solid + Capacitor | **CLOSED** | Traité. |
|
||||
| 2 | MVP: pipeline .bentext vers JSON canonique | **CLOSED** | Traité (`build-recipes`, sources locales). |
|
||||
| 3 | MVP: Builder 3 étapes base → variante → recette | **OPEN** | Fonctionnel dans le dépôt (builder, partage, filtres) ; issue à fermer ou à réduire au scope « polish / accessibilité / edge cases ». |
|
||||
| 4 | MVP: offline-first + sync PocketBase | **OPEN** | Non aligné avec le front web actuel (pas d’intégration PocketBase visible dans `apps/web`) ; backlog produit ou à reclarifier. |
|
||||
| 5 | MVP: qualité/tests et sécurité CI | **OPEN** | CI racine active (lint, typecheck, unit, int, e2e, lighthouse) ; issue à fermer ou à limiter aux « gaps » (ex. mobile-release placeholder). |
|
||||
| 6 | MVP: delivery CapRover + release mobile | **OPEN** | Web déployable (`Dockerfile`, `captain-definition`) ; release mobile CI encore placeholder dans `.github/workflows/mobile-release.yml`. |
|
||||
|
||||
## Nouvelles issues (plan)
|
||||
|
||||
Créées sur GitHub via [`create-backlog-prod-issues.sh`](create-backlog-prod-issues.sh) (nécessite `gh` + `jq` authentifiés) :
|
||||
|
||||
| Thème | Titres (recherche dans les issues) |
|
||||
|--------|-------------------------------------|
|
||||
| Meta | `[Meta] Audit backlog prod — avril 2026` (#7) |
|
||||
| Catalogue / assets | `Catalogue — icônes bases…`, `Catalogue — icônes pour toutes les variantes`, `Assets — placeholders couvertures…` (#8–#10, titres pouvant évoluer) |
|
||||
| Play / Android | `Play Store — compte…`, `fiche produit`, `URL politique`, `Data safety`, `Android — signature release…` (#11–#15) |
|
||||
| Optionnel | `Tech — i18n domaines…` (#16) |
|
||||
|
||||
Relancer `./scripts/github/create-backlog-prod-issues.sh` : les titres déjà ouverts sont **ignorés** (pas de doublon).
|
||||
Executable
+166
@@ -0,0 +1,166 @@
|
||||
#!/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é."
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REPO="${1:-kazerlelutin/ben-to}"
|
||||
|
||||
gh issue create -R "$REPO" -t "MVP: fondations monorepo Solid + Capacitor" -b "Mettre en place workspaces, architecture feature-first, scripts qualité."
|
||||
gh issue create -R "$REPO" -t "MVP: pipeline .bentext vers JSON canonique" -b "Parser ressources/bentext, générer recettes multilingues et corrélation assets."
|
||||
gh issue create -R "$REPO" -t "MVP: Builder 3 étapes base -> variante -> recette" -b "Progression, filtre, quantités, partage/impression."
|
||||
gh issue create -R "$REPO" -t "MVP: offline-first + sync PocketBase" -b "Queue locale, stratégie last-write-wins, reprise réseau."
|
||||
gh issue create -R "$REPO" -t "MVP: qualité/tests et sécurité CI" -b "Unit/int/e2e, Gherkin, audits sécurité, lighthouse."
|
||||
gh issue create -R "$REPO" -t "MVP: delivery CapRover + release mobile" -b "Déploiement web automatique et pipeline de release Android/iOS."
|
||||
Executable
+30
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env bash
|
||||
# Crée les 3 issues post-MVP sur GitHub (nécessite : gh auth login).
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
cd "$ROOT"
|
||||
|
||||
if ! command -v gh >/dev/null 2>&1; then
|
||||
echo "Installez GitHub CLI : https://cli.github.com/" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
repo_args=()
|
||||
if [[ -n "${GITHUB_REPOSITORY:-}" ]]; then
|
||||
repo_args=( -R "${GITHUB_REPOSITORY}" )
|
||||
fi
|
||||
|
||||
gh issue create "${repo_args[@]}" \
|
||||
--title "[Refactor] Builder — découpage SOLID et responsabilités claires" \
|
||||
--body-file "${ROOT}/docs/tickets/issue-builder-solid.body.md"
|
||||
|
||||
gh issue create "${repo_args[@]}" \
|
||||
--title "[Archi] Supprimer les index.ts barrel et verrouiller par règle projet" \
|
||||
--body-file "${ROOT}/docs/tickets/issue-no-index-barrels.body.md"
|
||||
|
||||
gh issue create "${repo_args[@]}" \
|
||||
--title "[SEO] Métadonnées OG/Twitter par recette (/r/...)" \
|
||||
--body-file "${ROOT}/docs/tickets/issue-seo-recipe-og.body.md"
|
||||
|
||||
echo "OK — 3 issues créées."
|
||||
Reference in New Issue
Block a user