Status: 36 unique entities, 182 relationships, 0 orphans, 0 bidirectional gaps, 1 remaining error (pre-existing). Site LIVE at aetherion-archive.pages.dev. Generation: 3x/day rotating provider strategy (balanced/cheap/quality). Known issue: context-assembler injects all 36 entities per generation → token cost too high. Fix PENDING.
- Full generation pipeline (context → AI → parse → validate → retry → register → JSONL append → markdown → memory snapshot)
- 11 entity types, JSONL per type in canon/
- 4 AI providers with fallback chain
- Atomic JSONL writes (.tmp → rename)
- Rate limiter (BATCH_DELAY_MS, default 2000ms)
- Dead letter queue (canon/failed.jsonl, retry-failed CLI)
- Session cost tracker (canon/session-stats.jsonl)
- Memory compaction (compact-memory CLI)
- Test suite: 9 files, 90 tests (vitest)
- TypeScript: 0 errors (
tsc --noEmit) - Astro frontend: 49 pages, static output, Tailwind v4, dark fantasy theme
- Gods (3): vel-thara-the-unmade, mourne-the-hollow-king, yssara-of-the-shattered-moon
- Kingdoms (4): valdenmoor-the-ashen-crown, greyvast-the-sunken-throne, the-pale-dominion, kingdom-of-eldoria
- Factions (3): the-oathbound-remnants, the-tide-weavers, the-cult-of-the-broken-moon
- Events (3): the-celestial-fracture, the-fall-of-greyvast, the-first-moon-ritual
- Cities (5): frostcrown-citadel, ashenveil, the-pale-spire, mournwall, the-sunken-quarter (DEPRECATED)
- Races (2): the-greyvasti, the-pale-touched
- Monsters (4): the-hollowed, the-fracture-wyrm, the-grief-echo, the-shard-stalker
- Religions (2): the-doctrine-of-controlled-erosion, the-hollow-covenant
- Artifacts (4): the-hollow-crown-of-aldric, a-moon-fragment-grade-3, the-erosion-codex, the-pact-shard
- Spells (5): soul-tether, moonblind, hollow-whisper, fragment-pulse, memory-seal
- Regions (1): northern-velkaris
- 182 total, 0 orphans, 0 bidirectional gaps
- 1 remaining error (forbidden-moon-rituals placeholder — pre-existing, separate entity)
- 18 warnings (all non-blocking — missing school/power level/threat level/lifespan metadata)
npm run init:world— bootstrap canon structurenpm run generate:one [type] [name]— single entitynpm run generate:batch— gap-filling batch gennpm run validate:canon— validate all entitiesnpm run retry:failed— retry dead letter queuenpm run session:stats— cost/token summarynpm run compact:memory— journal compaction
- 49 static pages built (36 entity + 11 index + 1 homepage + 1 404)
- Astro 5 + Tailwind v4, static output
- Canon reader: build-time only, 36 entities loaded
- Entity pages: header, description, connections, attributes, SEO meta
- Homepage: hero, stats bar, featured, recent, type grid
- Build time: ~4.6s, 0 errors
- Canon: 1 error (forbidden-moon-rituals placeholder)
- 0 bidirectional gaps
site/package.json— astro, tailwindcss, @tailwindcss/vitesite/astro.config.mts— static output, @tailwindcss/vitesite/tsconfig.json— strict, astro/tsconfigs/strict basesite/src/lib/canon.ts— build-time canon readersite/src/layouts/BaseLayout.astro— base HTML shellsite/src/styles.css— @import "tailwindcss"site/src/pages/index.astro— homepage (hero, stats bar, featured, recent, type grid)site/src/pages/[type]/index.astro— entity type index pages (11 types)site/src/pages/[type]/[slug].astro— individual entity pages (36 entities)site/dist/— static build output (49 pages)site/public/— static assets
- Dark bg: #0a0a0f, Text: muted silver/grey, Accent: #8ab4d4 (lunar blue)
- Status badges: active=green, deprecated=red, archived=grey, rewritten=amber
- Mobile responsive, clean readable type
- deploy.yml: install → typecheck → validate → build-and-deploy (Cloudflare Pages)
- Site LIVE at aetherion-archive.pages.dev
- generate.yml: 3 daily runs (2am/9am/3pm UTC), rotating strategy (balanced/cheap/quality), generate-batch → commit → triggers deploy
- DEPLOYMENT_SETUP.md: created, includes search engine submission guide
- sitemap-index.xml (auto-generated via @astrojs/sitemap)
- robots.txt (Allow all, sitemap linked)
- 404.astro (dark theme matching site, nav links to home/gods/kingdoms/factions)
- Schema.org JSON-LD (Article) on all 36 entity pages
- Open Graph + Twitter Card meta on all pages (title, description, url, site_name)
- Canonical URLs on all entity pages and homepage
- Search engine submission guide in DEPLOYMENT_SETUP.md (Google + Bing)
- No search, no embeddings, no graph visualization
- No custom domain (using default pages.dev)
- No analytics
- Top 3 by relationship count: valdenmoor-the-ashen-crown (10), greyvast-the-sunken-throne (9), the-oathbound-remnants (8)
- Avg relationships per entity: ~4.8
- Relationship density target (>3/entity): MET
- Total tokens: 54,583 (39.7K in / 14.9K out)
- Total cost: ~$0.23
- AI calls: 15 (10 Gemini, 5 Groq fallback)
- 3 runs/day (2am, 9am, 3pm UTC)
- Rotating provider: balanced→cheap→quality
- BATCH_COUNT=1 per run (token efficient)
- 429 → exponential backoff + skip to next provider
- Manual trigger: workflow_dispatch with provider + count options
- Context-assembler injects all 36 entities per generation → ~1500–2000 tokens per call. Fix PENDING: cap at 15 entities (top 10 by relationship count + world-core + campaign).