distinct Canonical Propositions
The distinct stored propositions, first-seen order — canonicalIds with the objects attached.
This is what downstream work should run over. Two inputs that deduplicated onto one proposition are one stored proposition, and projecting it twice, grounding it twice or issuing the same structural merge twice is duplicate work whose edges happen to be idempotent — but the records written about that work are not. A projection recorder writes one row per result, so the positional list inflates the audit with rows describing a proposition that was projected once.
canonicalPropositions stays positional for callers that need to line results up against the propositions they passed in.