# Extraction model

Extraction nodes contain actual engine match/capture values and ranges. The
syntax tree supplies capture names and parent relationships; engine results
supply participation, value and offsets.

Statuses distinguish:

- participated with non-empty text;
- participated and matched empty;
- did not participate;
- unavailable range;
- preview-truncated value.

Exact match and capture ranges are retained even when a displayed value exceeds
the 64 Ki UTF-16 per-value preview limit or the shared 8 Mi-unit preview
budget. Consumers must inspect the preview status rather than treating a
preview as complete. In particular, list export is disabled if its template
would consume an incomplete value.

Repeated ECMAScript, PCRE2, Python and Java captures expose only the final
retained capture. The UI labels this limitation and does not invent history.
Later .NET support may add actual engine capture-history nodes without
degrading them to this model.

The syntactic hierarchy remains useful even if actual spans overlap or fall
outside a parent's geometry; native and normalized ranges are preserved rather
than “fixed”. ECMAScript and Java native offsets are UTF-16 code units, PCRE2
native offsets are UTF-8 bytes and Python native offsets are Unicode code
points. All editor ranges are normalized to UTF-16 without discarding the
native unit.
