User sequences
A user sequence is one sequence given to one participant: what puts an item on their home screen. It carries its own schedule, its surface and how it behaves, and the responses submitted against it.
Where one comes from
- A journey, from a
createUserSequenceaction. Almost all content arrives this way. - A member of staff, assigning a sequence to the participant; the user sequence records who
(
coachId), which gives it its own surface and credit. - The participant, starting a sequence from Explore: one with
explore: shown, or one belonging to a journey they are enrolled in.
There is no setting that puts something on everyone's home screen: to give a group the same
item, put it in a journey they are all on. Only a published sequence can be assigned
(sequence_not_published).
Behaviour
Each flag is taken from the assignment, else the sequence's default, else the platform's:
| Flag | Governs | Platform default |
|---|---|---|
persistent | A submitted item stays with a tick, or leaves | false |
revisable | A submitted response can be changed | true |
closable | The participant can back out without submitting. false is a blocking screen, such as consent | true |
dismissable | The participant can hide the item (a long press) | false |
unscheduledSubmission | Extra responses outside the schedule | false |
autoOpen | Opens by itself when the app is next opened; it still sits on the home screen | false |
Every flag works per occurrence. A submission seals its own occurrence and touches no other;
dismissing hides one occurrence, not the next. The flags can be changed on a live user sequence,
and the responses stay. A one-off is a matter of the schedule (once, or end.maxResponses: 1),
never of the flags: a recurring schedule always comes back.
Why an item isn't there
An item shows while one of its occurrences is due and the user sequence is active. It leaves
when:
- today isn't one of its days (the schedule), or its
starthasn't come; - it was submitted and isn't
persistent(it returns at its next occurrence); - it was dismissed (dismissal wins over
persistent); - its schedule ended, by date or by
maxResponses; - it is
paused: nothing is due and no reminder goes out until it isactiveagain, and its History skips the pause; - its status is
completedorarchived, which ends every future occurrence too.
A schedule set explicitly to null means one occurrence, due until submitted or dismissed;
leaving the key out takes the sequence's default. An item whose sequence hasn't reached the phone
yet draws a disabled "unavailable" row until it syncs.
Responses
A response is filed against the occurrence it belongs to, and the time it was given is kept separately, so a Tuesday check-in answered on Friday sits on Tuesday. Anything unresponded can be answered late from the History screen, and a journey moves when the late response arrives. Submitting is idempotent by the response's id, and responses are added, never overwritten. Each records the sequence version that scored it. Dismissing is not responding: a dismissed occurrence still counts as unresponded.