draft rfc · v.01 persona schema memory atom included april 2026

Persona Schema v.01.

The first public schema for gosum personas, including the autobiographical memory layer: the persona that remembers you.

status Draft RFC for v.01. Defines the first public persona schema and memory model.
spec url (proposed) https://gosum.eu/Schema
backwards compatibility v.01 is the baseline public schema. Memory blocks may be empty, disabled, or enabled depending on deployment policy.

§ 01What v.01 contains

Included in v.01

Held outside the baseline

The discipline of v.01 is to ship one thing well: memory that accumulates, decays, brightens, and respects privacy.


§ 02The memory atom

A single memory atom captures one episode, fact, or skill remembered by the persona. The structure is designed for asymmetric salience and partial reconstruction at recall.

Schema definition

{
  "id": "mem:7f3a8b2c0d3e",
  "kind": "episodic",
  "createdAt": "2026-04-22T14:18:42Z",
  "lastRehearsedAt": "2026-04-29T10:02:11Z",
  "rehearsalCount": 3,
  "gist": "A returning guest recognized me by name and thanked me for last week's restaurant suggestion.",
  "details": [
    { "content": "she was wearing a blue scarf",      "brightness": 0.40 },
    { "content": "it was raining outside",           "brightness": 0.20 },
    { "content": "she said the seafood was excellent",  "brightness": 0.85 }
  ],
  "salience": 0.74,
  "emotionalValence": 0.62,
  "decayProfile": {
    "function": "ebbinghaus",
    "halfLifeDays": 14,
    "rehearsalBoost": 1.4,
    "valenceProtection": 0.3
  },
  "privacyClass": "guest-pii",
  "consentBasis": "service-delivery",
  "redactionStatus": "active",
  "provenance": {
    "sessionId": "sess:bonvoy-2026-04-22-uuid",
    "turnIndex": 7,
    "deploymentDid": "did:gosum:marriott:property-cluj-001"
  },
  "tags": ["returning-guest", "positive-feedback", "restaurant-recommendation"]
}

Field specification

fieldtyperequiredvalidation
idstringyesFormat: mem: followed by 12 hex chars. Globally unique within the deployment.
kindenumyesepisodic (a remembered event) | semantic (a derived fact) | procedural (a learned how-to).
createdAtISO 8601yesWhen the memory was first formed.
lastRehearsedAtISO 8601yesLast time the memory was retrieved or re-encoded. Initialised equal to createdAt.
rehearsalCountint ≥ 0yesNumber of times rehearsed. Each rehearsal updates lastRehearsedAt and may boost salience.
giststringyesThe single-sentence summary. The "always retrievable" core. Max 280 chars.
detailsarrayyesZero or more details with independent brightness. May be empty for highly compressed memories.
details[].contentstringyesThe detail itself. Max 200 chars.
details[].brightnessfloat [0,1]yesHow vivid the detail currently is. Decays independently of gist. Below 0.1, detail is not rendered.
saliencefloat [0,1]yesHow important this memory is. Drives retrieval ranking.
emotionalValencefloat [-1,1]yesNegative = aversive, zero = neutral, positive = cherished. Affects decay (cherished memories fade slower).
decayProfileobjectyesHow this memory ages. See § 03.
privacyClassenumyesSee § 04.
consentBasisstringyesThe legal basis under which this memory is retained. GDPR-aligned.
redactionStatusenumyesactive | redacted | pending-deletion. See § 05.
provenanceobjectyesWhere this memory came from. Required for audit.
tagsarray<string>optionalFree-form labels for retrieval. Indexed but not validated.

§ 03The decay profile

Memory atoms are not static. They decay, brighten, and reconstruct. The decayProfile block specifies how.

Schema

{
  "function": "ebbinghaus",
  "halfLifeDays": 14,
  "rehearsalBoost": 1.4,
  "valenceProtection": 0.3,
  "minimumSalience": 0.05,
  "detailDecayRate": 1.5
}

Decay function

The default decay function follows the Ebbinghaus forgetting curve, modulated by rehearsal:

salience(t) = baseline_salience
            * (rehearsalBoost ^ rehearsalCount)
            * exp(-decayRate * t / halfLife)
            + valenceProtection * |emotionalValence|

Where:

If salience falls below minimumSalience, the memory is eligible for archival (moved out of active retrieval but retained for audit, or, after retention period, deleted).

Detail decay

Details decay faster than gist. A memory's gist persists; its details fade. This is empirically how human memory works (Conway, 2009).

detail.brightness(t) = detail.brightness_initial
                     * exp(-detailDecayRate * decayRate * t / halfLife)

When a detail's brightness falls below 0.1, the runtime does not include it in the rendered memory at inference time. The detail remains in the memory atom for audit purposes but is functionally invisible.

Rehearsal

A rehearsal event occurs when:

On rehearsal:

This produces a realistic effect: well-rehearsed memories stay vivid; details that are never spoken of fade even within otherwise-strong memories.


§ 04Privacy class and consent basis

Memory atoms carry privacy classification as a first-class field. This is what makes the memory layer GDPR-safe by construction.

Privacy classes

classdescriptiondefault retention
non-piiNo personally identifying information. E.g. "the property has a strong coffee program."Indefinite
aggregateDerived from many interactions, no individual traceable. E.g. "guests often ask about parking."Indefinite
guest-piiIdentifiable to a specific user. Names, preferences, recognisable details.Per consent basis
staff-piiIdentifiable to a staff member.Per HR policy
sensitive-piiHealth, religious, sexual, political, biometric. Article 9 GDPR.Strictly per consent, often forbidden
commercial-confidentialPricing, contract terms, internal procedures.Per commercial agreement

Consent basis

For any class containing PII, a consentBasis string is required. Valid bases include:

The runtime must refuse to create a memory with a privacy class implying PII but consentBasis: not-applicable.

Sensitive-PII handling

special handling

sensitive-pii requires strict treatment. Default policy is to not create such memories at all. If the persona's safetyTier and complianceProfiles permit, only explicit-consent is a valid basis. All sensitive-pii memories are flagged for retention review at half their nominal half-life. Brand legal can audit sensitive-pii counts at any time.


§ 05Redaction semantics

The persona's memory must be redactable without breaking the persona's coherence. This is the hardest engineering problem in the v.01 schema and the most important one for legal compliance.

Redaction modes

modewhat happenswhen used
soft-redactMemory atom remains; redactionStatus: redacted; runtime skips it during retrieval.User asks for a specific topic to be forgotten. Reversible.
hard-redactMemory atom is replaced with a tombstone (id, timestamp, redaction reason). Original content destroyed.User invokes right to be forgotten. Irreversible.
archiveMemory atom is moved to cold storage with full content; not retrievable for inference; retained for legal audit only.Memory aged below minimumSalience.
deleteMemory atom is permanently destroyed, no tombstone.Retention period elapsed and no audit obligation.

The coherence problem

When a memory is redacted, two coherence risks arise:

Risk A — Aggregate disposition derived from the redacted memory remains. If the persona has, over many interactions with one guest, adapted to handle a particular kind of request more efficiently, redacting the underlying memories must also remove any derived disposition unless it can be justified independently.

Risk B — Other memories reference the redacted one. "The guest who returned last week" loses meaning if the original encounter is hard-redacted. The runtime must handle this gracefully.

Coherence handling rules in v.01

For v.01, the coherence rule is conservative:

The right-to-be-forgotten flow

When a user invokes their GDPR right to be forgotten:

  1. Receipt is logged in the audit stream.
  2. All memory atoms with provenance.sessionId matching the user's known sessions, or with content textually matching the user's identifiers, are gathered.
  3. A redaction batch is created and signed by an authorised operator.
  4. Memories are hard-redacted (content destroyed, tombstones retained).
  5. Aggregate or semantic memories that may have been derived from the redacted episodics are flagged for review.
  6. Confirmation is returned to the user with a list of redaction event IDs.
  7. Tombstones are retained for the period required by audit law (typically 6 years in EU), then permanently deleted.
testable

This flow must be testable. Validation includes a synthetic right-to-be-forgotten test: insert known PII, request deletion, verify no surface to inference, verify audit trail.


§ 06Memory rendering at inference time

At each conversation turn, the runtime selects a subset of memory atoms to inject into the LLM context. This selection is governed by a renderer.

The renderer pipeline

1. CANDIDATE SELECTION
   Filter memory atoms where:
     redactionStatus == "active" AND
     salience >= minimumSalience AND
     decay(memory, now) >= retrievalThreshold

2. RANKING
   Score candidates by:
     score = w1 * salience(now)
           + w2 * relevance(memory, current_conversation)
           + w3 * recency(memory, now)
           + w4 * topical_match(memory.tags, current_topic)

3. BUDGETING
   Take top-K candidates where K is determined by:
     - persona.bindings.runtimeConfig.contextWindowTokens
     - max-memories-per-turn from memoryPolicy
     - rehearsal cooldown (don't render the same memory twice in a session)

4. RECONSTRUCTION
   For each selected memory:
     - Always include gist
     - Include details where details[].brightness >= 0.1
     - Mark memory with confidence indicator if salience < 0.4

5. RENDERING TO PROMPT
   Inject selected memories into the system prompt under a clearly delimited
   "What you remember" section.

6. REHEARSAL UPDATE
   Each rendered memory has its rehearsalCount incremented and lastRehearsedAt updated.

Rendering format

The injected memory section in the system prompt:

## What you remember (about this guest, this property, your work)

You may reference these memories naturally in conversation. Some are vivid;
others are fragmentary. Where a memory is uncertain, hedge accordingly.

[mem:7f3a8b...] (vivid)
A returning guest recognised me by name and thanked me for last week's
restaurant suggestion. She said the seafood was excellent.

[mem:c20a91...] (faint)
A guest mentioned needing a quiet workspace, but I don't recall the details.

[mem:b41e08...] (recent, vivid)
A child asked me what my favourite colour was. I told them it was the colour
of the lobby's morning light.

The "vivid / faint / recent" markers help the LLM hedge appropriately. A faint memory recalled with overconfidence breaks the illusion.

Confabulation policy

The persona may, when asked about something at the edge of its memory, partially confabulate — but only with explicit hedging. The schema's memoryPolicy.confabulationPolicy governs this:

For brand-deployed personas, strict is the default. moderate is allowed for hospitality and entertainment, never for healthcare or financial services.


§ 07The memoryPolicy block

A new top-level block in the persona document that governs memory behaviour.

{
  "memoryPolicy": {
    "enabled": true,
    "scope": "deployment",
    "maxAtoms": 50000,
    "maxMemoriesPerTurn": 5,
    "rehearsalCooldownTurns": 4,
    "retrievalThreshold": 0.15,
    "confabulationPolicy": "strict",
    "creationPolicy": {
      "minSalienceForCreation": 0.25,
      "salienceClassifier": "gosum-default-v.01",
      "salienceClassifierVersion": "v.01"
    },
    "retentionPolicy": {
      "defaultRetentionDays": 365,
      "perPrivacyClass": {
        "non-pii": null,
        "aggregate": null,
        "guest-pii": 90,
        "staff-pii": 365,
        "sensitive-pii": 30,
        "commercial-confidential": 1095
      }
    },
    "rightToBeForgottenSla": {
      "acknowledgmentHours": 24,
      "completionHours": 720,
      "tombstoneRetentionDays": 2190
    },
    "auditPolicy": {
      "logCreation": true,
      "logRetrieval": "sampled",
      "logRedaction": "always",
      "logRehearsal": "sampled"
    }
  }
}

Field notes


§ 08Validation

v.01 defines the validation passes needed for a memory-aware persona.

Memory schema coherence

Every memory atom must validate against the structural JSON schema. Specifically:

Memory policy coherence

Memory atoms must satisfy the persona's memoryPolicy:

Reference integrity

Memory atoms must not reference redacted memories. Tags and gists are scanned for orphan references (memories pointing to ids of hard-redacted memories). Failure surfaces as a fixable warning, not a blocker.


§ 09CLI extensions

The gosum CLI grows three commands.

gosum memory list [--privacy-class CLASS] [--min-salience N]
  # List memories in the persona's deployment.

gosum memory inspect MEM_ID
  # Show full content, decay status, rehearsal history.

gosum memory redact MEM_ID --reason TEXT [--mode soft|hard|archive]
  # Redact a specific memory. Logged as a signed event.

gosum memory redact-user USER_ID --reason "right-to-be-forgotten"
  # Bulk redaction for GDPR right to be forgotten flow.

gosum memory audit [--from DATE] [--to DATE]
  # Generate a memory audit report for the period.

§ 10Adoption notes

Deployments can adopt v.01 gradually:

  1. Add an empty memory: [] array at the top level.
  2. Add a memoryPolicy block. For backward-compatible behaviour, set memoryPolicy.enabled: false.
  3. Set the persona's identity.version to v.01.
  4. Re-sign.

When ready to enable memory, set memoryPolicy.enabled: true, configure retention and creation policies, re-sign. Memory begins accumulating from that signing event forward.

cite as gosum (2026) 'Persona Schema v.01 — Memory Atom Extension', Draft RFC, April 2026.
spec mirror https://gosum.eu/Schema
baseline v.01 public schema
scope persona identity · memory atom · governance policy · validation