NAV
yaml

OPEN DATA PRODUCT RECIPE SPECIFICATION - The Linux Foundation

Version DRAFT

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 (RFC 2119 and RFC 8174) when, and only when, they appear in all capitals, as shown here.

The specification is shared under Apache 2.0 license. Development of the specification is under the umbrella of the Linux Foundation.

Topic Link Description
Version source Data Product Recipe Specification on GitHub Official source repository for the ODPR specification
Knowledge Base Open Data Product Spec Family Knowledge Base Practical examples, FAQs, and implementation guidance
Contribute Raise an issue in GitHub Submit issues or suggestions to the specification maintainers

Introduction

The Data Product Recipe Specification, ODPR, is a lightweight, vendor-neutral, machine-readable standard for repeatable data product delivery.

ODPR is part of the OpenDataProducts.org standards family. It complements the Open Data Product Specification, ODPS, Open Data Product Catalogs, ODPC, Open Data Product Graphs, ODPG, and Open Data Product Vocabulary, ODPV, by defining how delivery work around those artifacts can be declared, discovered, configured, validated, reviewed, and handed off.

ODPR standardizes how data product work gets done, not only what the final artifact looks like.

ODPR has three primary composite flows. It defines delivery flows for repeatable work such as portfolio building and release validation. It defines product handoff flows for developers and AI agents implementing one data product. It defines trigger-based flows, where graph changes can make declared work applicable.

Recipes, runtime profiles, and recipe catalogs are supporting building blocks. Recipes describe the reusable workflow unit. Runtime profiles let recipes reference approved LLM or model runtime configuration without embedding credentials, endpoints, or model settings in the recipe. Catalogs help teams and agents discover available recipes.

ODPR purposes and supporting functions.

What ODPR defines

Note! In "Open Data Product" the focus is on the latter words and the prefix "open" refers to the openness of the standard. Any connotations to open data are not intentional, intended, or desirable.

Why ODPR is needed

Data product work often depends on manual command sequences, scripts, notebooks, prompts, and local habits. That creates delivery variation, makes validation and review steps easy to skip, hides model-provider choices, and forces CI/CD automation and AI agents to guess the intended workflow.

ODPR solves this by giving teams and tools three composite flow contracts: delivery flows, product handoff flows, and trigger-based automation boundaries. A recipe building block describes:

Primary flow types

ODPR has three root-level flow types.

1. Delivery flows declare repeatable work such as portfolio building, validation, localization, publishing, and release review.

2. Product handoff flows declare the reviewable handoff for developers and AI agents implementing one data product.

3. Trigger-based flows declare when graph changes can make work applicable. They use triggers and graph context, while ODPG remains the graph source of truth.

Recipes, runtime profiles, and recipe catalogs support these flows. They are part of ODPR v1 because flows need reusable workflow units, runtime references, and discovery, but they are not the main reason the specification exists.

Supporting functions

Recipe, RuntimeProfile, and RecipeCatalog are support building blocks for the three flow types. Their detailed YAML structures are described after the flow sections.

Relationship to the standards family

ODPR relationship to the standards family.

The OpenDataProducts.org standards family follows a separation of concerns:

ODPR does not define the product, catalog, graph, or vocabulary model. It defines delivery workflow and handoff contracts around those artifacts.

Reading order

Read the three flow sections first: Delivery Flows, Product Handoff Flows, and Trigger-Based Flows. Then use the support sections for the reusable YAML building blocks: Recipe, RuntimeProfile, and RecipeCatalog.

Delivery Flows

Root shape example:

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: Recipe
recipe:
  metadata:
    id: RCP-DELIVERY-001
    name:
      en: Portfolio Delivery Flow
  version: "1.0.0"
  type: release
  scope: portfolio
  execution:
    mode: hosted
    runtimeRef: runtime-profiles/examples/production-quality.yaml#production-quality
  steps:
    - id: refresh-portfolio
      command: portfolio.refresh
  review:
    required: true

Delivery flows declare repeatable work around data product artifacts. They cover work such as portfolio building, validation, localization, publishing, release review, and other delivery operations that teams want to make portable across tools and environments.

Delivery flows coordinate a sequence of delivery operations. A delivery flow can generate or refresh artifacts, validate them, render outputs, localize content, explain results, and require review before release.

Delivery flow boundaries

A delivery flow SHOULD answer five practical questions before any tool runs:

A delivery flow MUST NOT redefine ODPS product metadata, ODPC catalog structure, ODPG graph semantics, ODPV vocabulary terms, SDK internals, provider internals, or CI/CD engine behavior. It may reference those standards as inputs, context, or outputs of the delivery work.

Delivery flow fields

Element name Type Options Description
schema string ODPR schema URI URI of the ODPR schema used to validate the document.
version string ODPR specification version Version of the ODPR specification used by the document.
kind string Recipe ODPR root object type. Delivery flows are encoded as Recipe documents.
recipe object - Top-level object that declares the delivery flow contract.
recipe.metadata object - Stable delivery flow identity and name.
recipe.metadata.id string - Stable delivery flow identifier.
recipe.metadata.name object localized text object Human-readable delivery flow name.
recipe.version string semantic version Version of this delivery flow artifact. This is separate from the top-level ODPR specification version.
recipe.type string development, ci, release, agent, custom Delivery flow intent. Use development for draft generation or working artifacts, ci for automated validation, release for portfolio preparation or publication review, agent for agent-assisted delivery work, and custom only when the standard intents do not fit.
recipe.scope string data-product, portfolio, graph, catalog, fragment, custom Artifact area affected by the delivery flow.
recipe.execution.mode string local, hosted, hybrid, none Runtime expectation for the delivery flow.
recipe.execution.runtimeRef string runtime reference URI-reference to a RuntimeProfile document. A fragment selects the provider profile when needed.
recipe.steps array ordered step objects Ordered delivery operations that run.
recipe.outputs array output objects Durable files, folders, reports, rendered pages, or review notes expected after the run.
recipe.gates array gate objects Validation, quality, publication, or release conditions.
recipe.review.required boolean true, false Whether human review is required before accepting the delivery flow result.

Delivery flow model

recipe:
  type: release
  scope: portfolio
  execution:
    mode: hosted
    runtimeRef: runtime-profiles/examples/production-quality.yaml#production-quality
  inputs:
    - id: portfolio-workspace
      path: portfolio/
  steps:
    - id: refresh-portfolio
      command: portfolio.refresh
    - id: explain-portfolio
      command: portfolio.explain
  outputs:
    - id: release-explanation
      path: portfolio/explanation.md
  gates:
    - id: human-review
      type: review
      required: true
  review:
    required: true

A delivery flow is the portable operating contract for a repeatable delivery activity. It is not the artifact being produced and it is not the runtime that executes the work. It declares the work in a form that a developer, CI runner, SDK executor, MCP server, or AI agent can inspect before the run starts.

Delivery flow contract model.

Every delivery flow SHOULD make these parts visible:

Part Purpose
Work intent The delivery activity being performed, such as draft generation, validation, portfolio refresh, localization, release review, or publishing preparation.
Scope The artifact area affected by the work, such as one product workspace, generated fragments, graph context, catalog input, or portfolio output.
Operations The ordered delivery operations that run, including the command names and the minimal inputs needed by each operation.
Runtime expectation Whether the flow expects local, hosted, hybrid, or model-free execution, and which runtime reference is used when model-backed work is required.
Durable outputs The files, folders, rendered pages, reports, or review notes that should exist after the run.
Gates and review The validation checks, quality checks, human review, or release ownership expectations that determine whether the result can be accepted.

The supporting Recipe building block carries the structured fields for these parts. The delivery flow section defines why the flow exists and what contract it represents; the Recipe section defines the reusable YAML shape.

Delivery flow examples

Canonical examples live in /recipes/examples/. They are complete ODPR files that demonstrate delivery flow patterns without making this section a YAML reference manual.

Example Demonstrates
minimal.yaml A smallest valid delivery flow for local draft generation.
ci-validate-generated-fragments.yaml A CI delivery flow that generates fragments, validates them, and fails when a required gate fails.
release-portfolio-review.yaml A production delivery flow that refreshes, localizes, explains, and requires review before release.
portfolio-localization.yaml A localization delivery flow that turns portfolio input into configured language outputs.
hybrid-graph-review.yaml A hybrid delivery flow where local graph context is prepared before hosted explanation or review.

Product Handoff Flows

Product handoff flows create a reviewable handoff for developers and AI agents implementing one data product. The DataProductRecipe manifest is the structured building block for that handoff.

The manifest indexes a reviewable set of files. Mandatory core sections make every data product recipe understandable and validatable, including the graph context for the product. Optional standardized sections add detail only when the product needs them.

Data Product Recipe manifest with mandatory core sections and optional standardized sections.

DataProductRecipe is the ODPR root object for the reviewable handoff artifact used by developers and AI agents when planning and implementing one data product.

The data product recipe manifest describes the handoff artifact. It does not define implementation workflow execution, and it does not define the ODPS product itself. Developers and AI agents may use their own repositories, platforms, CI/CD systems, SDKs, and agent tools to implement the product. The source product specification remains an ODPS file referenced by the data product recipe.

Root structure

Root shape example:

schema: <ODPR schema URI>
version: "1.0"
kind: DataProductRecipe
dataProductRecipe:
  metadata:
    id: <data product recipe id>
    name: <localized data product recipe name>
    description: <localized data product recipe description>
  version: <data product recipe artifact version>
  status: draft
  sections: []
  readiness: {}
  review: {}

The data product recipe root uses the same ODPR document envelope as other ODPR objects: schema, version, and kind identify the document, and dataProductRecipe contains the manifest.

Manifest

Example:

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: DataProductRecipe
dataProductRecipe:
  metadata:
    id: DPR-001
    name:
      en: Customer Analytics Data Product Recipe
    description:
      en: Reviewable recipe for delivering the Customer Analytics data product.
  version: "1.0.0"
  status: draft
  sections:
    - id: recipe-readme
      path: README.md
      format: markdown
    - id: source-product-spec
      path: product-context/odps.yaml
      format: yaml
    - id: product-summary
      path: plans/product-summary.md
      format: markdown
    - id: delivery-plan
      path: plans/delivery-plan.md
      format: markdown
    - id: open-questions
      path: governance/open-questions.md
      format: markdown
    - id: ai-agent-brief
      path: agent/ai-agent-brief.md
      format: markdown
    - id: relationship-context
      path: context/odpg.yaml
      format: yaml
  readiness:
    score: 0
    status: missing
  review:
    required: true
    status: pending

data-product-recipe.yaml is mostly structure and metadata. More precisely, it is the manifest index for the handoff artifact. It answers these questions:

The manifest MUST NOT contain the full plan content, product specification, relationship graph, pricing details, implementation instructions, or AI-agent operating brief. Those details belong in referenced files such as plans/delivery-plan.md, product-context/odps.yaml, context/odpg.yaml, optional plan sections, and agent/ai-agent-brief.md.

The YAML example shows the minimal valid data product recipe manifest. It includes every schema-required field and every mandatory section ID, including relationship-context, but omits optional metadata and optional sections such as pricing-plan, sla-plan, and relationship-plan.

Manifest fields

Element name Type Options Description
metadata object - Stable data product recipe identity and name.
metadata.id string - Stable data product recipe identifier.
metadata.name object localized text object Human-readable data product recipe name.
metadata.description object localized text object Short data product recipe description for human readers.
version string semantic version Version of this data product recipe artifact. This is separate from the top-level ODPR specification version.
status string announcement, draft, development, testing, acceptance, production, sunset, retired Data product recipe lifecycle status aligned with ODPS status values.
sections array mandatory section IDs Data product recipe section index with stable section IDs, paths, and formats. The source ODPS product specification and recipe README are referenced through mandatory section entries instead of duplicate top-level fields.
readiness.score number 0-100 Readiness confidence; 0 means no readiness confidence and 100 means full readiness confidence.
readiness.status string missing, partial, ready Readiness status.
review.required boolean true, false Whether human review is required before implementation, publication, automation, or agent-assisted code work.
review.status string pending, approved, changes-requested Review state for the manifest: still pending, approved, or requiring changes.

Optional data product recipe fields

Element name Type Options Description
recipeRef relative path - Optional provenance or generation-context reference for the ODPR recipe that created or informed the data product recipe. It is not an instruction for developers or AI agents to execute an ODPR workflow recipe.

Package structure

Minimum folder structure example:

customer-analytics-data-product-recipe/
├── data-product-recipe.yaml
├── README.md
├── product-context/
│   └── odps.yaml
├── context/
│   └── odpg.yaml
├── plans/
│   ├── product-summary.md
│   └── delivery-plan.md
├── governance/
│   └── open-questions.md
└── agent/
    └── ai-agent-brief.md

A minimum valid data product recipe is a small manifest-led folder. The root contains the data-product-recipe.yaml manifest and the README.md entrypoint. The remaining files are the mandatory core sections referenced from dataProductRecipe.sections, including the source ODPS product specification, relationship context, planning notes, governance questions, and AI-agent brief.

This folder structure is the recommended minimum convention. It keeps the schema-required section IDs discoverable without making ODPR a filesystem standard.

Folder or file Typical content
data-product-recipe.yaml Root DataProductRecipe manifest.
README.md recipe-readme section and first reader entrypoint.
product-context/ Source ODPS product specification.
context/ Mandatory ODPG graph or relationship context.
plans/ Mandatory product summary and delivery plan.
governance/ Mandatory open questions.
agent/ Mandatory AI agent brief and agent-facing handoff guidance.

The schema validates the section IDs, paths, and formats declared in dataProductRecipe.sections. It does not require every data product recipe to use identical directory names, but using the minimum structure makes packages predictable for humans, SDKs, CI checks, and AI agents.

Full folder structure

Full folder structure example:

customer-analytics-data-product-recipe/
├── data-product-recipe.yaml
├── README.md
├── product-context/
│   └── odps.yaml
├── context/
│   └── odpg.yaml
├── plans/
│   ├── product-summary.md
│   ├── delivery-plan.md
│   ├── product-interface-plan.md
│   ├── access-plan.md
│   ├── contract-plan.yaml
│   ├── pricing-plan.md
│   ├── quality-plan.md
│   ├── sla-plan.md
│   ├── lifecycle-plan.md
│   ├── relationship-plan.md
│   ├── validation-plan.md
│   └── test-plan.md
├── readiness/
│   └── operational-readiness.md
├── governance/
│   ├── open-questions.md
│   ├── risk-register.md
│   └── developer-review-checklist.md
├── implementation/
│   ├── implementation-constraints.md
│   └── backlog-items.md
├── portfolio/
│   └── portfolio-context.md
└── agent/
    └── ai-agent-brief.md

The full structure shows one conventional placement for every standardized optional section. It is an example for complete or highly governed data product recipes, not the minimum required package.

Optional planning sections can live under plans/ when they describe product interfaces, access, contracts, pricing, quality, SLA, lifecycle, relationships, validation, or tests. Readiness-specific material may use readiness/. Governance material may use governance/. Implementation-oriented optional sections may use implementation/, and portfolio context may use portfolio/.

The manifest remains the source of truth. A full folder is valid only when the corresponding optional section IDs, paths, and formats are declared in dataProductRecipe.sections. Files that are not declared in the manifest are supporting material, not standardized Data Product Recipe sections.

Required handoff contents

The following core files define the minimum data product recipe that a developer, reviewer, SDK, CI check, or AI agent can rely on. A valid DataProductRecipe manifest MUST reference each one through dataProductRecipe.sections.

Mandatory Data Product Recipe core section files.

Each entry in dataProductRecipe.sections is an index record with a stable id, a path relative to the data product recipe root, and a format. The schema validates that the required IDs are present; tooling can then use the paths and formats to locate the actual Markdown or YAML files.

The mandatory core is intentionally small. Markdown sections carry the human delivery narrative, open decisions, and agent instructions. YAML sections carry the machine-readable source product specification and relationship graph context. Optional data product recipe sections may add more detail, but they do not replace these core files.

recipe-readme

Recipe README example:

## Recipe Status

Status: draft
Readiness score: 0
Review status: pending

## Read Order

1. product-context/odps.yaml
2. plans/product-summary.md
3. plans/delivery-plan.md
4. governance/open-questions.md
5. agent/ai-agent-brief.md
6. context/odpg.yaml

## Mandatory Sections

- recipe-readme
- source-product-spec
- product-summary
- delivery-plan
- open-questions
- ai-agent-brief
- relationship-context

## Optional Sections Present

- None

## Blocking Questions

- See governance/open-questions.md.

## Approval Gates

- Human review is required before implementation.

## Next Action

Resolve delivery-blocking questions.

recipe-readme is the required human and agent entrypoint for the data product recipe. It summarizes data product recipe status, read order, mandatory sections, optional sections present, blocking questions, approval gates, and the next action.

Use this section to orient a reviewer before they inspect the data product recipe details. The README should make the data product recipe state obvious without requiring the reader to open every referenced file.

Expected content:

Do not use this section for the full delivery plan, backlog, risk register, or implementation details. It should point to those sections when they exist.

Path: README.md

Format: markdown

source-product-spec

Source product specification example:

# Abbreviated ODPS product specification.
# Use the current ODPS schema and required ODPS fields.
schema: <current ODPS schema URI>
version: <ODPS specification version>
kind: DataProduct
product:
  productId: customer-analytics
  name: Customer Analytics

source-product-spec is the source ODPS product specification included for traceability. It is the product definition the data product recipe is about; ODPR does not redefine the product model.

Use this section as the authoritative product input. Developers and agents should treat it as the product contract and avoid inventing product facts that are not present in the ODPS source or in approved data product recipe sections.

Expected content:

Do not convert the ODPS product spec into ODPR fields. Do not use this file for delivery tasks, implementation notes, or agent instructions.

Path: product-context/odps.yaml

Format: yaml

product-summary

Product summary example:

## Product Identity

Customer Analytics

## Purpose

Provide reusable customer analytics data for approved consumers.

## Owner And Domain

Customer domain, analytics owner.

## Consumers

- Customer success
- Marketing analytics

## Use Cases

- Segment customers
- Monitor lifecycle signals

## Signals And Outcomes

- Customer activity signals
- Retention and growth outcomes

## Product Boundary

This data product recipe covers one data product, not dashboards or downstream apps.

product-summary gives a concise human-readable summary of the product, consumers, use cases, boundaries, and expected outcomes. It helps developers and agents understand the product without reading every source field first.

Use this section to translate the source product specification into a short reviewable narrative. The summary should help a developer understand what is being built and what is outside the product boundary.

Expected content:

Do not introduce product facts that contradict the ODPS source. If the source is ambiguous, record the ambiguity in open-questions instead of resolving it silently.

Path: plans/product-summary.md

Format: markdown

delivery-plan

Delivery plan example:

## Current Understanding

The source ODPS file defines one customer analytics data product.

## Decisions

- Use the source ODPS file as the product contract.
- Keep implementation changes human-reviewed.

## Missing Inputs

- Confirm target platform.
- Confirm consumer access path.

## Implementation Impact

Implementation requires product contract, access, and quality checks.

## Validation

Validate the data product recipe manifest, product spec, and generated implementation plan.

delivery-plan describes the developer-controlled implementation path. It captures sequencing, dependencies, implementation impact, and validation expectations without turning the data product recipe into an execution script.

Use this section to explain how the data product recipe can move from product definition to implementation. It should be practical enough for a developer to estimate the work and for an agent to understand the intended sequence.

Expected content:

Do not use this section for shell commands, deployment scripts, run logs, or automatic ticket creation. ODPR recipes define workflow intent; implementation execution belongs to tools and platforms.

Path: plans/delivery-plan.md

Format: markdown

open-questions

Open questions example:

## Delivery-Blocking Questions

- Which platform owns implementation?
- Which consumers need first access?

## Non-Blocking Questions

- Should pricing be added later?

## Decision Owners

- Product owner
- Engineering owner

## Required Before Implementation

- Resolve delivery-blocking questions.

open-questions records missing or ambiguous decisions. It is mandatory because draft packages are valid, but unresolved ambiguity must be visible.

Use this section to prevent false readiness. A data product recipe may be valid while still being incomplete, but the missing decisions must be explicit and assigned where possible.

Expected content:

Do not hide unknowns in prose elsewhere. Do not let an AI agent infer answers for delivery-blocking questions unless an authoritative data product recipe input provides the answer.

Path: governance/open-questions.md

Format: markdown

ai-agent-brief

AI agent brief example:

## Objective

Prepare implementation guidance for one data product recipe.

## Authoritative Inputs

- data-product-recipe.yaml
- product-context/odps.yaml
- plans/product-summary.md
- plans/delivery-plan.md
- governance/open-questions.md
- repository AGENTS.md or equivalent, when implementation code changes are requested

## Input Priority

1. data-product-recipe.yaml
2. product-context/odps.yaml
3. context/odpg.yaml
4. plans/*.md
5. governance/open-questions.md
6. repository agent instructions for code editing conventions only

## Allowed Work

- Read the data product recipe manifest first.
- Summarize implementation impact.
- Draft implementation guidance from referenced files.
- Inspect repository agent instructions before editing code.
- Preserve unrelated files.

## Prohibited Work

- Do not invent missing product facts.
- Do not create tickets or deploy automatically.
- Do not change source product or graph context unless asked.
- Do not copy tool-specific agent rules into the data product recipe.

## Ambiguity Handling

- Treat delivery-blocking questions as blockers.
- Record unresolved assumptions instead of silently resolving them.
- Prefer a short question over guessing when product facts conflict.

## Expected Outputs

- Implementation guidance.
- Validation notes.
- Open decisions that still require a human owner.
- Summary of files changed when implementation work is performed.

## Validation Expectations

- Check the Data Product Recipe manifest.
- Check referenced ODPS and ODPG files before implementation.
- Report validation commands, checks, or review evidence.

## Approval Gates

- Ask for review before implementation changes.

## Implementation Boundaries

- Work only from the referenced data product recipe files.
- Follow repository agent instructions when editing code.

ai-agent-brief is the handoff contract for AI-assisted work on the data product recipe. It gives agents the objective, authoritative inputs, input priority, allowed work, prohibited work, ambiguity handling, expected outputs, validation expectations, approval gates, and implementation boundaries. It derives common AGENTS.md practices into a product-specific brief: keep instructions task-local, make input priority explicit, preserve unrelated files, separate product facts from repository editing conventions, and require visible validation evidence. It keeps agent guidance in a file instead of adding agent-control fields to the manifest.

These practices are aligned with AGENTS.md research and industry guidance: use a dedicated agent-readable guidance artifact for efficiency (AGENTS.md efficiency study), keep instructions minimal and task-relevant to avoid reducing task success (AGENTS.md evaluation study), and avoid context bloat, conflicting instructions, and leaked tool-specific rules (AGENTS.md configuration-smell study).

Use this section to make the data product recipe safe for AI-assisted work. It should tell an agent what to read first, what it may produce, what it must not do, how to handle missing information, which outputs are expected, and when human approval is required.

Expected content:

Do not put model-provider settings, credentials, hidden prompts, or broad repository-wide agent rules here. Do not use this section to bypass unresolved questions or human approval gates. Do not paste an implementation repository's entire AGENTS.md into the data product recipe; reference repository instructions only when implementation work will happen in that repository. RuntimeProfile configuration belongs to ODPR RuntimeProfile objects or runtime configuration, and repository guidance belongs in the repository's agent instruction files.

Path: agent/ai-agent-brief.md

Format: markdown

relationship-context

Relationship context example:

schema: https://opendataproducts.org/odpg-v1.0/schema/odpg.yaml
version: 1.0
kind: Graph
graph:
  metadata:
    id: GRAPH-AVIATION-001
    name:
      en: Aviation Data Product Value Graph
    description:
      en: Graph for aviation data products, use cases, policies, agents, and objectives.
    domain:
      en: Aviation
    status: draft

  nodes:
    - id: UC-AVIATION-001
      type: UseCase
      $ref: ../usecases/predictive-maintenance-aircraft.yaml
    - id: OBJ-AVIATION-001
      type: BusinessObjective
      $ref: ../objectives/increase-fleet-availability.yaml
    - id: DP-AVIATION-001
      type: DataProduct
      $ref: ../products/aircraft-maintenance-history.yaml
    - id: DP-AVIATION-002
      type: DataProduct
      $ref: ../products/aircraft-sensor-events.yaml
    - id: AGENT-AVIATION-001
      type: Agent
      $ref: ../agents/maintenance-recommendation-agent.yaml

  edges:
    - from: UC-AVIATION-001
      to: DP-AVIATION-001
      type: uses
      confidence: high
    - from: UC-AVIATION-001
      to: DP-AVIATION-002
      type: uses
      confidence: high
    - from: UC-AVIATION-001
      to: OBJ-AVIATION-001
      type: supports
      confidence: high
    - from: AGENT-AVIATION-001
      to: DP-AVIATION-001
      type: uses
      confidence: high

relationship-context is the required graph context for the data product recipe. It references the ODPG relationship view that places the product in context with upstream products, downstream products, dependencies, shared signals, lineage, or other graph relationships.

Use this section to make product context explicit for humans, developers, and AI agents. A data product recipe may still describe relationship work in relationship-plan, but the context graph itself MUST be available through relationship-context.

Expected content:

Do not use this section for free-form relationship notes. Use an ODPG artifact or ODPG-compatible graph fragment so data product recipe context remains machine-readable.

Path: context/odpg.yaml

Format: yaml

JSON Schema validates the manifest shape, the closed section ID enum, and the presence of mandatory core section IDs. A repository checker SHOULD validate the recipe-readme heading order because JSON Schema should not parse Markdown bodies.

Optional standardized section IDs

Optional standardized section IDs add detail only when the data product recipe needs it. They are not required for a valid handoff artifact, but when present they MUST use one of the standardized IDs below in dataProductRecipe.sections. Each optional section entry still declares its own relative path and format in the manifest.

product-interface-plan

Product interface plan example:

## Interfaces

- REST API: customer segment lookup
- Table: analytics.customer_segments

## Consumers

- Customer success
- Marketing analytics

## Constraints

- No direct access to raw customer events.

product-interface-plan describes how consumers, platforms, tools, and agents will interact with the data product. Use it when the data product recipe needs to clarify interfaces beyond the product summary, such as APIs, files, events, query endpoints, semantic layers, catalog entries, or AI-agent context surfaces.

Expected content includes the interface types, intended consumers, access pattern for each interface, input/output expectations, and any interface-level constraints that affect implementation.

access-plan

Access plan example:

## Consumer Groups

- Customer success analysts

## Access Method

- Approved catalog request
- Read-only warehouse role

## Open Decisions

- Confirm external partner access.

access-plan describes how consumers get permission to use the product. Use it when access decisions, approval flow, identity model, entitlement, onboarding, or revocation must be understood before implementation.

Expected content includes consumer groups, authentication and authorization expectations, approval owners, access request flow, onboarding notes, and any access decisions that are still unresolved.

contract-plan

Contract plan example:

# Abbreviated ODCS-compatible YAML data contract.
# Use Open Data Contract Standard v3.1.0 for the complete shape.
id: customer-analytics-contract
version: 1.0.0
name: Customer Analytics Contract
schema:
  - name: customer_id
    type: string
  - name: segment
    type: string
quality:
  - dimension: completeness
    rule: customer_id must be present

contract-plan is a YAML data contract aligned with the Open Data Contract Standard v3.1.0. Use it when the data product recipe must clarify schemas, compatibility expectations, versioning behavior, breaking-change handling, or commitments between producers and consumers.

Expected content includes an ODCS-compatible contract structure, contract scope, schema or payload expectations, consumer obligations, producer obligations, compatibility policy, quality expectations when relevant, SLA or support expectations when relevant, and the review path for contract changes.

The contract-plan section entry MUST use format: yaml.

pricing-plan

Pricing plan example:

## Model

Internal showback by monthly active consumer team.

## Cost Drivers

- Storage
- Query volume
- Refresh frequency

## Review

Finance owner reviews quarterly.

pricing-plan describes the commercial, chargeback, or showback model for the data product. Use it when the product has pricing, internal cost allocation, entitlement tiers, cost drivers, or billing ownership that developers and reviewers must understand.

Expected content includes pricing model, chargeback or showback approach, entitlement tiers, measurable cost drivers, billing owner, review requirements, and unresolved pricing decisions.

quality-plan

Quality plan example:

## Dimensions

- Completeness: customer_id must be present
- Freshness: daily refresh before 08:00 UTC

## Blocking Checks

- Reject publish when required fields are missing.

## Warning Checks

- Warn when segment coverage drops below 95%.

quality-plan describes the quality expectations that implementation must support. Use it when freshness, completeness, accuracy, validity, uniqueness, or other quality dimensions need explicit checks.

Expected content includes quality dimensions, blocking validation rules, warning-level checks, expected thresholds, data owner responsibilities, and how quality failures should be surfaced.

sla-plan

SLA plan example:

## Targets

- Availability: 99 percent monthly
- Refresh: daily

## Support

- Owner: analytics operations
- Escalation: data product owner

## Measurement

- Monitor refresh completion and access errors.

sla-plan describes operational commitments for the product. Use it when the data product recipe needs to clarify availability, refresh timing, response expectations, incident handling, support model, escalation, or measurement.

Expected content includes service targets, measurement method, support owner, incident response expectations, escalation path, reporting cadence, and any SLA assumptions that need approval.

lifecycle-plan

Lifecycle plan example:

## Current State

development

## Transition Gates

- Contract approved
- Access reviewed
- Validation checks passing

## Change Process

Breaking changes require consumer review.

lifecycle-plan describes how the product moves through status changes over time. Use it when development, testing, acceptance, production, sunset, retired state, versioning, deprecation, or change process needs explicit guidance.

Expected content includes current lifecycle state, required transition gates, release or publication expectations, versioning approach, deprecation process, and owners for lifecycle decisions.

relationship-plan

Relationship plan example:

## Upstream Products

- Customer master data

## Downstream Consumers

- Retention dashboard

## Delivery Impact

- Confirm upstream freshness before implementation.

relationship-plan describes product relationships that affect delivery. Use it when upstream products, downstream consumers, shared objectives, shared signals, dependencies, conflicts, or portfolio gaps change implementation choices.

Expected content includes relevant upstream and downstream products, dependency type, relationship impact, unresolved conflicts, and how the required relationship-context should be interpreted during delivery.

validation-plan

Validation plan example:

## Required Checks

- Validate Data Product Recipe manifest
- Validate ODPS source product specification
- Validate ODCS contract plan when present

## Pass Criteria

- No schema errors
- No unresolved blocking questions

validation-plan describes how the data product recipe and resulting implementation should be checked before approval, publication, automation, or agent-assisted work. Use it when validation goes beyond the core data product recipe manifest checks.

Expected content includes specification validation, contract validation, quality validation, access validation, SLA validation, relationship validation, documentation validation, readiness validation, and pass/fail expectations.

test-plan

Test plan example:

## Test Scope

- Contract tests
- Quality checks
- Access checks

## Fixtures

- Approved sample customer segment records

## Acceptance

- Consumers can query approved fields only.

test-plan describes implementation-oriented tests derived from the data product recipe. Use it when developers need to convert the product intent into repeatable checks for code, pipelines, contracts, integrations, or consumer acceptance.

Expected content includes test scope, test levels, required fixtures, expected assertions, acceptance tests, negative tests, and AI-agent context tests when agent-assisted implementation is expected.

operational-readiness

Operational readiness example:

## Readiness Score

60

## Missing Inputs

- Final access owner
- SLA approval

## Launch Blockers

- Contract not approved

operational-readiness describes whether the data product recipe is ready to move toward production use. Use it when the readiness score needs supporting detail beyond the numeric readiness.score field.

Expected content includes readiness dimensions, readiness score rationale, missing inputs, launch blockers, required approvals, and the conditions needed to move from partial readiness to ready.

risk-register

Risk register example:

## Risks

- Risk: unclear external consumer access
  Impact: implementation delay
  Owner: product owner
  Status: open

## Blocking

- External access decision blocks launch.

risk-register records risks that could affect implementation or operation. Use it when known product, access, contract, quality, SLA, lifecycle, dependency, dashboard-confusion, or AI-agent-context risks need explicit tracking.

Expected content includes risk description, impact, likelihood, owner, mitigation, current status, and whether the risk blocks implementation.

developer-review-checklist

Developer review checklist example:

## Checklist

- [ ] Mandatory sections are present
- [ ] ODPS source product is valid
- [ ] Open questions are reviewed
- [ ] Contract impact is understood
- [ ] Agent boundaries are clear

developer-review-checklist gives human developers a compact approval checklist before implementation, publication, automation, or agent-assisted code work. Use it when the data product recipe should support a repeatable engineering review.

Expected content includes checks for source product validity, mandatory data product recipe sections, unresolved questions, contract impact, access impact, validation expectations, implementation boundaries, and approval status.

implementation-constraints

Implementation constraints example:

## Allowed

- Use existing warehouse platform
- Add read-only serving interface

## Prohibited

- Move raw customer events
- Change source product identity

## Assumptions

- Access is role-based.

implementation-constraints describes product-specific boundaries that affect implementation. Use it when the data product recipe needs constraints that are more specific than the general ai-agent-brief.

Expected content includes allowed platforms, prohibited changes, data movement constraints, security or privacy boundaries, naming constraints, integration limits, and assumptions that must not be changed without review.

backlog-items

Backlog items example:

## Items

- Title: Create contract validation
  Priority: high
  Depends on: contract approval

- Title: Add access role
  Priority: medium
  Depends on: access owner decision

backlog-items lists reviewable work items without requiring ODPR to create external tickets. Use it when the data product recipe should expose likely implementation tasks while remaining independent of Jira, GitHub Issues, or another work tracking system.

Expected content includes item title, short description, dependency, priority or sequencing hint, owner when known, and acceptance notes. External ticket IDs may be included as references but are not required.

portfolio-context

Portfolio context example:

## Portfolio

Customer analytics portfolio

## Related Products

- Customer master data
- Customer engagement events

## Decision Impact

- Avoid duplicate customer segmentation products.

portfolio-context includes ODPC catalog or portfolio context when the product belongs to a broader portfolio. Use it when portfolio placement, catalog entry, ownership model, duplication risk, or portfolio-level governance affects the data product recipe.

Expected content includes the referenced ODPC catalog or portfolio artifact, portfolio identity, related products, ownership context, and any portfolio decision that affects implementation.

Practice alignment

The data product recipe model follows common CI/CD and agent practices without importing their execution models into ODPR. Stable section IDs act like artifact names. The data product recipe uses mandatory section entries for handoff files such as the README, ODPS product specification, ODPG graph context, delivery plan, open questions, and AI agent brief. Optional recipeRef may record provenance or generation context, but it is not required for developers or AI agents to execute an ODPR workflow recipe. Execution terms such as job, run, and step stay out of DataProductRecipe because Recipe.steps already models workflow steps elsewhere in ODPR.

The ai-agent-brief derives the portable parts of AGENTS.md practice without turning ODPR into an agent configuration format. It should define the objective, source-of-truth files, input priority, allowed work, prohibited work, ambiguity handling, expected outputs, validation expectations, approval gates, and implementation boundaries for this data product recipe. Repository-level AGENTS.md or equivalent files remain the right place for coding conventions, build commands, local test commands, and repository-specific tool rules.

The model is aligned with these non-normative practice references:

Practice source Applied ODPR practice
GitHub Actions workflow syntax Keep execution terms such as workflow, job, run, and step distinct from data product recipe manifest terms.
GitHub workflow artifacts Treat generated outputs as named artifacts that can be archived, shared, downloaded, and validated.
SLSA provenance v1.0 Separate what was produced from how it was produced and which inputs were used.
Open Data Contract Standard v3.1.0 Align contract-plan with a YAML data contract standard instead of inventing an ODPR-specific contract shape.
Agentic AI Foundation and AGENTS.md Treat agent instructions as an interoperable guidance artifact, but keep ODPR's data product recipe brief product-specific and implementation-neutral.
AGENTS.md efficiency study Provide agent-readable guidance as a dedicated data product recipe section.
AGENTS.md evaluation study Keep agent instructions minimal and avoid broad, unnecessary requirements in the manifest.
AGENTS.md configuration-smell study Avoid context bloat, conflicting instructions, and leaked tool-specific rules in the schema.

Trigger-Based Flows

Root shape example:

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: Recipe
recipe:
  metadata:
    id: RCP-GRAPH-001
    name:
      en: Graph Triggered Impact Review
  version: "1.0.0"
  type: agent
  scope: graph
  trigger:
    source: odpg
    event: node.attributeChanged
    subject:
      nodeType: "*"
      attribute:
        name: status
        to: production
  graphContext:
    graphRef: graphs/portfolio.odpg.yaml
    start: trigger.subject
    depth: 2
  steps:
    - id: explain-impact
      command: generate
      kind: graph
      input: generated/graph-context.gcf
      output: generated/graph-impact.md
  review:
    required: true

Trigger-based flows are composite flows that become applicable when a graph change matches a declared trigger. They use Recipe as the reusable workflow unit, with trigger for the graph change and optional graphContext for the graph context the steps need.

ODPG owns graph structure and state. The runtime owns observation, execution, and run evidence. ODPR only declares the recipe contract.

Trigger flow boundaries

A trigger-based flow SHOULD answer five practical questions:

A trigger-based flow MUST NOT redefine ODPG graph structure, store observed graph state, embed graph queries as workflow logic, bind ordinary flow logic to one node id by default, or activate simply because a signal was observed. It declares the boundary where a graph change should make action applicable.

Trigger flow fields

Element name Type Options Description
schema string ODPR schema URI URI of the ODPR schema used to validate the document.
version string ODPR specification version Version of the ODPR specification used by the document.
kind string Recipe ODPR root object type. Trigger-based flows are encoded as Recipe documents.
recipe object - Top-level object that declares the trigger-based flow contract.
recipe.metadata object - Stable trigger-based flow identity and name.
recipe.metadata.id string - Stable trigger-based flow identifier.
recipe.metadata.name object localized text object Human-readable trigger-based flow name.
recipe.version string semantic version Version of this trigger-based flow artifact. This is separate from the top-level ODPR specification version.
recipe.type string development, ci, release, agent, custom Flow intent. Trigger-based flows commonly use agent or release.
recipe.scope string data-product, portfolio, graph, catalog, fragment, custom Artifact or graph area affected by the trigger-based flow.
recipe.trigger object graph trigger object Graph change boundary that can make the flow applicable.
recipe.trigger.source string odpg Graph source observed by the runtime.
recipe.trigger.event string node.added, node.removed, node.attributeChanged, edge.added, edge.removed, edge.attributeChanged, graph.conditionMatched Graph change category that can activate the flow.
recipe.trigger.subject object node or edge subject Node, edge, endpoint, and attribute boundary that must match the observed graph change.
recipe.trigger.subject.nodeType string controlled node type, * Node type boundary for node triggers. * allows any controlled node type.
recipe.trigger.subject.attribute.name string explicit attribute name Attribute that must change. Attribute names are not wildcards.
recipe.trigger.subject.attribute.to string target value Target attribute value that makes action applicable.
recipe.graphContext object graph context request Minimal ODPG context needed after a trigger matches.
recipe.graphContext.graphRef string graph file or graph reference ODPG graph source used to materialize context.
recipe.graphContext.start string trigger.subject, graph reference Starting point for context collection.
recipe.graphContext.depth integer positive integer Graph neighborhood depth requested after the trigger match.
recipe.steps array ordered step objects Ordered delivery, impact review, explanation, validation, or review operations that run after the trigger matches.
recipe.outputs array output objects Durable graph context, impact notes, reports, rendered artifacts, or review notes expected after the run.
recipe.review.required boolean true, false Whether human review is required before accepting the trigger-based flow result.

Trigger flow model

A trigger-based flow declares when a graph change should make follow-up work applicable. The trigger is the boundary: it names the observed graph source, the change event, and the subject pattern that must match. The flow then declares the graph context and operations needed after the match.

A trigger-based flow SHOULD make these field groups visible:

Part Purpose
trigger.source Graph source observed by the runtime. In v1 this is odpg.
trigger.event Graph change category, such as node added, edge removed, or attribute changed.
trigger.subject Node or edge boundary that must match, including node type, edge type, endpoint pattern, and explicit attribute condition when needed.
graphContext Minimal graph neighborhood or context artifact needed by the follow-up steps.
steps Ordered delivery, impact review, explanation, validation, or review operations that should run after the trigger matches.
outputs, gates, review Durable results and acceptance expectations for the triggered run.

The runtime observes graph changes and decides whether they match the trigger. ODPR declares the portable contract for that match and the work that follows.

Trigger events

ODPR v1 supports graph-change triggers on nodes and edges. These events are intentionally small so a trigger can be evaluated without turning ODPR into a graph query language.

Event Use when Required boundary
node.added A new graph node appears and should cause delivery or review work. subject.nodeType.
node.removed A graph node is removed and impact should be reviewed or artifacts refreshed. subject.nodeType.
node.attributeChanged A node attribute crosses a declared boundary, such as status changing to production. subject.nodeType and subject.attribute.name; the attribute condition SHOULD name from, to, or both when relevant.
edge.added A new relationship appears and should cause downstream delivery or review work. subject.edgeType; endpoint patterns SHOULD be declared when the flow depends on which node types are connected.
edge.removed A relationship is removed and impact should be reviewed or artifacts refreshed. subject.edgeType; endpoint patterns SHOULD be declared when relationship direction matters.
edge.attributeChanged A relationship attribute crosses a declared boundary. subject.edgeType and subject.attribute.name; the attribute condition SHOULD name from, to, or both when relevant.
graph.conditionMatched A named graph condition becomes true and should make a flow applicable. condition.name.

subject.nodeType MAY be a controlled node type or *. Attribute names are not wildcards; attribute-change triggers MUST name the attribute explicitly.

Trigger patterns

Trigger-based flows are intended for graph changes that create a need for action, not for every observation in the graph. A trigger SHOULD represent a meaningful boundary such as:

Pattern Example use
New node A data product, objective, signal, or policy node is added and related artifacts should be prepared or reviewed.
Removed node A graph node is removed and dependent artifacts or reviews need impact analysis.
Node state transition A data product, objective, signal, or other graph node changes status and review work should start.
New relationship A dependency, ownership, enablement, or lineage edge is added and generated artifacts should be refreshed.
Removed relationship A dependency or ownership edge is removed and impact notes should be generated.
Relationship state transition An edge-level attribute changes and connected artifacts need validation or review.
Named graph condition A graph-level condition such as objective enablement or portfolio readiness is detected by the runtime.

The runtime decides whether an observed graph change matches the trigger and when to execute the recipe. ODPR does not define scheduler behavior, event delivery, retry policy, run logs, or approval records.

Trigger flow examples

Canonical examples live in /recipes/examples/. They are complete ODPR files that demonstrate trigger-based flow patterns without making this section a YAML reference manual.

Example Demonstrates
graph-triggered-impact-review.yaml A node attribute transition where any node type can match if status changes to production, graph context is collected, and impact notes require human review.

Trigger shape examples

The examples below show only the recipe.trigger shape. They are intended to show matching boundaries, not complete runnable recipes.

Node added:

trigger:
  source: odpg
  event: node.added
  subject:
    nodeType: DataProduct

Node state transition:

trigger:
  source: odpg
  event: node.attributeChanged
  subject:
    nodeType: DataProduct
    attribute:
      name: status
      from: acceptance
      to: production

Edge added:

trigger:
  source: odpg
  event: edge.added
  subject:
    edgeType: enables
    fromNodeType: DataProduct
    toNodeType: BusinessObjective

Edge removed:

trigger:
  source: odpg
  event: edge.removed
  subject:
    edgeType: dependsOn
    fromNodeType: "*"
    toNodeType: DataProduct

Edge state transition:

trigger:
  source: odpg
  event: edge.attributeChanged
  subject:
    edgeType: dependsOn
    attribute:
      name: status
      to: deprecated

Named graph condition:

trigger:
  source: odpg
  event: graph.conditionMatched
  condition:
    name: business-objective-enabled

Recipe

The Recipe object is a supporting ODPR building block. It declares one reusable workflow unit that delivery flows and trigger-based flows can use.

Recipes are intended to be readable by humans and executable by tools. A recipe should be specific enough for an SDK, CI/CD system, MCP server, or agent to understand the workflow before it runs, while staying portable enough to avoid binding the standard to one implementation.

Recipe design principle

A recipe is not a script. A recipe is a portable, declarative workflow contract. Scripts tell one tool what to do. Recipes tell teams, tools, agents, and automation systems how a data product workflow should run.

Recipe structure

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: Recipe
recipe:
  metadata:
    id: RCP-DEV-001
    name:
      en: Local Fragment Draft
    description:
      en: Generate draft fragments locally.
  version: "1.0.0"
  type: dev
  steps:
    - id: generate-signals
      command: generate
      kind: signal
      input: source_docs/signals/
      output: generated/fragments/
Element Type Required Description
schema string required URI of the ODPR schema used to validate the recipe file.
version string required Version of the ODPR specification used by the recipe file.
kind string required ODPR root object type. Recipe files MUST use Recipe.
recipe object required Top-level object that defines the workflow recipe.

Recipe fields

recipe:
  metadata:
    id: RCP-CI-001
    name:
      en: CI Validate Generated Fragments
    description:
      en: Generate and validate fragments.
  version: "1.0.0"
  type: ci
  scope: catalog
  steps:
    - id: validate-fragments
      command: validate
      document: generated/fragments/signal.yaml
  outputs:
    - id: generated-fragments
      path: generated/fragments/
Element Type Required Description
metadata object required Stable recipe identity, name, optional description, owner, and tags.
version string required Version of this recipe workflow. This is separate from the top-level ODPR specification version.
type string required Recipe type such as dev, ci, release, localization, hybrid, or agent.
scope string optional Standards-family target governed by the recipe. Allowed values are data-product, catalog, graph, and portfolio.
steps array required Ordered workflow operations.
inputs array optional Named workflow inputs.
outputs array optional Named workflow outputs.
context object optional Context format policy such as YAML, TOON, GCF, or automatic fallback.
execution object optional Workflow intent such as local, hosted, hybrid, or model-free runtime/provider class.
trigger object optional Graph change pattern that can make a graph-triggered recipe applicable.
graphContext object optional Minimal ODPG graph context needed after a graph trigger matches.
gates array optional Validation, quality, or review gates.
review object optional Human or agent review expectations.
environment string optional Environment label such as development, CI, staging, or production.
runPolicy object optional Runtime limits such as timeout or retry guidance.

Recipe types

Type Purpose
dev Local development, drafting, and fast iteration.
ci Automated validation and build checks.
release Production-grade review, refresh, localization, rendering, and publishing.
localization Translation and multilingual portfolio or product work.
hybrid Workflows that mix local and hosted execution.
agent Agent-safe workflows that AI agents can inspect and run.

Recipe scopes

recipe.scope identifies the standards-family target the recipe primarily governs. recipe.type describes the workflow category, while recipe.scope describes what kind of artifact or standards-family area the recipe is for.

Scope Meaning
data-product Workflow automation that generates, validates, or reviews Data Product Recipe handoff artifacts for one data product.
catalog Catalog or portfolio catalog generation, validation, publication, synchronization, or review.
graph Graph/context generation, relationship extraction, validation, rendering, or review.
portfolio Portfolio assembly, refresh, localization, rendering, explanation, review, or release work.

recipe.scope: data-product does not make the Recipe itself a Data Product Recipe. A scoped recipe can generate, validate, or review a handoff artifact, but the handoff artifact uses the DataProductRecipe root kind and dataProductRecipe manifest object. ODPR does not define a separate ProductRecipe root kind.

Recipe patterns

ODPR uses one shared Recipe structure. Product delivery recipes use that structure for delivery work and handoff support. Graph-triggered recipes use that structure when a graph change should make the recipe applicable.

Runtime behavior

A Recipe is the portable workflow contract. The same recipe document can be validated, dry-run, executed, or resumed by an SDK or platform. ODPR does not store invocation mode in the recipe body. Invocation mode belongs to the executing tool, for example an SDK command using --dry-run or --execute. recipe.execution.mode describes runtime/provider class such as local, hosted, hybrid, or none.

Mode Meaning
local Runs with local model or local tooling.
hosted Runs with hosted model or hosted service.
hybrid Uses local and hosted execution in the same recipe.
none Does not require model execution.

Context formats

Format Meaning
yaml Use canonical YAML context.
toon Use TOON compact context when available.
gcf Use GCF compact graph/catalog context when available.
auto Let the executing tool choose the preferred available context.

RuntimeProfile references

runtimeRef identifies an ODPR RuntimeProfile with a URI-reference. The target points to a RuntimeProfile YAML document or runtime profile source. A fragment selects the profile when the target contains or exposes more than one profile, for example runtime-profiles/examples/production-quality.yaml#production-quality.

The recipe does not embed runtime internals; it only references the runtime profile that should be used.

A recipe can declare a default runtime profile in execution.runtimeRef. Individual steps can override it with step.runtimeRef when one workflow mixes local and hosted execution.

The referenced RuntimeProfile object defines SDK-compatible provider profiles, model defaults, provider base URLs, API-key environment variable names, and safe runtime generation defaults. Raw secrets MUST NOT be stored in recipes or RuntimeProfile documents.

execution.runtimeRef is the default provider profile for LLM-backed steps. Step-level runtimeRef overrides execution.runtimeRef. Step-level model overrides the provider model for that step. Deterministic and report commands MUST NOT use runtimeRef or model.

ODPR validation tools SHOULD reject embedded secrets or API keys in recipes. Use runtimeRef in recipes and apiKeyEnv in RuntimeProfile provider profile entries instead of fields such as apiKey, token, password, or inline secret values.

ODPR keeps commands lightweight so recipes stay portable across implementations. Implementations SHOULD support the recommended command names where the underlying capability exists. Implementations MAY support additional commands.

Command Classification Required step fields Optional step fields
generate llm-backed input, kind, output config, prompts, profile, includeComponents, maxSourceChars, ollamaUrl
odpc.build deterministic input, output html, toon, gcf, name, description, recursive, validate
odpg.build llm-backed input, output toon, gcf, contextGraph, name, description, recursive, validate, config, prompts, ollamaUrl
odpg.agent-context deterministic graph, start, output depth
odpg.render deterministic graph, output none
portfolio.build llm-backed at least one of objectives, useCases, signals, or products; and output title, config, prompts, ollamaUrl, strictValidation
portfolio.refresh llm-backed none objectives, useCases, signals, products, title, config, allSources, prompts, ollamaUrl, strictValidation
portfolio.sync deterministic none strictValidation
portfolio.localize llm-backed languages defaultLanguage, config, prompts, ollamaUrl, strictValidation
portfolio.render deterministic none output, strictValidation
portfolio.explain report none none
validate deterministic document none
explain report document none

Command-specific parameters are written directly on the step. Shared durable paths, such as a portfolio workspace used by several steps, belong in recipe-level inputs or outputs instead of being repeated under every step. portfolio.localize.languages SHOULD be written as a YAML list of BCP 47 language tags.

Classification Meaning
deterministic No provider needed; repeatable from files and options.
llm-backed Calls a configured provider and model.
review Requires human or external approval.
report Reads artifacts and produces summaries, diagnostics, or review material.

Outputs

Use inputs and outputs when a workflow uses or creates durable artifacts that later steps, CI jobs, reviewers, or agents should inspect. Outputs are named paths. They do not replace a command-specific output field; they make expected durable results visible at the recipe level.

Recipe-level paths should be project-relative. Recipes should not use absolute paths or .. traversal. ODPR states this safety expectation; SDKs and platforms enforce write-scope policy.

Gates, review, and runtime policy

Required gates SHOULD be evaluated or reported by the executing tool. Tools SHOULD NOT silently skip required gates.

review.required declares whether a recipe expects review after automated steps complete. review.mode can be human, agent, both, or none.

runPolicy gives lightweight runtime guidance such as timeout, stop-on-failure behavior, and retry expectations. It is useful for CI jobs, local model calls, portfolio localization, and hosted provider calls. ODPR v1 does not define approval records, workflow pauses, run manifests, or gate status storage.

Environment labels

Use environment to label the intended operating context, such as development, ci, staging, or production. The value is a string so teams can use local naming conventions while keeping common labels readable.

Recipe example

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: Recipe
recipe:
  metadata:
    id: RCP-RELEASE-001
    name:
      en: Release Portfolio Review
    description:
      en: Refresh, localize, and explain a portfolio for release review.
  version: "1.0.0"
  type: release
  execution:
    mode: hosted
    runtimeRef: runtime-profiles/examples/production-quality.yaml#production-quality
  inputs:
    - id: portfolio-workspace
      path: portfolio/
  steps:
    - id: refresh-portfolio
      command: portfolio.refresh
    - id: localize-portfolio
      command: portfolio.localize
      languages:
        - fi
        - sv
    - id: explain-portfolio
      command: portfolio.explain
  outputs:
    - id: localized-portfolio-fi
      path: portfolio/index.fi.html
    - id: localized-portfolio-sv
      path: portfolio/index.sv.html
    - id: release-explanation
      path: portfolio/explanation.md
  gates:
    - id: human-review
      type: review
      required: true
  review:
    required: true

This release recipe describes a portfolio review workflow. When an executor runs it, the expected flow is:

  1. Validate the recipe against the ODPR schema and confirm it is a Recipe.
  2. Treat the workflow as a release recipe, which means it is intended for a publication or release-review process rather than local drafting.
  3. Use hosted execution through the configured runtime reference runtime-profiles/examples/production-quality.yaml#production-quality. The matching ODPR RuntimeProfile object describes the runtime profile, while raw credentials and live endpoint resolution stay in the executing SDK or platform.
  4. Treat portfolio/ as the shared portfolio workspace input.
  5. Run portfolio.refresh.
  6. Run portfolio.localize and produce Finnish and Swedish localized outputs.
  7. Run portfolio.explain so reviewers get generated explanation material for the refreshed portfolio.
  8. Require human review before the release workflow is considered complete.

RuntimeProfile

The RuntimeProfile object is a supporting ODPR object. It standardizes the runtime generation configuration that recipes use when a step needs an LLM or another model-backed execution provider.

ODPR uses the same provider-map shape as the Open Data Product SDK generation config. This keeps recipes, SDK execution, CI runners, MCP servers, and agent runtimes aligned around one provider configuration model instead of mixing a standard reference with SDK-only provider fields.

RuntimeProfile documents MUST NOT contain raw secrets. Use apiKeyEnv to name the environment variable that contains an API key. ODPR validation tools SHOULD reject embedded secrets or API keys, including fields such as apiKey, token, password, or raw secret-looking values.

RuntimeProfile structure

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: RuntimeProfile
runtimeProfile:
  provider: production-quality
  model: gpt-4.1
  input: open_data_products/generation/source_docs/
  output: open_data_products/generation/fragments/
  prompts: prompts/
  portfolio:
    sourceBudget:
      maxSourceChars: 2000
      maxPromptChars: 32000
    privacy:
      obfuscatePersonalData: true
  providers:
    production-quality:
      type: openai
      model: gpt-4.1
      baseUrl: https://api.openai.com/v1
      apiKeyEnv: OPENAI_API_KEY
      maxTokens: 8192
Element Type Required Description
schema string required URI of the ODPR schema used to validate the provider file.
version string required Version of the ODPR specification used by the provider file.
kind string required ODPR root object type. RuntimeProfile files MUST use RuntimeProfile.
runtimeProfile object required Top-level runtime generation configuration object.

RuntimeProfile fields

Element Type Required Description
runtimeProfile.provider string required Default provider profile name selected from runtimeProfile.providers.
runtimeProfile.model string optional Default model override used when the selected provider profile does not define a model.
runtimeProfile.input string optional Default input path for generation-oriented runs.
runtimeProfile.output string optional Default output path for generated artifacts.
runtimeProfile.prompts string optional Default prompt directory.
runtimeProfile.baseUrl string optional Default base URL override used by compatible provider clients.
runtimeProfile.version string optional API version or provider client version hint.
runtimeProfile.maxTokens integer optional Default maximum output token budget.
runtimeProfile.modelPath string optional Local model path for embedded runtimes such as llama.cpp.
runtimeProfile.contextWindow integer optional Context window size for local or embedded runtimes.
runtimeProfile.gpuLayers integer optional GPU layer count for local or embedded runtimes.
runtimeProfile.portfolio object optional Portfolio intake budget and privacy policy used by generation workflows.
runtimeProfile.providers object required Map of named provider profiles. runtimeRef fragments resolve to keys in this map.

Provider profile fields

runtimeProfile:
  provider: openai
  providers:
    openai:
      type: openai
      model: gpt-4.1-mini
      baseUrl: https://api.openai.com/v1
      apiKeyEnv: OPENAI_API_KEY
      maxTokens: 8192
Element Type Required Description
type string optional Provider client type: anthropic, llama-cpp, ollama, openai, or openai-chat.
model string optional Model name or runtime model identifier.
baseUrl string optional Provider API base URL or local runtime URL.
apiKeyEnv string optional Environment variable name that contains the API key. The value is a name, not the secret itself.
version string optional API version or provider-specific version hint.
maxTokens integer optional Maximum output token budget for this profile.
modelPath string optional Local model path for embedded runtimes.
contextWindow integer optional Context window size for local or embedded runtimes.
gpuLayers integer optional GPU layer count for local or embedded runtimes.

Portfolio policy fields

Element Type Required Description
portfolio.sourceBudget.maxSourceChars integer optional Maximum extracted source characters considered per source chunk.
portfolio.sourceBudget.maxPromptChars integer optional Maximum prompt character budget for portfolio intake.
portfolio.privacy.obfuscatePersonalData boolean optional Whether personal data masking should run before model-backed portfolio intake.

RuntimeProfile references

A recipe uses runtimeRef to point to a RuntimeProfile document and, normally, one profile inside its runtimeProfile.providers map. The value is a URI-reference, so it may point to a local file, a published URL, or the same document with a fragment. The fragment selects the provider profile key:

execution:
  mode: hosted
  runtimeRef: runtime-profiles/examples/production-quality.yaml#production-quality

The executor resolves the file or URL, validates the ODPR RuntimeProfile document, then resolves #production-quality to:

runtimeProfile:
  providers:
    production-quality:
      type: openai
      model: gpt-4.1

If runtimeRef does not include a fragment, the executor SHOULD use runtimeProfile.provider as the selected profile. If the referenced RuntimeProfile source contains several profiles, a fragment is recommended so the recipe contract is unambiguous.

RuntimeProfile examples

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: RuntimeProfile
runtimeProfile:
  provider: local-fast
  model: gemma
  providers:
    local-fast:
      type: ollama
      model: gemma
      baseUrl: http://localhost:11434

local-fast is intended for development and fast CI-style checks. A recipe that uses runtimeRef: runtime-profiles/examples/local-fast.yaml#local-fast asks the executor to use the local-fast profile from the referenced RuntimeProfile document.

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: RuntimeProfile
runtimeProfile:
  provider: internal-secure
  model: approved-llm
  providers:
    internal-secure:
      type: openai-chat
      model: approved-llm
      baseUrl: https://gateway.example.org/v1
      apiKeyEnv: ODP_INTERNAL_GATEWAY_API_KEY
      maxTokens: 8192

internal-secure is intended for controlled production or enterprise environments. A recipe that uses runtimeRef: runtime-profiles/examples/internal-secure.yaml#internal-secure asks the executor to route model calls through the referenced gateway profile. The profile names the API key environment variable but does not embed the actual credential or API key.

RecipeCatalog

The RecipeCatalog object is a supporting ODPR object for recipe discovery. It lists available recipes and points to their complete Recipe files.

A catalog is metadata-only. It MUST NOT contain full recipe step bodies, credentials, provider readiness results, runtime status, planned writes, run ids, or logs. Catalog entries should be treated as stale until the referenced recipe file is loaded and validated.

Catalog structure

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: RecipeCatalog
recipeCatalog:
  metadata:
    id: RCP-CATALOG-001
    name:
      en: ODPR Example Recipe Catalog
  version: "1.0.0"
  groups:
    - id: examples
      name:
        en: Example Recipes
      description:
        en: Complete learning and demonstration recipes.
  recipes:
    - path: recipes/examples/release-portfolio-review.yaml
      id: RCP-RELEASE-001
      groupRef: examples
      version: "1.0.0"
      type: release
      name:
        en: Release Portfolio Review
      description:
        en: Refresh, localize, explain, and review a portfolio before release.
      executionMode: hosted
      runtimeRef: runtime-profiles/examples/production-quality.yaml#production-quality
      requiresReview: true
      commands:
        - portfolio.refresh
        - portfolio.localize
        - portfolio.explain
Element Type Required Description
schema string required URI of the ODPR schema used to validate the catalog file.
version string required Version of the ODPR specification used by the catalog file.
kind string required ODPR root object type. Catalog files MUST use RecipeCatalog.
recipeCatalog object required Top-level object that defines recipe discovery metadata.

RecipeCatalog fields

Element Type Required Description
metadata.id string required Stable catalog id.
metadata.name language map required Human-readable catalog name.
version string required Catalog artifact version. This is separate from the root ODPR specification version.
groups array optional Metadata-only group definitions for organizing catalog entries.
recipes array required Metadata entries pointing to complete recipe files.

Catalog group fields

Element Type Required Description
id string required Stable group id, unique within the catalog.
name language map required Human-readable group name.
description language map optional Short group description.

Catalog entry fields

Element Type Required Description
path string required Project-relative path to the complete Recipe file.
id string required Recipe id copied from the referenced recipe metadata.
groupRef string optional Reference to a declared catalog group id. Entries without groupRef are ungrouped.
version string required Recipe version copied from the referenced recipe.
type string required Recipe type such as dev, ci, release, localization, hybrid, or agent.
scope string optional Recipe scope copied from the referenced recipe when present. Allowed values are data-product, catalog, graph, and portfolio.
name language map required Human-readable recipe name.
description language map optional Short recipe description.
tags array optional Discovery tags.
environment string optional Intended environment label.
executionMode string optional Expected runtime/provider class: local, hosted, hybrid, or none.
runtimeRef string optional Default RuntimeProfile document/profile reference copied from the referenced recipe.
contextFormat string optional Preferred context format: yaml, toon, gcf, or auto.
requiresReview boolean optional Whether the referenced recipe declares required review.
commands array optional Command names used by the referenced recipe.

Recipe Library

ODPR publishes a small library of canonical recipes under /recipes/examples/. These examples are not decorative snippets. They are complete recipe files that can be copied, validated, adapted, and used by SDKs, CI/CD systems, MCP servers, or other ODPR-aware platforms.

Agents and tools can also use /recipes/recipes.jsonl as a lightweight lookup file for selecting the right recipe pattern before loading the full YAML example.

Use /recipes/catalog.yaml when a tool needs metadata-only discovery of available recipe files. Catalog entries point to complete recipes; they do not embed step bodies or runtime output.

Recipe Use when What happens
minimal.yaml A developer wants the smallest valid local recipe for fast iteration. The executor uses runtime-profiles/examples/local-fast.yaml#local-fast, runs one generate step for signal fragments, reads source_docs/signals/, writes draft fragments to generated/fragments/, and exposes that folder as draft-fragments.
ci-validate-generated-fragments.yaml CI must generate draft fragments and fail if the generated output is invalid. The executor labels the run as ci, generates signal fragments, exposes generated/fragments/ as generated-fragments, validates generated/fragments/signal.yaml, and enforces the required fragments-valid validation gate before the CI job can pass.
release-portfolio-review.yaml A release process must refresh, localize, explain, and review a portfolio before publication. The executor uses runtime-profiles/examples/production-quality.yaml#production-quality, refreshes portfolio/, localizes it to Finnish and Swedish, generates an explanation, exposes localized pages and explanation output paths, and requires human review before publishing.
portfolio-localization.yaml A portfolio workspace must be localized into configured target languages. The executor uses runtime-profiles/examples/production-quality.yaml#production-quality, localizes portfolio/ to Finnish and Swedish, exposes the localized HTML paths, and requires review.
hybrid-graph-review.yaml A workflow should combine local graph work with hosted review or explanation. The executor builds graph context locally with runtime-profiles/examples/local-graph.yaml#local-graph, exposes generated/graph.yaml as graph-context, then uses runtime-profiles/examples/production-quality.yaml#production-quality to generate review notes.
graph-triggered-impact-review.yaml A graph change should activate a review recipe without binding the workflow to one node id. The executor matches an ODPG node attribute transition, prepares declared graph context, materializes that context as GCF, then uses a hosted provider to generate impact notes for human review.

The library is intentionally small. Each example should demonstrate a distinct workflow pattern rather than every possible command option. Local organizations can extend these recipes with x- fields or implementation-specific command bindings without changing ODPR semantics.

ODPR also publishes RuntimeProfile examples under /runtime-profiles/examples/. Use these when a recipe references a provider profile with a URI-reference such as runtime-profiles/examples/local-fast.yaml#local-fast.

RuntimeProfile Use when What it standardizes
local-fast.yaml Local development should use a fast local model profile. runtimeRef: runtime-profiles/examples/local-fast.yaml#local-fast resolves to an Ollama-backed runtimeProfile.providers.local-fast profile.
local-graph.yaml Graph-building steps should run locally without hosted model routing. runtimeRef: runtime-profiles/examples/local-graph.yaml#local-graph resolves to a local OpenAI-compatible runtimeProfile.providers.local-graph profile.
production-quality.yaml Release, CI, or agent workflows need a hosted production-grade model profile. runtimeRef: runtime-profiles/examples/production-quality.yaml#production-quality resolves to an OpenAI runtimeProfile.providers.production-quality profile with gpt-4.1 and apiKeyEnv.
internal-secure.yaml Enterprise workflows must route model calls through an approved internal gateway. runtimeRef: runtime-profiles/examples/internal-secure.yaml#internal-secure resolves to an OpenAI-compatible gateway profile with apiKeyEnv instead of raw secrets.

Recipe Toolkit

Snippet of YAML version:

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: Recipe
recipe:
  metadata:
    id: RCP-DEV-001
    name:
      en: Local Fragment Draft
    description:
      en: Generate draft ODPC fragments locally for fast iteration.
  type: dev
  execution:
    mode: local
    runtimeRef: runtime-profiles/examples/local-fast.yaml#local-fast
  steps:
    - id: generate-signals
      command: generate
      kind: signal
      input: source_docs/signals/
      output: generated/fragments/

ODPR is published in several forms for different users and tools. This specification provides the human-readable documentation, while the schema, recipe records, provider records, and example files provide machine-readable resources for validation, workflow automation, AI retrieval, and agent use.

Use odpr.yaml or odpr.json to validate Recipe, RuntimeProfile, RecipeCatalog, and DataProductRecipe files, recipes.jsonl for lightweight object selection and retrieval, and the examples when generating or repairing ODPR YAML.

The ODP Agent SDK supports ODPR and is the first reference implementation for validating and executing ODPR recipes. Use it when building agents or automation across ODPS, ODPC, ODPG, and ODPV workflows. ODPR recipes remain portable workflow contracts and can also be used with other conforming SDKs, CI/CD systems, MCP servers, or platform implementations.

Resource Format Purpose
ODP Agent SDK SDK First reference implementation for validating and executing ODPR recipes; ODPR can also be used with other conforming implementations
llms.txt Text AI agent guidance for discovering and using ODPR resources
odpr.yaml YAML Schema YAML representation of the ODPR validation schema
odpr.json JSON Schema JSON representation of the ODPR validation schema
recipes.jsonl JSONL Agent-friendly one-recipe-per-line file for retrieval and lightweight tools
catalog.yaml YAML Metadata-only RecipeCatalog that points to canonical recipe examples
minimal.yaml YAML Minimal valid ODPR recipe example
ci-validate-generated-fragments.yaml YAML CI recipe that generates and validates fragments
release-portfolio-review.yaml YAML Release recipe for portfolio refresh, localization, and explanation
portfolio-localization.yaml YAML Localization recipe with YAML list language targets
hybrid-graph-review.yaml YAML Hybrid recipe that mixes local and hosted execution
data-product-delivery.yaml YAML Data Product Recipe example using recipe.scope: data-product
graph-triggered-impact-review.yaml YAML Graph-triggered recipe example using recipe.trigger and recipe.graphContext
data-product-recipe.yaml YAML Minimal DataProductRecipe manifest example
production-quality.yaml YAML Hosted RuntimeProfile config for production-quality generation
local-fast.yaml YAML Local RuntimeProfile config for fast development runs
local-graph.yaml YAML Local RuntimeProfile config for graph-building workflows
internal-secure.yaml YAML Internal gateway RuntimeProfile config for controlled production use

Agent-oriented helper scripts are available in the source repository for maintaining and using recipe artifacts.

Script Purpose
build_recipe_catalog.py Regenerates the metadata-only source/recipes/catalog.yaml from canonical recipe examples; use --check to detect catalog drift
check_agent_artifacts.py Checks schema alignment, example files, recipe JSONL records, and llms.txt references
generate_recipe_artifacts.py Regenerates derived recipe artifacts such as source/schema/odpr.json from canonical source files; use --check to detect drift
search_recipes.py Searches ODPR recipe records by keyword or exact recipe id; use --json for machine-readable results
validate_recipe.py Validates ODPR YAML or JSON Recipe, RuntimeProfile, RecipeCatalog, or DataProductRecipe files against the ODPR schema and rejects embedded secrets or API keys

The Markdown tables in this specification are intended for human readers. The schema, JSONL, and YAML example files are intended for programmable use, automation, validation, AI retrieval, and recipe tooling.

AI Agent Usage Patterns

ODPR is designed to be usable by AI agents, SDKs, CI/CD systems, and automation tools. From an agent perspective, ODPR provides three composite flow contracts: delivery flows, product handoff flows, and trigger-based flows driven by graph changes. Recipes, RuntimeProfile generation configs, and recipe catalogs support those flows as building blocks.

ODPS defines one data product. ODPC defines catalogs and reusable portfolio objects. ODPG defines relationships between data product artifacts. ODPV provides shared vocabulary terms. ODPR defines delivery work, handoff manifests, and trigger-based flows around those artifacts.

Agent capabilities enabled by ODPR

Agents can use ODPR to:

Common agent workflows

Workflow Agent behavior
Recipe validation Validate ODPR recipe files and report schema-compliant repairs.
Recipe selection Choose a recipe based on task type, execution mode, context format, or required review.
CI/CD preparation Convert a repeatable SDK command sequence into a declared recipe.
Local development Run draft recipes that use local providers for fast iteration.
Production review Run release recipes that use hosted providers, validation gates, and review expectations.
Hybrid execution Combine local generation or graph inference with hosted review or localization.
Graph-triggered workflow Match an ODPG graph change to an ODPR recipe trigger, prepare declared graph context, and run the recipe steps.
Agent handoff Inspect recipe steps and gates before invoking SDK tools.

Agent behavior constraints

Agents using ODPR should keep boundaries clear:

Example prompts ODPR enables

Specification extensions

While ODPR defines the core recipe object and attributes, organizations may need to add implementation-specific metadata for local tools, CI/CD systems, governance workflows, or platform-specific requirements.

Extension properties are patterned fields prefixed with x-. These fields may appear inside recipe objects where the schema allows extension properties.

Extensions are not part of the official ODPR object model unless they are later adopted into the specification. Tooling may ignore extension fields unless explicit support has been added.

Extensions should not redefine core ODPR semantics. They should be used only for additional metadata that does not fit standard attributes.

Useful and widely adopted extensions may become candidates for future versions of the standard. To propose useful extensions, raise an issue in GitHub:

Open Data Product Initiative GitHub issues

Example of extension usage:

schema: https://opendataproducts.org/odpr-v1.0/schema/odpr.yaml
version: "1.0"
kind: Recipe
recipe:
  metadata:
    id: RCP-CI-001
    name:
      en: CI Validate Generated Fragments
    description:
      en: Generate and validate fragments during CI.
    x-internal-owner-group: data-product-platform
  type: ci
  steps:
    - id: validate-fragments
      command: validate
      document: generated/fragments/signal.yaml
      x-ci-job-name: validate-generated-fragments
Element name
Type Options Description
^x- any Allows extensions to the ODPR schema. The field name MUST begin with x-, for example, x-ci-job-name. The value can be null, a primitive, an array, or an object.

Editors and contributors

This specification is openly developed and a lot of the work comes from community. We list all community contributors as a sign of appreciation. Maintainers process the feedback and draft new candidate releases, which may become the versions of the specification.

Maintainers:

Terms used

ODPR uses the Open Data Product Vocabulary, ODPV, as the shared vocabulary for the OpenDataProducts.org standards family. Use ODPV for common terms, stable ids, labels, definitions, aliases, and relationship names across ODPS, ODPC, ODPG, ODPR, and related tools.

The terms below explain ODPR-specific usage where this specification gives a shared vocabulary term a concrete recipe meaning or modeling constraint.

Shared terms from ODPV

Term ODPR usage
Delivery flow A composite ODPR flow for repeatable delivery work such as portfolio building, validation, localization, publishing, or release review.
Recipe A supporting portable workflow unit used inside delivery flows and trigger-based flows.
Product Delivery Recipe A recipe pattern or handoff agreement for delivering or changing one data product. In ODPR v1, the handoff manifest is the DataProductRecipe root object.
Data Product Recipe A reviewable handoff artifact for delivery planning, readiness, validation, implementation guidance, AI-agent guidance, and review around one data product.
Trigger-based flow A workflow made applicable by a declared graph change.
Workflow A sequence of steps that creates, validates, reviews, localizes, publishes, or refreshes data product artifacts.
Step One declared operation in a recipe.
Gate A required validation, quality, publication, or review condition.
Context The artifact or compact sidecar format used as prompt, review, or execution context.
RuntimeProfile A supporting runtime generation configuration document that recipes can reference with runtimeRef.
Recipe catalog Supporting metadata-only discovery list for available recipe files.
Review A human or agent review expectation declared by the recipe.
Graph trigger A small recipe trigger pattern that makes a normal ODPR Recipe applicable when an ODPG graph change matches.

ODPR-specific usage notes

Term Description
Recipe Supporting ODPR object that declares one reusable workflow unit.
RuntimeProfile Supporting ODPR object that declares SDK-compatible provider profile maps and generation defaults.
RecipeCatalog Supporting ODPR object that lists recipe metadata and paths to full recipe files.
DataProductRecipe The ODPR root object that indexes the reviewable handoff files for one Data Product Recipe.
recipeRef Optional provenance or generation-context reference; not an implementation dependency for developers or AI agents.
contract-plan Optional standardized section ID for a YAML data contract aligned with the Open Data Contract Standard.
runtimeRef A URI-reference from a recipe to a RuntimeProfile document or provider profile fragment under runtimeProfile.providers.
context.format The preferred context format for a recipe, such as yaml, toon, gcf, or auto.
trigger Optional Recipe field that declares which ODPG graph change can make the recipe applicable.
graphContext Optional Recipe field that requests minimal ODPG context after a trigger match.
execution.mode Runtime/provider class such as local, hosted, hybrid, or none; not SDK invocation mode.
runPolicy Runtime guidance such as timeout or retry expectations.
Extension property A local or implementation-specific field whose name begins with x-.

ODPR should stay focused on workflow contracts. Product metadata belongs to ODPS. Catalog and portfolio objects belong to ODPC. Graph structures and relationships belong to ODPG. Shared vocabulary belongs to ODPV.