# BAT-014 Verification ## Verification summary Status: PASS All required code-path checks for BAT-014 passed, and local browser-level screenshot/DOM evidence was successfully captured against a synthetic fixture DB. No production ledger DB, real financial statement files, passwords, or raw financial payloads were used. ## Acceptance criteria evidence ### AC-1. MCP contract/helper seam and Streamlit page/domain gateways exist - Evidence: - `jarca_ledger_mcp/adapters/mcp/tool_contracts.py` added and `adapters/mcp/server.py` now calls `contracts.*`. - `search_files('*_gateway.py')` under `adapters/streamlit` returned 9 gateway/aggregator files. ### AC-2. `dashboard/app.py` no longer uses a flat broad gateway surface - Evidence: - `search_files(pattern='service\\.', path='dashboard', file_glob='app.py')` returned 0 matches after rewiring. - Dynamic hot-reload lookup now targets passed gateway modules (`categorization_gateway`, `transfers_gateway`) instead of a flat `service` binding. ### AC-3. Regression, adapter verification, and browser smoke pass - `python3 -m py_compile jarca_ledger_mcp/adapters/mcp/*.py jarca_ledger_mcp/adapters/streamlit/*.py dashboard/app.py` → PASS - `pytest -q tests/test_dashboard_app.py` → PASS (`....`) - `pytest -q` → PASS (`........................ss...............ss...`) - `hermes mcp test jarca-ledger` → PASS, 56 tools discovered - `.venv/bin/python scripts/streamlit_browser_evidence.py` → PASS - Output dir: `docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/` - Artifacts: `overview.png`, `rules.png`, `transfer-review.png`, `import.png` plus matching `*.dom.html` and `manifest.json` - Cleanup check: `search_files('chrome-profile-*')` under the run dir returned 0 results after the retry-cleanup fix ### AC-4. Baseline docs, discovery metadata, and BAT-local evidence tooling reflect completion - Evidence: - `docs/project-structure.md` updated with new owning services, parser seam, MCP contract helper, and Streamlit page/domain gateways. - `docs/runtime-flows.md` updated with import/parser seam, MCP contract routing, and dashboard gateway flow. - `docs/runbooks/streamlit-browser-evidence.md` now points at the BAT-014 evidence root and includes `요약` in the default capture set. - dcy-011 metadata and close-out notes updated to reference `REQ-015`~`REQ-018` / `BAT-011`~`BAT-014` completion. ## Browser evidence details Evidence source: `docs/batches/bat-014_20260703_adapter-surface-narrowing-baseline-refresh/evidence/run-20260703-100358/manifest.json` ### Captured pages - `요약` - Screenshot: `overview.png` - DOM: `overview.dom.html` - Evidence text included `📊 요약`, `가계부 운영 대시보드`, and the synthetic fixture DB path under the BAT-014 evidence directory. - `분류 규칙` - Screenshot: `rules.png` - DOM: `rules.dom.html` - Evidence text included `⚙️ Rule Engine`, `분류 규칙`, and seeded default categorization rules. - `확인필요 큐` - Screenshot: `transfer-review.png` - DOM: `transfer-review.dom.html` - Evidence text included `🔁 Transfer Review`, `KB↔토스뱅크 확인필요 큐`, and a synthetic transfer-review row for `2026-06-29` / `SYNTHETIC_TRANSFER` / `120,000원` / `이체` / `확인필요`. - `Import` - Screenshot: `import.png` - DOM: `import.dom.html` - Evidence text included `📥 Statement Import`, Toss Securities import copy, and Toss Bank import copy. ### Automation script close-out - Script: `scripts/streamlit_browser_evidence.py` - Behavior: - Generates a synthetic fixture DB under the BAT-014 evidence run directory. - Starts Streamlit against that fixture DB only. - Uses local Chrome DevTools Protocol to capture screenshots and DOM snapshots. - Writes `manifest.json` with page/url/path/byte-size evidence. - Retries Chrome profile cleanup and leaves only the intended evidence artifacts in the final run directory. ## Safety boundary - Synthetic/temp DBs only. - No destructive migration. - No production ledger DB mutation. - No real statement files, passwords, or raw payloads in screenshots, DOM snapshots, or manifest output.