← The board

N3 The household's companion

Area
N — Companion
Audience
household
Kind
feature
Status
accepted
Maturity
built
Labels
mobile, household, ux
Requires
N1D4D6
Relates to
D7D8D11G5G6G9

The feature in the specification · Read at

Requirements

  1. N3-R1acceptedMUST

    The application a person is given MUST be decided by the identity that signed in, and MUST NOT be a setting or a separate build.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/Resumed.phpapp-modules/kernel/tests/Api/WhoseTest.phptests/Contract/SecureStorageContractTest.php
    cited by
    lemonfiber@7474b9975alemonfiber@8443b32040sdk-php@21388e1a84lemonfiber-companion@032c04f9f5lemonfiber-companion@40afa41484lemonfiber-companion@16a75aa071lemonfiber-companion@f40903d6e5lemonfiber-companion@f962dda0ealemonfiber-companion@8136512700lemonfiber-companion@de34b9c195
  2. N3-R2acceptedMUST

    The app MUST NOT implement its own permission model; what a member may do MUST be the core's answer.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companiontests/Contract/OwingContractTest.phptests/Feature/SeeingWhatYouAreOwedTest.php
    cited by
    lemonfiber@8443b32040lemonfiber-companion@8136512700lemonfiber-companion@18535b4235
  3. N3-R3acceptedMUST

    A control a member is not entitled to MUST be refused by the core if it is ever reached, and MUST NOT rely on the app having omitted it.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/tests/Api/ObstacleTest.phpapp-modules/sdk/tests/Api/HouseholdsTest.php
    cited by
    lemonfiber@8443b32040lemonfiber-companion@cae8b28c17lemonfiber-companion@349b44fb7flemonfiber-companion@8136512700lemonfiber-companion@625ae74917
  4. N3-R4acceptedMUST

    Before a member asks for something, the app MUST state whether it needs approval and whether they have allowance left.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/sdk/tests/Api/TellingsTest.phptests/Contract/OwingContractTest.php
    cited by
    lemonfiber-companion@349b44fb7flemonfiber-companion@e5ec8250b7lemonfiber-companion@8136512700
  5. N3-R5acceptedMUST

    A member whose allowance is spent MUST be told before asking, with when it resets.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companiontests/Contract/OwingContractTest.phptests/Feature/SeeingWhatYouAreOwedTest.php
    cited by
    lemonfiber-companion@e5ec8250b7lemonfiber-companion@8136512700
  6. N3-R6acceptedMUST

    A member's own requests MUST carry their state in household terms, and MUST NOT expose pipeline internals.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/sdk/src/Api/Households.phptests/Contract/OwingContractTest.phptests/Feature/SeeingWhatYouAreOwedTest.php
    cited by
    lemonfiber-companion@f8b56b2cf9lemonfiber-companion@65f7445883lemonfiber-companion@0727a005e7lemonfiber-companion@5567a07a5b
  7. N3-R7acceptedMUST

    A refused request MUST carry the reason that was given.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/TurnedDown.phpapp-modules/sdk/src/Api/Households.phpapp-modules/kernel/tests/Api/TurnedDownTest.phpapp-modules/kernel/tests/Api/WantedTest.php
    cited by
    lemonfiber-companion@f897d1ae41lemonfiber-companion@e9311c476dlemonfiber-companion@de822caa91
  8. N3-R8withdrawn

    Withdrawn. The app plays media. What this row protected is stated by N3-R14, N3-R15 and N3-R16.

    locked by
    no version locks it yet
  9. N3-R9acceptedMUST

    A member MUST NOT be shown lifecycle controls, logs, credentials, diagnostics, or another member's requests.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/household/src/Internal/Screens/FindsItsWayAroundTheHouse.phpapp-modules/wayfinding/src/Internal/TheRowsOfTheMenu.phptests/Contract/OwingContractTest.phptests/Feature/AMemberNeverOpensTheOperatorsScreensTest.php
    cited by
    lemonfiber@8443b32040lemonfiber-companion@032c04f9f5lemonfiber-companion@cae8b28c17lemonfiber-companion@335ca79e4flemonfiber-companion@b636d85e37lemonfiber-companion@0727a005e7lemonfiber-companion@8136512700lemonfiber-companion@2e6395f29alemonfiber-companion@2340a57590lemonfiber-companion@5567a07a5b
  10. N3-R10acceptedMUST

    Where a member's request failed because of a stack fault, the app MUST tell them it did not work and that the operator has been told, and MUST NOT show them the fault.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companiontests/Feature/WhatAMemberIsNeverShownTest.php
    cited by
    lemonfiber-companion@0727a005e7lemonfiber-companion@5567a07a5b
  11. N3-R11acceptedMUST

    Parental limits MUST be rendered from the core's answer, and the app MUST NOT hold a second copy of them.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companiontests/Arch/OnlyThePlayerPlaysMediaTest.php
    cited by
    lemonfiber@7a05546202lemonfiber@7474b9975alemonfiber-companion@5672b9a906lemonfiber-companion@3d66181a0flemonfiber-companion@678e19055clemonfiber-companion@18535b4235
  12. N3-R12acceptedMUST

    While the stack is unreachable, asking for something new MUST be declined rather than queued.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companiontests/Arch/AnActionIsNeverHeldTest.phptests/Feature/WhatAMemberIsNeverShownTest.php
    cited by
    lemonfiber-companion@5567a07a5blemonfiber-companion@18535b4235
  13. N3-R13acceptedMUST

    An identity removed from the household MUST result in a signed-out app at the next refused call, and MUST NOT continue to render what was already loaded.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/Obstacle.phpapp-modules/connection/src/Api/LetsGoOfARefusedSession.phpapp-modules/operator/tests/Internal/ViewModels/HowTheReadingWentTest.phptests/Arch/ARefusedSessionIsLetGoOfTest.php
    cited by
    lemonfiber@8443b32040lemonfiber-companion@da105d58a3lemonfiber-companion@9356200302lemonfiber-companion@a55f4063a9lemonfiber-companion@e3153a3a7elemonfiber-companion@3f1f96026flemonfiber-companion@4bce0fe122lemonfiber-companion@3886666859lemonfiber-companion@d6fa38221alemonfiber-companion@7f19b2821dlemonfiber-companion@5a286ac227lemonfiber-companion@ebf258b1cclemonfiber-companion@149bd6a9a4lemonfiber-companion@cf2e9f08d4lemonfiber-companion@0727a005e7lemonfiber-companion@8136512700lemonfiber-companion@625ae74917
  14. N3-R14acceptedMUST

    What a member may watch MUST be the core's answer; the player MUST NOT hold a second copy of a library, an age limit or an entitlement.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/household/src/Internal/Playing/PutsATitleOnScreen.phptests/Arch/OnlyThePlayerPlaysMediaTest.phptests/Feature/PlayingATitleTest.php
    cited by
    lemonfiber@7a05546202lemonfiber-companion@258f6fd1b9lemonfiber-companion@e69997c435lemonfiber-companion@5672b9a906lemonfiber-companion@331157e446lemonfiber-companion@73879348ablemonfiber-companion@95310ff593lemonfiber-companion@b2385cc95elemonfiber-companion@8a6bac1655lemonfiber-companion@9824ca3dc7lemonfiber-companion@1d98f47cc0
  15. N3-R15acceptedMUST

    Where the media server cannot be reached, playback MUST be declined with the reason, and MUST NOT be queued or shown as buffering.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/household/src/Internal/Playing/KeepsTheMembersPlace.phpapp-modules/household/tests/Internal/Presenters/HowPlayingIsToldTest.phptests/Feature/KeepingTheMembersPlaceTest.phptests/Feature/OpeningATitleTest.php
    cited by
    lemonfiber-companion@258f6fd1b9lemonfiber-companion@e69997c435lemonfiber-companion@5672b9a906lemonfiber-companion@6c7dc35a9blemonfiber-companion@f79b2d58dclemonfiber-companion@95310ff593lemonfiber-companion@b2385cc95e
  16. N3-R16acceptedMUST

    The player MUST NOT implement request, approval or allowance logic of its own.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companiontests/Arch/OnlyThePlayerPlaysMediaTest.php
    cited by
    lemonfiber-companion@e69997c435lemonfiber-companion@5672b9a906lemonfiber-companion@95310ff593lemonfiber-companion@b2385cc95e
  17. N3-R17acceptedMUST

    A refusal whose code says the household could not be asked MUST be reported to the operator as the media server not answering, and to a member as their library not answering right now, in the core's household sentence (G4-R16). It MUST NOT sign the member out, and MUST NOT be reported as the account lacking entitlement (ARCH-R138).

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/sdk/src/Internal/WhatARefusalMeant.phpapp-modules/household/src/Internal/ViewModels/WhatAMemberIsTold.phpapp-modules/household/src/View/Components/WhatStoodInTheWay.phptests/Feature/SeeingWhatYouCanWatchTest.php
    cited by
    lemonfiber-companion@a85314b8bblemonfiber-companion@93ebd1b1c3lemonfiber-companion@a55f4063a9
  18. N3-R18acceptedMUST

    A member MUST be able to sign in to a stack from the app with their household account's name and password, on the same screen the operator signs in on, and a refusal MUST NOT say which of the two was not recognised.

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/operator/src/Internal/Screens/SignIntoAStack.phpapp-modules/connection/src/Api/HowTheSignInWent.phptests/Feature/SigningIntoAStackTest.phpapp-modules/connection/tests/Api/HowTheSignInWentTest.php
    cited by
    lemonfiber@5d986e173esdk-php@bb56a4bf57lemonfiber-companion@16a75aa071
  19. N3-R19acceptedMUST

    A member's application MUST have a bottom bar of exactly four tabs (Home, Search, Requests and Profile), and MUST have no side menu. Profile MUST hold Switch house, App settings, and Remove this house from the phone. The tab whose screen is on view, or the tab the screen on view belongs to, MUST be the only one marked current (G3-R17).

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/household/resources/views/components/screen-closes.blade.phpapp-modules/household/src/Internal/Screens/FindsItsWayAroundTheHouse.phpapp-modules/household/tests/View/Components/ScreenClosesTest.phpapp-modules/operator/tests/View/Components/ScreenClosesTest.php
    cited by
    lemonfiber-companion@032c04f9f5
  20. N3-R20acceptedMUST

    Every sentence a member's screen shows about the stack that the core voices MUST be the core's household sentence (G4-R16), rendered and not composed (N3-R2). Where the core cannot voice an obstacle because nothing from the house arrives — the house cannot be reached, its certificate does not match the one paired (N1-R20), or it speaks a version this app does not (N1-R13) — the app MUST show its own household sentence, in plain words with no technical term (G2-R16), and MUST NOT present it as the house's own words. A sentence about the phone itself (no network, the local network refused, nowhere to keep a stack) MUST be the app's own, in household words (G2-R16). The conditions N1-R10 tells apart MUST each reach a member as a sentence and a remedy of its own.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/KindOfObstacle.phpapp-modules/household/src/Internal/ViewModels/WhatAMemberIsTold.phpapp-modules/kernel/tests/Api/ObstacleTest.phpapp-modules/household/tests/Internal/ViewModels/WhatAMemberIsToldTest.php
    cited by
    lemonfiber-companion@39dcf21b8e
  21. N3-R21acceptedMUST

    A member MUST be able to search for a title and ask for it from the app. A search MUST show only what the core answers under that member's limits (D8-R8). Before the member asks, the title MUST say, in the core's words, whether it is already here, already on its way, needs approval, and what it leaves of their allowance (N3-R4, N3-R5, D4-R5, D4-R10, D7-R15). The ask MUST be the core's action.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/household/src/Internal/Screens/LookingForATitle.phpapp-modules/household/src/Internal/Screens/AskingForATitle.phptests/Feature/SearchingForATitleTest.phptests/Contract/FindingTitlesContractTest.phptests/Contract/AskingForTitlesContractTest.php
    cited by
    lemonfiber-companion@d813497880
  22. N3-R22acceptedMUST

    A title's page MUST carry one primary action whose label follows the title's state as the core answers it: Play where it is here and playable from where the phone is; Play, not usable, with the reason beside it, where it is here and cannot be played from where the phone is (N3-R15); Ask where it may be asked for; and otherwise the state itself (waiting for approval, on its way, out on a date, or not available), shown as the action and not usable. The action MUST NOT be hidden in any state.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/household/src/Internal/Screens/WhatThisTitleIs.phptests/Feature/OpeningATitleTest.phpapp-modules/household/src/Internal/Screens/AskingForATitle.phptests/Feature/SearchingForATitleTest.php
    cited by
    lemonfiber-companion@d813497880lemonfiber-companion@f8b56b2cf9lemonfiber-companion@6c7dc35a9blemonfiber-companion@15cc44ec50
  23. N3-R23acceptedMUST

    Home MUST lead with the member's own titles: what they were part-way through, what they asked for that has arrived, and what they asked for that is on its way. Everything else on Home comes after those. A shelf with nothing in it MUST NOT be drawn.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/household/src/Internal/Presenters/HowTheirOwnTitlesRead.phpapp-modules/household/src/Internal/Screens/WhatYouCanWatch.phpapp-modules/household/tests/View/Components/ShelfRowTest.phptests/Feature/SeeingWhatYouCanWatchTest.php
    cited by
    lemonfiber-companion@258f6fd1b9lemonfiber-companion@e8c15e991elemonfiber-companion@15cc44ec50
  24. N3-R24acceptedMUST

    Every title MUST carry its name as text. Where the core serves no artwork for a title, it MUST be drawn as a poster lettered with its name.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/household/src/Internal/ViewModels/HowAPosterIsLettered.phpapp-modules/household/src/View/Components/Hero.phpapp-modules/household/tests/Internal/ViewModels/HowAPosterIsLetteredTest.phpapp-modules/household/tests/View/Components/HeroTest.php
    cited by
    lemonfiber-web@041ad0a774lemonfiber-web@bfbf918845lemonfiber-companion@f8b56b2cf9lemonfiber-companion@15cc44ec50lemonfiber-companion@9794ec21a8
  25. N3-R25acceptedMUST

    A member MUST be able to choose, from Profile, the language they hear (the title's original, Dutch or English) and the subtitles they read (none, Dutch or English). The choice MUST be kept on the phone for that member on that house, MUST be handed to the player each time a title is opened, and MUST NOT be sent to the house. Where a title offers no sound in the chosen language it MUST play the stream's own default sound, and where it offers no subtitles in the chosen language it MUST play with none; it MUST NOT be refused or reported as a fault for either.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/watching/src/Api/KeepingTheirLanguages.phpapp-modules/device/src/Api/PlatformPlayer.phptests/Contract/LanguagesKeptContractTest.phptests/Contract/PlayingContractTest.phptests/Feature/ChoosingWhatToHearAndReadTest.phptests/Feature/PlayingATitleTest.php
    cited by
    lemonfiber-companion@75608681f4
  26. N3-R26acceptedMUST

    Somebody invited MUST have a way in of their own: open the invitation, sign in, and land on Home, in at most three steps, each saying which it is, in words that name no part of the system. An invitation opened on a phone that holds no house MUST lead straight to it.

    locked by
    0.19.0 met
    recorded done
    lemonfiber-companionapp-modules/operator/src/Internal/Screens/JoiningAHouse.phpapp-modules/operator/src/Internal/Screens/YourStacks.phptests/Feature/JoiningAHouseTest.phptests/Feature/TheFirstRunIsASequenceTest.php
    cited by
    lemonfiber-companion@4f077129a2lemonfiber-companion@e22d29101b
  27. N3-R27acceptedMUST

    The app MUST open lemonfiber://join links (D6-R22), from the platform and from its own scanner, and MUST refuse one with a parameter missing, a parameter it does not know, or an expires in the past, saying in household words that the invitation cannot be used and to ask whoever sent it for a new one.

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/AJoinLink.phpapp-modules/kernel/tests/Api/AJoinLinkTest.phpbootstrap/Composition/NativePHP/ScreenRoutes.phptests/Feature/JoiningAHouseTest.php
    cited by
    lemonfiber-companion@4f077129a2lemonfiber-companion@4f6d457db0lemonfiber-companion@ffdf54bac0
  28. N3-R28acceptedMUST

    Opening a join link on a phone that holds no house MUST add the house from it, pinned to its fingerprint (N1-R19), MUST ask the person to choose a password for its name where it carries claim, or to sign in where it does not, MUST claim or sign in through the core, and MUST land on Home, in at most three steps (N3-R26). On a phone that holds the link's stack under the same fingerprint, it MUST go straight to choosing a password, or to signing in where the claim is spent or absent.

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/operator/src/Internal/Screens/JoiningAHouse.phpapp-modules/sdk/src/Api/Admissions.phptests/Feature/JoiningAHouseTest.php
    cited by
    lemonfiber-companion@4f077129a2lemonfiber-companion@f844e6af1blemonfiber-companion@4f6d457db0lemonfiber-companion@ffdf54bac0
  29. N3-R29acceptedMUST

    A join link whose stack the phone holds under a different fingerprint MUST be refused and MUST NOT replace the pin: an invitation is not pairing (N1-R63), and a link a stranger can forward MUST NOT re-pin a house. The refusal MUST say, in household words, that the invitation does not match the house on this phone.

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/operator/src/Internal/Screens/JoiningAHouse.phptests/Feature/JoiningAHouseTest.php
    cited by
    lemonfiber-companion@4f077129a2lemonfiber-companion@ffdf54bac0
  30. N3-R30acceptedMUST

    A connection opened from a join link whose certificate does not match the link's fingerprint MUST be refused, as N1-R20 refuses one; the member MUST be told that the invitation could not reach the house it names and to ask whoever sent it for a new one, and MUST NOT be offered re-pairing.

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/operator/src/Internal/WhatStoodInTheWayOfJoining.phptests/Feature/JoiningAHouseTest.php
    cited by
    lemonfiber-companion@4f077129a2lemonfiber-companion@ffdf54bac0