persist Returning Canonical
Persist the same things persist does, and report which stored proposition each extracted one landed on.
The difference that matters is one line: structural relationships are wired against the propositions the repository returned, not the ones extraction minted. On a deduplicating backend those are not the same. DrivinePropositionRepository collapses a fresh insert onto an existing proposition with identical (contextId, text) and returns that one, so a HAS_PROPOSITION or MENTIONS edge written against the minted id points at a node that was never stored. Here it points at the node that was.
persist is left exactly as it was. This is a second entry point rather than a fix applied in place, because changing what persist wires would change behaviour for every existing caller — including hosts that never asked for extraction runs.
Entity persistence, the referenced-entity filter, and which propositions get saved are all identical to persist.
Return
The stored proposition for each one persisted, and the input-id to stored-id mapping.
Parameters
Where propositions go.
Where entities go, and what writes the structural edges.