{
  "roles": [
    {
      "id": "public-bi-connector",
      "title": "Public BI OAuth credential for inspection cases",
      "oauth": {
        "grantType": "authorization_code",
        "loginRole": "admin",
        "clientId": "5M-Jie12V1h65_qvE499b09PGMHH1yCXF_YvGnJ3N88",
        "redirectUri": "http://127.0.0.1:1717/callback",
        "scope": "external.records.read"
      },
      "modules": []
    },
    {
      "id": "admin",
      "title": "Admin baseline inspection",
      "credentials": {
        "usernameEnv": "STAGING_INSPECTION_ADMIN_USERNAME",
        "passwordEnv": "STAGING_INSPECTION_ADMIN_PASSWORD"
      },
      "modules": [
        {
          "id": "global",
          "title": "Global baseline",
          "functions": [
            {
              "id": "frontend-health",
              "title": "Frontend and health endpoints respond",
              "kind": "http_probe",
              "requests": [
                {
                  "path": "/",
                  "expectStatus": 200
                },
                {
                  "path": "/health",
                  "expectStatus": 200,
                  "retry": {
                    "attempts": 5,
                    "intervalMs": 2000
                  }
                }
              ]
            },
            {
              "id": "admin-login-dashboard",
              "title": "Admin can log in and reach dashboard",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "/"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "My Dashboards",
                    "Create New Dashboard",
                    "Search: All",
                    "Accounts",
                    "Setup"
                  ]
                }
              ]
            },
            {
              "id": "global-search-results",
              "title": "Global search results page opens for account keyword",
              "kind": "browser_flow",
              "requiredFixtures": [
                "search.accountQuery"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/search?q={{search.accountQuery}}"
                },
                {
                  "action": "expectText",
                  "value": "Search Results"
                },
                {
                  "action": "expectText",
                  "value": "{{search.accountQuery}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Search is temporarily unavailable",
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "global-search-user-id-results",
              "title": "Global search results page opens for a known user or org id",
              "kind": "browser_flow",
              "requiredFixtures": [
                "search.userIdQuery"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/search?q={{search.userIdQuery}}"
                },
                {
                  "action": "expectText",
                  "value": "Search Results"
                },
                {
                  "action": "expectText",
                  "value": "{{search.userIdQuery}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Search is temporarily unavailable",
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "crm-core",
          "title": "Core CRM objects",
          "functions": [
            {
              "id": "account-create-api",
              "title": "Account create API succeeds and record is readable",
              "kind": "api_create",
              "requiredFixtures": [
                "payloads.accountCreate"
              ],
              "request": {
                "method": "POST",
                "path": "/services/data/v63.0/sobjects/Account",
                "body": {
                  "__template": "{{payloads.accountCreate}}"
                },
                "expectStatusRange": [
                  200,
                  299
                ],
                "readback": {
                  "path": "/services/data/v63.0/sobjects/Account/{{__createdId}}",
                  "expectStatus": 200
                }
              }
            },
            {
              "id": "account-create-ai-api",
              "title": "AI Account create API succeeds and record is readable",
              "kind": "api_create",
              "requiredFixtures": [
                "payloads.accountCreateAI"
              ],
              "request": {
                "method": "POST",
                "path": "/services/data/v63.0/sobjects/Account",
                "body": {
                  "__template": "{{payloads.accountCreateAI}}"
                },
                "expectStatusRange": [
                  200,
                  299
                ],
                "readback": {
                  "path": "/services/data/v63.0/sobjects/Account/{{__createdId}}",
                  "expectStatus": 200
                }
              }
            },
            {
              "id": "lead-create-api",
              "title": "Lead create API succeeds and record is readable",
              "kind": "api_create",
              "requiredFixtures": [
                "payloads.leadCreate"
              ],
              "request": {
                "method": "POST",
                "path": "/services/data/v63.0/sobjects/Lead",
                "body": {
                  "__template": "{{payloads.leadCreate}}"
                },
                "expectStatusRange": [
                  200,
                  299
                ],
                "readback": {
                  "path": "/services/data/v63.0/sobjects/Lead/{{__createdId}}",
                  "expectStatus": 200
                }
              }
            },
            {
              "id": "contact-create-api",
              "title": "Contact create API succeeds and record is readable",
              "kind": "api_create",
              "requiredFixtures": [
                "payloads.contactCreate"
              ],
              "request": {
                "method": "POST",
                "path": "/services/data/v63.0/sobjects/Contact",
                "body": {
                  "__template": "{{payloads.contactCreate}}"
                },
                "expectStatusRange": [
                  200,
                  299
                ],
                "readback": {
                  "path": "/services/data/v63.0/sobjects/Contact/{{__createdId}}",
                  "expectStatus": 200
                }
              }
            },
            {
              "id": "opportunity-create-api",
              "title": "Opportunity create API succeeds and record is readable",
              "kind": "api_create",
              "requiredFixtures": [
                "payloads.opportunityCreate"
              ],
              "request": {
                "method": "POST",
                "path": "/services/data/v63.0/sobjects/Opportunity",
                "body": {
                  "__template": "{{payloads.opportunityCreate}}"
                },
                "expectStatusRange": [
                  200,
                  299
                ],
                "readback": {
                  "path": "/services/data/v63.0/sobjects/Opportunity/{{__createdId}}",
                  "expectStatus": 200
                }
              }
            },
            {
              "id": "opportunity-line-item-create-api",
              "title": "OpportunityLineItem create API succeeds and record is readable",
              "kind": "api_create",
              "requiredFixtures": [
                "payloads.opportunityLineItemCreate"
              ],
              "request": {
                "method": "POST",
                "path": "/services/data/v63.0/sobjects/OpportunityLineItem",
                "body": {
                  "__template": "{{payloads.opportunityLineItemCreate}}"
                },
                "expectStatusRange": [
                  200,
                  299
                ],
                "readback": {
                  "path": "/services/data/v63.0/sobjects/OpportunityLineItem/{{__createdId}}",
                  "expectStatus": 200
                }
              }
            },
            {
              "id": "task-create-api",
              "title": "Task create API succeeds and record is readable",
              "kind": "api_create",
              "requiredFixtures": [
                "payloads.taskCreate"
              ],
              "request": {
                "method": "POST",
                "path": "/services/data/v63.0/sobjects/Task",
                "body": {
                  "__template": "{{payloads.taskCreate}}"
                },
                "expectStatusRange": [
                  200,
                  299
                ],
                "readback": {
                  "path": "/services/data/v63.0/sobjects/Task/{{__createdId}}",
                  "expectStatus": 200
                }
              }
            },
            {
              "id": "account-list",
              "title": "Account list opens",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Account"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "New Account",
                    "Create Account",
                    "No records found"
                  ]
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "lead-list",
              "title": "Lead list opens",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Lead"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "New Lead",
                    "Create Lead",
                    "No records found"
                  ]
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "opportunity-list",
              "title": "Opportunity list opens",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Opportunity"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "New Opportunity",
                    "Create Opportunity",
                    "No records found"
                  ]
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "contact-list",
              "title": "Contact list opens",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "{{routes.contactListPath || '/object/Contact'}}"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "New Contact",
                    "Create Contact",
                    "No records found"
                  ]
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "account-detail",
              "title": "Fixture account detail opens",
              "kind": "browser_flow",
              "requiredFixtures": [
                "records.accountId"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Account/{{records.accountId}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "An internal server error occurred"
                  ]
                }
              ]
            },
            {
              "id": "contact-detail",
              "title": "Fixture contact detail opens",
              "kind": "browser_flow",
              "requiredFixtures": [
                "records.contactId"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Contact/{{records.contactId}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "An internal server error occurred"
                  ]
                }
              ]
            }
          ],
          "functionFiles": [
            "cases/uat-sales-workflows/account/account-detail-owner-renders-name-surface.json",
            "cases/uat-sales-workflows/account/account-record-type-display-api.json",
            "cases/platform/record-mutation-error-mapping-api.json",
            "cases/platform/recycle-bin-record-lifecycle-api.json",
            "cases/platform/bulk-ingest-end-to-end-api.json"
          ]
        },
        {
          "id": "orders-quotes",
          "title": "Orders and quotes",
          "functionFiles": [
            "cases/r22-product/legacy-guard/legacy-line-tables-stay-empty-api.json",
            "cases/r22-product/legacy-guard/legacy-order-product-retired-api.json",
            "cases/r22-product/contract/contract-upload-effective-transition-api.json",
            "cases/r22-product/contract/contract-status-transition-api.json",
            "cases/r22-product/contract/contract-migrated-files-present-api.json",
            "cases/r22-product/contract/contract-migrated-file-download-api.json",
            "cases/r22-product/order/order-create-clones-quote-line-items-api.json",
            "cases/r22-product/order/order-create-copies-quote-line-money-api.json",
            "cases/r22-product/order/order-create-field-inheritance-api.json",
            "cases/r22-product/order/order-upload-activated-transition-api.json",
            "cases/r22-product/order/order-migrated-files-present-api.json",
            "cases/r22-product/order/order-migrated-file-download-api.json",
            "cases/flow-regression/order/order-revrec-entity-default-api.json",
            "cases/flow-regression/order/activated-order-revrec-never-null-api.json"
          ],
          "functions": [
            {
              "id": "order-create-api",
              "title": "Order create API succeeds and record is readable",
              "kind": "api_create",
              "requiredFixtures": [
                "payloads.orderCreate"
              ],
              "request": {
                "method": "POST",
                "path": "/services/data/v63.0/sobjects/Order",
                "body": {
                  "__template": "{{payloads.orderCreate}}"
                },
                "expectStatusRange": [
                  200,
                  299
                ],
                "readback": {
                  "path": "/services/data/v63.0/sobjects/Order/{{__createdId}}",
                  "expectStatus": 200
                }
              }
            },
            {
              "id": "order-list",
              "title": "Order list route opens",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "{{routes.orderListPath || '/object/Order'}}"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "New Order",
                    "Create Order",
                    "No records found"
                  ]
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "quote-list",
              "title": "Quote list route opens",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "{{routes.quoteListPath || '/object/Quote'}}"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "New Quote",
                    "Create Quote",
                    "No records found"
                  ]
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "order-detail",
              "title": "Fixture order detail opens",
              "kind": "browser_flow",
              "requiredFixtures": [
                "records.orderId"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Order/{{records.orderId}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "An internal server error occurred"
                  ]
                }
              ]
            },
            {
              "id": "quote-detail",
              "title": "Fixture quote detail opens",
              "kind": "browser_flow",
              "requiredFixtures": [
                "records.quoteId"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Quote/{{records.quoteId}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "Permission denied: Cannot Edit Quote"
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "rollup-maintenance",
          "title": "Rollup maintenance",
          "functionFiles": [
            "cases/rollup-maintenance/quote-recalculate-all-api.json"
          ]
        },
        {
          "id": "campaign-product-org",
          "title": "Campaign, product, org",
          "functions": [
            {
              "id": "campaign-list",
              "title": "Campaign list route opens",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "{{routes.campaignListPath || '/object/Campaign'}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "product-list",
              "title": "Product list route opens",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "{{routes.productListPath || '/object/Product2'}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "org-list",
              "title": "Org list route opens",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "{{routes.orgListPath || '/object/Org__c'}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "org-search-results",
              "title": "Org search results open for a known org keyword",
              "kind": "browser_flow",
              "requiredFixtures": [
                "search.orgQuery"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/search?q={{search.orgQuery}}"
                },
                {
                  "action": "expectText",
                  "value": "Search Results"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Search is temporarily unavailable",
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            },
            {
              "id": "org-detail",
              "title": "Fixture org detail opens",
              "kind": "browser_flow",
              "requiredFixtures": [
                "records.orgId"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Org__c/{{records.orgId}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "An internal server error occurred"
                  ]
                }
              ]
            }
          ],
          "functionFiles": [
            "cases/ph2-ph3/campaign/rollup-summary-numeric-scale-api.json",
            "cases/ph2-ph3/campaign/campaign-create-edit-form-omits-system-information-ui.json"
          ]
        },
        {
          "id": "lead-management-regression",
          "title": "Lead management regression",
          "functionFiles": [
            "cases/flow-regression/lead/phase3-flow-active-preflight-api.json",
            "cases/flow-regression/lead/lead-before-save-field-matrix-api.json",
            "cases/flow-regression/lead/lead-countrycode-derives-with-region-prepopulated-api.json",
            "cases/flow-regression/lead/lead-assignment-fixture-readiness-api.json",
            "cases/flow-regression/lead/lead-assignment-account-owner-branch-api.json",
            "cases/flow-regression/lead/lead-assignment-onboarded-account-direct-sales-api.json",
            "cases/ph2-ph3/lead-management/lead-management-api-regression.json",
            "cases/ph2-ph3/lead-management/lead-lookup-search-api.json",
            "cases/ph2-ph3/lead-management/lead-layout-describe-api.json",
            "cases/flow-regression/lead/lead-assignment-japan-mkt-pool-api.json",
            "cases/flow-regression/lead/lead-assignment-apac-india-no-account-api.json",
            "cases/flow-regression/lead/lead-assignment-apac-other-no-account-api.json",
            "cases/flow-regression/lead/lead-assignment-emea-sdr-no-account-api.json",
            "cases/flow-regression/lead/lead-assignment-na-sdr-no-account-api.json",
            "cases/flow-regression/lead/lead-assignment-latam-no-account-api.json",
            "cases/flow-regression/lead/lead-assignment-latam-mexico-no-account-api.json",
            "cases/flow-regression/lead/lead-assignment-latam-brazil-no-account-api.json",
            "cases/flow-regression/lead/lead-assignment-orgid-plg-pool-api.json",
            "cases/flow-regression/lead/lead-assignment-apac-india-has-account-api.json",
            "cases/flow-regression/lead/lead-assignment-apac-other-has-account-api.json",
            "cases/flow-regression/lead/lead-assignment-emea-has-account-ae-api.json",
            "cases/flow-regression/lead/lead-assignment-na-has-account-ae-api.json",
            "cases/flow-regression/lead/lead-assignment-latam-has-account-api.json",
            "cases/flow-regression/lead/lead-assignment-latam-mexico-has-account-api.json",
            "cases/flow-regression/lead/lead-assignment-latam-brazil-has-account-api.json",
            "cases/flow-regression/lead/lead-assignment-gate-googleformid-skip-api.json",
            "cases/flow-regression/lead/lead-assignment-gate-apn-crmid-skip-api.json",
            "cases/ph2-ph3/lead-management/lead-vertical-filtered-by-industry-dependency-api.json",
            "cases/ph2-ph3/lead-management/lead-create-form-omits-system-information-ui.json"
          ]
        },
        {
          "id": "lead-lookup-ui-regression",
          "title": "Lead lookup UI regression",
          "functionFiles": [
            "cases/ph2-ph3/lead-management/lead-lookup-campaignmember-ui-setup-api.json",
            "cases/ph2-ph3/lead-management/lead-lookup-campaignmember-ui.json"
          ]
        },
        {
          "id": "campaign-member-regression",
          "title": "Campaign member regression",
          "functionFiles": [
            "cases/ph2-ph3/campaign-member/campaign-member-lifecycle-api.json",
            "cases/ph2-ph3/campaign-member/campaign-member-status-lifecycle-api.json",
            "cases/ph2-ph3/campaign-member/campaign-update-api.json",
            "cases/ph2-ph3/campaign-member/contact-campaignmember-first-last-api.json",
            "cases/ph2-ph3/campaign-member/campaign-rollup-fields-api.json",
            "cases/ph2-ph3/campaign-member/campaignmember-contact-lookup-api.json",
            "cases/ph2-ph3/campaign-member/campaign-delete-cascade-api.json",
            "cases/ph2-ph3/campaign-member/campaignmember-status-picklist-type-api.json",
            "cases/ph2-ph3/campaign-member/campaign-member-status-sortorder-sibling-max-default-api.json",
            "cases/ph2-ph3/campaign-member/campaignmember-status-campaign-scoped-options-ui.json",
            "cases/ph2-ph3/campaign-member/campaignmember-relationship-keys-not-updateable-api.json",
            "cases/ph2-ph3/campaign-member/campaignmember-edit-form-keeps-lookup-fields-ui.json"
          ]
        },
        {
          "id": "opportunity-flow-regression",
          "title": "Opportunity flow regression",
          "functionFiles": [
            "cases/flow-regression/opportunity/task-opportunity-key-deal-sync-api.json",
            "cases/flow-regression/opportunity/mysql-family-capture-matrix-api.json",
            "cases/flow-regression/opportunity/opportunity-last-stage-change-date-api.json"
          ]
        },
        {
          "id": "collections-credits",
          "title": "Collections and credits",
          "functions": [
            {
              "id": "credits-field-contract-api",
              "title": "Credits field contract keeps Account_Name__c non-createable",
              "kind": "api_script",
              "accessMode": "read",
              "steps": [
                {
                  "id": "describe-credits",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Credits__c/describe",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.fields",
                      "arrayContainsObject": {
                        "name": "Account_Name__c",
                        "createable": false
                      }
                    }
                  ]
                }
              ]
            },
            {
              "id": "credits-create-api",
              "title": "Credits create API succeeds and record is readable",
              "kind": "api_create",
              "requiredFixtures": [
                "payloads.creditsCreate"
              ],
              "request": {
                "method": "POST",
                "path": "/services/data/v63.0/sobjects/Credits__c",
                "body": {
                  "__template": "{{payloads.creditsCreate}}"
                },
                "expectStatusRange": [
                  200,
                  299
                ],
                "readback": {
                  "path": "/services/data/v63.0/sobjects/Credits__c/{{__createdId}}",
                  "expectStatus": 200
                }
              }
            },
            {
              "id": "credits-topup-create-api",
              "title": "Credits top-up create succeeds and created record is readable",
              "kind": "api_script",
              "requiredFixtures": [
                "payloads.creditsTopupCreate"
              ],
              "steps": [
                {
                  "id": "create-topup",
                  "method": "POST",
                  "path": "/services/data/v63.0/sobjects/Credits_Topup__c",
                  "body": {
                    "__template": "{{payloads.creditsTopupCreate}}"
                  },
                  "expectStatusRange": [
                    200,
                    299
                  ],
                  "assertions": [
                    {
                      "path": "response.body.id",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "readback-topup",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Credits_Topup__c/{{steps.create-topup.response.body.id}}",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.Id",
                      "equals": "{{steps.create-topup.response.body.id}}"
                    },
                    {
                      "path": "response.body.Credits__c",
                      "equals": "{{payloads.creditsTopupCreate.Credits__c}}"
                    },
                    {
                      "path": "response.body.Topup_Sequence__c",
                      "exists": true
                    },
                    {
                      "path": "response.body.Name",
                      "exists": true
                    },
                    {
                      "path": "response.body.Cumulative_Disbursed__c",
                      "exists": true,
                      "matches": "^-?[0-9]+(\\.[0-9]+)?$"
                    }
                  ]
                }
              ],
              "linkedIssues": [
                2471,
                5509
              ]
            },
            {
              "id": "credits-topup-approval-api",
              "title": "Credits top-up submit creates a pending presales approval workitem",
              "kind": "api_script",
              "requiredFixtures": [
                "records.creditsId"
              ],
              "steps": [
                {
                  "id": "assert-retired-topup-name-flow-inactive",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20ActiveVersionId%20FROM%20FlowDefinition%20WHERE%20DeveloperName%20%3D%20'Credits_Topup_Stamp_Name'%20AND%20ActiveVersionId%20%21%3D%20null",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.totalSize",
                      "equals": 0
                    }
                  ]
                },
                {
                  "id": "create-topup-for-approval",
                  "authRole": "admin",
                  "method": "POST",
                  "path": "/services/data/v63.0/sobjects/Credits_Topup__c",
                  "body": {
                    "Credits__c": "{{records.creditsId}}",
                    "Topup_Amount__c": 100.25,
                    "Effective_Date__c": "2026-06-07",
                    "Expiration_Date__c": "2026-12-31",
                    "Reason__c": "Staging inspection approval path validation"
                  },
                  "expectStatusRange": [
                    200,
                    299
                  ],
                  "assertions": [
                    {
                      "path": "response.body.id",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "query-topup-before-submit",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Credits_Topup__c/{{steps.create-topup-for-approval.response.body.id}}",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.Topup_Sequence__c",
                      "exists": true
                    },
                    {
                      "path": "response.body.Name",
                      "equals": "Top-up #{{steps.query-topup-before-submit.response.body.Topup_Sequence__c}}"
                    }
                  ]
                },
                {
                  "id": "submit-topup-approval",
                  "authRole": "admin",
                  "method": "POST",
                  "path": "/services/data/v63.0/process/approvals",
                  "body": {
                    "requests": [
                      {
                        "actionType": "Submit",
                        "contextId": "{{steps.create-topup-for-approval.response.body.id}}",
                        "comments": "Staging inspection top-up submit"
                      }
                    ]
                  },
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body[0].success",
                      "equals": true
                    },
                    {
                      "path": "response.body[0].instanceStatus",
                      "equals": "Pending"
                    },
                    {
                      "path": "response.body[0].instanceId",
                      "exists": true
                    },
                    {
                      "path": "response.body[0].actorIds",
                      "lengthAtLeast": 1
                    }
                  ]
                },
                {
                  "id": "query-topup-after-submit",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Credits_Topup__c/{{steps.create-topup-for-approval.response.body.id}}",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.Approval_Status__c",
                      "equals": "Pending"
                    }
                  ]
                },
                {
                  "id": "query-topup-pending-workitem",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20ActorId%20FROM%20ProcessInstanceWorkitem%20WHERE%20ProcessInstanceId%20%3D%20'{{steps.submit-topup-approval.response.body[0].instanceId}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    }
                  ]
                }
              ]
            },
            {
              "id": "credits-record-detail-renders",
              "title": "Credits detail page renders record content in the browser",
              "kind": "browser_flow",
              "accessMode": "read",
              "requiredFixtures": [
                "records.creditsId"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Credits__c/{{records.creditsId}}"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "Totals (incl. Top-ups)",
                    "Total Disbursed (USD)",
                    "Approved Top-ups (USD)",
                    "Initial Grant",
                    "Initial Credits (USD)",
                    "Snapshot (auto-filled on save)"
                  ]
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "An internal server error occurred"
                  ]
                }
              ],
              "linkedIssues": [
                5508,
                5509
              ]
            }
          ]
        },
        {
          "id": "r17-regression",
          "title": "R17 regression breadth",
          "functions": [
            {
              "id": "lead-default-recordtype-api",
              "title": "Lead describe exposes exactly one default record type mapping",
              "kind": "api_script",
              "accessMode": "read",
              "steps": [
                {
                  "id": "describe-lead",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Lead/describe",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.recordTypeInfos",
                      "countWhere": {
                        "where": {
                          "defaultRecordTypeMapping": true
                        },
                        "equals": 1
                      }
                    }
                  ]
                }
              ]
            },
            {
              "id": "account-layouts-describe-api",
              "title": "Account describe layouts responds with record type mappings",
              "kind": "api_script",
              "accessMode": "read",
              "steps": [
                {
                  "id": "describe-account-layouts",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Account/describe/layouts",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.recordTypeMappings",
                      "lengthAtLeast": 1
                    }
                  ]
                }
              ]
            },
            {
              "id": "opportunity-schema-layout-happy-path",
              "title": "Opportunity metadata exposes record types and stage picklist on a live detail path",
              "kind": "api_script",
              "requiredFixtures": [
                "records.opportunityId"
              ],
              "steps": [
                {
                  "id": "describe-opportunity",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Opportunity/describe",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.recordTypeInfos",
                      "countWhere": {
                        "where": {
                          "defaultRecordTypeMapping": true
                        },
                        "equals": 1
                      }
                    },
                    {
                      "path": "response.body.fields",
                      "arrayContainsObject": {
                        "name": "StageName",
                        "type": "picklist"
                      }
                    }
                  ]
                },
                {
                  "id": "read-opportunity",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Opportunity/{{records.opportunityId}}",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.Id",
                      "equals": "{{records.opportunityId}}"
                    },
                    {
                      "path": "response.body.RecordTypeId",
                      "exists": true
                    },
                    {
                      "path": "response.body.StageName",
                      "exists": true
                    }
                  ]
                }
              ]
            },
            {
              "id": "group-nested-membership-api",
              "title": "Group and nested GroupMember writes succeed",
              "kind": "api_script",
              "requiredFixtures": [
                "search.accountQuery",
                "search.userIdQuery"
              ],
              "steps": [
                {
                  "id": "query-existing-parent-group",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%20FROM%20Group%20WHERE%20Name%20%3D%20'Staging%20Inspection%20Parent%20Group%20{{search.userIdQuery}}%20{{__runId}}'%20LIMIT%201",
                  "expectStatus": 200
                },
                {
                  "id": "delete-existing-parent-group",
                  "whenPathExists": "steps.query-existing-parent-group.response.body.records[0].Id",
                  "method": "DELETE",
                  "path": "/services/data/v63.0/sobjects/Group/{{steps.query-existing-parent-group.response.body.records[0].Id}}",
                  "expectStatus": 204
                },
                {
                  "id": "query-existing-child-group",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%20FROM%20Group%20WHERE%20Name%20%3D%20'Staging%20Inspection%20Child%20Group%20{{search.accountQuery}}%20{{__runId}}'%20LIMIT%201",
                  "expectStatus": 200
                },
                {
                  "id": "query-existing-nested-member",
                  "whenPathExists": "steps.query-existing-parent-group.response.body.records[0].Id",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%20FROM%20GroupMember%20WHERE%20GroupId%20%3D%20'{{steps.query-existing-parent-group.response.body.records[0].Id}}'%20AND%20UserOrGroupId%20%3D%20'{{steps.query-existing-child-group.response.body.records[0].Id}}'%20LIMIT%201",
                  "expectStatus": 200
                },
                {
                  "id": "delete-existing-nested-member",
                  "whenPathExists": "steps.query-existing-nested-member.response.body.records[0].Id",
                  "method": "DELETE",
                  "path": "/services/data/v63.0/sobjects/GroupMember/{{steps.query-existing-nested-member.response.body.records[0].Id}}",
                  "expectStatus": 204
                },
                {
                  "id": "delete-existing-child-group",
                  "whenPathExists": "steps.query-existing-child-group.response.body.records[0].Id",
                  "method": "DELETE",
                  "path": "/services/data/v63.0/sobjects/Group/{{steps.query-existing-child-group.response.body.records[0].Id}}",
                  "expectStatus": 204
                },
                {
                  "id": "create-parent-group",
                  "method": "POST",
                  "path": "/services/data/v63.0/sobjects/Group",
                  "body": {
                    "Name": "Staging Inspection Parent Group {{search.userIdQuery}} {{__runId}}",
                    "Label": "Staging Inspection Parent Group {{search.userIdQuery}} {{__runId}}",
                    "Type": "Regular"
                  },
                  "expectStatusRange": [
                    200,
                    299
                  ],
                  "assertions": [
                    {
                      "path": "response.body.id",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "create-child-group",
                  "method": "POST",
                  "path": "/services/data/v63.0/sobjects/Group",
                  "body": {
                    "Name": "Staging Inspection Child Group {{search.accountQuery}} {{__runId}}",
                    "Label": "Staging Inspection Child Group {{search.accountQuery}} {{__runId}}",
                    "Type": "Regular"
                  },
                  "expectStatusRange": [
                    200,
                    299
                  ],
                  "assertions": [
                    {
                      "path": "response.body.id",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "create-nested-member",
                  "method": "POST",
                  "path": "/services/data/v63.0/sobjects/GroupMember",
                  "body": {
                    "GroupId": "{{steps.create-parent-group.response.body.id}}",
                    "UserOrGroupId": "{{steps.create-child-group.response.body.id}}"
                  },
                  "expectStatusRange": [
                    200,
                    299
                  ],
                  "assertions": [
                    {
                      "path": "response.body.id",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "query-nested-member",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20GroupId%2C%20UserOrGroupId%20FROM%20GroupMember%20WHERE%20GroupId%20%3D%20'{{steps.create-parent-group.response.body.id}}'%20AND%20UserOrGroupId%20%3D%20'{{steps.create-child-group.response.body.id}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "setup-security",
          "title": "Setup and security surfaces",
          "functionFiles": [
            "cases/setup-security/connected-app/public-oauth-authorize-guard-api.json",
            "cases/setup-security/connected-app/public-bi-external-records-read-api.json",
            "cases/setup-security/approval-email/approval-email-template-catalog-api.json",
            "cases/setup-security/approval-email/approval-email-delivery-smtp-api.json",
            "cases/setup-security/approval-process/process-action-public-mutation-guards-api.json",
            "cases/setup-security/approval-process/process-node-public-mutation-guards-api.json"
          ],
          "functions": [
            {
              "id": "permission-sets-setup-surface",
              "title": "Permission Sets setup page opens and exposes the primary action surface",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "/setup/permission-sets"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "Permission Sets",
                    "New Permission Set"
                  ]
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "An internal server error occurred"
                  ]
                }
              ]
            },
            {
              "id": "sharing-rules-setup-surface",
              "title": "Sharing Rules setup page opens and exposes the primary action surface",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "/setup/sharing-rules"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "Sharing Rules",
                    "New Sharing Rule"
                  ]
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "An internal server error occurred"
                  ]
                }
              ]
            },
            {
              "id": "approval-process-edit-hydration-surface",
              "title": "Approval process edit page opens the primary edit surface",
              "kind": "browser_flow",
              "requiredFixtures": [
                "records.approvalProcessQuoteTeamAId"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/setup/approval-processes/{{records.approvalProcessQuoteTeamAId}}/edit"
                },
                {
                  "action": "expectText",
                  "value": "Edit Approval Process"
                },
                {
                  "action": "expectText",
                  "value": "Save Changes"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "An internal server error occurred"
                  ]
                }
              ],
              "linkedIssues": [
                2538
              ]
            },
            {
              "id": "sharing-rule-owner-create-api",
              "title": "Owner-based SharingRule create API accepts role-to-role rules",
              "kind": "api_script",
              "requiredFixtures": [
                "security.salesUsername",
                "security.existingPresalesUsername"
              ],
              "steps": [
                {
                  "id": "query-sales-role-user",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20UserRoleId%20FROM%20User%20WHERE%20Username%20%3D%20'{{security.salesUsername}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    },
                    {
                      "path": "response.body.records[0].UserRoleId",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "query-existing-presales-role-user",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20UserRoleId%20FROM%20User%20WHERE%20Username%20%3D%20'{{security.existingPresalesUsername}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    },
                    {
                      "path": "response.body.records[0].UserRoleId",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "query-existing-owner-rule",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%20FROM%20SharingRule%20WHERE%20Name%20%3D%20'StagingInspectionOwnerShareRule'%20LIMIT%201",
                  "expectStatus": 200
                },
                {
                  "id": "delete-existing-owner-rule",
                  "authRole": "admin",
                  "whenPathExists": "steps.query-existing-owner-rule.response.body.records[0].Id",
                  "method": "DELETE",
                  "path": "/services/data/v63.0/sobjects/SharingRule/{{steps.query-existing-owner-rule.response.body.records[0].Id}}",
                  "expectStatus": 204
                },
                {
                  "id": "create-owner-rule",
                  "authRole": "admin",
                  "method": "POST",
                  "path": "/services/data/v63.0/sobjects/SharingRule",
                  "body": {
                    "Name": "StagingInspectionOwnerShareRule",
                    "ObjectApiName": "Account",
                    "AccessLevel": "Read",
                    "SharedFromRoleId": "{{steps.query-sales-role-user.response.body.records[0].UserRoleId}}",
                    "ShareWithRoleId": "{{steps.query-existing-presales-role-user.response.body.records[0].UserRoleId}}"
                  },
                  "expectStatusRange": [
                    200,
                    299
                  ],
                  "assertions": [
                    {
                      "path": "response.body.id",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "readback-owner-rule",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/SharingRule/{{steps.create-owner-rule.response.body.id}}",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.Name",
                      "equals": "StagingInspectionOwnerShareRule"
                    },
                    {
                      "path": "response.body.ObjectApiName",
                      "equals": "Account"
                    },
                    {
                      "path": "response.body.SharedFromRoleId",
                      "equals": "{{steps.query-sales-role-user.response.body.records[0].UserRoleId}}"
                    },
                    {
                      "path": "response.body.ShareWithRoleId",
                      "equals": "{{steps.query-existing-presales-role-user.response.body.records[0].UserRoleId}}"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "perf-baseline",
          "title": "Performance baseline (latency observation)",
          "functions": [
            {
              "id": "metadata-fanout-latency",
              "title": "Per-page metadata fan-out latency: actions/standard + permissions/effective + describe + object-info",
              "kind": "api_script",
              "accessMode": "read",
              "linkedIssues": [
                2284
              ],
              "steps": [
                {
                  "id": "actions-standard",
                  "method": "GET",
                  "path": "/services/data/v63.0/actions/standard",
                  "expectStatus": 200,
                  "performanceSamples": {
                    "count": 10,
                    "statistic": "p90",
                    "minSuccess": 9,
                    "intervalMs": 500
                  },
                  "assertions": [
                    {
                      "path": "responseMeta.durationMs",
                      "atMost": 4000
                    }
                  ]
                },
                {
                  "id": "permissions-effective",
                  "method": "GET",
                  "path": "/services/data/v63.0/permissions/effective",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "responseMeta.durationMs",
                      "atMost": 3000
                    }
                  ]
                },
                {
                  "id": "account-describe",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Account/describe",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "responseMeta.durationMs",
                      "atMost": 3000
                    }
                  ]
                },
                {
                  "id": "account-object-info",
                  "method": "GET",
                  "path": "/services/data/v63.0/ui-api/object-info/Account",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "responseMeta.durationMs",
                      "atMost": 3000
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "lead-conversion",
          "title": "Lead conversion workflow",
          "functions": [
            {
              "id": "lead-convert-create-contact-scope-api",
              "title": "Sales can convert a Lead and create Contact through the standard-action internal scope",
              "kind": "api_script",
              "requiredFixtures": [
                "security.salesUsername",
                "records.approvedAccountId"
              ],
              "linkedIssues": [
                2653,
                2659
              ],
              "steps": [
                {
                  "id": "query-sales-user-for-lead-owner",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%20FROM%20User%20WHERE%20Username%20%3D%20'{{security.salesUsername}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.totalSize",
                      "equals": 1
                    },
                    {
                      "path": "response.body.records[0].Id",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "create-lead-for-convert-contact",
                  "authRole": "admin",
                  "method": "POST",
                  "path": "/services/data/v63.0/sobjects/Lead",
                  "body": {
                    "LastName": "Staging Inspection Convert Contact {{__runToken}}",
                    "Company": "Staging Inspection Convert Contact",
                    "Email": "convert-contact-{{__runId}}@staging-inspection.pingcap.com",
                    "Status": "OPEN",
                    "HubSpot_Sync_Enabled__c": false,
                    "OwnerId": "{{steps.query-sales-user-for-lead-owner.response.body.records[0].Id}}"
                  },
                  "expectStatusRange": [
                    200,
                    299
                  ],
                  "assertions": [
                    {
                      "path": "response.body.id",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "convert-lead-create-contact",
                  "method": "POST",
                  "path": "/services/data/v63.0/actions/standard/convertLead",
                  "body": {
                    "inputs": [
                      {
                        "leadId": "{{steps.create-lead-for-convert-contact.response.body.id}}",
                        "accountId": "{{records.approvedAccountId}}",
                        "convertedStatus": "Customer",
                        "opportunityName": "Staging Inspection Converted Opportunity {{__runId}}"
                      }
                    ]
                  },
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body[0].isSuccess",
                      "equals": true
                    },
                    {
                      "path": "response.body[0].outputValues.contactId",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "query-converted-lead-contact",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20IsConverted%2C%20ConvertedContactId%20FROM%20Lead%20WHERE%20Id%20%3D%20'{{steps.create-lead-for-convert-contact.response.body.id}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.totalSize",
                      "equals": 1
                    },
                    {
                      "path": "response.body.records[0].IsConverted",
                      "equals": true
                    },
                    {
                      "path": "response.body.records[0].ConvertedContactId",
                      "equals": "{{steps.convert-lead-create-contact.response.body[0].outputValues.contactId}}"
                    }
                  ]
                },
                {
                  "id": "query-opportunity-contact-role",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20ContactId%2C%20OpportunityId%2C%20IsPrimary%20FROM%20OpportunityContactRole%20WHERE%20ContactId%20%3D%20'{{steps.convert-lead-create-contact.response.body[0].outputValues.contactId}}'%20AND%20OpportunityId%20%3D%20'{{steps.convert-lead-create-contact.response.body[0].outputValues.opportunityId}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.totalSize",
                      "equals": 1
                    },
                    {
                      "path": "response.body.records[0].IsPrimary",
                      "equals": true
                    },
                    {
                      "path": "response.body.records[0].ContactId",
                      "equals": "{{steps.convert-lead-create-contact.response.body[0].outputValues.contactId}}"
                    }
                  ]
                }
              ]
            }
          ],
          "functionFiles": [
            "cases/ph2-ph3/lead-campaign/lead-convert-rollback-owner-ocr-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-converted-state-api.json",
            "cases/flow-regression/lead/lead-convert-before-save-field-set-api.json",
            "cases/ph2-ph3/lead-campaign/convertleads-profile-permission-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-campaignmember-relink-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-campaignmember-lifecycle-exclusion-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-no-campaign-source-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-create-new-contact-ocr-api.json",
            "cases/flow-regression/lead/lead-convert-immediate-backfills-linked-org-account-api.json",
            "cases/flow-regression/lead/lead-convert-backfills-linked-org-account-api.json",
            "cases/ph2-ph3/lead-campaign/convert-lead-preview-banner-ui-setup-api.json",
            "cases/ph2-ph3/lead-campaign/convert-lead-preview-banner-ui.json",
            "cases/ph2-ph3/lead-campaign/converted-lead-recordaccess-locked-api.json"
          ]
        },
        {
          "id": "org-dml-regression",
          "title": "Org__c DML regression",
          "functionFiles": [
            "cases/flow-regression/org/org-sfdc-sync-record-edit-api.json"
          ]
        },
        {
          "id": "org-search-regression",
          "title": "Org__c search regression",
          "functionFiles": [
            "cases/flow-regression/org/org-search-by-id-api.json"
          ]
        },
        {
          "id": "latency",
          "title": "Runtime latency (admin/System Administrator identity \u2014 prod 500 repro: Lead search full-table scan)",
          "functionFiles": [
            "cases/ph2-ph3/latency/lead-multifield-like-search-latency-api.json"
          ]
        }
      ]
    },
    {
      "id": "sales",
      "title": "Sales role inspection",
      "credentials": {
        "usernameEnv": "STAGING_INSPECTION_SALES_USERNAME",
        "passwordEnv": "STAGING_INSPECTION_SALES_PASSWORD"
      },
      "modules": [
        {
          "id": "activities",
          "title": "Activity workflows",
          "functionFiles": [
            "cases/uat-sales-workflows/activities/contact-activity-standard-action-api.json",
            "cases/uat-sales-workflows/activities/contact-activity-timeline-surface.json",
            "cases/uat-sales-workflows/activities/opportunity-activity-timeline-surface.json",
            "cases/uat-sales-workflows/activities/opportunity-weekly-update-entry-surface.json",
            "cases/uat-sales-workflows/activities/task-detail-open-surface.json",
            "cases/uat-sales-workflows/activities/task-review-comments-edit-api.json",
            "cases/uat-sales-workflows/activities/task-subject-picklist-contract-api.json",
            "cases/uat-sales-workflows/activities/weekly-update-mandatory-fields-negative-api.json",
            "cases/uat-sales-workflows/activities/record-header-no-activity-actions-surface.json",
            "cases/uat-sales-workflows/activities/email-timeline-opens-emailmessage-api.json",
            "cases/uat-sales-workflows/activities/task-controlled-by-parent-whoid-visibility-api.json",
      "cases/uat-sales-workflows/activities/contact-email-send-guards-api.json",
      "cases/uat-sales-workflows/activities/contact-email-send-and-log-api.json",
      "cases/uat-sales-workflows/activities/lead-email-action-discoverable-non-sdr-api.json"
          ],
          "functions": [
            {
              "id": "weekly-update-standard-action-api",
              "title": "Sales can create a Weekly Update through the standard action API",
              "kind": "api_script",
              "requiredFixtures": [
                "records.opportunityId",
                "payloads.salesWeeklyUpdate"
              ],
              "steps": [
                {
                  "id": "create-weekly-update",
                  "method": "POST",
                  "path": "/services/data/v63.0/actions/standard/taskWeeklyUpdate",
                  "body": {
                    "inputs": [
                      {
                        "recordId": "{{records.opportunityId}}",
                        "WhatId": "{{records.opportunityId}}",
                        "Subject": "{{payloads.salesWeeklyUpdate.Subject}}",
                        "Progress": "{{payloads.salesWeeklyUpdate.Progress}}",
                        "Risk_and_Next_Step": "{{payloads.salesWeeklyUpdate.Risk_and_Next_Step}}"
                      }
                    ]
                  },
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body[0].outputValues.taskId",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "query-created-weekly-update",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20WhatId%2C%20Type%2C%20Status%2C%20Progress__c%2C%20Risk_and_Next_Step__c%20FROM%20Task%20WHERE%20Id%20%3D%20'{{steps.create-weekly-update.response.body[0].outputValues.taskId}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    },
                    {
                      "path": "response.body.records[0].WhatId",
                      "equals": "{{records.opportunityId}}"
                    },
                    {
                      "path": "response.body.records[0].Type",
                      "equals": "Weekly Update"
                    },
                    {
                      "path": "response.body.records[0].Status",
                      "equals": "Completed"
                    },
                    {
                      "path": "response.body.records[0].Progress__c",
                      "equals": "{{payloads.salesWeeklyUpdate.Progress}}"
                    },
                    {
                      "path": "response.body.records[0].Risk_and_Next_Step__c",
                      "equals": "{{payloads.salesWeeklyUpdate.Risk_and_Next_Step}}"
                    }
                  ]
                }
              ]
            },
            {
              "id": "log-call-standard-action-api",
              "title": "Sales can create Log a Call through the standard action API without Weekly Update-only fields",
              "kind": "api_script",
              "requiredFixtures": [
                "records.opportunityId",
                "payloads.salesLogCall"
              ],
              "steps": [
                {
                  "id": "create-log-call",
                  "method": "POST",
                  "path": "/services/data/v63.0/actions/standard/taskCall",
                  "body": {
                    "inputs": [
                      {
                        "recordId": "{{records.opportunityId}}",
                        "WhatId": "{{records.opportunityId}}",
                        "Subject": "{{payloads.salesLogCall.Subject}}",
                        "Description": "{{payloads.salesLogCall.Description}}"
                      }
                    ]
                  },
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body[0].outputValues.taskId",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "query-created-log-call",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20WhatId%2C%20Type%2C%20Status%2C%20CallType%2C%20Progress__c%20FROM%20Task%20WHERE%20Id%20%3D%20'{{steps.create-log-call.response.body[0].outputValues.taskId}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    },
                    {
                      "path": "response.body.records[0].WhatId",
                      "equals": "{{records.opportunityId}}"
                    },
                    {
                      "path": "response.body.records[0].Type",
                      "equals": "Call"
                    },
                    {
                      "path": "response.body.records[0].Status",
                      "equals": "Completed"
                    },
                    {
                      "path": "response.body.records[0].CallType",
                      "equals": "Outbound"
                    }
                  ]
                }
              ]
            },
            {
              "id": "email-standard-action-api",
              "title": "Sales can create Email activity through the standard action API without Weekly Update-only fields",
              "kind": "api_script",
              "requiredFixtures": [
                "records.opportunityId",
                "payloads.salesEmailActivity"
              ],
              "steps": [
                {
                  "id": "create-email-activity",
                  "method": "POST",
                  "path": "/services/data/v63.0/actions/standard/taskEmail",
                  "body": {
                    "inputs": [
                      {
                        "recordId": "{{records.opportunityId}}",
                        "WhatId": "{{records.opportunityId}}",
                        "Subject": "{{payloads.salesEmailActivity.Subject}}",
                        "Description": "{{payloads.salesEmailActivity.Description}}"
                      }
                    ]
                  },
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body[0].outputValues.taskId",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "query-created-email-activity",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20WhatId%2C%20Type%2C%20TaskSubtype%2C%20Status%2C%20Progress__c%20FROM%20Task%20WHERE%20Id%20%3D%20'{{steps.create-email-activity.response.body[0].outputValues.taskId}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    },
                    {
                      "path": "response.body.records[0].WhatId",
                      "equals": "{{records.opportunityId}}"
                    },
                    {
                      "path": "response.body.records[0].Type",
                      "equals": "Email"
                    },
                    {
                      "path": "response.body.records[0].TaskSubtype",
                      "equals": "Email"
                    },
                    {
                      "path": "response.body.records[0].Status",
                      "equals": "Completed"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "search",
          "title": "Search access",
          "functions": [
            {
              "id": "sales-login-dashboard",
              "title": "Sales can log in",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "/"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "My Dashboards",
                    "Create New Dashboard",
                    "Search: All",
                    "Accounts",
                    "Setup"
                  ]
                }
              ]
            },
            {
              "id": "search-account",
              "title": "Sales can open account search results",
              "kind": "browser_flow",
              "requiredFixtures": [
                "search.accountQuery"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/search?q={{search.accountQuery}}"
                },
                {
                  "action": "expectText",
                  "value": "Search Results"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Search is temporarily unavailable",
                    "Error Loading Object",
                    "Request failed with status 504"
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "account-approval",
          "title": "Account approval workflow",
          "functionFiles": [
            "cases/flow-regression/account-approval/account-explicit-submit-approval-api.json",
            "cases/flow-regression/account-approval/account-approval-email-notify-api.json",
            "cases/flow-regression/account-approval/opportunity-account-approval-gate-covers-reparent-api.json"
          ]
        },
        {
          "id": "account-field-defaults",
          "title": "Account field defaults",
          "functionFiles": [
            "cases/flow-regression/account/account-contracting-entity-default-api.json"
          ]
        },
        {
          "id": "opportunity",
          "title": "Opportunity workflow",
          "functionFiles": [
            "cases/r22-product/quote/quote-create-line-item-clone-count-api.json",
            "cases/r22-product/quote/quote-rollup-dates-from-standard-lines-api.json",
            "cases/r22-product/quote/quote-rollup-deepest-discount-api.json",
            "cases/r22-product/quote/quote-rollup-money-from-standard-lines-api.json",
            "cases/r22-product/quote/quote-average-discount-noncloud-api.json",
            "cases/r22-product/quote/quote-average-discount-cloud-native-inputs-api.json",
            "cases/r22-product/quote/quote-average-discount-cloud-value-arms-api.json",
            "cases/r22-product/quote/quote-create-does-not-clone-legacy-product-rows-api.json",
            "cases/r22-product/order/order-create-does-not-clone-legacy-product-rows-api.json",
            "cases/r22-product/order/order-rollup-money-from-standard-lines-api.json",
            "cases/r22-product/quote-approval/quote-approval-submit-recall-api.json",
            "cases/r22-product/quote-approval/quote-approval-state-propagation-api.json",
            "cases/r22-product/quote-approval/quote-approval-entry-criteria-routing-api.json",
            "cases/r22-product/quote-approval/quote-approval-discount-step-routing-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-add-product-entry-surface.json",
            "cases/uat-sales-workflows/opportunity/opportunity-arr-section-fields-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-clone-action-surface.json",
            "cases/uat-sales-workflows/opportunity/opportunity-clone-route-prefill-ui.json",
            "cases/uat-sales-workflows/opportunity/opportunity-core-field-edit-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-delete-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-detail-field-surface.json",
            "cases/uat-sales-workflows/opportunity/opportunity-detail-subtab-surface.json",
            "cases/uat-sales-workflows/opportunity/opportunity-layout-section-tabs-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-edit-products-action-surface.json",
            "cases/uat-sales-workflows/opportunity/opportunity-email-action-surface.json",
            "cases/uat-sales-workflows/opportunity/opportunity-forecast-fields-update-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-log-call-action-surface.json",
            "cases/uat-sales-workflows/opportunity/opportunity-meddpicc-fields-update-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-primary-campaign-source-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-quotes-children-queryable-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-record-type-picker-contract-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-related-list-surface.json",
            "cases/uat-sales-workflows/opportunity/opportunity-stage-advance-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-stage-jump-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-stage-path-render-surface.json"
          ],
          "functions": [
            {
              "id": "opportunity-detail",
              "title": "Sales can open fixture opportunity",
              "kind": "browser_flow",
              "requiredFixtures": [
                "records.opportunityId"
              ],
              "steps": [
                {
                  "action": "goto",
                  "path": "/object/Opportunity/{{records.opportunityId}}"
                },
                {
                  "action": "forbidAnyText",
                  "values": [
                    "Error Loading Object",
                    "Request failed with status 504",
                    "Could not update status"
                  ]
                }
              ]
            },
            {
              "id": "quote-create-tidb-cloud-standard-action-api",
              "title": "Sales can create a Quote from a TiDB Cloud Opportunity through the standard action API",
              "kind": "api_script",
              "requiredFixtures": [
                "payloads.opportunityCreate"
              ],
              "steps": [
                {
                  "id": "query-tidb-cloud-pricebook-entry",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20Product2Id%2C%20Pricebook2Id%20FROM%20PricebookEntry%20WHERE%20Product2Id%20!%3D%20null%20AND%20Pricebook2Id%20!%3D%20null%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    }
                  ]
                },
                {
                  "id": "create-tidb-cloud-source-opportunity",
                  "authRole": "admin",
                  "method": "POST",
                  "path": "/services/data/v63.0/sobjects/Opportunity",
                  "body": {
                    "Launch_Date__c": "2027-03-31",
                    "ARR_Amount_USD__c": 50000,
                    "Name": "Staging Inspection TiDB Cloud Quote Source {{__runId}}",
                    "AccountId": "{{payloads.opportunityCreate.AccountId}}",
                    "StageName": "{{payloads.opportunityCreate.StageName}}",
                    "CloseDate": "{{payloads.opportunityCreate.CloseDate}}",
                    "RecordTypeId": "{{payloads.opportunityCreate.RecordTypeId}}",
                    "Pricebook2Id": "{{steps.query-tidb-cloud-pricebook-entry.response.body.records[0].Pricebook2Id}}",
                    "Product_Family__c": "TiDB Cloud"
                  },
                  "expectStatus": 201,
                  "assertions": [
                    {
                      "path": "response.body.id",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "read-tidb-cloud-source-opportunity",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Opportunity/{{steps.create-tidb-cloud-source-opportunity.response.body.id}}?fields=Id,Product_Family__c",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.Product_Family__c",
                      "equals": "TiDB Cloud"
                    }
                  ]
                },
                {
                  "id": "create-quote-from-tidb-cloud-opportunity",
                  "authRole": "admin",
                  "method": "POST",
                  "path": "/services/data/v63.0/actions/standard/createQuote",
                  "body": {
                    "inputs": [
                      {
                        "opportunityId": "{{steps.create-tidb-cloud-source-opportunity.response.body.id}}"
                      }
                    ]
                  },
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body[0].isSuccess",
                      "equals": true
                    },
                    {
                      "path": "response.body[0].outputValues.quoteId",
                      "exists": true
                    }
                  ]
                },
                {
                  "id": "read-created-tidb-cloud-quote",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/Quote/{{steps.create-quote-from-tidb-cloud-opportunity.response.body[0].outputValues.quoteId}}",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.OpportunityId",
                      "equals": "{{steps.create-tidb-cloud-source-opportunity.response.body.id}}"
                    },
                    {
                      "path": "response.body.Product_Family__c",
                      "equals": "TiDB Cloud"
                    },
                    {
                      "path": "response.body.IsConvertQuote__c",
                      "equals": true
                    }
                  ]
                }
              ],
              "linkedIssues": [
                2552
              ]
            },
            {
              "id": "multipicklist-legacy-artifact-audit-api",
              "title": "Visible Opportunity multipicklist fields do not contain quoted values",
              "kind": "api_script",
              "optional": true,
              "optionalReason": "known staging production-mirror data cleanup: Opportunity multipicklist values still contain legacy double-quote artifacts",
              "steps": [
                {
                  "id": "query-legacy-multipicklist-artifacts",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20Existing_Database_Deployment__c%2C%20Replacing_Database__c%20FROM%20Opportunity%20WHERE%20Existing_Database_Deployment__c%20LIKE%20'%25%22%25'%20OR%20Replacing_Database__c%20LIKE%20'%25%22%25'%20LIMIT%2020",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "equals": []
                    }
                  ]
                }
              ]
            },
            {
              "id": "opportunity-line-item-quantity-contract-api",
              "title": "OpportunityLineItem Quantity should stay required in the edit layout contract",
              "kind": "api_script",
              "accessMode": "read",
              "steps": [
                {
                  "id": "describe-opportunity-line-item-layouts",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects/OpportunityLineItem/describe/layouts",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.layouts[0].editLayoutSections[1].layoutRows[0].layoutItems[0].field",
                      "equals": "Quantity"
                    },
                    {
                      "path": "response.body.layouts[0].editLayoutSections[1].layoutRows[0].layoutItems[0].required",
                      "equals": true
                    }
                  ]
                }
              ]
            },
            {
              "id": "salesops-psa-visibility-api",
              "title": "Staging fixture includes an active Credits_Sales_Ops user assignment",
              "kind": "api_script",
              "accessMode": "read",
              "requiredFixtures": [
                "security.salesOpsUsername",
                "security.salesOpsPermissionSetName"
              ],
              "steps": [
                {
                  "id": "query-salesops-user",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20IsActive%20FROM%20User%20WHERE%20Username%20%3D%20'{{security.salesOpsUsername}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    },
                    {
                      "path": "response.body.records[0].IsActive",
                      "equals": true
                    }
                  ]
                },
                {
                  "id": "query-salesops-permset",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%20FROM%20PermissionSet%20WHERE%20Name%20%3D%20'{{security.salesOpsPermissionSetName}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    }
                  ]
                },
                {
                  "id": "query-existing-psa",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%20FROM%20PermissionSetAssignment%20WHERE%20AssigneeId%20%3D%20'{{steps.query-salesops-user.response.body.records[0].Id}}'%20AND%20PermissionSetId%20%3D%20'{{steps.query-salesops-permset.response.body.records[0].Id}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    }
                  ]
                }
              ]
            },
            {
              "id": "credits-fls-update-denied-api",
              "title": "Sales role cannot update denied Credits fields",
              "kind": "api_script",
              "requiredFixtures": [
                "records.creditsId"
              ],
              "steps": [
                {
                  "id": "patch-denied-field",
                  "method": "PATCH",
                  "path": "/services/data/v63.0/sobjects/Credits__c/{{records.creditsId}}",
                  "body": {
                    "Requires_Finance_Approval__c": true
                  },
                  "expectStatusRange": [
                    400,
                    499
                  ]
                }
              ]
            },
            {
              "id": "credits-record-access-denied-api",
              "title": "Sales role cannot delete Credits records outside its allowed surface",
              "kind": "api_script",
              "requiredFixtures": [
                "records.creditsId"
              ],
              "steps": [
                {
                  "id": "delete-credits-denied",
                  "method": "DELETE",
                  "path": "/services/data/v63.0/sobjects/Credits__c/{{records.creditsId}}",
                  "expectStatusRange": [
                    400,
                    499
                  ]
                }
              ]
            },
            {
              "id": "credits-topup-create-sales-api",
              "title": "Sales role without Credits_AE permission set is blocked from creating Credits top-ups",
              "kind": "api_script",
              "requiredFixtures": [
                "payloads.creditsTopupCreate"
              ],
              "steps": [
                {
                  "id": "create-topup-sales",
                  "method": "POST",
                  "path": "/services/data/v63.0/sobjects/Credits_Topup__c",
                  "body": {
                    "__template": "{{payloads.creditsTopupCreate}}"
                  },
                  "expectStatus": 403,
                  "assertions": [
                    {
                      "path": "response.body[0].errorCode",
                      "equals": "FORBIDDEN"
                    },
                    {
                      "path": "response.body[0].message",
                      "includes": "cannot Create Credits_Topup__c"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "field-history",
          "title": "Field history and reports",
          "functionFiles": [
            "cases/uat-sales-workflows/account/account-field-history-own-record-api.json",
            "cases/uat-sales-workflows/account/account-history-report-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-field-history-report-api.json",
            "cases/uat-sales-workflows/opportunity/opportunity-history-report-api.json"
          ]
        },
        {
          "id": "performance",
          "title": "Performance monitors",
          "functionFiles": [
            "cases/performance/lead-convert-no-campaign-latency-api.json",
            "cases/performance/lead-convert-campaignmember-latency-api.json",
            "cases/performance/search-default-scope-latency-api.json",
            "cases/performance/query-all-latency-api.json"
          ],
          "functions": [
            {
              "id": "sobjects-latency-api",
              "title": "Sales role sobjects metadata completes within 30 seconds",
              "kind": "api_script",
              "accessMode": "read",
              "steps": [
                {
                  "id": "fetch-sobjects",
                  "method": "GET",
                  "path": "/services/data/v63.0/sobjects",
                  "timeoutMs": 30000,
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "responseMeta.durationMs",
                      "atMost": 30000
                    }
                  ]
                }
              ]
            },
            {
              "id": "lead-count-latency-api",
              "title": "Sales role Lead count completes within 30 seconds",
              "kind": "api_script",
              "accessMode": "read",
              "steps": [
                {
                  "id": "count-lead",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20COUNT()%20FROM%20Lead",
                  "timeoutMs": 30000,
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "responseMeta.durationMs",
                      "atMost": 30000
                    }
                  ]
                }
              ]
            },
            {
              "id": "lead-list-latency-api",
              "title": "Sales role Lead list query completes within 30 seconds",
              "kind": "api_script",
              "accessMode": "read",
              "steps": [
                {
                  "id": "query-lead-list",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Name%2C%20Company%2C%20Phone%2C%20Email%2C%20Status%2C%20OwnerId%2C%20Owner.Name%2C%20Id%20FROM%20Lead%20ORDER%20BY%20CreatedDate%20DESC%20LIMIT%2050",
                  "timeoutMs": 30000,
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "responseMeta.durationMs",
                      "atMost": 30000
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "account",
          "title": "Account workflows",
          "functionFiles": [
            "cases/uat-sales-workflows/account/account-contacts-children-queryable-api.json",
            "cases/uat-sales-workflows/account/account-core-field-edit-api.json",
            "cases/uat-sales-workflows/account/account-detail-field-surface.json",
            "cases/uat-sales-workflows/account/account-new-contact-action-surface.json",
            "cases/uat-sales-workflows/account/account-opportunities-children-queryable-api.json",
            "cases/uat-sales-workflows/account/account-orgs-related-surface.json",
            "cases/uat-sales-workflows/account/account-related-list-surface.json",
            "cases/uat-sales-workflows/account/account-related-list-count-parity-api.json",
            "cases/uat-sales-workflows/account/account-billing-country-code-api.json",
            "cases/uat-sales-workflows/account/account-quicklink-scroll-to-related-surface.json"
          ]
        },
        {
          "id": "contact",
          "title": "Contact workflows",
          "functionFiles": [
            "cases/uat-sales-workflows/contact/contact-create-under-account-api.json",
            "cases/uat-sales-workflows/contact/contact-detail-field-surface.json",
            "cases/uat-sales-workflows/contact/contact-related-list-surface.json"
          ]
        },
        {
          "id": "navigation",
          "title": "Primary navigation",
          "functionFiles": [
            "cases/uat-sales-workflows/navigation/primary-navigation-core-tabs-surface.json",
            "cases/uat-sales-workflows/navigation/primary-navigation-extended-tabs-surface.json"
          ]
        },
        {
          "id": "listview",
          "title": "List Views (per-user views + UI regressions \u2014 #3309, #3550)",
          "functionFiles": [
            "cases/uat-sales-workflows/listview/listview-private-view-owner-scoped-api.json",
            "cases/uat-sales-workflows/listview/listview-filter-logic-or-applies-api.json",
            "cases/uat-sales-workflows/listview/listview-filter-popover-within-viewport-surface.json",
            "cases/uat-sales-workflows/listview/listview-my-lead-owner-token-resolves-api.json"
          ]
        },
        {
          "id": "latency",
          "title": "Runtime latency standard (SFDC-comparable)",
          "functionFiles": [
            "cases/uat-sales-workflows/latency/record-detail-load-opportunity-latency.json",
            "cases/uat-sales-workflows/latency/record-detail-load-account-latency.json",
            "cases/uat-sales-workflows/latency/record-detail-load-contact-latency.json",
            "cases/uat-sales-workflows/latency/stage-path-update-latency-api.json",
            "cases/uat-sales-workflows/latency/opportunity-edit-save-latency-api.json",
            "cases/uat-sales-workflows/latency/opportunity-forecast-save-latency-api.json",
            "cases/uat-sales-workflows/latency/account-edit-save-latency-api.json",
            "cases/uat-sales-workflows/latency/opportunity-add-product-latency-api.json",
            "cases/uat-sales-workflows/latency/weekly-update-log-latency-api.json",
            "cases/uat-sales-workflows/latency/create-quote-from-opportunity-latency-api.json",
            "cases/uat-sales-workflows/latency/submit-for-approval-latency-api.json",
            "cases/uat-sales-workflows/latency/record-read-latency-api.json",
            "cases/uat-sales-workflows/latency/soql-list-query-latency-api.json",
            "cases/uat-sales-workflows/latency/list-view-load-account-latency-api.json",
            "cases/uat-sales-workflows/latency/global-search-latency-api.json",
            "cases/uat-sales-workflows/latency/describe-latency-api.json",
            "cases/uat-sales-workflows/latency/opportunity-stage-advance-latency-api.json"
          ]
        }
      ]
    },
    {
      "id": "presales",
      "title": "Pre-sales role inspection",
      "credentials": {
        "usernameEnv": "STAGING_INSPECTION_PRESALES_USERNAME",
        "passwordEnv": "STAGING_INSPECTION_PRESALES_PASSWORD"
      },
      "modules": [
        {
          "id": "access",
          "title": "Pre-sales access",
          "functions": [
            {
              "id": "presales-login-dashboard",
              "title": "Pre-sales can log in",
              "kind": "browser_flow",
              "steps": [
                {
                  "action": "goto",
                  "path": "/"
                },
                {
                  "action": "expectAnyText",
                  "values": [
                    "My Dashboards",
                    "Create New Dashboard",
                    "Search: All",
                    "Accounts",
                    "Setup"
                  ]
                }
              ]
            }
          ]
        },
        {
          "id": "credits",
          "title": "Credits workflow",
          "functions": [
            {
              "id": "credits-topup-approval-surface",
              "title": "Configured existing pre-sales user is stamped as top-up approver on staging data",
              "kind": "api_script",
              "accessMode": "read",
              "requiredFixtures": [
                "security.existingPresalesUsername"
              ],
              "steps": [
                {
                  "id": "query-presales-user",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%20FROM%20User%20WHERE%20Username%20%3D%20'{{security.existingPresalesUsername}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    }
                  ]
                },
                {
                  "id": "query-presales-topup-assignment",
                  "authRole": "admin",
                  "method": "GET",
                  "path": "/services/data/v63.0/query?q=SELECT%20Id%2C%20Approval_Status__c%20FROM%20Credits_Topup__c%20WHERE%20Presales_Manager_User__c%20%3D%20'{{steps.query-presales-user.response.body.records[0].Id}}'%20LIMIT%201",
                  "expectStatus": 200,
                  "assertions": [
                    {
                      "path": "response.body.records",
                      "lengthAtLeast": 1
                    },
                    {
                      "path": "response.body.records[0].Approval_Status__c",
                      "exists": true
                    }
                  ]
                }
              ]
            }
          ],
          "functionFiles": [
            "cases/flow-regression/credits/credits-poc-explicit-submit-api.json",
            "cases/flow-regression/credits/credits-formula-view-single-record-read-api.json",
            "cases/flow-regression/credits/credits-presales-record-share-access-api.json",
            "cases/flow-regression/credits/credits-topup-two-step-approval-commits-in-one-attempt-api.json",
            "cases/flow-regression/credits/credits-topup-terminal-cascade-lands-api.json"
          ]
        },
        {
          "id": "latency",
          "title": "Pre-sales list-view load latency (LATAM PreSales)",
          "functionFiles": [
            "cases/performance/lead-metadata-bootstrap-latency-api.json"
          ]
        }
      ]
    },
    {
      "id": "sales-apac",
      "title": "Sales APAC role inspection (non-top-level role hierarchy)",
      "credentials": {
        "usernameEnv": "STAGING_INSPECTION_SALES_APAC_USERNAME",
        "passwordEnv": "STAGING_INSPECTION_SALES_APAC_PASSWORD"
      },
      "modules": [
        {
          "id": "lead-conversion",
          "title": "Lead conversion workflow (APAC Sales Team B)",
          "functionFiles": [
            "cases/ph2-ph3/lead-campaign/lead-convert-create-contact-apac-sales-api.json"
          ]
        },
        {
          "id": "lead-transfer",
          "title": "Lead transfer permission (APAC Sales Team B)",
          "functionFiles": [
            "cases/ph2-ph3/lead-campaign/lead-transfer-transfer-leads-permission-api.json",
            "cases/ph2-ph3/lead-campaign/lead-bulk-transfer-leads-permission-api.json"
          ]
        },
        {
          "id": "latency",
          "title": "Record detail load latency (APAC Sales Team B)",
          "functionFiles": [
            "cases/ph2-ph3/lead-campaign/record-detail-load-lead-apac-sales-latency-api.json"
          ]
        }
      ]
    },
    {
      "id": "sdr",
      "title": "SDR role inspection (Lead handling + convert, re-run under SDR identity)",
      "credentials": {
        "usernameEnv": "STAGING_INSPECTION_SDR_USERNAME",
        "passwordEnv": "STAGING_INSPECTION_SDR_PASSWORD"
      },
      "modules": [
        {
          "id": "lead-management",
          "title": "Lead management (SDR perspective)",
          "functionFiles": [
            "cases/ph2-ph3/lead-management/lead-management-api-regression.json",
            "cases/ph2-ph3/lead-management/lead-lookup-search-api.json",
            "cases/ph2-ph3/lead-management/lead-layout-describe-api.json",
            "cases/ph2-ph3/lead-management/lead-bulk-change-owner-api.json"
          ]
        },
        {
          "id": "lead-lookup-ui",
          "title": "Lead lookup UI (SDR perspective)",
          "functionFiles": [
            "cases/ph2-ph3/lead-management/lead-lookup-campaignmember-ui-setup-api.json",
            "cases/ph2-ph3/lead-management/lead-lookup-campaignmember-ui.json"
          ]
        },
        {
          "id": "lead-conversion",
          "title": "Lead conversion (SDR perspective)",
          "functionFiles": [
            "cases/ph2-ph3/lead-campaign/lead-convert-rollback-owner-ocr-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-converted-state-api.json",
            "cases/flow-regression/lead/lead-convert-before-save-field-set-api.json",
            "cases/ph2-ph3/lead-campaign/convertleads-profile-permission-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-campaignmember-relink-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-campaignmember-lifecycle-exclusion-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-no-campaign-source-api.json",
            "cases/ph2-ph3/lead-campaign/lead-convert-create-new-contact-ocr-api.json"
          ]
        },
        {
          "id": "latency",
          "title": "Runtime latency (SDR identity \u2014 prod high-latency repro)",
          "functionFiles": [
            "cases/ph2-ph3/latency/parameterized-search-lookup-latency-api.json"
          ]
        },
        {
          "id": "search",
          "title": "Parameterized search performance by input type (SDR identity)",
          "functionFiles": [
            "cases/search/parameterized-search-text-latency-api.json",
            "cases/search/parameterized-search-cjk-latency-api.json",
            "cases/search/parameterized-search-email-latency-api.json",
            "cases/search/parameterized-search-number-latency-api.json"
          ]
        }
      ]
    },
    {
      "id": "marketing",
      "title": "Marketing role inspection (Campaign attribution, re-run under Marketing identity)",
      "credentials": {
        "usernameEnv": "STAGING_INSPECTION_MARKETING_USERNAME",
        "passwordEnv": "STAGING_INSPECTION_MARKETING_PASSWORD"
      },
      "modules": [
        {
          "id": "campaign-member",
          "title": "Campaign member (Marketing perspective)",
          "functionFiles": [
            "cases/ph2-ph3/campaign-member/campaign-member-lifecycle-api.json",
            "cases/ph2-ph3/campaign-member/campaign-member-status-lifecycle-api.json",
            "cases/ph2-ph3/campaign-member/campaign-update-api.json",
            "cases/ph2-ph3/campaign-member/campaign-delete-cascade-api.json"
          ]
        },
        {
          "id": "lead-performance",
          "title": "Lead performance (tiered latency, Marketing perspective)",
          "functionFiles": [
            "cases/performance/lead-create-latency-api.json",
            "cases/performance/lead-list-load-latency-api.json",
            "cases/performance/lead-list-pagination-latency-api.json"
          ]
        },
        {
          "id": "lead-robustness",
          "title": "Lead robustness (dedupe + validation rules, Marketing perspective)",
          "functionFiles": [
            "cases/ph2-ph3/lead-management/lead-duplicate-email-dedupe-api.json",
            "cases/ph2-ph3/lead-management/lead-validation-rule-enforced-api.json",
            "cases/ph2-ph3/lead-management/lead-status-validation-rule-api.json",
            "cases/ph2-ph3/lead-management/lead-status-progress-refresh-api.json",
            "cases/ph2-ph3/lead-management/lead-iqm-completed-field-anchored-api.json"
          ]
        },
        {
          "id": "lead-flows",
          "title": "Lead AfterSave flows (Marketing perspective)",
          "functionFiles": [
            "cases/flow-regression/lead/lead-auto-create-org-flow-api.json"
          ]
        },
        {
          "id": "campaign-member-extended",
          "title": "Campaign member extended (Contact path + dedupe, Marketing perspective)",
          "functionFiles": [
            "cases/ph2-ph3/campaign-member/campaignmember-contact-company-from-account-api.json",
            "cases/ph2-ph3/campaign-member/campaignmember-duplicate-prevented-api.json"
          ]
        },
        {
          "id": "campaign-form",
          "title": "Campaign form (required fields, Marketing perspective)",
          "functionFiles": [
            "cases/ph2-ph3/campaign-member/campaign-required-name-enforced-api.json"
          ]
        },
        {
          "id": "campaign-performance",
          "title": "Campaign performance (tiered latency, Marketing perspective)",
          "functionFiles": [
            "cases/performance/campaign-create-latency-api.json"
          ]
        }
      ]
    }
  ]
}
