Skip to content

Design a presentation seam for framing/neutralise (ADR 0014) #59

Description

@TBarregren

Problem

ADR 0014's rule — every surface that re-presents stored memory must neutralise the leaves and frame the whole — is enforced per caller, not at a seam. Three output surfaces each hand-wire frame(neutralise(...)): the snapshot assembly (snapshot.py), recall's rendering (RecallResult.rendered, recall.py) and the management surface's Concept printing (manage.py). A fourth surface that displays stored memory (say, a future mimer-manage show <slug>) must re-derive the rule or it silently re-presents memory as instructions — the same smeared-invariant shape the write seam had before the redaction-at-the-seam work, and the Visible-seam work for enumeration, in this series.

This came out of the 2026-07-13 architecture review ("Noted, not carded": framing/neutralise per-surface). It was deliberately left uncarded — smaller stakes than its siblings — and no interface has been designed.

What is needed before this is ready for an agent

A design session settling:

  • The interface shape — a present_memory(text) -> str helper, or something surface-aware; whether the frame's citation/age annotations vary per surface (snapshot vs recall vs management listing) and how that variation enters the interface without widening it back into per-caller assembly.
  • Whether ingest-side neutralisation joins the seam — the digest neutralises on the way in (digest.py); that call serves a different guarantee and probably stays, but the design should say so explicitly.
  • The ADR 0014 constraint — the seam must make bypass impossible (or loudly greppable), not merely centralise the calls into one skippable helper; the sibling ADR 0020 (redaction at the write seam) is the pattern to mirror, including keeping any defence-in-depth.
  • Whether a grep/source-scan guard (like the write-seam's living test) is proportionate here.

Acceptance criteria (for the design session, not the build)

  • The interface is settled and recorded in this issue; the ticket is then relabelled ready-for-agent with the settled shape inlined
  • The decision on ingest-side neutralisation is explicit either way

Blocked by

None logically — but not ready for an agent until the design session above has settled the interface.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-triageMaintainer needs to evaluate this issue

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions