Feature request: customer and project-specific sequence workflows
Summary
Build a new sequence workflow system from zero. Do not extend the current Mission Control workflow UI. The system must support different workflows for different customers. It must also support two projects running on the same dataset at the same time. Each project must keep its own progress and approval state.User problem
Today, sequence status is a single legacy value. That works for one workflow, but it cannot describe two projects with different work on the same sequence. A cuboid project and a segmentation project can also reach different approval outcomes at the same time.Required behavior
Scope
- A workflow assignment is explicit.
- The assignment identifies the customer, dataset, and project scope.
- Project A must not change the workflow state of Project B on the same dataset.
- A dataset with no assignment must use the existing hard-coded sequence flow.
- The feature applies only to LiDAR sequence datasets.
- Image, video, and other dataset types must keep their current behavior.
State model
Each project deliverable has two independent dimensions:- Work state: not started, labeling, review, QC passed, export blocked, export in progress, export delivered.
- Approval state: not requested, pending, approved, changes requested, rejected.
Legacy compatibility
- Existing sequences keep their current
sequence.statusbehavior when no workflow is assigned. - Existing legacy statuses must remain readable.
- Assignment must not fail because an existing legacy status is absent from a new configuration. Unmapped initial legacy states must use the configured initial state.
- The system must not rewrite legacy statuses during a read operation.
- Any legacy projection must be documented as a lossy summary. It must never replace project-level state.
Mission Control requirements
- Show the project and deliverable scope at the top of the control.
- Show one readable work state and one readable approval state per deliverable.
- Use full labels. Do not truncate the current state to an unreadable value.
- Show the reason when a transition is unavailable.
- Show the exact server error for invalid or stale transitions.
- Do not show competing legacy and new controls on the same screen.
- Do not lock annotation editing because of workflow state.
- Do not use group membership as a workflow permission gate.
- Do not use dataset names, station names, or URL patterns to enable the feature.
API requirements
- Create and assign a versioned workflow definition per explicit scope.
- Return the active workflow, current state, approval state, and valid next actions in one response.
- Require an expected current-state token for updates.
- Return stable error codes for stale state, invalid transition, missing permission, and unsupported dataset type.
- Support independent updates for each project and deliverable.
- Keep an append-only audit history for state changes.
Configuration example
The configuration format must be simple enough for staff to manage without code. It must define deliverables, states, approvals, actors, and transitions. It must not contain customer-specific hard-coded IDs or dataset-name matching rules.Explicit non-goals
- No frame-level semseg approval workflow.
- No automatic editor locks.
- No customer group enrollment required to edit masks.
- No dataset-name or station-name feature detection.
- No replacement of the legacy flow for customers that do not opt in.
- No requirement that segmentation wait for cuboid completion.
Rollout plan
- Remove the current Mission Control workflow controls and restore the legacy UI.
- Keep existing workflow records only if they do not change legacy behavior.
- Build and test the new scope model and API without exposing it to users.
- Add a staff-only assignment control with clear scope.
- Pilot with one customer and two projects on one dataset.
- Enable other customers only after the pilot passes the acceptance tests.
Acceptance tests
- Lucid opens a dataset with no configuration and sees the existing flow.
- Serve Project A and Project B can run on the same sequence with different states.
- Changing Project A does not change Project B.
- Cuboids can be approved while segmentation remains in labeling.
export_blockedcan be set and moved to a valid recovery state when configured.- A user can always read the current state and the reason for any blocked action.
- No editor click is blocked by workflow state.
- Existing legacy status history remains intact.