원클릭으로
debug
Debug methodology — triage, parallel investigation, and synthesis.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Debug methodology — triage, parallel investigation, and synthesis.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Visual-design discipline for forge frontends — brief the work before building (never invent an aesthetic without user input), declare the design system before coding, lean on the component library, use restrained color/type systems, never hand-draw complex SVGs, and verify visually before declaring done.
Write Next.js frontends — generated hooks, component library, Tailwind v4, visual verification, and Connect RPC clients.
Outbound boundary translators. One adapter per third-party system / queue / storage backend; narrow interface, vendor-neutral callers.
Write Connect RPC handlers — proto-driven codegen, the thin-translation handler pattern (validate, extract auth, convert proto↔internal, call service, wrap errors via `svcerr.Wrap`), middleware, and testing. Business logic lives in `internal/handlers/<svc>/contract.go`, never in handlers.
Forge project conventions and architecture — project structure, generated vs hand-written code, the generate pipeline, proto annotations, contracts, wiring, and naming.
Use-case orchestrators that compose two or more adapters/services. Deps are interfaces only — designed for unit tests with all-mock collaborators.
| name | debug |
| description | Debug methodology — triage, parallel investigation, and synthesis. |
| emit | both |
Classify the bug before diving in:
If your environment supports parallel agents, split the work into three independent tracks:
Working solo? Run the three passes sequentially: research → reproduce → isolate.
Combine findings from all tracks before proposing a fix:
On top of the generic triage above, common forge-shaped bug classes:
forge generate, then forge audit to surface drift, then retest. Forge generates from proto + forge.yaml; stale gen masquerades as a bug in hand-written code.K8sCluster context (multi-cluster is native); a "service unreachable" or auth failure is usually a stale or wrong kubectl context, an expired credential, or a service that isn't up — not a code path. Confirm the context is current and the target responds first.internal/app/compose.go NewComponents, off the owned internal/app/providers.go OpenInfra). Deps are interface-typed fields resolved by type off Infra, so a missing required provider is a compile error (NewComponents won't build) or a forge generate "no provider" report, not a silent nil — but a wrong fill (an unintended optional dep left nil) can still surface as a nil-pointer panic deep in handler code. There is no generated wire_gen.go/bootstrap.go to inspect; the wiring is NewComponents filling typed Deps off Infra.forge test integration) before chasing a unit-test ghost.forge audit flags the mismatch. If the symptom is "column X not found" in a handler that names the right struct field, audit first.forge introspect handlers # every RPC path the binary registers — localize the fault
forge api curl <svc.method> # build a copy-pasteable Connect curl from the shell
forge cluster logs --service X # kubectl-backed log tail for one service (single cluster)
forge debug start <svc> # build + attach Delve debugger
forge debug start --attach PID # attach Delve to a live process (don't `stop` it — see below)
forge debug break/continue/eval# breakpoints, resume, evaluate in the debug session
forge debug stop # ends the session AND kills the debugged process
forge test --service <name> -V # verbose isolated test runs
forge test e2e # full-stack reproduction
forge test --race # run tests with race detector
forge generate # regenerate code (use when stale gen is suspected)
Pick the tool for the job — and know where each stops short:
forge introspect handlers to localize. Prints every RPC path the assembled
binary serves. If the failing RPC isn't there, the fault is a downstream/remote
hop, not this binary — that one check collapses the search space.forge api curl <service.method> to exercise an endpoint. Builds and runs a
Connect request from the shell, but it stops at the auth interceptor — it
does not mint a token. Use it for shape/connectivity; supply your own credential
for an authed call.forge cluster logs --service <name> for the symptom. kubectl-backed, no
file-grepping — but it tails only the owner cluster (the one cluster name in
config). For a multi-cluster app, set the context and run
kubectl --context <other> -n <ns> logs <pod> for the other half.forge debug start <svc> (Delve) — two sharp edges. In a multi-binary repo
start <service> can mis-build (it falls back to ./cmd/...); pass an explicit
path/service so it builds the binary you mean. And forge debug stop after
--attach kills the live process — detach instead of stop when you've
attached to something you need to keep running.Smoke/doctor are NOT app-flow proofs. A green forge smoke / forge doctor
checks listeners, local compose, and telemetry — never app-flow invariants. They
(and forge cluster status, green whenever pods are Running) can all be green
while the actual flow is broken. The only things that prove an app-flow fix:
doctor:<flow>
task that fails non-zero when the invariant is violated), andforge test e2e.Generic forge tools localize and surface evidence; they do not certify the fix.
Use chrome-devtools MCP tools for frontend bugs (snapshots, console, network).
The three investigation tracks above each have a dedicated forge sub-skill with concrete patterns:
reproduce — runtime evidence collection and e2e reproduction.isolate — top-down bisection from e2e to unit test.investigate — hypothesis formation and code tracing.multi-cluster-e2e — a workload stuck Pending / not-ready, or a flow that fails only in a k3d multi-cluster e2e env: read the pod status before the network, hold the pod up on failure, and the nested-cluster image-pull / host-gateway-DNS / path-MTU gotchas.docker-compose runs a Grafana LGTM stack with traces, metrics, logs, and continuous profiling.
http_server_request_duration_seconds etc.The app auto-connects: OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 pushes traces and metrics. PPROF_ADDR=localhost:6060 exposes pprof for Pyroscope scraping.
For LLM-driven observability, enable the Grafana MCP server from .mcp.json.example — it lets agents query Prometheus, Loki, Tempo, and dashboards directly.