---
title: "MGS3045: a ci gate over the write paths nothing runs"
description: Fires when a ci target reads files inside a job's write paths and neither the job's check nor any of its goals runs it. The record is refused unless it adds a goal for the target or waives the problem with a reason.
tags: [MGS3045, jobs, leases, goals, ci, fork, apply, agents, waivers, validation]
---

# MGS3045: a ci gate over the write paths nothing runs

`magus job fork`, `magus job apply` and `magus\job.put` refused a job record
because `ci` runs a target over its write paths that the job never runs:

```text
[MGS3045] lint . reads changes/**/*.md, and neither the check nor a goal runs it:
  add the goal {"id":"lint","kind":"check","check":{"target":"lint","project":"."}},
  or waive it if the root runs it
```

Nothing was written to the job store.

## Why

A job graded only on its check can pass while the gate that will judge its
change fails. The failure then surfaces after integration, where nobody holds
the files any more.

## What to do

- Add the goal the problem prints, so the worker runs the target.
- If the root runs the gate once after integrating every job, waive the
  problem with `<target> <project>` as its subject:

```json
"waivers": [
  { "code": "MGS3045", "subject": "lint .", "reason": "the root runs it" }
]
```

`magus describe job <id>` lists the gates not run and the goals to add.

## See also

- [MGS3044](MGS3044.md): a regenerated output outside the write paths.
- [Leases](../../../guides/integrations/agents/leases.md): goals and waivers.
