Reset commands
# between calls (~30 s)
bun run demo:reset --scope=all
bun run demo:bootstrap
# mid-call after HALT-1 / HALT-2 (~3 s; seed preserved)
bun run demo:reset --scope=act1-perturbations
bun run demo:reset --scope=act2-perturbations
# nuclear (state badly tangled)
bun run demo:reset --scope=all && bun run demo:bootstrap
Perturbation resets keep operators, accounts, orgs, properties, banners,
neutrality signal, kill switch. Only post-marker rows are deleted.
Sign-in · 6-digit code at the form
Type the email on the app's /login form → 6-digit OTP lands at
a.d.sudhindra@gmail.com (via Resend → ImprovMX catch-all on
*@demo.consentshield.in) → paste into the OtpBoxes.
- Operators:
https://admin.demo.consentshield.in/login
- DPOs:
https://app.demo.consentshield.in/login
- DP-Hub (Asha):
https://dp.demo.consentshield.in/dp/auth/email · separate custom-session pipeline; same gmail receives the code.
Use a fresh incognito window per persona so concurrent sessions stay isolated. Codes are 6 digits, valid ~1 hour, single-use.
Credentials
Passwordless throughout — sign-in is email + 6-digit code (see the panel above). Passwords in .env.demo.local are a fallback only and not part of the demo flow.
Honest gaps · two material
Consent portability between CMs
— not implemented. Waiting on DPB inter-CM protocol.
CM wind-down inter-CM handoff
— tenant termination shipped (30-day cooldown → export → completed);
inter-CM handoff is future-DPB-rules.
Full table: gap-disclosure.md · 5 buckets
(SHIPPED · PARTIAL · NOT-SHIPPED · DEFERRED-FUTURE-RULES · OPERATOR-RESPONSIBILITY).