Files
jarca-ledger-mcp/docs/batches/bat-007_20260630_mcp-response-contract-ci-versioning/implementation.md
T

116 lines
3.4 KiB
Markdown

# BAT-007 Implementation
## Changed files
- `.github/workflows/ci.yml`
- Added stable required-check candidate jobs: `contract-regression`, `lint`.
- `pyproject.toml`, `uv.lock`
- Added `ruff` to dev dependencies and conservative `E9`/`F` initial lint config.
- `tests/test_contract_regression.py`
- Added representative MCP response contract regression tests.
- `tests/contract_snapshots/response_contract_v1_0.json`
- Added contract `1.0` metadata and required-subset schemas for health/status, list, report, and mutation success envelope scopes.
- `docs/interface-contract.md`
- Added MCP response contract `1.0` governance, breaking/additive classification, runtime exposure policy, version log, and CI required-check contract.
- `docs/project-structure.md`, `docs/runtime-flows.md`
- Updated baseline structure/flow docs for contract snapshots/tests, `contract-regression`, `lint`, branch-protection boundary, and synthetic-only invariant.
- `docs/batches/index.md`
- Registered BAT-007.
- `docs/batches/bat-007_20260630_mcp-response-contract-ci-versioning/{index,planning,design,implementation,verification}.md`
- Added standard batch delivery docs.
- `docs/srs/Interface/req-007_mcp-response-contract-versioning-governance.md`
- `docs/srs/Testing/req-008_ci-contract-regression-and-lint-required-checks.md`
- `docs/srs/index.md`
- Updated REQ state to Implemented after verification evidence.
## Implementation notes
- Runtime MCP success payloads were not changed.
- Contract version `1.0` is documented in `docs/interface-contract.md` and mirrored in `tests/contract_snapshots/response_contract_v1_0.json`.
- Contract regression is representative, not exhaustive.
- Lint gate uses conservative `ruff` rules: `E9`, `F`.
- All new test data uses pytest temp DBs and synthetic names/amounts only.
## Verification command log
Executed from `/root/projects/jarca-ledger-mcp`.
1. `uv sync --extra dev --extra dashboard`
Result:
```text
Resolved 72 packages in 1.37s
Building jarca-ledger-mcp @ file:///root/projects/jarca-ledger-mcp
Downloading ruff (11.0MiB)
Downloaded ruff
Built jarca-ledger-mcp @ file:///root/projects/jarca-ledger-mcp
Prepared 3 packages in 2.94s
Uninstalled 2 packages in 18ms
Installed 3 packages in 338ms
~ jarca-ledger-mcp==0.1.0 (from file:///root/projects/jarca-ledger-mcp)
- pytest==9.1.0
+ pytest==9.1.1
+ ruff==0.15.20
```
2. `uv run pytest tests/test_contract_regression.py`
Result:
```text
... [100%]
3 passed in 0.99s
```
3. `uv run ruff check .`
Result:
```text
All checks passed!
```
4. `uv run pytest --ignore=tests/test_dashboard_app.py`
Result:
```text
...............ss...............ss... [100%]
33 passed, 4 skipped in 29.37s
```
5. `uv run python scripts/ci_db_safety_smoke.py --timeout 45`
Result:
```json
{
"success": true,
"gate": "db-safety-smoke",
"fixture": "synthetic",
"fixture_integrity": "ok",
"restore_smoke_exit_code": 0,
"restored_exists": true,
"restored_integrity": "ok",
"health_success": true,
"operating_db_used": false
}
```
6. `uv run python scripts/ci_dashboard_http_smoke.py --host 127.0.0.1 --port 18501 --timeout 45`
Result:
```json
{
"success": true,
"gate": "dashboard-http-smoke",
"fixture": "synthetic",
"fixture_integrity": "ok",
"http_status": 200,
"attempts": 4,
"cleanup": "terminated"
}
```