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

# Constraints Deep Dive

> All eight constraint types, when to use each, and how they interact with CPM

# Constraints Deep Dive

Constraints override or limit the CPM engine's ability to freely schedule a task. Use them when a task is tied to a real-world date that cannot move regardless of logic (a contract milestone, a delivery arrival, a regulatory deadline).

## Feature Spec Reference

**Module 2.7 -- Constraint Types**

## The Eight Constraint Types

### 1. As Soon As Possible (ASAP)

**Default for all tasks.** No constraint is applied -- CPM schedules the task at its earliest valid date given its predecessors.

**When to use:** Most tasks. Only deviate when you have a real-world date requirement.

### 2. As Late As Possible (ALAP)

CPM schedules the task at its latest valid date without delaying its successors.

**When to use:** Tasks where you want to defer work as long as possible without creating risk (e.g., procurement payments, subcontractor mobilization). Use carefully -- ALAP tasks have zero float and appear on the critical path by definition.

### 3. Start No Earlier Than (SNET)

The task cannot start before the specified date. CPM may schedule it later if predecessors demand it.

**When to use:** Regulatory approval windows, permit valid dates, seasonal work restrictions. The task can float later than the constraint date if predecessors push it.

### 4. Start No Later Than (SNLT)

The task must start by the specified date. If CPM calculates a later start, a warning is generated.

**When to use:** Contractual milestones with penalty clauses, weather-dependent work with fixed windows. A violation warning appears in the task list when CPM cannot respect the constraint.

### 5. Finish No Earlier Than (FNET)

The task cannot finish before the specified date. Useful for minimum duration requirements imposed by inspections or curing periods.

**When to use:** Concrete curing minimums, mandatory inspection hold periods, contractual proof-of-completion dates.

### 6. Finish No Later Than (FNLT)

The task must finish by the specified date. If CPM calculates a later finish, a warning is generated.

**When to use:** Final completion deadlines, interim milestone deadlines, client delivery dates.

### 7. Must Start On (MSO)

The task is pinned to start on exactly the specified date, regardless of predecessor logic.

**When to use:** Government inspection dates, external crew mobilization dates tied to contracts. This is the strongest start constraint -- it overrides all predecessor dependencies.

### 8. Must Finish On (MFO)

The task is pinned to finish on exactly the specified date, regardless of predecessor logic.

**When to use:** Permit expiration deadlines, contractual handover dates, regulatory compliance dates. This is the strongest finish constraint.

## Constraint Reference Table

| Constraint             | Code | CPM Direction             | Overrides Predecessors |
| ---------------------- | ---- | ------------------------- | ---------------------- |
| As Soon As Possible    | ASAP | Earliest valid            | No                     |
| As Late As Possible    | ALAP | Latest valid              | No                     |
| Start No Earlier Than  | SNET | Cannot start before date  | No (can start after)   |
| Start No Later Than    | SNLT | Must start by date        | Warning if violated    |
| Finish No Earlier Than | FNET | Cannot finish before date | No (can finish after)  |
| Finish No Later Than   | FNLT | Must finish by date       | Warning if violated    |
| Must Start On          | MSO  | Pinned to date            | Yes                    |
| Must Finish On         | MFO  | Pinned to date            | Yes                    |

## Setting a Constraint

1. Open the Task Detail Panel (double-click the task row)
2. Find the **Constraint Type** dropdown
3. Select the constraint type
4. If the constraint requires a date (SNET, SNLT, FNET, FNLT, MSO, MFO), select the date from the picker
5. Click **Save**

The schedule recalculates immediately.

## Constraint Violations and Warnings

When a constraint cannot be satisfied -- for example, a FNLT constraint where predecessors push the finish past the constraint date -- GlidePath:

1. Displays a warning icon on the task row
2. Shows a tooltip explaining the conflict ("Task cannot finish by \[date] given its predecessor chain")
3. Still renders the task at its CPM-calculated date (does not force the impossible date)

You must resolve constraint violations manually by either adjusting the constraint date, modifying the predecessor chain, or accepting the schedule slip.

## Constraints and Import

Imported schedules from MS Project XML and P6 XER include constraints in the source file. GlidePath maps these to the corresponding GlidePath constraint types during import. See [MS Project Import](/import-export/03-ms-project-import) and [Primavera P6 Import](/import-export/04-primavera-import) for mapping details.

## Screenshot

<img src="https://mintlify.s3.us-west-1.amazonaws.com/glide-path/assets/screenshots/04-04-constraint-picker-with-visual.png" alt="Constraint Type Picker" />

*Constraint type picker showing all eight options with the date field active.*

***

## Next Steps

* [Automatic Scheduling](/scheduling/03-automatic-scheduling)
* [Critical Path](/dependencies/04-critical-path)
* [Milestones and Constraints](/gantt-basics/05-milestones-constraints)
