# PH2 / PH3 Case Migration

This maps the extracted business QA cases from `/tmp/cases_extracted` into Staging Inspection.

## PH2 R11

| Source | Staging Inspection coverage | Notes |
| --- | --- | --- |
| `167_AC1_layout_editor_dnd.sh` | `admin > lead-management-regression > lead-layout-describe-api` | API smoke is executable. The drag/drop UI interaction remains manual until the browser runner supports click/drag steps with stable selectors. |
| `757_AC1_convert_lead_profile_check.sh` | `admin > lead-campaign-regression > convertleads-profile-permission-api`; `sales > lead-conversion > lead-convert-create-contact-scope-api` | Admin/Sales executable coverage exists. Profile metadata is presence-only because staging does not expose `PermissionsConvertLeads` as a readable SOQL value. SDR needs an `sdr` Staging Inspection role before it can be run without hard-coded credentials. |
| `757_AC2_AC3_convert_modal_ui.sh` | Manual/browser backlog | Requires opening the Convert modal, selecting an Account, and asserting disabled/enabled controls. Current browser runner supports text smoke only. |
| `757_AC4_rollback_on_failure.sh` | `admin > lead-campaign-regression > lead-convert-rollback-owner-ocr-api` | Invalid account rollback, orphan Contact absence, and Contact owner inheritance are executable. |
| `757_AC5_ocr_demotion.sh` | `admin > lead-campaign-regression > lead-convert-rollback-owner-ocr-api` | Verifies exactly one primary `OpportunityContactRole` for the converted Contact. |
| `757_AC6_AC7_AC8_AC11_convert_ui.sh` | Manual/browser backlog | Requires modal tab selection, no-opportunity UI behavior, duplicate-submit interception, and field-mapping UI assertions. |
| `757_AC9_campaign_id.sh` | `admin > lead-campaign-regression > lead-convert-campaignmember-relink-api`; `admin > lead-campaign-regression > lead-convert-no-campaign-source-api` | Both CampaignMember and no-CampaignMember sub-cases are executable. The CampaignMember case also queries `Campaign.NumberOfConvertedLeads` for #2664. |
| `757_AC10_converted_banner.sh` | `admin > lead-campaign-regression > lead-convert-converted-state-api` | API assertions for `IsConverted`, converted IDs, and converted Lead edit blocking are executable. Banner UI remains text-smoke/manual. |
| `761_AC1_convert_leads_permission.sh` | `admin > lead-campaign-regression > convertleads-profile-permission-api` | Checks Sales and SDR profile presence through API. Permission checkbox remains UI/manual because staging does not expose `PermissionsConvertLeads` as a readable value. |
| `761_AC2_sales_sdr_convert_exec.sh` | `sales > lead-conversion > lead-convert-create-contact-scope-api`; pending `sdr` role | Sales execution has existing coverage. SDR execution needs an `sdr` role and fixture Account ownership model. |
| `774_AC1_field_labels.sh` | Manual/browser backlog | Needs UI label assertions for custom fields. |
| `774_AC2_conditionvalue_pill.sh` | Manual/browser backlog | Needs UI rendering assertions for condition value pill labels. |
| `774_AC3_permission_toggle.sh` | Manual/browser backlog | Needs Setup/Profile UI interaction and toggle verification. |

## PH3 R9

| Source | Staging Inspection coverage | Notes |
| --- | --- | --- |
| `758_AC1_lead_post.sh` | `admin > crm-core > lead-create-api` | Existing executable coverage. |
| `758_AC2_lead_name.sh` | `admin > lead-management-regression > lead-management-api-regression` | Verifies synthesized Lead `Name` includes first and last name. |
| `758_AC3_picklist_encoding.sh` | `admin > lead-management-regression > lead-management-api-regression` | Verifies Lead describe picklist payload does not contain common HTML entities. |
| `758_AC4_auto_create_org_flow.sh` | `admin > lead-management-regression > lead-management-api-regression` | Verifies Lead create succeeds without flow error. Flow metadata readback is not asserted because current staging returns 404 for `FlowDefinitionView`. |
| `758_AC5_formula_null.sh` | `admin > lead-management-regression > lead-management-api-regression` | Executes the `Region__c = null` Lead query. |
| `758_AC8_region_seed.sh` | `admin > lead-management-regression > lead-management-api-regression` | Verifies both country/region seed objects have usable records. |
| `758_AC9_region_flow.sh` | `admin > lead-management-regression > lead-management-api-regression` | Creates a Lead from seed-derived country data and verifies `CountryCode`/`Region__c`. |
| `763_AC1_lead_lookup.sh` | `admin > lead-management-regression > lead-lookup-search-api` | Creates an isolated Lead and verifies Search API lookup returns it. |
| `763_AC6_has_responded.sh` | `admin > campaign-member-regression > campaign-member-lifecycle-api` | Verifies Status changes drive `HasResponded`. |
| `763_AC8_cm_post_status.sh` | `admin > campaign-member-regression > campaign-member-lifecycle-api` | Verifies CampaignMember create with a parent status. |
| `763_AC9_AC10_cm_fields.sh` | `admin > campaign-member-regression > campaign-member-lifecycle-api` | Verifies Lead-backed `Name`, `Email`, and `CompanyOrAccount`. |
| `764_AC4_cms_persist.sh` | `admin > campaign-member-regression > campaign-member-status-lifecycle-api` | Verifies CMS label/default/responded values persist. |
| `764_AC5_single_default.sh` | `admin > campaign-member-regression > campaign-member-status-lifecycle-api` | Verifies only one default status remains. |
| `764_AC6_sortorder.sh` | `admin > campaign-member-regression > campaign-member-status-lifecycle-api` | Verifies auto-provisioned sort order and custom status next sort order. |
| `764_AC7_auto_cms.sh` | `admin > campaign-member-regression > campaign-member-status-lifecycle-api` | Verifies new Campaign creates Sent/Responded statuses. |
| `764_AC8_label_display.sh` | `admin > campaign-member-regression > campaign-member-status-lifecycle-api` | API verifies labels. Related-list UI rendering remains manual/browser backlog. |
| `764_AC9_cascade_cms.sh` | `admin > campaign-member-regression > campaign-delete-cascade-api` | Executable regression for CMS delete cascade. |
| `764_AC10_cascade_cm.sh` | `admin > campaign-member-regression > campaign-delete-cascade-api` | Executable regression for CM delete cascade. |
| `765_AC7_field_update.sh` | `admin > campaign-member-regression > campaign-update-api` | Creates and PATCHes an isolated Campaign. |
| `765_AC8_auto_cms.sh` | `admin > campaign-member-regression > campaign-member-status-lifecycle-api` | Same underlying behavior as #764 AC7. |

## Extra Extracted Probe

| Source | Staging Inspection coverage | Notes |
| --- | --- | --- |
| `verify_campaign_rollups_2375.py` | `admin > campaign-member-regression > campaign-rollup-fields-api` | Creates Campaign/Lead/Contact/Opportunity data and verifies all 8 rollup fields are queryable after writes. |

## Intentional Differences From Shell Scripts

- New API cases create isolated records instead of relying on hard-coded staging IDs.
- Lead convert uses `Status=OPEN` and `convertedStatus=Customer`, matching the corrected R11 notes.
- Sales/SDR hard-coded credentials from the shell scripts were not copied. SDR needs a first-class Staging Inspection role before execution can be fully automated.
- UI-only scripts are tracked explicitly as backlog because the current browser runner cannot click, drag, select lookup results, or intercept fetch calls.
