{
  "$comment": "MPLP Protocol v1.0.0 — Frozen Specification\nFreeze Date: 2025-12-03\nStatus: FROZEN (no breaking changes permitted)\nGovernance: MPLP Protocol Governance Committee (MPGC)\nCopyright: © 2026 Jearon Wong\nLicense: Apache-2.0\nAny normative change requires a new protocol version.",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://mplp.dev/schemas/v1.0/events/mplp-graph-update-event.schema.json",
  "title": "MPLP GraphUpdateEvent v1.0",
  "description": "**REQUIRED** - PSG structural update events (MANDATORY for v1.0 compliance)",
  "allOf": [
    {
      "$ref": "mplp-event-core.schema.json"
    },
    {
      "type": "object",
      "properties": {
        "event_family": {
          "const": "graph_update",
          "description": "Must be 'graph_update' for this event type"
        },
        "graph_id": {
          "type": "string",
          "format": "uuid",
          "description": "PSG identifier (typically project-level graph)"
        },
        "update_kind": {
          "type": "string",
          "enum": [
            "node_add",
            "node_update",
            "node_delete",
            "edge_add",
            "edge_update",
            "edge_delete",
            "bulk"
          ],
          "description": "Type of graph mutation"
        },
        "node_delta": {
          "type": "integer",
          "description": "Node count delta (+/- or 0)"
        },
        "edge_delta": {
          "type": "integer",
          "description": "Edge count delta (+/- or 0)"
        },
        "source_module": {
          "type": "string",
          "description": "L2 module emitting this update (e.g., 'context', 'plan', 'collab')"
        }
      },
      "required": [
        "event_family",
        "graph_id",
        "update_kind",
        "node_delta",
        "edge_delta"
      ]
    }
  ]
}
