소스 정보
- 저장소
- me2resh/apexyard
- 최근 소스 활동
- 2026년 6월 27일 19:48
- 감지된 SKILL.md 언어
- 영어
- 스타
- 497
- 포크
- 267
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/me2resh/apexyard --skill bug명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
| name | bug |
| description | Create a structured bug ticket (Given/When/Then scenario, repro steps, severity). |
| argument-hint | <short description of the bug> |
| allowed-tools | Bash, Read, Write |
Creates a structured GitHub Issue for a bug with Given/When/Then scenario, repro steps, environment, and severity. Asks guided questions, shows the formatted ticket for confirmation, then creates the issue.
Read the registry path via portfolio_registry, the per-project docs dir via portfolio_projects_dir, and the ideas backlog via portfolio_ideas_backlog — all from .claude/hooks/_lib-portfolio-paths.sh. Source the helper at the top of any bash block that touches those paths:
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-read-config.sh"
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-portfolio-paths.sh"
registry=$(portfolio_registry)
Defaults match today's single-fork layout (./apexyard.projects.yaml, ./projects, ./projects/ideas-backlog.md). Adopters in split-portfolio mode override the portfolio.{registry, projects_dir, ideas_backlog} keys in .claude/project-config.json. Don't hardcode literal apexyard.projects.yaml or projects/ paths in bash blocks — the helper resolves whichever mode the adopter is in. See docs/multi-project.md.
/bug Profile picture upload fails
/bug RTL resets on navigation
/bug Follow button state not persisted
Before any gh issue create (or other tracker CLI), write this skill's name to the active-issue-skill marker so require-skill-for-issue-create.sh lets the command through. At skill entry:
# Resolve the ops-fork root the SAME way the hooks do (_lib-ops-root.sh):
# anchor on the .apexyard-fork marker (split-portfolio v2 — onboarding.yaml
# lives in the sibling portfolio repo, NOT the ops fork), falling back to the
# onboarding.yaml + apexyard.projects.yaml pair (single-fork v1).
ops_root="$PWD"; r="$PWD"
while [ "$r" != / ]; do
if [ -f "$r/.apexyard-fork" ] || { [ -f "$r/onboarding.yaml" ] && [ -f "$r/apexyard.projects.yaml" ]; }; then
ops_root="$r"; break
fi
r=${r%/*}
done
mkdir -p "$ops_root/.claude/session"
echo "bug" > "$ops_root/.claude/session/active-issue-skill"
Remove the marker on every exit path (success, early-exit, user cancel, error):
rm -f "$ops_root/.claude/session/active-issue-skill"
The clear-issue-skill-marker.sh SessionStart hook sweeps stale markers from killed sessions, but a clean exit should never leave one behind. See AgDR-0030.
Read .claude/session/current-ticket to determine which repo we're working in. If no active ticket, check apexyard.projects.yaml for managed projects. If only one project, use it. If multiple, ask:
Which project is this bug in?
If no projects are registered, ask for the repo in owner/repo format.
Take the title from $ARGUMENTS. If empty, ask:
What's the bug? Give me a short description.
Ask conversationally — do NOT batch all questions. Wait for each answer before asking the next.
a) Bug Scenario
Describe the bug scenario:
- Given: what's the starting state?
- When: what action triggers the bug?
- Then: what happens (the broken behavior)?
- Expected: what should happen instead?
If the user gives a casual description, restructure it into Given/When/Then/Expected format and confirm.
b) Repro Steps
What are the exact steps to reproduce?
c) Severity
How severe is this?
1. P0 — blocks a core feature, must fix immediately
2. P1 — important, fix soon
3. P2 — minor, fix when convenient
d) Environment (optional)
Any environment details? (browser, device, staging/prod, or Enter to skip)
e) Investigation Notes (optional)
Any initial investigation? (root cause hypothesis, relevant code paths, or Enter to skip)
Resolve the bug body template via the portfolio helper so adopter overrides win when present:
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-read-config.sh"
source "$(git rev-parse --show-toplevel)/.claude/hooks/_lib-portfolio-paths.sh"
template=$(portfolio_resolve_template tickets/bug.md) # → custom-templates/tickets/bug.md if present, else templates/tickets/bug.md
Single-fork adopters (no portfolio block) and adopters with no override fall straight through to templates/tickets/bug.md. Adopters who want a customised bug-body shape drop their version at <private_repo>/custom-templates/tickets/bug.md. See templates/README.md for the path-mirroring convention.
Backward-compat fallback: if portfolio_resolve_template returns empty (template file missing — partial adopter setup), fall back to the inline heredoc body below and print a one-line WARN on stderr (WARN: tickets/bug.md template missing — using inline fallback). This preserves the pre-refactor behaviour for adopters whose installations don't yet have the new template files.
Substitute the gathered inputs into the resolved template (or the inline heredoc fallback), then display the full ticket using the resolved shape (the default templates/tickets/bug.md shape is reproduced below):
Here's the ticket I'll create:
---
**[{P0|P1|P2}] {title}**
## Bug Scenario
**Given** {precondition}
**When** {action}
**Then** {unexpected result}
**Expected** {correct behavior}
## Repro Steps
1. {step 1}
2. {step 2}
3. ...
## Environment
{environment or "Not specified"}
## Severity
{P0-critical / P1-important / P2-later}
## Mitigation
{workaround or "—"}
## Investigation Notes
{notes or "—"}
## Glossary
| Term | Definition |
|------|------------|
| {term} | {definition} |
---
Labels: bug, {P0|P1|P2}
Repo: {owner/repo}
Create this ticket? (yes / edit / cancel)
Dispatch through tracker_create (#670 / AgDR-0072) so the issue lands in
this project's tracker (GitHub / GitLab / custom) per its tracker: block
in apexyard.projects.yaml. For a GitHub adopter this runs gh issue create
unchanged.
# Resolve + source the tracker lib (it lives in the ops fork's hooks dir).
tracker_lib="$(r="$PWD"; while [ -n "$r" ] && [ "$r" != / ]; do \
[ -f "$r/.claude/hooks/_lib-tracker.sh" ] && { echo "$r/.claude/hooks/_lib-tracker.sh"; break; }; \
r="${r%/*}"; done)"
# shellcheck source=/dev/null
. "$tracker_lib"
body_file="$(mktemp)"
cat > "$body_file" <<'BODY'
{formatted body}
BODY
# tracker_create <owner/repo> <title> <body_file> [<labels_csv>] → {"ref","url"}.
# Gated by require-skill-for-issue-create.sh; the step-0 marker keeps it allowed.
result="$(tracker_create "{owner/repo}" "[{P0|P1|P2}] {title}" "$body_file" "bug,{priority}")"
rc=$?
rm -f "$body_file"
if [ "$rc" -eq 3 ]; then
# tracker.kind=none (shape-only): no tracker to create in. tracker_create
# printed the rendered ticket body to stdout — surface it for manual /
# external filing instead of a non-existent CLI/auth failure.
echo "Tracker is 'none' (shape-only) — nothing was created in a tracker." >&2
echo "File this in your external system (e.g. Jira/Linear via MCP):" >&2
0
[ -ne 0 ] || [ -z ];
>&2
1
ref="$(printf '%s' "$result" | jq -r '.ref')"
url="$(printf '%s' "$result" | jq -r '.url')"
echo "Created: {owner/repo}#${ref} — {title}"
echo "${url}"
bug always, plus the severity label. Severity label scheme reads from .claude/project-config.*.json → .ticket.label_priority_scheme (default P0,P1,P2,P3)..claude/project-config.*.json → .ticket.prefix_whitelist; [Bug] must be in that list. Some teams prefer [Bug] prefix with the severity as a label (the default); others embed severity in the title ([P0], [P1]). Skill respects whichever is configured. See apexyard#109.Part of ApexYard — multi-project SDLC framework for Claude Code · MIT.
SOC 직업 분류 기준