Skip to content

feat(element): implement MemoryDataAdapter per ADR-0095 #620

Description

@SisyphusZheng

Problem

ADR-0095 (Accepted, 2026-06-10) explicitly promises:

Provide a single baseline implementation: MemoryDataAdapter — zero I/O, backed by Map.

The DataAdapter<T> interface exists at packages/element/src/internal/protocol/data.ts:10, but no implementation exists anywhere in the repository (zero grep matches for MemoryDataAdapter or implements DataAdapter).

This is a documentation-code drift: the ADR is Accepted but its deliverable is missing.

Evidence

  • packages/element/src/internal/protocol/data.ts:10 — interface defined ✅
  • grep -r "MemoryDataAdapter" packages/ — 0 matches ❌
  • grep -r "implements DataAdapter" packages/ — 0 matches ❌
  • ADR-0095 §Decision: "Provide a single baseline implementation: MemoryDataAdapter"

Fix

Option A (preferred): Implement MemoryDataAdapter (~20 lines):

export class MemoryDataAdapter<T = unknown> implements DataAdapter<T> {
  readonly name = 'memory';
  #store = new Map<string, T>();

  async get(key: string): Promise<T | undefined> {
    return this.#store.get(key);
  }

  async keys(): Promise<string[]> {
    return [...this.#store.keys()];
  }

  set(key: string, value: T): void {
    this.#store.set(key, value);
  }
}

Export from @openelement/element root (or build-utils if build-only).

Option B: Update ADR-0095 status to "Deferred" with rationale and target version.

Acceptance

  • MemoryDataAdapter implemented with unit tests, OR
  • ADR-0095 status updated to Deferred with explicit target version

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions