5.2 KiB
status, phase, source, started, updated
| status | phase | source | started | updated | ||
|---|---|---|---|---|---|---|
| complete | 05-nuxt-content-setup-renderer |
|
2026-04-21T00:00:00.000Z | 2026-04-21T21:30:00.000Z |
Current Test
[testing complete]
Tests
1. Serveur démarre sans erreur
expected: pnpm dev lance Nuxt 4 sur :3000 sans erreur de console liée à @nuxt/content, SQLite ou @tailwindcss/typography. La page d'accueil se charge normalement.
result: pass
2. Blocs de code toujours dark
expected: Naviguer vers /test. Le bloc Kotlin affiché a un fond sombre (#0d1117) ET des tokens colorés — que ce soit en mode dark ou en mode light (toggle). En light mode, le fond du bloc reste sombre, pas blanc.
result: pass
3. Images optimisées via NuxtImg
expected: Sur /test, l'image référencée dans l'article est visible (pas de 404). Inspecter le DOM : l'élément rendu est <img> avec attribut loading="lazy". ProseImg.vue est l'override utilisé.
result: pass
4. Tableau markdown avec prose styling
expected: Sur /test, le tableau markdown est rendu avec des bordures visibles, un en-tête distingué et une mise en forme prose correcte (pas du texte brut).
result: pass
5. Callouts Alert (4 types)
expected: Sur /test, les 4 callouts ::alert{type} sont rendus comme des boîtes colorées avec icônes : info (bleu), warning (amber), tip (vert), danger (rouge).
result: pass
6. Articles bilingues accessibles
expected: Les articles de test existent pour FR et EN. Naviguer vers /fr/blog/test-kotlin-syntax (FR) et /en/blog/test-kotlin-syntax (EN) — les deux pages chargent sans 404.
result: pass
resolved_by: "127db8b — renamed [...slug].vue → [slug].vue (catch-all pattern broken with @nuxtjs/i18n v10 + Nuxt 4 prefix strategy) + literal queryCollection('blog_fr'/'blog_en') branches for static extractor. Verified via curl: FR + EN return 200 with full markdown content rendered in
7. Collections @nuxt/content configurées
expected: Le fichier content.config.ts définit blog_fr et blog_en. queryCollection('blog_fr') retourne les articles FR. Vérifiable via le bon rendu de /test (qui query blog_fr).
result: pass
resolved_by: "Fixed alongside Test 6 via 127db8b. /fr/test (i18n-prefixed version of test.vue) renders correctly and queries blog_fr. /test itself 404s by design under strategy: 'prefix' — all routes must be locale-prefixed. Unprefixed URL redirect to detected locale handled by detectBrowserLanguage.redirectOn: 'no prefix' + i18n.baseUrl."
Summary
total: 7 passed: 7 issues: 0 pending: 0 skipped: 0 blocked: 0
Gaps
-
truth: "Les articles FR/EN du blog doivent se rendre au chemin
/fr/blog/test-kotlin-syntaxet/en/blog/test-kotlin-syntaxavec le contenu markdown dans<main>." status: resolved reason: "User reported: both empty page, nav and footer there but no content. Vue warn in SSR log: Component is missing template or render function at <RouteProvider key="/fr/blog/test-kotlin-syntax">. <main class="flex-1"> rendered empty. Non-blocking i18n baseUrl warning also present but unrelated. Same behavior both locales." severity: major test: 6 root_cause: "Catch-all pattern [...slug].vue not registered by @nuxtjs/i18n v10 + Nuxt 4 under strategy: 'prefix' — page component resolved to {} causing the Vue warning. Secondary: queryCollection() with a dynamic variable is not picked up by @nuxt/content's static Vite extractor." resolved_by_commit: "127db8b" artifacts:- path: "app/pages/blog/[slug].vue" issue: "Renamed from [...slug].vue; queryCollection calls replaced with literal branches" missing: []
-
truth: "La page query
blog_frdoit être routable et rendre le contenu markdown." status: resolved reason: "User reported: /test donne 404. Le commit7cd1531a migré test.vue vers le préfixe /fr/blog, mais les routes prefixées sont elles-mêmes cassées (cf gap Test 6)." severity: major test: 7 root_cause: "Symptom of same root cause as Test 6./test404 is by design under strategy: 'prefix'; the correct locale-prefixed route /fr/test renders blog_fr content correctly once the [slug] page fix is in place." resolved_by_commit: "127db8b" artifacts: [] missing: [] -
truth: "Accès
/blog/<slug>sans prefix de langue doit rediriger (302) vers/fr/blog/<slug>ou/en/blog/<slug>selon la langue détectée du client, en préservant le slug." status: resolved reason: "Follow-up bug during UAT review: old hardcoded routeRules forced /blog/** → /fr/blog (slug lost, hard-coded FR). User wanted language-detected redirect." severity: minor test: post-uat root_cause: "nuxt.config.ts routeRules '/blog/**' → '/fr/blog' (301, slug-destructive, hardcoded) conflicted with i18n's detectBrowserLanguage which only redirected root ('/'). Also missing i18n.baseUrl caused SSR warn on SEO tag generation." resolved_by: "detectBrowserLanguage.redirectOn: 'no prefix' + fallbackLocale: 'fr' + baseUrl: 'https://killiandalcin.fr'; removed hardcoded /blog route rules. Verified via curl: Accept-Language: fr → 302 /fr/blog/, Accept-Language: en → 302 /en/blog/, slug preserved, cookie persisted." artifacts:- path: "nuxt.config.ts" issue: "i18n.detectBrowserLanguage + baseUrl; removed route rules" missing: []