feat: A20 phase 3 LOT 1 — shell + library migres, harnais csp_preview vert (v7.38.0)
Ajout : - e2e/csp_preview.spec.js — apercu CSP strict SANS deployer : le build officiel @alpinejs/csp (e2e/fixtures/alpine.csp.js, 0 eval) est servi a la place de alpine.min.js par interception Playwright ; toute expression que le parseur maison ne digere pas = pageerror (filet). Premiere surface VERTE : library (composant lie, icones SVG via Alpine.effect, recherche ouverte + focalisee, 0 erreur). Changed : - 16 composants x-data="fn()" enregistres via Alpine.data (registre = seule resolution du build CSP, probe « Undefined variable » ; scripts classiques executes pendant le parsing => alpine:init toujours joint) : appState, libraryPage, workspacesPage, editorState, board x4, settings/import/table_view/team_load/trash/workspace/welcome/accounts/ card_detail. - base.html (shell) migre : x-effect document.* -> syncSidebarClass(), $nextTick(arrow) -> initSidebarSort(), window.FlowDeck.* -> fdCreatePage/fdCreateFolder/fdGwRefresh, Object.keys/Math.min/ window.innerWidth dans x-for et :style -> sidebarSections()/ sectionMenuPos() — tout = simple appel de methode. - x-html restants du shell -> x-init + Alpine.effect : icone agent, carte projet, library x3 ; recherche library -> toggleSearch() (Alpine.nextTick) ; openMoveSelected() pour Object.keys en expression. - eslint : 70 warnings -> 0/0 (globals getCsrf depuis A38 ph1, /* exported openCardDetail */ + /* global owner, repo */, 3 ;; residuels). suite **1093/1093** · ruff OK · eslint 0/0 · E2E 3/3 (csp_preview + smoke x2) · docs a jour (ROADMAP ph3 LOT 1, CHANGELOG, WORKLOAD, VERSION)
This commit is contained in:
@@ -1,5 +1,44 @@
|
||||
# Changelog - FlowDeck
|
||||
|
||||
## v7.38.0 (2026-10-01) — A20 phase 3 LOT 1 : shell + library migres
|
||||
|
||||
### Added
|
||||
|
||||
- **`e2e/csp_preview.spec.js`** — aperçu CSP strict SANS déployer : le
|
||||
build `@alpinejs/csp` (fichier officiel, `e2e/fixtures/alpine.csp.js`)
|
||||
est servi **à la place** de `alpine.min.js` par interception Playwright ;
|
||||
tout échec du parseur maison = `pageerror` (filet). **Première surface
|
||||
verte : library** (composant lié, icônes SVG rendues via `Alpine.effect`,
|
||||
recherche ouverte + focalisée, 0 erreur console/page).
|
||||
|
||||
### Changed
|
||||
|
||||
- **Composants `x-data="fn()"` → registre `Alpine.data(...)`** (15 +
|
||||
`appState` + `libraryPage`) : le build CSP ne résout que le registre
|
||||
(probe : globale window → `Undefined variable`) — scripts/classiques
|
||||
chargés pendant le parsing = `alpine:init` toujours joint à temps.
|
||||
- **base.html (shell) migré** : `x-effect document.*` → `syncSidebarClass()`,
|
||||
`$nextTick(arrow)` → `initSidebarSort()`, `window.FlowDeck.*` →
|
||||
`fdCreatePage/fdCreateFolder/fdGwRefresh`, `Object.keys`/`Math.min`/
|
||||
`window.innerWidth` dans `x-for`/`:style` → `sidebarSections()`/
|
||||
`sectionMenuPos()` — toutes les formes = simple appel de méthode.
|
||||
- **x-html restants du shell** → `x-init` + `Alpine.effect` :
|
||||
icône agent (`bindAgentIcon`), carte projet (`bindProjectIcon`),
|
||||
library ×3 (`bindHtmlIcon`/`bindHtmlItem`), recherche library
|
||||
(`toggleSearch` avec `Alpine.nextTick`), `openMoveSelected` (library).
|
||||
- **eslint : 70 warnings → 0/0** : `getCsrf` (helper A38 ph1) déclaré dans
|
||||
les globals du config, `/* exported openCardDetail */` +
|
||||
`/* global owner, repo */` (app.js), 3 `;;` résiduels de la conversion
|
||||
A38 supprimés.
|
||||
|
||||
### Notes
|
||||
|
||||
- Portes A20 ph3 : surfaces restantes = settings, local_workspace,
|
||||
gitea_workspace, page_editor, board (partiels), agent_panel, import,
|
||||
welcome, accounts, trash, team_load, workspace, table_view, card_detail ;
|
||||
**bascule réelle** (retrait `unsafe-eval`) = quand csp_preview est vert
|
||||
sur toutes les pages principales.
|
||||
|
||||
## v7.37.0 (2026-10-01) — A20 : htmx allowEval off + plan Alpine CSP (phase 3)
|
||||
|
||||
### Changed
|
||||
|
||||
Reference in New Issue
Block a user