advice_without_adopt

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

The rules reserve an advice class for the Service, and its talk names no role from a Pool that holds the row's credential to adopt held answers.

FixFails inExit
Set talk: { adopt: '<role>' } to a role from a Pool whose credential meets the advice row, or turn talk off with talk: false.services/translation.ts1

Owned by Talk: the page that explains what this gate holds.

npx services.dev check
  ✗ The rules reserve an advice class for the Service, and its talk names no role from a Pool that holds the row's credential to adopt held answers. Set talk: { adopt: '<role>' } to a role from a Pool whose credential meets the advice row, or turn talk off with talk: false. rules 2026-10 reserve advise as advice, and talk names no role to adopt it.
    https://services.dev/docs/reference/check/advice_without_adopt
✗ 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 } },
  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 e68b75e..64b7c95 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 },
   },
+  talk: { adopt: 'translator' },
   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.' },
      advise: { reserved: 'sworn translator', where: '*', kind: 'advice', position: 'Whether a registry will take a translation is advice.' },
    },
  },
})
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'],
})

How the legal example passes this gate, in lines read from its files.

examples/legal/rules.ts
'contract-review': {
  advise: { reserved: 'bar admission', where: 'client', regions: ['US-CA', 'US-NY', 'US-TX'], kind: 'advice', rail: 'member', position: 'Advice on a contract is legal advice in the client\'s state.' },
examples/legal/pools/attorneys.ts
roles: {
  attorney: { credential: 'bar admission' },
examples/legal/services/contract-review.ts
roles: { attorney: { pool: attorneys, pay: 50 } },
talk: { adopt: 'attorney' },

Read them in context: The rules table, The attorneys' Pool, Contract review.

npx services.dev check --json · the advice_without_adopt failure
{
  "code": "advice_without_adopt",
  "reason": "The rules reserve an advice class for the Service, and its talk names no role from a Pool that holds the row's credential to adopt held answers.",
  "next": "Set talk: { adopt: '<role>' } to a role from a Pool whose credential meets the advice row, or turn talk off with talk: false. rules 2026-10 reserve advise as advice, and talk names no role to adopt it.",
  "doc_url": "https://services.dev/docs/reference/check/advice_without_adopt"
}
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": 7,
      "kind": "rules",
      "says": "rules 2026-10 · 1 Service · 2 rows"
    },
    {
      "path": "pools/translators.ts",