{
  "bundles": [
    {
      "device_record_id": "lg-webos-tv-family",
      "id": "lg-webos-state-availability",
      "input_digest": "c78a77910674a1545f42e3ecc0fe8917b975152e55688c06c758b2f3e4b3176c",
      "publication_status": "candidate",
      "title": "LG webOS TV family: power, availability and screen state",
      "version": "0.1.0"
    },
    {
      "device_record_id": "yale-yrd210-pb-db",
      "id": "yale-yrd210-battery",
      "input_digest": "336f46112dfba3dc9254363e6516f982e67fcf7825a75b5f0a6932bf5193b1c3",
      "publication_status": "candidate",
      "title": "Yale YRD210 PB DB: explaining battery normalization",
      "version": "0.1.0"
    }
  ],
  "catalog_repository": "https://github.com/edgeloom-oss/edgeloom-catalog",
  "catalog_revision": "d4068dabf34f08a2ce35496203b232b8519fcc52",
  "checks": {
    "contracts": "passed",
    "cross_record_references": "passed",
    "manifest_digests": "matched",
    "source_bytes": "not-checked"
  },
  "corroborations": [
    {
      "device_id": "yale-yrd156",
      "feature_id": "auto-relock",
      "id": "yrd156-ha-configuration-path",
      "kind": "catalog-corroboration",
      "limitations": [
        "Human-authored candidate observations; no independent EdgeLoom review or physical-device test.",
        "Sources are pinned snapshots, not a claim about the currently installed integration, coordinator or firmware.",
        "Relationship labels are curator interpretations, not computed semantic equivalence. Conflicting observations must remain visible.",
        "HA and Z-Wave JS share a backend lineage; they are not two independent attestations of the device's behavior.",
        "The lineage edge records shared stack ancestry, not an exact runtime dependency/version lock."
      ],
      "lineage": [
        {
          "depends_on": [],
          "family": "zwave-js-stack",
          "manifest_id": "zwave-js-yrd156-c4c599e"
        },
        {
          "depends_on": [
            "zwave-js-yrd156-c4c599e"
          ],
          "family": "zwave-js-stack",
          "manifest_id": "ha-zwave-lock-067f882"
        }
      ],
      "observations": [
        {
          "claim": "The YRD156 configuration imports parameter 3's auto-relock duration definition: seconds, 0–180, default 30. Parameter 2 separately enables auto-relock.",
          "conditions": [
            "Community configuration only; parameter availability and enable/disable semantics need firmware-specific confirmation.",
            "The chosen tuple is not interchangeable with every Yale model or protocol variant."
          ],
          "evidence_kind": "code-declaration",
          "id": "zwjs-parameter",
          "identity_evidence": {
            "artifact_id": "zwave-js-yrd156-config",
            "locator": "/devices/0",
            "manifest_id": "zwave-js-yrd156-c4c599e"
          },
          "identity_match": {
            "manufacturer_id": "0x0129",
            "product_id": "0x0508",
            "product_type": "0x803A"
          },
          "locator_checks": [
            {
              "artifact_id": "zwave-js-yrd156-config",
              "locator": "/paramInformation",
              "manifest_id": "zwave-js-yrd156-c4c599e",
              "status": "not-checked",
              "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/0x0129/yrd156.json"
            },
            {
              "artifact_id": "zwave-js-yale-template",
              "locator": "auto_relock_time_180; auto_relock",
              "manifest_id": "zwave-js-yrd156-c4c599e",
              "status": "not-checked",
              "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/0x0129/templates/yale_template.json"
            },
            {
              "artifact_id": "zwave-js-master-template",
              "locator": "base_0-180_nounit",
              "manifest_id": "zwave-js-yrd156-c4c599e",
              "status": "not-checked",
              "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/templates/master_template.json"
            },
            {
              "artifact_id": "zwave-js-yrd156-config",
              "locator": "/devices/0",
              "manifest_id": "zwave-js-yrd156-c4c599e",
              "status": "not-checked",
              "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/0x0129/yrd156.json"
            }
          ],
          "platform": "Z-Wave JS configuration",
          "references": [
            {
              "artifact_id": "zwave-js-yrd156-config",
              "locator": "/paramInformation",
              "manifest_id": "zwave-js-yrd156-c4c599e"
            },
            {
              "artifact_id": "zwave-js-yale-template",
              "locator": "auto_relock_time_180; auto_relock",
              "manifest_id": "zwave-js-yrd156-c4c599e"
            },
            {
              "artifact_id": "zwave-js-master-template",
              "locator": "base_0-180_nounit",
              "manifest_id": "zwave-js-yrd156-c4c599e"
            }
          ],
          "relationship": "supports",
          "scope": "device-model"
        },
        {
          "claim": "set_config_parameter declares parameter, value, endpoint and optional value_size fields. This is a generic entry point for configuration parameters, not a YRD156-specific successful write.",
          "conditions": [
            "Requires the relevant runtime node metadata, permissions and supported parameter.",
            "The pinned catalog Z-Wave JS config is a comparison baseline, not a claim that HA deploys exactly that revision."
          ],
          "evidence_kind": "code-declaration",
          "id": "ha-configuration-action",
          "locator_checks": [
            {
              "artifact_id": "ha-zwave-services",
              "locator": "/set_config_parameter/fields",
              "manifest_id": "ha-zwave-lock-067f882",
              "status": "not-checked",
              "url": "https://github.com/home-assistant/core/blob/067f88281665776424fbb4826697c46d5e7a6837/homeassistant/components/zwave_js/services.yaml"
            }
          ],
          "platform": "Home Assistant · Z-Wave JS",
          "references": [
            {
              "artifact_id": "ha-zwave-services",
              "locator": "/set_config_parameter/fields",
              "manifest_id": "ha-zwave-lock-067f882"
            }
          ],
          "relationship": "context",
          "scope": "platform-generic"
        },
        {
          "claim": "async_set_lock_configuration passes auto_relock_time to DoorLockCCConfigurationSetOptions. This protocol-level option is not proof of equivalence to Yale's configuration parameter 3.",
          "conditions": [
            "Device command-class version and actual supported options are unknown for this case.",
            "No operational instructions, write payloads or safe setting recommendation are provided."
          ],
          "evidence_kind": "code-declaration",
          "id": "ha-doorlock-configuration",
          "locator_checks": [
            {
              "artifact_id": "ha-zwave-lock",
              "locator": "ZWaveLock.async_set_lock_configuration; DoorLockCCConfigurationSetOptions",
              "manifest_id": "ha-zwave-lock-067f882",
              "status": "not-checked",
              "url": "https://github.com/home-assistant/core/blob/067f88281665776424fbb4826697c46d5e7a6837/homeassistant/components/zwave_js/lock.py"
            },
            {
              "artifact_id": "ha-zwave-services",
              "locator": "/set_lock_configuration/fields/auto_relock_time",
              "manifest_id": "ha-zwave-lock-067f882",
              "status": "not-checked",
              "url": "https://github.com/home-assistant/core/blob/067f88281665776424fbb4826697c46d5e7a6837/homeassistant/components/zwave_js/services.yaml"
            }
          ],
          "platform": "Home Assistant · Door Lock CC",
          "references": [
            {
              "artifact_id": "ha-zwave-lock",
              "locator": "ZWaveLock.async_set_lock_configuration; DoorLockCCConfigurationSetOptions",
              "manifest_id": "ha-zwave-lock-067f882"
            },
            {
              "artifact_id": "ha-zwave-services",
              "locator": "/set_lock_configuration/fields/auto_relock_time",
              "manifest_id": "ha-zwave-lock-067f882"
            }
          ],
          "relationship": "unresolved",
          "scope": "platform-generic"
        }
      ],
      "path": "catalog/corroboration/yrd156-ha-configuration-path.json",
      "review": {
        "author": "github:@infinitywings",
        "lifecycle": "candidate",
        "reviewers": []
      },
      "schema_version": "0.1",
      "sha256": "0ff17f9fa50da77e247cb87411a24832435ccce59d1bb2f5528cf3096c21c4f0",
      "source_manifests": [
        {
          "id": "zwave-js-yrd156-c4c599e",
          "path": "catalog/sources/zwave-js-yrd156-c4c599e.yaml",
          "sha256": "72d981b9af12b3d525a45bb0f5dc37941bab918287ac327294e5ac87c97790de"
        },
        {
          "id": "ha-zwave-lock-067f882",
          "path": "catalog/sources/ha-zwave-lock-067f882.json",
          "sha256": "1caaa16559465dee408eb216185ea6ed590dc1f7938729a4e68d405e023a8c25"
        }
      ],
      "summary": "The model-specific community configuration and HA's generic actions describe different interfaces. A configuration-parameter write must not be equated with Door Lock CC auto_relock_time.",
      "title": "Configuration parameter versus lock configuration"
    },
    {
      "device_id": "yale-yrd156",
      "feature_id": "lock-state",
      "id": "yrd156-ha-unknown-state",
      "kind": "catalog-corroboration",
      "limitations": [
        "Human-authored candidate observations; no independent EdgeLoom review or physical-device test.",
        "Sources are pinned snapshots, not a claim about the currently installed integration, coordinator or firmware.",
        "Relationship labels are curator interpretations, not computed semantic equivalence. Conflicting observations must remain visible.",
        "This record does not broaden the existing locked/unlocked SDF subset or establish a reversible mapping.",
        "Existing SmartThings SLGA_MIGRATED uncertainty and all original mapping limits remain unchanged."
      ],
      "lineage": [
        {
          "depends_on": [],
          "family": "zwave-js-stack",
          "manifest_id": "zwave-js-yrd156-c4c599e"
        },
        {
          "depends_on": [
            "zwave-js-yrd156-c4c599e"
          ],
          "family": "zwave-js-stack",
          "manifest_id": "ha-zwave-lock-067f882"
        }
      ],
      "observations": [
        {
          "claim": "ZWaveLock.is_locked returns None for a missing primary value or DoorLockMode.UNKNOWN, instead of treating it as unlocked.",
          "conditions": [
            "Generic entity code; no YRD156-specific node capture is present.",
            "The underlying Z-Wave JS stack supplies command-class values."
          ],
          "evidence_kind": "code-declaration",
          "id": "ha-unknown-state",
          "locator_checks": [
            {
              "artifact_id": "ha-zwave-lock",
              "locator": "ZWaveLock.is_locked",
              "manifest_id": "ha-zwave-lock-067f882",
              "status": "not-checked",
              "url": "https://github.com/home-assistant/core/blob/067f88281665776424fbb4826697c46d5e7a6837/homeassistant/components/zwave_js/lock.py"
            }
          ],
          "platform": "Home Assistant · Z-Wave JS",
          "references": [
            {
              "artifact_id": "ha-zwave-lock",
              "locator": "ZWaveLock.is_locked",
              "manifest_id": "ha-zwave-lock-067f882"
            }
          ],
          "relationship": "context",
          "scope": "platform-generic"
        },
        {
          "claim": "test_door_lock_no_value replaces a Schlage BE469 fixture's mode value with None and asserts STATE_UNKNOWN.",
          "conditions": [
            "This is a Schlage fixture, not a YRD156 hardware test.",
            "The upstream test was inspected, not executed by EdgeLoom; repository CI is not inherited as a per-device pass."
          ],
          "evidence_kind": "test-fixture",
          "id": "ha-missing-value-test",
          "locator_checks": [
            {
              "artifact_id": "ha-zwave-test-lock",
              "locator": "test_door_lock_no_value",
              "manifest_id": "ha-zwave-lock-067f882",
              "status": "not-checked",
              "url": "https://github.com/home-assistant/core/blob/067f88281665776424fbb4826697c46d5e7a6837/tests/components/zwave_js/test_lock.py"
            }
          ],
          "platform": "Home Assistant · simulated test",
          "references": [
            {
              "artifact_id": "ha-zwave-test-lock",
              "locator": "test_door_lock_no_value",
              "manifest_id": "ha-zwave-lock-067f882"
            }
          ],
          "relationship": "context",
          "scope": "platform-generic"
        }
      ],
      "path": "catalog/corroboration/yrd156-ha-unknown-state.json",
      "review": {
        "author": "github:@infinitywings",
        "lifecycle": "candidate",
        "reviewers": []
      },
      "schema_version": "0.1",
      "sha256": "ba71e36b6a781fb3359b1945840f2f98d8aa5ac1bfb0ed63dc9e9b5a07c51cc9",
      "source_manifests": [
        {
          "id": "ha-zwave-lock-067f882",
          "path": "catalog/sources/ha-zwave-lock-067f882.json",
          "sha256": "1caaa16559465dee408eb216185ea6ed590dc1f7938729a4e68d405e023a8c25"
        },
        {
          "id": "zwave-js-yrd156-c4c599e",
          "path": "catalog/sources/zwave-js-yrd156-c4c599e.yaml",
          "sha256": "72d981b9af12b3d525a45bb0f5dc37941bab918287ac327294e5ac87c97790de"
        }
      ],
      "summary": "HA's generic lock path retains an unknown result. Its simulated missing-value test is useful implementation context, but does not validate the YRD156 candidate mapping or its SmartThings migration condition.",
      "title": "Keep unknown state separate"
    },
    {
      "device_id": "yale-yrd210-pb-db",
      "feature_id": "battery",
      "id": "yrd210-battery-normalization",
      "kind": "catalog-corroboration",
      "limitations": [
        "Human-authored candidate observations; no independent EdgeLoom review or physical-device test.",
        "Sources are pinned snapshots, not a claim about the currently installed integration, coordinator or firmware.",
        "Relationship labels are curator interpretations, not computed semantic equivalence. Conflicting observations must remain visible.",
        "Different declared source families are not proof of independence: shared specs, authors or copied knowledge may exist.",
        "No raw device report, final-entity comparison, unit-test result or SDF binding is established."
      ],
      "lineage": [
        {
          "depends_on": [],
          "family": "zha-quirks",
          "manifest_id": "zha-yale-d6fcec5"
        },
        {
          "depends_on": [],
          "family": "zigbee-herdsman-converters",
          "manifest_id": "z2m-yale-5750b44"
        }
      ],
      "observations": [
        {
          "claim": "The Yale YRD210 PB DB signature selects a replacement DoublingPowerConfigurationCluster. That cluster multiplies battery_percentage_remaining (0x0021) by two.",
          "conditions": [
            "The full endpoint/cluster signature must also match; manufacturer/model alone is insufficient for quirk selection.",
            "This is a cluster-attribute adjustment, not a claim that the final HA entity shows twice the battery percentage.",
            "Firmware and downstream ZHA entity normalization are not inspected in this record."
          ],
          "evidence_kind": "code-declaration",
          "id": "zha-doubling",
          "identity_evidence": {
            "artifact_id": "zha-yale-realliving",
            "locator": "YRD210PBDB220TSLL.signature.MODELS_INFO",
            "manifest_id": "zha-yale-d6fcec5"
          },
          "identity_match": {
            "manufacturer": "Yale",
            "model": "YRD210 PB DB"
          },
          "locator_checks": [
            {
              "artifact_id": "zha-yale-realliving",
              "locator": "YRD210PBDB220TSLL.signature and replacement",
              "manifest_id": "zha-yale-d6fcec5",
              "status": "not-checked",
              "url": "https://github.com/zigpy/zha-device-handlers/blob/d6fcec59eff9f63f154723500be9378be926d927/zhaquirks/yale/realliving.py"
            },
            {
              "artifact_id": "zha-battery-cluster",
              "locator": "DoublingPowerConfigurationCluster._update_attribute",
              "manifest_id": "zha-yale-d6fcec5",
              "status": "not-checked",
              "url": "https://github.com/zigpy/zha-device-handlers/blob/d6fcec59eff9f63f154723500be9378be926d927/zhaquirks/__init__.py"
            },
            {
              "artifact_id": "zha-yale-realliving",
              "locator": "YRD210PBDB220TSLL.signature.MODELS_INFO",
              "manifest_id": "zha-yale-d6fcec5",
              "status": "not-checked",
              "url": "https://github.com/zigpy/zha-device-handlers/blob/d6fcec59eff9f63f154723500be9378be926d927/zhaquirks/yale/realliving.py"
            }
          ],
          "platform": "ZHA quirk",
          "references": [
            {
              "artifact_id": "zha-yale-realliving",
              "locator": "YRD210PBDB220TSLL.signature and replacement",
              "manifest_id": "zha-yale-d6fcec5"
            },
            {
              "artifact_id": "zha-battery-cluster",
              "locator": "DoublingPowerConfigurationCluster._update_attribute",
              "manifest_id": "zha-yale-d6fcec5"
            }
          ],
          "relationship": "supports",
          "scope": "device-model"
        },
        {
          "claim": "The YRD210 PB DB entry uses dontDividePercentage: true. The battery converter therefore skips its default divide-by-two step, when the reported percentage exists and is below 255.",
          "conditions": [
            "This definition matches zigbeeModel, without an explicit manufacturer constraint; vendor is descriptive metadata.",
            "voltageToPercentage must be absent for the selected percentage branch.",
            "Static source inspection only; no converter or upstream driver is executed."
          ],
          "evidence_kind": "code-declaration",
          "id": "z2m-no-halving",
          "identity_evidence": {
            "artifact_id": "z2m-yale-definitions",
            "locator": "definitions[zigbeeModel includes YRD210 PB DB]",
            "manifest_id": "z2m-yale-5750b44"
          },
          "identity_match": {
            "model": "YRD210 PB DB"
          },
          "locator_checks": [
            {
              "artifact_id": "z2m-yale-definitions",
              "locator": "YRD210-HA-605; lockExtend({battery: {dontDividePercentage: true}})",
              "manifest_id": "z2m-yale-5750b44",
              "status": "not-checked",
              "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/src/devices/yale.ts"
            },
            {
              "artifact_id": "z2m-battery-converter",
              "locator": "battery.convert; batteryPercentageRemaining; dontDividePercentage",
              "manifest_id": "z2m-yale-5750b44",
              "status": "not-checked",
              "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/src/converters/fromZigbee.ts"
            },
            {
              "artifact_id": "z2m-yale-definitions",
              "locator": "definitions[zigbeeModel includes YRD210 PB DB]",
              "manifest_id": "z2m-yale-5750b44",
              "status": "not-checked",
              "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/src/devices/yale.ts"
            }
          ],
          "platform": "Zigbee2MQTT converter",
          "references": [
            {
              "artifact_id": "z2m-yale-definitions",
              "locator": "YRD210-HA-605; lockExtend({battery: {dontDividePercentage: true}})",
              "manifest_id": "z2m-yale-5750b44"
            },
            {
              "artifact_id": "z2m-battery-converter",
              "locator": "battery.convert; batteryPercentageRemaining; dontDividePercentage",
              "manifest_id": "z2m-yale-5750b44"
            }
          ],
          "relationship": "supports",
          "scope": "device-model"
        }
      ],
      "path": "catalog/corroboration/yrd210-battery-normalization.json",
      "review": {
        "author": "github:@infinitywings",
        "lifecycle": "candidate",
        "reviewers": []
      },
      "schema_version": "0.1",
      "sha256": "a86133fe349c2b94f44a56469349e00ce67fdfdd9cf7a4ec8f5936ad8334e367",
      "source_manifests": [
        {
          "id": "zha-yale-d6fcec5",
          "path": "catalog/sources/zha-yale-d6fcec5.json",
          "sha256": "dec7079fabb43777be098f10d5e6dda11642bd926f45df9cc030342380a0e4d7"
        },
        {
          "id": "z2m-yale-5750b44",
          "path": "catalog/sources/z2m-yale-5750b44.json",
          "sha256": "b1b7c256d3d3d805125684a3c680144d8f05b5f9a4b86067e4730cd5953ffa00"
        }
      ],
      "summary": "Both snapshots account for nonstandard battery reporting, but at different layers. Compare the raw attribute and the final entity value before proposing a numeric binding; do not copy either adjustment twice.",
      "title": "Same battery intent, different adaptation"
    },
    {
      "device_id": "yale-yrd210-pb-db",
      "feature_id": "lock-state",
      "id": "yrd210-lock-exposure",
      "kind": "catalog-corroboration",
      "limitations": [
        "Human-authored candidate observations; no independent EdgeLoom review or physical-device test.",
        "Sources are pinned snapshots, not a claim about the currently installed integration, coordinator or firmware.",
        "Relationship labels are curator interpretations, not computed semantic equivalence. Conflicting observations must remain visible.",
        "No SDF correspondence is added for this Zigbee case; lack of a catalog binding is not a limitation of SDF.",
        "Commands, observations and partially locked state must not be collapsed into a single binary semantic binding."
      ],
      "lineage": [
        {
          "depends_on": [],
          "family": "zha-quirks",
          "manifest_id": "zha-yale-d6fcec5"
        },
        {
          "depends_on": [],
          "family": "zigbee-herdsman-converters",
          "manifest_id": "z2m-yale-5750b44"
        }
      ],
      "observations": [
        {
          "claim": "YRD210PBDB220TSLL includes DoorLock in its signature and replacement input clusters. The quirk itself does not define the downstream HA lock entity's states.",
          "conditions": [
            "Endpoint and complete cluster signature must match.",
            "Cluster presence is not whole-platform exposure or hardware success."
          ],
          "evidence_kind": "code-declaration",
          "id": "zha-lock-cluster",
          "identity_evidence": {
            "artifact_id": "zha-yale-realliving",
            "locator": "YRD210PBDB220TSLL.signature.MODELS_INFO",
            "manifest_id": "zha-yale-d6fcec5"
          },
          "identity_match": {
            "manufacturer": "Yale",
            "model": "YRD210 PB DB"
          },
          "locator_checks": [
            {
              "artifact_id": "zha-yale-realliving",
              "locator": "YRD210PBDB220TSLL.signature and replacement; DoorLock.cluster_id",
              "manifest_id": "zha-yale-d6fcec5",
              "status": "not-checked",
              "url": "https://github.com/zigpy/zha-device-handlers/blob/d6fcec59eff9f63f154723500be9378be926d927/zhaquirks/yale/realliving.py"
            },
            {
              "artifact_id": "zha-yale-realliving",
              "locator": "YRD210PBDB220TSLL.signature.MODELS_INFO",
              "manifest_id": "zha-yale-d6fcec5",
              "status": "not-checked",
              "url": "https://github.com/zigpy/zha-device-handlers/blob/d6fcec59eff9f63f154723500be9378be926d927/zhaquirks/yale/realliving.py"
            }
          ],
          "platform": "ZHA quirk",
          "references": [
            {
              "artifact_id": "zha-yale-realliving",
              "locator": "YRD210PBDB220TSLL.signature and replacement; DoorLock.cluster_id",
              "manifest_id": "zha-yale-d6fcec5"
            }
          ],
          "relationship": "context",
          "scope": "device-model"
        },
        {
          "claim": "The shared e.lock() constructor declares state as LOCK/UNLOCK with state/set/get access, and lock_state as not_fully_locked/locked/unlocked with state-only access.",
          "conditions": [
            "Model-only matcher; no explicit manufacturer constraint in this definition.",
            "Exposed metadata is not a firmware capability test or confirmation that all state values occur."
          ],
          "evidence_kind": "code-declaration",
          "id": "z2m-lock-exposes",
          "identity_evidence": {
            "artifact_id": "z2m-yale-definitions",
            "locator": "definitions[zigbeeModel includes YRD210 PB DB]",
            "manifest_id": "z2m-yale-5750b44"
          },
          "identity_match": {
            "model": "YRD210 PB DB"
          },
          "locator_checks": [
            {
              "artifact_id": "z2m-yale-definitions",
              "locator": "YRD210-HA-605; lockExtend; exposes e.lock()",
              "manifest_id": "z2m-yale-5750b44",
              "status": "not-checked",
              "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/src/devices/yale.ts"
            },
            {
              "artifact_id": "z2m-exposes",
              "locator": "presets.lock; Lock.withState; Lock.withLockState; access",
              "manifest_id": "z2m-yale-5750b44",
              "status": "not-checked",
              "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/src/lib/exposes.ts"
            },
            {
              "artifact_id": "z2m-yale-definitions",
              "locator": "definitions[zigbeeModel includes YRD210 PB DB]",
              "manifest_id": "z2m-yale-5750b44",
              "status": "not-checked",
              "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/src/devices/yale.ts"
            }
          ],
          "platform": "Zigbee2MQTT exposes",
          "references": [
            {
              "artifact_id": "z2m-yale-definitions",
              "locator": "YRD210-HA-605; lockExtend; exposes e.lock()",
              "manifest_id": "z2m-yale-5750b44"
            },
            {
              "artifact_id": "z2m-exposes",
              "locator": "presets.lock; Lock.withState; Lock.withLockState; access",
              "manifest_id": "z2m-yale-5750b44"
            }
          ],
          "relationship": "context",
          "scope": "device-model"
        }
      ],
      "path": "catalog/corroboration/yrd210-lock-exposure.json",
      "review": {
        "author": "github:@infinitywings",
        "lifecycle": "candidate",
        "reviewers": []
      },
      "schema_version": "0.1",
      "sha256": "95b83ea52d7cb4fb289c50ea20f69c20c301a4ac224bef78d452b26d04e5e3db",
      "source_manifests": [
        {
          "id": "zha-yale-d6fcec5",
          "path": "catalog/sources/zha-yale-d6fcec5.json",
          "sha256": "dec7079fabb43777be098f10d5e6dda11642bd926f45df9cc030342380a0e4d7"
        },
        {
          "id": "z2m-yale-5750b44",
          "path": "catalog/sources/z2m-yale-5750b44.json",
          "sha256": "b1b7c256d3d3d805125684a3c680144d8f05b5f9a4b86067e4730cd5953ffa00"
        }
      ],
      "summary": "The matching ZHA quirk retains a DoorLock cluster. Zigbee2MQTT declares separate command/state and actual-state fields. These artifacts alone do not establish equal UI behavior or a complete cross-platform mapping.",
      "title": "Cluster declaration versus exposed state"
    }
  ],
  "counts": {
    "assertions": 6,
    "corroboration_records": 4,
    "devices": 3,
    "mapping_sets": 3,
    "source_observations": 9
  },
  "devices": [
    {
      "category": "media",
      "connections": [
        {
          "access": "local",
          "application_protocol": "LG webOS API via aiowebostv (wire-level behavior not traced)",
          "basis": "source-declared",
          "data_updates": "push",
          "id": "ha-webostv",
          "integration": "webostv",
          "limitations": [
            "local_push is the integration manifest's classification, not an observation of a household device or a claim that every path is event-driven. The coordinator also schedules connection recovery.",
            "Transport is unknown for any physical instance. No IP address, account, pairing or network discovery was used.",
            "The pinned integration depends on aiowebostv 0.10.0; that dependency's state derivation and wire-level protocol remain outside this source trace."
          ],
          "platform": "Home Assistant Core",
          "platform_version": "2026.10.0",
          "references": [
            {
              "artifact_id": "webostv-manifest",
              "locator": "/iot_class",
              "manifest_id": "ha-webostv-6a811d3"
            },
            {
              "artifact_id": "webostv-manifest",
              "locator": "/requirements/0",
              "manifest_id": "ha-webostv-6a811d3"
            },
            {
              "artifact_id": "webostv-coordinator",
              "locator": "WebOsTvDataUpdateCoordinator._async_update_data; SCAN_INTERVAL",
              "manifest_id": "ha-webostv-6a811d3"
            }
          ],
          "transports": [
            "unknown"
          ]
        }
      ],
      "features": [
        {
          "id": "power-state",
          "mapping_ids": [],
          "next_steps": [
            "Inspect the pinned adapter branches and separate reported state from physical state.",
            "Supply exact model, webOS and installed HA versions before a model-specific case."
          ],
          "source_references": [
            {
              "artifact_id": "webostv-media-player",
              "locator": "LgWebOSMediaPlayerEntity._update_states (lines 115-181)",
              "manifest_id": "ha-webostv-6a811d3"
            }
          ],
          "summary": "The media-player adapter derives an entity state from client fields; it does not measure electrical power or prove physical screen state.",
          "title": "Power state is not screen state"
        },
        {
          "id": "availability",
          "mapping_ids": [],
          "next_steps": [
            "Trace the availability chain before treating unavailable as off.",
            "Review current configuration without adding a turn-on automation or waking the TV."
          ],
          "source_references": [
            {
              "artifact_id": "webostv-entity",
              "locator": "WebOsTvEntity(CoordinatorEntity) (lines 15-24)",
              "manifest_id": "ha-webostv-6a811d3"
            },
            {
              "artifact_id": "webostv-coordinator",
              "locator": "WebOsTvDataUpdateCoordinator._async_update_data (lines 45-68)",
              "manifest_id": "ha-webostv-6a811d3"
            },
            {
              "artifact_id": "webostv-coordinator-base",
              "locator": "CoordinatorEntity.available (lines 724-728)",
              "manifest_id": "ha-webostv-6a811d3"
            }
          ],
          "summary": "Entity availability follows coordinator success and connection-recovery conditions, separately from the media-player state calculation.",
          "title": "Unavailable is not a power measurement"
        },
        {
          "id": "screen-state",
          "mapping_ids": [],
          "next_steps": [
            "Check source conditions; do not enable or exercise screen control solely for catalog intake.",
            "An exact-model manual and bounded read-only observation remain missing."
          ],
          "source_references": [
            {
              "artifact_id": "webostv-screen",
              "locator": "LgWebOSScreenSwitchEntity.available/is_on/_async_set_screen_state (lines 28-78)",
              "manifest_id": "ha-webostv-6a811d3"
            }
          ],
          "summary": "Screen state and availability have separate conditions; a declared switch does not establish support on every model.",
          "title": "A separate, conditional screen entity"
        }
      ],
      "firmware": "unknown",
      "hardware_evidence": [],
      "id": "lg-webos-tv-family",
      "identifiers": {
        "family": "webOS TV",
        "manufacturer": "LG"
      },
      "identity_evidence": {
        "artifact_id": "webostv-manifest",
        "locator": "/name",
        "manifest_id": "ha-webostv-6a811d3"
      },
      "identity_scope": "device-family",
      "kind": "catalog-device",
      "limitations": [
        "Integration-family source study only; no exact regional model, firmware, G2 compatibility or physical observation established.",
        "No independent review, SDF mapping, driver installation or control recommendation.",
        "Founder-directed, AI-assisted curation. Home Assistant contributors retain upstream credit; their authorship is not EdgeLoom review or endorsement."
      ],
      "manufacturer": "LG",
      "model": "webOS TVs (integration family)",
      "path": "catalog/devices/lg-webos-tv-family.json",
      "protocol": "ip",
      "schema_version": "0.2",
      "sha256": "b79dfce17398eed231336600caacd2fa122436d042d4c764601ced5224116a35"
    },
    {
      "features": [
        {
          "corroboration_ids": [
            "yrd156-ha-configuration-path"
          ],
          "id": "auto-relock",
          "mapping_ids": [
            "smartthings-yrd156-auto-relock-gap"
          ],
          "next_steps": [
            "Compare your exact driver version and assigned profile with these pinned files.",
            "Inspect preferences, handlers and subdrivers before concluding the setting is unavailable.",
            "Report a difference without including private device identifiers or access codes."
          ],
          "summary": "The pinned community configuration describes a duration parameter. It is absent from the examined base-lock capability list and the selected lock-status SDF object. This does not establish that the whole driver or SmartThings UI lacks a setting, or that SDF cannot express one.",
          "title": "Auto-relock duration"
        },
        {
          "corroboration_ids": [
            "yrd156-ha-unknown-state"
          ],
          "id": "lock-state",
          "mapping_ids": [
            "smartthings-yrd156-lock-state"
          ],
          "next_steps": [
            "Establish the active handler path and migration condition before applying this finding.",
            "Keep unknown state and event metadata explicit rather than reducing them to a binary value.",
            "Request review of this bounded correspondence; no complete translator is provided here."
          ],
          "summary": "A strict locked/unlocked subset has a candidate correspondence with the selected SDF property. Unknown state and method/user metadata are not preserved. The examined handler path requires a true migration flag; that state has not been established for a real YRD156.",
          "title": "Lock-state events"
        },
        {
          "id": "access-identities",
          "mapping_ids": [
            "smartthings-yrd156-access-identities"
          ],
          "next_steps": [
            "Review identity, authorization and privacy requirements before proposing a mapping.",
            "Treat write payloads and read/event metadata as different interfaces.",
            "Never submit real PINs, lock codes, credential values or household identifiers."
          ],
          "summary": "The examined migrated path carries user and credential metadata absent from the selected lock-code SDF object. A PIN write payload and the reported identity records do not establish a reversible value mapping.",
          "title": "Access identity and lock codes"
        }
      ],
      "firmware": "Unknown; no real-unit firmware or SLGA_MIGRATED state recorded",
      "hardware_evidence": [],
      "id": "yale-yrd156",
      "identifiers": {
        "manufacturer_id": "0x0129",
        "product_id": "0x0508",
        "product_type": "0x803A"
      },
      "identity_evidence": {
        "artifact_id": "smartthings-zwave-lock-fingerprints",
        "locator": "zwaveManufacturer[id=Yale/YRD156]",
        "manifest_id": "smartthings-zwave-lock-6b8a9cf"
      },
      "kind": "catalog-device",
      "limitations": [
        "The three original mapping records describe this one device, not three supported devices.",
        "All associated mappings are founder-authored candidates without independent review.",
        "No physical YRD156 or SmartThings hub has been tested for these records.",
        "Published source artifacts do not prove behavior of your installed driver or firmware.",
        "No installation instruction or automated Z-Wave patch is offered for this case.",
        "Community configuration is not manufacturer authority; hosted SDF models are not adoption evidence."
      ],
      "manufacturer": "Yale",
      "model": "YRD156",
      "path": "catalog/devices/yale-yrd156.yaml",
      "protocol": "zwave",
      "schema_version": "0.1",
      "sha256": "66a4059d9313680bba8739df3aaac08f958e1671a2ba99dd6e6ef6cfea93a49d"
    },
    {
      "features": [
        {
          "corroboration_ids": [
            "yrd210-battery-normalization"
          ],
          "id": "battery",
          "mapping_ids": [],
          "next_steps": [
            "Compare the exact manufacturer/model and full endpoint/cluster signature.",
            "Report a sanitized raw battery attribute and final entity value, including firmware and platform versions.",
            "Do not apply either adjustment twice or treat this report as a patch recommendation."
          ],
          "summary": "Two upstream adaptations for the same model string, at different layers. Raw cluster values and final entity percentages are not interchangeable.",
          "title": "Battery normalization"
        },
        {
          "corroboration_ids": [
            "yrd210-lock-exposure"
          ],
          "id": "lock-state",
          "mapping_ids": [],
          "next_steps": [
            "Distinguish a requested lock command from the reported actual lock state.",
            "Retain partially locked and unknown values when investigating a correspondence.",
            "Contribute a source correction or sanitized observation; never include real PINs or user identifiers."
          ],
          "summary": "A cluster declaration and a richer exposes declaration are different evidence scopes. No complete cross-platform or SDF mapping has been established.",
          "title": "Lock control and observed state"
        }
      ],
      "firmware": "Unknown; exact endpoint/cluster signature and installed platform versions unconfirmed",
      "hardware_evidence": [],
      "id": "yale-yrd210-pb-db",
      "identifiers": {
        "manufacturer": "Yale",
        "model": "YRD210 PB DB"
      },
      "identity_evidence": {
        "artifact_id": "zha-yale-realliving",
        "locator": "YRD210PBDB220TSLL.signature.MODELS_INFO",
        "manifest_id": "zha-yale-d6fcec5"
      },
      "kind": "catalog-device",
      "limitations": [
        "Founder-authored candidate corroboration only; no independent review or hardware testing.",
        "Not the YRD156 Z-Wave case; protocol variants and nearby marketing models are not interchangeable.",
        "ZHA requires the full device signature; Zigbee2MQTT's selected entry uses a weaker model-only matcher.",
        "No SDF binding, safe installation recipe or automatic repair is provided for this case.",
        "Source lineage is declared and incomplete; no independent-source or adoption score is inferred."
      ],
      "manufacturer": "Yale",
      "model": "YRD210 PB DB (Zigbee)",
      "path": "catalog/devices/yale-yrd210-pb-db.json",
      "protocol": "zigbee",
      "schema_version": "0.1",
      "sha256": "52e249d90c1594ec2fc52e68dcdaff89bf0d8d016c9a551cca02ce2114814ea2"
    }
  ],
  "generator": {
    "declared_core_revision": "d7e801d10f02b6effe4d8403ec997913bfd7bb2c",
    "implementation_digest": "f31f7ef401a2085979ef2d63c687b76a60c2ac5a21b910d46ae0f5f6f3ea5778",
    "package_version_label": "0.2.0",
    "policy": "catalog/v0.1",
    "version_label_is_not_release_attestation": true
  },
  "input_digest": "26c0d572d3e7e04ec9ba3d7bdabd4439feadca81902c8a5a8381bb7aaa3e4b1e",
  "limitations": [
    "Device associations, classifications, license labels, and review states are catalog-author declarations, not independently authenticated by this build.",
    "Resolved locators establish field existence only, not the interpretation, completeness, runtime behavior, SDF conformance, or interoperability of an artifact.",
    "Selectors, JSON5 and Lua locators need manual review. No upstream Lua is executed.",
    "Profile absence is not whole-driver or UI absence. A missing property in a particular SDF model is not a limitation of SDF itself.",
    "Hardware-evidence links are reported observations, not tests performed by this tool. No patch availability is inferred.",
    "Cross-source observations and lineage are curator declarations. Shared backends are not independent evidence; upstream test fixtures are not physical-device tests or independent EdgeLoom review. No source count promotes a candidate."
  ],
  "mapping_sets": [
    {
      "evidence": [
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-lock-fingerprints",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.yrd156-profile-assignment",
          "locator": "zwaveManufacturer[id=Yale/YRD156]",
          "summary": "The pinned fingerprint identifies product tuple 0x0129/0x803A/0x0508 and assigns the YRD156 to the base-lock profile used by this record."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-responses",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-user-credential-records",
          "locator": "lua:function ZwaveHandlers.user_code_report",
          "summary": "On the current handler path, the function derives userIndex, userName, userType, credentialIndex, credentialType, and credentialName records from Z-Wave user-code reports."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-base-lock-profile",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-access-profile",
          "locator": "/components/0/capabilities",
          "summary": "The base-lock profile separately exposes lockCodes, lockCredentials, and lockUsers capabilities."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-capability-handlers",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-pin-write-path",
          "locator": "lua:function CapabilityHandlers.add_credential|update_credential",
          "summary": "Credential data is accepted as a write-time UserCode payload. The pinned response path records slot occupancy and identity metadata rather than returning or caching the PIN value."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-lock-driver-entry",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-current-handler-registration",
          "locator": "lua:driver_template.capability_handlers|driver_template.zwave_handlers",
          "summary": "The main driver template registers the current lockUsers, lockCredentials, and user-code report handlers; migrated marker state is emitted only when the persisted migration flag is true."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-legacy-dispatch-gate",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-legacy-dispatch-gate",
          "locator": "lua:return function(opts, driver, device, ...)",
          "summary": "When SLGA_MIGRATED is unset or false, the pinned can-handle function routes the device to the legacy subdriver."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-legacy-migration-handler",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-migration-transition",
          "locator": "lua:function migrate",
          "summary": "The explicit legacy migration command emits lockUsers and lockCredentials state and then persists SLGA_MIGRATED as true."
        },
        {
          "artifact": {
            "artifact_id": "onedm-ocf-lock-code",
            "manifest_id": "onedm-ocf-lock-models-c97d095"
          },
          "id": "evidence.ocf-lock-code-list",
          "locator": "/sdfObject/lock.code/sdfProperty/lockCodeList",
          "summary": "The SDF model defines an array of string lock-code values but no user or credential identity, type, lifecycle, authorization, or privacy metadata."
        }
      ],
      "id": "smartthings-yrd156-access-identities",
      "kind": "catalog-mapping-set",
      "limitations": [
        "No real PIN, lock code, user identifier, or device credential is stored here.",
        "The analysis is based on pinned source artifacts, not device or account tests.",
        "No pinned record establishes the SLGA_MIGRATED state of a real YRD156. Devices without a true migration flag use legacy/default handlers whose user-code behavior is outside this mapping set.",
        "The SDF object is a neutral data model, not an authorization or credential management specification.",
        "Contract version 0.1 lacks a driver-source artifact role; the pinned Lua source is transparently recorded under the generic evidence role."
      ],
      "locator_checks": [
        {
          "id": "device.yrd156",
          "locator": "zwaveManufacturer[id=Yale/YRD156]",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/fingerprints.yml"
        },
        {
          "id": "device.zwave-user-code-reports",
          "locator": "lua:function ZwaveHandlers.user_code_report",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/lock_handlers/zwave_responses.lua"
        },
        {
          "id": "platform.smartthings-access-identities",
          "locator": "/components/0/capabilities[id=lockCredentials|lockUsers]",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/profiles/base-lock.yml"
        },
        {
          "id": "platform.smartthings-credential-payload",
          "locator": "/components/0/capabilities[id=lockCredentials]",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/profiles/base-lock.yml"
        },
        {
          "id": "neutral.ocf-lock-code-list",
          "locator": "/sdfObject/lock.code/sdfProperty/lockCodeList",
          "status": "not-checked",
          "url": "https://github.com/one-data-model/ocf-models/blob/c97d095c239539b8242ceb4f12cf6deaeedb16e2/sdfObject/sdfobject-lock_code.sdf.json"
        },
        {
          "id": "evidence.yrd156-profile-assignment",
          "locator": "zwaveManufacturer[id=Yale/YRD156]",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/fingerprints.yml"
        },
        {
          "id": "evidence.smartthings-user-credential-records",
          "locator": "lua:function ZwaveHandlers.user_code_report",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/lock_handlers/zwave_responses.lua"
        },
        {
          "id": "evidence.smartthings-access-profile",
          "locator": "/components/0/capabilities",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/profiles/base-lock.yml"
        },
        {
          "id": "evidence.smartthings-pin-write-path",
          "locator": "lua:function CapabilityHandlers.add_credential|update_credential",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/lock_handlers/capabilities.lua"
        },
        {
          "id": "evidence.smartthings-current-handler-registration",
          "locator": "lua:driver_template.capability_handlers|driver_template.zwave_handlers",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/init.lua"
        },
        {
          "id": "evidence.smartthings-legacy-dispatch-gate",
          "locator": "lua:return function(opts, driver, device, ...)",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/legacy-handlers/can_handle.lua"
        },
        {
          "id": "evidence.smartthings-migration-transition",
          "locator": "lua:function migrate",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/legacy-handlers/init.lua"
        },
        {
          "id": "evidence.ocf-lock-code-list",
          "locator": "/sdfObject/lock.code/sdfProperty/lockCodeList",
          "status": "not-checked",
          "url": "https://github.com/one-data-model/ocf-models/blob/c97d095c239539b8242ceb4f12cf6deaeedb16e2/sdfObject/sdfobject-lock_code.sdf.json"
        }
      ],
      "mappings": [
        {
          "classification": "unbound",
          "directions": [
            "read",
            "write",
            "event"
          ],
          "evidence_refs": [
            "evidence.yrd156-profile-assignment",
            "evidence.smartthings-user-credential-records",
            "evidence.smartthings-access-profile",
            "evidence.smartthings-pin-write-path",
            "evidence.smartthings-current-handler-registration",
            "evidence.smartthings-legacy-dispatch-gate",
            "evidence.smartthings-migration-transition",
            "evidence.ocf-lock-code-list"
          ],
          "from": "platform.smartthings-access-identities",
          "id": "map.smartthings-access-identities-to-sdf",
          "limitations": [
            "The conclusion is bounded to the pinned lock-code SDF object; other SDF objects or future extensions might represent identity metadata."
          ],
          "unbound_reason": "neutral-model-missing"
        },
        {
          "classification": "ambiguous",
          "directions": [
            "write"
          ],
          "evidence_refs": [
            "evidence.yrd156-profile-assignment",
            "evidence.smartthings-user-credential-records",
            "evidence.smartthings-access-profile",
            "evidence.smartthings-pin-write-path",
            "evidence.smartthings-current-handler-registration",
            "evidence.smartthings-legacy-dispatch-gate",
            "evidence.smartthings-migration-transition",
            "evidence.ocf-lock-code-list"
          ],
          "from": "platform.smartthings-credential-payload",
          "id": "map.smartthings-credential-payload-to-sdf-list",
          "limitations": [
            "The write path accepts credentialData as a PIN payload, while the report path represents slot occupancy and identity metadata; the files do not establish one reversible value-level representation.",
            "No transformation is proposed for security-sensitive credential values."
          ],
          "to": "neutral.ocf-lock-code-list"
        }
      ],
      "nodes": [
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-lock-fingerprints",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "device.yrd156",
          "label": "SmartThings YRD156 Z-Wave fingerprint and base-lock assignment",
          "layer": "device-protocol-support",
          "locator": "zwaveManufacturer[id=Yale/YRD156]"
        },
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-responses",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "device.zwave-user-code-reports",
          "label": "Z-Wave user-code reports on the post-migration handler path",
          "layer": "device-protocol-support",
          "locator": "lua:function ZwaveHandlers.user_code_report"
        },
        {
          "artifact": {
            "artifact_id": "smartthings-base-lock-profile",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "platform.smartthings-access-identities",
          "label": "Post-migration SmartThings credential and user identity capabilities",
          "layer": "platform-exposure",
          "locator": "/components/0/capabilities[id=lockCredentials|lockUsers]"
        },
        {
          "artifact": {
            "artifact_id": "smartthings-base-lock-profile",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "platform.smartthings-credential-payload",
          "label": "Post-migration SmartThings credential write payload",
          "layer": "platform-exposure",
          "locator": "/components/0/capabilities[id=lockCredentials]"
        },
        {
          "artifact": {
            "artifact_id": "onedm-ocf-lock-code",
            "manifest_id": "onedm-ocf-lock-models-c97d095"
          },
          "id": "neutral.ocf-lock-code-list",
          "label": "OCF-derived array of lock-code strings",
          "layer": "neutral-sdf-representation",
          "locator": "/sdfObject/lock.code/sdfProperty/lockCodeList"
        }
      ],
      "path": "catalog/mappings/smartthings-yrd156-access-identities.yaml",
      "review": {
        "author": "github:@infinitywings",
        "lifecycle": "candidate",
        "notes": "Founder-authored candidate for the migrated handler path; not independently reviewed or verified.",
        "reviewers": []
      },
      "schema_version": "0.1",
      "scope": {
        "domain": "door-lock",
        "platform": "smartthings",
        "protocols": [
          "zwave"
        ]
      },
      "sha256": "91af6fbea3eec1f63f49782b5d54ddfc67b4663a6a3860f521cb92f0bcdd8fe7",
      "source_manifests": [
        {
          "id": "smartthings-zwave-lock-6b8a9cf",
          "path": "catalog/sources/smartthings-zwave-lock-6b8a9cf.yaml",
          "sha256": "3bc27fe065666a0a56022c97b1b9453779f783d8bed81fd400ab4c63b5e749b0"
        },
        {
          "id": "onedm-ocf-lock-models-c97d095",
          "path": "catalog/sources/onedm-ocf-lock-models-c97d095.yaml",
          "sha256": "e2b0ae69e3b025b43469e9a536898c33583e5beede3ad49b6c49d8d39c83315e"
        }
      ],
      "title": "Yale YRD156 migrated-path access identity and lock-code candidate"
    },
    {
      "evidence": [
        {
          "artifact": {
            "artifact_id": "zwave-js-yrd156-config",
            "manifest_id": "zwave-js-yrd156-c4c599e"
          },
          "id": "evidence.yrd156-community-identity",
          "locator": "/manufacturerId|/devices/0/productType|/devices/0/productId",
          "summary": "The community configuration identifies the YRD156 with product tuple 0x0129/0x803A/0x0508."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-lock-fingerprints",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.yrd156-smartthings-profile-assignment",
          "locator": "zwaveManufacturer[id=Yale/YRD156]",
          "summary": "The SmartThings fingerprint uses the same product tuple and assigns it to the base-lock profile examined for the platform-exposure gap."
        },
        {
          "artifact": {
            "artifact_id": "zwave-js-yrd156-config",
            "manifest_id": "zwave-js-yrd156-c4c599e"
          },
          "id": "evidence.yrd156-auto-relock-import",
          "locator": "/paramInformation/[#=3]",
          "summary": "The pinned community YRD156 config imports auto_relock_time_180 for configuration parameter 3."
        },
        {
          "artifact": {
            "artifact_id": "zwave-js-yale-template",
            "manifest_id": "zwave-js-yrd156-c4c599e"
          },
          "id": "evidence.auto-relock-template",
          "locator": "/auto_relock_time_180",
          "summary": "The imported template describes Auto Relock Time in seconds with a default value of 30 and imports the named base_0-180_nounit definition."
        },
        {
          "artifact": {
            "artifact_id": "zwave-js-master-template",
            "manifest_id": "zwave-js-yrd156-c4c599e"
          },
          "id": "evidence.auto-relock-range",
          "locator": "/base_0-180_nounit",
          "summary": "The pinned shared base definition supplies an unsigned minimum of 0 and maximum of 180 for the imported duration field."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-base-lock-profile",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.base-lock-capability-enumeration",
          "locator": "/components/0/capabilities",
          "summary": "The complete pinned base-lock capability list has lock, lockCodes, lockCredentials, lockUsers, battery, and refresh, but no auto-relock field."
        },
        {
          "artifact": {
            "artifact_id": "onedm-ocf-lock-status",
            "manifest_id": "onedm-ocf-lock-models-c97d095"
          },
          "id": "evidence.ocf-lock-status-property-enumeration",
          "locator": "/sdfObject/lock.status/sdfProperty",
          "summary": "The complete pinned lock-status property set contains lockState only and does not contain an auto-relock enable or duration property."
        }
      ],
      "id": "smartthings-yrd156-auto-relock-gap",
      "kind": "catalog-mapping-set",
      "limitations": [
        "The zwave-js configuration is community evidence, not Yale authority.",
        "No physical YRD156 or SmartThings hub was tested for this candidate.",
        "The current schema requires a neutral-layer context node even when the mapping conclusion is neutral-model-missing; that context is the bounded lock-status property set examined for this record."
      ],
      "locator_checks": [
        {
          "id": "device.yrd156-auto-relock-time",
          "locator": "/auto_relock_time_180",
          "status": "not-checked",
          "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/0x0129/templates/yale_template.json"
        },
        {
          "id": "platform.smartthings-base-lock-capabilities",
          "locator": "/components/0/capabilities",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/profiles/base-lock.yml"
        },
        {
          "id": "neutral.ocf-lock-status-properties",
          "locator": "/sdfObject/lock.status/sdfProperty",
          "status": "not-checked",
          "url": "https://github.com/one-data-model/ocf-models/blob/c97d095c239539b8242ceb4f12cf6deaeedb16e2/sdfObject/sdfobject-lock_status.sdf.json"
        },
        {
          "id": "evidence.yrd156-community-identity",
          "locator": "/manufacturerId|/devices/0/productType|/devices/0/productId",
          "status": "not-checked",
          "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/0x0129/yrd156.json"
        },
        {
          "id": "evidence.yrd156-smartthings-profile-assignment",
          "locator": "zwaveManufacturer[id=Yale/YRD156]",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/fingerprints.yml"
        },
        {
          "id": "evidence.yrd156-auto-relock-import",
          "locator": "/paramInformation/[#=3]",
          "status": "not-checked",
          "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/0x0129/yrd156.json"
        },
        {
          "id": "evidence.auto-relock-template",
          "locator": "/auto_relock_time_180",
          "status": "not-checked",
          "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/0x0129/templates/yale_template.json"
        },
        {
          "id": "evidence.auto-relock-range",
          "locator": "/base_0-180_nounit",
          "status": "not-checked",
          "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/templates/master_template.json"
        },
        {
          "id": "evidence.base-lock-capability-enumeration",
          "locator": "/components/0/capabilities",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/profiles/base-lock.yml"
        },
        {
          "id": "evidence.ocf-lock-status-property-enumeration",
          "locator": "/sdfObject/lock.status/sdfProperty",
          "status": "not-checked",
          "url": "https://github.com/one-data-model/ocf-models/blob/c97d095c239539b8242ceb4f12cf6deaeedb16e2/sdfObject/sdfobject-lock_status.sdf.json"
        }
      ],
      "mappings": [
        {
          "classification": "unbound",
          "directions": [
            "read",
            "write"
          ],
          "evidence_refs": [
            "evidence.yrd156-community-identity",
            "evidence.yrd156-smartthings-profile-assignment",
            "evidence.yrd156-auto-relock-import",
            "evidence.auto-relock-template",
            "evidence.auto-relock-range",
            "evidence.base-lock-capability-enumeration"
          ],
          "from": "device.yrd156-auto-relock-time",
          "id": "map.yrd156-auto-relock-to-smartthings",
          "limitations": [
            "Absence is established only for the pinned base-lock profile; another profile, custom capability, or later commit could expose this setting."
          ],
          "unbound_reason": "platform-not-exposed"
        },
        {
          "classification": "unbound",
          "directions": [
            "read",
            "write"
          ],
          "evidence_refs": [
            "evidence.yrd156-community-identity",
            "evidence.yrd156-auto-relock-import",
            "evidence.auto-relock-template",
            "evidence.auto-relock-range",
            "evidence.ocf-lock-status-property-enumeration"
          ],
          "from": "device.yrd156-auto-relock-time",
          "id": "map.yrd156-auto-relock-to-sdf",
          "limitations": [
            "The finding is bounded to the pinned OCF-derived lock-status model and does not assert that no other SDF model can describe auto relock."
          ],
          "unbound_reason": "neutral-model-missing"
        }
      ],
      "nodes": [
        {
          "artifact": {
            "artifact_id": "zwave-js-yale-template",
            "manifest_id": "zwave-js-yrd156-c4c599e"
          },
          "id": "device.yrd156-auto-relock-time",
          "label": "Community-described YRD156 auto-relock duration parameter",
          "layer": "device-protocol-support",
          "locator": "/auto_relock_time_180"
        },
        {
          "artifact": {
            "artifact_id": "smartthings-base-lock-profile",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "platform.smartthings-base-lock-capabilities",
          "label": "SmartThings base-lock capability list",
          "layer": "platform-exposure",
          "locator": "/components/0/capabilities"
        },
        {
          "artifact": {
            "artifact_id": "onedm-ocf-lock-status",
            "manifest_id": "onedm-ocf-lock-models-c97d095"
          },
          "id": "neutral.ocf-lock-status-properties",
          "label": "Property set in the OCF-derived lock-status SDF object",
          "layer": "neutral-sdf-representation",
          "locator": "/sdfObject/lock.status/sdfProperty"
        }
      ],
      "path": "catalog/mappings/smartthings-yrd156-auto-relock-gap.yaml",
      "review": {
        "author": "github:@infinitywings",
        "lifecycle": "candidate",
        "notes": "Founder-authored candidate; not independently reviewed or verified.",
        "reviewers": []
      },
      "schema_version": "0.1",
      "scope": {
        "domain": "door-lock",
        "platform": "smartthings",
        "protocols": [
          "zwave"
        ]
      },
      "sha256": "fc7a93164bcca584a4f7dabc60c2ee322f426f80bc52cb8edbf943ad235fafe8",
      "source_manifests": [
        {
          "id": "smartthings-zwave-lock-6b8a9cf",
          "path": "catalog/sources/smartthings-zwave-lock-6b8a9cf.yaml",
          "sha256": "3bc27fe065666a0a56022c97b1b9453779f783d8bed81fd400ab4c63b5e749b0"
        },
        {
          "id": "zwave-js-yrd156-c4c599e",
          "path": "catalog/sources/zwave-js-yrd156-c4c599e.yaml",
          "sha256": "72d981b9af12b3d525a45bb0f5dc37941bab918287ac327294e5ac87c97790de"
        },
        {
          "id": "onedm-ocf-lock-models-c97d095",
          "path": "catalog/sources/onedm-ocf-lock-models-c97d095.yaml",
          "sha256": "e2b0ae69e3b025b43469e9a536898c33583e5beede3ad49b6c49d8d39c83315e"
        }
      ],
      "title": "Yale YRD156 auto-relock exposure and neutral-model gaps"
    },
    {
      "evidence": [
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-lock-fingerprints",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.yrd156-profile-assignment",
          "locator": "zwaveManufacturer[id=Yale/YRD156]",
          "summary": "The pinned fingerprint identifies product tuple 0x0129/0x803A/0x0508 and assigns the YRD156 to the base-lock profile."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-responses",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-lock-event-values",
          "locator": "lua:function ZwaveHandlers.door_operation_event_handler",
          "summary": "On the current handler path, the pinned function maps a strict operation subset to locked or unlocked, maps other outcomes to unknown, and can attach method and user data."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-lock-driver-entry",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-current-handler-registration",
          "locator": "lua:driver_template.zwave_handlers",
          "summary": "The main driver template registers the pinned current Z-Wave response functions for notification and user-code reports."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-legacy-dispatch-gate",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-legacy-dispatch-gate",
          "locator": "lua:return function(opts, driver, device, ...)",
          "summary": "When the persisted SLGA_MIGRATED field is unset or false, the pinned can-handle function selects the legacy subdriver instead of this path."
        },
        {
          "artifact": {
            "artifact_id": "smartthings-base-lock-profile",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "evidence.smartthings-lock-profile",
          "locator": "/components/0/capabilities[id=lock]",
          "summary": "The base-lock profile exposes the native SmartThings lock capability."
        },
        {
          "artifact": {
            "artifact_id": "onedm-ocf-lock-status",
            "manifest_id": "onedm-ocf-lock-models-c97d095"
          },
          "id": "evidence.ocf-binary-lock-state",
          "locator": "/sdfObject/lock.status/sdfProperty/lockState",
          "summary": "The pinned SDF property allows exactly Locked and Unlocked strings."
        }
      ],
      "id": "smartthings-yrd156-lock-state",
      "kind": "catalog-mapping-set",
      "limitations": [
        "The analysis is based on pinned published artifacts, not physical-device tests.",
        "No pinned record establishes the SLGA_MIGRATED state of a real YRD156. Devices without a true migration flag use legacy/default handlers whose behavior is outside this mapping set.",
        "The OCF-derived SDF repository location is not evidence of OneDM adoption, endorsement, active maintenance, or interoperability.",
        "Contract version 0.1 lacks a driver-source artifact role; the pinned Lua source is transparently recorded under the generic evidence role."
      ],
      "locator_checks": [
        {
          "id": "device.yrd156",
          "locator": "zwaveManufacturer[id=Yale/YRD156]",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/fingerprints.yml"
        },
        {
          "id": "device.zwave-access-control-events",
          "locator": "lua:function ZwaveHandlers.door_operation_event_handler",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/lock_handlers/zwave_responses.lua"
        },
        {
          "id": "platform.smartthings-lock-binary-subset",
          "locator": "/components/0/capabilities[id=lock]",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/profiles/base-lock.yml"
        },
        {
          "id": "neutral.ocf-lock-state",
          "locator": "/sdfObject/lock.status/sdfProperty/lockState",
          "status": "not-checked",
          "url": "https://github.com/one-data-model/ocf-models/blob/c97d095c239539b8242ceb4f12cf6deaeedb16e2/sdfObject/sdfobject-lock_status.sdf.json"
        },
        {
          "id": "evidence.yrd156-profile-assignment",
          "locator": "zwaveManufacturer[id=Yale/YRD156]",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/fingerprints.yml"
        },
        {
          "id": "evidence.smartthings-lock-event-values",
          "locator": "lua:function ZwaveHandlers.door_operation_event_handler",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/lock_handlers/zwave_responses.lua"
        },
        {
          "id": "evidence.smartthings-current-handler-registration",
          "locator": "lua:driver_template.zwave_handlers",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/init.lua"
        },
        {
          "id": "evidence.smartthings-legacy-dispatch-gate",
          "locator": "lua:return function(opts, driver, device, ...)",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/legacy-handlers/can_handle.lua"
        },
        {
          "id": "evidence.smartthings-lock-profile",
          "locator": "/components/0/capabilities[id=lock]",
          "status": "not-checked",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/profiles/base-lock.yml"
        },
        {
          "id": "evidence.ocf-binary-lock-state",
          "locator": "/sdfObject/lock.status/sdfProperty/lockState",
          "status": "not-checked",
          "url": "https://github.com/one-data-model/ocf-models/blob/c97d095c239539b8242ceb4f12cf6deaeedb16e2/sdfObject/sdfobject-lock_status.sdf.json"
        }
      ],
      "mappings": [
        {
          "classification": "one-to-one",
          "directions": [
            "event"
          ],
          "evidence_refs": [
            "evidence.yrd156-profile-assignment",
            "evidence.smartthings-lock-event-values",
            "evidence.smartthings-current-handler-registration",
            "evidence.smartthings-legacy-dispatch-gate",
            "evidence.smartthings-lock-profile",
            "evidence.ocf-binary-lock-state"
          ],
          "from": "platform.smartthings-lock-binary-subset",
          "id": "map.smartthings-binary-state-to-sdf",
          "limitations": [
            "This classification covers only the strict locked/unlocked subset and does not claim a complete SmartThings lock-state translation.",
            "Enum spelling conversion is not represented by contract version 0.1."
          ],
          "to": "neutral.ocf-lock-state"
        },
        {
          "classification": "lossy",
          "directions": [
            "event"
          ],
          "evidence_refs": [
            "evidence.yrd156-profile-assignment",
            "evidence.smartthings-lock-event-values",
            "evidence.smartthings-current-handler-registration",
            "evidence.smartthings-legacy-dispatch-gate",
            "evidence.ocf-binary-lock-state"
          ],
          "from": "device.zwave-access-control-events",
          "id": "map.smartthings-extended-event-to-sdf",
          "limitations": [
            "The SDF property has no value corresponding to SmartThings unknown.",
            "Method, user index, user name, and user type metadata are not preserved."
          ],
          "loss_dimensions": [
            "enumeration",
            "other"
          ],
          "to": "neutral.ocf-lock-state"
        }
      ],
      "nodes": [
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-lock-fingerprints",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "device.yrd156",
          "label": "SmartThings YRD156 Z-Wave fingerprint and base-lock assignment",
          "layer": "device-protocol-support",
          "locator": "zwaveManufacturer[id=Yale/YRD156]"
        },
        {
          "artifact": {
            "artifact_id": "smartthings-zwave-responses",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "device.zwave-access-control-events",
          "label": "Z-Wave access-control events on the post-migration handler path",
          "layer": "device-protocol-support",
          "locator": "lua:function ZwaveHandlers.door_operation_event_handler"
        },
        {
          "artifact": {
            "artifact_id": "smartthings-base-lock-profile",
            "manifest_id": "smartthings-zwave-lock-6b8a9cf"
          },
          "id": "platform.smartthings-lock-binary-subset",
          "label": "Strict locked and unlocked subset of the SmartThings lock capability",
          "layer": "platform-exposure",
          "locator": "/components/0/capabilities[id=lock]"
        },
        {
          "artifact": {
            "artifact_id": "onedm-ocf-lock-status",
            "manifest_id": "onedm-ocf-lock-models-c97d095"
          },
          "id": "neutral.ocf-lock-state",
          "label": "OCF-derived SDF Locked and Unlocked state property",
          "layer": "neutral-sdf-representation",
          "locator": "/sdfObject/lock.status/sdfProperty/lockState"
        }
      ],
      "path": "catalog/mappings/smartthings-yrd156-lock-state.yaml",
      "review": {
        "author": "github:@infinitywings",
        "lifecycle": "candidate",
        "notes": "Founder-authored candidate for the migrated handler path; not independently reviewed or verified.",
        "reviewers": []
      },
      "schema_version": "0.1",
      "scope": {
        "domain": "door-lock",
        "platform": "smartthings",
        "protocols": [
          "zwave"
        ]
      },
      "sha256": "845267251582e4d658983c0716f7150a0ff302f25979d093a766e7d3be9ef5f7",
      "source_manifests": [
        {
          "id": "smartthings-zwave-lock-6b8a9cf",
          "path": "catalog/sources/smartthings-zwave-lock-6b8a9cf.yaml",
          "sha256": "3bc27fe065666a0a56022c97b1b9453779f783d8bed81fd400ab4c63b5e749b0"
        },
        {
          "id": "onedm-ocf-lock-models-c97d095",
          "path": "catalog/sources/onedm-ocf-lock-models-c97d095.yaml",
          "sha256": "e2b0ae69e3b025b43469e9a536898c33583e5beede3ad49b6c49d8d39c83315e"
        }
      ],
      "title": "Yale YRD156 migrated-path SmartThings lock-state mapping candidate"
    }
  ],
  "report_version": "0.1",
  "sources": [
    {
      "artifacts": [
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Integration identity, local_push declaration and pinned dependency.",
          "id": "webostv-manifest",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "application/json",
          "path": "homeassistant/components/webostv/manifest.json",
          "sha256": "c2f4ea88a3508cc22568a7c6e3b427b4ec8c281653352eebc3f583111d93b78e",
          "source_maturity": "community",
          "url": "https://github.com/home-assistant/core/blob/6a811d3359c7b2076dc9e1cf900843a129c044af/homeassistant/components/webostv/manifest.json"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Entity state construction from the client's TV state.",
          "id": "webostv-media-player",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-python",
          "path": "homeassistant/components/webostv/media_player.py",
          "sha256": "25e4b06e61577dd5c896d163d4d8379c052c01a334e3638309e95a1ebe4edbe1",
          "source_maturity": "community",
          "url": "https://github.com/home-assistant/core/blob/6a811d3359c7b2076dc9e1cf900843a129c044af/homeassistant/components/webostv/media_player.py"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "CoordinatorEntity inheritance and integration-level manufacturer identity.",
          "id": "webostv-entity",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-python",
          "path": "homeassistant/components/webostv/entity.py",
          "sha256": "cd3451b66ce5e14f73deca1ddce58d3908b96cd2d2fbf8d5c8582803a2416f27",
          "source_maturity": "community",
          "url": "https://github.com/home-assistant/core/blob/6a811d3359c7b2076dc9e1cf900843a129c044af/homeassistant/components/webostv/entity.py"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Connection recovery and UpdateFailed conditions.",
          "id": "webostv-coordinator",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-python",
          "path": "homeassistant/components/webostv/coordinator.py",
          "sha256": "3788a885cb8dd0c71b877cc4cd5996634d695a834ed9be8bcad3110fa37ab4c6",
          "source_maturity": "community",
          "url": "https://github.com/home-assistant/core/blob/6a811d3359c7b2076dc9e1cf900843a129c044af/homeassistant/components/webostv/coordinator.py"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Shared CoordinatorEntity availability property.",
          "id": "webostv-coordinator-base",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-python",
          "path": "homeassistant/helpers/update_coordinator.py",
          "sha256": "0af39b34a677ad53246333b80cbd0dfd73724af0a03d5cce39032640591b82ec",
          "source_maturity": "community",
          "url": "https://github.com/home-assistant/core/blob/6a811d3359c7b2076dc9e1cf900843a129c044af/homeassistant/helpers/update_coordinator.py"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Separate screen switch state and availability conditions.",
          "id": "webostv-screen",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-python",
          "path": "homeassistant/components/webostv/switch.py",
          "sha256": "2ea11aa9442809ed132eb3c406b8cf6c29e80649ec524671b9e7fd47eef61f80",
          "source_maturity": "community",
          "url": "https://github.com/home-assistant/core/blob/6a811d3359c7b2076dc9e1cf900843a129c044af/homeassistant/components/webostv/switch.py"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Pinned Home Assistant Core license.",
          "id": "webostv-license",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/plain",
          "path": "LICENSE.md",
          "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
          "source_maturity": "community",
          "url": "https://github.com/home-assistant/core/blob/6a811d3359c7b2076dc9e1cf900843a129c044af/LICENSE.md"
        }
      ],
      "description": "Home Assistant 2026.10.0 webOS integration-family state paths. Not a model-specific driver match or physical result.",
      "ecosystem": "home-assistant",
      "id": "ha-webostv-6a811d3",
      "kind": "source-manifest",
      "path": "catalog/sources/ha-webostv-6a811d3.json",
      "repository": {
        "commit": "6a811d3359c7b2076dc9e1cf900843a129c044af",
        "url": "https://github.com/home-assistant/core"
      },
      "schema_version": "0.1",
      "sha256": "186e0d645a2e45c318e6a595b23ae0f1db66573226339752927302721ba0961f"
    },
    {
      "artifacts": [
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Lock entity and generic configuration implementation.",
          "id": "ha-zwave-lock",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-python",
          "path": "homeassistant/components/zwave_js/lock.py",
          "sha256": "0ab02d31057ee1f1620318375138131835e1a637c23934f44e02772f4d80c505",
          "source_maturity": "official",
          "url": "https://github.com/home-assistant/core/blob/067f88281665776424fbb4826697c46d5e7a6837/homeassistant/components/zwave_js/lock.py"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Service field declarations, including configuration parameter writes.",
          "id": "ha-zwave-services",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "application/yaml",
          "path": "homeassistant/components/zwave_js/services.yaml",
          "sha256": "1f36ce2ac6a80e9042015a0f670456425e41fcb7aff0383544fab6713b8667d0",
          "source_maturity": "official",
          "url": "https://github.com/home-assistant/core/blob/067f88281665776424fbb4826697c46d5e7a6837/homeassistant/components/zwave_js/services.yaml"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Upstream simulated lock tests; not executed here or associated with YRD156 hardware.",
          "id": "ha-zwave-test-lock",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-python",
          "path": "tests/components/zwave_js/test_lock.py",
          "sha256": "7ced0e7439967e73a096801d65a3bf702bf186c04c6c06d5fc8e42d24bd944c6",
          "source_maturity": "official",
          "url": "https://github.com/home-assistant/core/blob/067f88281665776424fbb4826697c46d5e7a6837/tests/components/zwave_js/test_lock.py"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Pinned upstream license text.",
          "id": "ha-license",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/plain",
          "path": "LICENSE.md",
          "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
          "source_maturity": "official",
          "url": "https://github.com/home-assistant/core/blob/067f88281665776424fbb4826697c46d5e7a6837/LICENSE.md"
        }
      ],
      "description": "Generic Home Assistant Z-Wave JS exposure paths and simulated tests. No YRD156-specific hardware validation; the underlying device metadata comes from the Z-Wave JS stack.",
      "ecosystem": "home-assistant",
      "id": "ha-zwave-lock-067f882",
      "kind": "source-manifest",
      "path": "catalog/sources/ha-zwave-lock-067f882.json",
      "repository": {
        "commit": "067f88281665776424fbb4826697c46d5e7a6837",
        "url": "https://github.com/home-assistant/core"
      },
      "schema_version": "0.1",
      "sha256": "1caaa16559465dee408eb216185ea6ed590dc1f7938729a4e68d405e023a8c25"
    },
    {
      "artifacts": [
        {
          "artifact_role": "sdf-model",
          "byte_check": "not-checked",
          "description": "OCF-derived two-value lockState model with Locked and Unlocked values.",
          "id": "onedm-ocf-lock-status",
          "layer": "neutral-sdf-representation",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "BSD-3-Clause"
          },
          "media_type": "application/sdf+json",
          "path": "sdfObject/sdfobject-lock_status.sdf.json",
          "sha256": "569e0e7cbb0338a1aba52912c7fd0a69ff5eb36ff69c40c9afe9abb617859590",
          "source_maturity": "unknown",
          "url": "https://github.com/one-data-model/ocf-models/blob/c97d095c239539b8242ceb4f12cf6deaeedb16e2/sdfObject/sdfobject-lock_status.sdf.json"
        },
        {
          "artifact_role": "sdf-model",
          "byte_check": "not-checked",
          "description": "OCF-derived lockCodeList model containing an array of strings.",
          "id": "onedm-ocf-lock-code",
          "layer": "neutral-sdf-representation",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "BSD-3-Clause"
          },
          "media_type": "application/sdf+json",
          "path": "sdfObject/sdfobject-lock_code.sdf.json",
          "sha256": "0b446f26111f8cf9bf496f9fe63136bf1b5729d9978067e623cf5984979b50f1",
          "source_maturity": "unknown",
          "url": "https://github.com/one-data-model/ocf-models/blob/c97d095c239539b8242ceb4f12cf6deaeedb16e2/sdfObject/sdfobject-lock_code.sdf.json"
        }
      ],
      "description": "Pinned OCF-derived SDF artifacts hosted by the One Data Model organization. Repository placement does not establish OneDM adoption, active maintenance, endorsement, or compatibility. The files are referenced, not vendored.",
      "ecosystem": "onedm",
      "id": "onedm-ocf-lock-models-c97d095",
      "kind": "source-manifest",
      "path": "catalog/sources/onedm-ocf-lock-models-c97d095.yaml",
      "repository": {
        "commit": "c97d095c239539b8242ceb4f12cf6deaeedb16e2",
        "url": "https://github.com/one-data-model/ocf-models"
      },
      "schema_version": "0.1",
      "sha256": "e2b0ae69e3b025b43469e9a536898c33583e5beede3ad49b6c49d8d39c83315e"
    },
    {
      "artifacts": [
        {
          "artifact_role": "fingerprints",
          "byte_check": "not-checked",
          "description": "Device fingerprints and profile assignments, including the Yale YRD156 assignment to the base-lock profile.",
          "id": "smartthings-zwave-lock-fingerprints",
          "layer": "device-protocol-support",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "Apache-2.0"
          },
          "media_type": "application/yaml",
          "path": "drivers/SmartThings/zwave-lock/fingerprints.yml",
          "sha256": "487db4ecba1052afc06e6da90e9611075f82687ff9a552c96005376a433d32b4",
          "source_maturity": "official",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/fingerprints.yml"
        },
        {
          "artifact_role": "platform-profile",
          "byte_check": "not-checked",
          "description": "Native SmartThings profile exposing lock, lockCodes, lockCredentials, lockUsers, battery, and refresh capabilities.",
          "id": "smartthings-base-lock-profile",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "Apache-2.0"
          },
          "media_type": "application/yaml",
          "path": "drivers/SmartThings/zwave-lock/profiles/base-lock.yml",
          "sha256": "50ffef1a66f70e80804e92c5cd451129e4e36bc67ab6707a10e10f06579db8f8",
          "source_maturity": "official",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/profiles/base-lock.yml"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Driver-source evidence for the Z-Wave reports interpreted before they are translated into SmartThings lock, credential, and user events. Contract v0.1 uses its generic evidence role because it has no driver-source role.",
          "id": "smartthings-zwave-responses",
          "layer": "device-protocol-support",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-lua",
          "path": "drivers/SmartThings/zwave-lock/src/lock_handlers/zwave_responses.lua",
          "sha256": "7a5d5a4ec5d93b6309cd3dc05c3eaf1285158648dab63ddf00570b543e724aed",
          "source_maturity": "official",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/lock_handlers/zwave_responses.lua"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Driver-source evidence showing that credentialData is used as the write-time Z-Wave UserCode payload. Contract v0.1 records this source under its generic evidence role because it has no driver-source role.",
          "id": "smartthings-zwave-capability-handlers",
          "layer": "device-protocol-support",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-lua",
          "path": "drivers/SmartThings/zwave-lock/src/lock_handlers/capabilities.lua",
          "sha256": "0cc41262f1cfd7952041847441a346996e80ca8fd7f680d9a253d8ad6362df50",
          "source_maturity": "official",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/lock_handlers/capabilities.lua"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Driver-source evidence registering the current user, credential, and Z-Wave handlers and restoring migrated capability state. Contract v0.1 records this source under its generic evidence role.",
          "id": "smartthings-zwave-lock-driver-entry",
          "layer": "device-protocol-support",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-lua",
          "path": "drivers/SmartThings/zwave-lock/src/init.lua",
          "sha256": "ea3b16fc7567292ecd844b211c94da9034317b8bbc38743a82b86a20c379df67",
          "source_maturity": "official",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/init.lua"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Driver-source evidence routing devices without a true persisted SLGA_MIGRATED field to the legacy handler path.",
          "id": "smartthings-legacy-dispatch-gate",
          "layer": "device-protocol-support",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-lua",
          "path": "drivers/SmartThings/zwave-lock/src/legacy-handlers/can_handle.lua",
          "sha256": "3feda213e4b61f70b6ae0dc6313af0e603f5de5b3f6cfdf0f2a42d1aba929f51",
          "source_maturity": "official",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/legacy-handlers/can_handle.lua"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Driver-source evidence for the explicit lockCodes migration command, emitted lockUsers and lockCredentials state, and persisted migration flag.",
          "id": "smartthings-legacy-migration-handler",
          "layer": "device-protocol-support",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-lua",
          "path": "drivers/SmartThings/zwave-lock/src/legacy-handlers/init.lua",
          "sha256": "20f3fad7a4b074c86983950efdf07f4ef59cb901bd86acfae967b3d65b7d49cf",
          "source_maturity": "official",
          "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers/blob/6b8a9cf69462d314a7c81b7a709037744d7d788d/drivers/SmartThings/zwave-lock/src/legacy-handlers/init.lua"
        }
      ],
      "description": "Pinned SmartThings Z-Wave lock driver evidence used by the initial EdgeLoom lock pilot. The source is referenced in place and is not vendored.",
      "ecosystem": "smartthings",
      "id": "smartthings-zwave-lock-6b8a9cf",
      "kind": "source-manifest",
      "path": "catalog/sources/smartthings-zwave-lock-6b8a9cf.yaml",
      "repository": {
        "commit": "6b8a9cf69462d314a7c81b7a709037744d7d788d",
        "url": "https://github.com/SmartThingsCommunity/SmartThingsEdgeDrivers"
      },
      "schema_version": "0.1",
      "sha256": "3bc27fe065666a0a56022c97b1b9453779f783d8bed81fd400ab4c63b5e749b0"
    },
    {
      "artifacts": [
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Model-only matching, battery metadata and shared lock exposure declarations.",
          "id": "z2m-yale-definitions",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "MIT"
          },
          "media_type": "text/typescript",
          "path": "src/devices/yale.ts",
          "sha256": "ba8a4e8d896c09c40fc4268d5d0106617f10d897fcf97d8c010f682072d5c8c6",
          "source_maturity": "community",
          "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/src/devices/yale.ts"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Battery conversion with dontDividePercentage condition and invalid-value guard.",
          "id": "z2m-battery-converter",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "MIT"
          },
          "media_type": "text/typescript",
          "path": "src/converters/fromZigbee.ts",
          "sha256": "a04ba5f429f4e04808b05327248f867b88b98229af7ac37a10ff589e507a9dc2",
          "source_maturity": "community",
          "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/src/converters/fromZigbee.ts"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Lock state, access and numeric exposure constructors.",
          "id": "z2m-exposes",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "MIT"
          },
          "media_type": "text/typescript",
          "path": "src/lib/exposes.ts",
          "sha256": "498bc040fe1badcd8f8cd9acccb722589f9faaf407405a0e0818570c27a04067",
          "source_maturity": "community",
          "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/src/lib/exposes.ts"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Pinned upstream license text.",
          "id": "z2m-license",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "MIT"
          },
          "media_type": "text/plain",
          "path": "LICENSE",
          "sha256": "b5ffb673900b5ec1f84e929f45077d429a0645b43c4b4eda65de815dfd02aef1",
          "source_maturity": "community",
          "url": "https://github.com/Koenkk/zigbee-herdsman-converters/blob/5750b44559405203b202e0f5539dc0d6f46f1c8d/LICENSE"
        }
      ],
      "description": "Yale converter definitions, exposure constructors and battery converter. Sources are statically inspected, not imported; firmware and coordinator behavior remain untested.",
      "ecosystem": "zigbee2mqtt",
      "id": "z2m-yale-5750b44",
      "kind": "source-manifest",
      "path": "catalog/sources/z2m-yale-5750b44.json",
      "repository": {
        "commit": "5750b44559405203b202e0f5539dc0d6f46f1c8d",
        "url": "https://github.com/Koenkk/zigbee-herdsman-converters"
      },
      "schema_version": "0.1",
      "sha256": "b1b7c256d3d3d805125684a3c680144d8f05b5f9a4b86067e4730cd5953ffa00"
    },
    {
      "artifacts": [
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Manufacturer/model and endpoint signature; replacement power-configuration cluster.",
          "id": "zha-yale-realliving",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-python",
          "path": "zhaquirks/yale/realliving.py",
          "sha256": "c481e5b44fc3f00b6e58e44134ae1bbd5d42a5af074df6fd39a7dafe5765c402",
          "source_maturity": "community",
          "url": "https://github.com/zigpy/zha-device-handlers/blob/d6fcec59eff9f63f154723500be9378be926d927/zhaquirks/yale/realliving.py"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "DoublingPowerConfigurationCluster implementation; not a full downstream entity pipeline.",
          "id": "zha-battery-cluster",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/x-python",
          "path": "zhaquirks/__init__.py",
          "sha256": "5481da1a0ce5fd6d2a4592f1a95c6ed1e1d4288a83edce817d0995981a42209b",
          "source_maturity": "community",
          "url": "https://github.com/zigpy/zha-device-handlers/blob/d6fcec59eff9f63f154723500be9378be926d927/zhaquirks/__init__.py"
        },
        {
          "artifact_role": "evidence",
          "byte_check": "not-checked",
          "description": "Pinned upstream license text.",
          "id": "zha-license",
          "layer": "platform-exposure",
          "license": {
            "evidence_path": "LICENSE.md",
            "expression": "Apache-2.0"
          },
          "media_type": "text/plain",
          "path": "LICENSE.md",
          "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
          "source_maturity": "community",
          "url": "https://github.com/zigpy/zha-device-handlers/blob/d6fcec59eff9f63f154723500be9378be926d927/LICENSE.md"
        }
      ],
      "description": "Merged Yale Real Living signature and battery quirk declarations. Device selection also depends on endpoint/cluster signatures, not just a marketing name.",
      "ecosystem": "zha",
      "id": "zha-yale-d6fcec5",
      "kind": "source-manifest",
      "path": "catalog/sources/zha-yale-d6fcec5.json",
      "repository": {
        "commit": "d6fcec59eff9f63f154723500be9378be926d927",
        "url": "https://github.com/zigpy/zha-device-handlers"
      },
      "schema_version": "0.1",
      "sha256": "dec7079fabb43777be098f10d5e6dda11642bd926f45df9cc030342380a0e4d7"
    },
    {
      "artifacts": [
        {
          "artifact_role": "driver-config",
          "byte_check": "not-checked",
          "description": "Community device configuration identifying the YRD156 and its imported Z-Wave configuration parameters.",
          "id": "zwave-js-yrd156-config",
          "layer": "device-protocol-support",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "MIT"
          },
          "media_type": "application/json",
          "path": "packages/config/config/devices/0x0129/yrd156.json",
          "sha256": "16010a6f5f9ca0facee0da1e3312277c66e2699c3a8f7a74d252492e2b98c783",
          "source_maturity": "community",
          "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/0x0129/yrd156.json"
        },
        {
          "artifact_role": "driver-config",
          "byte_check": "not-checked",
          "description": "Shared JSON5 community parameter definitions referenced by the YRD156 config, including auto-relock enable and duration fields.",
          "id": "zwave-js-yale-template",
          "layer": "device-protocol-support",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "MIT"
          },
          "media_type": "application/json5",
          "path": "packages/config/config/devices/0x0129/templates/yale_template.json",
          "sha256": "6f37e437d63e57d81affaa665722e19559f85aef46ebedd8fa091289a46f4a43",
          "source_maturity": "community",
          "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/0x0129/templates/yale_template.json"
        },
        {
          "artifact_role": "driver-config",
          "byte_check": "not-checked",
          "description": "Shared JSON5 base definitions imported by device-family templates, including the 0-to-180 unsigned range used for auto-relock duration.",
          "id": "zwave-js-master-template",
          "layer": "device-protocol-support",
          "license": {
            "evidence_path": "LICENSE",
            "expression": "MIT"
          },
          "media_type": "application/json5",
          "path": "packages/config/config/devices/templates/master_template.json",
          "sha256": "bebb75ac796d62ba116da2fd366b895d8418c83360d26df3252204530df248bf",
          "source_maturity": "community",
          "url": "https://github.com/zwave-js/zwave-js/blob/c4c599e1e6a0f6fab1f356f92307b8f94e895e60/packages/config/config/devices/templates/master_template.json"
        }
      ],
      "description": "Pinned community configuration evidence for the Yale YRD156. This source is not a statement from Yale or the Z-Wave Alliance and is not vendored here.",
      "ecosystem": "zwave-js",
      "id": "zwave-js-yrd156-c4c599e",
      "kind": "source-manifest",
      "path": "catalog/sources/zwave-js-yrd156-c4c599e.yaml",
      "repository": {
        "commit": "c4c599e1e6a0f6fab1f356f92307b8f94e895e60",
        "url": "https://github.com/zwave-js/zwave-js"
      },
      "schema_version": "0.1",
      "sha256": "72d981b9af12b3d525a45bb0f5dc37941bab918287ac327294e5ac87c97790de"
    }
  ]
}
