{ "schema": "gitea-agent.finding-matrix/v1", "review_id": 60, "review_author": "gitea-spec-agent", "review_state": "REQUEST_CHANGES", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract_sha256": "6d86b591b022fcc722611bfec6d24e54a64216ab6f7c4098f357e25420218818", "findings": [ { "finding": "60/N01-loan-balance-definition", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract": "Issue #12 확정 결정 8; REQ-003.04/05", "classification": "valid_fix", "implementation_paths": [ "jarca_ledger_mcp/application/account_valuation_service.py" ], "test_paths": [ "tests/test_account_valuation_edge_contracts.py" ], "verification": "named RED→GREEN test plus consolidated adversarial suite", "result": "pending", "reason": "Loan account balance alias bypasses mandatory representative liability definition." }, { "finding": "60/C05-current-import", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract": "Issue #12 현재값과 과거값; REQ-003.05", "classification": "valid_fix", "implementation_paths": [ "jarca_ledger_mcp/application/imports_service.py", "jarca_ledger_mcp/application/accounts_write_services.py", "jarca_ledger_mcp/infrastructure/sqlite/schema.py", "jarca_ledger_mcp/infrastructure/sqlite/migrations.py" ], "test_paths": [ "tests/test_import_current_balance_authority.py" ], "verification": "named RED→GREEN sequential late-import test plus migration/full suite", "result": "pending", "reason": "Import compares actual evidence date against synchronization timestamp and loses current-cache basis authority." }, { "finding": "60/C06-idempotency", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract": "Issue #12 중복 및 정정; REQ-003.03", "classification": "valid_fix", "implementation_paths": [ "jarca_ledger_mcp/application/account_valuation_service.py" ], "test_paths": [ "tests/test_account_valuation_edge_contracts.py" ], "verification": "named RED→GREEN same-evidence correction replay and changed-payload conflict tests", "result": "pending", "reason": "A same source_ref/parent/effective payload correction retry without explicit key conflicts instead of reusing the child." }, { "finding": "60/N02-close-replay-run-binding", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract": "Issue #12 마감 불변성; REQ-003.03/07", "classification": "valid_fix", "implementation_paths": [ "jarca_ledger_mcp/application/assets_service.py" ], "test_paths": [ "tests/test_asset_snapshot_idempotency.py" ], "verification": "named RED→GREEN old-key replay-after-correction exact response binding test", "result": "pending", "reason": "Replay identifies the old run but loads latest-run rows and metadata." }, { "finding": "60/D03-data-model", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract": "Issue #12 데이터 모델 산출물; REQ-003.05", "classification": "evidence_gap", "implementation_paths": [ "docs/data-model.md" ], "test_paths": [ "tests/test_valuation_contract_docs.py" ], "verification": "named RED→GREEN canonical data-model contract assertion", "result": "pending", "reason": "Data model does not fix actual cache basis versus sync timestamp authority and no-rollback owner." }, { "finding": "60/D04-interface-contract", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract": "Issue #12 인터페이스 계약 산출물; REQ-003.04/09", "classification": "evidence_gap", "implementation_paths": [ "docs/interface-contract.md" ], "test_paths": [ "tests/test_valuation_contract_docs.py" ], "verification": "named RED→GREEN exact enum/conditional/output mapping assertion", "result": "pending", "reason": "Public interface delegates allowed values and loan definition/output mapping to source." }, { "finding": "independent-spec/C05-account-write-no-inference", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract": "Issue #12 current/history separation and no inferred basis; REQ-003.05", "classification": "valid_fix", "implementation_paths": [ "jarca_ledger_mcp/application/accounts_write_services.py" ], "test_paths": [ "tests/test_import_current_balance_authority.py" ], "verification": "named RED→GREEN explicit-basis and no-candidate account-write regression", "result": "pending", "reason": "Account writes inferred evidence basis and historical candidate from sync timestamp." }, { "finding": "independent-code/legacy-unknown-basis-reporting", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract": "Issue #12 unknown-basis non-retroactivity; REQ-003.05", "classification": "valid_fix", "implementation_paths": [ "jarca_ledger_mcp/application/assets_service.py" ], "test_paths": [ "tests/test_import_current_balance_authority.py" ], "verification": "named RED→GREEN legacy unknown-basis report regression", "result": "pending", "reason": "Live report exposed last_synced_at as valuation_date despite unknown evidence basis." }, { "finding": "independent-code/zero-row-run-replay", "reviewed_head": "6a8a27a74ece9a9cce6f9772259677813d91ddf8", "contract": "Issue #12 immutable close evidence; REQ-003.03/07", "classification": "valid_fix", "implementation_paths": [ "jarca_ledger_mcp/application/assets_service.py" ], "test_paths": [ "tests/test_asset_snapshot_idempotency.py" ], "verification": "named RED→GREEN empty-run replay after nonempty correction exact equality", "result": "pending", "reason": "Empty persisted applied_evidence triggered fallback to latest correction rows." } ] }