{"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, merge_fields\n\ndef run(payload, policy):\n    if isinstance(payload, dict):\n        events = payload.get('events', [])\n    elif isinstance(payload, list):\n        events = payload\n    else:\n        events = []\n    if events is None:\n        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', 0)\n    duplicate_policy = policy.get('duplicate_policy', 'first')\n    candidates = []\n    for idx, ev in enumerate(events):\n        if not isinstance(ev, dict):\n            continue\n        raw_id = ev.get('id', '')\n        if raw_id is None:\n            raw_id = ''\n        elif 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 = ev.get('version', 0)\n        if version < version_floor:\n            continue\n        fields = ev.get('fields', {})\n        if fields is None:\n            fields = {}\n        candidates.append({'id': nid, 'version': version, 'deleted': bool(ev.get('deleted', False)), 'fields': copy.deepcopy(fields), 'index': idx})\n    dedup = {}\n    for cand in candidates:\n        key = (cand['id'], cand['version'])\n        if key not in dedup:\n            dedup[key] = cand\n        elif duplicate_policy == 'last':\n            dedup[key] = cand\n    selected = list(dedup.values())\n    selected.sort(key=lambda c: (c['version'], c['index']))\n    records = {}\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    allowed = {'name', 'tags', 'meta'}\n    for pos, ev in enumerate(selected):\n        nid = ev['id']\n        if nid not in first_processed:\n            first_processed[nid] = pos\n        applied = False\n        if ev['deleted']:\n            if nid in records:\n                del records[nid]\n                applied = True\n                if tombstone_wins:\n                    tombstones.add(nid)\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                if nid not in records:\n                    records[nid] = {}\n                fields = ev['fields']\n                if unknown_fields == 'drop':\n                    fields = {k: v for k, v in fields.items() if k in allowed}\n                merge_fields(records[nid], fields, policy)\n                applied = True\n        label = 'applied' if applied else 'blocked'\n        if audit_all or applied:\n            audit.append(f\"{nid}:{ev['version']}:{label}\")\n    out_records = [{'id': nid, 'fields': copy.deepcopy(fields)} for nid, fields in records.items()]\n    if policy.get('order', 'id') == 'id':\n        out_records.sort(key=lambda r: r['id'])\n    else:\n        out_records.sort(key=lambda r: (first_processed.get(r['id'], 0), r['id']))\n    return {'records': out_records, 'audit': audit}\n", "policy.py": "POLICY = {'duplicate_policy': 'last', 'fold_case': False, 'tombstone_wins': False, 'trim_ids': False, 'list_merge': 'unique', 'nested_merge': False, 'null_mode': 'delete', 'version_floor': 3, 'audit_all': False, 'empty_id': 'error', 'order': 'input', 'unknown_fields': 'drop'}\n", "helpers.py": "import copy\n\ndef normalize_id(raw, trim_ids, fold_case):\n    s = raw.strip() if trim_ids else raw\n    if fold_case:\n        s = ''.join(chr(ord(c) + 32) if 'A' <= c <= 'Z' else c for c in s)\n    return s\n\ndef json_equal(a, b):\n    if isinstance(a, bool) or isinstance(b, bool):\n        return type(a) is type(b) and 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    if isinstance(a, 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):\n        return len(a) == len(b) and all(json_equal(x, y) for x, y in zip(a, b))\n    return a == b\n\ndef _merge_value(old, new, policy):\n    if isinstance(old, dict) and isinstance(new, dict) and policy.get('nested_merge', False):\n        merge_fields(old, new, policy)\n        return old\n    if isinstance(old, list) and isinstance(new, list) and policy.get('list_merge') == 'unique':\n        result = copy.deepcopy(old)\n        for item in new:\n            if not any(json_equal(item, existing) for existing in old):\n                result.append(copy.deepcopy(item))\n        return result\n    return copy.deepcopy(new)\n\ndef merge_fields(target, source, policy):\n    null_mode = policy.get('null_mode', 'ignore')\n    for key, value in source.items():\n        if value is None:\n            if null_mode == 'delete':\n                target.pop(key, None)\n            continue\n        if key in target:\n            target[key] = _merge_value(target[key], value, policy)\n        else:\n            target[key] = copy.deepcopy(value)\n    return target\n"}}