Document user stories and bug reports for Linear. Handles two modes: (1) User Story mode - create well-scoped stories with acceptance criteria. Triggers: "write a story", "create a story for", "break down this feature", "scope this work", "new feature". (2) Bug Report mode - investigate and document bugs using Sentry, Vercel, Render, and browser tools. Triggers: "report a bug", "document this bug", "bug report", "something is broken", "log this issue", "this isn't working", "found a bug", "there's an error". Can enrich existing rough Linear issues or create new detailed reports from scratch. This skill ONLY documents - it does NOT suggest fixes, root causes, or solutions.
Document user stories and bug reports as GitHub Issues. Two modes: User Story and Bug Report.
Issues are filed on GitHub with the gh CLI, never on Linear. Linear is retired; if you
find yourself reaching for a Linear MCP tool, you are in the wrong tracker.
Every issue this skill files carries the priority label by default. Both modes end at
Filing the Issue, which is where that happens.
CRITICAL: This skill documents only. NEVER suggest fixes, root causes, or solutions.
Determine mode from user input:
Create well-scoped user stories with clear boundaries and testable acceptance criteria.
## [Action-oriented title]
**As a** [persona - the actual user, not technical role],
**I want** [goal - user intent, not implementation],
**so that** [benefit - the "why"].
### Acceptance Criteria
- [ ] [Testable behavior]
### Edge Cases (this story)
- [ ] [Edge case to handle]
### Out of Scope
- [Excluded feature] -> ISSUE-XX (link if exists)
- [Excluded feature] (future story)
### Implementation Notes
**Constraints:**
- [Technology/library requirements]
**Patterns to Follow:**
- See `path/to/example` for similar implementation
**Existing Code to Use:**
- `ComponentName` in `src/path/`
| Rule | Check | |------|-------| | One Outcome | Story delivers exactly one user-visible outcome. "And also..." = two stories. | | Explicit Boundaries | Every story MUST have "Out of Scope" section. | | Edge Case Triage | Each edge case is either handled (this story) or deferred (out of scope). | | No Scope Creep | New ideas become new stories. Ask: "Core to outcome, or separate story?" | | Size Limit | >5 acceptance criteria or >3 edge cases = consider splitting. |
Must be: testable (yes/no), user-observable, specific, independent.
| Bad | Good | |-----|------| | "Works correctly" | "User can see list with date and duration" | | "Handle errors" | "When API fails, user sees error with retry option" | | "Fast" | "Loads within 2 seconds" |
Investigate and document bugs with evidence from dev tools. Documentation only — no fix suggestions.
gh issue view the rough note, enrich itAsk one at a time:
Before investigating, determine how much is already known:
| User provided | Path | |---------------|------| | Error message + affected page/URL + screenshot or reproduction steps | Document-only — skip investigation, go straight to Step 4 | | Vague symptom ("something is broken", "it doesn't work") | Investigate — continue to Step 2 | | Existing GitHub issue with rough notes | Enrich — continue to Step 2 |
Document-only path: The bug is already characterized. Report what the user provided without deep code analysis or log investigation, then file it.
Based on description and URL, determine which services to check. Read references/service-mapping.md for the keyword-to-service mapping and tool priority.
Auto-discover which investigation tools are available and initialize them before evidence collection.
ToolSearch to probe each service's MCP tool (see service-mapping.md for exact queries)TEST_* variables live in the repository root .env only.find_organizations first → store organizationSlug + regionUrllist_workspaces (auto-selects if one) → list_services → match service by name/keyword from bug description → store resource ID.vercel/project.json for projectId and teamId. In monorepos, also check apps/*/vercel/project.json if the root path doesn't exist.Read ONLY the single file where the error originates. Do not trace dependencies, shared services, or related features.
When: Always for API/backend bugs. Skip for purely visual/CSS bugs.
/api/admin/billing/revenue → apps/dashboard/src/app/api/admin/billing/revenue/route.ts). Use Glob if path isn't obvious.Run checks using the investigation plan from Step 2.5. Priority: MCP → CLI → Browser. Use table names, error messages, and patterns from Step 2.7 as search keywords.
Read references/service-mapping.md for detailed tool priority and filter options per service.
Sentry (always check):
admin/calls, billing/revenue) — this matches Sentry's transaction field directly and is more reliable than keyword search.get_issue_details instead.Vercel (if dashboard/API related):
/admin/billing → filter by billing)Render (if voice/backend related):
Browser (if reproduction needed):
.envIf a tool is unavailable: skip it, note "[Service] logs not checked — tool not available" in the report.
When a monitoring source returns nothing for a confirmed bug, investigate why — don't just move on.
Trigger: Sentry returned 0 errors but logs show 500s, or logs show no error output despite 500 status codes.
Sentry.captureException() called? Only console.error()?Grep to count affected routes.Read references/bug-report-template.md for the exact output template.
Compile all evidence into the template. Rules:
Multi-issue detection: If investigation revealed a distinct secondary issue (different root area, fix scope, or severity):
Both modes end at the same place — see Filing the Issue.
Do not ask whether to file. Write the issue, then say where it landed. The user paid for that round trip when they invoked the skill.
GitHub Issues, via gh. Default to the repository of the current working directory:
gh repo view --json nameWithOwner -q .nameWithOwner
If the working directory is not a git repository, ask which repo — that is the one question
here worth asking. Some projects keep a public intake repo separate from the internal
tracker; work goes to the internal one, so check the repo's CLAUDE.md before assuming.
Apply priority to every issue this skill creates. A human sat down and described this
deliberately, which is exactly what the label means: it ranks the issue ahead of age in an
autonomous agent queue. Filing without it drops hand-written work to the back of a backlog
the agents are already draining.
Add type and area on top: bug or enhancement, plus whatever area labels the repo defines
(dashboard, voice-server, infrastructure, documentation). Do not invent labels — list
what exists first:
gh label list --repo <owner/repo> --limit 100
If priority is absent from that repo, create it once and carry on:
gh label create priority --repo <owner/repo> --color 0E8A16 --description "Ranks ahead of age in the agent queue. Applied by a human only."
One thing defeats priority and it is easy to miss. A repo whose agent queue excludes
issues parked on a human — needs-decision, needs-human, blocked-scope, epic — filters
those out before ranking, so an issue carrying both is never worked at all. Never apply
both. If the work genuinely needs a founder decision, put the decision in the body, leave the
blocking label off, and name the open question in your report back.
Write the body to a file and pass --body-file. A heredoc straight into --body mangles
backticks and $:
gh issue create --repo <owner/repo> --title "<title>" --label priority --label bug --body-file <path>.md
If you started from an existing issue (entry point 1), replace its body instead of filing a duplicate:
gh issue edit <N> --repo <owner/repo> --body-file <path>.md --add-label priority
If the repo organises issues under epics, parent the new one. The sub-issue API takes the issue's database id, not its number — a number returns 404:
gh issue list --repo <owner/repo> --label epic --state open --json number,title
NID=$(gh api repos/<owner/repo>/issues/<new> --jq '.id') && gh api --method POST repos/<owner/repo>/issues/<epic>/sub_issues -F "sub_issue_id=$NID"
Pick the epic yourself. An unparented issue is not a failure — file it either way rather than stopping to ask.
The issue number and URL, the labels applied, and the epic it went under. One line. Do not paste the body back; it is on GitHub now.
| Scenario | Action |
|----------|--------|
| Not enough info | Ask targeted questions, don't guess |
| No errors found anywhere | Diagnose the gap (Step 3.5), then document findings |
| Sentry search returns nothing | Use URL path from Step 2.7 as search term first; if still nothing, ask user for direct Sentry URL or ID |
| No direct link from tool | Note search terms used for manual lookup |
| Investigation reveals second issue | Ask user, then document both or note in Related Findings |
| Bug is fully characterized by user | Use document-only path (Step 1.5). Report what's provided, don't investigate. |
| gh not authenticated | Present the report for manual copy-paste, and say gh auth login is needed |
| Repo has no priority label | Create it (see Filing the Issue), then carry on |
npx skills add karanivincent/issue-documenter下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer