Demo data: safe to create, safe to remove, and worth looking at
Read references/DEMO-DATA-AND-SEEDING.md before applying any of this.
That file is the standard; everything below it is a summary to help you decide
whether this skill applies and to check your work afterwards.
Reference-architecture principles: P5, P13.
What this standard covers
- Namespace demo data, and enforce it at the receiver
- Reset clears the namespace, everywhere it was written
- Seed through the running system, not around it
- Deterministic by default
- Two tiers, and what each one proves
- Personas: demo data should tell a story
Failure modes
| Symptom | Cause |
|---|---|
| A reset deleted real data | Cleanup matched on something other than a reserved namespace — a date range, "everything", a guess (§1) |
| Seeded ids overwrote real records | The namespace was a convention the writing tool honoured, never enforced at the receiver (§1) |
| Cleared demo data comes back | Reset cleared one store; the data was written to two (§2) |
| The demo shows a state the product cannot actually produce | Seeded straight into the database, bypassing the validation and derived values the service applies (§3) |
| A screenshot cannot be reproduced | Unseeded RNG, so every run produces a different dataset (§4) |
| Re-running the seeder doubles the data | Non-idempotent: new ids each run instead of stable namespaced ones (§4) |
| Ingest is broken and every demo still looks perfect | Only the high-level seeder exists, and it enters past the ingest path (§5) |
| The dashboard is full and the demo is unconvincing | Randomised rows rather than personas — nothing on screen is about anything (§6) |
| A feature has no demo and nobody noticed until a customer call | No persona exercises it, and nothing checks that (§6) |
Checklist
- Every seeded record carries a reserved id prefix
- The prefix is enforced server-side, and a batch containing any out-of-namespace id is refused whole rather than filtered
- The endpoint's authorisation reasoning is written where the endpoint is defined — in particular, why reusing an existing credential widens nothing
- Reset deletes by prefix from every store the data was written to, logging counts per store
- The seeder is a client of the running service: no direct database access, no restart required
- RNG is seeded from an argument with a fixed default, and re-running converges rather than accumulating
- A second generator speaks the real ingest protocol, so the ingest path is demonstrated rather than skipped
- Generation is persona-driven, and each persona maps to a recognisable story on screen
- Every feature worth demonstrating has a persona that exercises it
Generated from docs/guides/DEMO-DATA-AND-SEEDING.md by scripts/build-marketplace.mjs. Do not edit this file: change the source document, or its entry in catalog/marketplace.catalog.json, and re-run the generator.