fill_underwater

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

The Pool's fill_cap lets the ladder raise a brand-funded fee past what the job leaves: a job filled at the cap loses money.

FixFails inExit
Lower the Pool's fill_cap, or leave it out so the default holds: the lower of 50% and what the margin leaves.services/translation.ts1

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

npx services.dev check
  ✗ The Pool's fill_cap lets the ladder raise a brand-funded fee past what the job leaves: a job filled at the cap loses money. Lower the Pool's fill_cap, or leave it out so the default holds: the lower of 50% and what the margin leaves. At the translators Pool's 100% cap a job leaves −$48.80.
    https://services.dev/docs/reference/check/fill_underwater
✗ 1 to fix
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_cap: '100%',
  fill: ['raise 10% 2h', 'widen 4h'],
})
git add -A && git diff --staged
diff --git a/pools/translators.ts b/pools/translators.ts
index d080b6f..71b927f 100644
--- a/pools/translators.ts
+++ b/pools/translators.ts
@@ -5,6 +5,5 @@ export const translators = Pool({
   roles: { translator: { credential: 'sworn translator' } },
   join: { name: 'text', languages: 'language[]' },
   verify: 'https://verify.example.test/translators',
-  fill_cap: '100%',
   fill: ['raise 10% 2h', 'widen 4h'],
 })
npx services.dev check
✓ ready to sell · 1 Service · it keeps at least 13% of every job
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: 60 } },
  deliver: {
    translate: 'ai',
    harden: { review: 'adversarial', lenses: ['meaning', 'terms'] },
    sign: { by: 'translator', stamp: true },
  },
  price: 89,
})
npx services.dev check --json · the fill_underwater failure
{
  "code": "fill_underwater",
  "reason": "The Pool's fill_cap lets the ladder raise a brand-funded fee past what the job leaves: a job filled at the cap loses money.",
  "next": "Lower the Pool's fill_cap, or leave it out so the default holds: the lower of 50% and what the margin leaves. At the translators Pool's 100% cap a job leaves −$48.80.",
  "doc_url": "https://services.dev/docs/reference/check/fill_underwater"
}
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",