feat(01-04): Vite-native content pipeline + Zod schemas + demo fragment + /content/ README

- FragmentSchema with stable-string-ID regex /^season\d+\.[a-z0-9._-]+$/
- SeasonContentSchema wraps fragments[]
- loader.ts uses import.meta.glob with literal patterns (Pitfall 1)
- Throws on schema violation at module-eval time, failing npm run build (PIPE-01)
- Test-only loadFragmentsFromGlob helper for unit-test injection
- Demo fragment season0.demo.first-light proves end-to-end round-trip
- content/README.md documents the convention for Phase 2 writers (STRY-09)
- Removes now-redundant src/content/.gitkeep firewall marker
This commit is contained in:
2026-05-08 23:28:59 -04:00
parent 1e99356b27
commit d52e35f3ad
8 changed files with 252 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
# /content/seasons/00-demo/fragments.yaml
#
# Phase 1 demo fragment — proves the loader round-trips end-to-end.
# Removed in Phase 2 when real Season 1 content lands under /content/seasons/01-soil/.
#
# Fragment ID convention is `season<N>.<id>` per CLAUDE.md "Code Style"
# and content/README.md. Never numeric. Renames forbidden once shipped.
fragments:
- id: season0.demo.first-light
season: 0
body: |
The garden remembers the first time it was tended,
though it cannot say in whose voice.