AnswerAnswer
retention: operational
A response to a Question that cites sources. Answers are operational-truth records; AI-drafted answers must be human-accepted before they become an Answer (Q11 AI-acceptance integrity).
RACI requirements
decision_maker- n/a
approver- optional
reviewer- required
contributor- required
informed- optional
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://gcc.bootminds.com/ontology/node-types/answer.json",
"title": "Answer",
"description": "A response to a Question that cites sources. Answers are operational-truth records; AI-drafted answers must be human-accepted before they become an Answer (Q11 AI-acceptance integrity).",
"type": "object",
"x-node-type": "Answer",
"x-lifecycle-state-machine": null,
"x-raci-requirements": {
"decision_maker": "n/a",
"approver": "optional",
"reviewer": "required",
"contributor": "required",
"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": "Answer"
},
"tenant_id": {
"type": "string",
"format": "uuid"
},
"state": {
"type": "string",
"enum": [
"draft",
"submitted",
"reviewed",
"locked",
"superseded"
],
"description": "Coarse answer state. No formal lifecycle state machine in Phase 0; the parent Question's state machine governs review flow."
},
"attributes": {
"type": "object",
"additionalProperties": false,
"required": [
"text",
"citations",
"confidence",
"drafted_by_ai",
"accepted_unchanged",
"human_edit_distance"
],
"properties": {
"text": {
"type": "string",
"description": "The textual answer payload. For non-text artefact types, this is the rendered/normalised string form; structured payloads live in linked Documents or via dedicated entity-row schemas."
},
"question_id_ref": {
"type": [
"string",
"null"
],
"format": "uuid",
"description": "Reference to the Question being answered. Convenience denormalisation; authoritative link lives on an edge."
},
"citations": {
"type": "array",
"description": "Source citations grounding the answer.",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"doc_id",
"chunk_idx"
],
"properties": {
"doc_id": {
"type": "string",
"format": "uuid",
"description": "Reference to the source Document node."
},
"chunk_idx": {
"type": "integer",
"minimum": 0,
"description": "Index of the chunk within the Document's chunked representation."
},
"page_or_sheet": {
"type": [
"string",
"null"
],
"description": "Human-readable locator (e.g., 'p. 12', 'Sheet: Revenue', 'Slide 4'). Optional but recommended for traceability."
}
}
}
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Confidence score in [0,1]. For AI-drafted answers, sourced from the AI provider's confidence indicator; for human answers, may default to 1.0 or be tenant-policy driven."
},
"drafted_by_ai": {
"type": "boolean",
"description": "Whether the original draft text was produced by an AI process. If true, full provenance lives on the linked ai_interpretations row (I8)."
},
"accepted_unchanged": {
"type": "boolean",
"description": "Q11: when drafted_by_ai is true, whether the human accepted the AI text verbatim. Surfaced prominently in audit views to prevent AI-by-laundering."
},
"human_edit_distance": {
"type": "integer",
"minimum": 0,
"description": "Q11: character-level edit distance between the AI draft and the accepted text. Zero when accepted_unchanged is true. Captured in the AIInterpretationAccepted event payload."
}
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"created_by": {
"type": "string",
"format": "uuid"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
}