npm run source:add -- \
--domain habits \
--source daily \
--label "Daily habits" \
--description "Small habit signals and streaks" \
--authorized-inputs "User-approved habit check-ins" \
--forbidden-inputs "Medical diagnoses, private journal text" \
--workflow daily-coreThe generator adds a catalog entry, a provider-neutral prompt, a dedicated strict facts schema, and a deterministic owned path.
- Review purpose, authorized inputs, forbidden inputs, cadence, freshness, role, and dependencies.
- Replace the scaffolded
facts.recordsfields with stable domain names where the source has a clearer durable model. Keep presentation derived from facts. - Add a synthetic example at
data/examples/<domain>/<source>/2026-08-24.json. - Demonstrate one success state and one meaningful stale, partial, failed, or empty state.
- Add the source ID to
config/instance.example.jsononly when it belongs in the default experience. - Add the source ID to a
config/workflows.jsonbundle only when it should share that workflow's cadence and publication transaction. - Run
npm run check. - Document setup, permissions, disabling, and removal.
Prefer composing an existing block. A new block is justified only when it enables a materially different interaction. It requires a schema version decision, strict size and URL constraints, a TypeScript type, safe renderer, accessibility behavior, light and dark styles, mobile review, synthetic fixture, tests, and LLM guidance.