fill_underwater
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.
| Fix | Fails in | Exit |
|---|---|---|
| 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.ts | 1 |
Owned by When no one claims: the page that explains what this gate holds.
✗ 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 fiximport { 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'],
})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'],
})✓ ready to sell · 1 Service · it keeps at least 13% of every jobimport { 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,
}){
"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
{
"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",