Decay Manager
Storage-agnostic DecaySweeper over a PropositionRepository, plus an optional hook to materialise decayed confidence where a backend can cache it.
Two responsibilities, kept as separate callable operations (no forced run()):
Lifecycle (sweep / sweepAll) — applies com.embabel.dice.spi.StatusTransitionPolicy status transitions (ACTIVE→STALE, STALE→ACTIVE, optional pruning) through the repository. Works for any backend; pinned propositions are policy-exempt.
Materialisation (materialize / materializeAll) — refreshes a cached
effectiveConfidenceso confidence-ranked reads push into the store. The only storage-specific operation, so it's the abstract seam: a no-op in com.embabel.dice.proposition.store.InMemoryDecayManager (nothing to cache), a batch write-back in the graph impl.
tick is the convenience runner a scheduler calls (materialise, then lifecycle); the granular operations remain independently callable for different cadences.
dice ships no scheduler — wiring @Scheduled/cron is the consuming application's job.
Inheritors
Functions
Refresh cached decayed confidence for one context (no-op for non-caching backends).
Refresh cached decayed confidence across all contexts (no-op for non-caching backends).
Sweep the propositions in a single context for lifecycle transitions.
Sweep the propositions across all contexts for lifecycle transitions.
Runner: refresh cached confidence, then apply lifecycle transitions across all contexts.