Skip to content

Memory tier classification #11

@jimador

Description

@jimador

Observation

All propositions in a context are treated identically for retrieval, decay, and eviction. In practice, propositions have different temporal relevance:

  • Recently accessed or reinforced propositions are actively relevant
  • Propositions from earlier in the conversation but still occasionally referenced are warm
  • Propositions that haven't been accessed in a while but aren't contradicted are cold

Without tier classification, decay and eviction treat all propositions the same:

  • Too aggressive → active propositions fade too quickly
  • Too conservative → stale propositions consume token budget

What DICE already has

  • Proposition.lastAccessed: Instant — tracked but not used for behavior differentiation
  • Proposition.reinforceCount: Int — frequency signal, not used for tier classification
  • Proposition.decay: ZeroToOne — uniform rate, not modulated by access patterns
  • MemoryMaintenanceOrchestrator — runs maintenance but doesn't classify propositions by recency
  • PropositionRepository — has findByRevisedBetween() and findAllOrderedByEffectiveConfidence(), but no tier-based queries

The question

Should propositions have a temporal tier that modulates their decay and eviction behavior?

A simple model:

Tier Criteria Effect
HOT Accessed or reinforced recently Slower decay, higher eviction resistance
WARM Not recently accessed, but not stale Normal decay
COLD No access in a while Faster decay, first to evict

Implementation options

  1. Computed on-the-fly — classify based on lastAccessed relative to configurable thresholds. No storage, always fresh. Cost: recalculated on every query.

  2. Stored field — add memoryTier: MemoryTier to Proposition. Updated during maintenance sweeps. Enables tier-based repository queries, but can go stale between sweeps.

  3. Decay multiplier only — no explicit tier. lastAccessed directly modulates the decay rate in effectiveConfidence(). Simpler, but loses the categorical abstraction.

Open questions

  • Is lastAccessed sufficient for classification? Other signals matter: reinforceCount recency, whether the proposition is referenced by active abstractions, whether the conversation thread it came from is still ongoing.
  • Should tier be stored or computed? Stored enables efficient queries (findByTier(HOT)) but risks staleness. Computed is always fresh but can't be indexed.
  • Is this redundant with decay? If effectiveConfidence() already decays based on revised time, adding a tier multiplier based on lastAccessed creates two time-based decay dimensions. Is that useful or confusing?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions