> ## Documentation Index
> Fetch the complete documentation index at: https://developers.kardinal.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Manual assignment and supervision

> Lock a sequence with `state`, supervise a tour live, and pin a stop to one resource.

[Real-time re-optimization](/guides/real-time-reoptimization) covers replacing the whole plan on disruption. This page covers the finer-grained controls: locking part of a resource's tour in place while the engine re-plans the rest, and reserving a stop for exactly one resource without making it mandatory.

## Locking a sequence: `mode` × assignment `status`

A resource's `state.mode` (`free`/`fixed`) and each `state.assignments[].status` (`assigned`/`fixed`) combine as follows:

|                     | `assignments[].status: "assigned"`                                                                                                                            | `assignments[].status: "fixed"`                                                                                                                                                            |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **`mode: "fixed"`** | The engine optimizes the timing of the given sequence, adding no further stops — useful for an imposed manual sequence, or to detect a missing expected stop. | The engine only checks the given sequence as-is, adding no further stops — a debug/evaluation mode: pose an existing tour to see whether it's feasible and why a given stop isn't covered. |
| **`mode: "free"`**  | Not allowed.                                                                                                                                                  | The engine respects the given sequence exactly, and is free to add new stops around it — the real-time supervision case below.                                                             |

## Live supervision as a tour progresses

Reflect a driver's real progress with successive `PUT /plans/{planId}` calls: a `begin` assignment with the real `departureTime`, then `stop` assignments filled in with `arrivalTime`/`beginTime`/`departureTime` as they actually happen, a `break` inserted dynamically if needed. Keep `mode: "free"` so the engine can still plan what comes after, and give every pinned assignment `status: "fixed"` — `"assigned"` isn't a valid combination with `mode: "free"`:

```json theme={null}
{
  "resources": [
    {
      "id": "driver-1",
      "state": {
        "mode": "free",
        "assignments": [
          { "type": "begin", "status": "fixed", "departureTime": "2026-08-03T07:02:00Z" },
          { "type": "stop", "status": "fixed", "stopId": "stop-1", "arrivalTime": "2026-08-03T07:40:00Z", "departureTime": "2026-08-03T07:55:00Z" }
        ]
      }
    }
  ]
}
```

## Pinning a stop to exactly one resource (pattern "Isolate")

`forbiddenAssignment` (see [Real-time re-optimization](/guides/real-time-reoptimization)) excludes a resource/stop pairing. There's no dedicated field for the opposite — reserving a stop for exactly one resource. The workaround: give the resource a `skills` entry derived from its own id (for example `skills: ["resource-12"]`) and require it on the targeted order (`requiredSkills: ["resource-12"]`).

<Warning>
  This is a strong bias, not a guarantee. Unlike `state.assignments` in `fixed` mode, the engine can still leave the stop unplanned if the assignment would hurt a higher-priority objective too much.
</Warning>

## See also

* [Modeling advanced constraints](/guides/advanced-constraints#driver-skills-and-qualifications) — `preferredStopTags`/`maximizePreferredStops`, the soft-preference counterpart to the preceding "Isolate" pattern.
* [Real-time re-optimization](/guides/real-time-reoptimization) — the full-plan `PUT` mechanics and `forbiddenAssignment`.
* [Data model](/reference/data-model#status-and-state) — `status`/`state` field reference.
