rush_uncapped

The running jobjob_7Hq2 · delivered · document.fr-CA.pdf · $49.00 charged

A role is paid from the buyer, its Pool's fill ladder raises the fee, and nothing caps what the buyer pays for it.

FixFails inExit
Declare policy.max_rush: the most an order lets the ladder add, in dollars. Or pay the role from the price.services/translation.ts1

Owned by When no one claims: the page that explains what this gate holds.

npx services.dev check
  ✗ A role is paid from the buyer, its Pool's fill ladder raises the fee, and nothing caps what the buyer pays for it. Declare policy.max_rush: the most an order lets the ladder add, in dollars. Or pay the role from the price. translator is paid from the buyer, and the translators ladder raises the fee.
    https://services.dev/docs/reference/check/rush_uncapped
✗ 1 to fix
services/translation.ts
import { Service } from 'services.dev'
import { translators } from '../pools/translators.ts'
import rules from '../rules.ts'

export default Service({
  name: 'Translation',
  input: { document: 'file', to: 'language: a BCP 47 tag, such as fr-CA' },
  output: { document: 'file' },
  rules,
  roles: { translator: { pool: translators, pay: { usd: 30, from: 'buyer' } } },
  deliver: {
    translate: 'ai',
    harden: { review: 'adversarial', lenses: ['meaning', 'terms'] },
    sign: { by: 'translator', stamp: true },
  },
  price: 89,
})
git add -A && git diff --staged
diff --git a/services/translation.ts b/services/translation.ts
index 57aacec..0e134d3 100644
--- a/services/translation.ts
+++ b/services/translation.ts
@@ -13,5 +13,6 @@ export default Service({
     harden: { review: 'adversarial', lenses: ['meaning', 'terms'] },
     sign: { by: 'translator', stamp: true },
   },
+  policy: { max_rush: { word: 'money', default: 10, max: 30, note: 'the most the fill ladder adds to the fee' } },
   price: 89,
 })
npx services.dev check
✓ ready to sell · 1 Service · it keeps at least 80% of every job
rules.ts
import { Rules } from 'services.dev'

export default Rules({
  version: '2026-10',
  services: {
    translation: {
      sign: { reserved: 'sworn translator', where: '*', position: 'A sworn translator signs a translation filed with a registry.' },
    },
  },
})
pools/translators.ts
import { Pool } from 'services.dev'

export const translators = Pool({
  name: 'translators',
  roles: { translator: { credential: 'sworn translator' } },
  join: { name: 'text', languages: 'language[]' },
  verify: 'https://verify.example.test/translators',
  fill: ['raise 10% 2h', 'widen 4h'],
})
npx services.dev check --json · the rush_uncapped failure
{
  "code": "rush_uncapped",
  "reason": "A role is paid from the buyer, its Pool's fill ladder raises the fee, and nothing caps what the buyer pays for it.",
  "next": "Declare policy.max_rush: the most an order lets the ladder add, in dollars. Or pay the role from the price. translator is paid from the buyer, and the translators ladder raises the fee.",
  "doc_url": "https://services.dev/docs/reference/check/rush_uncapped"
}
The whole document check --json prints
npx services.dev check --json
{
  "ai": {
    "cents_per_call": 42,
    "simulated": true
  },
  "mcp": {
    "tools": 13,
    "tokens": 4490,
    "sandbox": 9,
    "budget": 8000
  },
  "files": [
    {
      "path": "rules.ts",
      "lines": 6,
      "kind": "rules",
      "says": "rules 2026-10 · 1 Service · 1 row"
    },
    {
      "path": "pools/translators.ts",