210 lines
10 KiB
JSON
210 lines
10 KiB
JSON
{
|
|
"date": "2026-11-02",
|
|
"increment": "WORKSHOP-DELIVERY-LINK-SIM-v1",
|
|
"status": "implemented_and_proved_synthetically",
|
|
"tests": {
|
|
"affected_existing": {
|
|
"file": "workshop-stock-1793633268880.xml",
|
|
"sha256": "d5094fd19571c96190ae2fa1d2adadcf30d05add4372f6b02b169345fef98319",
|
|
"tests": 6,
|
|
"assertions": 222,
|
|
"cases": [
|
|
"test_individual_impact_independence_exact_issue_and_replay",
|
|
"test_client_unverified_fraction_and_unknown_delivery_do_not_debit",
|
|
"test_stale_book_mapping_permission_scope_and_failure_recovery",
|
|
"test_corrected_source_requires_review_and_never_consumes_the_same_origin_twice",
|
|
"test_other_company_cannot_read_or_confirm_origin_and_changed_command_is_refused",
|
|
"test_concurrent_confirmation_has_one_claim_and_movement"
|
|
],
|
|
"selected_cases_only": true,
|
|
"parent_run_errors": 3,
|
|
"parent_run_failures": 0
|
|
},
|
|
"delivery": {
|
|
"file": "workshop-stock-1793633372636.xml",
|
|
"sha256": "d660ba55ab6773efcacf0ba202e33f240b1332347a2609d7c9c9521159890ecb",
|
|
"tests": 5,
|
|
"assertions": 163,
|
|
"cases": [
|
|
"test_delivery_link_has_zero_effect_independent_decision_and_no_duplicate",
|
|
"test_delivery_link_refuses_mismatch_stale_book_and_recovers_from_failure",
|
|
"test_delivery_link_can_reconcile_fully_depleted_stock_without_new_issue",
|
|
"test_delivery_link_rejects_reversal_and_does_not_adopt_history",
|
|
"test_delivery_link_concurrent_confirmation_has_one_claim_without_movement"
|
|
],
|
|
"selected_cases_only": false,
|
|
"parent_run_errors": 0,
|
|
"parent_run_failures": 0
|
|
},
|
|
"additional_integrity_and_isolation": {
|
|
"file": "workshop-stock-1793633481884.xml",
|
|
"sha256": "0789b68768ce2f21c02b7d694c03681edd293e89dfdb657955b18390880874a4",
|
|
"tests": 2,
|
|
"assertions": 47,
|
|
"cases": [
|
|
"test_delivery_link_refuses_missing_original_hash",
|
|
"test_delivery_link_other_company_cannot_prepare_or_confirm"
|
|
],
|
|
"selected_cases_only": false,
|
|
"parent_run_errors": 0,
|
|
"parent_run_failures": 0
|
|
}
|
|
},
|
|
"totals": {
|
|
"tests": 13,
|
|
"assertions": 432
|
|
},
|
|
"selection_note": "Six affected existing cases passed in a run containing three new fixture-bootstrap errors; those errored cases are excluded. The five delivery cases then passed after bootstrap correction and stricter integrity checks; two additional integrity/isolation cases passed separately. Valid native proofs reused without rerunning unchanged native code.",
|
|
"scenarios_asserted": {
|
|
"initial_milli": "10000",
|
|
"already_issued_milli": "2000",
|
|
"before_link_milli": "8000",
|
|
"after_link_milli": "8000",
|
|
"new_physical_movements": 0,
|
|
"total_physical_movements": 2,
|
|
"total_operations": 1,
|
|
"claims": 1,
|
|
"original_movement_unchanged": true,
|
|
"same_book_stock_read": true,
|
|
"preparer_cannot_confirm": true,
|
|
"replay_same_movement": true,
|
|
"competing_proposal_refused": true,
|
|
"quantity_mismatch_refused": true,
|
|
"stale_book_refused": true,
|
|
"eligibility_revocation_refused": true,
|
|
"permission_revocation_refused": true,
|
|
"missing_operation_hash_refused": true,
|
|
"reversal_book_refused": true,
|
|
"other_company_prepare_and_confirm_refused": true,
|
|
"other_company_list_empty": true,
|
|
"failure_rollback_and_retry_without_duplicate": true,
|
|
"fully_depleted_book_can_link_without_debit": true
|
|
},
|
|
"concurrency_asserted": {
|
|
"processes": 2,
|
|
"company_row_lock_observed": true,
|
|
"first_backend_identified_by_pg_blocking_pids": true,
|
|
"after_release": "200/replay/same movement",
|
|
"claims": 1,
|
|
"physical_milli": "8000"
|
|
},
|
|
"source_sha256": {
|
|
"app/Modules/Workshop/WorkshopStock.php": "ad8701485fdcdc39fad5d9befef2079aef0c5b84c2ade03e6c3600cc0bd879ac",
|
|
"app/Modules/Workshop/Http/WorkshopStockController.php": "6a960ab558f77094119993a4f9a7fb45beb69b04275122b80667313761f2794d",
|
|
"resources/js/WorkshopStockWorkspace.jsx": "150c265f31411142635d9f83d6bb6f9be26369aea1cb189b282fc2edec9ce88a",
|
|
"routes/web.php": "0340363a57dfd0be5e0f4207b54ea2fafaee32c1e8ec62efd927e89c7277f650",
|
|
"tests/Feature/WorkshopStockTest.php": "2dcd62fadd205cf6e567742d69a813e1c6a28fa4ee34616b82bd02c58f0ff80a",
|
|
"tests/Support/workshop-stock-worker.php": "bdad20fd4f58714c36c20d3c271ac31fdd92a4083cedf31341938b501fd73c2d"
|
|
},
|
|
"qa_postcheck": {
|
|
"qa_identity": {
|
|
"db": "sgf_tempo_test",
|
|
"role": "sgf_test_runner",
|
|
"port": 55439,
|
|
"cluster": "sgf_modular_regression_2576427d1939"
|
|
},
|
|
"temporary_grants_remaining": 0,
|
|
"constraint_sha256": "40046092cba51f1b46d26d5f0da8af47e8336e90a8d50b8de3a8c390758f1783",
|
|
"operational_workshop_stock_bindings": 0,
|
|
"read_only": true
|
|
},
|
|
"static_ui": {
|
|
"path": "docs/proofs/workshop-delivery-ui-20261102.json",
|
|
"sha256": "1c5bc4735e6a29d3ff3cab4c499ccc1d3567f0ce9dafa02a34d57c19ae5b3184",
|
|
"kind": "static_impact_render_and_source_checks",
|
|
"zero_new_physical_effect_visible": true,
|
|
"existing_movement_and_quantity_visible": true,
|
|
"explicit_treatment_selection_in_source": true,
|
|
"component_sha256": "150c265f31411142635d9f83d6bb6f9be26369aea1cb189b282fc2edec9ce88a",
|
|
"backend_requests": 0,
|
|
"visual_review": false,
|
|
"browser_interactions_tested": false
|
|
},
|
|
"build": {
|
|
"passed": true,
|
|
"node": "24.22.1",
|
|
"vite": "8.3.5",
|
|
"manifest_sha256": "81aa20db890f896c6bb10affc2ff1540d5851d876fb316269db649ee5784e896"
|
|
},
|
|
"reused_proofs": {
|
|
"workshop_stock": {
|
|
"path": "docs/proofs/workshop-stock-20261102.json",
|
|
"sha256": "c13b22eed190e379d8311a8e02586e201f993a89bfc4490be5d9d325d6ca00c3"
|
|
},
|
|
"shared_writer_manifest_sha256": "3c24d9e9fb99bfbb274077495c3a42ddb7eccab06b5c6a956cd739b2bc9b56f0",
|
|
"native_issue_tests": {
|
|
"file": "private/stock-receipt-54f39ed20d16/issue-affected-junit.xml",
|
|
"sha256": "aed6359ba4216e10bb89f34d40e0314fc9efb0f8dedeea40551c3302f31b8525",
|
|
"tests": 25,
|
|
"assertions": 125,
|
|
"cases": [
|
|
"issues are exact, idempotent and cannot make stock negative",
|
|
"transfer creates exactly two opposite ledger entries and rejects repeated references",
|
|
"counts preserve theoretical quantities and adjustments apply a justified difference once",
|
|
"intervening receipts and issues invalidate counts and stale count forms",
|
|
"operational role cannot be replaced by administration or other profiles with data set "(App\\Enums\\PurchasingRole Enum (Admin, 'admin'))"",
|
|
"operational role cannot be replaced by administration or other profiles with data set "(App\\Enums\\PurchasingRole Enum (Finance, 'finance'))"",
|
|
"operational role cannot be replaced by administration or other profiles with data set "(App\\Enums\\PurchasingRole Enum (Procurement, 'procurement'))"",
|
|
"operational role cannot be replaced by administration or other profiles with data set "(App\\Enums\\PurchasingRole Enum (DepartmentHead, 'department_head'))"",
|
|
"operational role cannot be replaced by administration or other profiles with data set "(App\\Enums\\PurchasingRole Enum (Requester, 'requester'))"",
|
|
"foreign company resources cannot be used with data set "('warehouse_id')"",
|
|
"foreign company resources cannot be used with data set "('destination_warehouse_id')"",
|
|
"foreign company resources cannot be used with data set "('stock_item_id')"",
|
|
"foreign company resources cannot be used with data set "('responsible_id')"",
|
|
"audit failure rolls back both halves of transfer and operation",
|
|
"operations are immutable and new public screen contains only demonstration props",
|
|
"invalid precision and missing justification or destination do not write with data set "('quantity', '-1')"",
|
|
"invalid precision and missing justification or destination do not write with data set "('quantity', '0')"",
|
|
"invalid precision and missing justification or destination do not write with data set "('quantity', '0.0001')"",
|
|
"invalid precision and missing justification or destination do not write with data set "('reason', ' ')"",
|
|
"invalid precision and missing justification or destination do not write with data set "('destination', '')"",
|
|
"invalid precision and missing justification or destination do not write with data set "('responsible_id', null)"",
|
|
"positive adjustments credit only the difference and matching counts create no movements",
|
|
"failure creating transfer credit rolls back its debit",
|
|
"stock views isolate operations and counts from other companies",
|
|
"form encoded retry identifiers and equivalent quantities retain idempotency"
|
|
],
|
|
"selection": false,
|
|
"whole_run_tests": 25,
|
|
"whole_run_failures": 0,
|
|
"whole_run_errors": 0
|
|
},
|
|
"native_lot_tests": {
|
|
"file": "private/stock-receipt-0119bb873c56/issue-lots-junit.xml",
|
|
"sha256": "4ea8597200ebd761cb9460acf165e1baaa4f7b7b1b84690a0bfe749b73ddf6dc",
|
|
"tests": 2,
|
|
"assertions": 10,
|
|
"cases": [
|
|
"FEFO consumes earliest expiry and preserves the single physical ledger with exact partitions",
|
|
"expiry and hold remove usable quantity without changing physical stock"
|
|
],
|
|
"selection": false,
|
|
"whole_run_tests": 2,
|
|
"whole_run_failures": 0,
|
|
"whole_run_errors": 0
|
|
}
|
|
},
|
|
"preservation": {
|
|
"new_synthetic_fixtures_only": true,
|
|
"regression_not_reset": true,
|
|
"temporary_rights_restored": true,
|
|
"six_protected_records_untouched": true,
|
|
"blocked_cache_untouched": true,
|
|
"demos_untouched": true,
|
|
"prior_association_proofs_unchanged": true,
|
|
"real_data_or_rights_changed": false,
|
|
"purchasing_activation": false,
|
|
"publication": false,
|
|
"checkpoint": false
|
|
},
|
|
"limits": [
|
|
"Only explicit QA movement-to-order eligibility; no automatic or historical adoption.",
|
|
"Only full equal quantities, simple unreversed common-writer issues, no lots/reservations/spare parts.",
|
|
"Partial allocations, returns, compensation and amendment of confirmed links not implemented.",
|
|
"Operational configuration/installation and one installed procurement-to-consumption scenario remain pending.",
|
|
"No new write-load/deployment capacity proof, no browser interaction or visual review."
|
|
],
|
|
"visual_review_pending": true,
|
|
"deployment_capacity_validated": false
|
|
}
|