CHANGELOG.md
Rama main · réplica de lectura del repositorio original.
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
Nothing has been released yet, so this describes what the workspace
does today rather than how it got here.
### Crates
- **elide-pipeline** — the stateless engine and the umbrella entry
point: decode, analyze, review, anonymize. Re-exports what the
other crates define, so a host reaches everything from here.
- **elide-provider** — deployment-owned configuration: which NER, LLM,
OCR and STT backends exist, and the per-modality orchestrator built
from them. A request toggles them; it does not choose them.
- **elide-schema** — the wire schema for what happens to sensitive
data: policies, scopes, rules, predicates, operator specs, and the
vocabulary a request introduces.
- **elide-template** — ready-to-run policy postures for HIPAA
§164.514, GDPR Article 9, PCI DSS §3.3.1/§3.5.1 and CCPA. Each
carries its own version and the effective date of the text it
encodes, independent of the crate release.
- **elide-review** — reviewer edits over a report: add, retag,
suppress. Validated against the report before any of them land, so
a set that cannot apply in full applies not at all.
- **elide-export** — audits as JSON documents or CSV tables.
### Detection and redaction
- One entity model across text, tabular data, images and audio, so an
operator written once serves every modality.
- Layered detection: regex, dictionary and checksum patterns first,
then NER, OCR, VLM and LLM recognition for what deterministic
methods cannot reach. Language, OCR and speech enrichers feed the
text they produce back through the same pipeline.
- Context-aware scoring, with overlapping findings reconciled into one
deduplicated entity set.
- Operators: mask, replace, truncate, HMAC, hash, generalize and clamp
text; blur, pixelate and black out image regions; silence and beep
audio; drop tabular rows and columns. Encryption and pseudonymization
round-trip.
- Codecs read and rewrite TXT, CSV, JSON, XML, HTML, PDF, DOCX,
PPTX, XLSX, images (PNG, JPEG, TIFF) and audio (WAV, MP3), changing
only the redacted spans. `codec-mp3` and `codec-pdf-render` stay
opt-in: MP3 patent licensing may not be satisfiable downstream, and
PDF rasterisation pulls in a native dependency.
- Per-format codec settings on `CodecParams`: how a PDF rasterises,
whether a CSV has a header row and what separates its fields, and
what happens to an image's EXIF metadata when no metadata pipeline
strips it. Each defaults to the codec's own behaviour, and a request
that sets none shares the prebuilt format registry. EXIF is stripped
by default — GPS, device and timestamp fields do not survive a
re-encode unless a request asks to retain them.
### What a request supplies
- **Policies** say what happens to sensitive data: scopes naming the
labels the policy acts on, rules within them, and a fallback for
what no rule claimed.
- **`RequestContext`** says what the caller asserts about this
document and this run — languages and jurisdictions, how the bytes
decode, the key a keyed operator resolves through, and the
vocabulary the request introduces beyond elide's shipped labels.
Anything two callers sharing one engine could disagree about lives
here rather than on the provider.
- A **`Recognition`** introduces labels elide does not ship, and
matchers — a regex or a term list — that find them. A label without
a matcher is legitimate: it joins the catalog for a reviewer to add
entities under, and nothing detects it automatically.
### Auditing
- Every entity carries its full trail: how it was found, how it was
scored, and how it was hidden. The trail verifies.
- An audit carries what the second pass needs and nothing it does not:
the recognition context, the codec parameters and the request's
vocabulary, so `anonymize` compiles against the same labels and
decodes to the same bytes `analyze` did. The key is never recorded.
- Detections no policy acted on are reported rather than left silent.
### Inference
- Model services live in [`packages/`](packages) and are reached over
HTTP. The engine ships clients for them, and any service
reproducing the wire contract is a drop-in replacement, including
self-hosted models and weights.
[Unreleased]: https://github.com/nvisycom/elide-runtime/commits/main