demo-experience-fixesbreakdown.mdscope.md behind
this batch. Notes quoted per stub.Two demo-tenant defects that were known at their ship gates but never filed as intake. The
demo seeder lost its per-lead activity logging in the merged storyline work, so 49 of 61
seeded leads open with empty activity timelines — the verify note said "belongs in intake
against that run" and nobody filed it. And in canned agent mode, denying the BRD approval
still plays the scripted success turn; Jamie's ruling is to hide the deny affordance in
canned mode rather than script a deny path. This scope deliberately does not duplicate the
pending demo-data-quality batch (reset cron, storyline coverage, SaaS storyline, customer
surfaces) — those stubs already exist; these two close the unfiled gaps beside them.
Technical demo environment (docs: technical/demo-environment); touches
packages/services/src/db/services/demo-data/ and the canned BRD chat surface in apps/web.
.icm/intake/demo-data-quality/ (reset audit + cron,
storyline full coverage, SaaS vendor storyline, customer surface fixes).onboarding-and-tenant-lifecycle/onboarding-reentry-and-progress.docs-accuracy._done/canned-brd-deny-affordance.mdIn canned agent mode the BRD replay derives its step from the assistant turn count and cannot branch — so denying the approval still plays the scripted success turn, and a presenter who clicks deny in front of a client shows an agent that ignores them. Accepted as a known limitation at the demo-canned-agents gate. Jamie's ruling: "denying the BRD approval in canned mode still plays the success path, hide the deny button in canned mode."
When the BRD chat is in canned replay on a demo tenant, don't render the deny affordance —
approve (and the existing skip control) remain. The mode check must be the server-resolved
agent mode (the same isDemo-first resolution the cookie preference sits under), never
client state. Live mode on a demo tenant keeps the full approve/deny pair, which stays the
documented way to demonstrate the deny path.
Evidence: limitation recorded in demo-canned-agents/05_verify/output/verify.md ("step index
derives from assistant turn count, can't distinguish approve from deny — acceptance
criterion 2 not met as written, accepted"); mode resolution in
packages/services/src/ai/canned/mode.ts + apps/web/lib/agent-mode.ts (server re-reads
isDemo before the cookie); approval surface in the BRD chat components
(apps/web/app/(app)/projects/brd/[id]/ + SkipCannedBrdButton pattern for
canned-only rendering). Docs update follows docs-sync. touches: apps/web (BRD approval
surface), apps/docs (demo-environment page).
_done/seeded-lead-activity-timelines.mdThe demo seeder's createLead dropped its logActivity("CREATE", …) call in the merged
storyline work, so 49 of 61 seeded leads open with an empty activity timeline — a presenter
clicking into most leads shows a dead feed. Known at the demo-canned-agents verify gate
("belongs in intake against that run"), never filed. Jamie's note: "49 of 61 seeded leads
have empty activity timelines. it's a known issue, so fix it."
Restore activity logging in the demo seeder so every seeded lead carries a plausible timeline: at minimum its creation event, and for leads seeded mid-journey the status-history events the storyline already writes should have matching activity entries — backdated consistently with the lead's seeded dates and deterministic like the rest of the seeder (no wall-clock variation beyond the documented relative-date anchor).
Evidence: demo-canned-agents/05_verify/output/verify.md (the finding, naming
packages/services/src/db/services/demo-data/index.ts:1259 — createLead lost
logActivity); determinism rules in demo-data/deterministic.ts (hashOf, monthsAgo);
activity write path db/services/activity/. Coordinate with the pending
demo-data-quality/storyline-full-coverage-generator stub — if that lands first its
generator contract may absorb this; whichever runs second rebases. touches:
packages/services/src/db/services/demo-data/.
Recorded by the intake-easy-features session; these rulings bind Define.