From c7a9cfa50d25ac68b6b722b415dc89bea8f2ae24 Mon Sep 17 00:00:00 2001 From: gitea-impl-agent Date: Wed, 7 Oct 2026 08:40:35 +0000 Subject: [PATCH] Bind Review 63 post-correction drift evidence --- .../contract-preservation-inventory.json | 2 +- .../verification/issue-12-review-63/evidence-manifest.json | 2 +- docs/verification/issue-12-review-63/finding-matrix.json | 2 +- docs/verification/issue-12-review-63/red-evidence.json | 7 ++++++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/verification/issue-12-review-63/contract-preservation-inventory.json b/docs/verification/issue-12-review-63/contract-preservation-inventory.json index f9b2378..a670e8a 100644 --- a/docs/verification/issue-12-review-63/contract-preservation-inventory.json +++ b/docs/verification/issue-12-review-63/contract-preservation-inventory.json @@ -3,7 +3,7 @@ "issue": 12, "pull_request": 13, "review_id": 63, - "source_revision": "bce25f9106f1914361e7a2bdc74000d87d4a0660", + "source_revision": "3db086a7fd15e9152a57fb95ab7942c6dc3be2b1", "contracts": [ { "contract": "append-only immutable snapshot runs and corrections", diff --git a/docs/verification/issue-12-review-63/evidence-manifest.json b/docs/verification/issue-12-review-63/evidence-manifest.json index 9eb18c3..dc7327e 100644 --- a/docs/verification/issue-12-review-63/evidence-manifest.json +++ b/docs/verification/issue-12-review-63/evidence-manifest.json @@ -1 +1 @@ -{"claims":{"review63-compileall":["/commands/3/argv","/commands/3/exit_code","/commands/3/expected_exit_code","/commands/3/output","/commands/3/started_at_utc","/commands/3/finished_at_utc"],"review63-diff-check":["/commands/4/argv","/commands/4/exit_code","/commands/4/expected_exit_code","/commands/4/output","/commands/4/started_at_utc","/commands/4/finished_at_utc"],"review63-findings-green":["/commands/0/argv","/commands/0/exit_code","/commands/0/expected_exit_code","/commands/0/output","/commands/0/started_at_utc","/commands/0/finished_at_utc"],"review63-full-suite":["/commands/1/argv","/commands/1/exit_code","/commands/1/expected_exit_code","/commands/1/output","/commands/1/started_at_utc","/commands/1/finished_at_utc"],"review63-ruff":["/commands/2/argv","/commands/2/exit_code","/commands/2/expected_exit_code","/commands/2/output","/commands/2/started_at_utc","/commands/2/finished_at_utc"]},"commands":[{"argv":["uv","run","--frozen","--extra","dev","--extra","dashboard","pytest","-o","addopts=","-q","tests/test_issue_12_review63_accounts.py","tests/test_issue_12_review63_assets.py"],"claim_ids":["review63-findings-green"],"duration_seconds":10.115880900993943,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:30:14.451218Z","id":"review63-regressions","max_output_bytes":65536,"output":"........ [100%]\n8 passed in 6.52s\n","purpose":"Verify all named Review 63 RED to GREEN regressions","started_at_utc":"2026-10-07T08:30:04.335506Z"},{"argv":["uv","run","--frozen","--extra","dev","--extra","dashboard","pytest","-o","addopts=","-ra"],"claim_ids":["review63-full-suite"],"duration_seconds":77.64189370907843,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:31:32.091636Z","id":"full-suite","max_output_bytes":65536,"output":"============================= test session starts ==============================\nplatform linux -- Python 3.13.5, pytest-9.1.1, pluggy-1.6.0\nrootdir: /opt/data/gitea-agent/repositories/jsfamily/jarca-ledger-mcp/worktrees/issue-12/checkout\nconfigfile: pyproject.toml\ntestpaths: tests\nplugins: anyio-4.14.0\ncollected 285 items\n\ntests/test_account_basis_public_consumers.py .. [ 0%]\ntests/test_account_valuation_edge_contracts.py .......... [ 4%]\ntests/test_account_valuations.py ........ [ 7%]\ntests/test_asset_snapshot_idempotency.py .. [ 7%]\ntests/test_asset_snapshots.py ..... [ 9%]\ntests/test_backup_workflow.py ... [ 10%]\ntests/test_categorization.py ... [ 11%]\ntests/test_category_rule_filters.py ... [ 12%]\ntests/test_contract_regression.py ... [ 13%]\ntests/test_cross_account_transfer_matching.py ... [ 14%]\ntests/test_dashboard_app.py ....... [ 17%]\ntests/test_dashboard_auth_server.py .................. [ 23%]\ntests/test_dashboard_authentication.py .............. [ 28%]\ntests/test_dashboard_authentication_app.py ......... [ 31%]\ntests/test_dashboard_menu_transition.py ......... [ 34%]\ntests/test_dashboard_persistent_authentication.py ............... [ 40%]\ntests/test_import_current_balance_authority.py ... [ 41%]\ntests/test_import_provenance_policy.py ........... [ 44%]\ntests/test_issue_12_regressions.py ..................................... [ 57%]\n [ 57%]\ntests/test_issue_12_review59_account.py ........... [ 61%]\ntests/test_issue_12_review59_readonly.py ............ [ 65%]\ntests/test_issue_12_review59_reports.py ................... [ 72%]\ntests/test_issue_12_review63_accounts.py .. [ 73%]\ntests/test_issue_12_review63_assets.py ...... [ 75%]\ntests/test_kb_bank_pdf.py ss [ 76%]\ntests/test_ledger_categories.py ... [ 77%]\ntests/test_mcp_http_runtime.py ... [ 78%]\ntests/test_requirement_docs.py .............. [ 83%]\ntests/test_review_decision_workbench.py .... [ 84%]\ntests/test_seoulpay_xlsx.py .. [ 85%]\ntests/test_service.py ............ [ 89%]\ntests/test_streamlit_browser_evidence.py ...................... [ 97%]\ntests/test_toss_securities_pdf.py ss [ 97%]\ntests/test_uncategorized_workbench.py ... [ 98%]\ntests/test_valuation_contract_docs.py ... [100%]\n\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============= 281 passed, 4 skipped, 1 warning in 73.56s (0:01:13) =============\n","purpose":"Run the canonical full repository suite at the functional source revision","started_at_utc":"2026-10-07T08:30:14.451519Z"},{"argv":["uv","run","--frozen","--extra","dev","--extra","dashboard","ruff","check","."],"claim_ids":["review63-ruff"],"duration_seconds":0.16208084765821695,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:31:32.255478Z","id":"ruff","max_output_bytes":65536,"output":"All checks passed!\n","purpose":"Run repository lint checks","started_at_utc":"2026-10-07T08:31:32.093510Z"},{"argv":["uv","run","--frozen","--extra","dev","--extra","dashboard","python","-m","compileall","-q","jarca_ledger_mcp","dashboard","tests","scripts"],"claim_ids":["review63-compileall"],"duration_seconds":0.38735415879637003,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:31:32.642848Z","id":"compileall","max_output_bytes":65536,"output":"","purpose":"Compile package, dashboard, tests, and scripts","started_at_utc":"2026-10-07T08:31:32.255638Z"},{"argv":["git","diff","--check","main...HEAD"],"claim_ids":["review63-diff-check"],"duration_seconds":0.13734883069992065,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:31:32.780269Z","id":"diff-check","max_output_bytes":65536,"output":"","purpose":"Check the complete pull-request diff for whitespace errors","started_at_utc":"2026-10-07T08:31:32.643023Z"}],"environment":{"architecture":"aarch64","kernel":"6.18.34+rpt-rpi-v8","os":"Linux","python":"3.13.5","uv":"uv 0.11.6 (aarch64-unknown-linux-musl)"},"excluded_paths":["docs/verification/issue-12-review-63/evidence-plan.json","docs/verification/issue-12-review-63/evidence-manifest.json"],"files":[{"blob_oid":"4cb38a511c9a348aa5039378c3f59c1aced1889d","path":"jarca_ledger_mcp/application/accounts_write_services.py","sha256":"45dbbf367b9857cfe899574526f0a7120e28b0bf3d6d2814e795e9701a1a14b7"},{"blob_oid":"f067daa109d4c5412f0668f50f59b5d45a2ad741","path":"jarca_ledger_mcp/application/assets_service.py","sha256":"cd67458e29ffbc90d58fbf7e40f735d37c8cbca82b6d9e8e6e853d607af284dd"},{"blob_oid":"690b2fbee633eecbfdb2d7ed8fda78cea1b14b96","path":"tests/test_issue_12_review63_accounts.py","sha256":"9004db79795ef4963b87646e9b5c486c073febd3ae6c2ba313633574e03582a9"},{"blob_oid":"a2ad2d4a90bafd174b3d9821d97761f6f96084bc","path":"tests/test_issue_12_review63_assets.py","sha256":"a6a2b0cb2fdf47e4537aab9786e101a66ddbb74def4c4e067a8507ccda3cc91c"},{"blob_oid":"17be3e1e9b62e1ec63767dfa7920c78546d43e38","path":"tests/test_asset_snapshot_idempotency.py","sha256":"9a66f7d56b56cf3a9a85950813a56bdd06eafc07f592a1cb77133ad5f36ff09c"},{"blob_oid":"83c76f65ad122e8409abd3420c97b4c375e144d5","path":"tests/test_issue_12_regressions.py","sha256":"7dc8fbd7a7b0cb718de115f4d1f69b2e024cf1af641573e4cb04c00196017f29"},{"blob_oid":"4304427a604949b8295b4f93cb6054357805fe92","path":"docs/interface-contract.md","sha256":"01a3f37e23ee17b2b928b44e3e07d4d6982faead1ab6f0298889225b0c5ce916"},{"blob_oid":"70f26ce1522b8609a93471655c9506040a4078f1","path":"docs/data-model.md","sha256":"f9932a04f3c74907da1c21d754a16e1401f64fd948945017d410de7d91494dca"},{"blob_oid":"2a7be4d780999fce47402f15f0b05d0b92990715","path":"docs/requirements/req-003_account-valuation-history.md","sha256":"f5a3bf9f69d622451a1a08854062218382f03355a3464538a35b1e270ca5b70f"}],"generated_at":"2026-10-07T08:31:32.832830Z","limitations":["Four PDF fixture tests are skipped because private KB Bank and Toss Securities PDF fixtures are unavailable."],"plan":{"path":"docs/verification/issue-12-review-63/evidence-plan.json","sha256":"d7cb66cba7ec082e4637d38d534ac75e6509b900e77689c74a484ce9c6a37e87"},"redaction":{"checked":true,"violations":[]},"result":"success","schema":"evidence-manifest/v1","source_revision":"bce25f9106f1914361e7a2bdc74000d87d4a0660","source_tree_clean":true} +{"claims":{"review63-compileall":["/commands/3/argv","/commands/3/exit_code","/commands/3/expected_exit_code","/commands/3/output","/commands/3/started_at_utc","/commands/3/finished_at_utc"],"review63-diff-check":["/commands/4/argv","/commands/4/exit_code","/commands/4/expected_exit_code","/commands/4/output","/commands/4/started_at_utc","/commands/4/finished_at_utc"],"review63-findings-green":["/commands/0/argv","/commands/0/exit_code","/commands/0/expected_exit_code","/commands/0/output","/commands/0/started_at_utc","/commands/0/finished_at_utc"],"review63-full-suite":["/commands/1/argv","/commands/1/exit_code","/commands/1/expected_exit_code","/commands/1/output","/commands/1/started_at_utc","/commands/1/finished_at_utc"],"review63-ruff":["/commands/2/argv","/commands/2/exit_code","/commands/2/expected_exit_code","/commands/2/output","/commands/2/started_at_utc","/commands/2/finished_at_utc"]},"commands":[{"argv":["uv","run","--frozen","--extra","dev","--extra","dashboard","pytest","-o","addopts=","-q","tests/test_issue_12_review63_accounts.py","tests/test_issue_12_review63_assets.py"],"claim_ids":["review63-findings-green"],"duration_seconds":3.989052458666265,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:38:49.778896Z","id":"review63-regressions","max_output_bytes":65536,"output":"........ [100%]\n8 passed in 2.40s\n","purpose":"Verify all named Review 63 RED to GREEN regressions","started_at_utc":"2026-10-07T08:38:45.789981Z"},{"argv":["uv","run","--frozen","--extra","dev","--extra","dashboard","pytest","-o","addopts=","-ra"],"claim_ids":["review63-full-suite"],"duration_seconds":79.06492502894253,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:40:08.842244Z","id":"full-suite","max_output_bytes":65536,"output":"============================= test session starts ==============================\nplatform linux -- Python 3.13.5, pytest-9.1.1, pluggy-1.6.0\nrootdir: /opt/data/gitea-agent/repositories/jsfamily/jarca-ledger-mcp/worktrees/issue-12/checkout\nconfigfile: pyproject.toml\ntestpaths: tests\nplugins: anyio-4.14.0\ncollected 285 items\n\ntests/test_account_basis_public_consumers.py .. [ 0%]\ntests/test_account_valuation_edge_contracts.py .......... [ 4%]\ntests/test_account_valuations.py ........ [ 7%]\ntests/test_asset_snapshot_idempotency.py .. [ 7%]\ntests/test_asset_snapshots.py ..... [ 9%]\ntests/test_backup_workflow.py ... [ 10%]\ntests/test_categorization.py ... [ 11%]\ntests/test_category_rule_filters.py ... [ 12%]\ntests/test_contract_regression.py ... [ 13%]\ntests/test_cross_account_transfer_matching.py ... [ 14%]\ntests/test_dashboard_app.py ....... [ 17%]\ntests/test_dashboard_auth_server.py .................. [ 23%]\ntests/test_dashboard_authentication.py .............. [ 28%]\ntests/test_dashboard_authentication_app.py ......... [ 31%]\ntests/test_dashboard_menu_transition.py ......... [ 34%]\ntests/test_dashboard_persistent_authentication.py ............... [ 40%]\ntests/test_import_current_balance_authority.py ... [ 41%]\ntests/test_import_provenance_policy.py ........... [ 44%]\ntests/test_issue_12_regressions.py ..................................... [ 57%]\n [ 57%]\ntests/test_issue_12_review59_account.py ........... [ 61%]\ntests/test_issue_12_review59_readonly.py ............ [ 65%]\ntests/test_issue_12_review59_reports.py ................... [ 72%]\ntests/test_issue_12_review63_accounts.py .. [ 73%]\ntests/test_issue_12_review63_assets.py ...... [ 75%]\ntests/test_kb_bank_pdf.py ss [ 76%]\ntests/test_ledger_categories.py ... [ 77%]\ntests/test_mcp_http_runtime.py ... [ 78%]\ntests/test_requirement_docs.py .............. [ 83%]\ntests/test_review_decision_workbench.py .... [ 84%]\ntests/test_seoulpay_xlsx.py .. [ 85%]\ntests/test_service.py ............ [ 89%]\ntests/test_streamlit_browser_evidence.py ...................... [ 97%]\ntests/test_toss_securities_pdf.py ss [ 97%]\ntests/test_uncategorized_workbench.py ... [ 98%]\ntests/test_valuation_contract_docs.py ... [100%]\n\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============= 281 passed, 4 skipped, 1 warning in 75.64s (0:01:15) =============\n","purpose":"Run the canonical full repository suite at the functional source revision","started_at_utc":"2026-10-07T08:38:49.779135Z"},{"argv":["uv","run","--frozen","--extra","dev","--extra","dashboard","ruff","check","."],"claim_ids":["review63-ruff"],"duration_seconds":0.3837073100730777,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:40:09.227746Z","id":"ruff","max_output_bytes":65536,"output":"All checks passed!\n","purpose":"Run repository lint checks","started_at_utc":"2026-10-07T08:40:08.844129Z"},{"argv":["uv","run","--frozen","--extra","dev","--extra","dashboard","python","-m","compileall","-q","jarca_ledger_mcp","dashboard","tests","scripts"],"claim_ids":["review63-compileall"],"duration_seconds":0.5016606021672487,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:40:09.729201Z","id":"compileall","max_output_bytes":65536,"output":"","purpose":"Compile package, dashboard, tests, and scripts","started_at_utc":"2026-10-07T08:40:09.227906Z"},{"argv":["git","diff","--check","main...HEAD"],"claim_ids":["review63-diff-check"],"duration_seconds":0.33338297344744205,"exit_code":0,"expected_exit_code":0,"finished_at_utc":"2026-10-07T08:40:10.062914Z","id":"diff-check","max_output_bytes":65536,"output":"","purpose":"Check the complete pull-request diff for whitespace errors","started_at_utc":"2026-10-07T08:40:09.729621Z"}],"environment":{"architecture":"aarch64","kernel":"6.18.34+rpt-rpi-v8","os":"Linux","python":"3.13.5","uv":"uv 0.11.6 (aarch64-unknown-linux-musl)"},"excluded_paths":["docs/verification/issue-12-review-63/evidence-plan.json","docs/verification/issue-12-review-63/evidence-manifest.json"],"files":[{"blob_oid":"4cb38a511c9a348aa5039378c3f59c1aced1889d","path":"jarca_ledger_mcp/application/accounts_write_services.py","sha256":"45dbbf367b9857cfe899574526f0a7120e28b0bf3d6d2814e795e9701a1a14b7"},{"blob_oid":"f2ecb7b6109e3837e01c41c286720ee435885313","path":"jarca_ledger_mcp/application/assets_service.py","sha256":"852fc3ced2bb388ccb42d3ffc9675106817cb80487493cd2818cd170e0922cd2"},{"blob_oid":"690b2fbee633eecbfdb2d7ed8fda78cea1b14b96","path":"tests/test_issue_12_review63_accounts.py","sha256":"9004db79795ef4963b87646e9b5c486c073febd3ae6c2ba313633574e03582a9"},{"blob_oid":"7ad8ba4c1a6f183af8e0f4d8ba093ad548f644c2","path":"tests/test_issue_12_review63_assets.py","sha256":"5695ed00dd7704cd989044cb2d9c2ed1f4a286a0b33dd1babba4e2e6aa4a148c"},{"blob_oid":"17be3e1e9b62e1ec63767dfa7920c78546d43e38","path":"tests/test_asset_snapshot_idempotency.py","sha256":"9a66f7d56b56cf3a9a85950813a56bdd06eafc07f592a1cb77133ad5f36ff09c"},{"blob_oid":"83c76f65ad122e8409abd3420c97b4c375e144d5","path":"tests/test_issue_12_regressions.py","sha256":"7dc8fbd7a7b0cb718de115f4d1f69b2e024cf1af641573e4cb04c00196017f29"},{"blob_oid":"4304427a604949b8295b4f93cb6054357805fe92","path":"docs/interface-contract.md","sha256":"01a3f37e23ee17b2b928b44e3e07d4d6982faead1ab6f0298889225b0c5ce916"},{"blob_oid":"70f26ce1522b8609a93471655c9506040a4078f1","path":"docs/data-model.md","sha256":"f9932a04f3c74907da1c21d754a16e1401f64fd948945017d410de7d91494dca"},{"blob_oid":"2a7be4d780999fce47402f15f0b05d0b92990715","path":"docs/requirements/req-003_account-valuation-history.md","sha256":"f5a3bf9f69d622451a1a08854062218382f03355a3464538a35b1e270ca5b70f"}],"generated_at":"2026-10-07T08:40:10.168998Z","limitations":["Four PDF fixture tests are skipped because private KB Bank and Toss Securities PDF fixtures are unavailable."],"plan":{"path":"docs/verification/issue-12-review-63/evidence-plan.json","sha256":"d7cb66cba7ec082e4637d38d534ac75e6509b900e77689c74a484ce9c6a37e87"},"redaction":{"checked":true,"violations":[]},"result":"success","schema":"evidence-manifest/v1","source_revision":"3db086a7fd15e9152a57fb95ab7942c6dc3be2b1","source_tree_clean":true} diff --git a/docs/verification/issue-12-review-63/finding-matrix.json b/docs/verification/issue-12-review-63/finding-matrix.json index 450de7d..4a82227 100644 --- a/docs/verification/issue-12-review-63/finding-matrix.json +++ b/docs/verification/issue-12-review-63/finding-matrix.json @@ -4,7 +4,7 @@ "pull_request": 13, "review_id": 63, "reviewed_head": "3b5101128d5a2cf038b8fb84facfd9d176928c26", - "source_revision": "bce25f9106f1914361e7a2bdc74000d87d4a0660", + "source_revision": "3db086a7fd15e9152a57fb95ab7942c6dc3be2b1", "findings": [ { "id": "F-001", diff --git a/docs/verification/issue-12-review-63/red-evidence.json b/docs/verification/issue-12-review-63/red-evidence.json index f6e3481..07618bc 100644 --- a/docs/verification/issue-12-review-63/red-evidence.json +++ b/docs/verification/issue-12-review-63/red-evidence.json @@ -40,7 +40,7 @@ { "id": "F-006", "test": "test_f006_initial_replay_survives_multiple_later_corrections", - "red_observation": "replaying the initial idempotency key after two later corrections returned idempotency_conflict" + "red_observation": "replaying the initial key first conflicted after two corrections; after that path was enabled, unrelated live-authority drift after the correction chain was incorrectly accepted" } ], "red_runs": [ @@ -64,6 +64,11 @@ "argv": ["uv", "run", "--frozen", "--extra", "dev", "--extra", "dashboard", "pytest", "-o", "addopts=", "-q", "tests/test_issue_12_review63_assets.py::test_f006_initial_replay_survives_multiple_later_corrections"], "exit_code": 1, "result": "initial replay after two later corrections returned idempotency_conflict" + }, + { + "argv": ["uv", "run", "--frozen", "--extra", "dev", "--extra", "dashboard", "pytest", "-o", "addopts=", "-q", "tests/test_issue_12_review63_assets.py::test_f006_initial_replay_survives_multiple_later_corrections"], + "exit_code": 1, + "result": "unrelated live-authority drift after the correction chain returned success instead of idempotency_conflict" } ] }