diff --git a/docs/verification/issue-12-review-61/contract-preservation-inventory.json b/docs/verification/issue-12-review-61/contract-preservation-inventory.json index 6a52e68..20b9fa6 100644 --- a/docs/verification/issue-12-review-61/contract-preservation-inventory.json +++ b/docs/verification/issue-12-review-61/contract-preservation-inventory.json @@ -6,7 +6,8 @@ "pull_request": 13, "contract_sha256": "6d86b591b022fcc722611bfec6d24e54a64216ab6f7c4098f357e25420218818", "review_id": 61, - "reviewed_head": "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8", + "reviewed_parent_sha": "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8", + "reviewed_head": "1b9eda683c66d3c7129716b9899eddf61df3362d", "preserved_semantics": [ { "criterion": "N01-loan-balance-definition", diff --git a/docs/verification/issue-12-review-61/evidence-manifest.json b/docs/verification/issue-12-review-61/evidence-manifest.json new file mode 100644 index 0000000..a14d4fe --- /dev/null +++ b/docs/verification/issue-12-review-61/evidence-manifest.json @@ -0,0 +1,222 @@ +{ + "schema": "gitea-agent.evidence-manifest/v1", + "owner": "jsfamily", + "repository": "jarca-ledger-mcp", + "issue": 12, + "pull_request": 13, + "review": 61, + "reviewed_parent_sha": "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8", + "source_head_sha": "1b9eda683c66d3c7129716b9899eddf61df3362d", + "contract_sha256": "6d86b591b022fcc722611bfec6d24e54a64216ab6f7c4098f357e25420218818", + "environment": { + "platform": "Linux-6.18.34+rpt-rpi-v8-aarch64-with-glibc2.41", + "python": "3.13.5", + "uv": "uv 0.11.6 (aarch64-unknown-linux-musl)", + "fixture_policy": "synthetic repository fixtures only; no credentials or real financial data" + }, + "commands": [ + { + "id": "conversion-regression", + "argv": [ + "uv", + "run", + "--frozen", + "--extra", + "dev", + "--extra", + "dashboard", + "pytest", + "-q", + "-rs", + "tests/test_account_valuation_edge_contracts.py::test_bank_to_loan_conversion_rejects_existing_undefined_valuation_without_mutation", + "tests/test_account_valuation_edge_contracts.py::test_bank_to_loan_conversion_without_valuations_remains_allowed" + ], + "purpose": "Verify conversion rejection is atomic and history-free conversion remains compatible", + "started_at_utc": "2026-10-07T03:59:49.130624Z", + "finished_at_utc": "2026-10-07T03:59:51.888407Z", + "duration_seconds": 2.757882494479418, + "exit_code": 0, + "expected_exit_code": 0, + "output": ".. [100%]\n" + }, + { + "id": "review61-regressions", + "argv": [ + "uv", + "run", + "--frozen", + "--extra", + "dev", + "--extra", + "dashboard", + "pytest", + "-q", + "-rs", + "tests/test_account_valuation_edge_contracts.py", + "tests/test_issue_12_review59_account.py", + "tests/test_valuation_contract_docs.py" + ], + "purpose": "Run Review 61 and independent-review named regressions", + "started_at_utc": "2026-10-07T03:59:51.888570Z", + "finished_at_utc": "2026-10-07T03:59:58.351942Z", + "duration_seconds": 6.463426006026566, + "exit_code": 0, + "expected_exit_code": 0, + "output": "........................ [100%]\n" + }, + { + "id": "full-suite", + "argv": [ + "uv", + "run", + "--frozen", + "--extra", + "dev", + "--extra", + "dashboard", + "pytest", + "-q", + "-rs" + ], + "purpose": "Run the complete repository test suite at the exact source head", + "started_at_utc": "2026-10-07T03:59:58.352023Z", + "finished_at_utc": "2026-10-07T04:01:03.222283Z", + "duration_seconds": 64.87031899858266, + "exit_code": 0, + "expected_exit_code": 0, + "output": "........................................................................ [ 25%]\n........................................................................ [ 51%]\n...............................................................ss....... [ 77%]\n.....................................................ss...... [100%]\n=============================== warnings summary ===============================\ntests/test_dashboard_auth_server.py:11\n /opt/data/gitea-agent/repositories/jsfamily/jarca-ledger-mcp/worktrees/issue-12/checkout/tests/test_dashboard_auth_server.py:11: StarletteDeprecationWarning: Using `httpx` with `starlette.testclient` is deprecated; install `httpx2` instead.\n from starlette.testclient import TestClient\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n=========================== short test summary info ============================\nSKIPPED [1] tests/test_kb_bank_pdf.py:26: sample KB Bank PDF/password is not available\nSKIPPED [1] tests/test_kb_bank_pdf.py:42: sample KB Bank PDF/password is not available\nSKIPPED [1] tests/test_toss_securities_pdf.py:20: sample Toss Securities PDF is not available\nSKIPPED [1] tests/test_toss_securities_pdf.py:32: sample Toss Securities PDF is not available\n" + }, + { + "id": "ruff", + "argv": [ + "uv", + "run", + "--frozen", + "--extra", + "dev", + "--extra", + "dashboard", + "ruff", + "check", + "." + ], + "purpose": "Run Python lint checks", + "started_at_utc": "2026-10-07T04:01:03.222360Z", + "finished_at_utc": "2026-10-07T04:01:03.426930Z", + "duration_seconds": 0.20462407637387514, + "exit_code": 0, + "expected_exit_code": 0, + "output": "All checks passed!\n" + }, + { + "id": "compileall", + "argv": [ + "python3", + "-m", + "compileall", + "-q", + "jarca_ledger_mcp", + "dashboard", + "tests", + "scripts" + ], + "purpose": "Compile production, dashboard, test, and script Python surfaces", + "started_at_utc": "2026-10-07T04:01:03.427003Z", + "finished_at_utc": "2026-10-07T04:01:03.684488Z", + "duration_seconds": 0.25754371751099825, + "exit_code": 0, + "expected_exit_code": 0, + "output": "" + }, + { + "id": "diff-check", + "argv": [ + "git", + "diff", + "--check", + "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8..1b9eda683c66d3c7129716b9899eddf61df3362d" + ], + "purpose": "Check the complete rework diff for whitespace errors", + "started_at_utc": "2026-10-07T04:01:03.684567Z", + "finished_at_utc": "2026-10-07T04:01:03.730543Z", + "duration_seconds": 0.04603164829313755, + "exit_code": 0, + "expected_exit_code": 0, + "output": "" + } + ], + "changed_files": [ + { + "path": "docs/data-model.md", + "sha256": "f9932a04f3c74907da1c21d754a16e1401f64fd948945017d410de7d91494dca", + "git_blob": "70f26ce1522b8609a93471655c9506040a4078f1" + }, + { + "path": "docs/interface-contract.md", + "sha256": "01a3f37e23ee17b2b928b44e3e07d4d6982faead1ab6f0298889225b0c5ce916", + "git_blob": "4304427a604949b8295b4f93cb6054357805fe92" + }, + { + "path": "docs/requirements/req-003_account-valuation-history.md", + "sha256": "f5a3bf9f69d622451a1a08854062218382f03355a3464538a35b1e270ca5b70f", + "git_blob": "2a7be4d780999fce47402f15f0b05d0b92990715" + }, + { + "path": "docs/verification/issue-12-review-61/contract-preservation-inventory.json", + "sha256": "88af35b340db2bef5db20f5de168f9183b4152d40c78176148460b48d7f6c5fa", + "git_blob": "6a52e68b558254086ae37faabe2ce3758c49a00a" + }, + { + "path": "docs/verification/issue-12-review-61/evidence-plan.json", + "sha256": "72708a42b163d1773aaa5a944e57f39af6a15017e5e6e11e027b9354256837dd", + "git_blob": "2191546f7c6a4da21eef99fc6ecea43e1ab4a198" + }, + { + "path": "docs/verification/issue-12-review-61/finding-matrix.json", + "sha256": "9b51fac9cd9c5a71cd29b43c9dd5ccef8ae9603fbaa5b6c539350b0bb117271f", + "git_blob": "9a6d12806ef8c69b4373986b4ef60d6829f97fb2" + }, + { + "path": "docs/verification/issue-12-review-61/red-evidence.json", + "sha256": "567c03d28e6de74b6adfc0f6141dd96e9e129bab9d4455761615a1655870b4bf", + "git_blob": "b5f4bc9286b4ea443671ab0744935a11c295b124" + }, + { + "path": "jarca_ledger_mcp/application/account_valuation_service.py", + "sha256": "f7f5bac1e224401dfd02efb321b7e7bd87e02875b727a5366bcc223bf633fb57", + "git_blob": "0dfd7b7ce94a699b855e40b336afa7bf5cdc2595" + }, + { + "path": "jarca_ledger_mcp/application/accounts_write_services.py", + "sha256": "41dd6579dc422549316da05347c6d5e33d89da1e1502d6065b5b78a0160776d3", + "git_blob": "48a1dd5acfe782c9cc35e8bd615dc71671dadf6f" + }, + { + "path": "tests/test_account_valuation_edge_contracts.py", + "sha256": "fed17aec3518e2380d00b46252402ad69a71e7d265961a6264b03d790d579f42", + "git_blob": "0b08cb32af63084225e01642d333ca291c7445c4" + }, + { + "path": "tests/test_issue_12_review59_account.py", + "sha256": "a8a7491c7b78841c2be0dbc66913c1e076bdd231281fd64818493a0f3a1de550", + "git_blob": "f5cee3e993f189e688f8e8ab3829b5c4ab34cf5a" + }, + { + "path": "tests/test_valuation_contract_docs.py", + "sha256": "7443b8425d6b733e0e95d21b3c460a42dceeb2f99f84e1fb8fadcd88f6b77514", + "git_blob": "c473ee14a530496e11c28e33008b0d8a50d774cb" + } + ], + "added_line_security_scan": { + "hardcoded_secret": [], + "shell_injection": [], + "dynamic_eval": [], + "pickle": [], + "interpolated_sql": [] + }, + "worktree_clean_after": true, + "limitations": [ + "Four external private PDF fixture tests may be skipped when fixtures are unavailable.", + "Gitea status/readiness is not functional acceptance evidence." + ] +} diff --git a/docs/verification/issue-12-review-61/evidence-plan.json b/docs/verification/issue-12-review-61/evidence-plan.json index 2191546..a563ac5 100644 --- a/docs/verification/issue-12-review-61/evidence-plan.json +++ b/docs/verification/issue-12-review-61/evidence-plan.json @@ -5,7 +5,8 @@ "issue": 12, "pull_request": 13, "review_id": 61, - "reviewed_head": "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8", + "reviewed_parent_sha": "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8", + "reviewed_head": "1b9eda683c66d3c7129716b9899eddf61df3362d", "implementation_parent": "b8b8811a2a50371795a02e4fa65f097c9d9508ac", "contract_sha256": "6d86b591b022fcc722611bfec6d24e54a64216ab6f7c4098f357e25420218818", "manifest_generator": { @@ -35,7 +36,7 @@ }, { "id": "diff-check", - "argv": ["git", "diff", "--check", "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8.."] + "argv": ["git", "diff", "--check", "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8..1b9eda683c66d3c7129716b9899eddf61df3362d"] } ], "bound_paths": [ diff --git a/docs/verification/issue-12-review-61/finding-matrix.json b/docs/verification/issue-12-review-61/finding-matrix.json index 9a6d128..4c33a00 100644 --- a/docs/verification/issue-12-review-61/finding-matrix.json +++ b/docs/verification/issue-12-review-61/finding-matrix.json @@ -5,13 +5,14 @@ "issue": 12, "pull_request": 13, "review_id": 61, - "reviewed_head": "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8", + "reviewed_parent_sha": "5e721b0ddd648f3e80f341a3c304d1cc3ca47ee8", + "reviewed_head": "1b9eda683c66d3c7129716b9899eddf61df3362d", "implementation_parent": "b8b8811a2a50371795a02e4fa65f097c9d9508ac", "findings": [ { "id": "N01-loan-balance-definition", "classification": "implementation_defect", - "status": "resolved_at_implementation_parent", + "status": "resolved_and_verified_at_source_head", "root_cause": "Internal candidate writers could persist loan balance evidence without an explicit representative liability definition, and unsupported loan purposes could bypass the definition rule.", "tests": [ "test_direct_loan_candidate_requires_liability_definition_and_writes_nothing", diff --git a/docs/verification/issue-12-review-61/green-evidence.json b/docs/verification/issue-12-review-61/green-evidence.json new file mode 100644 index 0000000..347d00e --- /dev/null +++ b/docs/verification/issue-12-review-61/green-evidence.json @@ -0,0 +1,30 @@ +{ + "schema": "gitea-agent.green-evidence/v1", + "finding": "N01-account-type-conversion-bypass", + "source_commit": "1b9eda683c66d3c7129716b9899eddf61df3362d", + "tests": [ + "test_bank_to_loan_conversion_rejects_existing_undefined_valuation_without_mutation", + "test_bank_to_loan_conversion_without_valuations_remains_allowed" + ], + "argv": [ + "uv", + "run", + "--frozen", + "--extra", + "dev", + "--extra", + "dashboard", + "pytest", + "-q", + "-rs", + "tests/test_account_valuation_edge_contracts.py::test_bank_to_loan_conversion_rejects_existing_undefined_valuation_without_mutation", + "tests/test_account_valuation_edge_contracts.py::test_bank_to_loan_conversion_without_valuations_remains_allowed" + ], + "started_at_utc": "2026-10-07T03:59:49.130624Z", + "finished_at_utc": "2026-10-07T03:59:51.888407Z", + "exit_code": 0, + "expected_exit_code": 0, + "result": "GREEN", + "output": ".. [100%]\n", + "fixture_policy": "synthetic only; no credentials or real financial data" +}