{ "schema": "contract-preservation-inventory/v1", "issue": 12, "pull_request": 13, "review_id": 66, "reviewed_head": "3bf9b77c6cc167a4e2a8706271bdf8e848d2c4fe", "source_revision": "31d1c11dcf397ddf6a23e98d6d9062f96bab0194", "contracts": [ { "contract": "last_balance is an exact integer or NULL-compatible unknown value; boolean and floating-point coercion are invalid while zero and signed integer text remain valid", "status": "preserved", "preserved_by": [ "test_update_rejects_bool_or_float_dated_balance_without_mutation", "test_update_rejects_empty_undated_balance_without_mutation", "test_update_preserves_zero_and_signed_integer_balance_semantics" ] }, { "contract": "invalid account updates return validation_error before changing account cache or valuation history", "status": "preserved", "preserved_by": [ "test_update_rejects_bool_or_float_dated_balance_without_mutation", "test_update_rejects_empty_undated_balance_without_mutation" ] }, { "contract": "a historical dated candidate is append-only and cannot roll back a newer current cache", "status": "preserved", "preserved_by": [ "test_historical_account_update_preserves_current_and_adds_one_candidate", "test_late_import_current_balance_is_authoritative_by_evidence_basis_date" ] }, { "contract": "unknown basis remains distinct from last_synced_at and an undated valid balance write creates no dated candidate", "status": "preserved", "preserved_by": [ "test_account_write_sync_timestamp_does_not_infer_balance_basis_or_candidate", "test_unknown_legacy_balance_basis_is_not_reported_as_valuation_date" ] }, { "contract": "Review 65 create validation, actual zero, valid import recovery, public consumer, valuation selection, snapshot replay, read-only, migration, privacy, authentication, and menu semantics remain intact", "status": "preserved", "preserved_by": [ "review66-focused-regressions", "review66-full-suite", "review66-ruff", "review66-compileall", "review66-diff-check" ] } ], "missing": 0, "ambiguous": 0, "limitations": [ "Four fixture-dependent PDF tests remain skipped because private KB Bank and Toss Securities fixtures are unavailable." ] }