본문으로 건너뛰기
cccskills
무료GitHub에 공개

bug-archaeology

When a bug or regression is reported, the FIRST step — before fixing — is to research how and when it was introduced (git archaeology), then record that finding on the tracking issue/PR. Use the moment a bug, error, broken build, or "this used to work" is reported, before writing a fix. Produces a first-bad-commit (or "not a code regression") note you paste onto the issue.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md5.0 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Bug Archaeology — find out how & when it broke, before you fix it

The reflex for any bug is: research origin first, fix second. Jumping straight to a fix hides the real story and produces symptom-patches. The recent case that motivated this (issue #424): a fanfare build warned that @fyit/crouton-printing/server/database/schema "could not be resolved". It looked like a code bug — but archaeology showed the code and lockfile were correct since #329; the real cause was a stale local install (a missing pnpm workspace symlink). A symptom-first reflex would have "fixed" package code that was never broken.

So before you touch the code: establish when the behaviour changed, what change introduced it, and whether it's even a code regression at all — then write that down where the next person (or agent doing git blame/git bisect) will find it.

When to use

  • Default / first step the moment a bug, crash, error, failed build, broken test, or "this used to work" is reported — before writing a fix.
  • On ask: "when was this introduced", "find the regression", "root-cause this".
  • Skip only for a brand-new feature that never worked (nothing to regress from) or a one-line obvious typo in code you just wrote this session.

The protocol

1. Reproduce / pin the symptom

Get the exact error string, failing file, or observable. You need a concrete needle to search history for.

2. Decide: code regression, or environment/state?

Before blaming a commit, rule out the non-code causes — they're common and archaeology on the wrong axis wastes time:

  • Stale install — node_modules/symlinks out of date vs the lockfile (run pnpm install; compare ls -la node_modules/... link mtimes to the dep's introduction date). This was the #424 cause.
  • Env/secrets/config — a value differs between machines/envs, not the code.
  • Data/state — a migration, a seeded row, an external service.

If it's one of these, that is the finding — record it and stop (don't go commit-hunting for a regression that isn't in the code).

3. Git archaeology — find the first bad change

Pick the tool that fits the needle:

# A symbol/string appeared or vanished — pickaxe is the fastest first move:
git log -S '<exact string>' --oneline -- <path>     # commits that add/remove the literal
git log -G '<regex>' --oneline -- <path>             # commits whose diff matches a regex

# When did this file/area last change, and in what commit?
git log --oneline -- <path>
git log --oneline -L '<start>,<end>:<path>'          # history of a specific line range

# Who last touched the exact line, and why (read that commit's message):
git blame -L <line>,<line> -- <path>
git show <sha>                                       # the introducing change + its rationale

# Behaviour regression with no obvious line — bisect between a known-good and known-bad:
git bisect start <bad-sha> <good-sha>
git bisect run <command-that-exits-nonzero-on-the-bug>
git bisect reset

Tie the first-bad commit back to its PR/issue (git log shows the (#NN) merge ref) so the finding links the original change.

4. Record the finding (REQUIRED — this is the deliverable)

Archaeology that isn't written down gets re-done. Post the finding on the tracking issue/PR as a comment, or in the bug issue body. If no issue exists yet, open one (per github-tasks) — the finding is its first content. Keep the bare (#NN) convention in commits; link full URLs in chat replies.

Finding template (copy-paste)

## 🔬 Archaeology

- **Symptom:** <the exact error / observable>
- **First introduced:** <commit SHA> (<PR #NN>, <YYYY-MM-DD>) — `<one-line what that change did>`
  <!-- OR, when it's not a code regression: -->
- **Not a code regression:** <stale install | env/secret | data/state> — <what was actually wrong>
- **How found:** <git log -S '…' / git bisect / symlink mtime vs dep introduction / …>
- **Fix:** <the change that addresses the *root* cause, not the symptom>

A good finding states either a first-bad commit (SHA + PR + date) or an explicit "not a code regression — <cause>". "Looks broken, fixed it" is not a finding.

How this fits the workflow

This is step 0 of bug work in CLAUDE.md's Task Execution Workflow: research origin and record it before the fix. It pairs with /review (which inspects a diff for problems) and github-tasks (where the finding is recorded). The durable archaeology note is exactly what a future git blame/git bisect lands on — so we stop re-litigating settled regressions.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

a11y

무료

Accessibility review for Vue surfaces — the code-cleaning analog of /code-review and /simplify, pointed at WCAG/ARIA. Reviews just your diff (or a package/file), rates findings by severity, and either comments inline on the PR (--comment) or applies the safe fixes for you (--fix). Steers the depth-aware `a11y` subagent. Use when asked to "check accessibility", "a11y this", "audit ARIA/keyboard", or run /a11y.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

ask-human

무료

Emit a blocking question the owner can read in ~10 seconds and answer in one reply — the scannable, recommendation-first handoff every agent posts when it hits a fork it can't own. Leads with the one decision + a recommendation, carries the 🤖 provenance header, doubles as the

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

audit

무료

Audit packages for documentation completeness, detect drift between code and docs, and maintain documentation quality across the monorepo. Use when checking package docs, running audits, or reviewing documentation health.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

Author a placeable layout block that looks right at ANY pane size. The one hard rule — size to the PANE with container queries (@container), never the viewport — plus list/form playbooks and the sizing contract (minWidth etc.) the viability metric reads. Use when adding/converting a croutonLayoutBlocks block, or when a block overflows/breaks in a narrow pane.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

commit

무료

Smart, granular git commits following monorepo conventions. Analyzes changes, filters to session-relevant files, groups by intent, and uses conventional commit format. Use when committing code changes.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

The crouton-conformance gate — the SECOND acceptance axis of graduation (the first is the experience side-by-side, /graduate stage C1). Checks a graduated app is a REAL crouton app — CLI-scaffolded, real collections, consumes the correct packages without reinventing them — by composing the existing probes (frontend-review, a11y, e2e-smoke, typecheck) plus crouton-structural checks, then renders a required, signed-off checklist on the graduation PR. Use at /graduate stage C2, or when asked "is this app crouton-native", "run the conformance gate", "check graduation conformance".

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

FriendlyInternet/nuxt-crouton102026년 10월 18일 업데이트

FriendlyInternet의 스킬 모두 보기

이 스킬의 문제 신고