The produces edge is canonical on the producing process only
0007-produces-edge-direction
- Reversibility
- two-way door
DEC-0007 — produces edge direction (single source of truth)
Context
While scaffolding the DXA vertical (Digital Experience Agency vertical as the first reference implementation), the QA audit caught two produces defects: (a) capability atoms double-declaring produces on artifacts already produced by a process, and (b) an artifact — dxa-solution-architecture-doc — with no producing process at all. An artifact↔producer edge expressed on two atoms can drift; an artifact with no producer is a dead-end node. The model (Knowledge Model v0) names produces → artifact but had not fixed its canonical direction, so the convention needed pinning before more verticals copied the ambiguity.
Options considered
- Allow
produceson any atom that "results in" an artifact (process and capability) — convenient, but multi-source and drift-prone. - Express the artifact→producer relationship on the artifact (
produced_by) as canonical. - Make
producescanonical on the producingprocessonly; everything else (capabilities, etc.) references the artifact viarelates_to.
Decision
Adopt option 3. The produces edge is declared once, on the process that creates the artifact — the single source of truth. A capability links its signature artifact via relates_to, never produces (a capability is the commercial bundle, not the maker). To resolve the two findings without weakening the convention:
- Added a
dxa-solution-designprocess (owner: dxa-solution-architect) as the canonical producer ofdxa-solution-architecture-doc, and inserted it into thedxa-discovery-to-launchworkflow. - Reassigned
dxa-release-managementownership to dxa-devops-engineer to remove a dead-end role and keep every process owned.
Rationale
- Single source of truth. One artifact has exactly one declared producer; the graph stays consistent and diffs stay legible. Mirrors design principle 2 of Dossier — The Knowledge Model (v0).
- Type semantics stay clean.
producesis a making edge (a process makes a thing); a capability's tie to an artifact is associative (relates_to), preserving the process/workflow vs. commercial-unit distinction from Digital Experience Agency vertical as the first reference implementation. - The model held; only conventions tightened. These were exactly the conformance findings the vertical was meant to surface — the v0 taxonomy needed no change, only a pinned edge-direction rule. Confidence is
verified: caught by QA against authored atoms and fixed.
Consequences
- Every artifact must have exactly one producing process; "orphan" artifacts are a QA failure, not an accepted state.
- Capabilities declare signature artifacts only via
relates_to;verify-kband future scaffolds should enforce single-producer / no-orphan-artifact as a check. - The convention is vertical-agnostic and binds all OKF authoring going forward, not just the DXA template.
Review
Revisit if a real case emerges where an artifact genuinely has multiple independent producers, or where a non-process atom must own a produces edge — at which point reconsider a canonical produced_by on the artifact.