---
title: "MGS3031: a declaration claim nothing can grade"
description: Fires when a job is forked with a write path that claims one declaration of a file (path#declaration) and no footprint could ever check it. The fork is refused; claim the whole file, or give its extension a diff driver.
tags: [MGS3031, jobs, leases, write paths, fork, agents, footprint, claims]
---

# MGS3031: a declaration claim nothing can grade

`magus job fork`, the `magus_job` tool and `magus\job.put` refused a job because
one of its write paths claims a declaration (`<file>#<declaration>`) that no
footprint could ever check:

```text
[MGS3031] job: wave/notes claims a declaration no footprint can grade:
  "notes.txt" has no diff driver, so no changed line of it can be placed in a
  declaration; give `*.txt` one in .gitattributes (`magus doctor` lists the
  managed ones). Claim the whole file instead, or fix what is named
```

Nothing was written to the job store.

## Why

A claim like `run.go#executeStages` lets two jobs start on one file. It holds
only because magus can say, from the job's diff, which declaration every changed
line lands in. That placement is git's: the file's diff driver (the `diff=`
attribute) names the declaration each line sits under. A claim on a file with no
driver, on a pattern, or in a checkout whose version control places no lines
would read as a boundary and check nothing, so it is refused rather than recorded.

## What is refused

- **An empty declaration**: `run.go#`.
- **A pattern**: `internal/*.go#Run`. A declaration lives in one file.
- **A file with no diff driver**: magus manages drivers for Go, Python, Rust,
  Markdown, TypeScript and Buzz in its `.gitattributes` block. Any other
  extension needs a `*.<ext> diff=<driver>` line of your own.
- **A checkout with no version control, or one that does not place changed
  lines.** Only git does today.
- **A path that contains `#`, spelled bare**: `notes/a#b.md` when that file
  exists reads both as the path and as a claim on `notes/a`. Spell the path
  `./notes/a#b.md` or `notes/a\#b.md`; the escaped form also takes a claim,
  `notes/a\#b.md#Intro`.

## What to do

Claim the whole file, which is what the job was going to be graded against
anyway:

```sh
magus job fork wave/notes --write-paths notes.txt
```

Or give the extension a driver, then fork again with the claim.

## See also

- [Leases](../../../guides/integrations/agents/leases.md): write paths, claims, and what the guard enforces.
- [MGS3018](MGS3018.md): a directory as a job write path.
