“Improve export” names an activity. “An admin receives a CSV containing only projects they can access” describes behavior a reviewer can check. Acceptance criteria should let two people agree whether the work is complete.
Start with the actor, starting state, action and result. Then add the nearest likely failure:
- Given an authenticated admin, requesting the export returns the documented CSV columns.
- Given a member without export permission, the request returns 403 without project data.
- Given no projects, the response contains the header row only.
Choose boundaries because they matter to this change. Do not add arbitrary latency targets, invented dependencies or implementation details to make a checklist look complete. If the owner has not chosen a size limit, record that decision as open rather than making one up.
The backend template includes a complete synthetic example. The UI template shows why an empty dataset and a failed request need different criteria.
SpecBot can point out missing outcomes and ambiguous instructions. It does not run the acceptance tests. After updating an issue, use a recheck if available, and have the implementer verify the actual behavior.
Install SpecBot in Linear to check your next issue's acceptance criteria.