{ "schema": "gitea-agent.contract-preservation-inventory/v1", "owner": "jsfamily", "repository": "jarca-ledger-mcp", "issue": 12, "pull_request": 13, "contract_sha256": "6d86b591b022fcc722611bfec6d24e54a64216ab6f7c4098f357e25420218818", "review_id": 61, "reviewed_head": "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8", "preserved_semantics": [ { "criterion": "N01-loan-balance-definition", "required": "Every valuation attached to a loan account explicitly records principal_only or principal_interest_fees; no writer or account-type transition may infer or bypass it.", "evidence": [ "tests/test_account_valuation_edge_contracts.py", "tests/test_issue_12_review59_account.py" ] }, { "criterion": "C05-current-import", "required": "Loan cache and import operations remain successful without creating definition-less history, and late evidence never rolls back newer current cache.", "evidence": [ "test_dated_loan_create_and_historical_update_preserve_current_cache_without_valuations", "test_loan_import_preserves_transactions_and_current_cache_without_valuation_candidate" ] }, { "criterion": "C13-read-only-and-no-partial-write", "required": "Validation failure changes neither account state nor append-only valuation history.", "evidence": [ "test_bank_to_loan_conversion_rejects_existing_undefined_valuation_without_mutation" ] }, { "criterion": "compatibility", "required": "A non-loan account with no valuation history may still be converted to loan; non-loan candidate insertion and replay are unchanged.", "evidence": [ "test_bank_to_loan_conversion_without_valuations_remains_allowed", "test_non_loan_candidate_still_succeeds_and_reuses_idempotently" ] } ], "excluded_scope": [ "No inferred or automatic liability-definition migration.", "No schema change.", "No changes to snapshot, reconciliation, dashboard, authentication, or menu behavior.", "No merge, Issue close, or release operation." ] }