where_unresolved
A reserved row reads where from a party's region, and the Service takes no input that names it, so an order could never say where the act happens.
| Fix | Fails in | Suggests | Exit |
|---|---|---|---|
| Add the input the row reads, such as client_region: 'jurisdiction: such as US-CA', or set the role's where. | rules.ts:7 · rules.services['translation'].sign | input.client_region: 'jurisdiction: such as US-CA' | 1 |
Owned by Where an act happens: the page that explains what this gate holds.
✗ An agent couldn't order, wait for and accept a job. Run npx services.dev dev and read its job. It stopped at: sign needs the region of the client: A sworn translator signs a translation filed with a registry. Send client_region, an ISO 3166 code such as US-CA.
https://services.dev/docs/reference/check/agent_cannot_buy
✗ A reserved row reads where from a party's region, and the Service takes no input that names it, so an order could never say where the act happens. Add the input the row reads, such as client_region: 'jurisdiction: such as US-CA', or set the role's where. The sign row reads where: 'client', and translation takes no client or client_region input, so no order could say where it happens.
at rules.ts:7 · rules.services['translation'].sign
✗ 2 to fixThe same file failed agent_cannot_buy in the same run. Each has its own page.
import { Service } from 'services.dev'
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: { credential: 'sworn translator' } },
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 d9dc9a6..36ed668 100644
--- a/services/translation.ts
+++ b/services/translation.ts
@@ -3,7 +3,7 @@ import rules from '../rules.ts'
export default Service({
name: 'Translation',
- input: { document: 'file', to: 'language: a BCP 47 tag, such as fr-CA' },
+ input: { document: 'file', to: 'language: a BCP 47 tag, such as fr-CA', client_region: 'jurisdiction: such as US-CA' },
output: { document: 'file' },
rules,
roles: { translator: { credential: 'sworn translator' } },✓ 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: 'client', position: 'A sworn translator signs a translation filed with a registry.' },
},
},
})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.' },input: { contract: 'file', client: 'party', client_region: 'jurisdiction: such as US-CA', goals: 'text?' },Read them in context: The rules table, Contract review.
{
"code": "where_unresolved",
"reason": "A reserved row reads where from a party's region, and the Service takes no input that names it, so an order could never say where the act happens.",
"next": "Add the input the row reads, such as client_region: 'jurisdiction: such as US-CA', or set the role's where. The sign row reads where: 'client', and translation takes no client or client_region input, so no order could say where it happens.",
"doc_url": "https://services.dev/docs/reference/check/where_unresolved",
"file": "rules.ts",
"line": 7,
"path": "rules.services['translation'].sign",
"suggest": {
"path": "input.client_region",
"value": "'jurisdiction: such as US-CA'"
}
}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"
}
],
"services": [