{"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\ndef fold(s):\n    return ''.join(chr(ord(c) + 32) if 'A' <= c <= 'Z' else c for c in s)\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        return isinstance(b, dict) and a.keys() == b.keys() and all(jeq(a[k], b[k]) for k in a)\n    if isinstance(a, list):\n        return isinstance(b, list) and len(a) == len(b) and all(jeq(x, y) for x, y in zip(a, b))\n    if isinstance(b, (dict, list)):\n        return False\n    return a == b\n\ndef merge_value(old, new, policy):\n    if isinstance(old, dict) and isinstance(new, dict) and policy['nested_merge']:\n        res = dict(old)\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    if isinstance(old, list) and isinstance(new, list) and policy['list_merge'] == 'unique':\n        res = copy.deepcopy(old)\n        for x in new:\n            if not any(jeq(x, o) for o in old):\n                res.append(copy.deepcopy(x))\n        return res\n    return copy.deepcopy(new)\n","core.py":"import copy\nfrom helpers import fold, merge_value\n\nKEEP = ('name', 'tags', 'meta')\n\ndef run(payload, policy):\n    if isinstance(payload, dict):\n        events = payload.get('events', [])\n    else:\n        events = payload\n    groups = {}\n    for idx, ev in enumerate(events):\n        nid = ev['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['version']\n        if ver < policy['version_floor']:\n            continue\n        key = (nid, ver)\n        if key not in groups:\n            groups[key] = (idx, idx)\n        else:\n            first, sel = groups[key]\n            if policy['duplicate_policy'] == 'last':\n                sel = idx\n            groups[key] = (first, sel)\n    items = []\n    for (nid, ver), (first, sel) in groups.items():\n        items.append((ver, sel, nid))\n    items.sort(key=lambda t: (t[0], t[1]))\n    records = {}\n    tombs = set()\n    firstidx = {}\n    audit = []\n    tw = policy['tombstone_wins']\n    for pos, (ver, sel, nid) in enumerate(items):\n        ev = events[sel]\n        if nid not in firstidx:\n            firstidx[nid] = pos\n        applied = False\n        if ev['deleted']:\n            if nid in records:\n                del records[nid]\n                applied = True\n                if tw:\n                    tombs.add(nid)\n            elif tw and nid not in tombs:\n                tombs.add(nid)\n                applied = True\n        else:\n            if not (tw and nid in tombs):\n                rec = records.get(nid)\n                rec = {} if rec is None else dict(rec)\n                for k, v in ev['fields'].items():\n                    if v is None:\n                        if policy['null_mode'] == 'delete':\n                            rec.pop(k, None)\n                        continue\n                    if k in rec:\n                        rec[k] = merge_value(rec[k], v, policy)\n                    else:\n                        rec[k] = copy.deepcopy(v)\n                records[nid] = rec\n                applied = True\n        if applied or policy['audit_all']:\n            audit.append('%s:%d:%s' % (nid, ver, 'applied' if applied else 'blocked'))\n    out = []\n    for nid, rec in records.items():\n        f = copy.deepcopy(rec)\n        if policy['unknown_fields'] == 'drop':\n            f = {k: v for k, v in f.items() if k in KEEP}\n        out.append({'id': nid, 'fields': f})\n    if policy['order'] == 'id':\n        out.sort(key=lambda r: r['id'])\n    else:\n        out.sort(key=lambda r: (firstidx[r['id']], r['id']))\n    return {'records': out, 'audit': audit}\n"}}