You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Reuse the existing typed WorkOrder-to-Run fields: run_id, run_actor_id, command_id, and correlation_id.
Do not add Run-to-WorkOrder reverse lineage until a concrete Run Detail or query consumer requires it. If added later, it must be a typed work_order_id; it must not be inferred from run_origin, naming rules, or correlation.
Scope-authorized readers may query the scoped WorkOrder read model.
Mutations remain protected by requester/Scope authorization and expectedLifecycleVersion.
The frontend must not reproduce the WorkOrder lifecycle state machine. If contextual action controls are included, expose their availability using typed Actor-owned current-state semantics; command handling remains the final authority.
Do not add Audit navigation in this issue. Audit currently has no typed work_order_id; adding Audit correlation requires a separate concrete consumer and contract change.
Continue to use WorkOrderCurrentStateDocument as the query source. Do not add a second store, process-local registry, query-time replay, or projection priming.
Acceptance criteria
A WorkOrder can be created and queried before any Run exists.
An undispatched WorkOrder remains a durable, addressable request.
Authorized users can perform the supported assignment, reassignment, cancellation, and dispatch operations.
Dispatch continues to produce the existing typed WorkOrder-to-Run linkage.
The contextual WorkOrder surface links to canonical Run Detail after dispatch.
Runtime progress, approval, attention, failure, retry, and usage remain owned by Activity/Run Detail.
No top-level WorkOrder navigation, global attention queue, or Activity row is introduced.
UI authorization and action availability are not inferred from route shape or duplicated client-side lifecycle rules.
Accepted receipts do not claim Actor commit, read-model visibility, Run start, or completion.
Reassign, dispatch, and cancel use expectedLifecycleVersion; stale commands fail closed and the UI refreshes from the read model.
Tests use distinct identity shapes, including workOrderId = "wo-alpha", memberId = "m-alpha", workflowId = "wf-alpha", publishedServiceId = "svc-alpha", and runId = "run-alpha".
Relevant contracts, projection behavior, authorization paths, and product semantics are covered by tests and documentation.
Non-goals
A new Goal, Project, Initiative, or Campaign aggregate.
Summary
Extend the existing
WorkOrderresource as a contextual, persistent request that coordinates managed execution before aRunexists.Do not introduce a separate
Goalresource. The durable request semantics that would otherwise belong to a Goal are already owned by WorkOrder.Per #3107:
Runremains the canonical execution resource.Activityremains the canonical surface for observing all Runs.This issue follows #2789 and reuses the narrowed implementation delivered by #2941.
Product semantics
WorkOrder owns:
A WorkOrder:
Once a Run exists, the following belong exclusively to Run and Activity:
Needs you;WorkOrder Detail must link to Run Detail instead of copying or independently deriving those states.
UX scope
Add only contextual WorkOrder access:
Open Runwhen the existing typed Run reference is available.Do not:
Needs youUI; orrun_origin.Contract and implementation constraints
run_id,run_actor_id,command_id, andcorrelation_id.work_order_id; it must not be inferred fromrun_origin, naming rules, or correlation.expectedLifecycleVersion.work_order_id; adding Audit correlation requires a separate concrete consumer and contract change.WorkOrderCurrentStateDocumentas the query source. Do not add a second store, process-local registry, query-time replay, or projection priming.Acceptance criteria
expectedLifecycleVersion; stale commands fail closed and the UI refreshes from the read model.workOrderId = "wo-alpha",memberId = "m-alpha",workflowId = "wf-alpha",publishedServiceId = "svc-alpha", andrunId = "run-alpha".Non-goals
Goal,Project,Initiative, orCampaignaggregate.Needs you.Related