GCC Build OSv0
/api

DecisionDecision

retention: operational state machine: decision

A choice point with options, rationale, RACI, and dependencies. The Decision is the core entity of the Decision Graph; everything else feeds, depends on, or annotates Decisions. Multi-step approval chains per Q2.

RACI requirements

decision_maker
required
approver
chain
reviewer
optional
contributor
optional
informed
optional

JSON Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://gcc.bootminds.com/ontology/node-types/decision.json",
  "title": "Decision",
  "description": "A choice point with options, rationale, RACI, and dependencies. The Decision is the core entity of the Decision Graph; everything else feeds, depends on, or annotates Decisions. Multi-step approval chains per Q2.",
  "type": "object",
  "x-node-type": "Decision",
  "x-lifecycle-state-machine": "decision",
  "x-raci-requirements": {
    "decision_maker": "required",
    "approver": "chain",
    "reviewer": "optional",
    "contributor": "optional",
    "informed": "optional"
  },
  "x-retention-class": "operational",
  "required": [
    "node_id",
    "node_type",
    "tenant_id",
    "attributes",
    "state",
    "created_at",
    "created_by"
  ],
  "properties": {
    "node_id": {
      "type": "string",
      "format": "uuid"
    },
    "node_type": {
      "const": "Decision"
    },
    "tenant_id": {
      "type": "string",
      "format": "uuid"
    },
    "state": {
      "type": "string",
      "enum": [
        "Open",
        "InReview",
        "Decided",
        "Locked",
        "Reversed",
        "Superseded"
      ],
      "description": "Decision lifecycle state. Transitions governed by the 'decision' state machine, which encodes the multi-step approval chain (Q2)."
    },
    "attributes": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "title",
        "options",
        "rationale",
        "scope",
        "priority",
        "ordered_approver_chain",
        "current_approval_step"
      ],
      "properties": {
        "title": {
          "type": "string",
          "minLength": 1,
          "description": "Short, declarative title of the decision (e.g., 'Choose identity federation model: B2B vs cross-tenant')."
        },
        "options": {
          "type": "array",
          "minItems": 1,
          "description": "Candidate options being evaluated.",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "option_id",
              "title"
            ],
            "properties": {
              "option_id": {
                "type": "string",
                "minLength": 1,
                "description": "Stable identifier for this option within the decision (slug or short code)."
              },
              "title": {
                "type": "string",
                "minLength": 1,
                "description": "Short option title."
              },
              "description": {
                "type": "string",
                "description": "Longer description of the option."
              },
              "pros": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "cons": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "selected": {
                "type": "boolean",
                "description": "True for the chosen option once state >= Decided. Exactly one option is selected per decided/locked decision."
              }
            }
          }
        },
        "rationale": {
          "type": "string",
          "description": "Operational-truth rationale narrative. Must engage with linked evidence; decision-quality check (Phase 2) flags decisions whose rationale doesn't reference linked questions/answers."
        },
        "scope": {
          "type": "string",
          "enum": [
            "G",
            "S",
            "GCC"
          ],
          "description": "Scope tag: G = Group/Enterprise-wide; S = Subsidiary / business unit; GCC = specific to the GCC build."
        },
        "priority": {
          "type": "string",
          "enum": [
            "P0",
            "P1",
            "P2",
            "P3"
          ],
          "description": "Decision priority. P0 decisions are programme blockers."
        },
        "ordered_approver_chain": {
          "type": "array",
          "minItems": 1,
          "description": "Q2: ordered list of Stakeholder UUIDs that must approve in sequence. Step N+1 cannot fire until step N is satisfied. Out-of-order approvals are rejected by the state machine.",
          "items": {
            "type": "string",
            "format": "uuid"
          }
        },
        "current_approval_step": {
          "type": "integer",
          "minimum": 0,
          "description": "Zero-based index into ordered_approver_chain pointing at the next required approver. Equals length(ordered_approver_chain) once all approvals are in."
        },
        "workstream_id_ref": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid",
          "description": "Optional anchor workstream for this decision."
        },
        "decided_option_id": {
          "type": [
            "string",
            "null"
          ],
          "description": "Convenience pointer to the selected option_id once state >= Decided. Null while Open/InReview."
        }
      }
    },
    "created_at": {
      "type": "string",
      "format": "date-time"
    },
    "created_by": {
      "type": "string",
      "format": "uuid"
    },
    "updated_at": {
      "type": "string",
      "format": "date-time"
    }
  }
}