149 lines
6.2 KiB
JSON
149 lines
6.2 KiB
JSON
{
|
|
"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."
|
|
}
|
|
]
|
|
}
|