GCC Build OSv0
/api

ProgrammeMemoryEventProgrammeMemoryEvent

retention: memory

A durable, immutable record of WHY a thing happened: opposition, off-record context, similar-pattern citations, assumptions, invalidations, reversal reasons, lessons learned. Not an audit log entry (the events table is that). Programme Memory is a first-class entity that drives Programme Memory queries and embeddings-based retrieval. Per-type visibility defaults per Q3 / scope spec section 3.6. Immutable: corrections require a new event.

RACI requirements

decision_maker
n/a
approver
n/a
reviewer
n/a
contributor
n/a
informed
n/a

JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://gcc.bootminds.com/ontology/node-types/programme_memory_event.json",
  "title": "ProgrammeMemoryEvent",
  "description": "A durable, immutable record of WHY a thing happened: opposition, off-record context, similar-pattern citations, assumptions, invalidations, reversal reasons, lessons learned. Not an audit log entry (the events table is that). Programme Memory is a first-class entity that drives Programme Memory queries and embeddings-based retrieval. Per-type visibility defaults per Q3 / scope spec section 3.6. Immutable: corrections require a new event.",
  "type": "object",
  "x-node-type": "ProgrammeMemoryEvent",
  "x-lifecycle-state-machine": null,
  "x-raci-requirements": {
    "decision_maker": "n/a",
    "approver": "n/a",
    "reviewer": "n/a",
    "contributor": "n/a",
    "informed": "n/a"
  },
  "x-retention-class": "memory",
  "required": [
    "node_id",
    "node_type",
    "tenant_id",
    "attributes",
    "state",
    "created_at",
    "created_by"
  ],
  "properties": {
    "node_id": {
      "type": "string",
      "format": "uuid"
    },
    "node_type": {
      "const": "ProgrammeMemoryEvent"
    },
    "tenant_id": {
      "type": "string",
      "format": "uuid"
    },
    "state": {
      "const": "captured",
      "description": "Programme Memory Events are immutable upon capture. Corrections are new events that reference the original via supersedes edges, not in-place edits."
    },
    "attributes": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "type",
        "narrative",
        "target_object_refs",
        "captured_by_ref",
        "captured_at",
        "visibility_tier",
        "is_immutable"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "opposition",
            "off_record_context",
            "similar_pattern",
            "assumption",
            "invalidation",
            "reversal_reason",
            "lessons_learned"
          ],
          "description": "Memory event type. Per-type visibility defaults are encoded in registry data (section 3.6)."
        },
        "narrative": {
          "type": "string",
          "minLength": 1,
          "description": "The why narrative. Embedded for AI retrieval; surfaces on object detail views subject to the visibility tier and the AI-output-side visibility filter (section 3.6.1)."
        },
        "target_object_refs": {
          "type": "array",
          "minItems": 1,
          "description": "Objects this memory event annotates (typically a Decision, but may include Capability, Milestone, Assumption, etc.).",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "object_type",
              "object_id"
            ],
            "properties": {
              "object_type": {
                "type": "string",
                "enum": [
                  "Decision",
                  "Capability",
                  "Milestone",
                  "Gate",
                  "TransitionWave",
                  "Risk",
                  "Assumption",
                  "Issue",
                  "Stakeholder",
                  "Document",
                  "Workstream"
                ]
              },
              "object_id": {
                "type": "string",
                "format": "uuid"
              }
            }
          }
        },
        "captured_by_ref": {
          "type": "string",
          "format": "uuid",
          "description": "Stakeholder UUID of the capturer."
        },
        "captured_at": {
          "type": "string",
          "format": "date-time",
          "description": "Wall-clock time of capture."
        },
        "visibility_tier": {
          "type": "string",
          "enum": [
            "AdvisorOnly",
            "RaciInner",
            "RaciInnerPlusContributors",
            "RaciInnerPlusInformed",
            "AllStakeholders"
          ],
          "description": "Q3: visibility tier for this event. Defaults per type (section 3.6); capturer may widen; Tenant Admin may raise globally; never narrows below the per-type minimum."
        },
        "is_immutable": {
          "type": "boolean",
          "const": true,
          "description": "Always true. Memory events cannot be edited; corrections are new events linked via supersedes edges."
        },
        "supersedes_event_ref": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid",
          "description": "If this event supersedes a prior memory event (e.g., a correction or expansion), the prior ProgrammeMemoryEvent UUID. Null for original events."
        }
      }
    },
    "created_at": {
      "type": "string",
      "format": "date-time"
    },
    "created_by": {
      "type": "string",
      "format": "uuid"
    },
    "updated_at": {
      "type": "string",
      "format": "date-time"
    }
  }
}