Metadata-Version: 2.4
Name: metaspn-entities
Version: 0.1.0
Summary: Canonical entity resolution, aliasing, and merges for MetaSPN systems
Author: MetaSPN Contributors
License-Expression: MIT
Keywords: entity-resolution,identity,aliasing,dedupe,sqlite
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Database
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: metaspn-schemas
Provides-Extra: dev
Requires-Dist: build>=1.2.0; extra == "dev"
Requires-Dist: twine>=5.0.0; extra == "dev"
Dynamic: license-file

# metaspn-entities

Identity layer for MetaSPN systems.

## Features

- Canonical entity IDs
- Deterministic identifier normalization + alias resolution
- Merge history and reversible soft undo
- SQLite backend using stdlib `sqlite3`
- Event emission payloads for `EntityResolved`, `EntityMerged`, `EntityAliasAdded`
- Optional filesystem snapshot export

## Quick usage

```python
from metaspn_entities import EntityResolver

resolver = EntityResolver()
resolution = resolver.resolve("twitter_handle", "@some_handle")
events = resolver.drain_events()
print(resolution.entity_id, resolution.confidence)
```

## API notes

- `resolve(identifier_type, value, context=None) -> EntityResolution`
- `add_alias(entity_id, identifier_type, value, ...)`
- `merge_entities(from_entity_id, to_entity_id, reason, ...)`
- `undo_merge(from_entity_id, to_entity_id, ...)` (implemented as reverse merge with redirect correction)
- `drain_events() -> list[EmittedEvent]`
- `export_snapshot(output_path)` to inspect SQLite state as JSON
