GCC Build OSv0
/api

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