A four-state lifecycle on every report — pending, approved, dismissed, implemented — with the approver's name and timestamp recorded on approval. A featherweight endpoint returns just the pending count for the navigation badge. Approving a report widens what the implementer is allowed to apply from the auto-safe subset to everything in it.
Also called: approve SEO report · pending reports badge · SEO approvals
- 1A report with proposals is stored as pending; one with none is stored as implemented immediately.
- 2/api/platform/seo/badge returns a head-only count query so the rail can poll it cheaply on every panel load.
- 3Approve stamps approved_at and approved_by from the signed-in platform user.
- 4The implementer treats an approved report as fully actionable and a pending one as auto-safe proposals only.
- 5A report closes to implemented only when nothing is left waiting on a human.
Approval is the boundary between a machine acting on its own judgement and a machine acting on a decision. The implementer's comment draws the line: "'approved' means Keith signed it off in the panel and everything in it is fair game; 'pending' means only the auto-safe set may run." The badge exists because a queue nobody can see is a queue nobody empties — the endpoint is deliberately "featherweight — one count — because the rail polls it on every panel load."
- Proposals died as 'pending' with no visible queue.
- There was no record of who approved what, or when.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →