Fix loan account conversion invariant
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"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."
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user