with Run Lineage
Binds the store that records which extraction run produced which claims, and returns this extractor so a bean method can do it in one expression.
IncrementalPropositionExtraction(pipeline, ..., properties).withRunLineage(linkStore)Why this is a method and not a constructor parameter. Kotlin compiles a constructor with default arguments into a single synthetic <init>(...every parameter..., int mask, DefaultConstructorMarker), and that is what a precompiled Kotlin caller links against whenever it omits any argument. Appending a parameter rewrites that descriptor, so every such caller would fail with NoSuchMethodError — and @JvmOverloads does not save them, because it republishes the Java overloads that Kotlin callers using defaults never touch. Adding a method adds API; appending a defaulted parameter moves one. RunLineageBinaryCompatibilityTest pins the descriptor.
Binding is one-time, and a second call is rejected. The field is read when an analysis records lineage, not when it starts, so a later call would redirect or silently erase the audit record of an extraction already in flight — the failure would be a missing or misfiled lineage row long after the call that caused it. An audit surface should not be swappable at a distance. Passing null is a binding like any other: it is how a host says "record none", and it cannot later be upgraded, or "bound once" would depend on which value was passed.
Bind before the extractor starts handling events.
Lineage is only ever consulted for an analysis that carries a SourceAnalysisContext.currentRun; without a run this store is never touched. EXPERIMENTAL.
Binds LineageFailurePolicy.DEFAULT. Use the two-argument form to choose.
Return
this extractor.
Parameters
The lineage store, or null to record no lineage.
Throws
if lineage has already been bound.
Binds the lineage store and says what happens when a lineage write cannot be made.
A separate overload, because a defaulted parameter on the one-argument form would move that method's Kotlin descriptor — the whole reason lineage is bound by a method in the first place. RunLineageBinaryCompatibilityTest pins it.
A null store under LineageFailurePolicy.STRICT is a legitimate binding, and it is how a host says "record no lineage" while still refusing to run one. It only bites when an analysis actually carries a run: with no store bound and a run set, LineageFailurePolicy.STRICT fails that call. A host that passes runs must bind a store.
Return
this extractor.
Parameters
The lineage store, or null to record no lineage.
What happens when lineage cannot be written. See LineageFailurePolicy.
Throws
if lineage has already been bound.