← The board

F10 Writing a plugin

Area
F — Extensibility
Audience
operator
Kind
feature
Status
accepted
Maturity
built
Labels
extensibility, cli, verification
Requires
F3
Relates to
F5F6F8G4

The feature in the specification · Read at

Requirements

  1. F10-R1acceptedMUST

    The published manifest schema MUST be fetchable with every release, and MUST be sufficient to validate a manifest without running lemonfiber.

    locked by
    0.16.0 uncited
    recorded done
    lemonfibercrates/lemonfiber-core/examples/plugin_schema.rscrates/lemonfiber-core/src/plugin.rscrates/lemonfiber-plugin/src/conforming.rscontract/plugin-manifest.schema.json.github/workflows/release-contract.yml
  2. F10-R2acceptedMUST

    Authoring MUST NOT require a language-specific library, and the generated schema MUST be the only description of the manifest format published to authors; a second, hand-maintained description MUST NOT be published beside it.

    locked by
    0.16.0 met
    recorded done
    lemonfibercontract/plugin-manifest.schema.json
    cited by
    lemonfiber-plugins@a94c962a75lemonfiber-plugins@a18ed49285lemonfiber-plugins@c0c82f32felemonfiber-plugins@d2b4c87eeb
  3. F10-R3acceptedMUST

    Validating, rehearsing and proving MUST each work against a local path, with no catalogue and no network involved.

    locked by
    0.16.0 met
    recorded done
    lemonfibercrates/lemonfiber/tests/architecture/what_the_build_forbids.rscrates/lemonfiber/tests/integration/what_a_manifest_claims.rscrates/lemonfiber/tests/integration/a_rehearsal_changes_nothing.rs
    cited by
    lemonfiber@becca9b0c3lemonfiber-plugins@a94c962a75
  4. F10-R4acceptedMUST

    A plugin's declared proofs MUST be runnable against recorded responses, so that neither authoring nor the catalogue's CI requires a live instance of the service.

    locked by
    0.16.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/plugin/recorded.rscrates/lemonfiber-core/src/plugin/claimed.rs
    cited by
    lemonfiber-plugins@55a4d6b84b
  5. F10-R5acceptedMUST

    Recorded responses MUST be readable data, reviewable in the same way the manifest is.

    locked by
    0.16.0 uncited
    recorded done
    lemonfibercrates/lemonfiber-core/src/plugin/recorded.rscrates/lemonfiber-core/src/plugin/claimed.rs
  6. F10-R6acceptedMUST

    A proof run against recordings MUST be reported as such, and MUST NOT be presented as a proof against the service.

    locked by
    0.16.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/plugin/recorded.rscrates/lemonfiber-core/src/plugin/claimed.rs
    cited by
    lemonfiber@e603c124c0lemonfiber-plugins@55a4d6b84b
  7. F10-R7acceptedMUST

    A template plugin MUST exist that validates and proves unmodified, and its CI MUST run the same commands the catalogue's CI runs.

    locked by
    0.16.0 met
    recorded done
    lemonfibercrates/lemonfiber-core/src/app/plugins.rs
    recorded partial
    lemonfiber-pluginsregistry/check.pyjustfile
    cited by
    lemonfiber@74863ecba7lemonfiber-plugins@a54b64d1fa
  8. F10-R8acceptedMUST

    The sets an author may name — adapters, core capabilities, and what a manifest may require of lemonfiber — MUST each be readable non-interactively.

    locked by
    0.16.0 met
    recorded done
    lemonfibercontract/extension-points.jsoncontract/plugin-manifest.schema.json
    cited by
    lemonfiber@553353f26e
  9. F10-R9acceptedMUST

    Publishing a plugin MUST require no infrastructure beyond a git repository.

    locked by
    0.16.0 met
    recorded done
    lemonfiberlemonfiber-plugins:.github/workflows/registry.yml
    cited by
    lemonfiber-plugins@1314510f32
  10. F10-R10acceptedMUST

    An authoring failure MUST name its location in the manifest and what was expected, and MUST report every violation in one pass.

    locked by
    0.16.0 uncited
    recorded done
    lemonfibercrates/lemonfiber-plugin/src/conforming.rs
  11. F10-R11superseded

    Superseded by F10-R12–F10-R16: an assertion failing where its declaration says it does is reported as failing as declared, not as passed. The number is not reused.

    replaced by
    F10-R12
    locked by
    no version locks it yet
  12. F10-R12acceptedMUST

    A declared proof and a contributed check MAY each declare, against a recorded response it names, that it fails there on one constraint of its expectation, which the declaration MUST name. Every such declaration MUST carry a reason, and a declaration without one, naming a recording that does not exist, naming a constraint its assertion does not make, or naming any verdict other than failing MUST be refused by name.

    locked by
    0.17.0 met
    recorded done
    lemonfibercrates/lemonfiber-plugin/src/schema/evidence.rscrates/lemonfiber-plugin/src/extension.rscrates/lemonfiber-plugin/src/refusing/failing.rscrates/lemonfiber-core/src/plugin/claimed/asserting.rscrates/lemonfiber-core/src/plugin/judging.rscrates/lemonfiber-core/src/app/plugins/proving.rs
    cited by
    lemonfiber@950df25bcclemonfiber@8ae60d4127
  13. F10-R13acceptedMUST

    Proving against recordings MUST run an assertion against every recording a declaration names and judge every constraint of its expectation there. One whose declared constraint is judged false there while every other constraint holds MUST be reported as failing as declared, apart from passed and from failed, naming the declared constraint, what the answer held there, and the declaration's reason. It MUST NOT be reported or counted as passed, and MUST NOT by itself fail the proving run.

    locked by
    0.17.0 met
    recorded done
    lemonfibercrates/lemonfiber-plugin/src/schema/evidence.rscrates/lemonfiber-plugin/src/extension.rscrates/lemonfiber-plugin/src/refusing/failing.rscrates/lemonfiber-core/src/plugin/claimed/asserting.rscrates/lemonfiber-core/src/plugin/judging.rscrates/lemonfiber-core/src/app/plugins/proving.rs
    recorded partial
    lemonfiber-plugins.github/reader/reader.py.github/reader/test_reader.py::test_every_declaration_an_assertion_failed_as_is_named
    cited by
    lemonfiber@950df25bcclemonfiber@8ae60d4127lemonfiber-plugins@dfe97e31c6
  14. F10-R14acceptedMUST

    An assertion whose failure on a declared recording is not the one declared MUST be reported as failed and MUST fail the proving run: where the declared constraint holds, naming the declaration as stale; where a constraint the declaration does not name is judged false, naming the declared constraint and every constraint that failed.

    locked by
    0.17.0 met
    recorded done
    lemonfibercrates/lemonfiber-plugin/src/schema/evidence.rscrates/lemonfiber-plugin/src/extension.rscrates/lemonfiber-plugin/src/refusing/failing.rscrates/lemonfiber-core/src/plugin/claimed/asserting.rscrates/lemonfiber-core/src/plugin/judging.rscrates/lemonfiber-core/src/app/plugins/proving.rs
    cited by
    lemonfiber@950df25bcclemonfiber@8ae60d4127
  15. F10-R15acceptedMUST

    A declaration MUST apply only to the recording it names. Against any other recording and against the live service, the assertion MUST be held to its own expectation, and the declaration MUST NOT change its verdict.

    locked by
    0.17.0 met
    recorded done
    lemonfibercrates/lemonfiber-plugin/src/schema/evidence.rscrates/lemonfiber-plugin/src/extension.rscrates/lemonfiber-plugin/src/refusing/failing.rscrates/lemonfiber-core/src/plugin/claimed/asserting.rscrates/lemonfiber-core/src/plugin/judging.rscrates/lemonfiber-core/src/app/plugins/proving.rs
    cited by
    lemonfiber@950df25bcclemonfiber@8ae60d4127
  16. F10-R16acceptedMUST

    An assertion MUST be reported as failing as declared only where it was run against the named recording and its expectation was judged false there. One that could not be run there MUST be reported unproven, and a declaration MUST NOT stand in for a run.

    locked by
    0.17.0 met
    recorded done
    lemonfibercrates/lemonfiber-plugin/src/schema/evidence.rscrates/lemonfiber-plugin/src/extension.rscrates/lemonfiber-plugin/src/refusing/failing.rscrates/lemonfiber-core/src/plugin/claimed/asserting.rscrates/lemonfiber-core/src/plugin/judging.rscrates/lemonfiber-core/src/app/plugins/proving.rs
    cited by
    lemonfiber@950df25bcclemonfiber@8ae60d4127
  17. F10-R17acceptedMUST

    The template plugin's manifest MUST name, in the form an editor reads, the manifest schema of the lemonfiber its targets.toml names — the schema published with that release, or the schema committed at that commit — and its CI MUST refuse the two naming different ones.

    locked by
    0.18.0 met
    recorded done
    lemonfiberplugin-template:plugin.toml
    recorded partial
    lemonfiber-plugins.github/reader/reader.py.github/reader/test_reader.py::test_the_schema_of_another_release_is_refused_naming_both
    cited by
    lemonfiber@9e0f83ac2clemonfiber-plugins@e88dd8b4a8
  18. F10-R18acceptedMUST

    A plugin's targets.toml MUST name exactly one lemonfiber to be proved against: a release, as lemonfiber = "X.Y.Z", or a commit of lemonfiber's main, in full, as commit. The reader MUST refuse by name a file naming neither or both, a commit not in full, and a commit main does not hold, and MUST build and ask nothing when it refuses.

    locked by
    0.18.0 met
    recorded done
    lemonfiber-plugins.github/reader/reader.py.github/reader/test_reader.py::test_both_are_refused_naming_both.github/reader/test_reader.py::test_a_commit_main_does_not_hold_is_refused_before_anything_is_built
    cited by
    lemonfiber-plugins@745d2b1c84
  19. F10-R19acceptedMUST

    Where targets.toml names a commit, the reader MUST build lemonfiber at that commit the way the release train's gate builds its candidate — the dist profile, the toolchain the commit pins, its committed lockfile and every submodule it embeds — MUST keep that build under the commit and ask the kept build thereafter, and MUST ask it every question it asks a release. The report it writes MUST name the commit where it would name a release.

    locked by
    0.18.0 met
    recorded done
    lemonfiber-plugins.github/reader/reader.py.github/reader/test_reader.py::test_a_commit_on_main_is_built_as_the_gate_builds_its_candidate_and_kept_under_it.github/reader/test_reader.py::test_the_report_names_the_commit_that_answered
    cited by
    lemonfiber-plugins@745d2b1c84