{"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 json_equal, merge_dict, normalize_id\n\n_ALLOWED_FIELDS = ('name', 'tags', 'meta')\n\ndef run(payload, policy):\n    policy = policy or {}\n    audit_all = policy.get('audit_all', False)\n    duplicate_policy = policy.get('duplicate_policy', 'last')\n    empty_id = policy.get('empty_id', 'error')\n    fold_case = policy.get('fold_case', False)\n    trim_ids = policy.get('trim_ids', False)\n    version_floor = policy.get('version_floor', 3)\n    tombstone_wins = policy.get('tombstone_wins', False)\n    unknown_fields = policy.get('unknown_fields', 'drop')\n    order = policy.get('order', 'input')\n    events = payload.get('events', []) if isinstance(payload, dict) else []\n    deduped = {}\n    for original_index, event in enumerate(events):\n        normalized_id = normalize_id(event.get('id', ''), trim_ids, fold_case)\n        if normalized_id == '':\n            if empty_id == 'error':\n                raise ValueError('empty id')\n            continue\n        version = event.get('version')\n        if version_floor is not None and version < version_floor:\n            continue\n        key = (normalized_id, version)\n        selected = {'id': normalized_id, 'version': version, 'deleted': event.get('deleted', False), 'fields': event.get('fields') or {}, 'original_index': original_index}\n        if key not in deduped:\n            deduped[key] = selected\n        elif duplicate_policy == 'last':\n            deduped[key] = selected\n    processed = sorted(deduped.values(), key=lambda item: (item['version'], item['original_index']))\n    records_by_id = {}\n    first_processed_index = {}\n    tombstoned = set()\n    audit = []\n    for processed_index, event in enumerate(processed):\n        normalized_id = event['id']\n        version = event['version']\n        if normalized_id not in first_processed_index:\n            first_processed_index[normalized_id] = processed_index\n        applied = False\n        if event['deleted']:\n            if normalized_id in records_by_id:\n                del records_by_id[normalized_id]\n                if tombstone_wins:\n                    tombstoned.add(normalized_id)\n                applied = True\n            elif tombstone_wins and normalized_id not in tombstoned:\n                tombstoned.add(normalized_id)\n                applied = True\n            else:\n                applied = False\n        else:\n            if tombstone_wins and normalized_id in tombstoned:\n                applied = False\n            else:\n                if normalized_id not in records_by_id:\n                    records_by_id[normalized_id] = {}\n                source_fields = event['fields']\n                if unknown_fields == 'drop':\n                    source_fields = {key: value for key, value in source_fields.items() if key in _ALLOWED_FIELDS}\n                else:\n                    source_fields = dict(source_fields)\n                merge_dict(records_by_id[normalized_id], source_fields, policy)\n                applied = True\n        if audit_all or applied:\n            audit.append(str(normalized_id) + ':' + str(version) + ':' + ('applied' if applied else 'blocked'))\n    records = [{'id': normalized_id, 'fields': copy.deepcopy(fields)} for normalized_id, fields in records_by_id.items()]\n    if order == 'id':\n        records.sort(key=lambda record: record['id'])\n    else:\n        records.sort(key=lambda record: (first_processed_index.get(record['id'], 0), record['id']))\n    return {'records': records, 'audit': audit}\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\ndef normalize_id(value, trim_ids, fold_case):\n    result = value if isinstance(value, str) else str(value)\n    if trim_ids:\n        result = result.strip()\n    if fold_case:\n        result = ''.join(chr(ord(char) + 32) if 'A' <= char <= 'Z' else char for char in result)\n    return result\n\ndef json_equal(left, right):\n    if isinstance(left, bool) or isinstance(right, bool):\n        return isinstance(left, bool) and isinstance(right, bool) and left == right\n    if isinstance(left, (int, float)) and isinstance(right, (int, float)):\n        return left == right\n    if isinstance(left, dict) and isinstance(right, dict):\n        if set(left.keys()) != set(right.keys()):\n            return False\n        return all(json_equal(left[key], right[key]) for key in left)\n    if isinstance(left, list) and isinstance(right, list):\n        return len(left) == len(right) and all(json_equal(a, b) for a, b in zip(left, right))\n    if type(left) is not type(right):\n        return False\n    return left == right\n\ndef merge_dict(target, source, policy):\n    null_mode = policy.get('null_mode', 'delete')\n    nested_merge = policy.get('nested_merge', False)\n    list_merge = policy.get('list_merge', 'unique')\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 and nested_merge and isinstance(target[key], dict) and isinstance(value, dict):\n            merge_dict(target[key], value, policy)\n        elif key in target and isinstance(target[key], list) and isinstance(value, list):\n            if list_merge == 'unique':\n                old_items = target[key]\n                additions = [copy.deepcopy(item) for item in value if not any(json_equal(item, old_item) for old_item in old_items)]\n                target[key] = copy.deepcopy(old_items) + additions\n            else:\n                target[key] = copy.deepcopy(value)\n        else:\n            target[key] = copy.deepcopy(value)\n    return target\n"}}