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"
}
}
}