N25 A plugin after it lands
- Area
- N — Companion
- Audience
- operator
- Kind
- feature
- Status
- accepted
- Maturity
- built
- Labels
- mobile, extensibility, ux
The feature in the specification · Read at
Requirements
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).
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.
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).
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).
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).
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).
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).
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).
A rehearsed install, update or removal MUST be labelled as a rehearsal (N6-R1).
A plugin record that could not be read MUST be told apart from there being no plugins installed.
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
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
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
A plugin's settings and secrets MUST be shown to the operator alone and MUST NOT appear anywhere a member is shown.
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
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).
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).
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
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.
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.
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.
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).
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
A plugin's grants, and revoking them, MUST be shown to the operator alone and MUST NOT appear anywhere a member is shown.