← The board

B1 Forms & partial stacks

Area
B — Running it
Audience
operator
Kind
feature
Status
accepted
Maturity
built
Labels
cli, wiring
Relates to
B2F2

The feature in the specification · Read at

Requirements

  1. B1-R1acceptedMUST

    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.

    locked by
    0.8.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-manifest/src/schema.rs
    recorded done
    lemonfiber-media-stackscripts/manifest_rules.pyscripts/test_validate_manifest.py::unknown profile
    cited by
    lemonfiber@b732de22bd
  2. B1-R2acceptedMUST

    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.

    locked by
    0.8.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-manifest/src/schema.rs
    recorded done
    lemonfiber-media-stackstack.tomlscripts/manifest_rules.py::validate_forms
    cited by
    lemonfiber@b732de22bd
  3. B1-R3acceptedMUST

    A form's closure MUST be computed from the manifest, never hardcoded.

    locked by
    0.8.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-core/src/model/running.rs
    cited by
    lemonfiber@fdb3bda70flemonfiber@3a418dec82
  4. B1-R4acceptedMUST

    Closures MUST be intersected with the operator's configured protocols before starting anything.

    locked by
    0.1.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/stack/closure.rs
    cited by
    lemonfiber@86c24459c4lemonfiber@e3fb72e649lemonfiber@3a418dec82lemonfiber@d4e78d2491
  5. B1-R5acceptedMUST

    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
  6. B1-R6acceptedMUST

    A service present in several active forms MUST start exactly once.

    locked by
    0.8.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-core/src/model/running.rs
    cited by
    lemonfiber@fdb3bda70f
  7. B1-R7acceptedMUST

    lemonfiber MUST report, before starting, which services a form will start and which were filtered out and why.

    locked by
    0.8.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-core/src/model/running.rs
    cited by
    lemonfiber@905074462blemonfiber@fdb3bda70flemonfiber@e3fb72e649
  8. B1-R8acceptedMUST

    Profiles MUST NOT be selectable directly by the operator.

    locked by
    0.8.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-manifest/src/schema.rs
    cited by
    lemonfiber@b732de22bd
  9. B1-R9acceptedMUST

    An unknown form name MUST produce a list of valid forms and a nearest-match suggestion.

    locked by
    0.8.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-core/src/model/running.rs
    cited by
    lemonfiber@fdb3bda70f
  10. B1-R10acceptedMUST

    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
  11. B1-R11acceptedMUST

    A single service failing to start MUST NOT stop or roll back the rest of the form.

    locked by
    0.8.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/app.rscrates/lemonfiber-core/src/app/engine.rscrates/lemonfiber-fixtures/src/support.rs
    cited by
    lemonfiber@5e877734f9
  12. B1-R12acceptedMUST

    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
  13. B1-R13acceptedMUST

    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
  14. B1-R14acceptedMAY

    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
  15. B1-R15acceptedMUST

    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
  16. B1-R16acceptedMUST

    Status MUST name, for each service, every active form whose closure holds it, and MUST NOT name a superseded form.

    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
    cited by
    lemonfiber@e0adec66c3lemonfiber@c155500c23lemonfiber@844c3a814elemonfiber-web@3619499f21lemonfiber-web@edf982386b
  17. B1-R17acceptedMUST

    Status MUST report each service an active form's closure filtered out, with the provider it needs and the forms that asked for it.

    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
    cited by
    lemonfiber@e0adec66c3lemonfiber@c155500c23lemonfiber@844c3a814elemonfiber-web@3619499f21lemonfiber-web@edf982386b
  18. B1-R18acceptedMUST

    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
  19. B1-R19acceptedMUST

    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.

    locked by
    0.17.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/docker.rscrates/lemonfiber-core/src/app/engine/status.rs
    cited by
    lemonfiber@b767cc9068
  20. B1-R20acceptedMUST

    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).

    locked by
    0.17.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/docker.rscrates/lemonfiber-core/src/app/engine/status.rs
    cited by
    lemonfiber@b767cc9068lemonfiber-web@3619499f21lemonfiber-web@edf982386b
  21. B1-R21acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/stack/closure.rscrates/lemonfiber-core/src/app/engine/preview.rs
    cited by
    lemonfiber@905074462blemonfiber-companion@b571a50f5d