Skip to main content

bug-catcher

Audit a Go package in this repository for subtle correctness bugs, including both bugs inside the package and bugs in how the rest of the repository uses it. Optimized for Pebble- and CockroachDB-style code where invariants, iterator semantics, ownership, and API contracts matter more than style issues.

Datos de origen

Repositorio
cockroachdb/pebble
Última actividad en el origen
20 de abril de 2026 a las 17:10
Idioma detectado de SKILL.md
inglés
Estrellas
6057
Forks
594

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
bug-catcher
description
Audit a Go package in this repository for subtle correctness bugs, including both bugs inside the package and bugs in how the rest of the repository uses it. Optimized for Pebble- and CockroachDB-style code where invariants, iterator semantics, ownership, and API contracts matter more than style issues.
disable-model-invocation
true
You are running a multi-stage audit of a Go package. The user will provide exactly one argument: a repo-relative path to a Go package directory. Your goal is to produce a final report containing **confirmed bugs only**, ordered by severity, with no fix suggestions. This skill is optimized for large Go storage/database codebases like Pebble and CockroachDB. Favor semantic correctness, invariants, and contract violations over stylistic critique. ## Primary objective Find bugs that are likely to pass unnoticed by a human reviewer, especially: - typos that still compile but alter behavior - wrong field / constant / comparer / option / bound / level / sequence number chosen - subtle API misuse by callers - semantic mismatches between comments, names, and implementation - edge cases around iterator validity, bounds, exhaustion, and positioning - ownership / aliasing / lifetime mistakes - incorrect assumptions around zero values or sentinel values - ordering mistakes - concurrency / locking / callback / reentrancy mistakes - stale invariants after refactors - test coverage that appears convincing but fails to pin down the actual contract ## Non-goals - no style review - no formatting nits - no speculative “maybe” issues in the final report - no patch suggestions - no performance-only observations unless they imply a correctness bug ## Required workflow ### Stage 1: build package understanding Start the `package-understander` subagent on the target package path. Its output must be written to a durable artifact, not only held in conversational state. Write to: `$TMPDIR/bug-catcher/<sanitized-package-path>/understanding.md` The understanding must capture: - package purpose - exported API - key internal helpers and state transitions - invariants and hidden assumptions - important data representations - ownership / lifetime expectations - concurrency / synchronization expectations - important tests and what they appear to specify - key dependencies - major callers in the repo - what those callers appear to assume about this package - bug-prone surfaces ### Stage 2: generate candidate bugs Start the `candidate-generator` subagent on the target package. Pass it: - package path - understanding artifact path (`$TMPDIR/bug-catcher/<sanitized-package-path>/understanding.md`) - output path: `$TMPDIR/bug-catcher/<sanitized-package-path>/candidates.md` ### Stage 3: confirm each candidate independently For each candidate, start a fresh `bug-confirmer` subagent. Pass it: - package path - understanding artifact - candidate description - relevant files / symbols Each confirmer must independently determine whether the issue is real, trying first to disprove it. A candidate should only be confirmed if the evidence supports a specific semantic failure mode, not merely surprising or ambiguous code. When in doubt, mark it not-confirmed. Each confirmation must return: - verdict: confirmed / not-confirmed - severity: critical / high / medium / low - confidence: high / medium / low - concise justification - exact code references Write one confirmation per file: `$TMPDIR/bug-catcher/<sanitized-package-path>/confirmations/<NNN>.md` ### Stage 4: final report Produce a final report containing **only confirmed bugs**, sorted by severity, then confidence. When ordering confirmed bugs, rank by: 1. semantic correctness impact, especially corruption or persistent wrong behavior 2. breadth of affected call paths 3. likelihood in realistic usage 4. confidence For each confirmed bug include: - severity - short title - category - package path - affected files / symbols - concise explanation - why it could slip past review - evidence Do not include fix suggestions. Do not include rejected candidates. Do not dilute the report with general observations. ## Pebble / CRDB-specific hunting guidance When auditing these kinds of codebases, pay extra attention to: - iterator positioning, validity, lower/upper bounds, and exhaustion semantics - ownership of byte slices, keys, values, buffers, and backing storage - sequence-number visibility rules - tombstone / range-key / masking / shadowing semantics - comparer / split / separator / successor assumptions - format-major-version or feature-gating assumptions - state machines with implicit ordering requirements - zero-value structs that are valid in some contexts but not others - interaction between options structs and defaults - cross-level or cross-batch assumptions - internal iterators vs external iterator contract mismatches - correctness assumptions encoded only in tests or comments - call sites that accidentally rely on stronger guarantees than the package actually provides ## How to inspect caller misuse Search for and inspect: - imports of the package - constructors - exported funcs and methods - interface implementations and adapters - tests that use the package - wrappers that narrow or reinterpret semantics For each important API surface, ask: - what contract does the package actually provide? - what contract do callers appear to assume? - where do those differ? ## Quality bar The final output should read like a triaged bug docket for a senior Pebble/CRDB engineer: - low noise - evidence-backed - focused on semantic defects - conservative about confirmation - ordered by severity
Ver en GitHub