Taxonomy
Concepts

Subchains

Named, ordered groupings of categories at the datachain-type level, and their realizations on a datachain instance.
A subchain is a named group of categories declared on a datachain type (e.g. data_flow = [input_dataset, processing, output_dataset]). A subchain instance is a concrete realization of one of those subchains on a single datachain instance.

Why

Modern AI systems are compositional. A customer-support assistant might compose a perceptive model (transcribe the inbound call) with an analytical model (classify intent and retrieve relevant policy) and an agentic actuator (draft a reply and file a ticket). Each leg has its own input → processing → output flow. The flat elements list of a datachain cannot tell three flows apart.

Subchains let an author group categories into named flows on the datachain type, and then realize those flows multiple times on a single instance.

At the datachain-type level

DatachainType.subchains[] declares which subchains exist for this type:

subchains:
  - id: data_flow
    name:
      - locale: en
        value: Data Flow
    categories:
      - input_dataset
      - processing
      - output_dataset

Categories may belong to multiple subchains. The subchain is purely a grouping; required-ness, ordering, and shape continue to live on the categories themselves.

At the datachain-instance level

DatachainInstance.subchain_instances[] declares concrete realizations for this disclosure. Each subchain_instance references one of the subchains declared on the type, may name head_refs (typically functional-mode element ids that head the flow), and may carry an explicit order:

{
  "subchain_instances": [
    { "id": "perceptive_flow", "subchain_id": "data_flow", "head_refs": ["perceptive_mode"], "order": 1 },
    { "id": "analytical_flow", "subchain_id": "data_flow", "head_refs": ["analytical_mode"], "order": 2 },
    { "id": "agentic_flow",    "subchain_id": "data_flow", "head_refs": ["agentic_mode"],    "order": 3 }
  ]
}

Each element in DatachainInstance.elements[] may carry a subchain_instance_id. Elements with one render inside their subchain instance; elements without one render at the datachain root (Accountable, Purpose, Rights, Risks).

Worked example — customer-support assistant

A single deployment composes three modes — perceptive, analytical, agentic. Each mode heads one realization of data_flow:

  • Perceptive flow: call audio → speech-to-text model → transcript.
  • Analytical flow: transcript → intent classifier + policy retriever → ranked policy snippets.
  • Agentic flow: ranked policy snippets → reply drafter + ticket-filing tool → sent reply and filed ticket.

Authoring this as one datachain instance: three subchain_instances (each with subchain_id: data_flow), one functional-mode element per flow (heads it via head_refs), and the input / processing / output elements per flow each carry the matching subchain_instance_id.

See also