232 lines
12 KiB
JSON
232 lines
12 KiB
JSON
{
|
|
"date": "2026-11-02",
|
|
"increment": "WORKSHOP-STOCK-ISSUE-SIM-v1",
|
|
"status": "local_synthetic_implementation",
|
|
"tests": {
|
|
"reused_passing_cases": {
|
|
"file": "workshop-stock-1793632450233.xml",
|
|
"sha256": "8623c2a85428491d04eb90c0f162a1587226f9ab9c276534463f019472fc0f68",
|
|
"tests": 4,
|
|
"assertions": 154,
|
|
"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_concurrent_confirmation_has_one_claim_and_movement"
|
|
],
|
|
"selection": true,
|
|
"whole_run_tests": 5,
|
|
"whole_run_failures": 1,
|
|
"whole_run_errors": 0
|
|
},
|
|
"corrected_source": {
|
|
"file": "workshop-stock-1793632791460.xml",
|
|
"sha256": "9141a3b9cba9255b6ce34abf1167cfc45151546d26ec3253ee240785ad246e1f",
|
|
"tests": 1,
|
|
"assertions": 39,
|
|
"cases": [
|
|
"test_corrected_source_requires_review_and_never_consumes_the_same_origin_twice"
|
|
],
|
|
"selection": false,
|
|
"whole_run_tests": 1,
|
|
"whole_run_failures": 0,
|
|
"whole_run_errors": 0
|
|
},
|
|
"scope_and_command": {
|
|
"file": "workshop-stock-1793633025634.xml",
|
|
"sha256": "cf0643f3c5444efc3e65294790fd3e111e3e9a14a30af4a6f9399bbf93c04c4c",
|
|
"tests": 1,
|
|
"assertions": 29,
|
|
"cases": [
|
|
"test_other_company_cannot_read_or_confirm_origin_and_changed_command_is_refused"
|
|
],
|
|
"selection": false,
|
|
"whole_run_tests": 1,
|
|
"whole_run_failures": 0,
|
|
"whole_run_errors": 0
|
|
},
|
|
"native_issues": {
|
|
"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_lots": {
|
|
"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
|
|
},
|
|
"navigation": {
|
|
"file": "junit-focused.xml",
|
|
"sha256": "1452d1702bae6c8c3162750030b76c1167b88250ac03766fb8cba5fc4cae3549",
|
|
"tests": 8,
|
|
"assertions": 90,
|
|
"cases": [
|
|
"test_explicit_selection_direct_access_and_old_generation",
|
|
"test_company_configuration_and_revocation_are_checked_again",
|
|
"test_development_discovery_never_grants_operations_or_applies_in_production",
|
|
"test_failed_selection_preserves_context_and_audit_contains_module_without_token",
|
|
"test_local_environment_and_copied_profile_cannot_enable_discovery_for_client_database_configuration",
|
|
"test_shared_records_require_explicit_association_and_company_scope",
|
|
"test_unassociated_legacy_records_remain_in_explicit_administrative_inventory",
|
|
"test_draft_creation_preserves_source_history_and_does_not_share_dependencies_implicitly"
|
|
],
|
|
"selection": false,
|
|
"whole_run_tests": 8,
|
|
"whole_run_failures": 0,
|
|
"whole_run_errors": 0
|
|
}
|
|
},
|
|
"totals": {
|
|
"tests": 41,
|
|
"assertions": 447
|
|
},
|
|
"proof_selection": "Four passing cases reused from an intermediate five-case run with one fixture-date failure. Only the corrected case and the additional scope case were rerun; the failed case is excluded from reused results.",
|
|
"scenario_asserted": {
|
|
"initial_physical_milli": "10000",
|
|
"consumption_milli": "2000",
|
|
"final_physical_milli": "8000",
|
|
"movements_added": 1,
|
|
"claims_added": 1,
|
|
"same_book_observed_by_stock": true,
|
|
"preparer_cannot_confirm": true,
|
|
"replay_original_movement": true,
|
|
"stale_book_map_rights_context_refused": true,
|
|
"unknown_previous_issue_refused": true,
|
|
"client_delivered_unverified_fraction_insufficient_refused": true,
|
|
"failure_after_claim_insert_atomic_and_recovered": true,
|
|
"other_company_sources_and_proposals_not_visible": true,
|
|
"other_company_prepare_and_confirm_refused": true,
|
|
"wrong_module_context_refused": true,
|
|
"changed_idempotency_body_refused": true
|
|
},
|
|
"concurrency_asserted": {
|
|
"processes": 2,
|
|
"lock": "company row held by first transaction",
|
|
"pg_blocking_pids_observed": true,
|
|
"second_after_release": "200 replay same movement",
|
|
"one_movement_and_claim": true
|
|
},
|
|
"correction_asserted": {
|
|
"old_proposal_after_source_correction": "409",
|
|
"verified_v2_after_new_review_physical_milli": "7000",
|
|
"verified_v3_after_consumption": "409 without second effect"
|
|
},
|
|
"package": {
|
|
"id": "tempo-inventory-issue",
|
|
"version": "0.1.0",
|
|
"files": {
|
|
"bootstrap.php": "3e6c7c698279f3ffb865131e79b3f89e5ec3e4aa9114782df62e17712f48df6b",
|
|
"src/IssueMovementWriter.php": "36d59bce53b8447516399974fc7d08beaa5d92b7b45a416014bd855e03fdf409"
|
|
},
|
|
"manifest_sha256": "3c24d9e9fb99bfbb274077495c3a42ddb7eccab06b5c6a956cd739b2bc9b56f0",
|
|
"source_and_artifact_equal": true
|
|
},
|
|
"source_sha256": {
|
|
"app/Modules/Workshop/WorkshopStock.php": "bfbcc17b9ff0caa4ed46dad7d1276dd8e508166eecafd2a3c6cbb4c5b54fbab0",
|
|
"app/Modules/Workshop/Http/WorkshopStockController.php": "c6116f317a8ef6dd74f66599797b77da990f26aa9b6279142804f4974bf0d00d",
|
|
"resources/js/WorkshopStockWorkspace.jsx": "7bbc2c5c8a6360b601b9c00772fcd9bbf16722cd087431ecc4274ef1c5031338",
|
|
"resources/js/WorkshopMenuWorkspace.jsx": "098b990adcbafc387bd447e77f3238a8ec984218812d736bcb33e3da22f4937c",
|
|
"config/workshop_stock.php": "603c5ea718e59b9e43c6dc01a4238813a56a63755fe60b63354b3957f6a0af49",
|
|
"tests/Feature/WorkshopStockTest.php": "450f15558cb2727db8e1f60ab95ffaf12124dacf6c9e561611d82e56bdd17fd4",
|
|
"tests/Support/workshop-stock-worker.php": "bdad20fd4f58714c36c20d3c271ac31fdd92a4083cedf31341938b501fd73c2d",
|
|
"../compras/app/Services/StockIssueMovement.php": "61a649d26f4bf1e96becc3ff213bab0a029c47040d1368e99cc558bd98649de6",
|
|
"../compras/app/Services/StockWorkflow.php": "18ddaa075432b84c0b0ee5241ff56ab9de9aa8e8db4e6132693bc7fd904b3a58"
|
|
},
|
|
"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": {
|
|
"proof": "docs/proofs/workshop-stock-ui-20261102.json",
|
|
"sha256": "65aca7809af88f80e50c52e9ab13ee9ba52e047b17b183c048c8e1c0dd03b3fc",
|
|
"kind": "static_render",
|
|
"permission_separation": true,
|
|
"pending_notice_removed_for_authorized_view": true,
|
|
"loading_not_zero": true,
|
|
"backend_requests": 0,
|
|
"visual_review": false
|
|
},
|
|
"build": {
|
|
"tool": "pinned Node 24.22.1 / Vite 8.3.5",
|
|
"passed": true,
|
|
"manifest_sha256": "205a739db091d58850827051e840cbf367437595c370418b2d6475848497be04",
|
|
"visual_review": false
|
|
},
|
|
"reused_evidence_sha256": {
|
|
"docs/proofs/stock-receipt-link-20261102.json": "b763ab326abf49271d16b32d22f01a8a8d31d1ab015141e42dcf5963ee914143",
|
|
"docs/proofs/stock-read-load-20261102.json": "4fc1d7d13d480a30966b259611de1066fc22ef31f7a0e782da4872211801c72e",
|
|
"docs/proofs/stock-read-composition-20261102.json": "bb129ab22f424a5d3333f9b851062bc6284fd514b9962e0df04b3efd22d951a6"
|
|
},
|
|
"preservation": {
|
|
"writes_confined_to_new_synthetic_fixtures": true,
|
|
"regression_not_reset": true,
|
|
"six_protected_records_untouched": true,
|
|
"blocked_cache_untouched": true,
|
|
"demos_untouched": true,
|
|
"previous_association_proofs_unchanged": true,
|
|
"real_grants_or_data_changed": false,
|
|
"purchasing_candidate_activation": false,
|
|
"publication": false,
|
|
"checkpoint": false
|
|
},
|
|
"limits": [
|
|
"Quantity-only new eligible workshop origins; lots/reservations/spare parts refused.",
|
|
"Reconciliation of existing deliveries, partial allocation, returns and compensation not implemented.",
|
|
"Initial stock in workshop fixture is synthetic; previous native receipt proof is separate, not an installed single end-to-end ERP scenario.",
|
|
"Conference tables are QA fixture only; operational installer and real rights not applied.",
|
|
"Source list paginated 25, latest 25 proposals only.",
|
|
"PostgreSQL tested; new write-load capacity and other drivers unvalidated."
|
|
],
|
|
"visual_review_pending": true,
|
|
"deployment_capacity_validated": false
|
|
}
|