1.8 KiB
1.8 KiB
BAT-007 Design
Contract versioning design
- Active MCP success response contract version:
1.0. - Version format:
major.minor. - Runtime exposure: unexposed. MCP success payloads are not modified to add a common
contract_versionfield. - Source of truth:
docs/interface-contract.md. - Snapshot metadata:
tests/contract_snapshots/response_contract_v1_0.json.
Change classification
- Breaking / major: required key removal, required key type change, nested object/list shape change that breaks existing consumers.
- Additive / minor: optional field additions and documentation/test metadata additions that preserve existing response semantics.
- Every response-shape-changing REQ/BAT must record contract impact: none, additive minor, or breaking major.
Contract regression design
Representative first-wave scopes:
- health/status:
service.health_check,service.get_ledger_db_status - list:
service.list_ledger_accounts - report:
service.get_monthly_cashflow_report - mutation success envelope:
service.create_ledger_account
The pytest contract checker validates required keys and required types only. Additional keys are allowed, matching the additive policy.
Synthetic fixture policy:
- Test DB paths are created under pytest
tmp_path. - Fixture data uses synthetic names and amounts only.
- No operating DB path, source financial filename, password, raw payload, or real account identifier is used.
CI design
Required-check contract job names:
pytest-regressiondashboard-app-testdashboard-http-smokedb-safety-smokecontract-regressionlint
.github/workflows/ci.yml adds:
contract-regression:uv run pytest tests/test_contract_regression.pylint:uv run ruff check .
Actual branch protection toggles remain external GitHub repository settings.