{
  "schema": "vedokrok.public-item.v1",
  "release_id": "MHC-RPUB-20260920-75ad787a",
  "url": "/knowledge/give-omitted-null-and-blank-different-test-cases",
  "id": "MHC-D-RESEARCH-0982",
  "version": "0.1.0",
  "title": "Give omitted, null and blank different test cases",
  "summary": "An empty-looking cell can carry a very active instruction.",
  "kind": "checklist",
  "body": "Write down how this exact interface represents no change, clear the value and set an empty string. Do not infer those meanings from appearance. JSON Merge Patch, for example, gives null a removal meaning; another interface may use an update flag or a different convention.",
  "limits": [
    "Do not standardize all missing representations into one value before checking their semantics. Different fields in the same interface can behave differently."
  ],
  "topics": [
    "work-02-data-reconciliation"
  ],
  "intents": [],
  "source_ids": [
    "RS-4FB38C20FE966683"
  ],
  "evidence": [
    {
      "claim": "JSON Merge Patch distinguishes an omitted member from a member set to null: null requests removal of that member.",
      "source_id": "RS-4FB38C20FE966683",
      "role": "supports",
      "note": "This is one interface contract, not a universal interpretation of empty spreadsheet cells or null values.",
      "locator": "Sections 1 and 2"
    }
  ],
  "use_when": [
    "A mass update may clear existing values when the intended action was to leave them alone."
  ],
  "avoid_when": [
    "Do not standardize all missing representations into one value before checking their semantics. Different fields in the same interface can behave differently."
  ],
  "example": "A file omits an email column in one test and includes it empty in another. Only the documented behavior determines whether either clears the address.",
  "check": "Each input state has an observed, documented target effect.",
  "checklist": [
    "Read the field-level update contract, including flags and defaults.",
    "Test omitted, null, empty-string and explicit-value inputs against an existing nonempty value.",
    "Inspect the stored result and any downstream message before approving a bulk run."
  ],
  "sources": [
    {
      "id": "RS-4FB38C20FE966683",
      "title": "RFC 7396: JSON Merge Patch",
      "url": "https://www.rfc-editor.org/rfc/rfc7396.html"
    }
  ],
  "relations": [
    {
      "from": "MHC-D-RESEARCH-0982",
      "to": "MHC-D-RESEARCH-0972",
      "type": "useful_with",
      "url": "/knowledge/find-the-first-boundary-where-the-record-becomes-wrong"
    }
  ],
  "collections": [
    {
      "id": "RC-1B134BE48D7DF2A0",
      "title": "Keep the meaning intact when data moves",
      "url": "/collections/keep-the-meaning-intact-when-data-moves"
    }
  ]
}
