Files
SGF/docs/proofs/sgf-payable-paged-read-20261102.json
2026-11-04 09:37:20 +02:00

547 lines
22 KiB
JSON

{
"date": "2026-11-02",
"increment": "SGF-PAYABLE-PAGED-READ-SIM-v1",
"status": "local_synthetic_implementation",
"verification": {
"sgf_existing_history_scenarios": 10,
"sgf_existing_history_assertions": 56,
"sgf_new_page_scenarios": 8,
"sgf_new_page_assertions": 34,
"native_distinct_compatibility_tests": 21,
"native_assertions": 144,
"actual_paging_http_checks": 24
},
"comparisons": [
{
"volume": 1000,
"page_size": 25,
"before": {
"time_ms": 22202.595,
"queries": 25028,
"php_heap_peak_bytes": 44040192,
"php_heap_extra_peak_bytes": 18874368,
"documents_returned": 1000
},
"after": {
"time_ms": 69.703,
"queries": 67,
"php_heap_peak_bytes": 25165824,
"php_heap_extra_peak_bytes": 0,
"documents_returned": 25
},
"financial_position_fingerprint": "6ef1a9ed8a089b659b3d522144a54216a576c014be28597d5dc85f79c1227fa8",
"source_hashes": {
"legacy": "c4942438d00d3ad54c10747a5c3c0a91108872d98a2981f558f4b81a2d584c47",
"current": "22522c83c53597ed6ee15acbdd808c571aa16b09e361970d6ec43a0ee08626ef"
}
},
{
"volume": 1000,
"page_size": 100,
"before": {
"time_ms": 22202.595,
"queries": 25028,
"php_heap_peak_bytes": 44040192,
"php_heap_extra_peak_bytes": 18874368,
"documents_returned": 1000
},
"after": {
"time_ms": 123.932,
"queries": 67,
"php_heap_peak_bytes": 29360128,
"php_heap_extra_peak_bytes": 4194304,
"documents_returned": 100
},
"financial_position_fingerprint": "b774df859c22d78f09fb6d21c3258d192c7c1d9e4b3c032ded6c17d5646a97ec",
"source_hashes": {
"legacy": "c4942438d00d3ad54c10747a5c3c0a91108872d98a2981f558f4b81a2d584c47",
"current": "e2327efdc27a17aadceffd65aa1dc5515c71fd05d60311cb1ac1d064b05995b7"
}
},
{
"volume": 5000,
"page_size": 25,
"before": {
"time_ms": 115270.184,
"queries": 125028,
"php_heap_peak_bytes": 92274688,
"php_heap_extra_peak_bytes": 67108864,
"documents_returned": 5000
},
"after": {
"time_ms": 91.876,
"queries": 67,
"php_heap_peak_bytes": 25165824,
"php_heap_extra_peak_bytes": 0,
"documents_returned": 25
},
"financial_position_fingerprint": "0162d638b4507c8a390574a1e00661e06d0511838a27f00ee2c658be6c441089",
"source_hashes": {
"legacy": "cf6ed127faa805416c371ee988323a2b440a5099ff97934f4656e8e3532d1994",
"current": "00ba79f4f3b88d399502d2dd9275aec2d3b4158a13236100bc722fd4bc4bd57a"
}
},
{
"volume": 5000,
"page_size": 100,
"before": {
"time_ms": 115270.184,
"queries": 125028,
"php_heap_peak_bytes": 92274688,
"php_heap_extra_peak_bytes": 67108864,
"documents_returned": 5000
},
"after": {
"time_ms": 151.659,
"queries": 67,
"php_heap_peak_bytes": 29360128,
"php_heap_extra_peak_bytes": 4194304,
"documents_returned": 100
},
"financial_position_fingerprint": "b7879b6071a874b7df588dbd5cb203608a86d01196f1d6400f8afb77b962489b",
"source_hashes": {
"legacy": "cf6ed127faa805416c371ee988323a2b440a5099ff97934f4656e8e3532d1994",
"current": "a990995c877559bd0729a46192da5fe87f6dfd8f6a7b03e2bee9df615f11a081"
}
},
{
"volume": 10000,
"page_size": 25,
"before": {
"time_ms": 338498.531,
"queries": 250028,
"php_heap_peak_bytes": 153092096,
"php_heap_extra_peak_bytes": 127926272,
"documents_returned": 10000
},
"after": {
"time_ms": 139.625,
"queries": 67,
"php_heap_peak_bytes": 25165824,
"php_heap_extra_peak_bytes": 0,
"documents_returned": 25
},
"financial_position_fingerprint": "ddf692c62109fd5662cc98b89c9c14c80d151f279c7f0e9f3afcd0bf391e661d",
"source_hashes": {
"legacy": "5427b63fcb4286725a770da737c1f53910f3cd53e8d8b41cf9c6431985ad0405",
"current": "83ba2607c8193dc8b5252d69032fa0a1b6792f4aaf80df62d971c1c2be185da4"
}
},
{
"volume": 10000,
"page_size": 100,
"before": {
"time_ms": 338498.531,
"queries": 250028,
"php_heap_peak_bytes": 153092096,
"php_heap_extra_peak_bytes": 127926272,
"documents_returned": 10000
},
"after": {
"time_ms": 166.93,
"queries": 67,
"php_heap_peak_bytes": 29360128,
"php_heap_extra_peak_bytes": 4194304,
"documents_returned": 100
},
"financial_position_fingerprint": "e8cad59487196e0e140a9b633b36ea716b5ebc8aa22c9faf14ffe409f04153f8",
"source_hashes": {
"legacy": "5427b63fcb4286725a770da737c1f53910f3cd53e8d8b41cf9c6431985ad0405",
"current": "f7a25e24c38b0f56d7a141aaccd513a4be37ac38c071b963a6653184064d8566"
}
}
],
"measurement_conditions": {
"php": "8.4.27",
"memory_limit": "512M",
"same_owned_database_per_volume": true,
"independent_php_process_per_strategy": true,
"warmup": "Same bounded source search in every worker; database seeded/warm; no cache flush. Legacy runs first, followed by page25/page100.",
"samples_per_strategy": 1,
"legacy_measurement_reused_for_both_page_sizes": true,
"legacy_baseline": "Existing integral core listing plus original scoped source callbacks; includes all document/evidence rows. Does not include the old adapter post-listing permission flags. New measurement includes the full paged SGF adapter.",
"memory": "PHP allocated heap peak in independent workers, including 24 MiB framework baseline. Extra zero means reuse of existing allocation, not zero memory use. Not OS RSS.",
"index_experiments_performed": false,
"indices_added_or_removed": false,
"gain_attribution": "Combined bounded pagination, batch dependent reads and removal of writer locks from reads; not an isolated estimate for each technique. No index gain claimed.",
"no_deployment_capacity_claim": true
},
"functional_pages": {
"kind": "financial_page_regression",
"cases": [
{
"name": "stable-source-window-and-independent-evidence-pages",
"assertions": 8,
"passed": true
},
{
"name": "filters-before-pagination-and-literal-search",
"assertions": 7,
"passed": true
},
{
"name": "full-position-parity-with-original-reader",
"assertions": 3,
"passed": true
},
{
"name": "batch-queries-do-not-grow-with-the-page",
"assertions": 5,
"passed": true
},
{
"name": "tenant-company-unit-isolation-and-access-revocation",
"assertions": 3,
"passed": true
},
{
"name": "receipt-changes-do-not-reuse-a-previous-page-snapshot",
"assertions": 3,
"passed": true
},
{
"name": "allocation-reversal-aggregation-is-equivalent",
"assertions": 2,
"passed": true
},
{
"name": "historical-decision-chain-is-validated-in-both-readers",
"assertions": 2,
"passed": true
}
],
"scenarios": 8,
"assertions": 34,
"read_transaction": {
"isolation": "repeatable read",
"read_only": "on"
},
"last_read_queries": 67,
"benchmark_fixture_documents": 51,
"no_new_decision_capability": true,
"decision_and_allocation_rows_rollback_only": true
},
"existing_history_regression": {
"kind": "sgf_historical_payable_adapter_synthetic",
"cases": [
{
"name": "default-disabled-and-old-path-preserved",
"assertions": 4,
"passed": true
},
{
"name": "principal-confirmed-only-and-idempotency",
"assertions": 16,
"passed": true
},
{
"name": "receipt-integrity-and-identity-refusals",
"assertions": 6,
"passed": true
},
{
"name": "complete-compatible-payment-facts-required",
"assertions": 7,
"passed": true
},
{
"name": "changed-history-requires-new-conference",
"assertions": 3,
"passed": true
},
{
"name": "permissions-person-and-context-revalidated",
"assertions": 5,
"passed": true
},
{
"name": "audit-and-import-failure-atomic-recovery",
"assertions": 3,
"passed": true
},
{
"name": "receipt-append-only-and-existing-controller",
"assertions": 3,
"passed": true
},
{
"name": "invalid-receipt-keeps-history-readable-and-balance-indeterminate",
"assertions": 2,
"passed": true
},
{
"name": "concurrent-confirmations-wait-and-replay-one-import",
"assertions": 7,
"passed": true
}
],
"tests": 10,
"assertions": 56,
"principal_minor": 6000,
"confirmed_minor": 3000,
"pending_minor": 1000,
"rejected_minor": 500,
"balance_minor": 3000,
"shared_engine_unchanged": true,
"native_source_preparation_only": true,
"actual_http_kernel_tested": false,
"browser_interactions_tested": false,
"visual_review": false,
"deployment_capacity_validated": false
},
"http": {
"kind": "financial_pagination_actual_http",
"checks": 24,
"passed": true,
"volume": 10000,
"default_page": 25,
"larger_page": 100,
"filter_before_count": true,
"source_and_evidence_pages_disjoint": true,
"context_and_rights_enforced": true,
"unknown_parameters_refused": true,
"html_escaping": true,
"visual_review": false,
"browser_interactions_tested": false
},
"fresh_command": {
"passed": true,
"read_cache_not_used_by_command": true,
"current_document_and_history_anchor_revalidated": true,
"test_changes_rolled_back": true
},
"concurrent_read": {
"passed": true,
"reader_completed_before_writer_release": true,
"uncommitted_receipt_not_observed": true,
"documents": 25,
"balance_minor": 3000,
"reader_time_ms": 230.176,
"not_throughput_capacity": true
},
"positive_recognition_and_unit_filter": {
"passed": true,
"positive_unrecognised_document_visible": true,
"recognised_filter_excludes_it": true,
"other_unit_same_company_excluded": true,
"no_other_evidence_returned": true,
"test_rows_rolled_back": true
},
"postcheck": {
"read_only": true,
"original_workflow_receipt_unchanged": true,
"counts": {
"pa_imported_sources": 10000,
"pa_sources": 10000,
"pa_proposals": 10000,
"pa_obligations": 10000,
"pa_history_imports": 10000
},
"imported_payments": 30000,
"temporary_decision_and_allocation_tables_absent": true,
"scoped_business_fingerprint": "c9e93019653c35b8c1685a58ab2b68e8b279572044355895abc9360790707c68",
"benchmark_clones": 9999,
"native_workflow_sources": 1,
"no_operational_installation": true
},
"private_proof_sha256": {
"regression.json": "3cb8d648249e22c00447602107c1939abc03650173a6d11ccb0f23df59e0fe44",
"page-cases.json": "a6b8c5a43cf4787c2be70a2b65e87426b40f8e7d6d14916f0a50e1e806899630",
"http-proof.json": "86783db1c62563f7e718297d1cbefa5d850dc00cd1f85db83491cee040f1b27a",
"page-http.json": "817b74f2ab18d36d6c6c8f2757eb28f547a01cacebf14caca995ee6dd29a9937",
"page-fresh-command.json": "349d10ff986fceedc847796cca0bb38293e403b37d7d4ea731819d1d8bc63eba",
"page-concurrent-read.json": "9eb7b544c850747d842ac7a3b4cc512f45ac5e38c711cd2f23db565f97ce590c",
"page-filter-positive.json": "8a67609459318c6028364ecdb968b9d5212f4b94eaf428d09d1dcd2d26ba0c0e",
"page-post.json": "4165000a52cda0e94759e3d2ff92095d29e1d4d75e5cd8e63b5f8a84eb6e5432"
},
"native_compatibility": {
"proofs": [
{
"file": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml",
"sha256": "1381ea38c6e9c8b47c8ac619f225d2c4e6d49b851fd7e77652c526f98622c2b3",
"passing_cases": 20,
"excluded_cases": 1
},
{
"file": "private/stock-receipt-efcf1053aa57/financial-read-affected-junit.xml",
"sha256": "f57822ab2e0ea07ae6f49ae99f76f8cca4a554e0294ed33f0da18b9259e5a919",
"passing_cases": 1,
"excluded_cases": 0
}
],
"selected_cases": [
{
"name": "historical import keeps gross principal and subtracts confirmed payments exactly once",
"assertions": 26,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "a decision between proposal and validation invalidates the captured history",
"assertions": 4,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "pending-only and fully paid histories retain the correct balances with data set "('10.00', 'pending', 6000)"",
"assertions": 2,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "pending-only and fully paid histories retain the correct balances with data set "('60.00', 'confirmed', 0)"",
"assertions": 2,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "import does not enable new payments or confirmations of pending history",
"assertions": 3,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "missing audit and unapproved endpoints cannot import history",
"assertions": 3,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "failure during capture rolls back obligation and all imported facts",
"assertions": 5,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "normalizer refuses duplicated omitted or incompatible payment facts",
"assertions": 8,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "two installation identities cannot recognise two obligations for the same local invoice",
"assertions": 4,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "the original 1160 example keeps 300 confirmed and 100 pending separate",
"assertions": 3,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "imported pending decisions change the balance once and preserve the import with data set "('confirmed', 5000)"",
"assertions": 10,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "imported pending decisions change the balance once and preserve the import with data set "('rejected', 6000)"",
"assertions": 10,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "decision failure rolls back original payment audit and ledger together",
"assertions": 6,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "activation and independent eligible reviewer remain mandatory",
"assertions": 5,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "deciding historical pending does not allow new payments",
"assertions": 2,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "unauthorised original changes invalidate balance and prevent decisions",
"assertions": 3,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "decision facts cannot be updated or deleted",
"assertions": 2,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "confirmation rechecks available balance and rejection does not deduct",
"assertions": 5,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "a full confirmation leaves zero balance and prevents another confirmation",
"assertions": 2,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "task inbox delegates imported payment authority without exposing or deciding the ledger",
"assertions": 35,
"proof": "private/stock-receipt-879a40eff72c/financial-read-affected-junit.xml"
},
{
"name": "imported ledger is append-only and disabling the history cannot silently restore the old balance",
"assertions": 4,
"proof": "private/stock-receipt-efcf1053aa57/financial-read-affected-junit.xml"
}
],
"selection": "20 valid cases reused from initial run; one test fixed to wrap expected PostgreSQL trigger violations in savepoints and rerun alone in a fresh QA database. Intermediate failed cases are retained but not counted. A reused RefreshDatabase fixture was refused by duplicate-function setup; launcher now requires a new owned database for this mode."
},
"implementation": {
"documents_page_sizes": [
25,
100
],
"proposal_and_event_pages_independent": true,
"filters_applied_before_pagination": [
"number_or_supplier_literal_search",
"recognised_or_unrecognised"
],
"stable_order": "Documents/proposals/events descending ID; obligation positions keep existing ID order.",
"history_and_allocation_algorithms_reused": true,
"write_paths_never_use_read_snapshots": true,
"actual_read_transaction": "REPEATABLE READ READ ONLY",
"no_company_writer_lock_on_read": true,
"native_production_adapter_unchanged": true
},
"source_sha256": {
"packages/payables/src/Payables.php": "f8845ab702f9bc58fad2b39a89fbfa3cdc1582169812704f3f2f225be7854977",
"packages/payables/src/HistoricalPayments.php": "c55d3e67a8bad469184d664f7739a97af7121d685315c6d55f90d08355c632f0",
"packages/payables/src/PaymentDecisions.php": "3a54c7905783d14facf070fc59ac426264cf423daaedb47d24c018aa4d41fc39",
"packages/payables/src/SupplierSettlements.php": "dc7932608144b105a4289812cb8d0bffd94a425a3d05753b482cec826ed4a68a",
"packages/payables/ui/page.php": "36d3d6935eb3549bd9c8501c3171f5361839cffc036c228adc66cead1aaed66f",
"app/Modules/Purchasing/SupplierPayables.php": "77d3af4ba3a60d9742aeebe439d43b556658f257b6da4d1fda6f48f9f2385813",
"app/Modules/Purchasing/SupplierHistoryReceipts.php": "e91523254914ff80a363e360f1547c3b19757142955463826bbf7f535cd5c17c",
"app/Modules/Purchasing/SupplierPayablesController.php": "6671292de4bd41b382b23fc63683b5b67b97227a6c8e61fcbc865d49493a384c",
"config/supplier_payable_history.php": "5331b7987fdb5f8fdb9647e6cf74145f91aca333a7e4c21f98092827893b85ce",
"../compras/tests/Feature/PayableHistoryImportTest.php": "e9151c0befa2d1de91f7bddef5b94287218c0aae28933fabcf82f1592489dc84",
"scripts/payable-page-run.mjs": "a8fc8eda84426c3477950d5122f19e4110d98a0380ff17f95224aa8edf540181",
"scripts/payable-page-fixture.php": "124515cdf3937ddf5ee5a4520ce93ce3f42968b604643a65d3be88c246e05deb",
"scripts/payable-page-cases.php": "29a29d804f4fc34f095a51727c1e8bdd4bbba8967d03952be7db3425cd4b8a87",
"scripts/payable-page-bench.php": "90aa0f130f901859636418018097db0865eeb7e2b39b50169fb0d3747ff09966",
"scripts/payable-page-load.mjs": "9f1ab6e28cde655a112d5a85a999bb10171cdbd99ca48437ffa6d6860daa1446",
"scripts/payable-page-http.mjs": "19a44634958a5f2c449ab1e68f2791d68ce1020c794f25ad6adda8fa0073eb7c",
"scripts/payable-page-final.php": "8e48769422524380b2eb0ccef742a86b44915329f8ecd96d923f07f6b73bbcf4",
"scripts/summarize-payable-page.mjs": "d8b74681f670ff29ee48d08bd79d2eeb69d313074a63cc5d1a114cd0165270e8",
"scripts/payable-history-sgf-proof.php": "00a79c0abc369eb541e3ac67fb16d8f338eae1b387fdc521bb9b9dd0a9fb9507",
"scripts/stock-receipt-composition.mjs": "dc9288a4f419e89db26fef3a06f0218c505882220e07cdffd24d5564cb5b4d74"
},
"reused_proofs": {
"docs/proofs/sgf-payable-history-receipt-20261102.json": "92538539020a037f8ab652c8b20da929014b6c50f2a315c35fbc5349d13e8e65",
"docs/proofs/workshop-stock-closure-20261102.json": "261d5502f6905d53ef8046e0e900c9bee159c8c9d7e1bae4fddd8ec698313bf7",
"docs/proofs/native-warehouse-return-20261102.json": "587795ab4d2b2e65d51feaf7ed5e368df715d69cb7a0480f5f2b1d802d019869"
},
"preservation": {
"new_owned_qa_databases_only": true,
"one_actual_native_workflow_source_plus_explicit_benchmark_clones": true,
"previous_native_and_sgf_history_fixtures_preserved": true,
"six_pending_associations_untouched": true,
"blocked_cache_untouched": true,
"installed_and_demo_data_or_rights_unchanged": true,
"no_new_operational_migration_or_indices": true,
"publication": false,
"purchasing_activation": false,
"checkpoint": false
},
"limits": [
"A page includes the complete dependency history needed to validate each selected obligation; an unusually large single history still needs separate assessment.",
"Pagination snapshots are per request, not a fixed snapshot across human navigation or keyset cursor.",
"The standalone native adapter retains its old listing; compatibility was tested against the canonical package in private QA, not deployed to native/demos.",
"Read timings are local, warm, single samples; no concurrency throughput, production capacity or visual acceptance established.",
"Historical receipts remain synthetic snapshots; no live provenance authentication or operational financial-responsibility cutover added."
],
"visual_review_pending": true,
"deployment_capacity_validated": false
}