docs(06-01): complete content schema + reading-time foundation plan

- Add 06-01-SUMMARY.md (5 tasks shipped, 0 deviations).
- Update STATE.md: Phase 6 Plan 06-01 shipped (1/4), gotchas recorded
  (hook schema strip, Nitro ~/ alias), next plan = 06-02.
- Update ROADMAP.md M1.1 progress: Phase 5 Complete, Phase 6 at 1/4.
This commit is contained in:
2026-04-22 09:08:42 +02:00
parent 0752468f07
commit f05cdebbcf
3 changed files with 223 additions and 10 deletions
+11 -8
View File
@@ -2,15 +2,15 @@
gsd_state_version: 1.0
milestone: v1.0
milestone_name: milestone
status: Context gathered — ready for /gsd-plan-phase 6
last_updated: "2026-04-22T06:55:05.535Z"
status: Phase 6 — Plan 06-01 shipped (1/4), ready for Plan 06-02
last_updated: "2026-04-22T09:10:00.000Z"
last_activity: 2026-04-22
progress:
total_phases: 8
completed_phases: 3
total_plans: 11
completed_plans: 9
percent: 82
total_plans: 15
completed_plans: 10
percent: 66
---
# Project State
@@ -24,10 +24,10 @@ progress:
## Current Focus
Phase: Phase 6 — Blog Pages
Plan:
Status: Context gathered — ready for /gsd-plan-phase 6
Plan: 06-02 (next — Wave 1 also, components UI + i18n locales)
Status: Plan 06-01 shipped — schema + reading-time hook + drafts en place, typecheck vert, cache @nuxt/content vidé
Last activity: 2026-04-22
Resume file: .planning/phases/06-blog-pages/06-UI-SPEC.md
Resume file: .planning/phases/06-blog-pages/06-02-PLAN.md
## Accumulated Context
@@ -42,3 +42,6 @@ Resume file: .planning/phases/06-blog-pages/06-UI-SPEC.md
- Objectif double : ranker sur "Hytale plugin developer" ET capter trafic longue traîne via contenu communauté
- Articles bilingues : structure FR/EN dans content/ (ex: content/fr/blog/, content/en/blog/)
- og:image par article : image frontmatter ou fallback branded — jamais l'og-image.png générique M1
- **Plan 06-01 shipped (2026-04-22)** : blogSchema étendu (draft.default(false) + wordCount.optional + minutes.optional), Nitro hook `content:file:afterParse` injecte wordCount+minutes (200 wpm, floor 1 min) sur chaque `.md` via `countWordsInMinimalBody`, composable fallback `useReadingTime(number|string)` auto-importé, articles `test-kotlin-syntax.md` (FR+EN) marqués `draft: true` — exclus des listings `where('draft', '=', false)` mais accessibles par URL directe. Cache `node_modules/.cache/content` + `.nuxt` vidés.
- **Gotcha 06-01** : Le hook `content:file:afterParse` exige que `wordCount`/`minutes` soient déclarés dans le schema Zod (`.optional()` sans default) sinon ils sont strippés avant persistance DB — les propriétés injectées par hook ne sont queryables que si le schema les expose.
- **Gotcha 06-01 (convention)** : Dans un plugin Nitro, importer depuis `app/utils/` se fait via `~/utils/...` (et non `~~/app/utils/...`). Nuxt 4 mappe `~/``app/` par défaut. Vérifié par typecheck vert sur server/plugins/reading-time.ts.