Sightings
A sighting is one run's view of one record. What it holds, how outcomes are decided, and why the last 30 are kept.
What it is
Every time a run sees a record, the write contract appends a sighting to that record’s sightings list: which run, when, which producer, the values it saw, and what happened (new, updated, unchanged), plus any drop reason. A record keeps its last 30 sightings.
Why it exists
Sightings answer “when did this first appear, how often does it come back, and what changed?” without a separate history store. They also make writes idempotent: a run that already left a sighting on a record does not leave another.
How it works
For each record in a run input:
- If the record already has a sighting with this run id, the earlier outcome is reused and nothing is rewritten.
- Otherwise the outcome is decided:
newwhen no document exists;updatedwhen this producer’s values or the record’s status changed;unchangedotherwise.
- The sighting
{run, at, producer, values, outcome, dropReason}is appended. When a person’s keep overrode a filter, it also carriesnote: "kept by person". - The list is trimmed to the last 30.
displayis recomputed frombySourceand sightings.
The run’s counts add up the outcomes, and dropped counts records dropped by filters in that run.
Worked example
The Senior Shopify Engineer role appears in runs on 2 and 5 November. On 5 November the posting adds a salary. The record’s sightings:
[
{"run": "2026-11-02-2200", "at": "2026-11-02T22:00:04Z", "producer": "hiring-signals", "outcome": "new", "dropReason": null, "values": {"title": "Senior Shopify Engineer", "...": "..."}},
{"run": "2026-11-05-2200", "at": "2026-11-05T22:00:03Z", "producer": "hiring-signals", "outcome": "updated", "dropReason": null, "values": {"title": "Senior Shopify Engineer", "salary_max": 180000, "...": "..."}}
]
On the Desk the record page shows both, and the sparkline shows how often it was seen.
A role a person kept after title_keywords dropped it gets sightings like:
{"run": "2026-11-05-2200", "outcome": "updated", "dropReason": null, "note": "kept by person", "...": "..."}
Reference
| Field | Notes |
|---|---|
run |
Run id |
at |
The run’s time |
producer |
Producer id |
values |
The values this producer reported in this run |
outcome |
new, updated or unchanged |
dropReason |
The filter’s reason, or null |
note |
kept by person when a keep overrode a filter |
Limit: MAX_SIGHTINGS is 30.
Common pitfalls
- Using sightings as a full audit log. Only the last 30 are kept. Long-lived records lose their oldest sightings.
- Rerunning with a new run id to “refresh”. That is a new run and adds a sighting. Rerun with the same run id to finish a half-applied run.