review_after_attest

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

A person attests work no review has passed: the review runs after the signature.

FixFails inExit
Move the review ahead of the step that signs, so the person signs work the review has already passed.services/translation.ts1

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

npx services.dev check
  ✗ A person attests work no review has passed: the review runs after the signature. Move harden ahead of sign, so the sworn translator signs work the review has already passed.
    https://services.dev/docs/reference/check/review_after_attest
✗ 1 to fix
services/translation.ts
import { Service } from 'services.dev'

export default Service({
  name: 'Translation',
  input: { document: 'file', to: 'language: a BCP 47 tag, such as fr-CA' },
  output: { document: 'file' },
  deliver: {
    translate: 'ai',
    sign: { by: 'sworn-translator', stamp: true },
    harden: { review: 'adversarial', lenses: ['meaning', 'terms'] },
  },
  price: 49,
})
git add -A && git diff --staged
diff --git a/services/translation.ts b/services/translation.ts
index 02e57aa..5941556 100644
--- a/services/translation.ts
+++ b/services/translation.ts
@@ -6,8 +6,8 @@ export default Service({
   output: { document: 'file' },
   deliver: {
     translate: 'ai',
-    sign: { by: 'sworn-translator', stamp: true },
     harden: { review: 'adversarial', lenses: ['meaning', 'terms'] },
+    sign: { by: 'sworn-translator', stamp: true },
   },
   price: 49,
 })
npx services.dev check
✓ ready to sell · 1 Service · it keeps at least 80% of every job
npx services.dev check --json · the review_after_attest failure
{
  "code": "review_after_attest",
  "reason": "A person attests work no review has passed: the review runs after the signature.",
  "next": "Move harden ahead of sign, so the sworn translator signs work the review has already passed.",
  "doc_url": "https://services.dev/docs/reference/check/review_after_attest"
}
The whole document check --json prints
npx services.dev check --json
{
  "ai": {
    "cents_per_call": 42,
    "simulated": true
  },
  "mcp": {
    "tools": 13,
    "tokens": 4491,
    "sandbox": 9,
    "budget": 8000
  },
  "services": [
    {
      "path": "services/translation.ts",
      "lines": 9,
      "steps": "translate · ai → sign · sworn translator · stamped → harden · ai · adversarial · 2 lenses",
      "ok": false,
      "price": "$49 per job, within 48 hours, charged on delivery.",
      "who": "A sworn translator signs at sign, stamped.",
      "agent": {