Skip to content

Publish an Approved Answer to the Registry

Before you begin

Roles required: Validator, governance lead.

The following must be true before you attempt to publish:

  • The candidate has a ValidationRecord with decision: "approved"
  • You have the validation_record_id from that record
  • You have at least one evidence_link — a URI pointing to an authoritative source (Confluence page, Jira issue, or the ingest artifact ID)
  • You know the owner_role responsible for this answer's ongoing accuracy
  • You have a review_due date set (recommended: 90 days for rapidly evolving product areas; 180 days for stable reference knowledge)

Assumed state: Validation is complete. See Claim and Decide a Validation Assignment.


Steps

1. POST the answer to the registry

Send a POST request to /v1/registry/answers with all required and applicable fields:

curl -s -X POST http://localhost:8000/v1/registry/answers \
  -H "Content-Type: application/json" \
  -d '{
    "candidate_id": "cand_01j2k3l4m5n6p7q8r9t1",
    "horn_type": "fact",
    "answer_text": "The platform supports SSO via SAML 2.0 and OIDC. Azure AD, Okta, and Ping Identity are supported identity providers.",
    "owner_role": "solutions-engineering",
    "validation_record_id": "valrec_01j2k3l4m5n6p7q8r9v3",
    "evidence_links": [
      "https://heretto.atlassian.net/wiki/spaces/PROD/pages/12345",
      "artifact://art_01j2k3l4m5n6p7q8r9s0"
    ],
    "review_due": "2026-12-07",
    "customer_scope": "acme-corp",
    "assertion_grammar": {
      "subject": "platform",
      "predicate": "supports",
      "object_value": "SSO via SAML 2.0 and OIDC",
      "scope": "identity and access management"
    }
  }'

Required fields:

Field Description
candidate_id The candidate this answer is derived from
horn_type The Horn type string, lowercase (e.g., "fact", "procedure", "concept")
answer_text The final, validated answer text
owner_role The role responsible for this answer's accuracy going forward
validation_record_id The ID of the APPROVED ValidationRecord
evidence_links Array of one or more source URIs; must not be empty
review_due ISO date string (YYYY-MM-DD) for when this answer should be re-reviewed

Optional fields:

Field Description
customer_scope Restricts this answer to one customer context; omit for organization-wide answers
assertion_grammar Required for horn_type: "fact" — the structured subject/predicate/object_value/scope breakdown

Important: If validation_record_id is missing, owner_role is missing, or evidence_links is an empty array, the service raises a ProvenanceError and the write is rejected with HTTP 422. Ensure all three provenance fields are present before submitting.

2. Capture the answer_id from the response

A successful publish returns HTTP 201 with a registry answer record:

{
  "answer_id": "ans_01j2k3l4m5n6p7q8r9w4",
  "candidate_id": "cand_01j2k3l4m5n6p7q8r9t1",
  "horn_type": "fact",
  "status": "APPROVED",
  "version": 1,
  "answer_text": "The platform supports SSO via SAML 2.0 and OIDC. Azure AD, Okta, and Ping Identity are supported identity providers.",
  "owner_role": "solutions-engineering",
  "validation_record_id": "valrec_01j2k3l4m5n6p7q8r9v3",
  "evidence_links": [
    "https://heretto.atlassian.net/wiki/spaces/PROD/pages/12345",
    "artifact://art_01j2k3l4m5n6p7q8r9s0"
  ],
  "review_due": "2026-12-07",
  "customer_scope": "acme-corp",
  "created_at": "2026-06-07T14:50:00Z"
}

Save the answer_id. It is the permanent identifier for this answer in the registry.

3. Confirm the published answer

Retrieve the answer to verify all fields were stored correctly:

curl -s "http://localhost:8000/v1/registry/answers/ans_01j2k3l4m5n6p7q8r9w4"

Confirm that status is "APPROVED" and all fields match your intent.

Note: If another APPROVED answer in the registry already has the same subject + predicate + scope but a different object_value, a RegistryConflictRecord is created automatically. The write succeeds — it is NOT blocked — but the conflict is flagged for governance review. Both answers will appear in readouts with a conflict indicator until resolved. Review any conflict records promptly. See Maintain Answer Lifecycle for how to resolve conflicts by superseding the outdated answer.

Note: Once published, the answer text is immutable. Registry answers are versioned records. To change the answer_text, you must supersede the answer, which creates a new version. Do not attempt to re-publish the same candidate_id with different text; use the supersede action instead.


Result

The answer has an answer_id and is in APPROVED status in the registry. It is now eligible for inclusion in customer readouts, registry queries, and downstream graph synchronization. The version is set to 1. The full provenance chain — from source artifact through validation to publication — is recorded and auditable.

See also: Maintain Answer Lifecycle; Generate a Pre-Meeting Readout; Claim and Decide a Validation Assignment