Alongside the content, Harvester pulls two accompanying datasets from the
source — access rights and
people's identities — and
keeps them
up to date
on a par with the entities themselves. Harvester produces
them; the table model, storage, and resolution are held by
Knowledge Store.
Rights are saved in the source's original terms, without
interpretation; people are merged by email; permission
sync is part of the general sync modes, with no dedicated mechanism of
its own. Collecting both goes through the connector — the fetch
mechanics are held by
sources.
user → their identities → memberships in source groups
→ the entity's group ACL; a chunk inherits the
entity's ACL and has none of its own. ACL and membership sit in
the relational database next to the vectors — so filtering by
rights runs in the same query as semantic search. The
application itself is behind the retrieval layer.
email — an explicit, reliable key. Anyone who
couldn't be matched by email Harvester doesn't
guess at: such records go for manual review in Admin Panel,
where they're linked to an existing identity or created as a
new one. On identity upsert, Harvester also sets a bridge to
the platform account with the same email, if one
already exists (identity.user_id) — the same
auto-link by exact email; the rule is held by
Knowledge Store.
emails, same person”
kind — fuzzy matching of identities across sources — Harvester
doesn't do. That's the job of deep entity resolution in
Knowledge Store, beyond our boundary; here we merge only on an
exact email match.