From beagle-go
Enforces pre-report verification checklists for code review findings like unused code, missing validation, type assertions, and leaks to reduce false positives.
npx claudepluginhub existential-birds/beagle --plugin beagle-goThis skill uses the workspace's default tool permissions.
This protocol MUST be followed before reporting any code review finding. Skipping these steps leads to false positives that waste developer time and erode trust in reviews.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
This protocol MUST be followed before reporting any code review finding. Skipping these steps leads to false positives that waste developer time and erode trust in reviews.
Before flagging ANY issue, verify:
Before flagging, you MUST:
Common false positives:
Before flagging, you MUST:
Common false positives:
Before flagging, you MUST:
Valid patterns often flagged incorrectly:
// Type assertion with ok check, NOT unsafe cast
data, ok := value.(UserData)
if !ok {
return fmt.Errorf("unexpected type: %T", value)
}
// Type switch is safe narrowing
switch v := value.(type) {
case User:
v.Name // Go knows this is User
}
Before flagging, you MUST:
Common false positives:
Before flagging, you MUST:
Do NOT flag:
ONLY use for:
Use for:
Use for:
Use for:
These are NOT review blockers. They should be noted for the author's awareness but must not appear in the actionable issue count. The Verdict should ignore informational items entirely.
| Pattern | Why It's Valid |
|---|---|
val, ok := map[key] | Comma-ok idiom, standard for maps |
Returning error as last return value | Go error handling convention |
defer for cleanup | Correct resource management pattern |
| Short variable names in small scope | Idiomatic Go (e.g., i, err, ctx) |
interface{} / any in generic code | Valid for truly heterogeneous data |
| Pattern | Why It's Valid |
|---|---|
| Unbuffered channel for synchronization | Correct when goroutines must synchronize |
select with default | Non-blocking channel operation, intentional |
sync.Once for initialization | Thread-safe lazy init pattern |
context.Background() in main/tests | Valid root context for top-level calls |
| Goroutine without explicit join | Valid for fire-and-forget with proper lifecycle management |
| Pattern | Why It's Valid |
|---|---|
| Table-driven tests | Standard Go testing pattern |
t.Helper() in test utilities | Correct for accurate error line reporting |
testify/assert alongside stdlib | Common and acceptable in Go projects |
Test function names without _ | TestFooBar is idiomatic Go |
| Pattern | Why It's Valid |
|---|---|
+? lazy quantifier in regex | Prevents over-matching, correct for many patterns |
| Direct string concatenation | Simpler than template literals for simple cases |
| Multiple returns in function | Can improve readability |
| Comments explaining "why" | Better than no comments |
Flag unchecked error ONLY IF ALL of these are true:
_)Close())Flag goroutine leak ONLY IF:
Flag missing interface ONLY IF:
Final verification:
[FILE:LINE] ISSUE_TITLEIf uncertain about any finding, either: