# BAT-009 Verification ## Verification summary Status: PASS Evidence was collected against synthetic/temp data only. No production ledger DB mutation or real financial files were used. ## Acceptance criteria mapping ### REQ-011 - AC-1: PASS — `manual_assets` create/update/deactivate write path and additive schema migration/correction columns implemented in `db.py`/`service.py`; full pytest PASS confirms existing/new DB initialization succeeds. - AC-2: PASS — `preview_asset_snapshot_close` exists and targeted tests verify side-effect-free totals/warnings behavior. - AC-3: PASS — `close_asset_snapshot` writes basis-date authority-source rows with close metadata and is covered by `tests/test_asset_snapshots.py`. - AC-4: PASS — same-date re-close requires correction reasoning and appends correction rows via `snapshot_run_id` / `correction_of_run_id` / `is_correction`; targeted tests verify append-only behavior. - AC-5: PASS — latest-run snapshot read selection plus shared valuation helpers keep read model/report consistency; targeted + full pytest PASS. - AC-6: PASS — `docs/data-model.md` updated for write lifecycle, close/correction metadata, and latest-run read policy. ### REQ-012 - AC-1: PASS — MCP tools `create_manual_asset`, `update_manual_asset`, `deactivate_manual_asset` are exposed in `server.py`; `hermes mcp test jarca-ledger` discovered all 56 tools including BAT-009 additions. - AC-2: PASS — `preview_asset_snapshot_close` MCP/service returns preview totals, warnings, `source='live_authority'`, `is_closed_snapshot=false`; targeted tests PASS. - AC-3: PASS — `close_asset_snapshot` MCP/service returns close metadata and correction markers with `source='snapshot'`, `is_closed_snapshot=true`; targeted tests PASS. - AC-4: PASS — `dashboard/app.py` adds `자산/마감` page with manual asset add/update/deactivate and snapshot preview/close UX; browser smoke rendered the page successfully. - AC-5: PASS — browser/render + targeted tests confirm `source`/`is_closed_snapshot` aligned across preview/close/report flows and dashboard messaging. - AC-6: PASS — `tests/test_contract_regression.py` and `tests/contract_snapshots/response_contract_v1_0.json` updated; `docs/interface-contract.md` updated; targeted/full pytest PASS. ## Requirement state decision - REQ-011: Implemented. - REQ-012: Implemented. ## Validation evidence - `python3 -m py_compile jarca_ledger_mcp/*.py dashboard/app.py` → PASS - `python3 -m pytest tests/test_asset_snapshots.py tests/test_contract_regression.py tests/test_dashboard_app.py -q` → PASS (`12 passed`) - `python3 -m pytest -q` → PASS (`42 passed, 4 skipped`) - `hermes mcp test jarca-ledger` → PASS (`Connected`, `Tools discovered: 56`) - Browser smoke on Streamlit `자산/마감` page → PASS, JS errors 없음 ## Remaining issues ### Hard blockers - None. ### Non-blocking follow-up - Automatic valuation feeds and scheduled month-end close remain explicitly out of scope for BAT-009.