Skip to content

Relationships

The relationships are the methodology: they connect intent (actors), behaviour (journeys, use cases), knowledge (rules, terms, contexts) and obligations (requirements), and they carry traceability through Product Changes.

Impact analysis over a small graph neighbourhood, before and after a change. Before: BR-REFUND-001 connects to UC-REFUND-002, which is cited by an SDD spec and appears in JRN-CUSTOMER-001, which involves ACT-CUSTOMER-001. After: modifying BR-REFUND-001 walks the relationships to reach the affected product artifacts and the affected citations, each drawn with a dashed amber border labelled affected or stale. The closing line reads: PDaC detects impact, consumers decide what to do.

Figure PDaC-6 - what happens when one part of the product changes? Non-normative: the arrows are readable prose and some point in the derived direction. The canonical vocabulary below is authoritative.

Every relationship has exactly one canonical direction: it is authored on one artifact type, in one frontmatter field, targeting an allowed set of types.

SourceFieldAllowed targetsPolarity
Journeyprimary-actorActordependency
Journeysteps[].use-caseUse Casedependency
Use Caseprimary-actorActordependency
Use Casesupporting-actorsActordependency
Use Casebounded-contextBounded Contextdependency
Use Casegoverned-byBusiness Ruledependency
Use Caseuses-termsDomain Termdependency
Business Ruleapplies-toJourney, Use Case, Bounded Contextgovernance
Business Ruleuses-termsDomain Termdependency
Domain Termdefined-inBounded Contextdependency
Domain Termuses-termsDomain Termdependency
Functional Requirementderived-fromUse Case, Business Rule, Constraintdependency
Functional Requirementverification[].scenario-refStructured Behaviourdependency
Functional Requirementuses-termsDomain Termdependency
Quality Requirementapplies-toJourney, Use Case, Bounded Contextgovernance
Quality Requirementverification[].scenario-refStructured Behaviourdependency
Quality Requirementuses-termsDomain Termdependency
Constraintapplies-toJourney, Use Case, Bounded Context; absent = entire productgovernance
Constraintuses-termsDomain Termdependency
Structured BehaviourillustratesUse Case, Business Rule, Constraintdependency
Structured Behaviouruses-termsDomain Termdependency
Product Changeoperations.addany product artifact (new ID)none
Product Changeoperations.modifyany existing product artifactnone
Product Changeoperations.removeany existing product artifactnone

A relationship referencing an unknown ID, or targeting a type outside the allowed set, is a validation error.

Canonical authoring direction is not impact direction. The Polarity column declares which end of a relationship is put in question when the other end changes.

  • dependency. The source cites what it builds on. A change to the target puts the source in question. A change to the source says nothing about the target.
  • governance. The edge couples both ends. The governed artifact must be reconsidered when the governing artifact changes, and the governing artifact’s continued applicability must be reconsidered when the governed artifact changes.
  • none. The field carries no impact polarity. Product Change operation edges record a proposal, not a dependency between Product Artifacts.

A relationship field added to this vocabulary MUST declare its polarity.

Polarity is a property of the relationship. It places no obligation on an author and produces no diagnostic of its own. What an implementation does with it is stated in Product Changes → Elaboration.

Array-member relationship fields use the [] attribution convention. Diagnostics for a scenario-ref relationship MUST report field as verification[].scenario-ref, just as a Journey step relationship reports steps[].use-case. Schema diagnostics such as PRODUCT002 continue to report their own instance paths.

Reverse relationships are always derived by the graph compiler and MUST NOT be authored or manually maintained.

The canonical/derived split is decided once per pair. The load-bearing case:

  • Domain Term.defined-in is canonical. Bounded Context.owns-terms is derived. A bounded context’s owned terms are exactly the domain terms whose defined-in references it. owns-terms MUST NOT appear in authored bounded-context frontmatter; schemas reject it. Tools MAY display owns-terms in inspection output and generated indexes as a derived field.

All other reverse views (Actor ← journeys, Business Rule ← governed use cases, Use Case ← derived requirements, Requirements verified by a Structured Behaviour, and so on) follow the same rule: derived, displayed, never authored.

  • An active artifact MUST NOT reference a retired artifact (error).
  • An active artifact referencing a deprecated artifact SHOULD produce a warning.
  • draft artifacts MAY reference draft artifacts.

Some diagnostics depend on reachability, defined deterministically as follows: two artifacts are connected if a path exists between them in the undirected view of the product graph restricted to the canonical product relationships above, excluding Product Change edges. A requirement is reachable from an actor when it is connected to at least one Actor node under this definition.

Structured Behaviour edges participate under the same rule. A Requirement verified by a Structured Behaviour is connected to the behaviour’s source Use Cases, Business Rules and Constraints. Structural impact analysis therefore includes changes to a Structured Behaviour through those authored edges, without making a semantic impact claim.

For PRODUCT105, a non-retired Business Rule is consumed if and only if it has at least one valid outgoing Business Rule.applies-to relationship, incoming Use Case.governed-by relationship or incoming Functional Requirement.derived-from relationship, and the artifact authoring that relationship is non-retired. An incoming Structured Behaviour.illustrates relationship MUST NOT count as a consumer.

uses-terms is authored from an artifact whose interpretation requires a Domain Term to that Domain Term. Reverse views are derived and MUST NOT be authored. A Domain Term MAY author uses-terms for a definitional dependency; cycles are not prohibited by this relationship alone.

For PRODUCT106, a non-retired Domain Term is used if and only if it has at least one valid incoming uses-terms relationship authored by a non-retired Use Case, Business Rule, Domain Term, Functional Requirement, Quality Requirement, Constraint or Structured Behaviour. A prose occurrence, a generated reverse relationship or another relationship path does not count.