Conversation portability

The Conversation Profile represents a conversation as a graph of message records, preserving provider meaning while declaring what could not be carried.


A graph, not a transcript

Messages retain parent references, source roles, content parts, sibling order, branches, selected leaves, and provider extensions. This avoids silently turning a regenerated response or edited path into one false linear history.

Conversation record

{
  "ocp_version": "0.4",
  "schema_uri": "https://opencontinuity.org/schemas/0.4/conversation.schema.json",
  "type": "conversation",
  "id": "urn:uuid:00000000-0000-4000-8000-000000000200",
  "revision": 1,
  "created_at": "2026-08-13T12:00:00Z",
  "created_by": {
    "id": "https://provider-one.example",
    "type": "service",
    "display_name": "Synthetic OCP Provider 1"
  },
  "extensions": {},
  "profile_id": "https://opencontinuity.org/profiles/conversation",
  "profile_version": "0.4",
  "compatible_core": ">=0.4 <0.5",
  "subjects": [
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000101",
      "type": "person",
      "display_name": "Synthetic User"
    }
  ],
  "space_ref": {
    "id": "urn:uuid:00000000-0000-4000-8000-000000000102",
    "revision": 1,
    "schema_uri": "https://opencontinuity.org/schemas/0.4/context-space.schema.json",
    "digest": "sha-256:7d1d417fcb3aa98fadae41f5be2b6cb59ad4de12264fbd2f0a633d521c691255"
  },
  "source_authority": {
    "id": "https://provider-a.example",
    "type": "service",
    "display_name": "Synthetic Provider A"
  },
  "runtime_source": {
    "actor": {
      "id": "https://provider-one.example",
      "type": "service",
      "display_name": "Synthetic OCP Provider 1"
    },
    "software_name": "OCP Reference Importer",
    "software_version": "0.4-test",
    "execution_context": "offline_import",
    "build_digest": "sha-256:1111111111111111111111111111111111111111111111111111111111111111"
  },
  "provider_conversation_id": "conversation-abc",
  "title": "Synthetic branching history",
  "source_created_at": "2026-08-01T10:00:00Z",
  "source_updated_at": "2026-08-01T10:01:03Z",
  "imported_at": "2026-08-13T11:55:00Z",
  "representation_created_at": "2026-08-13T12:00:00Z",
  "root_message_refs": [
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000210",
      "revision": 1,
      "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
      "digest": "sha-256:cc7b803e2dedd3ed3fc7e69036a607d904116e57ca49c777b3a6cfc0e7f85047"
    }
  ],
  "message_refs": [
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000210",
      "revision": 1,
      "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
      "digest": "sha-256:cc7b803e2dedd3ed3fc7e69036a607d904116e57ca49c777b3a6cfc0e7f85047"
    },
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000211",
      "revision": 1,
      "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
      "digest": "sha-256:4a3df2a009e008ea41edb96ae9087440584fd15ffe4a37cca7857ada1b108ee1"
    },
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000212",
      "revision": 1,
      "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
      "digest": "sha-256:e617c7a9a0db6d6c008c66b5df052d893e392f5690a48d6b0e3b4e8157367a49"
    },
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000213",
      "revision": 1,
      "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
      "digest": "sha-256:01d3af59849455b42805390084f4d647899115e51657c5ae0b2ebc6f28fbc6ae"
    },
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000214",
      "revision": 1,
      "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
      "digest": "sha-256:84f094d757715fa8cb85d98c526d891dbf1fbe788ae69c25ebe6a2dfe56dd2fc"
    }
  ],
  "selected_leaf_refs": [
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000214",
      "revision": 1,
      "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
      "digest": "sha-256:84f094d757715fa8cb85d98c526d891dbf1fbe788ae69c25ebe6a2dfe56dd2fc"
    }
  ],
  "graph_state": "complete",
  "branches": [
    {
      "branch_id": "original-response",
      "leaf_ref": {
        "id": "urn:uuid:00000000-0000-4000-8000-000000000211",
        "revision": 1,
        "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
        "digest": "sha-256:4a3df2a009e008ea41edb96ae9087440584fd15ffe4a37cca7857ada1b108ee1"
      },
      "state": "abandoned"
    },
    {
      "branch_id": "regenerated-response",
      "leaf_ref": {
        "id": "urn:uuid:00000000-0000-4000-8000-000000000214",
        "revision": 1,
        "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
        "digest": "sha-256:84f094d757715fa8cb85d98c526d891dbf1fbe788ae69c25ebe6a2dfe56dd2fc"
      },
      "state": "selected"
    }
  ],
  "participants": [
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000101",
      "type": "person",
      "display_name": "Synthetic User"
    },
    {
      "id": "https://provider-a.example",
      "type": "service",
      "display_name": "Synthetic Provider A"
    }
  ],
  "ordering_semantics": "parent_edges_then_optional_sibling_order",
  "integrity": {
    "algorithm": "sha-256",
    "canonicalization": "RFC8785",
    "semantic_graph_digest": "sha-256:1ae19963edf7d023fe77e3f17693a293514ed17470ab52ba00b8454bd95e7573"
  },
  "provider_extensions": {
    "provider_a.export_variant": "synthetic-v1"
  },
  "sensitivity": "normal",
  "lifecycle": {
    "status": "active"
  }
}
JSONSynthetic branching-history fixture

Message and content parts

Portable content parts distinguish text, artifact references, citations, and other typed content. Each part can carry its own instruction treatment, redaction state, and integrity metadata.

{
  "ocp_version": "0.4",
  "schema_uri": "https://opencontinuity.org/schemas/0.4/message.schema.json",
  "type": "message",
  "id": "urn:uuid:00000000-0000-4000-8000-000000000210",
  "revision": 1,
  "created_at": "2026-08-01T10:00:00Z",
  "created_by": {
    "id": "https://provider-one.example",
    "type": "service",
    "display_name": "Synthetic OCP Provider 1"
  },
  "extensions": {},
  "profile_id": "https://opencontinuity.org/profiles/conversation",
  "profile_version": "0.4",
  "conversation_ref": {
    "id": "urn:uuid:00000000-0000-4000-8000-000000000200",
    "revision": 1,
    "schema_uri": "https://opencontinuity.org/schemas/0.4/conversation.schema.json"
  },
  "sender": {
    "id": "urn:uuid:00000000-0000-4000-8000-000000000101",
    "type": "person",
    "display_name": "Synthetic User"
  },
  "source_role": "user",
  "message_kind": "user_turn",
  "parent_refs": [],
  "sent_at": "2026-08-01T10:00:00Z",
  "source_timestamp_precision": "second",
  "content_parts": [
    {
      "part_id": "urn:uuid:00000000-0000-4000-8000-000000000410",
      "type": "text",
      "text": "Please make a visual summary of the attached reference.",
      "language": "en",
      "instruction_treatment": "untrusted_data"
    },
    {
      "part_id": "urn:uuid:00000000-0000-4000-8000-000000000411",
      "type": "artifact_ref",
      "artifact_ref": {
        "id": "urn:uuid:00000000-0000-4000-8000-000000000300",
        "revision": 1,
        "schema_uri": "https://opencontinuity.org/schemas/0.4/artifact.schema.json",
        "digest": "sha-256:e80526f8a4b34a46c2dba633440a155e770d793d3a40c92c838cc5e3446ea395"
      },
      "relationship": "attachment",
      "semantic_type_hint": "image",
      "content_disclosed": false,
      "instruction_treatment": "untrusted_data"
    }
  ],
  "artifact_refs": [
    {
      "id": "urn:uuid:00000000-0000-4000-8000-000000000300",
      "revision": 1,
      "schema_uri": "https://opencontinuity.org/schemas/0.4/artifact.schema.json",
      "digest": "sha-256:e80526f8a4b34a46c2dba633440a155e770d793d3a40c92c838cc5e3446ea395"
    }
  ],
  "citation_refs": [],
  "tool_interaction_refs": [],
  "provider_message_id": "provider-message-210",
  "generation_metadata": {},
  "sibling_order": 0,
  "instruction_treatment": "untrusted_data",
  "redaction_state": {
    "state": "none"
  },
  "sensitivity": "normal",
  "lifecycle": {
    "status": "active"
  },
  "provider_extensions": {},
  "integrity": {
    "algorithm": "sha-256",
    "canonicalization": "RFC8785",
    "content_parts_digest": "sha-256:f180cb0153a01782f1eade2d8400800424f4e538e83eb35e4a7ebc162bdf24e3"
  }
}
JSONMessage with an artifact reference

Round-trip evidence

  • Compare semantic graphs, not provider-specific serialization order.
  • Preserve unknown non-critical extensions through import and export.
  • Record downgrade and loss by class and affected path.
  • Keep the source authority distinct from the runtime importer.

Search Open Continuity