{"files": {"main.py": "from core import run\nfrom policy import POLICY\ndef evaluate(payload):\n    return run(payload, POLICY)\n", "core.py": "import copy\nfrom helpers import normalize_id, json_equal\n\nALLOWED_FIELDS = {\"name\", \"tags\", \"meta\"}\n\ndef _merge_into(target, source, policy):\n    nested = policy.get(\"nested_merge\", False)\n    list_merge = policy.get(\"list_merge\", \"replace\")\n    null_mode = policy.get(\"null_mode\", \"ignore\")\n    for key, value in source.items():\n        if value is None:\n            if null_mode in (\"delete\", \"remove\", \"drop\"):\n                target.pop(key, None)\n            continue\n        if nested and key in target and isinstance(target[key], dict) and isinstance(value, dict):\n            _merge_into(target[key], value, policy)\n        elif list_merge == \"unique\" and key in target and isinstance(target[key], list) and isinstance(value, list):\n            old_snapshot = list(target[key])\n            appended = []\n            for item in value:\n                if not any(json_equal(item, old_item) for old_item in old_snapshot):\n                    appended.append(copy.deepcopy(item))\n            target[key] = copy.deepcopy(old_snapshot) + appended\n        else:\n            target[key] = copy.deepcopy(value)\n\ndef run(payload, policy):\n    if isinstance(payload, dict):\n        raw_events = payload.get(\"events\", [])\n        if raw_events is None:\n            raw_events = []\n    elif isinstance(payload, (list, tuple)):\n        raw_events = list(payload)\n    else:\n        raw_events = []\n    trim_ids = policy.get(\"trim_ids\", False)\n    fold_case = policy.get(\"fold_case\", False)\n    empty_id = policy.get(\"empty_id\", \"skip\")\n    version_floor = policy.get(\"version_floor\", None)\n    duplicate_policy = policy.get(\"duplicate_policy\", \"first\")\n    filtered = []\n    for original_index, event in enumerate(raw_events):\n        if not isinstance(event, dict):\n            continue\n        raw_id = event.get(\"id\", \"\")\n        if raw_id is None:\n            raw_id = \"\"\n        if not isinstance(raw_id, str):\n            raw_id = str(raw_id)\n        nid = normalize_id(raw_id, trim_ids, fold_case)\n        if nid == \"\":\n            if empty_id == \"error\":\n                raise ValueError(\"empty id\")\n            continue\n        version = event.get(\"version\")\n        if version_floor is not None and version is not None and version < version_floor:\n            continue\n        filtered.append((original_index, nid, event))\n    dedup = {}\n    order_keys = []\n    for original_index, nid, event in filtered:\n        version = event.get(\"version\")\n        key = (nid, version)\n        if key not in dedup:\n            dedup[key] = (original_index, nid, event)\n            order_keys.append(key)\n        else:\n            if duplicate_policy == \"last\":\n                dedup[key] = (original_index, nid, event)\n    selected = [dedup[key] for key in order_keys]\n    selected.sort(key=lambda item: (item[2].get(\"version\"), item[0]))\n    records_map = {}\n    tombstones = set()\n    first_processed = {}\n    audit = []\n    audit_all = policy.get(\"audit_all\", False)\n    tombstone_wins = policy.get(\"tombstone_wins\", False)\n    unknown_fields = policy.get(\"unknown_fields\", \"keep\")\n    for processed_index, (original_index, nid, event) in enumerate(selected):\n        if nid not in first_processed:\n            first_processed[nid] = processed_index\n        version = event.get(\"version\")\n        deleted = bool(event.get(\"deleted\", False))\n        applied = False\n        if deleted:\n            if nid in records_map:\n                del records_map[nid]\n                if tombstone_wins:\n                    tombstones.add(nid)\n                applied = True\n            elif tombstone_wins and nid not in tombstones:\n                tombstones.add(nid)\n                applied = True\n            else:\n                applied = False\n        else:\n            if tombstone_wins and nid in tombstones:\n                applied = False\n            else:\n                fields = event.get(\"fields\", {})\n                if fields is None:\n                    fields = {}\n                if not isinstance(fields, dict):\n                    fields = {}\n                if unknown_fields == \"drop\":\n                    source = {k: v for k, v in fields.items() if k in ALLOWED_FIELDS}\n                else:\n                    source = fields\n                if nid not in records_map:\n                    records_map[nid] = {}\n                _merge_into(records_map[nid], source, policy)\n                applied = True\n        status = \"applied\" if applied else \"blocked\"\n        if audit_all or applied:\n            audit.append(f\"{nid}:{version}:{status}\")\n    records = [{\"id\": nid, \"fields\": copy.deepcopy(fields)} for nid, fields in records_map.items()]\n    if policy.get(\"order\", \"input\") == \"id\":\n        records.sort(key=lambda r: r[\"id\"])\n    else:\n        records.sort(key=lambda r: (first_processed.get(r[\"id\"], 0), r[\"id\"]))\n    return {\"records\": records, \"audit\": audit}\n", "policy.py": "POLICY = {\n    \"duplicate_policy\": \"first\",\n    \"fold_case\": True,\n    \"tombstone_wins\": True,\n    \"trim_ids\": True,\n    \"list_merge\": \"replace\",\n    \"nested_merge\": True,\n    \"null_mode\": \"ignore\",\n    \"version_floor\": 2,\n    \"audit_all\": True,\n    \"empty_id\": \"skip\",\n    \"order\": \"id\",\n    \"unknown_fields\": \"keep\",\n}\n", "helpers.py": "import copy\n\ndef ascii_fold(value):\n    result = []\n    for ch in value:\n        if \"A\" <= ch <= \"Z\":\n            result.append(chr(ord(ch) + 32))\n        else:\n            result.append(ch)\n    return \"\".join(result)\n\ndef normalize_id(value, trim_ids=False, fold_case=False):\n    result = value\n    if trim_ids:\n        result = result.strip()\n    if fold_case:\n        result = ascii_fold(result)\n    return result\n\ndef json_equal(a, b):\n    if isinstance(a, bool) or isinstance(b, bool):\n        return isinstance(a, bool) and isinstance(b, bool) and a == b\n    if isinstance(a, dict) and isinstance(b, dict):\n        if set(a.keys()) != set(b.keys()):\n            return False\n        return all(json_equal(a[k], b[k]) for k in a)\n    if isinstance(a, list) and isinstance(b, list):\n        if len(a) != len(b):\n            return False\n        return all(json_equal(x, y) for x, y in zip(a, b))\n    if isinstance(a, (int, float)) and isinstance(b, (int, float)):\n        return a == b\n    if type(a) is not type(b):\n        return False\n    return a == b\n\ndef deep_copy(value):\n    return copy.deepcopy(value)\n"}}