58 lines
1.8 KiB
Markdown
58 lines
1.8 KiB
Markdown
# FEATURE — “Proposer” (édition par paragraphe → issue Gitea)
|
||
|
||
Dernière mise à jour : 2026-02-01
|
||
|
||
Cette feature permet à un lecteur de proposer une correction/amélioration d’un paragraphe, en générant une issue pré-remplie dans Gitea.
|
||
|
||
---
|
||
|
||
## 0) Objectif fonctionnel
|
||
Depuis une page chapitre :
|
||
1) clic sur **Proposer** sur un paragraphe
|
||
2) choix #1 (type)
|
||
3) choix #2 (state/catégorie selon UI)
|
||
4) ouverture d’un seul onglet vers Gitea : `/issues/new?...`
|
||
5) issue pré-remplie avec :
|
||
- chemin / URL / ancre
|
||
- texte actuel (citation)
|
||
- champs “Proposition / Justification”
|
||
6) l’utilisateur valide, et le runner/CI traite.
|
||
|
||
---
|
||
|
||
## 1) Dépendances de configuration (critique)
|
||
|
||
Le lien Gitea est construit à partir de variables publiques injectées au build Astro :
|
||
|
||
- `PUBLIC_GITEA_BASE` (ex: `https://gitea.archicratie.trans-hands.synology.me`)
|
||
- `PUBLIC_GITEA_OWNER` (**casse sensible**, ex: `Archicratia`)
|
||
- `PUBLIC_GITEA_REPO` (ex: `archicratie-edition`)
|
||
|
||
### Symptômes si mauvais
|
||
- mauvais repo → 404
|
||
- redirect login inattendu
|
||
- création d’issues impossible
|
||
|
||
---
|
||
|
||
## 2) Contrat “une seule ouverture d’onglet”
|
||
Le flow ne doit jamais ouvrir deux onglets.
|
||
|
||
### Contrat
|
||
- pas de `window.open(...)`
|
||
- un seul `a.target="_blank"` (ou équivalent) déclenché
|
||
- sur click : handler doit neutraliser les propagations parasites
|
||
|
||
## Diagnostic (canonique)
|
||
|
||
Le diagnostic détaillé est centralisé dans `docs/TROUBLESHOOTING.md` pour éviter les doublons.
|
||
|
||
- 404 / non autorisé / redirect login :
|
||
- voir : `TROUBLESHOOTING.md#proposer-404`
|
||
- cause la plus fréquente : `PUBLIC_GITEA_OWNER/REPO` faux (souvent casse)
|
||
|
||
- Double onglet :
|
||
- voir : `TROUBLESHOOTING.md#proposer-double-onglet`
|
||
- cause la plus fréquente : double handler (bubbling) ou `window.open` + `a.click()`
|
||
|