v0.7.0rc3 — soak-substrate (test trio + coverage gate)
Pre-release[0.7.0rc3] - 2026-05-22
Test coverage
- CI now enforces ≥80% test coverage.
pyproject.tomlgains
[tool.coverage.run]+[tool.coverage.report]config with
fail_under = 80;ci.ymlrunspytest --covso a PR that drops
coverage below the floor fails the build. Excluded modules
(dashboard/*,__main__.py,upgrade.py,downgrade.py,
llm.py) are under-testable-by-design and documented in the
config — Streamlit UI / entry-point shim / release-engineering
scripts requiring real Fly+AWS / deprecated optional-LLM module
the deployed product doesn't use. - Current coverage: 86% (suite 850 → 855 passing).
- README coverage badge added:
coverage-86%-brightgreen.
Static, manually updated on each release (matches the existing
static-badge pattern for Status / Python / License / MCP). - New
tests/test_nli.pyadditions cover:_ensure_loadedHF
download failure →NLIUnavailableError;_ensure_loaded
unexpected label-set rejection;prewarm()swallows
unavailability per acceptable-secondary-observability category;
classify_pairsoftmax + input-building path with stubbed session.
CI / release tooling
-
New
.github/workflows/ci-server-extras.ymlworkflow. Installs
mnemon-memory[server]ONLY (the production-equivalent install
used by the Fly Docker image) plus pytest as a separate test
runner, and runs the full suite under that minimal install. Catches
the failure class that bitmemory_check_contradictionson
2026-05-22 — production code that imports something from[llm]/
[ui]would passci.yml(full[dev]extras installed) but
fail this workflow. Includes a guard assertion that
llama-cpp-pythonis NOT installed under[server]— so a future
PR can't accidentally move it across without flipping the
intentional "mnemon is LLM-free by default" posture. -
scripts/promote_stable.sh layer3 --exercise-all-tools. New
opt-in flag that, after the test Fly app is up but before the
downgrade step, iterates every registered MCP tool against the
remote and asserts each returns cleanly (no opaque error envelope,
no unhandled exception, no NLI/embedder/baked-model breakage).
Composes withtests/test_tools_integration.py(PR #158, local-
process Python-level canary): this Fly-level probe catches the
failure modes the local canary can't see (missing baked models,
Anthropic MCP proxy timeouts, transport regressions). Tool list
resolved dynamically frommcp._tool_manager._toolsso tools
added in future PRs are exercised automatically. Adds ~30-60s to
the layer3 run; opt-in so non-NLI-touching releases aren't taxed. -
scripts/_layer3_remote_helper.pygains anexercise-all-tools
subcommand wired through the FastMCP tool manager. Two regression-
lock tests added totests/test_promote_stable.shharness (15
passing, was 13) covering helper dispatch + flag plumbing through
the bash dispatcher.