A protocol, format, or interface contract a product implements, exposes, or conforms to.
A specification is the governed contract that sits beneath or across products. It defines what a query language accepts, what bytes a wire protocol carries, what JSON shape a data format requires, or what calls an interface contract permits. Products do not own specifications; they implement them, expose them, or conform to them.
The idea of separating a specification from its implementations is as old as standards bodies. The IETF has published RFC documents since 1969, treating the document as the normative contract and the software as the thing that claims conformance. The W3C formalised the same pattern for the web: HTML, CSS, and XML are specifications; browsers and editors are implementations. The spec outlives any one implementation, and any number of implementations can independently claim conformance.
In modern product ecosystems the pattern reappears at the application layer. OpenAPI describes REST APIs; GraphQL is stewarded by the GraphQL Foundation; OAuth 2.0 and OpenID Connect are ratified by the IETF. The identity providers and relying parties that implement them are the products — the specifications belong to no one product.
What distinguishes a specification in UPG from a featureFeatureProduct SpecificationA product capability or featureView reference → is governance and reuse. A feature is a capabilityCapabilityStrategyAn ability that enables value deliveryView reference → a product team owns and can change on their roadmapRoadmapProduct SpecificationA strategic plan of features and milestonesView reference →. A specification is a contract that many products point to, and changing it requires a process separate from any one product's releaseReleaseProduct SpecificationA shipped version of the productView reference → cycle. The governance field carries whether the contract was ratified by a formal standards body, reached de-facto status through wide adoption, or exists only inside one organisation as an internal primitivePrimitiveFoundationsA primitive entityView reference →.
A platform team ships three products that each implement GROQ as a query surface. Without the specification entity, each product carries a feature node like "GROQ query support" with no shared identity. When the GROQ spec updates, the team must find all three feature nodes and update them independently. Worse, no one can query the graph to ask which products conform to GROQ, because there is no single node to ask about.
With the specification entity, the team creates one canonical GROQ node in the registry. Each product links to it via product_implements_specification or product_exposes_specification. A single update touches one node. A query for all products conforming to GROQ resolves instantly. Competitive relationships link via Specificationcompetes withSpecificationsemantic, making the landscape visible without polluting any product node.specification_competes_with_specification
In the Unified Product Graph a specification is a registry-hostable canonical entity in the Foundations domain. Product nodes link to it via product_implements_specification or product_exposes_specification; individual features link via feature_conforms_to_specification when only a capability slice claims conformance. Dialect relationships are captured via SpecificationextendsSpecificationhierarchy (GFM extends CommonMark) and competitive tension via specification_extends_specificationSpecificationcompetes withSpecificationsemantic. The specification lifecycle runs draft → active → deprecated → superseded, keeping version history explicit rather than implied by a field on a product feature.specification_competes_with_specification
Type-specific fields on BaseNode
kindenumWhat the artifact fundamentally is, independent of how it is governed.
language_flavorenumSet only when `kind` is `language`: the kind of language.
governanceenumHow the specification is governed (its ratification status, and whether it counts as a `standard`). `open_standard_consortium` is a formal standard (W3C, IETF, ISO); `de_facto` and `internal_primitive` never became one.
stewardstringThe governing body or organisation (may later become an `organization` ref).
opennessenumWhether the specification itself is open or proprietary.
spec_urlstringURL of the published specification.
current_versionstringLatest published version string.
sincestringYear or version the specification was introduced.
conformancestringHow conformance is tested (test suite, certification program). Optional.
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
4 phases, initial: draft
6 edge types connected to this entity.
specification_extends_specificationspecification_extends_specificationspecification_competes_with_specificationspecification_competes_with_specificationprimitive_defined_by_specificationspecification_governed_by_organization