{"generated":"2026-10-06T17:24:29.395Z","spec":"FieldService","target":"node","capabilities":["notifications","uploads","search","errors","rateLimit","webhooks","billing","auth","audit","backups","monitoring","ops","onboarding","analytics","cache","emailTemplates","exportCsv","security","terraform","kubernetes"],"summary":{"probes":51,"pass":51,"fail":0},"results":[{"cap":"terraform","name":"infra/main.tf emitted","ok":true,"detail":""},{"cap":"kubernetes","name":"Dockerfile emitted","ok":true,"detail":""},{"cap":"kubernetes","name":"deploy/k8s.yaml emitted","ok":true,"detail":""},{"cap":"emailTemplates","name":"lib/email-templates.js emitted","ok":true,"detail":""},{"cap":"docs","name":"CAPABILITIES.md emitted","ok":true,"detail":""},{"cap":"tests","name":"test/smoke.mjs emitted","ok":true,"detail":""},{"cap":"emailTemplates","name":"render('notification') subject+text","ok":true,"detail":""},{"cap":"onboarding","name":"setup incomplete initially","ok":true,"detail":""},{"cap":"onboarding","name":"setup completes","ok":true,"detail":""},{"cap":"webhooks","name":"register webhook","ok":true,"detail":""},{"cap":"webhooks","name":"entity write returns id","ok":true,"detail":""},{"cap":"webhooks","name":"outbound delivery received","ok":true,"detail":""},{"cap":"webhooks","name":"delivery logged","ok":true,"detail":""},{"cap":"notifications","name":"write hook created notification","ok":true,"detail":""},{"cap":"uploads","name":"attachment stored","ok":true,"detail":""},{"cap":"uploads","name":"file round-trips","ok":true,"detail":""},{"cap":"search","name":"finds entity row","ok":true,"detail":""},{"cap":"errors","name":"404 carries code","ok":true,"detail":""},{"cap":"errors","name":"validation error is structured","ok":true,"detail":""},{"cap":"billing","name":"mock payment settles","ok":true,"detail":""},{"cap":"billing","name":"status reports provider","ok":true,"detail":""},{"cap":"billing","name":"plan created","ok":true,"detail":""},{"cap":"billing","name":"subscription activates","ok":true,"detail":""},{"cap":"billing","name":"summary reports mrr","ok":true,"detail":""},{"cap":"auth","name":"register creates user","ok":true,"detail":""},{"cap":"auth","name":"weak password rejected","ok":true,"detail":""},{"cap":"auth","name":"bad login 401","ok":true,"detail":""},{"cap":"auth","name":"login returns token","ok":true,"detail":""},{"cap":"auth","name":"bearer session resolves","ok":true,"detail":""},{"cap":"auth","name":"unauthenticated me 401","ok":true,"detail":""},{"cap":"auth","name":"lockout after 5 fails","ok":true,"detail":""},{"cap":"audit","name":"write recorded with actor","ok":true,"detail":""},{"cap":"backups","name":"snapshot produced","ok":true,"detail":""},{"cap":"backups","name":"listed","ok":true,"detail":""},{"cap":"backups","name":"downloads bytes","ok":true,"detail":""},{"cap":"backups","name":"path traversal refused","ok":true,"detail":""},{"cap":"monitoring","name":"health ok","ok":true,"detail":""},{"cap":"monitoring","name":"metrics count requests","ok":{"ph-setup":{"n":3,"ms":17,"err":0},"ph-webhooks":{"n":1,"ms":5,"err":0},"customers":{"n":3,"ms":70,"err":1},"ph-webhook-deliveries":{"n":1,"ms":1,"err":0},"ph-notifications":{"n":1,"ms":0,"err":0},"ph-attachments":{"n":2,"ms":8,"err":0},"ph-search":{"n":1,"ms":2,"err":0},"definitely-not-a-route":{"n":1,"ms":0,"err":1},"ph-payments":{"n":1,"ms":5,"err":0},"ph-billing-status":{"n":1,"ms":0,"err":0},"ph-plans":{"n":1,"ms":4,"err":0},"ph-subscriptions":{"n":1,"ms":5,"err":0},"ph-billing-summary":{"n":1,"ms":1,"err":0},"ph-auth":{"n":13,"ms":499,"err":10},"ph-audit":{"n":1,"ms":0,"err":0},"ph-backups":{"n":4,"ms":11,"err":1},"health":{"n":1,"ms":0,"err":0}},"detail":""},{"cap":"ops","name":"ops report","ok":true,"detail":""},{"cap":"ops","name":"table stats","ok":true,"detail":""},{"cap":"ops","name":"maintenance 503s entity routes","ok":true,"detail":""},{"cap":"ops","name":"ops stays up in maintenance","ok":true,"detail":""},{"cap":"ops","name":"maintenance off restores","ok":true,"detail":""},{"cap":"analytics","name":"all entities counted","ok":true,"detail":""},{"cap":"cache","name":"second GET served x-cache:hit","ok":true,"detail":""},{"cap":"exportCsv","name":"csv has header + row","ok":true,"detail":""},{"cap":"security","name":"nosniff header","ok":true,"detail":""},{"cap":"security","name":"frame-deny header","ok":true,"detail":""},{"cap":"security","name":"report lists capabilities","ok":true,"detail":""},{"cap":"rateLimit","name":"429 after limit","ok":true,"detail":""},{"cap":"rateLimit","name":"429 body has code","ok":true,"detail":""}]}