Skip to Content
Living documentation — last reviewed 2026-05-28
FeaturesManaged MembersManaged Members — QA Plan

Managed Members — QA Plan

Status: phase 1. Every scenario below has automated coverage (see code-map.md § Tests). The QA’d column records manual verification on the review stack (web + iOS simulator, flag on, Hebrew): ✓ verified, — not yet.

Setup: an org on Pro or above with managed-members on; a staff admin; one adult who trains; one email address with no account yet. Run the member side once on web and once on mobile, at least once in he.

1. Staff enrolment

#ScenarioExpectedQA’d
1.1Members → Add child, invite a new emailChild created as a member; record shows the adult “waiting to confirm”; staff-enrolment email sent✓
1.2Adult’s record → Add childAdult pre-filled; same result, pending✓
1.3Add child naming an address already held by a managed member, or by an adult in another orgRefused as “unavailable”, without saying why—
1.4Resend on a pending childNew email; link still pending—
1.5Add child with flag off, or on a lower tierEntry points hidden; direct API call → 403 managed_members_disabled—

2. Confirmation

#ScenarioExpectedQA’d
2.1New adult signs up from the email linkLands on /family/accept/<grantId>, not owner onboarding✓
2.1aAdult with no Taikan login opens the email on a signed-out browserClerk sign-up on the accept page (sign-up is invitation-only), then the confirmation form—
2.1bAdult with an existing login opens the email signed outRedirected to sign-in, then back to the accept page—
2.2Adult confirms (name prefilled from profile, attestation)Link active; a non-training adult becomes guardian_only; child appears in the switcher✓
2.2aAdult with no birth date on their profile confirmsThe form asks for the birth date; it is saved to the profile and the link becomes active—
2.3Adult under 21Refused; a birth date typed on the form stays editable and is not saved—
2.4Before confirming, try to book or sign for the childRefused; pending link grants nothing—
2.5Adult declinesLink closed; staff task raised—

3. View as child

#ScenarioExpectedQA’d
3.1Training adult with one childSwitcher: “myself” + child; opens on self✓
3.2guardian_only adultOpens on the first child; their own row reads “Get a plan for yourself” and opens the Shop on “Me”—
3.3Switch childHome, Schedule, Program, child’s Profile re-scope; “Your account” stays the adult’s✓
3.4Two children, switch back and forthNo data from one shows under the other✓
3.5Try to log a result, comment or check in for a child (incl. deep link)View-only; no write—
3.6Relaunch the appSelection persists per org; cleared on sign-out✓

4. Booking for a child

#ScenarioExpectedQA’d
4.1Adult books and cancels for a childChild’s rules apply (plan, overlap, forms, debt); cancel attributed to the adult✓
4.2Staff book a childAdult sees “Booked by {staff}“✓
4.3Two siblings, one seat leftOne seat; the adult chooses—
4.4Youth-consent template exists, unsignedChild can’t book until the adult signs it—

5. Profile, forms, billing

#ScenarioExpectedQA’d
5.1Adult edits the child’s phone, emergency contact, genderSaved✓
5.2Adult tries to edit the child’s name or emailRead-only in the UI; API 403 staff_only_field✓
5.3Adult signs a waiver for the childSignature recorded with signedInCapacity='guardian' and the adult’s typed name—
5.4Adult buys the child a plan with a real cardAdult charged; receipt to the adult; payer stays the adult—
5.5guardian_only adult buys their own planStays guardian_only while the checkout is open or abandoned; becomes trains once the plan is live; the self row appears in the switcher—

6. Notifications

#ScenarioExpectedQA’d
6.1Booking reminder for a childReaches every confirmed adult with notifications on; never the child—
6.2Push about a child, on a real deviceTapping opens the screen as that child—
6.3Promotional automation targeting a childSkipped—

7. Staff surfaces

#ScenarioExpectedQA’d
7.1Members → Responsible adults filterEvery adult with an active or pending link, training or not✓
7.2Household section on child and adult recordsLinks both ways; pending shown as pending✓
7.3Message {guardian} about {child}Opens a conversation with the adult—

8. Sign-up block, suppression, flag, import

#ScenarioExpectedQA’d
8.1Sign up with an address a child record holds (live Clerk webhook)“Ask your gym to link your account”; no second account; audit row with ids only—
8.2Suppress an adult’s access (API)Immediately 403 for that adult on the child; unsuppress restores—
8.3Turn the flag off after children existChildren stay members; parents lose Family and the switcher; notifications still reach adults; children book without youth consent—
8.4CSV import with child rowsChildren created with pending links; unresolvable rows queued (no_guardian, no_birth_date, guardian_ambiguous)—
8.5Existing adult members after the migrationSign-in, booking, forms, payments unchanged—