v1.21.0 — relative undated imputation (inert) + IMPUTATION-STUCK alert + deps
- #297 relative undated imputation (PR #298): the undated decay factor is no longer a constant — it tracks the dated cohort's live age quantile (median; type-7; future-dated points beyond the skew tolerance excluded; min-cohort 20), refreshed hourly from a full-corpus scan by an attempt-keyed cache with a 60 s scan bound, and derived per request at the configured half-life. Falls back to
exp(-0.25)until a statistic exists. Inert: nothing changes whileUM_TEMPORAL_DECAYis off (the default). New/api/stats.undated_imputationblock (19 snake_case keys;applied_factoris 1 andfactornull with decay off) and one row on/control. Keyed evaluation and the flip-time inputs are recorded on #239. - IMPUTATION-STUCK alert section (PR #300):
um-alert.shgains a sixth section over that block — the two spec §4.5 stuck-cache conditions (last refresh failed; last attempt more than 2 × TTL after the last success). Quiet while decay is off; a pre-#297 server prints a one-line ABSENT breadcrumb. - Dependencies (PR #299): uuid 9.0.1 → 14.0.2, @anthropic-ai/sdk 0.117.1 → 0.122.0; lock regenerated in a Node 22 container (supersedes dependabot #280/#287).
Deploy notes: the server changes are inert until the #239 flip. The alert section lives in the CLI, so the Pi cron only gains it after installer/install-cli.sh re-runs (part of the deploy runbook); consumer machines refresh the plugin as usual (claude plugin marketplace update universal-memory + reinstall). Post-deploy proof-of-life with decay off: /api/stats.undated_imputation reads enabled:false, mode:"fallback", factor:null, applied_factor:1, computed_age_ms:null, and docker logs --since 24h um-server | grep -c 'undated-imputation' is 0.
Artifact verification: ghcr.io/goldenwo/universal-memory-server:1.21.0 pulled and booted per-arch (amd64 + arm64 under QEMU) against a throwaway qdrant with the real provider key — /health 200 on both, mem0ai/oss resolves on both (node v22.23.2), uuid 14.0.2 in-image, /api/stats.undated_imputation reads enabled:false / mode:fallback / factor:null / applied_factor:1 on both, zero undated-imputation log lines at boot.