Definition errors

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

What Rules(), Pool() and Brand() refuse as they are written, before anything loads: each code, the path in what you wrote, and the message that says the fix.

26 codes. A definition that can never run is refused where it is written, as a DefinitionError with its code, the path in what you wrote, a message that says the fix, and this page. load reports it with the file, and check exits 1 with it, so a file that won't load never reaches check’s gates.

CodeThrown byPathMessage
row_unpositionedRules()services['translation'].signRules 2026-10: services['translation'].sign has no position. Every row records the position counsel gives for it.
row_kindRules()services['translation'].signRules 2026-10: services['translation'].sign is reserved and open: a row is reserved, open, refused or the client's, exactly one.
rung_unparsedPool()fill[0]Pool translators: fill[0] is 'raise 10% in 2h'. A rung is 'raise 10% 2h', 'widen 4h', 'firms 8h', 'staff 12h' or 'cancel 24h'.
rungs_out_of_orderPool()fill[1]Pool translators: fill[1] 'raise 10% 2h' comes before 'widen 4h': rungs run in time order, so write them that way.
fill_cap_unparsedPool()fill_capPool translators: fill_cap is '0.5', and a cap is a share of the posted fee, such as '50%'.
credential_unscopedPool()scopesPool translators: scopes leaves out sworn translator, which its roles name. Say whether each counts everywhere ('*') or per region.
teaser_unknownPool()sees.teaserPool translators: the teaser names client. A teaser shows Task facts only (act, region, fee, fee_usd, signals, kind, service, step, role), so a push payload never carries an input; show inputs on the sheet.
word_repeatedBrand()words.taskBrand: words.job and words.task are both 'order', so two things would read the same.
word_unlowercaseBrand()words.jobBrand: words.job is 'Matter'. A word is lowercase letters and hyphens, and its plural is made for it: 'matter'.
also_unknownBrand()also['matters']Brand: also names 'matters', which isn't an operation id: write it as the registry does, such as 'member.ledger.get'.
writes_unknownService()subject.keeps.glossaryService Glossary: subject.keeps.glossary is written from terms, which isn't an output. A kept fact is written from the output: glossary.
period_unknownService()subject.periodService Glossary: subject.period is edition, which isn't an input. Name the input that says the period, such as year: 'text', or write period as a function of the order.
clock_due_unknownService()clocks.expires.dueService Renewal: clocks.expires.due is 'next spring'. A due date is a span after something, such as '30d after file' or '3mo after issued', or a function of the job that returns a date.
clock_owner_unknownService()clocks.expires.lives_onService Renewal: clocks.expires.lives_on is 'subject', and the Service has no subject for the clock to outlive the job on.
clock_rung_unparsedService()clocks.expires.rungs[0]Service Renewal: clocks.expires.rungs[0] is 'remind 3d'. A rung is 'notice 30d', 'escalate 3d', 'ack daily 7d' or 'run <step> 3d', counted in days.
clock_step_unknownService()clocks.expires.rungs[0]Service Renewal: clocks.expires.rungs[0] runs renew, which isn't a step. Its steps are draft, extend.
clock_run_unroutedService()clocks.expires.rungs[0]Service Renewal: clocks.expires.rungs[0] runs draft, which runs in written order anyway. Mark it routed: true, so it runs only when the clock sends the job there.
clock_evidence_unknownService()clocks.expires.satisfied_by[0]Service Renewal: clocks.expires.satisfied_by[0] names renew, which isn't a step, so its commit can never satisfy the clock. Its steps are draft, extend.
clock_hard_movedService()clocks.expires.movesService Renewal: clocks.expires is hard, and moves names extend. Nothing moves a hard date: if one date can move and another can't, write two clocks.
span_ambiguousService()deliver.sign.estService Renewal: deliver.sign.est is '30m'. '30m' could be 30 minutes or 30 months. Write '30min' or '30mo'.
every_unknownService()price.everyService Glossary: price.every is 'fortnight'. A subscription is charged every day, week, month, quarter, year.
calendar_unknownBrand()calendar.zoneBrand: calendar.zone is 'Eastern', which isn't an IANA zone. Write one such as 'America/New_York', or 'UTC'.
trigger_unparsedService()on.schedule.refreshService Glossary: on.schedule.refresh has 'the first Monday'. A date is 'Feb 1' each year, '2027-02-01' once, 'every monday', or every day, week, month, quarter or year.
subscription_unpricedService()onService Glossary: on mints jobs on a subscription, and the price has no every. Add every: 'month', 'quarter' or 'year' to the price: one charge per cycle.
allowance_uncountedService()price.includes['translation']Service Glossary: price.includes['translation'] is 2.5. An allowance is a whole number of jobs per cycle, such as 12.
needs_unknownService()deliver.extend.needsService Renewal: extend needs draft, which isn't a grant ask. needs names a step written { ask, to: 'grant' }, and this Service has none.

Each block is the captured run: → the definition as written, ← what it threw, and on "Show all" the error whole.

row_unpositioned

Rules() · row_unpositioned
→ Rules({ version: '2026-10', services: { translation: { sign: { reserved: 'sworn translator' } } } })
← DefinitionError · row_unpositioned · services['translation'].sign

row_kind

Rules() · row_kind
→ Rules({ version: '2026-10', services: { translation: { sign: { reserved: 'sworn translator', open: true, position: 'Certified copies are sworn.' } } } })
← DefinitionError · row_kind · services['translation'].sign

rung_unparsed

Pool() · rung_unparsed
→ Pool({ …, fill: ['raise 10% in 2h'] })
← DefinitionError · rung_unparsed · fill[0]

rungs_out_of_order

Pool() · rungs_out_of_order
→ Pool({ …, fill: ['widen 4h', 'raise 10% 2h'] })
← DefinitionError · rungs_out_of_order · fill[1]

fill_cap_unparsed

Pool() · fill_cap_unparsed
→ Pool({ …, fill_cap: '0.5' })
← DefinitionError · fill_cap_unparsed · fill_cap

credential_unscoped

Pool() · credential_unscoped
→ Pool({ …, scopes: { notary: '*' } })
← DefinitionError · credential_unscoped · scopes

teaser_unknown

Pool() · teaser_unknown
→ Pool({ …, sees: { teaser: ['act', 'client'] } })
← DefinitionError · teaser_unknown · sees.teaser

word_repeated

Brand() · word_repeated
→ Brand({ words: { job: 'order', task: 'order' } })
← DefinitionError · word_repeated · words.task

word_unlowercase

Brand() · word_unlowercase
→ Brand({ words: { job: 'Matter' } })
← DefinitionError · word_unlowercase · words.job

also_unknown

Brand() · also_unknown
→ Brand({ words: { job: 'matter' }, also: { matters: '/matters/:id/journal' } })
← DefinitionError · also_unknown · also['matters']

writes_unknown

Service() · writes_unknown
→ Service({ …, subject: { …, keeps: { glossary: 'terms' } } })
← DefinitionError · writes_unknown · subject.keeps.glossary

period_unknown

Service() · period_unknown
→ Service({ …, subject: { …, period: 'edition' } })
← DefinitionError · period_unknown · subject.period

clock_due_unknown

Service() · clock_due_unknown
→ Service({ …, clocks: { expires: { due: 'next spring', owner: 'buyer' } } })
← DefinitionError · clock_due_unknown · clocks.expires.due

clock_owner_unknown

Service() · clock_owner_unknown
→ Service({ …, clocks: { expires: { due: '1d after expires', owner: 'buyer', lives_on: 'subject' } } })
← DefinitionError · clock_owner_unknown · clocks.expires.lives_on

clock_rung_unparsed

Service() · clock_rung_unparsed
→ Service({ …, clocks: { expires: { …, rungs: ['remind 3d'] } } })
← DefinitionError · clock_rung_unparsed · clocks.expires.rungs[0]

clock_step_unknown

Service() · clock_step_unknown
→ Service({ …, clocks: { expires: { …, rungs: ['run renew 3d'] } } })
← DefinitionError · clock_step_unknown · clocks.expires.rungs[0]

clock_run_unrouted

Service() · clock_run_unrouted
→ Service({ …, clocks: { expires: { …, rungs: ['run draft 3d'] } } })
← DefinitionError · clock_run_unrouted · clocks.expires.rungs[0]

clock_evidence_unknown

Service() · clock_evidence_unknown
→ Service({ …, clocks: { expires: { …, satisfied_by: ['renew'] } } })
← DefinitionError · clock_evidence_unknown · clocks.expires.satisfied_by[0]

clock_hard_moved

Service() · clock_hard_moved
→ Service({ …, clocks: { expires: { …, hard: true, moves: { extend: '7d after due' } } } })
← DefinitionError · clock_hard_moved · clocks.expires.moves

span_ambiguous

Service() · span_ambiguous
→ Service({ …, deliver: { draft: 'ai', sign: { by: 'person', est: '30m' } } })
← DefinitionError · span_ambiguous · deliver.sign.est

every_unknown

Service() · every_unknown
→ Service({ …, price: { usd: 19, every: 'fortnight' } })
← DefinitionError · every_unknown · price.every

calendar_unknown

Brand() · calendar_unknown
→ Brand({ calendar: { zone: 'Eastern' } })
← DefinitionError · calendar_unknown · calendar.zone

trigger_unparsed

Service() · trigger_unparsed
→ Service({ …, on: { schedule: { refresh: 'the first Monday' } }, price: { usd: 19, every: 'month' } })
← DefinitionError · trigger_unparsed · on.schedule.refresh

subscription_unpriced

Service() · subscription_unpriced
→ Service({ …, on: { schedule: { refresh: 'every month' } }, price: 19 })
← DefinitionError · subscription_unpriced · on

allowance_uncounted

Service() · allowance_uncounted
→ Service({ …, price: { usd: 19, every: 'month', includes: { translation: 2.5 } } })
← DefinitionError · allowance_uncounted · price.includes['translation']

needs_unknown

Service() · needs_unknown
→ Service({ …, deliver: { draft: 'ai', extend: { by: 'ai', needs: 'draft' } } })
← DefinitionError · needs_unknown · deliver.extend.needs

The same refusal, in a Service file: check names the file and stops, before any gate runs.

Terminal
$ head -3 services/translation.ts
import { Pool, Service } from 'services.dev'

export const translators = Pool({ name: 'translators', roles: { translator: { credential: 'sworn translator' } }, join: { name: 'text' }, verify: 'https://verify.example.test/translators', fill: ['raise 10% in 2h'] })

$ npx services.dev check
services/translation.ts:3  Pool translators: fill[0] is 'raise 10% in 2h'. A rung is 'raise 10% 2h', 'widen 4h', 'firms 8h', 'staff 12h' or 'cancel 24h'.
  at      fill[0]
  next    fix services/translation.ts, then npx services.dev check
  docs    https://services.dev/docs/reference/definition-errors#rung_unparsed