RFC: AgentRunFacet — OpenLineage Extension for Agentic AI #4407
Replies: 5 comments 6 replies
|
The AgentRunFacet extension makes sense — lineage tracking for agent workflows is a natural fit for OpenLineage. One layer that's missing from most lineage systems: behavioral enforcement evidence. Knowing that Agent X ran Tool Y at time T is useful for lineage. But knowing that Agent X was allowed to run Tool Y — and that this decision was enforced at runtime and logged in a tamper-evident hash chain — is what compliance teams actually need. I've been building this as proof-of-behavior. Every agent action is evaluated against declared constraints before execution, and the decision goes into a SHA-256 hash chain. The log format includes action, params, outcome (success/blocked), and the chain hash. For OpenLineage, the AgentRunFacet could include a Spec: Proof-of-Behavior v0.1.0 (CC-BY-4.0) |
|
@swar00pduthks this is a very good and timely discussion to have. Did you have a chance to dig deeper and check what might actually be missing in the spec? This might be more about documenting how to use the spec for this use-case, than necessarily updating it (even though that's of course possible). Let's start with the entities and how you'd model them. I'll start with a simple representation, please poke holes into to and suggest alternatives as you see fit. RAG:
Agent
How to document what's needed
Wdyt? Is this in the direction of what you were expecting? |
|
@JMoravec the modeling breakdown makes sense — agentic flow as job, tools as sub-jobs with parent_run references. That covers the lineage graph. The gap I'd flag: OpenLineage captures what happened (which tool ran, what data flowed where) but not whether what happened was allowed. Two agents can produce identical lineage graphs where one followed its behavioral constraints and the other violated them. That's the layer proof-of-behavior adds. Each tool call gets evaluated against declared constraints (permit/forbid/require) before execution, and the enforcement decision goes into a hash-chained audit trail. The lineage graph tells you the shape of execution. The behavioral proof tells you whether every step in that shape was compliant. For OpenLineage specifically, this could surface as a facet — something like a Happy to sketch out what that facet schema would look like if there's interest. |
|
@arian-gogani It's not immediately obvious to me that this should be the responsibility of OpenLineage - it's a protection/governance layer on top of lineage, or rather leveraging lineage... should it be a part of the standard for lineage exchange? Or should that rather be covered by the governance/protection solution (OL consumer from this PoV)? Or data contracts (ODCS?)? Or something else? @mobuchowski, interested in your PoV |
|
@JMoravec That's a fair distinction — OpenLineage captures the path, a separate governance layer evaluates whether the path was compliant. Agree that keeping those concerns separate is cleaner. Nobulex would sit on the consumer side in that model. OpenLineage emits the lineage events, Nobulex (or similar) ingests them and evaluates against declared behavioral constraints. The facet idea was more about embedding a lightweight reference pointer (just a hash) so consumers can correlate lineage events with compliance records without a separate join — but I see the argument for keeping that coupling out of the core spec. Happy to follow wherever the discussion lands. If ODCS or a dedicated governance facet extension ends up being the right home, that works too. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
1. PROBLEM STATEMENT
OpenLineage's current entity model defines the world as: Job → Run → Dataset. This maps elegantly and completely to data pipeline lineage: a Spark job reads datasets, transforms them, produces output datasets. The spec — and Apache Marquez as its reference implementation — solve this problem well.
Agentic AI systems do not fit this model. When a multi-step LLM agent executes — retrieving context from multiple data sources, calling tools, delegating to sub-agents, reasoning across turns, and generating a final response — the provenance chain of that output is fundamentally different from a data pipeline:
▸ Which version of the data was retrieved as RAG context?
▸ Which model version and system prompt produced each reasoning turn?
▸ Which tool calls were made, with what inputs, producing what outputs?
▸ If the same agent runs again tomorrow with slightly different retrieved context, why does the answer differ?
▸ Which human reviewed or overrode the agent output, and when?
Observability tools (LangSmith, Datadog, Dynatrace) provide vendor-specific traces. These answer 'what happened' — but they are not lineage. Lineage answers 'why is this output what it is, what data produced it, and can I prove it to a regulator?' in a standardised, queryable, reproducible format that integrates with the rest of the data lineage graph.
Regulatory urgency
EU AI Act Article 12 requires automatic, tamper-evident logging for high-risk AI systems — including financial AI used for credit decisions, risk analytics, and fraud detection. Article 19 specifically requires financial institutions to maintain these logs under financial services law. Compliance deadline: August 2, 2026. No open standard currently exists to satisfy this requirement.
All reactions