← The board

N25 A plugin after it lands

Area
N — Companion
Audience
operator
Kind
feature
Status
accepted
Maturity
built
Labels
mobile, extensibility, ux
Requires
N1N5F5F6
Relates to
N6N11N20F14

The feature in the specification · Read at

Requirements

  1. N25-R1acceptedMUST

    The app MUST offer rehearsing a plugin install, and the rehearsal MUST show every change in order with its full path, every proof, every bundled setting the plugin declares it will change, and every capability it would leave contested (F6-R1).

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/APluginInstall.phptests/Feature/WhatExtendsThisStackTest.php
    cited by
    lemonfiber-companion@9ba81beddclemonfiber-companion@f751b49b62
  2. N25-R2acceptedMUSTClaim it

    A proof that was not asked MUST NOT be shown as passed, and a check the stack could conclude nothing about MUST NOT be shown as failed.

    locked by
    0.18.0 uncited
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/WhatAProofCameTo.phpapp-modules/kernel/tests/Api/WhatAProofCameToTest.phptests/Feature/WhatExtendsThisStackTest.php
  3. N25-R3acceptedMUST

    An install MUST NOT be shown as installed until its proofs held and the stack's own checks found nothing it made worse (F6-R3, F6-R4, N5-R11).

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/APluginInstall.phpapp-modules/kernel/tests/Api/APluginInstallTest.phptests/Feature/WhatExtendsThisStackTest.php
    cited by
    lemonfiber-companion@258f6fd1b9
  4. N25-R4acceptedMUSTClaim it

    Where an install was put back, the app MUST show what went back and what did not, with the reason each is still standing, and MUST NOT present a partial reversal as complete (F6-R5, F6-R6, N6-R6).

    locked by
    0.18.0 uncited
    recorded done
    lemonfiber-companionapp-modules/sdk/src/Internal/TheReversal.phptests/Feature/WhatExtendsThisStackTest.php
  5. N25-R5acceptedMUST

    The app MUST offer updating a plugin, and MUST show the version it moves from and to and every service that stops for it before it is agreed to; where the update did not hold, it MUST show what putting the previous version back came to (F6-R8, F6-R9).

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/AnUpdate.phpapp-modules/operator/src/Internal/Presenters/HowAPluginAccountReads.phptests/Contract/ExtendingTheStackContractTest.phptests/Feature/WhatExtendsThisStackTest.php
    cited by
    lemonfiber-companion@4d42534214
  6. N25-R6acceptedMUST

    The app MUST offer removing a plugin, and MUST show every service it stops and every capability it would leave unfilled before the removal is agreed to (F6-R8, F6-R11).

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/APluginRemoval.phpapp-modules/kernel/src/Api/TheCapabilitiesLeftUnfilled.phptests/Contract/ExtendingTheStackContractTest.phptests/Feature/WhatExtendsThisStackTest.php
    cited by
    lemonfiber-companion@4d42534214
  7. N25-R7acceptedMUST

    A removal that put the files back without writing the record MUST be shown as partial, and MUST NOT be shown as removed (F6-R7).

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/APluginRemoval.phpapp-modules/kernel/tests/Api/APluginRemovalTest.phptests/Feature/WhatExtendsThisStackTest.php
    cited by
    lemonfiber-companion@4d42534214
  8. N25-R8acceptedMUSTClaim it

    Every installed plugin MUST be shown with the source it was installed from, its version and whether it was reviewed, and an unreviewed plugin MUST be shown as unreviewed wherever it appears (F5-R5, F5-R7).

    locked by
    0.18.0 uncited
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/WhatVouchesForAPlugin.phpapp-modules/operator/resources/views/components/the-plugin.blade.phptests/Feature/WhatExtendsThisStackTest.php
  9. N25-R9acceptedMUSTClaim it

    A rehearsed install, update or removal MUST be labelled as a rehearsal (N6-R1).

    locked by
    0.18.0 uncited
    recorded done
    lemonfiber-companionapp-modules/operator/resources/views/what-extends-this-stack.blade.phptests/Feature/WhatExtendsThisStackTest.php
  10. N25-R10acceptedMUSTClaim it

    A plugin record that could not be read MUST be told apart from there being no plugins installed.

    locked by
    0.18.0 uncited
    recorded done
    lemonfiber-companionapp-modules/sdk/src/Api/Extenders.phptests/Feature/WhatExtendsThisStackTest.php
  11. N25-R11acceptedMUST

    Where an install or update states taking[], the rehearsal MUST show each service that takes a privileged shape, the egress guard's or render, with the capabilities it is granted and the devices it is given; the operator MUST approve each one apart from the offer, agreeing to the offer MUST approve none of them, and the agreement MUST send <shape>@<service> in approved for exactly the services approved. A service not approved MUST leave the install refused, and the app MUST say which service was not approved and why it needs the shape (F14-R12, F14-R21, ARCH-R238).

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/APrivilegedShape.phpapp-modules/sdk/src/Internal/PluginInstallReports.phpapp-modules/sdk/tests/Api/PluginInstallsTest.phptests/Feature/WhatExtendsThisStackTest.php
    cited by
    lemonfiber-companion@262e39bac5lemonfiber-companion@e22d29101b
  12. N25-R12acceptedMUST

    The app MUST list, on each installed plugin, every setting its services read, with the services that read it, its default and the operator's value where one is recorded, and MUST offer changing it and putting it back to its default, each rehearsed with the services it restarts and agreed to by the offer that rehearsal answered (ARCH-R254, ARCH-R255).

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/SettingWhatServicesRead.phpapp-modules/sdk/src/Api/Tuners.phpapp-modules/operator/src/Internal/Screens/HowThisPluginIsSet.phptests/Contract/SettingWhatServicesReadContractTest.phptests/Feature/ChangingAPluginsSettingTest.php
    cited by
    lemonfiber-companion@f1b60c3be1
  13. N25-R13acceptedMUST

    The app MUST list each secret a plugin's services read with whether a value is held and where it came from, MUST NOT show or offer to change a secret's value, and MUST say a secret is changed at the stack's terminal (ARCH-R256).

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/ASecret.phpapp-modules/sdk/src/Api/TheSettingsListed.phpapp-modules/operator/resources/views/how-this-plugin-is-set.blade.phptests/Feature/ChangingAPluginsSettingTest.php
    cited by
    lemonfiber-companion@9ba81beddclemonfiber-companion@f1b60c3be1
  14. N25-R14acceptedMUST

    A plugin's settings and secrets MUST be shown to the operator alone and MUST NOT appear anywhere a member is shown.

    locked by
    0.18.0 met
    recorded done
    lemonfiber-companionapp-modules/operator/src/Internal/Screens/HowThisPluginIsSet.phpapp-modules/operator/src/Providers/OperatorServiceProvider.php
    cited by
    lemonfiber-companion@f1b60c3be1
  15. N25-R15acceptedMUST

    Where the stack holds answers a plugin gave outside its contract, the app MUST offer proving the plugin again, and before asking MUST show what the proof would ask and which capability a pass would clear. The yes MUST carry back the offer the stack named (N2-R27). A proof that fails MUST leave that capability shown as unfilled with the stack's reason, and MUST NOT be presented as passed (N25-R2).

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/APluginReproof.phpapp-modules/sdk/src/Api/PluginInstalls.phpapp-modules/operator/src/Internal/Screens/WhatExtendsThisStack.phptests/Contract/ExtendingTheStackContractTest.phptests/Feature/ProvingAPluginAgainTest.php
    cited by
    lemonfiber-companion@77c800c514
  16. N25-R16acceptedMUST

    Each installed plugin MUST list its demand recipes with the title and reason the manifest gives, and MUST offer running each one that asks the operator for no value (N1-R2).

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/WhenARecipeRuns.phpapp-modules/sdk/src/Internal/PluginRecords.phpapp-modules/operator/resources/views/what-extends-this-stack.blade.phptests/Feature/RunningAPluginsRecipeTest.php
    cited by
    lemonfiber-companion@73ccf58534
  17. N25-R17acceptedMUST

    Running a demand recipe MUST be rehearsed first and the rehearsal labelled a rehearsal (N6-R1), showing every step in the order the recipe gives, each adapter as lemonfiber's, and each pair it would carry with the value's name, where it comes from and the destination by the manifest's name (N20-R3, N20-R5, N20-R6).

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/ARecipeRun.phpapp-modules/operator/resources/views/components/the-recipe.blade.phptests/Feature/RunningAPluginsRecipeTest.php
    cited by
    lemonfiber-companion@73ccf58534
  18. N25-R18acceptedMUST

    A pair a run would carry out of the machine, or that releases a value a service answered with, MUST be agreed to as itself, apart from the run and with none agreed for the operator, and an approval given at install MUST NOT be taken as an approval of a run (N20-R1, N20-R2); the run MUST send the offer its rehearsal named and exactly the pairs approved, and an offer that moved MUST be rehearsed and shown again with nothing run.

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/ARecipeRunAgreed.phpapp-modules/kernel/src/Api/APlugin.phpapp-modules/sdk/src/Api/Extenders.phptests/Contract/ExtendingTheStackContractTest.phptests/Feature/RunningAPluginsRecipeTest.php
    cited by
    lemonfiber-companion@73ccf58534
  19. N25-R19acceptedMUST

    A run MUST be followed to its end and MUST show what ran, step by step, with each step the stack held and the stack's reason, and MUST NOT be shown as having run where a step was held.

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/WhatARecipeRunDid.phpapp-modules/sdk/src/Internal/PluginRecipeRuns.phptests/Feature/RunningAPluginsRecipeTest.php
    cited by
    lemonfiber-companion@73ccf58534
  20. N25-R20acceptedMUST

    A demand recipe that asks the operator for a value MUST NOT be run from the app; it MUST be listed with what it asks for, and the app MUST say it is run at the web console or the terminal. This is the exception to N1-R2 for runs: the value may be a secret, and the app takes no value a recipe asks for.

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/TheInputsARecipeAsks.phpapp-modules/operator/src/Internal/WhatARowOffers.phptests/Feature/RunningAPluginsRecipeTest.php
    cited by
    lemonfiber-companion@73ccf58534
  21. N25-R21acceptedMUST

    Where an install or update of a third-party plugin names a credential of another service that would cross to it, the rehearsal MUST show each one with the setting it is held under, the service whose credential it is and the capability of the plugin's own it is for, and never its value. The operator MUST approve each one apart from the offer, on a switch of its own that is off until turned on; agreeing to the offer MUST approve none of them, and the yes MUST carry each approved one exactly as the reading names it (ARCH-R323, F14-R20). Every update MUST ask again, and a grant the plugin already holds MUST NOT be taken as approved. Where the stack refuses the act for a grant left off, the refusal MUST be drawn in the stack's words.

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/AGrantAsked.phpapp-modules/sdk/src/Internal/GrantRows.phpapp-modules/operator/resources/views/components/the-plugins-account.blade.phptests/Feature/WhatExtendsThisStackTest.php
    cited by
    lemonfiber-companion@168bfe915b
  22. N25-R22acceptedMUST

    Each installed plugin MUST list the grants it holds, each with the setting the credential is held under, the service whose credential it is, the capability it fills and when it was approved, and never a value (ARCH-R323).

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/ACredentialGrant.phpapp-modules/operator/src/Internal/Presenters/HowAPluginsSettingsRead.phptests/Feature/ChangingAPluginsSettingTest.php
    cited by
    lemonfiber-companion@168bfe915b
  23. N25-R23acceptedMUST

    The app MUST offer revoking each grant a plugin holds. The revoke MUST be read first, labelled as nothing ended yet (N6-R1), showing the grant it ends and the plugin's services it would restart; the yes MUST carry back the offer the stack named (N2-R27). Afterwards the app MUST show whether the grant was ended, the services that restarted and, where they did not, the stack's reason, and MUST say that the plugin stays installed and that rotating the credential is what takes back a value already handed (ARCH-R324).

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/kernel/src/Api/ACredentialRevokeAgreed.phpapp-modules/sdk/src/Api/GrantEnders.phpapp-modules/operator/src/Internal/Screens/WhatItHoldsToLetThemIn.phptests/Contract/EndingACredentialGrantContractTest.phptests/Feature/EndingAGrantTest.php
    cited by
    lemonfiber-companion@168bfe915b
  24. N25-R24acceptedMUST

    A plugin's grants, and revoking them, MUST be shown to the operator alone and MUST NOT appear anywhere a member is shown.

    locked by
    1.0.0 met
    recorded done
    lemonfiber-companionapp-modules/operator/src/Internal/Screens/WhatItHoldsToLetThemIn.phpapp-modules/operator/src/Internal/Screens/HowThisPluginIsSet.php
    cited by
    lemonfiber-companion@168bfe915b