has_role_onedge type
Stakeholder holds a RACI role on a target object. Exactly one decision_maker per RACI-required object (invariant I7). When raci_role = approver under Q2 multi-step chains, approval_step_index orders the chain.
Full spec
{
"name": "has_role_on",
"description": "Stakeholder holds a RACI role on a target object. Exactly one decision_maker per RACI-required object (invariant I7). When raci_role = approver under Q2 multi-step chains, approval_step_index orders the chain.",
"source_node_types": [
"Stakeholder"
],
"target_node_types": [
"Workstream",
"WorkstreamPack",
"Capability",
"Question",
"Decision",
"Milestone",
"Gate",
"TransitionWave",
"Risk",
"Assumption",
"Issue",
"Control",
"MaturityDimension",
"ProgrammeMemoryEvent",
"Document"
],
"cardinality": "N:N",
"traversal_semantics": "forward",
"dag_participation": false,
"lifecycle_states": [
"active",
"terminated"
],
"attributes_schema": {
"type": "object",
"additionalProperties": false,
"required": [
"raci_role"
],
"properties": {
"raci_role": {
"type": "string",
"enum": [
"decision_maker",
"approver",
"reviewer",
"contributor",
"informed"
]
},
"approval_step_index": {
"type": [
"integer",
"null"
],
"minimum": 1,
"description": "Required (>=1) when raci_role = approver under multi-step Q2 chain; null otherwise. Ordering is dense over the chain (1, 2, 3, ...). Out-of-order or skipped steps are rejected by raci-completeness.spec."
},
"assigned_at": {
"type": "string",
"format": "date-time"
},
"scope_note": {
"type": "string",
"maxLength": 500
}
}
},
"raci_role": "decision_maker|approver|reviewer|contributor|informed"
}