From etcd-druid
Use when something is failing — test failures, reconciliation loops, backup errors, build failures in etcd-druid, etcd-backup-restore, or etcd-wrapper. Do not use for feature design or how-to questions.
How this skill is triggered — by the user, by Claude, or both
Slash command
/etcd-druid:debug**/*.goThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use this skill when you hit: test failures, unexpected reconciliation behavior, backup/restore failures, etcd startup issues, or build failures.
Use this skill when you hit: test failures, unexpected reconciliation behavior, backup/restore failures, etcd startup issues, or build failures.
NO FIX ATTEMPT WITHOUT A REPRODUCIBLE FAILURE FIRST.
| Rationalization | Why it fails |
|---|---|
| "I can see what's wrong from the error" | You have a hypothesis. Reproduce it — your hypothesis may be wrong |
| "I've seen this before" | You've seen something similar. Reproduce this specific instance |
| "It's obviously X" | "Obviously" precedes most debugging rabbit holes |
| "Reproducing it takes too long" | Fixing without reproduction takes longer |
Before modifying any code, apply the worktree gate (skills/worktree-gate/SKILL.md).
If already in a worktree (e.g., dispatched from implement): use it.
If standalone: the gate creates a worktree branched from upstream/master with a debug/<description> branch.
Once in the worktree, you can always compare against master:
git diff upstream/master...HEAD # what you changed
git show upstream/master:path/to/file # read the original version
Never apply speculative fixes directly to your main working branch or fork root.
Never scroll past error output.
Building the feedback loop IS the skill. See FEEDBACK-LOOP.md for 10 progressively creative ways to construct a pass/fail signal.
Can it be triggered with a single command?
# etcd-druid unit tests
make test-unit
go test ./internal/component/<name>/... -v -run TestFoo
# etcd-druid integration tests
make test-integration
# etcd-backup-restore
make test
go test ./pkg/... -v -run TestFoo
# etcd-wrapper
go test ./... -v -run TestFoo
If flaky: run 3× to confirm. Do not form a hypothesis until you can reproduce it.
Check docs/development/ in the relevant repo for documented patterns before
assuming something is a bug. If the code diverges from what the docs describe,
that is itself a finding.
internal/controller/etcd/reconciler.go — Reconcile() methodinternal/component/<name>/PreSync, Sync, TriggerDelete, GetExistingResourceNamesinternal/controller/register.gointernal/controller/etcdopstask/api/config/v1alpha1/features.goapi/core/v1alpha1/ — look for +kubebuilder:validation:XValidation markersapi/core/v1alpha1/zz_generated.deepcopy.gocd api && make generate — NEVER manually edit generated filestest/it/crdvalidation/etcd/, test/it/crdvalidation/etcdopstask/test/utils/docs/development/testing.mdtest/it/ (newer, Go native) and test/integration/ (older, Ginkgo)pkg/snapshot/snapshotter/snapshotter.go — full/delta loop, event watchpkg/snapshot/restorer/restorer.go — base restore + delta applypkg/compactor/compactor.go — embedded etcd restore + compact + snapshotpkg/server/httpAPI.go — endpoint handlers, leader forwardingpkg/member/member_control.go — scale-up, learner promotionpkg/snapstore/ — provider-specific implementations (S3, ABS, GCS, etc.)internal/bootstrap/bootstrap.go — BR init loop, config fetchinternal/app/app.go — Setup() → Start() flowinternal/brclient/brclient.go — HTTP calls to backup-restore sidecarinternal/app/readycheck.go — /readyz endpoint, etcd client pollingBefore touching any code, write it down:
"The test fails because X, which causes Y"
Test with the smallest possible change. One change, one re-run.
make test-unit # etcd-druid
make test # etcd-backup-restore
go test ./... # etcd-wrapper
Apply the verification gate (skills/verification/SKILL.md) before claiming the fix is confirmed.
Integration test check (controller/component fixes only):
If your fix is in internal/controller/ or internal/component/, check whether an integration
test in test/it/ covers the behavior you fixed. If yes, run it:
go test ./test/it/controller/<name>/... -v -run TestRelevantCase
If no integration test covers this behavior, either add one or note the gap in your report for follow-up. Skip this step for test-only or non-controller fixes.
If the fix reveals an undocumented pattern or gotcha, add it to docs/development/.
Stop. Do not attempt another fix.
For build failure triage, envtest tips, and Go gotchas, see COMMON-FAILURES.md. For Delve debugging and log analysis commands, see DEBUG-COMMANDS.md.
skills/verification/SKILL.md)/etcd-druid:tdd; return here (Phase 5) once the regression test is committed and green/etcd-druid:review/etcd-druid:api-changeGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub seshachalam-yv/etcd-druid-skills --plugin etcd-druid-skills