diff --git a/CLAUDE.md b/CLAUDE.md
index a96ebdd..c852d56 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -37,6 +37,7 @@ js/app.totp.js (TOTP RFC 6238 + TOTP/custom-field crypto — extrait §3.1)
js/app.favicon.js (favicon fetch/cache + faviconHost — extrait §3.1)
js/app.import.js (export container + import CSV/JSON — extrait §3.1)
js/app.backup.js (auto-backup planifié — extrait §3.1)
+js/app.health.js (vault health dashboard — extrait §3.1)
js/app.js (le reste : state, Bridge, api, UI…)
js/app.sync.js (WebDAV + merge — extrait §3.1, APRÈS app.js car
effet de bord top-level `Bridge.onWebdavResult = …`)
@@ -107,6 +108,7 @@ seule `api()` est stubbée).
| Favicons (fetch/cache, `faviconHost`) — extrait §3.1 | `js/app.favicon.js` |
| Import/export frontend (CSV/JSON parse, export container) — extrait §3.1 | `js/app.import.js` |
| Auto-backup frontend (planifié, chiffré) — extrait §3.1 | `js/app.backup.js` |
+| Vault health dashboard — extrait §3.1 | `js/app.health.js` |
| Sync frontend (WebDAV, snapshot, merge) — extrait §3.1 | `js/app.sync.js` |
| Argon2id vendé (bundle `@noble/hashes`, IIFE) | `js/argon2.js` |
| HTML racine | `index.html` |
diff --git a/CODE_AUDIT.md b/CODE_AUDIT.md
index fa30fac..f7d81ca 100644
--- a/CODE_AUDIT.md
+++ b/CODE_AUDIT.md
@@ -242,10 +242,14 @@ réécriture des call-sites, risque quasi nul vs conversion en modules ES).
**+7 tests `faviconHost`** (extraction hostname → décide quel domaine part
vers DDG). A révélé un commentaire faux (IPs « valides » alors qu'elles
sont rejetées par la règle TLD `[a-z]{2,}`) — corrigé.
-- `app.js` : 11 936 → **9 790 lignes** (6 modules sortis).
+- ✅ `js/app.health.js` extrait (vault health dashboard) — byte-for-byte
+ identique, chargé AVANT app.js (`auditCache`/`auditFilter` viennent avec,
+ résolus cross-fichier).
+- `app.js` : 11 936 → **9 545 lignes** (7 modules sortis).
- Suite de tests : 42 → **62 tests**.
-- Reste à extraire (grosses sections cohésives) : slideover, settings,
- quicksearch, autofill, vault-health…
+- Reste : slideover, settings, autofill… Note : **quicksearch n'est PAS
+ contigu** (entrelacé avec cheatsheet + history-modal 886-1063) → extraction
+ propre pas triviale, reportée.
- ✅ `node --check` en pré-étape de `BuildAssets.ps1` : **déjà fait** (cf. §3.2).
### 3.2 🟡 Aucun test automatisé — **partiellement adressé (2026-07-04)**
diff --git a/delphi-backend/assets/BuildAssets.ps1 b/delphi-backend/assets/BuildAssets.ps1
index 6011684..4fa36a7 100644
--- a/delphi-backend/assets/BuildAssets.ps1
+++ b/delphi-backend/assets/BuildAssets.ps1
@@ -57,6 +57,7 @@ $patterns = @(
'js\app.favicon.js',
'js\app.import.js',
'js\app.backup.js',
+ 'js\app.health.js',
'js\app.js',
'js\app.sync.js',
'css\style.css'
diff --git a/index.html b/index.html
index 89f8262..73bdab1 100644
--- a/index.html
+++ b/index.html
@@ -1197,6 +1197,7 @@
+