---
title: "MGS1038: a magus.project option was removed"
description: Fires when a magusfile sets a magus.project key that an older magus accepted and this one removed. Load stops and names the key, because the value it declared is no longer honored.
tags: [MGS1038, magusfile, options, upgrade, removed, exclusive]
---

# MGS1038: a magus.project option was removed

A magusfile sets a key that `magus.project` used to accept:

```text
[error] [MGS1038] magus.project: targets["build"]: option "exclusive" was removed in
v0.5.0 with no replacement; slots and memory_mb are the only concurrency dials, so delete
the key
```

## Why this stops the load instead of ignoring the key

An option magus does not recognize is usually ignored with a warning, because it may come
from a NEWER magus: rejecting it would stop the workspace loading, including the command
that builds a binary new enough to read it.

A removed option is the opposite case. It came from an OLDER magus, and you are already
on the newer one. The ignore path would tell you to upgrade, which sends you in a circle,
and meanwhile the value you declared does nothing. Stopping with the key's name and what
to do is the only answer that ends the loop.

## What to do

Follow the message. Each removed option names its replacement, or says it has none.

| option      | removed in | instead                 |
| ----------- | ---------- | ----------------------- |
| `exclusive` | v0.5.0     | nothing: delete the key |

### `exclusive`

It asked for a target, or every target in a project, to run with no other target beside
it. It was meant for a target that uses the whole machine, and measured across every
declaration it never did: most protected nothing, and where the engine honored it, it
serialized every other gate member behind one target until the stall watchdog took the
run.

`slots` and `memory_mb` are the concurrency dials a target has. A target that must not run
beside a peer is making a claim about a shared resource, such as a tag namespace or a
branch it pushes, and the place to express that is its own CI job rather than a policy on
the target. [ADR 0001](../../../decisions/0001-bounded-concurrency-with-recursive-invocation.md)
records the reasoning and the measurement.
