# Engine-level features

{% tabs %}
{% tab title="End users" %}
These pages explain what CrossWatch means by **Watchlist**, **History**, and **Ratings**.

You’ll only need this when a plan looks confusing.

Jump to:

* [Watchlist](/blueprint-architecture/sync/engine-level-features/watchlist.md)
* [History](/blueprint-architecture/sync/engine-level-features/history.md)
* [Ratings](/blueprint-architecture/sync/engine-level-features/ratings.md)

Related:

* Pair feature toggles: [Configure Pairs](/crosswatch/configure-pairs.md)
* How plans are built: [One-way sync](/blueprint-architecture/orchestrator/one-way-sync.md), [Two-way sync](/blueprint-architecture/orchestrator/two-way-sync.md)
  {% endtab %}

{% tab title="Power users" %}
These are the shared feature semantics used by the orchestrator across providers.

**Core code:** `cw_platform/orchestrator/_pairs_oneway.py`, `cw_platform/orchestrator/_pairs_twoway.py`

### Shared contract (every feature)

1. **Build snapshot** (`build_index`).
2. **Plan** (`adds/removes` or `upserts/unrates`).
3. **Apply** (`add/remove` on the destination).
4. **Persist** (baselines + checkpoints in `state.json`).

Related runtime pages:

* Snapshot rules: [Snapshots](/blueprint-architecture/orchestrator/snapshots.md)
* Diff logic: [Planner](/blueprint-architecture/orchestrator/planner.md)
* Writes + chunking: [Applier](/blueprint-architecture/orchestrator/applier.md)
* Baseline persistence: [State.json](/blueprint-architecture/orchestrator/state-json.md)

### Canonical keys and ID tokens

Everything is keyed by a **canonical key** derived from IDs.

Common tokens:

* `imdb:tt...`
* `tmdb:...`
* `tvdb:...`

Typed tokens are used to reduce season/episode duplication when keys differ.

### Index semantics: `present` vs `delta`

Providers declare how their snapshot behaves:

* `present`: full list each run.
* `delta`: incremental reads. The orchestrator merges baseline + current delta.

`delta` providers rely more on state (watermarks / checkpoints) for correctness.
{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.crosswatch.app/blueprint-architecture/sync/engine-level-features.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
