---
schema: formation.doc/v0.1
kind: doc
visibility: public
canonical_url: https://topologyindex.com/docs/schemas/research/v0.1.md
document_kind: research
document_schema: formation.research/v0.1
path: /docs/schemas/research/v0.1.md
product_api_version: v1
schema_version: v0.1
title: formation.research/v0.1
---

# formation.research/v0.1

Frontmatter fields of a `research` page. This service publishes these pages and never
accepts one, so the schema is a promise about what it serves: its tests check every page
against it. Prose in the body explains; the frontmatter is what to read.

## Fields

- `schema` (required): exactly `formation.research/v0.1`
- `kind` (required): exactly `research`
- `visibility` (required): exactly `public`
- `path` (required): resource path, pattern `^\/[A-Za-z0-9._~/-]{0,255}$`, at most 256 characters
- `canonical_url` (required): https URL, pattern `^https:\/\/[A-Za-z0-9.-]+(?:\/\S*)?$`, at most 512 characters
- `product_api_version` (required): API version, pattern `^v\d{1,4}$`, at most 5 characters
- `schema_version` (required): schema version, pattern `^v\d{1,4}\.\d{1,4}$`, at most 11 characters
- `source_id` (required): research record identifier, pattern `^[a-z0-9](?:[a-z0-9-]{0,126}[a-z0-9])?$`, at most 128 characters. The research record identifier.
- `title` (required): title, pattern `^[^\p{Cc}]+$`, at most 200 characters
- `type` (required): one of `empirical_incident`, `paper`
- `confidence` (required): one of `descriptive_only`, `correlational`, `controlled`. What the strongest source behind the record could support, not how much anyone believes it.
- `published_on` (required): source date, pattern `^\d{4}-\d{2}(?:-\d{2})?$`, at most 10 characters
- `source_urls` (required): array of 1 to 32 items, each https URL, pattern `^https:\/\/[A-Za-z0-9.-]+(?:\/\S*)?$`, at most 512 characters
- `patterns` (required): array of 0 to 23 items, each one of `single_agent`, `fan_out`, `map_reduce`, `independent_workers`, `lane_swarm`, `supervisor`, `planner_worker`, `role_pipeline`, `hierarchical_delegation`, `blackboard`, `shared_ledger`, `mailbox_network`, `implement_review`, `critic_loop`, `council`, `debate`, `dynamic_spawning`, `coordinator_election`, `adaptive_routing`, `tree_search`, `architecture_search`, `successor_handoff`, `signed_coordination`
- `topology_candidates` (required): array of 0 to 16 items, each map (fields listed below). Vocabulary a Topology Index reconstruction proposes from the sources; never a recommendation.
- `topology_candidates[].id` (required): identifier, pattern `^[a-z][a-z0-9_]{0,63}$`, at most 64 characters
- `topology_candidates[].version` (required): semantic version, pattern `^(?:0|[1-9]\d{0,8})\.(?:0|[1-9]\d{0,8})\.(?:0|[1-9]\d{0,8})(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$`, at most 64 characters
- `topology_candidates[].topology` (required): one of `single`, `reviewer`, `adaptive_review`, `custom`
- `topology_candidates[].patterns` (required): array of 0 to 23 items, each one of `single_agent`, `fan_out`, `map_reduce`, `independent_workers`, `lane_swarm`, `supervisor`, `planner_worker`, `role_pipeline`, `hierarchical_delegation`, `blackboard`, `shared_ledger`, `mailbox_network`, `implement_review`, `critic_loop`, `council`, `debate`, `dynamic_spawning`, `coordinator_election`, `adaptive_routing`, `tree_search`, `architecture_search`, `successor_handoff`, `signed_coordination`
- `topology_candidates[].vocabulary_refs` (required): array of 1 to 16 items, each map (fields listed below)
- `topology_candidates[].vocabulary_refs[].namespace` (required): vocabulary namespace, pattern `^[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*$`, at most 96 characters
- `topology_candidates[].vocabulary_refs[].id` (required): vocabulary identifier, pattern `^[a-z][a-z0-9_-]{0,63}$`, at most 64 characters
- `topology_candidates[].vocabulary_refs[].version` (required): semantic version, pattern `^(?:0|[1-9]\d{0,8})\.(?:0|[1-9]\d{0,8})\.(?:0|[1-9]\d{0,8})(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$`, at most 64 characters
- `topology_candidates[].status` (required): one of `proposed`, `experimental`, `validated`
- `topology_candidates[].starter_formation` (required): null or resource path, pattern `^\/[A-Za-z0-9._~/-]{0,255}$`, at most 256 characters. The unvalidated starter reconstructed from the candidate, if there is one.
- `qualifies_as_evidence` (required): boolean. Always false: a research record is never evidence.
- `research_index` (required): resource path, pattern `^\/[A-Za-z0-9._~/-]{0,255}$`, at most 256 characters
