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.

Quellinformationen

Repository
cockroachdb/pebble
Letzte Quellaktivität
20. April 2026 um 17:10
Erkannte Sprache von SKILL.md
Englisch
Sterne
6.069
Forks
601

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
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
Auf GitHub ansehen