The 0.x line is a sustained beta with weekly-to-daily releases. The
1.0.0 tag carries different promises — API stability, semantic
versioning, longer support window — and so the gate to cut it is
deliberately strict.
Maintainer-approval gate. Meeting every criterion below does NOT auto-clear the gate. The
1.0.0tag is cut only with explicit maintainer approval, even if everything on this list is green. This file is the checklist, not the trigger.
2026-05-24 is the working deadline. It is not a commit. If criteria slip, the date slips.
| # | Criterion | How we check it |
|---|---|---|
| 1 | Zero open bug-labelled issues marked severity:high or severity:critical |
gh issue list --label "bug,severity:high" --state open returns empty |
| 2 | Full test suite green on every Python version in CI matrix (3.10–3.13) | gh run list --workflow=test.yml --branch=master --limit=1 shows success |
| 3 | All 41 sacred invariants (CLAUDE.md) have at least one regression test |
manual audit + invariant-to-test crossreference grep |
| 4 | Pyright strict passes on splicecraft.py and splicecraft_cli.py |
pyright exits 0 |
| 5 | ruff check passes |
ruff check . exits 0 |
| 6 | Coverage ≥ 80% on biology primitives (_scan_restriction_sites, _rc, _iupac_pattern, _translate_cds, _feat_len, _bp_in, _rebuild_record_with_edit) |
coverage report --include="splicecraft.py" --fail-under=80 after the targeted run |
| 7 | All 8 terminals in RELEASE_CHECKLIST.md smoke matrix pass |
physical sign-off in the checklist for the release candidate |
| 8 | Pre-update snapshot + restore round-trip verified on a real user data dir | manual run of splicecraft update --restore-pre-update latest |
| 9 | Bundled .dna round-trip verified against the commercial editor's free viewer |
manual run on AB303066.dna |
| 10 | README screenshot is current within the release candidate | visual diff against the current splicecraftScreenshot.png |
| 11 | CHANGELOG entry for 1.0.0 reads as a coherent release narrative — not a commit dump |
maintainer review |
| 12 | Public docs site published (mkdocs on GitHub Pages, or equivalent) | https://binomica-labs.github.io/SpliceCraft/ resolves |
| 13 | SECURITY.md disclosure channel tested end-to-end |
maintainer self-test |
| 14 | No TODO / FIXME / HACK markers in splicecraft.py or splicecraft_cli.py |
`grep -nE "TODO |
| # | Criterion | Why |
|---|---|---|
| S1 | One non-maintainer code reviewer has signed off | Bus-factor mitigation |
| S2 | At least one merged community PR in the 0.x history |
Sanity check on the contribution path |
| S3 | _run_update_subcommand (currently 532 lines) and the other 200+-line functions are below 200 lines each |
Reviewability |
| S4 | Conda-forge / bioconda recipe has been accepted upstream | Reach beyond PyPI |
| S5 | Performance regression suite (tests/test_performance.py) has CI-asserted baselines, not just smoke-runs |
Catch silent perf cliffs |
| S6 | PlasmidApp (currently 156 methods) factor-OR-document decision resolved 2026-05-17: mixin extraction declined as cosmetic — controllers cut through call chains, not around them. See PlasmidApp.__doc__ for the full rationale. v2.x viewmodel layer is the proper-decoupling project. |
Long-term maintainability |
| S7 | Issue templates have been used at least once by a real reporter | Validates the channel |
| S8 | Conda recipe has an open PR or merged PR in bioconda-recipes | Documents the canonical-copy promise |
These are the post-1.0.0 promises a maintainer should be prepared to keep, and the reason the gate is strict:
- Semantic versioning. Breaking changes require a major bump
(
2.0.0). Behaviour changes inside a minor bump must be backward-compatible at the file-format, agent-API, and CLI levels. - Two-version support window. Bugs filed against
1.x.yget a fix in the latest1.xifxiscurrent-1or newer. Older1.xlines are upgrade-only. - Data format stability. Schema versions for
plasmid_library.json,collections.json,parts_bin.json,primers.json,feature_library.json, etc. require migrators for every bump (the_ENTRY_MIGRATIONSregistry is the lever; invariant #36). A user dropping a0.xdata dir into a1.xinstall must boot cleanly and never lose entries. - Agent-API surface stability. No endpoint removal without a
1.xminor-bump deprecation window. New endpoints are additive. - CLI flag stability. No flag rename or removal without the same deprecation window. New flags are additive.
- Unicode rendering stability. Terminal emulators ship glyph changes constantly; the braille-dot map will shift visually with the user's fonts and that is by design.
- Performance. We document budgets (
< 5 s first render on 5 MB,< 33 ms/frame) but a1.xminor release may slip these if the trade-off is clearly worth it. Regressions WILL be flagged in release notes. - Optional-dependency behaviour.
primer3-pyandpyhmmerare required today; should either project become unmaintained, we reserve the right to ship a1.xthat vendors a fallback or reduces functionality, documented in release notes.
Current state (snapshot at the time of last edit; re-run before cutting the release candidate):
| Gate | State |
|---|---|
| Hard #1 | verify before RC |
| Hard #2 | verify before RC |
| Hard #3 | verify before RC |
| Hard #4 | verify before RC |
| Hard #5 | verify before RC (new — added 2026-05-17) |
| Hard #6 | verify before RC |
| Hard #7 | verify before RC |
| Hard #8 | verify before RC |
| Hard #9 | verify before RC |
| Hard #10 | verify before RC |
| Hard #11 | verify before RC |
| Hard #12 | verify before RC (new — added 2026-05-17) |
| Hard #13 | verify before RC |
| Hard #14 | green (0 markers as of 2026-05-17) |
Each "verify before RC" should be re-checked and flipped before
proposing the 1.0.0 tag. The maintainer-approval gate sits above
all of these.