add Provenance
open override fun addProvenance(propositionId: String, entries: List<ProvenanceEntry>): Proposition?
Appends evidence in one atomic step, so an entry added while a subtractProvenance is in flight survives it.
The base contract's default reads through findById and writes through save, which leaves a window where a subtraction running alongside can replace the append away. Both operations go through compute here, which closes it — and makes the pair testable under real threads.