fix: BUG TOPBAR — boutons du header servis échappés sur toutes les pages (v7.42.0)
FlowDeck CI / lint (push) Canceled after 0s
FlowDeck CI / docker (push) Canceled after 0s
FlowDeck CI / test (push) Canceled after 0s

Cause racine : {% set right_actions = '…' ~ fd_icon(…) ~ '…' %} —
fd_icon est une macro → Markup, et Markup.__radd__/__add__ ÉCHAPPE ses
arguments str → tous les segments littéraux sortent entité-és ("/<),
et le |safe de _header:141 est no-op sur un Markup déjà échappé.
Régression probable depuis A10 (activation d'autoescape).

Fix (5 templates, forme idiomatique) : conversion en block-set
{% set right_actions %}…{{ fd_icon(…) }}…{% endset %} — source brute,
interpolation Markup brute : gitea_workspace, page_editor,
page_editor_collection, workspace, workspaces. (Piège script : regex
greedy multi-lignes avalait le set suivant → matcher sur UNE ligne.)

Tests :
- NOUVEAU tests/test_topbar_right_actions.py (permanent) : /workspaces
  doit servir class="topbar-btn" parsé et ZÉRIE entité "
- gate éditeur CSP : assertion .star-btn RÉTABLIE (les boutons rendent)
- debug temporaires (DBGCLS/DBGVAL) retirés

suite **1094/1094** (+1 nouveau test) · ruff OK · E2E **7/7** (5
csp_preview + 2 smoke) · docs à jour (CHANGELOG détail, ROADMAP bug →
CORRIGÉ)
This commit is contained in:
2026-10-02 15:39:57 -04:00
parent e4552c3763
commit 48b5551b93
13 changed files with 64 additions and 14 deletions
+29
View File
@@ -1,5 +1,34 @@
# Changelog - FlowDeck
## v7.42.0 (2026-10-01) — 🐛 BUG TOPBAR CORRIGÉ (boutons du header en texte brut)
### Fixed
- **Les `right_actions` du topbar étaient servis ÉCHAPPÉS sur TOUTES les
pages** (entities `"`/`<` → boutons Share/Star/Settings/Login en
texte brut). **Cause racine** : `{% set right_actions = '…' ~ fd_icon(…) ~ '…' %}`
— `fd_icon` est une **macro → `Markup`**, et `Markup.__radd__/__add__`
**échappe ses arguments `str`** → tous les segments littéraux sortent
entité-és ; le `|safe` de `_header:141` est then no-op sur un Markup déjà
échappé. Découvert en cherchant l'échec du gate éditeur CSP (v7.41.0),
reproductible partout (`curl /workspaces`).
- **Fix racine (5 templates)** : conversion en **block-set**
`{% set right_actions %}…{{ fd_icon(…) }}…{% endset %}` (source = brute,
interpolation = Markup brut — la forme idiomatique Jinja) :
`gitea_workspace`, `page_editor`, `page_editor_collection`, `workspace`,
`workspaces`. Piège du script : regex greedy multi-lignes = set avalé →
matcher **une ligne**.
- **Test permanent** `tests/test_topbar_right_actions.py` : `/workspaces`
doit contenir `class="topbar-btn"` parsé et ZÉRIE entité `"`.
- Gate éditeur : l'assertion `.star-btn` **ré-ajoutée** (les boutons
rendent à nouveau).
### Notes
- Probable régression depuis A10 (activation d'autoescape) : les `~`
étaient des no-op avant, Markup.__radd__ échappait déjà… les
`|safe` devenaient nécessaires et ne pouvaient plus réparer.
## v7.41.0 (2026-10-01) — A20 phase 3 LOT 3b : gitea + agent + éditeur verts
### Changed