[Mnemosyne] Memory Decay — living vitality score for archive entries #1258

Closed
opened 2026-04-12 05:39:54 +00:00 by Rockachopa · 1 comment
Owner

Problem

Archive entries currently have no notion of "liveliness." Old memories and fresh ones look identical. The holographic archive needs a vitality system where:

  • Memories fade with neglect (time since last access)
  • Memories brighten with use (access frequency)
  • The system can surface fading memories and vibrant ones

Requirements

  1. Entry model: Add vitality (float 0.0–1.0) and last_accessed (ISO datetime) fields to ArchiveEntry
  2. touch(entry_id): Record an access — bumps vitality and updates last_accessed
  3. vitality(entry_id): Compute current vitality (decayed from last_accessed, boosted by access recency)
  4. fading(limit): Return entries with lowest vitality (most neglected)
  5. vibrant(limit): Return entries with highest vitality (most alive)
  6. apply_decay(): Decay all entries' vitality based on elapsed time, persist
  7. Stats integration: Add vitality summary to stats() output
  8. Tests: Cover decay math, touch boost, fading/vibrant queries, persistence

Design

Vitality formula: v = base_vitality * decay_rate ^ (hours_since_access / half_life) — exponential decay with configurable half-life (default: 30 days). Touch adds a boost of 0.1 * (1 - current_vitality) — diminishing returns as vitality approaches 1.0.

Parent

Part of Mnemosyne living archive. FEATURES.yaml memory_decay entry.

## Problem Archive entries currently have no notion of "liveliness." Old memories and fresh ones look identical. The holographic archive needs a vitality system where: - Memories **fade** with neglect (time since last access) - Memories **brighten** with use (access frequency) - The system can surface fading memories and vibrant ones ## Requirements 1. **Entry model**: Add `vitality` (float 0.0–1.0) and `last_accessed` (ISO datetime) fields to `ArchiveEntry` 2. **`touch(entry_id)`**: Record an access — bumps vitality and updates `last_accessed` 3. **`vitality(entry_id)`**: Compute current vitality (decayed from last_accessed, boosted by access recency) 4. **`fading(limit)`**: Return entries with lowest vitality (most neglected) 5. **`vibrant(limit)`**: Return entries with highest vitality (most alive) 6. **`apply_decay()`**: Decay all entries' vitality based on elapsed time, persist 7. **Stats integration**: Add vitality summary to `stats()` output 8. **Tests**: Cover decay math, touch boost, fading/vibrant queries, persistence ## Design Vitality formula: `v = base_vitality * decay_rate ^ (hours_since_access / half_life)` — exponential decay with configurable half-life (default: 30 days). Touch adds a boost of `0.1 * (1 - current_vitality)` — diminishing returns as vitality approaches 1.0. ## Parent Part of Mnemosyne living archive. FEATURES.yaml `memory_decay` entry.
Timmy was assigned by Rockachopa 2026-04-12 05:39:54 +00:00
Author
Owner

Implementation submitted

PR: #1259

Memory decay system implemented with:

  • vitality and last_accessed fields on ArchiveEntry
  • touch(), get_vitality(), fading(), vibrant(), apply_decay() on MnemosyneArchive
  • 20+ tests
  • Exponential decay (30-day half-life) + diminishing-return touch boost
## Implementation submitted PR: #1259 Memory decay system implemented with: - `vitality` and `last_accessed` fields on ArchiveEntry - `touch()`, `get_vitality()`, `fading()`, `vibrant()`, `apply_decay()` on MnemosyneArchive - 20+ tests - Exponential decay (30-day half-life) + diminishing-return touch boost
Timmy closed this issue 2026-04-12 06:08:52 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Timmy_Foundation/the-nexus#1258