Verification coverage and limits#
The required gate is 100% measured line and branch coverage of pain001,
which is stricter than 98%. poetry run make test enforces it using the complete
unit/integration suite, not a separately classified unit-only suite. Coverage
exclusions remain visible in pyproject.toml; no new exclusions are introduced
to achieve this result. A coverage percentage proves execution, not that every
possible input, combination or financial interpretation is correct.
Feature evidence map#
The following map identifies executable evidence, not a claim of exhaustive behavioral coverage. Test files include positive and negative cases; examples are representative workflows. Paths in this table are repository-relative.
Feature family |
Regression evidence |
Executable example or integration |
|---|---|---|
Message families and XML output |
|
|
CLI and configuration |
|
|
REST jobs and request validation |
|
|
Scheme, rail and charset rules |
|
|
Bank responses and response generation |
|
|
Migration |
|
|
Streaming and input formats |
|
|
Metrics and tracing |
|
|
MCP and LSP adapters |
|
|
Redis persistence and rate limits |
|
|
Corpus, overlays, schema inventories and JSON twins |
|
|
CEL policies |
|
|
Review-only corrections |
|
|
Plugin contracts and execution |
|
|
Async wrappers |
|
|
SFTP trust, atomic upload and retries |
|
|
Encryption and security boundaries |
|
Focused regression fixtures; no real keys, bank accounts or external bank connection |
Companion XLSX, MCP correction tools, the plugin template and mockbank require their own native suites; core coverage does not measure another repository. See issue acceptance. Independent plugin-author validation, live-bank certification and historical independent review remain outside what local tests can establish.
Examples and benchmarks#
tests/test_examples.py discovers every numbered example and every
benches/bench_*.py script. Missing extras and nonzero exits fail verification.
Every example must also appear in the examples guide. New benchmark entry points
must either accept the default smoke invocation or declare their quick mode in
the runner.
benches/bench_features.py measures every numbered example in a fresh process
and records Python/platform metadata. The benchmark CI job preserves its JSON
alongside pytest-benchmark results. These are workflow smoke timings, not
microbenchmarks and not a claim that every feature has an independent speed SLA.
SFTP and encrypted inputs use dedicated correctness tests instead of misleading
network or cryptography timing budgets.
The generation benchmark asserts transaction-count preservation and chunk
counts. The corpus benchmark requires nonempty XML, a valid JSON twin with
round-trip parity, and a complete generated schema coverage set. Plugin discovery
requires all ten synthetic installed plugins. make perf separately retains
the existing XML-generation performance guard. See methodology.
Mutation testing evaluates assertion strength separately from line coverage. The existing fast-tier floor is 80%, not 100%; a surviving mutant requires investigation and cannot honestly be described as exhaustive functional proof.
Reproduce#
poetry install --all-extras --with dev,docs
poetry run make check
poetry run make type
poetry run make perf
poetry run python benches/bench_features.py
poetry run make mutate-fast
Do not run simultaneous coverage sessions against the same .coverage file.
The complete suite supplies the release coverage result; a targeted test run is
diagnostic evidence only. Never reduce the gate or ignore failures to obtain a
green report.