Asking somebody in
Rendered from spec at76d46f3 (2026-10-25) · its source · Edit this page
Status: Accepted · Audience: Operator · Area: N — Companion
Purpose
D6 exists so an operator never learns the media server’s user administration. The moment it is for is a person on the sofa asking how they get on — and the thing the operator has in their hand at that moment is a phone.
N9 already says what an invitation must state before it is sent: what it grants, when it lapses, and whether it works away from home. N13 says what taking somebody out must say. This page is the acts between them: inviting, handing the invitation over, letting somebody set a new password, and asking again — each of which the stack performs over the same route the other surfaces use.
Behaviour
Inviting is offered here, in the stack’s terms
A person is named, and given libraries, an age limit and a choice about material the media server has no rating for. Those are the whole decision, in the words the stack uses for them, and nothing about how the media server stores any of it is asked for or shown.
The invitation is the stack’s address, handed over by the operator
What the person needs is one address and how long it stands. The stack builds the address from what the machine is called on the network, and the app hands that address over as it came — as text, and as a code another phone can scan from this one’s screen. It builds no address of its own, and it sends nothing itself: the operator hands it over through the device’s own sharing, to whomever they choose.
The stack also gives every invitation the address that turns it down (D6-R15,
G5-R14). The text handed over carries it after the invitation’s own address, as
the stack gave it, so a person who does not want the account can refuse it without
asking the operator. Where the stack mints a join link (D6-R22), the text carries it
too, so somebody with the app is taken straight into it. Each address is offered as a
code of its own, labelled with what it opens, and the first code is the join link where
there is one, otherwise the invitation’s own address (N21-R11). Where the stack says
why there is no join link, that sentence travels with the invitation (N21-R12).
An address that is a number can stop working when a router hands the number to something else, and the stack says so with the invitation. That caution goes wherever the address goes.
What was found is an answer, and four answers are not one
Offering somebody an account twice is ordinary. The stack says what it found: a new account made, an invitation already standing, a person who has already joined, or a password taken off an account that was already theirs. Each means a different thing to say to the person, and none of them is a failure. Already joined shown as invited sends somebody a link to an account they have been using for a year.
Watching and asking can arrive separately
The account a person watches with and the one they ask with live on two services, and the second can be down while the first is not. Where the stack made the first and could not yet tell the second, the person can watch and cannot yet ask, and the app says exactly that. It is neither done nor failed: the next run finishes it without anybody having to remember.
A new password is theirs to choose
Where somebody has lost the way into their account, the stack takes the password
off and hands back an invitation to send, and the person chooses the next one at
the media server. The app offers that act. It never shows, sets or carries a
password, because the operator is not supposed to know one (D6-R2).
An account that runs the media server is not a household member’s
The stack refuses to take the password off the account it signs in with, and the app shows that refusal with its reason rather than hiding the person from the list.
What lapsed on the way past is said, in two words
An invitation stands for a window, and one nobody claimed in time is withdrawn on
the way past: the next invitation the stack is asked for sweeps it, and a rehearsed
one names what that sweep would take. What becomes of the account depends on whose
it was. An offer nobody ever took up is removed, and the stack names it under
withdrawn. An account somebody had been in, reset and not claimed again in time,
is switched off and kept, because removing it would take what they watched with it;
the stack names it under suspended, and offering it again or reissuing it switches
it back on.
Both are invitations the stack withdrew, which is what N21-R10 asks to be shown.
They arrive on the answer to invite, and are shown with it. An operator who
invited somebody last week and hears nothing learns from this whether the account
is gone or waiting to be reissued.
A rehearsed invitation made nothing
As everywhere (N6-R1). Here it decides whether somebody has an account.
States
| State | Meaning |
|---|---|
| Made | An account was made; the address is ready to hand over. |
| Waiting | An invitation already stood for this person; it is the one to send. |
| Joined | They are already in the household. Nothing is sent. |
| Reset | Their password was taken off; the address is ready to hand over. |
| Not yet asking | They can watch, and the request service has not been told yet. |
| Refused | The stack refused, with its reason. |
| Unknown | The answer could not be read. Never rendered as sent. |
Edge cases
- An invitation asked for twice in an evening. Waiting is shown, with the same address, and not a second invitation.
- Invited while the request service is down. Made and not yet asking together, shown as both.
- A person the stack cannot find by that name. The refusal names the name that was asked for.
- Handing over declined by the platform’s sharing. Nothing was sent, and the address is still on screen to hand over another way.
- A reset that lapsed. The account is switched off and kept, and is shown as
suspendedon the answer it arrived on, apart from an offer that was removed.
Requirements
| ID | Requirement |
|---|---|
| N21-R1 | The app MUST offer inviting a person, with libraries, an age limit and what happens to unrated material chosen in the stack’s terms, and MUST NOT ask for or show anything in the media server’s own terms (D6-R5). |
| N21-R2 | An invitation MUST be handed over as the address the stack gave, both as text and as a code another device can scan, and the app MUST NOT construct, shorten or alter an address of its own (D6-R4). |
| N21-R3 | Handing an invitation over MUST be an act of the operator’s through the device’s own sharing, and the app MUST NOT send an invitation to anybody itself. |
| N21-R4 | Where the stack carries a caution about the address, it MUST be shown with the address and MUST travel with it when it is handed over. |
| N21-R5 | What the stack found MUST be shown as the standing it gave — made, waiting, joined or reset — and joined and reset MUST NOT be presented as a new invitation (D6-R6). |
| N21-R6 | Where an account was made and the request service has not been told, the app MUST say that the person can watch and cannot yet ask, and MUST NOT present the invitation as complete or as failed (D6-R12). |
| N21-R7 | The app MUST offer taking a member’s password off so they can choose a new one, and MUST NOT show, set, accept or transmit a password (D6-R2, D6-R10). |
| N21-R8 | A refusal about a person MUST be shown with the stack’s reason and the name that was asked for, and MUST NOT be rendered as an error to retry. |
| N21-R9 | A rehearsed invitation MUST be labelled as a rehearsal (N6-R1), and MUST NOT be presented as an account that exists. |
| N21-R10 | Invitations the stack withdrew on the way past MUST be shown with the answer they arrived on, and MUST NOT be dropped. |
| N21-R11 | The text handed over MUST carry, after the invitation’s own address, the join link (D6-R22) and the address that turns the invitation down, each as the stack gave it, where the stack gives them (G5-R14). Each MUST also be offered as a code another device can scan, labelled with what it opens, and the first code shown MUST be the join link where there is one, otherwise the invitation’s own address. |
| N21-R12 | Where the stack says why an invitation carries no join link (D6-R24), the app MUST show that sentence with the invitation, and MUST NOT present the invitation as failed. |
Notes
What the contract carries. invitation answers the invite and reissue
actions; invite takes a name, libraries, an age limit and a word about unrated
material, and reissue takes a name.
| Row | Carried | Not carried |
|---|---|---|
N21-R1 |
The invite action’s libraries, age_limit and unrated; applied on the answer says what was written |
The libraries there are to choose from, as a list to pick in. household names each member’s libraries, not the set a new member could be given |
N21-R2 |
address, built from the machine’s name on the network |
— |
N21-R3 |
— | Nothing is needed: handing over is the device’s act, not the stack’s |
N21-R4 |
caution |
— |
N21-R5 |
standing: made, waiting, joined, reset |
declined (D6-R16), which N9-R7 also waits on |
N21-R6 |
linked: made, not-yet, not-tried |
— |
N21-R7 |
reissue, answered with an invitation whose standing is reset |
— |
N21-R8 |
The refusal, as error |
— |
N21-R9 |
rehearsed |
— |
N21-R10 |
withdrawn: offers nobody took up, removed. suspended: accounts somebody had been in, reset and not claimed again in time, switched off and kept. On a rehearsal, each names what would be |
— |
N21-R11 |
join, the link the companion opens; decline, the address that turns the invitation down |
— |
N21-R12 |
unjoinable, why there is no join link |
— |
D6-R13 is not a row here. An offer nobody claimed is withdrawn, and
withdrawal removes the account, so there is no member left to re-issue to without
naming their access again. reissue makes an existing account claimable. Asking
again after a lapse is invite, which takes the access afresh — and nothing on the
wire keeps what the lapsed invitation granted to offer back. A lapsed reset is the
exception: its account is kept, switched off, and reissue switches it back on.