393 lines
17 KiB
JSON
393 lines
17 KiB
JSON
{
|
|
"date": "2026-11-03T11:50:56.769Z",
|
|
"increment": "SGF-REQUEST-TO-RECEIPT-QA-v1",
|
|
"passed": true,
|
|
"functional_code": true,
|
|
"checks": 103,
|
|
"tests": {
|
|
"request": {
|
|
"file": "private/receipt-composition-297f4626f01f/request-result.json",
|
|
"sha256": "ed8a2f4856f4661aef1698e4b6a6164a6936b87c22a00765e1acc78122585fc8",
|
|
"checks": 30,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"new composition starts with no mapped requests and an explicit cost centre",
|
|
"functional request workspace served",
|
|
"warehouse cannot prepare or inspect internal request economics",
|
|
"foreign company request is refused",
|
|
"stale host context is refused",
|
|
"procurement cannot impersonate the scoped requesting identity",
|
|
"unmapped cost centre cannot be used",
|
|
"original draft preview omits temporary identifiers",
|
|
"preview leaves request budget notices command receipts and audit unchanged",
|
|
"host origin audit failure aborts native draft confirmation",
|
|
"native request lines command receipt and audit roll back atomically",
|
|
"two workers recover one native requisition after failure",
|
|
"one draft and one original line are committed",
|
|
"same key with another payload is refused",
|
|
"requester edits draft through original lifecycle",
|
|
"submission prepared before draft edit is refused",
|
|
"submission right is checked again at commit",
|
|
"submission reserves and opens the original independent approval",
|
|
"repeated submission keeps exactly one reservation",
|
|
"requester cannot approve their own request",
|
|
"mapped department head can decide current exact request",
|
|
"department head approves through the same original service",
|
|
"approval repetition records one decision",
|
|
"new approved SGF requisition reaches original sourcing without ID rebinding",
|
|
"insufficient native budget refuses submission without a reservation",
|
|
"original rejection releases only its own reservation",
|
|
"rejection replay does not release twice",
|
|
"only approved request enters sourcing list",
|
|
"request status filter and server page are preserved",
|
|
"SGF host budget entries are unchanged across draft submission approval and rejection"
|
|
],
|
|
"concurrency_statuses": [
|
|
200,
|
|
201
|
|
],
|
|
"host_budget_before": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
|
|
"host_budget_after": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945",
|
|
"single_native_reservation": true,
|
|
"legacy_ir_not_transferred": true,
|
|
"source_ready_without_rebinding": true,
|
|
"visual_review": false,
|
|
"deployment_capacity_validated": false
|
|
}
|
|
},
|
|
"integrated_source_to_receipt": {
|
|
"file": "private/receipt-composition-297f4626f01f/sourcing-result.json",
|
|
"sha256": "2e31bc60819b08b829ab2127db09b6c51ad15418511c256f047a8c744fcc4914",
|
|
"checks": 47,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"source starts with no proposal evaluation or adjudication",
|
|
"only mapped approved source request is listed",
|
|
"functional sourcing workspace is served",
|
|
"warehouse cannot access supplier comparison",
|
|
"another tenant process is refused",
|
|
"stale SGF context is refused",
|
|
"original quotation pricing supplies the preview total",
|
|
"preview savepoint commits no proposal evaluation budget or audit records",
|
|
"tampered preview is refused",
|
|
"failure to record the command receipt fails the confirmation",
|
|
"native proposal lines and audit roll back with the command receipt",
|
|
"two independent workers recover the same proposal command once",
|
|
"concurrent repetition creates one proposal and one line",
|
|
"same operation key with other contents is refused",
|
|
"explicit proposal registered 2",
|
|
"explicit proposal registered 3",
|
|
"missing evaluations cannot be bypassed to create an award",
|
|
"native evaluation preview available actor/4",
|
|
"individual evaluation recorded actor/4",
|
|
"native evaluation preview available issuer/4",
|
|
"individual evaluation recorded issuer/4",
|
|
"native evaluation preview available actor/6",
|
|
"individual evaluation recorded actor/6",
|
|
"native evaluation preview available issuer/6",
|
|
"individual evaluation recorded issuer/6",
|
|
"native evaluation preview available actor/8",
|
|
"individual evaluation recorded actor/8",
|
|
"native evaluation preview available issuer/8",
|
|
"individual evaluation recorded issuer/8",
|
|
"original comparison identifies eligible top without choosing it",
|
|
"another key cannot create a second evaluation by the same person",
|
|
"selection right is revalidated at confirmation",
|
|
"chosen proposal starts original distinct award approval",
|
|
"selection repetition creates no second adjudication",
|
|
"proposal window closes after adjudication",
|
|
"historical proposal receipt remains recoverable after the window closes",
|
|
"award preparer cannot approve their own decision",
|
|
"distinct eligible head approves through original workflow",
|
|
"approval repetition preserves one recorded decision",
|
|
"adjudication created in SGF reaches order workflow without rebinding IDs",
|
|
"approved SGF adjudication issues one canonical order",
|
|
"warehouse receives the actual order created from SGF sourcing",
|
|
"proposal-to-adjudication-to-order-to-receipt path completes",
|
|
"complete path leaves exactly the intended business facts",
|
|
"one source-budget commitment without invoice payment or consumption",
|
|
"full append-only history is paginated on server",
|
|
"history pages are distinct and expose older evidence"
|
|
],
|
|
"quotes": 3,
|
|
"evaluations": 6,
|
|
"awards": 1,
|
|
"approved_decisions": 1,
|
|
"orders": 1,
|
|
"receipts": 1,
|
|
"movements": 1,
|
|
"commit_minor": 10000,
|
|
"whole_selected_path_complete": true,
|
|
"concurrency_statuses": [
|
|
200,
|
|
201
|
|
],
|
|
"preview_persistent_fingerprint_unchanged": true,
|
|
"rollback_recovery": true,
|
|
"original_controllers_and_workflows": true,
|
|
"visual_review": false,
|
|
"deployment_capacity_validated": false
|
|
}
|
|
},
|
|
"guards": {
|
|
"file": "private/receipt-composition-297f4626f01f/request-guards.json",
|
|
"sha256": "ce9f665d2975f9f10f6cced28ec60ddba8496452002a3243fec2ffbde458aa23",
|
|
"checks": 3,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"disabled requests runtime refuses before SQL",
|
|
"disabled requests preview refuses before validation or SQL",
|
|
"production cannot activate synthetic requests"
|
|
],
|
|
"database_queries": 0,
|
|
"business_writes": 0
|
|
}
|
|
},
|
|
"demonstration": {
|
|
"file": "private/receipt-composition-27afd758cfdb/request-demo-smoke.json",
|
|
"sha256": "c29fc79a54c27e4fd37a2e1a205daf4f231e4d4a9418140caa79a98f4bcc8ee0",
|
|
"checks": 11,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"main demo begins before any requisition or reservation",
|
|
"live request rights match requester",
|
|
"request workspace is live",
|
|
"creation sentinel is not a readable request",
|
|
"live request rights match approver",
|
|
"live request rights match actor",
|
|
"procurement waits for an actual approved request",
|
|
"live request rights match issuer",
|
|
"live request rights match validator",
|
|
"served request script matches delivered source",
|
|
"read-only demonstration smoke changes no business evidence"
|
|
],
|
|
"before": "4d3a0344cbde7aedab6d74c4ce143a5fa84561c87151cd1c0c9fd11b10115ba8",
|
|
"after": "4d3a0344cbde7aedab6d74c4ce143a5fa84561c87151cd1c0c9fd11b10115ba8",
|
|
"visual_review": false
|
|
}
|
|
},
|
|
"assets": {
|
|
"file": "private/receipt-composition-27afd758cfdb/request-demo-assets.json",
|
|
"sha256": "11bad90c1facd3322ff2f1e2d91cf5b616da2967eca4febf06de346bc258407a",
|
|
"checks": 3,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"private frontend build succeeds",
|
|
"served built assets match private build",
|
|
"supplier module is served through private static whitelist"
|
|
],
|
|
"assets": [
|
|
"assets/app-j88n39Mi.js",
|
|
"assets/app-BLSNCrO7.css"
|
|
],
|
|
"visual_review": false
|
|
}
|
|
},
|
|
"package_freeze": {
|
|
"file": "private/receipt-composition-27afd758cfdb/package-freeze.json",
|
|
"sha256": "f52fa990a9546a4a46f29ec422bb2d61fd196db1fb6b51b0d968722478f1b05d",
|
|
"checks": 3,
|
|
"result": {
|
|
"passed": true,
|
|
"observed_source_manifest": "84824e230a9fd2cd84a0ed36e72ccf0539798bf0503ab812a4c94d932494c05a",
|
|
"tested_manifest": "7709a3d447d54c17d2fb4be4f9a0f70455c4a38c34e4bb8c643f6b5169071556",
|
|
"source_repository_written": false,
|
|
"observed_bundle_retained": true,
|
|
"tested_bundle_equal": true,
|
|
"active_manifest": "7709a3d447d54c17d2fb4be4f9a0f70455c4a38c34e4bb8c643f6b5169071556",
|
|
"checks": [
|
|
"active native bundle matches tested QA artefact",
|
|
"concurrent source snapshot preserved separately without modifying its repository",
|
|
"live runtime accepts tested manifest with an unchanged empty request context"
|
|
]
|
|
}
|
|
},
|
|
"navigation": {
|
|
"file": "docs/proofs/request-home-20261103.json",
|
|
"sha256": "b3436e6745302e229afc5008bbd1f1660d2f048db46be37e23a4e37721a95498",
|
|
"checks": 6,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": 6,
|
|
"names": [
|
|
"scoped right and capability expose request link",
|
|
"absent right hides request link",
|
|
"foreign unit right hides request link",
|
|
"disabled composition hides request link",
|
|
"unit selection is required",
|
|
"order and receipt links remain available"
|
|
],
|
|
"source": "resources/js/PurchasingHome.jsx",
|
|
"sha256": "e9215010b38e5b964a4dbb5588aeb6690793a67bee06074e2b9c186d1e51d62c",
|
|
"visual_review": false
|
|
}
|
|
}
|
|
},
|
|
"sources": [
|
|
{
|
|
"file": "app/Modules/Purchasing/RequestController.php",
|
|
"sha256": "01033a50d6f1dfbdea34357e6853b978e066f11a1267fcd652606f67930d7009"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/RequisitionAccess.php",
|
|
"sha256": "a955228df0f793d3b90f37e5ca890c53af88f6406140e98fe9a614c3821980cc"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/SourcingController.php",
|
|
"sha256": "0b297af4648a5690c99cac5015e009dfd3eb32d236fae63a5716b964e44c71f6"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/OrderController.php",
|
|
"sha256": "4ebab47ecb008f3c31f970f399e8c19df7e860d7b6482227a800fb61dd28dd48"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/ReceiptController.php",
|
|
"sha256": "2c946b782a62e81b3ec637e2f72590ed6a6c0774f04a8082171f9c898d37c2db"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/ReceiptRuntime.php",
|
|
"sha256": "633933146ae8292f2bbc6da2b52ef8fbb9c820a853d27cf23f2783d3cfb159d6"
|
|
},
|
|
{
|
|
"file": "config/receipt_qa.php",
|
|
"sha256": "c60adb36c7cfade83c155adedf55972b5f4aad1e890a10a8f432a908c23533b4"
|
|
},
|
|
{
|
|
"file": "routes/web.php",
|
|
"sha256": "b759f175730ae1db332cf92463a2d7f0e59343b1160e82f6f3d03fccab7d0841"
|
|
},
|
|
{
|
|
"file": "app/Shared/Context/ModuleNavigation.php",
|
|
"sha256": "f5b78c4e0bbc2d4161631885050ec6bd259d1739c54e9163a84ed2669065e999"
|
|
},
|
|
{
|
|
"file": "app/Modules/Identity/Services/IdentityWorkflow.php",
|
|
"sha256": "cd6b84ae1cffe44dfd253c9e18caf821e96a10506e762c233e170ee53c7b3a0e"
|
|
},
|
|
{
|
|
"file": "resources/js/PurchasingHome.jsx",
|
|
"sha256": "e9215010b38e5b964a4dbb5588aeb6690793a67bee06074e2b9c186d1e51d62c"
|
|
},
|
|
{
|
|
"file": "resources/views/request-workspace.blade.php",
|
|
"sha256": "829ecf90d08b1776828231efc43cf0540b12aa1177feede57f735bf0557c74c1"
|
|
},
|
|
{
|
|
"file": "public/request-workspace.mjs",
|
|
"sha256": "e878fc3c7bc5ba24aa2b17fe41ffeda3267721b5beb2a1a3a0cb11f56d7dc93d"
|
|
},
|
|
{
|
|
"file": "scripts/order-native-setup.php",
|
|
"sha256": "0fc4614badb31412ac03f3a9eaf1b26be8cf690cd84afc003ea29194cc3f3222"
|
|
},
|
|
{
|
|
"file": "scripts/request-host-setup.php",
|
|
"sha256": "9b95453e9d466a13b40542497b709a679cc202814a1961879005e656d489f7c0"
|
|
},
|
|
{
|
|
"file": "scripts/request-composition-proof.php",
|
|
"sha256": "aea435734009eb3def06a5329d049bcc0d9575f5f9cf562ab3e21390e7a7771f"
|
|
},
|
|
{
|
|
"file": "scripts/request-sourcing-resume.php",
|
|
"sha256": "63fd9c6e98c673613879386aa34d081074a66232dc42b73cffd5d562de557f97"
|
|
},
|
|
{
|
|
"file": "scripts/receipt-composition-run.mjs",
|
|
"sha256": "597d161b218021c29bc56bfade7fe923e34e6f1baaca45dfbba6772a832dd218"
|
|
},
|
|
{
|
|
"file": "scripts/receipt-composition-http.php",
|
|
"sha256": "bb17873b09836391eb25fed19195a3020ebffdfe06723e5b34c1184180e5e4b7"
|
|
},
|
|
{
|
|
"file": "scripts/sourcing-composition-proof.php",
|
|
"sha256": "4fbe575f9b0e4f80d969f0bb8e5a2b2dd1c52732e43dbdddb87990432a8d5a04"
|
|
}
|
|
],
|
|
"pinned_manifests": {
|
|
"bundle": "7709a3d447d54c17d2fb4be4f9a0f70455c4a38c34e4bb8c643f6b5169071556",
|
|
"economic": "8b2d3aa61054e0edc54fcd818467eb2bacb5e1178f903b12ab44119e0f2e8d2e",
|
|
"internal": "2343af71f72259dd705f4cc3a3b163c90edf331a5b6ebe173531aeb341649e1b"
|
|
},
|
|
"single_authority": {
|
|
"native_request_id_preserved": true,
|
|
"native_reservation_once": true,
|
|
"native_commitment_once": true,
|
|
"host_budget_unchanged": true,
|
|
"legacy_ir_transferred": false
|
|
},
|
|
"demo": {
|
|
"url": "http://127.0.0.1:8068/qa/enter/requester?open=1",
|
|
"approver_url": "http://127.0.0.1:8068/qa/enter/approver?open=1",
|
|
"buyer_url": "http://127.0.0.1:8068/qa/enter/actor?open=1",
|
|
"finance_url": "http://127.0.0.1:8068/qa/enter/issuer?open=1",
|
|
"warehouse_url": "http://127.0.0.1:8068/qa/enter/validator?open=1",
|
|
"initial_main_requests": 0,
|
|
"initial_main_reserved_minor": 0,
|
|
"initial_main_committed_minor": 0
|
|
},
|
|
"qa_rights": [
|
|
"purchasing_requests.view",
|
|
"purchasing_requests.prepare",
|
|
"purchasing_requests.submit",
|
|
"purchasing_requests.approve"
|
|
],
|
|
"prior_proofs_preserved": [
|
|
{
|
|
"file": "docs/proofs/supplier-composition-20261103.json",
|
|
"sha256": "b37e265ed5cd6c96921eabdeb024ea2907630992726eab14ee2be170d3c88841"
|
|
},
|
|
{
|
|
"file": "docs/proofs/sourcing-composition-20261103.json",
|
|
"sha256": "405c0288aface14cc9f1f417e46cf899b3656e1cbb2617120c048cde17b93191"
|
|
},
|
|
{
|
|
"file": "docs/proofs/order-composition-20261103.json",
|
|
"sha256": "3334bf6f45ca629f1c1a0ea907f7b0804f0e90752d1ade0e9fb07599b4d310e3"
|
|
},
|
|
{
|
|
"file": "docs/proofs/receipt-composition-20261103.json",
|
|
"sha256": "c63f17f323db8e7374e60a2b4640d444f0e3153384c5f9c65426d300c258a5bd"
|
|
},
|
|
{
|
|
"file": "docs/proofs/module-association-consolidation-summary-20261102.json",
|
|
"sha256": "8f693f39763ee21a22ebd3929d95ba1480f339eca18742fa53055c69eb5219ef"
|
|
}
|
|
],
|
|
"diagnostics": {
|
|
"initial_test_host_table_name_corrected": "cb_budget_entries; initial error before commands",
|
|
"dependent_runner_now_requires_completed_request_proof": true,
|
|
"source_approval_replay_test_corrected_to_actual_department_head": true,
|
|
"source_first37_valid_checks_retained": true,
|
|
"remaining10_source_checks_resumed": true,
|
|
"replay_probe": "QA encrypted envelope reconstructed from the exact historical decision receipt; no workflow decision repeated"
|
|
},
|
|
"preservation": {
|
|
"installed_purchasing_sha256": "81899e531e9eec449717e694d8bdc106a9e220a828f5491ce918c1d2dc612787",
|
|
"protected_six_records_changed": false,
|
|
"blocked_cache_cleared": false,
|
|
"real_rights_changed": false,
|
|
"target_database_connected": false,
|
|
"previous_demo_data_written": false,
|
|
"destination_activated": false,
|
|
"publication": false,
|
|
"checkpoint": false
|
|
},
|
|
"limitations": [
|
|
"This delivers new requisitions through the SGF interface on the same native book; it does not migrate previously reserved SGF ir_requests.",
|
|
"Fresh synthetic identities for requester, department head, buyer, finance and warehouse. Native approvals/budget rules remain authoritative; no real grants or configuration.",
|
|
"Selected QA path100MZN, three proposals and original source-to-receipt workflow. Equipment/technical catalogues, formal regimes and later corrections are not declared complete.",
|
|
"Read/history workspace exposes recent25 request events; full native history remains retained.",
|
|
"Rollback-only previews may consume sequence values; no external notification channel is used.",
|
|
"No visual review, sustained-load or deployment-capacity validation."
|
|
],
|
|
"visual_review_pending": true,
|
|
"deployment_capacity_validated": false
|
|
}
|