issue-quality-gatelisted
Install: claude install-skill Brite-Nites/brite-claude-plugins
# Issue Quality Gate
Run the 7 checks below against a single Linear issue object passed in by the consumer. Return a list of `{check, status, message}` tuples. The skill itself does NOT block — consumers (Phase 1 audit, Phase 2 scope) decide what to do with failures.
## Input
A single Linear issue object as returned by `mcp__plugin_workflows_linear-server__get_issue` or `list_issues`. Required fields:
- `id`, `title`, `description`, `priority`
- `assignee` (may be null)
- `state` with `type` field (or `statusType` for `list_issues` shape)
- `cycleId` (may be null)
- `completedAt` (set only when state is `completed`)
Optional fields enrich the gate but are not required: `comments`, `attachments` (consumer may pre-fetch these for check #7).
## The 7 Checks
| # | Check | Pass criterion | Fail criterion |
|---|---|---|---|
| 1 | `assignee_present` | `issue.assignee != null` | unassigned |
| 2 | `title_scopes_work` | ≥3 words AND no leading `TBD` / `???` / `[placeholder]` | <3 words OR placeholder lead |
| 3 | `priority_set` | `priority` ∈ {1, 2, 3, 4} (Urgent/High/Medium/Low) | `priority == 0` (No priority) |
| 4 | `state_matches_cycle` | `cycleId` null OR (`cycleId` set AND state ∈ {`unstarted`, `started`, `completed`}) | `cycleId` set AND state == `backlog` |
| 5 | `dependencies_declared` | description contains `## Dependencies` heading with ≥1 issue ID OR literal `none` | header missing OR section empty |
| 6 | `ac_section_non_empty` | description contains `## Acceptanc