Skip to main content

propeller doctor

Sanity-check a scaffolded shop. Reads frontend/propeller.json (or the file at the given path) and verifies the shop matches what the manifest declares.

# from the shop root
npx propeller doctor

# or from inside frontend/
cd frontend && npx propeller doctor

What it checks

#CheckLevel
1propeller.json parses + validates against the Zod schemared on failure
2Every declared propeller-v2-* package resolves against node_modules/yellow on missing
3data/config.ts (Next) or src/lib/config.ts (Vue) contains the declared portalMode literalred on mismatch
4B2B route shape matches mode (B2B routes present iff mode !== 'b2c')red on mismatch
5Declared CMS adapter (cms.adapter) is installedyellow on missing

Levels

  • Green (✓) — passed.
  • Yellow (!) — warning. Worth fixing but not a blocker.
  • Red (✗) — failure. Exits with code 1.

Exit code

  • 0 — zero red checks. Any number of yellows is still a pass.
  • 1 — at least one red check.

Use this in CI to gate merges:

- run: npx propeller doctor

Manifest resolution

doctor searches for propeller.json in this order:

  1. ./propeller.json
  2. ./frontend/propeller.json

So you can run it from either the shop root or frontend/. If neither exists, the run fails with a single red propeller.json not found … finding.

Why declared-not-installed is yellow

The CMS adapter packages are not yet published to npm. At scaffold time the CLI declares cms.adapter in propeller.json but does not pin a corresponding package — the user installs it manually (the scaffolded cms/README.md has the instructions). doctor surfaces the gap as a warning so the omission isn't silent, but doesn't block the shop's build.

Once the adapter packages land on npm and the templates pin them, this check will be promoted back to red.

Sample output

✓ propeller.json valid (v1, my-shop, hybrid).
✓ propeller-v2-react-ui installed.
✓ propeller-sdk-v2 installed.
! propeller-v2-cms-adapter-strapi declared but not installed — install manually.
✓ portalMode 'open' matches data/config.ts.
✓ B2B route presence matches mode=hybrid.

All checks passed.

Roadmap

  • propeller doctor --json — machine-readable findings for CI tooling.
  • --strict flag to treat yellow as red.
  • Pin-drift check — flag installed package versions that don't match the version stamped into propeller.json -> dependencies.

Until those land, doctor is intentionally small and stable.