---
title: "step_unreachable"
url: https://services.dev/docs/reference/check/step_unreachable
---
# step_unreachable

URL: https://services.dev/docs/reference/check/step_unreachable

> A step no edge reaches never runs.

| Fix | Fails in | Exit |
|---|---|---|
| Fix its after, or route there with next. | `services/translation.ts` | 1 |

**Owned by** [deliver](https://services.dev/docs/service/deliver.md): the page that explains what this gate holds.

## What check says

```txt title="npx services.dev check"
  ✗ A step no edge reaches never runs. Fix its after, or route there with next. harden names translat, which isn't a step.
    https://services.dev/docs/reference/check/step_unreachable
  ✗ An agent couldn't order, wait for and accept a job. Run npx services.dev dev and read its job. It stopped at: harden can't run: nothing it waits on will.
    https://services.dev/docs/reference/check/agent_cannot_buy
✗ 2 to fix
```

## Often arrives with

The same file failed [`agent_cannot_buy`](https://services.dev/docs/reference/check/agent_cannot_buy.md) in the same run. Each has its own page.

## The failing file

```ts title="services/translation.ts"
import { Service } from 'services.dev'

export default Service({
  name: 'Translation',
  input: { document: 'file', to: 'language: a BCP 47 tag, such as fr-CA' },
  output: { document: 'file' },
  deliver: {
    translate: 'ai',
    harden: { review: 'adversarial', lenses: ['meaning', 'terms'], after: 'translat' },
  },
  price: 49,
})
```

## The fix

```diff title="git add -A && git diff --staged"
diff --git a/services/translation.ts b/services/translation.ts
index 9f8f9f9..7c257f5 100644
--- a/services/translation.ts
+++ b/services/translation.ts
@@ -6,7 +6,7 @@ export default Service({
   output: { document: 'file' },
   deliver: {
     translate: 'ai',
-    harden: { review: 'adversarial', lenses: ['meaning', 'terms'], after: 'translat' },
+    harden: { review: 'adversarial', lenses: ['meaning', 'terms'], after: 'translate' },
   },
   price: 49,
 })
```

```txt title="npx services.dev check"
✓ ready to sell · 1 Service · AI delivers it alone · it keeps at least 80% of every job
```

## Explained in

- [deliver](https://services.dev/docs/service/deliver.md)
- [The step graph](https://services.dev/docs/service/graph.md)
- [In CI](https://services.dev/docs/cli/ci.md)
- [Build with your coding agent](https://services.dev/docs/start/agents.md)

## What an agent reads

```json title="npx services.dev check --json · the step_unreachable failure"
{
  "code": "step_unreachable",
  "reason": "A step no edge reaches never runs.",
  "next": "Fix its after, or route there with next. harden names translat, which isn't a step.",
  "doc_url": "https://services.dev/docs/reference/check/step_unreachable"
}
```

<details>
<summary>The whole document check --json prints</summary>

```json title="npx services.dev check --json"
{
  "ai": {
    "cents_per_call": 42,
    "simulated": true
  },
  "mcp": {
    "tools": 13,
    "tokens": 4486,
    "sandbox": 9,
    "budget": 8000
  },
  "services": [
    {
      "path": "services/translation.ts",
      "lines": 8,
      "steps": "translate · ai → harden · ai · adversarial · 2 lenses",
      "ok": false,
      "price": "$49 per job, within 48 hours, charged on delivery.",
      "who": "AI delivers every job.",
      "agent": {
        "tool": "order_translation",
        "words": 24,
        "job": "job_7Hq2",
        "status": "canceled",
        "on": null,
        "charged": null,
        "person": false,
        "why": "harden can't run: nothing it waits on will."
      },
      "ledger": "+$49.00 · AI $1.26 (example) · you $47.74",
      "approved_ledger": null,
      "outcome": null,
      "margin": {
        "floor": {
          "cents": 3920,
          "pct": 80
        },
        "own": 3920,
        "stop": 980,
        "nested": []
      },
      "apps": [
        "customer portal",
        "owner console"
      ],
      "failures": [
        {
          "code": "step_unreachable",
          "reason": "A step no edge reaches never runs.",
          "next": "Fix its after, or route there with next. harden names translat, which isn't a step.",
          "doc_url": "https://services.dev/docs/reference/check/step_unreachable"
        },
        {
          "code": "agent_cannot_buy",
          "reason": "An agent couldn't order, wait for and accept a job.",
          "next": "Run npx services.dev dev and read its job. It stopped at: harden can't run: nothing it waits on will.",
          "doc_url": "https://services.dev/docs/reference/check/agent_cannot_buy"
        }
      ]
    }
  ]
}
```

</details>

---

- Up: [check’s gates](https://services.dev/docs/reference/check.md)
- Previous: [instructions_too_long](https://services.dev/docs/reference/check/instructions_too_long.md)
- Next: [review_after_attest](https://services.dev/docs/reference/check/review_after_attest.md)
