SuccessionPipeline
A SuccessionPipeline is the container for the “Pipelines and Succession” feature: a named succession map, pipeline or watchlist owned by one organisation.
Purpose
Section titled “Purpose”Organisations track people they may want in future roles. A pipeline groups those people, optionally under named roles when its kind is a succession map. The kind distinguishes the three presentations the frontend renders. updated_at doubles as the card’s “last updated” value and is bumped by $touches on both roles and members, so any change inside the pipeline refreshes it.
Pipelines are created and edited from the project succession page through a set of single-action controllers.
app/Services/SuccessionPipelineService.php— reads pipelines with their roles and members, and builds the Inertia payload.app/Services/SuccessionPipelineWriter.php— all writes, including member deduplication.app/Http/Controllers/Projects/SuccessionPipeline*Controller.php— store, update and destroy actions.app/Http/Controllers/Projects/ProjectsSuccessionController.php— renders the succession page.app/Services/Voice/Tools/CreateSuccessionPipeline.php— lets the voice agent create a pipeline.
Relationships
Section titled “Relationships”| Relation | Type | Related model |
|---|---|---|
organization |
belongsTo |
Organization |
roles |
hasMany |
SuccessionPipelineRole |
members |
hasMany |
SuccessionPipelineMember |
Display order (created_at then id, ascending) is applied at query time in the service, not on the relation.
Data shape
Section titled “Data shape”Table succession_pipelines. Primary key is a UUID (HasUuids).
| Column | Type | Notes |
|---|---|---|
id |
uuid |
Primary key |
organization_id |
uuid |
FK to organizations |
kind |
SuccessionPipelineKind |
succession-map, pipeline, watch |
name |
string |
Not unique per organisation, by design |
created_at, updated_at |
datetime |
updated_at bumped by role and member changes |