Skip to content

Stability

What you can build on, and how it changes.

The public API

Everything importable from the top-level mergeproof package is public:

for names
writing a check Check, Outcome, Status, Annotation, and the outcome helpers ok, fail, warn, pending, skip, error
writing a verifier Verifier, Verification
writing an evaluation check EvalScore, EvalRun, MissingCredentials
what a check sees Context, ChangedFile, Comment, CheckRun
what a check produces Report, RuleResult, RequirementResult
the policy Policy, Rule, Requirement, When, Severity, PolicyError
__version__

Plus the entry-point groups mergeproof.checks and mergeproof.verifiers, the Params inner class convention, and the run(ctx, params, files), explain(params), evidence_template(params) and verify(url, match) signatures.

Also public: the policy file format (schema), the command line and its exit codes, the action's inputs and outputs, the JSON report and receipt documents, and the evidence block format.

Everything else under mergeproof.* (providers, render, engine, replay, doctor, individual check modules) is internal. Import it if you must, and expect it to change in minors.

How it changes

  • From 1.0, semantic versioning: a public name or a documented behaviour changes incompatibly only in a major release.
  • Before removing or changing something public, it is deprecated for at least one minor: it keeps working, emits a warning that names the replacement, and the changelog says so.
  • Additions (a new field on Outcome, a new parameter with a default, a new command) land in minors and never break a plugin that ignores them.
  • A test in this repository, tests/unit/test_public_api.py, pins the public surface and loads every example policy and both example plugins against it. Changing that list is a review conversation, not a side effect.

Before 1.0

Until 1.0 the same rules are followed in spirit: breaking changes are announced in the changelog with a migration line, and the floating @v0 tag of the action only moved within 0.x.