{"files":{"main.py":"from core import run\nfrom policy import POLICY\ndef evaluate(payload):\n    return run(payload, POLICY)\n","policy.py":"POLICY = {\n    'duplicate_policy': 'last',\n    'fold_case': False,\n    'tombstone_wins': False,\n    'trim_ids': False,\n    'list_merge': 'unique',\n    'nested_merge': False,\n    'null_mode': 'delete',\n    'version_floor': 3,\n    'audit_all': False,\n    'empty_id': 'error',\n    'order': 'input',\n    'unknown_fields': 'drop',\n}\n","helpers.py":"import copy\n\n\ndef json_eq(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(json_eq(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(json_eq(x, y) for x, y in zip(a, b))\n    if isinstance(b, (dict, list)) or isinstance(b, bool):\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, p):\n    if isinstance(old, dict) and isinstance(new, dict) and p['nested_merge']:\n        return merge_obj(old, new, p)\n    if isinstance(old, list) and isinstance(new, list) and p['list_merge'] == 'unique':\n        res = list(old)\n        for item in new:\n            if not any(json_eq(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(target, src, p):\n    for k, v in src.items():\n        if v is None:\n            if p['null_mode'] == 'delete':\n                target.pop(k, None)\n            continue\n        if k in target:\n            target[k] = merge_value(target[k], v, p)\n        else:\n            target[k] = copy.deepcopy(v)\n    return target\n","core.py":"import copy\nfrom helpers import fold, merge_obj\n\nKEYS = ['duplicate_policy', 'fold_case', 'tombstone_wins', 'trim_ids', 'list_merge',\n        'nested_merge', 'null_mode', 'version_floor', 'audit_all', 'empty_id',\n        'order', 'unknown_fields']\n\n\ndef run(payload, policy):\n    p = dict(policy)\n    if isinstance(payload, dict):\n        events = payload.get('events', [])\n        opts = payload.get('options')\n        for k in KEYS:\n            if k in payload:\n                p[k] = payload[k]\n        if isinstance(opts, dict):\n            for k in KEYS:\n                if k in opts:\n                    p[k] = opts[k]\n    else:\n        events = payload\n    groups = {}\n    for i, e in enumerate(events):\n        nid = e['id']\n        if p['trim_ids']:\n            nid = nid.strip()\n        if p['fold_case']:\n            nid = fold(nid)\n        if nid == '':\n            if p['empty_id'] == 'error':\n                raise ValueError('empty id')\n            continue\n        if e['version'] < p['version_floor']:\n            continue\n        key = (nid, e['version'])\n        if key not in groups:\n            groups[key] = [i, i]\n        elif p['duplicate_policy'] == 'last':\n            groups[key][1] = i\n    items = sorted(((k[1], sel, k[0]) for k, (pos, sel) in groups.items()))\n    records = {}\n    tomb = set()\n    first = {}\n    audit = []\n    for idx, (ver, sel, nid) in enumerate(items):\n        e = events[sel]\n        if nid not in first:\n            first[nid] = idx\n        applied = False\n        if e['deleted']:\n            existed = nid in records\n            records.pop(nid, None)\n            newt = False\n            if p['tombstone_wins'] and nid not in tomb:\n                tomb.add(nid)\n                newt = True\n            applied = existed or newt\n        else:\n            if nid in tomb:\n                applied = False\n            else:\n                cur = records.setdefault(nid, {})\n                merge_obj(cur, e['fields'], p)\n                applied = True\n        if applied or p['audit_all']:\n            audit.append('%s:%d:%s' % (nid, ver, 'applied' if applied else 'blocked'))\n    ids = list(records)\n    if p['order'] == 'id':\n        ids.sort()\n    else:\n        ids.sort(key=lambda x: (first[x], x))\n    out = []\n    for nid in ids:\n        f = records[nid]\n        if p['unknown_fields'] == 'drop':\n            f = {k: v for k, v in f.items() if k in ('name', 'tags', 'meta')}\n        out.append({'id': nid, 'fields': copy.deepcopy(f)})\n    return {'records': out, 'audit': audit}\n"}}