{"files":{"main.py":"from core import run\nfrom policy import POLICY\ndef evaluate(payload):\n    return run(payload, POLICY)\n","policy.py":"POLICY = {\"audit_all\": False, \"duplicate_policy\": \"last\", \"empty_id\": \"error\", \"fold_case\": False, \"list_merge\": \"unique\", \"nested_merge\": False, \"null_mode\": \"delete\", \"order\": \"input\", \"tombstone_wins\": False, \"trim_ids\": False, \"unknown_fields\": \"drop\", \"version_floor\": 3}\n","helpers.py":"import copy\n\n\ndef jeq(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):\n        if not isinstance(b, dict) or set(a) != set(b):\n            return False\n        return all(jeq(a[k], b[k]) for k in a)\n    if isinstance(a, list):\n        if not isinstance(b, list) or len(a) != len(b):\n            return False\n        return all(jeq(x, y) for x, y in zip(a, b))\n    if isinstance(b, (dict, list)):\n        return False\n    if isinstance(a, str) != isinstance(b, str):\n        return False\n    return a == b\n\n\ndef fold(s):\n    return ''.join(chr(ord(c) + 32) if 'A' <= c <= 'Z' else c for c in s)\n\n\ndef merge_value(old, new, policy):\n    if policy['nested_merge'] and isinstance(old, dict) and isinstance(new, dict):\n        return merge_obj(old, new, policy)\n    if policy['list_merge'] == 'unique' and isinstance(old, list) and isinstance(new, list):\n        res = copy.deepcopy(old)\n        for item in new:\n            if not any(jeq(item, o) for o in old):\n                res.append(copy.deepcopy(item))\n        return res\n    return copy.deepcopy(new)\n\n\ndef merge_obj(base, new, policy):\n    res = dict(base)\n    for k, v in new.items():\n        if v is None:\n            if policy['null_mode'] == 'delete':\n                res.pop(k, None)\n            continue\n        if k in res:\n            res[k] = merge_value(res[k], v, policy)\n        else:\n            res[k] = copy.deepcopy(v)\n    return res\n","core.py":"import copy\nfrom helpers import fold, merge_obj\n\n\ndef run(payload, policy):\n    if isinstance(payload, dict):\n        events = payload.get('events', [])\n    else:\n        events = payload\n    groups = {}\n    order = []\n    for i, ev in enumerate(events):\n        nid = ev.get('id')\n        if policy['trim_ids']:\n            nid = nid.strip()\n        if policy['fold_case']:\n            nid = fold(nid)\n        if nid == '':\n            if policy['empty_id'] == 'error':\n                raise ValueError('empty id')\n            continue\n        ver = ev.get('version')\n        if ver < policy['version_floor']:\n            continue\n        key = (nid, ver)\n        if key not in groups:\n            groups[key] = [i, i]\n            order.append(key)\n        else:\n            g = groups[key]\n            if policy['duplicate_policy'] == 'last':\n                g[1] = i\n    selected = []\n    for key in order:\n        idx = groups[key][1]\n        selected.append((key[1], idx, key[0]))\n    selected.sort(key=lambda t: (t[0], t[1]))\n    records = {}\n    tombs = set()\n    first = {}\n    audit = []\n    for pos, (ver, idx, nid) in enumerate(selected):\n        ev = events[idx]\n        if nid not in first:\n            first[nid] = pos\n        applied = False\n        if ev.get('deleted'):\n            if nid in records:\n                del records[nid]\n                applied = True\n                if policy['tombstone_wins']:\n                    tombs.add(nid)\n            elif policy['tombstone_wins'] and nid not in tombs:\n                tombs.add(nid)\n                applied = True\n        else:\n            if policy['tombstone_wins'] and nid in tombs:\n                applied = False\n            else:\n                f = ev.get('fields') or {}\n                if policy['unknown_fields'] == 'drop':\n                    f = {k: v for k, v in f.items() if k in ('name', 'tags', 'meta')}\n                records[nid] = merge_obj(records.get(nid, {}), f, policy)\n                applied = True\n        if applied or policy['audit_all']:\n            audit.append('%s:%d:%s' % (nid, ver, 'applied' if applied else 'blocked'))\n    ids = list(records)\n    if policy['order'] == 'id':\n        ids.sort()\n    else:\n        ids.sort(key=lambda x: (first[x], x))\n    return {'records': [{'id': i, 'fields': copy.deepcopy(records[i])} for i in ids], 'audit': audit}\n"}}