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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions