314 lines
13 KiB
JSON
314 lines
13 KiB
JSON
{
|
|
"date": "2026-11-03T11:17:50.348Z",
|
|
"increment": "SGF-SUPPLIER-REGISTRY-QA-v1",
|
|
"passed": true,
|
|
"functional_code": true,
|
|
"checks": 64,
|
|
"tests": {
|
|
"workflow": {
|
|
"file": "private/receipt-composition-bead400917da/supplier-result.json",
|
|
"sha256": "84cad0ab602624680416ffcaf408c6cd3e6649023f9d90c1534000ea0e623147",
|
|
"checks": 34,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"supplier workspace served",
|
|
"only three explicitly bound seed suppliers are listed",
|
|
"warehouse cannot view supplier economic registry",
|
|
"foreign tenant supplier is inaccessible",
|
|
"unmapped unit is refused",
|
|
"outdated company context is refused",
|
|
"invalid status filter is rejected",
|
|
"native create preview displays pending state without activation",
|
|
"supplier preview commits neither supplier nor history",
|
|
"tampered preview is refused",
|
|
"history receipt failure aborts supplier confirmation",
|
|
"supplier and original audit roll back together",
|
|
"independent workers recover one supplier after failure",
|
|
"one supplier and one immutable command receipt",
|
|
"same key with other contents is refused",
|
|
"distinct finance identity can inspect newly prepared supplier without rebinding",
|
|
"preparer cannot review own supplier",
|
|
"pending supplier is neither selectable nor accepted by native quotation rules",
|
|
"independent review displays before and after states",
|
|
"native update increments version and retains pending review",
|
|
"review prepared against old version is refused",
|
|
"review right revalidated on confirmation",
|
|
"finance activates exact current version",
|
|
"review repetition does not increment version twice",
|
|
"reviewed supplier automatically becomes eligible in the same scoped sourcing registry",
|
|
"reviewed supplier reaches original quotation pricing",
|
|
"finance suspension is explicit and versioned",
|
|
"supplier suspension after preview is revalidated before quote commit",
|
|
"new supplier reviewed in SGF supplies an actual native quotation",
|
|
"blocked supplier cannot be reactivated",
|
|
"editing active supplier clears earlier reviewer and status",
|
|
"server filters and stable pagination produce 15 plus 1 disjoint rows",
|
|
"original and SGF history retain author date before and after without unrelated suppliers",
|
|
"supplier integration adds no order stock or budget commitment"
|
|
],
|
|
"concurrency_statuses": [
|
|
200,
|
|
201
|
|
],
|
|
"preview_no_persistent_changes": true,
|
|
"atomic_failure_recovery": true,
|
|
"new_supplier_reaches_native_quotation": true,
|
|
"selected_supplier_history_count": 12,
|
|
"visual_review": false,
|
|
"deployment_capacity_validated": false
|
|
}
|
|
},
|
|
"boundaries": {
|
|
"file": "private/receipt-composition-bead400917da/supplier-boundary.json",
|
|
"sha256": "0f120500699a3d284e059f74f15dd971583bbbac50be262ef25399a7981c13bd",
|
|
"checks": 6,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"native finance role cannot review a record last changed by the same identity",
|
|
"expired diligence cannot be activated",
|
|
"bound supplier still reaches the original preview after access guard extension",
|
|
"changed explicit binding invalidates prepared quotation",
|
|
"same-tenant supplier outside the company-unit binding cannot bypass selector through API",
|
|
"boundary probes restore all injected fixture facts and commit no proposal"
|
|
],
|
|
"new_boundary_only": true,
|
|
"valid_34_checks_not_repeated": true
|
|
}
|
|
},
|
|
"guards": {
|
|
"file": "private/receipt-composition-bead400917da/supplier-guards.json",
|
|
"sha256": "73949c1ea064793872ab1aa4da31b3c409e681340011d396bef34df9e70433b4",
|
|
"checks": 3,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"disabled suppliers runtime refuses before SQL",
|
|
"disabled suppliers preview refuses before validation or SQL",
|
|
"production cannot activate synthetic suppliers"
|
|
],
|
|
"database_queries": 0,
|
|
"business_writes": 0
|
|
}
|
|
},
|
|
"demonstration": {
|
|
"file": "private/receipt-composition-2b4c91ddbd16/supplier-demo-smoke.json",
|
|
"sha256": "953bc5f419cb2e3b9ab7ce78b07d20c6c5bff44b7e29d5c79eb1d75d00fb724b",
|
|
"checks": 12,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": [
|
|
"demo has no proposals evaluations awards orders receipts or movements",
|
|
"registry capability matches actor",
|
|
"review capability matches actor",
|
|
"supplier workspace is live",
|
|
"sourcing links to supplier review",
|
|
"creation sentinel has no readable supplier record or history",
|
|
"new supplier preview omits temporary sequence identifier and commits nothing",
|
|
"registry capability matches issuer",
|
|
"review capability matches issuer",
|
|
"warehouse is denied supplier registry",
|
|
"live supplier script matches delivery",
|
|
"read and rollback-only preview preserve demo business facts"
|
|
],
|
|
"before": "1f751ee5de55546639d6fb56dffd9296828b2a13ba624f58a9b5b3d342159cc5",
|
|
"after": "1f751ee5de55546639d6fb56dffd9296828b2a13ba624f58a9b5b3d342159cc5",
|
|
"visual_review": false,
|
|
"persistent_changes": false,
|
|
"preview_sequence_may_advance": true
|
|
}
|
|
},
|
|
"assets": {
|
|
"file": "private/receipt-composition-2b4c91ddbd16/supplier-demo-assets.json",
|
|
"sha256": "8f84b03fb1cce408a0d79af15a764e569168f0ae916b53516d4b9e9eb04c2b23",
|
|
"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-gjzvo3Kh.js",
|
|
"assets/app-BLSNCrO7.css"
|
|
],
|
|
"visual_review": false
|
|
}
|
|
},
|
|
"navigation": {
|
|
"file": "docs/proofs/supplier-home-20261103.json",
|
|
"sha256": "079cb7655964988bf5c0cd1a852772a9c770f0efde8865f2f87d216f533a2f82",
|
|
"checks": 6,
|
|
"result": {
|
|
"passed": true,
|
|
"checks": 6,
|
|
"names": [
|
|
"scoped right and capability expose suppliers link",
|
|
"absent right hides suppliers link",
|
|
"foreign unit right hides suppliers link",
|
|
"disabled composition hides suppliers link",
|
|
"unit selection is required",
|
|
"order and receipt links remain available"
|
|
],
|
|
"source": "resources/js/PurchasingHome.jsx",
|
|
"sha256": "260a86ad58c9357784e1af3f850dc5ab788f79d0c507f23eaf797f5b91107e0c",
|
|
"visual_review": false
|
|
}
|
|
}
|
|
},
|
|
"sources": [
|
|
{
|
|
"file": "app/Modules/Purchasing/SupplierController.php",
|
|
"sha256": "86fdec283bb409f1b96f1d98bd6759350004a4445ba48484427920111863b0fd"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/SupplierAccess.php",
|
|
"sha256": "b823189d10e8ecf9a55e9021bffce023a7e6d4e2b0db2710c32910591968d814"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/SourcingController.php",
|
|
"sha256": "1c31ffb5a3294a427aab90587bfb3dcd7d65c98cc5f1666d6478f23056ea4b39"
|
|
},
|
|
{
|
|
"file": "app/Modules/Purchasing/ReceiptRuntime.php",
|
|
"sha256": "1c75c3fc47626d30e2fabf679a0ff725621ab794c92c8e89038ace4a3d14aae8"
|
|
},
|
|
{
|
|
"file": "config/receipt_qa.php",
|
|
"sha256": "69c0e169d9d869216d117195bec63455cf465aaa10e2049c56de88f7f4ae197c"
|
|
},
|
|
{
|
|
"file": "routes/web.php",
|
|
"sha256": "9b1b0e35c8a819dd37d025b5e6e318296747017feec71b4a981a11fdc5ff1c4a"
|
|
},
|
|
{
|
|
"file": "app/Shared/Context/ModuleNavigation.php",
|
|
"sha256": "dbf5215a7c30797f5559ead7527fab4f86d8d68185b48eb758a038b6ab7c34f5"
|
|
},
|
|
{
|
|
"file": "app/Modules/Identity/Services/IdentityWorkflow.php",
|
|
"sha256": "46473afce1d6634ff6fac3ccadab9c60bb77fb37b1ea2ab2a377ad5ae20b3177"
|
|
},
|
|
{
|
|
"file": "resources/js/PurchasingHome.jsx",
|
|
"sha256": "260a86ad58c9357784e1af3f850dc5ab788f79d0c507f23eaf797f5b91107e0c"
|
|
},
|
|
{
|
|
"file": "resources/views/supplier-workspace.blade.php",
|
|
"sha256": "50df84132c27351cc9e43e38d55599fe64912aa0f50bb78a560b14f5f1445fc6"
|
|
},
|
|
{
|
|
"file": "resources/views/sourcing-workspace.blade.php",
|
|
"sha256": "922883253058514f7a8712c463e9f4f03d4fb7c786827a1dce85176cbf9bba46"
|
|
},
|
|
{
|
|
"file": "public/supplier-workspace.mjs",
|
|
"sha256": "c721f275317d581ccd72b1f68e0ae82fce977d4a3d0ab34b2c67533567370932"
|
|
},
|
|
{
|
|
"file": "scripts/supplier-host-setup.php",
|
|
"sha256": "50dc12483d35e71e9ea6ea2fbff07faf97fbfce63dcd75fd1c2a4c2a3ab9ca07"
|
|
},
|
|
{
|
|
"file": "scripts/supplier-composition-proof.php",
|
|
"sha256": "4bb8a14d73a24252fedd75a2d8833519aebc5cf4fbfb7faeab1f24a910da46ea"
|
|
},
|
|
{
|
|
"file": "scripts/supplier-boundary-proof.php",
|
|
"sha256": "66fc45c9142fcf8c977dc3403196ff17909ac70c358a7760ec839124eedf9aae"
|
|
},
|
|
{
|
|
"file": "scripts/supplier-guard-proof.php",
|
|
"sha256": "71658721f379aa54446f917fef0014b052f813a28d6e30bb23dad5278218b79e"
|
|
},
|
|
{
|
|
"file": "scripts/supplier-demo-smoke.php",
|
|
"sha256": "41080a184b12a27618ff951930c7820e7a1d12fb7cc30ea380f59e054ae28c71"
|
|
},
|
|
{
|
|
"file": "scripts/supplier-demo-assets.mjs",
|
|
"sha256": "8b07e804fd0ecdaade73bb6286b5e7951df5ad4b7fc55e305efdf8d9029565b3"
|
|
},
|
|
{
|
|
"file": "scripts/order-native-setup.php",
|
|
"sha256": "7e055e895d82095b863bd1456e821022f25f27137d37e8332d1fb08a063ffc0b"
|
|
},
|
|
{
|
|
"file": "scripts/receipt-composition-run.mjs",
|
|
"sha256": "85bd679a9fe0472cf833d282b98ae2f9d8bdbfe9547fac9d63a69d8d1f4e8da3"
|
|
},
|
|
{
|
|
"file": "scripts/receipt-composition-http.php",
|
|
"sha256": "35901f596e7d928d38cf3be059d092d349898f31e06026fffc2320ca1b719e79"
|
|
},
|
|
{
|
|
"file": "scripts/receipt-composition-extra.mjs",
|
|
"sha256": "a711a44993aaa15e9a1caf46f2b2282a053f610abbc505ba1db210b8153fdccc"
|
|
}
|
|
],
|
|
"workflow_package": {
|
|
"native_sha256": "7709a3d447d54c17d2fb4be4f9a0f70455c4a38c34e4bb8c643f6b5169071556",
|
|
"economic_sha256": "8b2d3aa61054e0edc54fcd818467eb2bacb5e1178f903b12ab44119e0f2e8d2e",
|
|
"original_sources": {
|
|
"app/Http/Controllers/SupplierController.php": "e47f3951fc7eba5e27c3e94ddbb3e513af049fa1aeec29a230ae82517a3f9204",
|
|
"app/Http/Requests/SaveSupplierRequest.php": "537511f7d34f1a1a1fd370d295e8e55f0e95e3b5aa32442b193ec1a581a9f557",
|
|
"app/Services/SupplierParticipation.php": "43808a5fbae0ff67c8b967a320e0a65b7e524f6a742716b3c505b67355164ceb",
|
|
"app/Policies/SupplierPolicy.php": "7182d55be88fa4bdd748d8c407f008d63bc25aec1d9a0c84f45d925c04f73fdd"
|
|
}
|
|
},
|
|
"demo": {
|
|
"url": "http://127.0.0.1:8067/qa/enter/actor?open=1",
|
|
"reviewer_url": "http://127.0.0.1:8067/qa/enter/issuer?open=1",
|
|
"warehouse_url": "http://127.0.0.1:8067/qa/enter/validator?open=1",
|
|
"initial_prepared_seed_suppliers": 3,
|
|
"initial_sgf_supplier_decisions": 0,
|
|
"initial_quotes": 0,
|
|
"initial_orders": 0,
|
|
"initial_receipts": 0
|
|
},
|
|
"qa_rights": [
|
|
"purchasing_suppliers.view",
|
|
"purchasing_suppliers.prepare",
|
|
"purchasing_suppliers.review"
|
|
],
|
|
"reused_valid_proofs": [
|
|
{
|
|
"file": "docs/proofs/sourcing-composition-20261103.json",
|
|
"sha256": "405c0288aface14cc9f1f417e46cf899b3656e1cbb2617120c048cde17b93191",
|
|
"checks": 74,
|
|
"scope": "original source-to-receipt scenario; not rerun as supplier tests"
|
|
}
|
|
],
|
|
"test_scope": "34 workflow checks retained; six new access/review boundaries plus12 live demonstration checks cover later access and presentation adjustments. No unrelated business suites repeated.",
|
|
"preview": {
|
|
"mode": "original_controller_in_rollback_only_savepoint",
|
|
"persistent_records_unchanged": true,
|
|
"sequence_may_advance": true,
|
|
"temporary_supplier_id_not_exposed": true
|
|
},
|
|
"preservation": {
|
|
"installed_purchasing_sha256": "81899e531e9eec449717e694d8bdc106a9e220a828f5491ce918c1d2dc612787",
|
|
"old_sourcing_demo_native_bundle_intact": true,
|
|
"protected_six_records_changed": false,
|
|
"blocked_cache_cleared": false,
|
|
"real_rights_changed": false,
|
|
"target_database_connected": false,
|
|
"existing_demo_business_data_written": false,
|
|
"activation_at_destination": false,
|
|
"publication": false,
|
|
"checkpoint": false
|
|
},
|
|
"limitations": [
|
|
"QA owner roles and copied composition are not a generally installed or deployment-validated module.",
|
|
"Native supplier field validation, preparation and distinct review are reused; document references are declared text, not attachment upload or verified external evidence.",
|
|
"Index search/status/pagination15 and per-supplier history15 are server-side; sourcing picker retains its100-supplier cap.",
|
|
"New suppliers are scoped by audited company/unit origin; prepared seed suppliers stay explicitly bound. Operational registry sharing policy is not inferred.",
|
|
"SGF internal requisition handoff with one budget authority, formal tender regimes and later procurement corrections remain separate gaps.",
|
|
"No visual review, sustained-load claim or real fiscal/operational activation."
|
|
],
|
|
"visual_review_pending": true,
|
|
"deployment_capacity_validated": false
|
|
}
|