---
suivi: 1415
date: 2026-09-02
sujet: aide_editeur_curseur_medias
chantier: aide
type: feature
statut: poussé
hash: 10edaed0
fichiers:
  - resources/js/Components/Aide/ArticleEditeur.vue
  - app/Http/Controllers/AideController.php
  - tests/Unit/AideEditeur1415SourceTest.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
  - docs/suivi/SUIVI_1415_editeur_aide_curseur_medias.md
---

## PROMPT ENVOYÉ

SUIVI #1415 — éditeur centre d’aide : insertion toolbar à la fin (pas au curseur) + images cassées dans l’aperçu avant enregistrement.

## FICHES LUES

Aucune fiche aide récente pertinente (leçon #1380–#1384 rappelée dans le prompt : mesurer avant de corriger).

## ÉTAPE 0

### Défaut 1
- Composant : `ArticleEditeur.vue` — barre L563–596, helpers L100–208.
- Cause : clic toolbar → blur textarea → `selectionStart` perdu ; fallback `contenu +=` ou position fin.
- Tous les boutons passaient par `insererAuCurseur` / `entourerSelection` déjà prévus mais inopérants après blur.

### Défaut 2 — ÉTABLI PAR LE CODE
- Upload : `POST /aide/admin/articles/{id}/medias` → `AideMediaStorageService::stocker` (disk `local`, `article_id` dès l’upload).
- Service fichier : `GET /aide/medias/{id}/fichier` → `AideController::mediaFichier` L127+.
- Contrôle : `articleVisiblePourUtilisateur` exige `is_published` **avant** GS_DSI → **403** sur brouillon.
- Images visibles après publish puis unpublish : cohérent avec **cache navigateur** d’un 200 (hypothèse secondaire) ; cause primaire = 403 brouillon.

## SYNTHÈSE

- Toolbar : mémorisation sélection + `mousedown.prevent` ; sélection réutilisée (B, H1/H2, liste, lien, callouts) ; Étapes/Tableau/Image : au curseur sans libellé sélection.
- Médias : bypass `aide.gestion` dans `mediaFichier` uniquement ; `AideVisibiliteService` inchangé (Aktor OK) ; `Cache-Control: private, no-cache`.

## DÉPLOIEMENT-TEST

```bash
git pull origin main
php artisan optimize:clear
php artisan view:clear
php artisan journal:sync
```

## LEÇON

Une image « cassée » dans un aperçu auth n’est pas forcément un bug de markdown : vérifier le code HTTP de `/aide/medias/{id}/fichier` avant de toucher le renderer.
