feat: persist review workbench decisions (#1)

Merge dcy-012 / REQ-020 / BAT-016 implementation after green CI.
This commit is contained in:
2026-07-08 10:22:53 +09:00
committed by GitHub
parent 2fc972a7bf
commit 698dd9e62e
28 changed files with 989 additions and 81 deletions
@@ -1,22 +1,74 @@
# BAT-016 Verification
## Status
- Not started.
- local-pass
- Verified At (KST): 2026-07-08 07:11 KST
## QC Owner
- dev-reviewer / dev-qc under delivery-runner orchestration.
- 가웨인 direct recovery path; independent QC still recommended before merge because Kanban-based dev-reviewer was explicitly disabled by user instruction.
## Required Verification
- REQ-020 AC 1-10 must be verified with direct evidence.
- `ruff check .` must pass.
- Full pytest must pass.
- MCP contract/regression and network MCP representative smoke must pass.
- Streamlit AppTest and HTTP smoke must pass.
- DB safety/migration regression must pass.
- Baseline document updates must be inspected.
## Required Verification Mapping
| REQ-020 AC | Evidence |
|---|---|
| AC1 additive/idempotent persistence | `tests/test_review_decision_workbench.py::test_review_decision_and_reconciliation_schema_are_additive_idempotent`; DB safety smoke showed schema `11`, integrity `ok`. |
| AC2 review decision round-trip | `test_review_decision_round_trip_payload_sanitizes_sensitive_fields`. |
| AC3 reconciliation session round-trip/hub basis | `test_reconciliation_session_round_trip_and_report_integration`. |
| AC4 additive existing service payloads | Full pytest passed; report/workbench tests preserved; new fields are additive. |
| AC5 network MCP safe tools | MCP tool surface smoke found required review/session tools and no destructive delete/reset tools. |
| AC6 Streamlit workbench regression | Full pytest includes `tests/test_dashboard_app.py`; local pass. |
| AC7 operating indicators | `get_review_operating_indicators` included in MCP smoke and session test checks last reconciliation close time. |
| AC8 financial data safety | Payload sanitization test drops `raw_payload` and `file_path`; no real DB or raw evidence used. |
| AC9 regression gates | `ruff check .` and full pytest passed locally. CI/PR evidence pending. |
| AC10 baseline docs | `docs/data-model.md`, `docs/project-structure.md`, `docs/runtime-flows.md` updated. |
## Local Evidence
```text
python -m ruff check .
All checks passed!
python -m pytest tests/test_review_decision_workbench.py -q
.... [100%]
python -m pytest -q
........................ss......................ss... [100%]
python -m pytest tests/test_contract_regression.py -q
... [100%]
python -m pytest --ignore=tests/test_dashboard_app.py -q
....................ss......................ss... [100%]
python -m pytest tests/test_dashboard_app.py -q
.... [100%]
python scripts/ci_dashboard_http_smoke.py --host 127.0.0.1 --port 18501 --timeout 45
success=true, http_status=200, fixture=synthetic
python scripts/ci_db_safety_smoke.py --timeout 45
success=true, fixture_integrity=ok, restored_integrity=ok, operating_db_used=false
MCP surface smoke
close_reconciliation_session OK
get_review_operating_indicators OK
hold_review_decision OK
list_reconciliation_sessions OK
list_review_decisions OK
mark_review_recheck OK
release_review_decision OK
upsert_reconciliation_session OK
upsert_review_decision OK
tool_count 65
DB safety smoke
schema_version 11
integrity_check ok
review_decisions 0
reconciliation_sessions 0
```
## Residual Risk
- Independent dev-reviewer QC was not run because user prohibited Kanban. Treat PR review/CI as the next independent gate.
- Local verification passed, but GitHub Actions CI must still be checked after push.
## Verdict
- Pending.
## Evidence
- None yet.
- Local release-candidate.