advice_without_adopt
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.
| Fix | Fails in | Exit |
|---|---|---|
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.ts | 1 |
Owned by Talk: the page that explains what this gate holds.
✗ 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 fiximport { 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,
})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,
})✓ ready to sell · 1 Service · it keeps at least 80% of every jobimport { 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.' },
},
},
})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.
'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.' },roles: {
attorney: { credential: 'bar admission' },roles: { attorney: { pool: attorneys, pay: 50 } },
talk: { adopt: 'attorney' },Read them in context: The rules table, The attorneys' Pool, Contract review.
{
"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
{
"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",