All data are original fictional teaching observations/simulations. UTC throughout.
users.csv grain:one signup per user_id. Fields:user_id (stable lab ID), signup_at (UTC),
channel (signup organic/referral, fixed), internal (0/1 test-account flag).
events.csv grain:one delivery record. event_id identifies the underlying event.
Exact repeated event IDs are deduplicated only if ALL fields match; conflicting repeats fail.
user_id must exist. event_name: start,lesson,exercise,practice_active.
occurred_at is event time, NOT ingestion time. Pre-signup records fail.
Watermark exclusive2026-01-26T00:00Z; assume event delivery complete before it.
One internal account excluded. Accepted pre-start lesson evidence remains in audit
but does not advance funnel. One deliberate retry does not represent a second action.

assignments.csv is a SEPARATE population with X-prefix IDs. Grain:one assigned user.
arm control/treatment; assigned_at UTC. 100/100 complete randomized balanced assignment
from a reproducible seed is simulated. Never use predictable seeds for real assignment security.
outcomes.csv grain:one seven-day aggregated observation per assigned user.
observed must1 (otherwise analysis stops); exposed indicates feature display at least once;
completed_7d and error_7d are binary flags for any qualifying action/error in
[assignment,assignment+7 days). Missing users/rows are NOT assumed zero.
These aggregate flags are a fixture contract; raw timestamped experiment events are NOT
provided, so the reference cannot independently verify their within-window aggregation.
All follow-up mature by experiment watermark2026-02-01T00:00Z.
Outcome flags are deliberately manufactured to illustrate inference and selection bias.
No emails, devices, IPs, payment information or real user attributes are present.
