{
  "id": "FLOW-002",
  "name": "AfterSave IsBlank/IsNotBlank + cross-object lookup (Contract_PingCAP_Contracting_Entity)",
  "description": "RecordAfterSave flow Contract_PingCAP_Contracting_Entity evaluates IsBlank/IsNotBlank against $Record.Account.PingCAP_Contracting_Entity__c and $Record.PingCAP_Contracting_Entity__c, then writes PingCAP_Contracting_Entity__c from the Account-side value. Locks: (a) IsBlank semantics (PR #1080 GAP 7), (b) standard-relationship lazy-load for arbitrary custom fields under Account (PR #1106), (c) AfterSave recordUpdate goes to persistence.Update (PR #1106 AfterSave fix).",
  "object": "Contract",
  "method": "POST",
  "endpoint": "/services/data/v63.0/sobjects/Contract",
  "payload": {
    "AccountId": "{seed_Account_0}",
    "Status": "Draft",
    "StatusCode": "Draft",
    "StartDate": "2026-04-17",
    "ContractTerm": 12
  },
  "expects": {
    "status_code": 201
  },
  "query_after": {
    "object": "Contract",
    "retry": 20,
    "delay_ms": 2000,
    "assertions": [
      {
        "field": "AccountId",
        "operator": "eq",
        "value": "{seed_Account_0}"
      },
      {
        "field": "PingCAP_Contracting_Entity__c",
        "operator": "is_not_null",
        "value": true
      }
    ]
  },
  "teardown": {
    "method": "DELETE",
    "endpoint": "/services/data/v63.0/sobjects/Contract/{id}"
  },
  "priority": "P0",
  "bug_ref": "#1106",
  "scene": "flow"
}
