taskMachine
@mineflow/api-schemas / taskMachine
Variable: taskMachine
const taskMachine: StateMachine<TaskContext,
| {
type: "START";
}
| {
reason: string;
type: "BLOCK";
}
| {
type: "UNBLOCK";
}
| {
type: "COMPLETE";
}
| {
reason: string;
type: "CANCEL";
}, {
}, never, never, ToParameterizedObject<{
hasBlockReason: unknown;
hasCancelReason: unknown;
}>, never, "inProgress" | "cancelled" | "open" | "blocked" | "done", string, NonReducibleUnknown, NonReducibleUnknown, EventObject, MetaObject, ToStateSchema<{
context: {
taskId: "";
};
id: "task";
initial: "open";
states: {
blocked: {
on: {
CANCEL: {
guard: "hasCancelReason";
target: "cancelled";
};
UNBLOCK: "inProgress";
};
};
cancelled: {
type: "final";
};
done: {
type: "final";
};
inProgress: {
on: {
BLOCK: {
guard: "hasBlockReason";
target: "blocked";
};
CANCEL: {
guard: "hasCancelReason";
target: "cancelled";
};
COMPLETE: "done";
};
};
open: {
on: {
CANCEL: {
guard: "hasCancelReason";
target: "cancelled";
};
START: "inProgress";
};
};
};
}>>;
Defined in: libs/tasks/src/tasks/state-machine/task.machine.ts:30
FSM задачи (Tasks Task, BL-31).
Источник истины — task.entity.ts; машина — xstate v5 spec (ADR-0022),
re-export'ится @mineflow/api-schemas для расчёта доступных действий по
статусу в UI. Назначение исполнителя (assign/unassign) — ортогонально
статусу и в FSM не моделируется.
Состояния и переходы:
open(начальное) →START→inProgressopen→CANCEL→cancelled(guardhasCancelReason)inProgress→BLOCK→blocked(guardhasBlockReason)inProgress→COMPLETE→doneinProgress→CANCEL→cancelled(guardhasCancelReason)blocked→UNBLOCK→inProgressblocked→CANCEL→cancelled(guardhasCancelReason)done,cancelled— терминальные. Reopen — отложен в v2 (BL-31 §D5).