Links
Typed relationships between entities that are neither containment nor
embedding — e.g. a Task depending on another Task, or a Meeting
having raised a Risk. Each relevant entity pair has its own dedicated
link class rather than sharing one generic Link entity, so each pair's
target type and vocabulary of relationship kinds stay precise.
Every link carries a LinkProvenance, orthogonal to its kind: EXPLICIT
when a user asserted the relationship directly, IMPLICIT when some
other process inferred it (e.g. from a mention in a comment).
Links are embedded fields on the entity that declares the relationship
(Task.links, Meeting.task_links, and so on) and are unvalidated
soft references: a link's target id is stored as given and is never
checked for existence, the same as Task.related_acs. See
Domain Model — Links for a
conceptual overview and Merging — Link merging
for merge semantics.
LinkProvenance
LinkProvenance
Bases: str, Enum
How a link between two entities came to exist.
Attributes:
| Name | Type | Description |
|---|---|---|
EXPLICIT |
A user directly asserted the relationship. |
|
IMPLICIT |
The relationship was inferred by some other process (e.g. one entity mentioned in another's comments). |
Task-owned links
TaskLinkKind
TaskLinkKind
Bases: str, Enum
Classifies the nature of a relationship between two Tasks.
Attributes:
| Name | Type | Description |
|---|---|---|
RELATES_TO |
A loose, non-directional association. |
|
DEPENDS_ON |
The owning Task cannot proceed until the target completes. |
|
DUPLICATES |
The owning Task describes the same work as the target. |
TaskLink
TaskLink
Bases: BaseModel
A typed relationship from a Task to another Task.
Attributes:
| Name | Type | Description |
|---|---|---|
target_task_id |
int
|
The id of the related Task. |
kind |
TaskLinkKind
|
The nature of the relationship. |
provenance |
LinkProvenance
|
Whether the relationship was explicitly asserted or implicitly inferred. |
TaskRiskLink
TaskRiskLink
Bases: BaseModel
A typed relationship from a Task to a Risk it is affected by.
Attributes:
| Name | Type | Description |
|---|---|---|
target_risk_id |
int
|
The id of the Risk affecting the owning Task. |
provenance |
LinkProvenance
|
Whether the relationship was explicitly asserted or implicitly inferred. |
UserStory-owned links
UserStoryLinkKind
UserStoryLinkKind
Bases: str, Enum
Classifies the nature of a relationship between two UserStories.
Attributes:
| Name | Type | Description |
|---|---|---|
RELATES_TO |
A loose, non-directional association. |
|
DEPENDS_ON |
The owning UserStory cannot be delivered until the target is. |
|
SUPERSEDES |
The owning UserStory replaces the target. |
UserStoryLink
UserStoryLink
Bases: BaseModel
A typed relationship from a UserStory to another UserStory.
Attributes:
| Name | Type | Description |
|---|---|---|
target_story_id |
int
|
The id of the related UserStory. |
kind |
UserStoryLinkKind
|
The nature of the relationship. |
provenance |
LinkProvenance
|
Whether the relationship was explicitly asserted or implicitly inferred. |
Risk-owned links
RiskLinkKind
RiskLinkKind
Bases: str, Enum
Classifies the nature of a relationship between two Risks.
Attributes:
| Name | Type | Description |
|---|---|---|
RELATES_TO |
A loose, non-directional association. |
|
COMPOUNDS |
The owning Risk worsens the target's impact or probability. |
RiskLink
RiskLink
Bases: BaseModel
A typed relationship from a Risk to another Risk.
Attributes:
| Name | Type | Description |
|---|---|---|
target_risk_id |
int
|
The id of the related Risk. |
kind |
RiskLinkKind
|
The nature of the relationship. |
provenance |
LinkProvenance
|
Whether the relationship was explicitly asserted or implicitly inferred. |
Meeting-owned links
MeetingLinkKind
MeetingLinkKind
Bases: str, Enum
Classifies the nature of a relationship between two Meetings.
Attributes:
| Name | Type | Description |
|---|---|---|
RELATES_TO |
A loose, non-directional association. |
|
FOLLOWS_UP_ON |
The owning Meeting is a follow-up to the target. |
MeetingLink
MeetingLink
Bases: BaseModel
A typed relationship from a Meeting to another Meeting.
Attributes:
| Name | Type | Description |
|---|---|---|
target_meeting_id |
str
|
The id of the related Meeting. |
kind |
MeetingLinkKind
|
The nature of the relationship. |
provenance |
LinkProvenance
|
Whether the relationship was explicitly asserted or implicitly inferred. |
MeetingTaskLinkKind
MeetingTaskLinkKind
Bases: str, Enum
Classifies how a Meeting relates to a Task.
Attributes:
| Name | Type | Description |
|---|---|---|
PRODUCED |
The meeting gave rise to the Task. |
|
DISCUSSED |
The Task was discussed during the meeting. |
MeetingTaskLink
MeetingTaskLink
Bases: BaseModel
A typed relationship from a Meeting to a Task.
Attributes:
| Name | Type | Description |
|---|---|---|
target_task_id |
int
|
The id of the related Task. |
kind |
MeetingTaskLinkKind
|
The nature of the relationship. |
provenance |
LinkProvenance
|
Whether the relationship was explicitly asserted or implicitly inferred. |
MeetingRiskLinkKind
MeetingRiskLinkKind
Bases: str, Enum
Classifies how a Meeting relates to a Risk.
Attributes:
| Name | Type | Description |
|---|---|---|
RAISED |
The meeting is where the risk was first raised. |
|
DISCUSSED |
The risk was discussed during the meeting. |
MeetingRiskLink
MeetingRiskLink
Bases: BaseModel
A typed relationship from a Meeting to a Risk.
Attributes:
| Name | Type | Description |
|---|---|---|
target_risk_id |
int
|
The id of the related Risk. |
kind |
MeetingRiskLinkKind
|
The nature of the relationship. |
provenance |
LinkProvenance
|
Whether the relationship was explicitly asserted or implicitly inferred. |
MeetingUserStoryLink
MeetingUserStoryLink
Bases: BaseModel
A typed relationship from a Meeting to a UserStory it discussed.
Attributes:
| Name | Type | Description |
|---|---|---|
target_story_id |
int
|
The id of the related UserStory. |
provenance |
LinkProvenance
|
Whether the relationship was explicitly asserted or implicitly inferred. |