Skip to main content

Relationships — Cross-References and Bindings

processkit expresses relationships between entities two ways:

  1. Cross-references — lightweight fields in frontmatter
  2. Bindings — first-class entities with their own files

Pick the right one based on what the relationship needs.

The rule

If a relationship has scope, time, or its own attributes → Binding. Otherwise → cross-reference.

Cross-reference examples

# In a WorkItem
spec:
blocks: [BACK-swift-oak]
blocked_by: [BACK-calm-fox]
related_decisions: [DEC-023]
parent: BACK-epic-lint

Conventional field names:

FieldMeaning
parentThis entity is a child of another
childrenThis entity has sub-items
blocksThis entity blocks others until resolved
blocked_byThis entity is blocked by others
related_workitemsTyped relationship to WorkItems
related_decisionsTyped relationship to DecisionRecords
supersedesThis entity replaces an older one
superseded_byThis entity has been replaced
implementsThis entity implements a decision

See the cross-reference-management skill for the full list and conventions.

Binding examples

---
apiVersion: processkit.projectious.work/v1
kind: Binding
metadata:
id: BIND-bright-falcon
created: 2026-04-06T00:00:00Z
spec:
type: role-assignment
subject: ACTOR-alice
target: ROLE-tech-lead
scope: SCOPE-project-x
valid_from: 2026-01-01
valid_until: 2026-12-31
---

Conventional binding types:

typesubject kindtarget kind
role-assignmentActorRole
work-assignmentWorkItemActor
workitem-gateWorkItemGate
scope-gateScopeGate
time-windowanyany
budget-applicationArtifactWorkItem/Scope

Legacy process-gate, process-scope, and schedule-scope Bindings are v1 migration inputs only. New v2 relationships should target the concrete WorkItem, Scope, Artifact, or Gate being governed.

See the binding-management skill for the full spec.

Why Binding was generalized from RoleBinding

DISC-002 §11 analyzes the decision to generalize the 18th primitive from RoleBinding to Binding. The short version: the indirection pattern applies to at least 7 relationship types across processkit, and one generalized primitive is cleaner than multiplying specific bindings. See DEC-023 in the aibox repo.