{"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\": True, \"duplicate_policy\": \"first\", \"empty_id\": \"skip\", \"fold_case\": True, \"list_merge\": \"replace\", \"nested_merge\": True, \"null_mode\": \"ignore\", \"order\": \"id\", \"tombstone_wins\": True, \"trim_ids\": True, \"unknown_fields\": \"keep\", \"version_floor\": 2}\n","helpers.py":"import copy\n\n\ndef norm_id(s, policy):\n    if policy.get('trim_ids'):\n        s = s.strip()\n    if policy.get('fold_case'):\n        s = ''.join(chr(ord(c) + 32) if 'A' <= c <= 'Z' else c for c in s)\n    return s\n\n\ndef merge_value(old, new, policy):\n    if isinstance(new, dict) and isinstance(old, dict) and policy.get('nested_merge'):\n        return merge_obj(old, new, policy)\n    if isinstance(new, dict) and policy.get('nested_merge'):\n        return merge_obj({}, new, policy)\n    if isinstance(new, list) and isinstance(old, list) and policy.get('list_merge') == 'unique':\n        res = copy.deepcopy(old)\n        for item in new:\n            if not any(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(old, new, policy):\n    res = copy.deepcopy(old)\n    for k, v in new.items():\n        if v is None:\n            if policy.get('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] = merge_value(None, v, policy)\n    return res\n","core.py":"import copy\nfrom helpers import norm_id, merge_obj\n\n\ndef run(payload, policy):\n    events = payload.get('events', [])\n    groups = {}\n    order_keys = []\n    for i, e in enumerate(events):\n        nid = norm_id(e['id'], policy)\n        if nid == '':\n            if policy.get('empty_id') == 'raise':\n                raise ValueError('empty id')\n            continue\n        if e['version'] < policy.get('version_floor', 0):\n            continue\n        key = (nid, e['version'])\n        if key not in groups:\n            groups[key] = [i, i]\n            order_keys.append(key)\n        else:\n            g = groups[key]\n            if policy.get('duplicate_policy') == 'last':\n                g[1] = i\n    sel = []\n    for key in order_keys:\n        first_i, chosen = groups[key]\n        sel.append((key[1], chosen, key[0]))\n    sel.sort(key=lambda t: (t[0], t[1]))\n    records = {}\n    first_idx = {}\n    tomb = set()\n    audit = []\n    for pos, (ver, idx, nid) in enumerate(sel):\n        e = events[idx]\n        if nid not in first_idx:\n            first_idx[nid] = pos\n        applied = False\n        tw = policy.get('tombstone_wins')\n        if e['deleted']:\n            if nid in records:\n                del records[nid]\n                applied = True\n                if tw:\n                    tomb.add(nid)\n            elif tw and nid not in tomb:\n                tomb.add(nid)\n                applied = True\n        else:\n            if not (tw and nid in tomb):\n                f = e['fields']\n                if policy.get('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.get('audit_all'):\n            audit.append('%s:%d:%s' % (nid, ver, 'applied' if applied else 'blocked'))\n    if policy.get('order') == 'id':\n        ids = sorted(records)\n    else:\n        ids = sorted(records, key=lambda k: (first_idx[k], k))\n    return {'records': [{'id': k, 'fields': copy.deepcopy(records[k])} for k in ids], 'audit': audit}\n"}}