nexus/.planning/STATE.md

3.5 KiB

gsd_state_version milestone milestone_name status stopped_at last_updated last_activity progress
1.0 v1.7 Content Generation planning 2026-04-04 2026-04-04
total_phases completed_phases total_plans completed_plans percent
6 0 0 0 0

Project State

Project Reference

See: .planning/PROJECT.md (updated 2026-04-04)

Core value: A fresh onboard asks for ONE thing (root directory), auto-creates PM + Engineer agents, and drops you in the dashboard. Current focus: Phase 40 — Job Infrastructure (v1.7 start)

Current Position

Phase: 40 of 45 (Job Infrastructure) Plan: — (not yet planned) Status: Ready to plan Last activity: 2026-04-04 — v1.7 roadmap created, 52 requirements mapped to 6 phases

Progress: [░░░░░░░░░░] 0%

Performance Metrics

Velocity:

  • Total plans completed: 0 (v1.7)
  • Average duration: -
  • Total execution time: 0 hours

Accumulated Context

Decisions

Decisions are logged in PROJECT.md Key Decisions table. Key constraints for v1.7:

  • content_jobs table + renderPipelineService stub must exist before any renderer is built — Phase 40 is the hard dependency for all other phases
  • Async job pattern is mandatory — all render requests return 202 + job ID immediately; never block HTTP on render
  • sourceTaskId is required on every generated asset from day one (prevents SSD orphan accumulation)
  • MAX_GENERATED_ASSET_BYTES constant bypasses the 10MB upload limit for generated/namespace — separate from upload route
  • Mermaid securityLevel must be "strict" — strip %%{init}%% and click directives before render, DOMPurify on SVG output
  • OKLCH via culori for all theme generation — HSL is forbidden as an intermediate (perceptually non-uniform)
  • Remotion bundle() called once at startup, not per-render — cached bundle path passed to renderMedia() per request
  • Remotion isolated in packages/content-renderer/ workspace package — webpack bundler must not enter Vite/tsc server context
  • Phase 42 and Phase 41 both depend on Phase 40 but are independent of each other (can parallelize if needed)
  • Phase 43 (PDF/Brand) depends on Phase 41 because PDF templates may reuse satori/SVG pipeline components
  • Phase 44 (Remotion) depends only on Phase 40 (job infra) — can start after Phase 40, independent of 41-43
  • Phase 45 (Skills) is last — skill markdown files reference API contracts finalized in Phases 41-44
  • AI-bridged conversion (CONV-05) is the fallback for all format pairs — never show a format pair as blocked
  • CONV-08: converter availability detected at startup via probe; unavailable direct paths fall to AI bridge
  • CONV-09: magic-byte MIME validation before processing — reject misnamed files with a clear error

Pending Todos

None yet.

Blockers/Concerns

  • [v1.7 pre-start] Verify correct resvg package name: @resvg/resvg-js (v2.6.2) vs resvg-js (v0.1.97) — run npm info @resvg/resvg-js before pnpm add in Phase 41
  • [v1.7 pre-start] Check whether playwright-chromium and @mermaid-js/mermaid-cli can share a Chromium binary via PUPPETEER_EXECUTABLE_PATH — could save ~300MB on Mac Mini SSD
  • [v1.7 pre-start] Run pnpm build after adding packages/content-renderer/ to verify no Vite/webpack conflicts before Phase 44 implementation
  • [v1.7 pre-start] Confirm pdf-lib scope: Playwright for design-rich PDFs, pdf-lib for data-driven invoices — decide at Phase 43 planning

Session Continuity

Last session: 2026-04-04 Stopped at: v1.7 roadmap created — 52 requirements mapped, 6 phases defined (40-45), files written Resume file: None