Create Issue
Create a tracking issue for a YugabyteDB change: either a GitHub issue in
yugabyte/yugabyte-db (the default for core DB code) or a JIRA ticket (the
default for YBA/platform work). Return the resulting issue number / JIRA key so
it can feed into /create-pr or /create-diff.
Confidentiality — read before you write anything public
The upstream repo and every GitHub issue (title/body/labels) are PUBLIC on the
internet. Anything you (the agent) write into an issue is permanent and indexed
by search engines. A leak cannot be unsent. JIRA is internal, but the same
hygiene applies — don't paste customer data you don't need.
Never put any of the following into the issue title, body, or labels:
- Customer-identifying data — company names, account IDs, universe/cluster
names or UUIDs, support case numbers, environment names, region/zone names tied
to a customer deployment. Substitute with
customer-1, acme-corp, or a
generic description.
- PII — real names, real email addresses, real phone numbers, real postal
addresses, real IP addresses (public or private). Use the RFC 5737/3849
documentation ranges and RFC 2606 hostnames (
example.com) if you need
examples.
- Unanonymized customer schema or queries — table names, column names, SQL
text, query plans, or sample rows pulled from a real customer report.
Reconstruct a synthetic minimal reproducer using generic identifiers (
t1,
users, id, value).
- Secrets / credentials — API keys, tokens, passwords, TLS certificates,
private keys, license keys, kubeconfigs, production buckets, internal
Slack/JIRA/Linear URLs, internal hostnames, vault paths.
- YugabyteDB-internal information not yet public — unreleased roadmap,
internal SLAs, embargoed security findings, internal infra hostnames.
When the source is a customer report: read the original from the internal
source (JIRA / support ticket / Slack) — never paste or link it from a public
artifact. Reference the internal ticket ID (PLAT-20518) only; don't quote
customer-facing text into a public GitHub issue.
If you're unsure whether a string is sensitive, don't write it down — ask the
user. See src/AGENTS.md § Confidentiality for the canonical list. Every GitHub
issue template also carries a mandatory checkbox confirming the issue contains no
sensitive information — you are affirming that on the user's behalf, so scrub
first.
Prerequisites
For GitHub issues, this skill requires the gh CLI installed and authenticated:
- Install
gh: see https://cli.github.com/.
- Authenticate:
gh auth login (or gh auth status to verify).
For JIRA tickets, the Atlassian MCP tool createJiraIssue must be available
(load it via ToolSearch: select:mcp__claude_ai_Atlassian__createJiraIssue).
Workflow
Step 1: Decide the tracker — GitHub vs JIRA
Pick the default from what the change touches; ask only if it's genuinely
ambiguous:
- Core DB code (
src/, java/, cmake_modules/, build-support/, .github/,
.claude/) → GitHub issue in yugabyte/yugabyte-db.
- YBA / platform code (
managed/) → JIRA ticket.
If the user has already stated a preference or named a project, honor it.
Step 2: Gather title metadata
Component — infer from the files changed or the conversation
(git diff --name-only if there's a branch/diff in flight):
src/yb/ → DocDB
src/postgres/ → YSQL
src/yb/yql/cql/ → YCQL
managed/ → YBA
yugabyted-ui/ → yugabyted
docs/ → Docs
.claude/, AGENTS.md, CLAUDE.md → ClaudeCode
build-support/, cmake_modules/, .github/ → Build
- mixed/cross-cutting → ask the user
Title — a short, specific description of the bug or change. Propose one
from the conversation / commit messages if available. Confirm with the user.
Description — the "what / why": what the issue is, repro steps for a bug,
or the motivation for a feature. Draft it and confirm with the user.
Step 3a: Create a GitHub issue
Pick a matching issue template from .github/ISSUE_TEMPLATE/ based on the
component:
docDB.yml — DocDB / core storage
ysql.yml — YSQL
ycql.yml — YCQL
cdc.yml — CDC
ui.yml — YBA / UI
yugabyted.yml — yugabyted
docs.yml — docs
feature_request.yml — generic fallback for tooling / other, or any feature
request
Never file a GitHub issue without a template. Every issue must be built
from one of the .github/ISSUE_TEMPLATE/ templates — do not hand-craft a bare
gh issue create body. If no component-specific template fits, fall back to
feature_request.yml.
Read the chosen template YAML. Then:
- (a) Collect its
labels: list and pass them via --label.
- (b) Construct a markdown body mirroring the template's
body sections.
For each field:
- A
textarea labeled Description → a ## Description heading followed by
the user-facing content.
- An
Issue Type dropdown → pick one of the listed options (e.g.
kind/bug, kind/enhancement, kind/failing-test, kind/new-feature)
that matches the change, and state it in the body.
- The sensitivity
checkboxes → include a line confirming the issue contains
no sensitive information (you've scrubbed per the Confidentiality section).
Confirm the title and body with the user before creating.
Decide the assignee. Don't ask. By default leave the issue
unassigned — omit the --assignee flag entirely. Only when the user has
explicitly named an assignee should you pass --assignee <username> (use
@me if they asked to assign it to themselves).
Write the body to a temp file and run (shown here unassigned; add
--assignee <username> only if the user named an assignee in step 4):
gh issue create \
--repo yugabyte/yugabyte-db \
--title "<title>" \
--body-file /tmp/claude/issue-body.md \
--label "<comma-separated labels from template>"
Capture the issue number from the URL gh issue create prints.
Step 3b: Create a JIRA ticket
- Ask the user which project (e.g.,
PLAT) if not already known.
- Don't ask about the assignee. By default leave the ticket unassigned; only
when the user has explicitly named an assignee, set it accordingly.
- Load the Atlassian tool via ToolSearch, then call
mcp__claude_ai_Atlassian__createJiraIssue with the confirmed summary and
description. Confirm the summary/description with the user before creating.
- Capture the resulting JIRA key.
Step 4: Report back
Output:
- The issue URL (from
gh issue create) or the JIRA key + link.
- The reference in the form you'd hand to
/create-pr or /create-diff
(a GitHub number like #31151, or a JIRA key like PLAT-20518).
Then clean up any temp files created during this run.
Notes
- Don't reuse an issue across unrelated in-flight work — file a fresh one when
the change is unrelated, even if a related closed/merged PR used a similar
issue.
- The GitHub title the template proposes (e.g.
[DocDB] Title) is the raw issue
title. The [<issue>] <Component>: <Title> PR/commit format is applied later by
/create-pr or /create-diff — don't pre-format the issue title that way.
- This skill only creates the tracker. Opening the PR/diff is a separate step.
1---2name: create-issue3description: Create a GitHub issue (or JIRA ticket) tracking a YugabyteDB change or bug. Use when the user needs a tracker reference and doesn't have one yet — e.g. before opening a PR/diff, or to file a standalone bug/feature request.4---56# Create Issue78Create a tracking issue for a YugabyteDB change: either a **GitHub issue** in9`yugabyte/yugabyte-db` (the default for core DB code) or a **JIRA ticket** (the10default for YBA/platform work). Return the resulting issue number / JIRA key so11it can feed into `/create-pr` or `/create-diff`.1213## Confidentiality — read before you write anything public1415**The upstream repo and every GitHub issue (title/body/labels) are PUBLIC on the16internet.** Anything you (the agent) write into an issue is permanent and indexed17by search engines. A leak cannot be unsent. JIRA is internal, but the same18hygiene applies — don't paste customer data you don't need.1920**Never put any of the following into the issue title, body, or labels:**2122- **Customer-identifying data** — company names, account IDs, universe/cluster23 names or UUIDs, support case numbers, environment names, region/zone names tied24 to a customer deployment. Substitute with `customer-1`, `acme-corp`, or a25 generic description.26- **PII** — real names, real email addresses, real phone numbers, real postal27 addresses, real IP addresses (public or private). Use the RFC 5737/384928 documentation ranges and RFC 2606 hostnames (`example.com`) if you need29 examples.30- **Unanonymized customer schema or queries** — table names, column names, SQL31 text, query plans, or sample rows pulled from a real customer report.32 Reconstruct a synthetic minimal reproducer using generic identifiers (`t1`,33 `users`, `id`, `value`).34- **Secrets / credentials** — API keys, tokens, passwords, TLS certificates,35 private keys, license keys, kubeconfigs, production buckets, internal36 Slack/JIRA/Linear URLs, internal hostnames, vault paths.37- **YugabyteDB-internal information not yet public** — unreleased roadmap,38 internal SLAs, embargoed security findings, internal infra hostnames.3940**When the source is a customer report:** read the original from the internal41source (JIRA / support ticket / Slack) — never paste or link it from a public42artifact. Reference the internal ticket ID (`PLAT-20518`) only; don't quote43customer-facing text into a public GitHub issue.4445**If you're unsure whether a string is sensitive, don't write it down — ask the46user.** See `src/AGENTS.md` § Confidentiality for the canonical list. Every GitHub47issue template also carries a mandatory checkbox confirming the issue contains no48sensitive information — you are affirming that on the user's behalf, so scrub49first.5051## Prerequisites5253For GitHub issues, this skill requires the `gh` CLI installed and authenticated:54551. **Install `gh`**: see https://cli.github.com/.562. **Authenticate**: `gh auth login` (or `gh auth status` to verify).5758For JIRA tickets, the Atlassian MCP tool `createJiraIssue` must be available59(load it via ToolSearch: `select:mcp__claude_ai_Atlassian__createJiraIssue`).6061## Workflow6263### Step 1: Decide the tracker — GitHub vs JIRA6465Pick the default from what the change touches; ask only if it's genuinely66ambiguous:6768- Core DB code (`src/`, `java/`, `cmake_modules/`, `build-support/`, `.github/`,69 `.claude/`) → **GitHub issue** in `yugabyte/yugabyte-db`.70- YBA / platform code (`managed/`) → **JIRA ticket**.7172If the user has already stated a preference or named a project, honor it.7374### Step 2: Gather title metadata75761. **Component** — infer from the files changed or the conversation77 (`git diff --name-only` if there's a branch/diff in flight):78 - `src/yb/` → `DocDB`79 - `src/postgres/` → `YSQL`80 - `src/yb/yql/cql/` → `YCQL`81 - `managed/` → `YBA`82 - `yugabyted-ui/` → `yugabyted`83 - `docs/` → `Docs`84 - `.claude/`, `AGENTS.md`, `CLAUDE.md` → `ClaudeCode`85 - `build-support/`, `cmake_modules/`, `.github/` → `Build`86 - mixed/cross-cutting → ask the user87882. **Title** — a short, specific description of the bug or change. Propose one89 from the conversation / commit messages if available. Confirm with the user.90913. **Description** — the "what / why": what the issue is, repro steps for a bug,92 or the motivation for a feature. Draft it and confirm with the user.9394### Step 3a: Create a GitHub issue95961. **Pick a matching issue template** from `.github/ISSUE_TEMPLATE/` based on the97 component:98 - `docDB.yml` — DocDB / core storage99 - `ysql.yml` — YSQL100 - `ycql.yml` — YCQL101 - `cdc.yml` — CDC102 - `ui.yml` — YBA / UI103 - `yugabyted.yml` — yugabyted104 - `docs.yml` — docs105 - `feature_request.yml` — generic fallback for tooling / other, or any feature106 request107108 **Never file a GitHub issue without a template.** Every issue must be built109 from one of the `.github/ISSUE_TEMPLATE/` templates — do not hand-craft a bare110 `gh issue create` body. If no component-specific template fits, fall back to111 `feature_request.yml`.1121132. **Read the chosen template YAML.** Then:114 - (a) Collect its `labels:` list and pass them via `--label`.115 - (b) Construct a markdown body **mirroring the template's `body` sections**.116 For each field:117 - A `textarea` labeled *Description* → a `## Description` heading followed by118 the user-facing content.119 - An `Issue Type` `dropdown` → pick one of the listed `options` (e.g.120 `kind/bug`, `kind/enhancement`, `kind/failing-test`, `kind/new-feature`)121 that matches the change, and state it in the body.122 - The sensitivity `checkboxes` → include a line confirming the issue contains123 no sensitive information (you've scrubbed per the Confidentiality section).1241253. **Confirm the title and body with the user before creating.**1261274. **Decide the assignee.** Don't ask. By default **leave the issue128 unassigned** — omit the `--assignee` flag entirely. Only when the user has129 explicitly named an assignee should you pass `--assignee <username>` (use130 `@me` if they asked to assign it to themselves).1311325. Write the body to a temp file and run (shown here unassigned; add133 `--assignee <username>` only if the user named an assignee in step 4):134135 ```136 gh issue create \137 --repo yugabyte/yugabyte-db \138 --title "<title>" \139 --body-file /tmp/claude/issue-body.md \140 --label "<comma-separated labels from template>"141 ```1421436. Capture the issue number from the URL `gh issue create` prints.144145### Step 3b: Create a JIRA ticket1461471. Ask the user which project (e.g., `PLAT`) if not already known.1482. Don't ask about the assignee. By default leave the ticket unassigned; only149 when the user has explicitly named an assignee, set it accordingly.1503. Load the Atlassian tool via ToolSearch, then call151 `mcp__claude_ai_Atlassian__createJiraIssue` with the confirmed summary and152 description. **Confirm the summary/description with the user before creating.**1534. Capture the resulting JIRA key.154155### Step 4: Report back156157Output:158159- The issue URL (from `gh issue create`) or the JIRA key + link.160- The reference in the form you'd hand to `/create-pr` or `/create-diff`161 (a GitHub number like `#31151`, or a JIRA key like `PLAT-20518`).162163Then clean up any temp files created during this run.164165## Notes166167- Don't reuse an issue across unrelated in-flight work — file a fresh one when168 the change is unrelated, even if a related closed/merged PR used a similar169 issue.170- The GitHub title the template proposes (e.g. `[DocDB] Title`) is the raw issue171 title. The `[<issue>] <Component>: <Title>` PR/commit format is applied later by172 `/create-pr` or `/create-diff` — don't pre-format the issue title that way.173- This skill only *creates* the tracker. Opening the PR/diff is a separate step.