• feat: A20 — htmx allowEval off + plan Alpine CSP phase 3 scopé par probes (v7.37.0)
    FlowDeck CI / docker (push) Successful in 1m49s
    FlowDeck CI / lint (push) Successful in 1m55s
    FlowDeck CI / test (push) Successful in 15m4s

    bruno released this 2026-10-02 11:14:47 -04:00

    Changed :

    • htmx allowEval: false dans le meta htmx-config (base.html) : plus
      d'évaluation JS côté htmx (hx-on/hx-vars/hx-vals = 0 usage grep → zéro
      régression possible) ; unsafe-eval reste UNIQUEMENT pour Alpine standard.
    • Gate E20 renforcée : le smoke vérifie que Alpine.$data() lie un vrai
      composant [x-data] de la page (lien composant = cœur de toute bascule CSP).
    • sw.js : cache bump flowdeck-v7 (purge + re-precache après Inter).

    Probes (non conservés, retirés après mesure) — A20 phase 3 scopée :

    • Build @alpinejs/csp téléchargé et TESTÉ : 72 Ko, 0 eval/new Function,
      parseur d'expressions maison, tourne sous CSP strict (meta sans
      unsafe-eval) — le lint sélectif fonctionne.
    • Mais bloqué sur FlowDeck :
      (a) 13 expressions non parsables par la grammaire restreinte
      (arrows ×2, typeof ×1, new Date ×4, optional-chaining ×6 ;
      base, library, local_workspace, settings, gitea_workspace) —
      le gate E2E a attrapé la première : CSP Parser Error: Unexpected token: PUNCTUATION ")" ;
      (b) 24 x-html réactifs (icônes SVG + markdown agent + preview) =
      INTERDITS par le build CSP (innerHTML) → architecture d'icônes à
      reposer ;
      (c) scope des expressions CSP = données du composant uniquement
      (probe : Undefined variable: fmtDate / document) → chaque site
      devient une méthode Alpine.data enregistrée.
    • Conséquence : build CSP reverté (alpine.min.js ×3 templates + sw),
      unsafe-eval maintenu, fichier alpine.csp.min.js retiré (re-téléchargeable),
      assert test CSP de nouveau in. Plan de migration composant par composant
      (library → settings → local_workspace → gitea → base) + gate E2E par
      surface documenté dans ROADMAP (A20 phase 3).

    suite 1093/1093 · ruff OK · E2E 2/2 (dont assertion Alpine.$data)
    · docs à jour (ROADMAP A20 phase 3, CHANGELOG, WORKLOAD, VERSION)

    Downloads