Copy the template below into a Linear issue description or your team's saved issue template. Replace bracketed prompts and remove irrelevant sections. Examples are synthetic teaching fixtures, not observed product incidents. The corrected example illustrates a more complete draft; unresolved owner decisions still need answers.
Copyable template
# [Specific change and affected flow]
## Problem
[Who is affected, what happens now, and why change it?]
## Expected behavior
[Observable result; record decisions and unresolved questions explicitly.]
## Acceptance criteria
- [ ] [Given a state, when an action happens, then an observable result follows.]
- [ ] [Boundary or failure behavior.]
## Scope and context
[Relevant service/component; in scope; out of scope; dependencies and owner.]
## Verification
[How to check success; safe fixtures; expected results.]
## Contract
[Method/path; request/response; auth; tenant isolation; errors; retries; limits; migration/rollback.]
Weak example
Add export API
Let users export projects.
Corrected example
# Add a workspace-scoped project CSV export
## Problem and expected behavior
Synthetic example: workspace admins need a CSV of the projects they may access for an internal inventory. Add GET /v1/projects/export returning text/csv with columns id,name,status in that order, sorted by id ascending.
## Acceptance criteria
- [ ] An authenticated workspace admin receives only projects visible to that admin in the selected workspace.
- [ ] Unauthenticated requests return 401; non-admin requests return 403; neither returns project data.
- [ ] An empty workspace returns 200 with the header row only.
- [ ] Names containing commas, quotes or newlines are correctly CSV-escaped; spreadsheet-formula prefixes are neutralized according to the agreed export policy.
- [ ] More than 10,000 visible projects returns 422 with code export_too_large and no partial file.
- [ ] A service failure returns 503 with code export_unavailable and no partial success payload.
- [ ] Repeating the request does not mutate projects or create duplicate background jobs.
## Scope and technical context
Use the existing project permission checks and request authentication. No background jobs, UI download button, new permissions or schema migration. CSV export is read-only. Dependency: the API owner must confirm the CSV safety policy and error contract; unresolved decisions block handoff.
## Verification and rollout
Cover permission isolation with two workspaces, empty results, escaping, size limit and service failure. Release behind the existing export flag only if one exists; otherwise have the owner record the rollout and rollback approach before work begins. Do not invent a flag or repository path.
Before handoff
- [ ] Is the request/response contract explicit?
- [ ] Are authorization and workspace isolation testable?
- [ ] Are empty, oversized, retry and failure cases defined?
- [ ] Are migration, dependencies and rollout decisions resolved?
What SpecBot contributes
SpecBot can surface missing contracts, permissions, failure behavior and dependencies. It does not audit API security or verify that code implements the contract. A score is advisory, not proof that implementation will succeed. Correct the issue using facts the owner confirms, then review it again if your workspace allows rechecks. Rechecks use the shared monthly allowance.
Install SpecBot in Linear to review your next issue. No meeting or demo required. Review the workspace settings after installation; automatic comments may be enabled.