B1 Forms & partial stacks
- Area
- B — Running it
- Audience
- operator
- Kind
- feature
- Status
- accepted
- Maturity
- built
- Labels
- cli, wiring
The feature in the specification · Read at
Requirements
Each service MUST sit in exactly one profile: for a first-party plugin's services, the one the bundle assigns that plugin; for any other plugin's, its own; and for a stack manifest's service, the one it declares.
Forms MUST be declared as data, in the bundle or in the stack manifest of a stack directory; adding or altering one MUST NOT require a change to lemonfiber's source.
A form's closure MUST be computed from the manifest, never hardcoded.
Closures MUST be intersected with the operator's configured protocols before starting anything.
Multiple forms MUST be startable together, resolving to the union of their closures.
- locked by
- 0.1.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/stack/closure.rs
- cited by
- lemonfiber@d4e78d2491
A service present in several active forms MUST start exactly once.
lemonfiber MUST report, before starting, which services a form will start and which were filtered out and why.
Profiles MUST NOT be selectable directly by the operator.
An unknown form name MUST produce a list of valid forms and a nearest-match suggestion.
Narrowing the active form MUST stop only services outside the new closure, leaving shared services running.
- locked by
- 0.8.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/app/engine/switch.rs
- cited by
- lemonfiber@e2cc3abbfelemonfiber@bf2d42f1fd
A single service failing to start MUST NOT stop or roll back the rest of the form.
A form referencing an undeclared profile MUST fail validation of the bundle or the stack manifest declaring it, at load time.
- locked by
- 0.8.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/app.rscrates/lemonfiber-core/src/stack.rscrates/lemonfiber-manifest/src/lib.rscrates/lemonfiber-manifest/src/schema.rs
- recorded partial
- lemonfiber-media-stackscripts/manifest_rules.pyscripts/test_validate_manifest.py::manifest references a profile that was never declared
- cited by
- lemonfiber@ce320dfaf0
library MUST be startable with no third-party accounts configured.
- locked by
- 0.8.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-core/src/model/running.rs
- recorded partial
- lemonfiber-media-stackstack.tomlscripts/check_runs.py
- cited by
- lemonfiber@fdb3bda70f
No service MAY declare a depends_on crossing a profile boundary, except within a profile whose services are always co-activated; the one exception is network.via (ARCH-R236), which starts the filler of the capability it names first, whatever its profile, and starts the service only once that filler is healthy.
- locked by
- 0.8.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/app.rscrates/lemonfiber-core/src/stack.rscrates/lemonfiber-manifest/src/lib.rscrates/lemonfiber-manifest/src/schema.rs
- recorded partial
- lemonfiber-media-stackscripts/container_rules.py::def retiredscripts/test_validate_manifest.py::ARCH-R246 depends_on, refused naming network.via
- cited by
- lemonfiber@ce320dfaf0
Which profiles require a configured provider MUST be declared by the bundle or the stack manifest declaring the profile; lemonfiber MUST NOT identify them by name.
- locked by
- 0.8.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-manifest/src/schema.rs
- recorded partial
- lemonfiber-media-stackstack.toml
- cited by
- lemonfiber@b732de22bdlemonfiber@3a418dec82
Status MUST name, for each service, every active form whose closure holds it, and MUST NOT name a superseded form.
Status MUST report each service an active form's closure filtered out, with the provider it needs and the forms that asked for it.
A service MAY declare the memory it expects to need; a form's introspection MUST report the sum over the services it would start as the stack's estimate, MUST name the services that declare none, and MUST NOT present it as a measurement.
- locked by
- 0.17.0 met
- recorded done
- lemonfibercrates/lemonfiber-core/src/docker.rscrates/lemonfiber-core/src/stack/standing.rscrates/lemonfiber-core/src/stack/closure.rs
- recorded partial
- lemonfiber-media-stackscripts/manifest_rules.pyscripts/test_validate_manifest.py::memory_mib must be a whole number
- cited by
- lemonfiber@e0adec66c3lemonfiber@c155500c23lemonfiber@844c3a814elemonfiber-media-stack@8dc90b5e9dlemonfiber-web@3619499f21lemonfiber-web@8591debd30lemonfiber-web@93aca95f42
Where a form is active, the condition status reports for the whole stack MUST be worked out over the services the active forms hold and those present, and MUST NOT count a service that is neither.
Status MUST NOT list among its services a service an active form's closure filtered out while that service is not present; it is reported as filtered (B1-R17).
A form's introspection MUST name, among the services it would start, those already running, and MUST NOT present one of them as a service that starting the form would bring up; where what is running could not be read, it MUST say so rather than present every service as one that would start.