Scenarios
Use this skill for committed fixture checks and runtime proof of prepared scenarios.
Contract
- Pick the proof path from the registered scenario key.
- Use committed
fixtures/*only as sources. The runnable app lives undertmp/scenarios/*. - Stop once the assigned proof path succeeds. Do not keep poking the app for sport.
Hard Rules
- Never run committed
fixtures/*in place. - Always prepare into
tmp/scenarios/<name>/project. fixtures:*owns committed snapshot sync/check.scenario:*owns runnable temp apps.- Stop spawned dev processes once proof succeeds or fails.
- If a temp app is stale after package or scaffold changes, rerun
bun run scenario:prepare -- <name>once. If it still fails, debug the cause. Do not loop forever. - If a scenario has no real browser auth surface, do not invent one.
- For bootstrap-heavy Convex lanes,
bun run scenario:check -- <name>is the proof. Do not replace it with ad-hocscenario:dev.
Canonical Commands
bun run fixtures:sync
bun run fixtures:check
bun run scenario:prepare -- <name>
bun run scenario:dev -- <name>
bun run scenario:check -- <name>
bun run scenario:test -- <name>
bun run test:runtime
bun run test:auth -- <name|url>
bun run test:e2e -- <name|url>
test:auth and test:e2e assume the scenario is already running.
scenario:test wraps the proof matrix below.
test:runtime runs scenario:test -- all and is the default non-browser
runtime gate.
test:e2e is a separate auth browser lane and should be run only when auth
surfaces changed.
Proof Matrix
Plain runtime proof
Use this path for:
nextvitecreate-convex-barecreate-convex-nextjs-shadcncreate-convex-react-vite-shadcn
Run:
bun run scenario:prepare -- <name>bun run scenario:dev -- <name>- Wait for ready logs.
- Stop.
Or:
bun run scenario:test -- <name>
Auth demo proof
Use this path for:
next-authstart-auth
Run:
bun run scenario:prepare -- <next-auth|start-auth>bun run scenario:dev -- <next-auth|start-auth>bun run test:auth -- <next-auth|start-auth>- Stop.
Or:
bun run scenario:test -- <next-auth|start-auth>
Why:
scenario:test -- <next-auth|start-auth>proves runtime + auth smoke only.- Browser auth proof belongs to the explicit
test:e2elane:bun run scenario:prepare -- <next-auth|start-auth>bun run scenario:dev -- <next-auth|start-auth>bun run test:e2e -- <next-auth|start-auth>
Auth backend proof without browser auth
Use this path for:
vite-auth
Run:
bun run scenario:prepare -- vite-authbun run scenario:dev -- vite-auth- Stop.
Or:
bun run scenario:test -- vite-auth
Why:
- There is no
/authpage or equivalent browser auth surface today. - Do not fake
test:e2e. - Do not add
test:authhere unless the registry grows a dedicated auth proof lane.
Bootstrap-heavy Convex proof
Use this path for:
convex-next-auth-bootstrapconvex-vite-auth-bootstrapconvex-next-allcreate-convex-nextjs-shadcn-auth
Run:
bun run scenario:check -- <name>- Stop.
Or:
bun run scenario:test -- <name>
Why:
- Fresh kitcn lanes already bootstrap during
scenario:preparethroughkitcn init -t <next|vite> --yes, then finish the bootstrap-heavy proof with in-placekitcn init --yesafter plugin setup. - The raw Convex auth adoption lane still owns
convex initpluskitcn add auth --preset convex --yes. - Raw Convex auth adoption is not a
next-authbrowser demo. Do not invent/auth.
Re-prepare Rule
Re-run scenario:prepare once when:
- package or scaffold source changed
- the temp app predates that change
- the temp app is missing expected local env or generated files
Otherwise, reuse the prepared app.
Examples
next-auth or start-auth
bun run scenario:prepare -- next-auth
bun run scenario:dev -- next-auth
bun run test:auth -- next-auth
Short path:
bun run scenario:test -- next-auth
Browser lane:
bun run scenario:prepare -- next-auth
bun run scenario:dev -- next-auth
bun run test:e2e -- next-auth
vite-auth
bun run scenario:prepare -- vite-auth
bun run scenario:dev -- vite-auth
Short path:
bun run scenario:test -- vite-auth
convex-next-all
bun run scenario:check -- convex-next-all
Short path:
bun run scenario:test -- convex-next-all