coding-guidance-go — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited coding-guidance-go (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A bulleted imperative like {match} tells the agent to never reveal, disclose, or mention something to the user. Used adversarially it can instruct the agent to hide its tool calls or lie about what it did — stripping the transparency a user relies on to trust the agent.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Portable Go implementation, refactoring, testing, optimization, and review guidance.
Compose with:
thinking for planning, recursive-thinking forstress-testing, security for threat modeling
backend-guidance for server-side code,backend-systems-guidance for deeper backend architecture/reliability/trust boundaries, project-core-dev for repo validation, and project-config-and-tests for config contracts and deterministic tests
go-testing-with-testify when the main artifact is testify-basedGo test code, test review, or Go test flake triage
tester-mindset
go-testing-with-testify
security and compose this skill only forGo-specific implementation details
policy, linter config, or domain overlays
Load references only when the task needs that depth:
for context, goroutine ownership, shared state, pipelines, backpressure, logging, REST/gRPC/CLI/worker boundaries, and transport error mapping
standard Go tests, comparison choices, helpers, fuzzing, benchmarks, race checks, integration-test gating, and validation command selection
for package/module layout, go.mod/go.sum, go.work, vendoring, generated code, release metadata, dependency pressure, profiling, and hot-path allocation guidance
Use the narrowest mode that fits the task:
rule sections and validation commands.
concrete findings.
unless the task explicitly changes them.
ownership, goroutine lifecycle, shared state, backpressure, race validation, and shutdown.
transport, and handler mechanics; add backend-guidance or backend-systems-guidance for architecture, repositories, transactions, queues, or cross-service design.
pprof, trace, or allocation evidence before performance-driven rewrites.
go.mod, go.sum, build tags,generated or vendored boundaries, and nearby docs before editing.
service boundary style such as REST, gRPC, CLI, or worker, and existing assertion, logging, DI, config, or framework conventions.
partially specified. Ask only when multiple plausible Go designs would change semantics.
context ownership, resource lifetime, and concurrency behavior explicit.
idiomatic error handling, useful zero values, externalized configuration, and goroutine ownership that can be tested.
tags, CLI flags, and exported identifiers stable unless the task explicitly changes that contract.
only when cases share the same setup and assertion path.
gofmt, goimports, go test, go vet, race,lint, module, benchmark, profile, and security commands the repo supports.
Use this instead of the default implementation workflow when the task is primarily cleanup or restructuring:
values, context flow, goroutine ownership, shared state, and import graph.
after each slice.
error handling, and unclear interface seams one step at a time.
incidental cleanup.
clearer without making abstractions larger than the code they protect.
When reviewing, skip the implementation workflow and use this instead:
module changes, build tags, and obvious compile/test breakage.
Critical > Important >Suggestion.
resource leaks, error wrapping or sentinel mismatches, nil pointer or nil map hazards, interface overreach, package-cycle pressure, security risks, performance mistakes with real impact, and missing tests.
gofmt, goimports, or the repo'slinter will settle unless they hide a real readability or behavior issue.
gofmt; run goimports when imports changed or the repo uses it._ unless thecall cannot fail meaningfully or a comment explains why it is safe to ignore.
error interface from exported functions, not concrete errorpointer types that can become non-nil interfaces.
machine-checkable causes with %w when callers should use errors.Is or errors.As; avoid leaking internals across process, API, or trust boundaries.
context.Context as the first parameter through request-scopedblocking work. Do not store contexts in structs or use them for optional parameters.
context.WithCancel,WithTimeout, or WithDeadline when the current scope owns them.
every path. Check close errors when the close operation can affect persisted data.
propagation path, and testable shutdown behavior.
values containing sync.Mutex, sync.WaitGroup, bytes.Buffer, or similar pointer-owned state after first use.
whether nil and empty are equivalent before exposing them, especially for JSON.
append; the backing array may change.callee's invariants or returned state should be immutable to callers.
crypto/rand for keys, tokens, and security-sensitive randomness. Neveruse math/rand for secrets.
packages. Parse env, flags, and config files at process boundaries, validate once, and pass typed configuration inward.
panic, log.Fatal, and os.Exit out of libraries and non-main code.Return errors for ordinary failures; panic only for programmer errors, impossible states, or startup failures where recovery is not expected.
consistency, in that order.
else after return, break, continue, or goto.
if or switch initialization to reduce scope, but avoid :=shadowing that leaves the outer variable unchanged.
var for intentional zero values and package-level declarations. Use:= for local values with obvious types.
URL, ID, HTTP), andshort receiver names that stay consistent across a type's methods.
widget.New() towidget.NewWidget() and p.Name() to p.ProjectName().
variables with comments that start with the exported name and read as complete sentences.
tags, CLI flags, file formats, metrics, and log field names as compatibility boundaries.
abstraction used by many consumers.
often a hidden concrete type.
interface is appropriate when the concrete implementation is intentionally hidden behind a stable standard or package-owned abstraction.
identical logic and interfaces do not model the behavior cleanly.
comparable or cmp.Ordered when available; do not over-constrain unions.
stuttering to make sense, split responsibilities or rename the package.
it may be a mock seam rather than a design seam.
code first unless the generic API is already part of the public contract.
prefer a config struct or explicit parameters; if they are public, extensible, and mostly defaulted, prefer functional options.
stable with sentinels, typed errors, or predicates before adding more string checks.
or queues, pass context unless the repo has a narrower convention.
for it, and who observes its error, do not start it yet.
accumulating business rules, split transport decoding from domain behavior before adding more branches.
assertions, split it; table tests should reduce duplication, not hide logic.
bottleneck, the benchmark/profile used, and the before/after signal, treat it as speculative cleanup rather than optimization.
supply-chain risk, or transitive surface, justify it against standard library or repo-local alternatives.
problem. When narrowness conflicts with correctness, resource safety, or race safety, prefer correctness.
adjacent issue while you are in the file.
A change is done when:
gofmt or the repo's formatter has run on touched Go filesgoimports or the repo's import formatter has run when imports changedconcrete reason
go vet, staticcheck, golangci-lint, or the repo's static analysis pathreports no new findings when available
go test -race is run for touched packages when concurrency, shared state,or goroutine lifetime changed
pprof, traces, or allocation profiles back performance-drivenchanges
the repo's established commands
gosec, whenavailable
Critical and Important severity are addressedReview this Go worker for context cancellation, goroutine leaks, and race risksRefactor this Go service package without breaking exported API or error contractsAdd a Go HTTP handler and keep business logic testable outside the transportAdd a gRPC method and preserve context deadlines, error mapping, and service-layer testsWrite standard Go tests for this parser, including error semantics and fuzz seedsDesign a constructor for this Go client without adding global mutable stateOptimize this Go hot path using benchmarks and pprof evidence, not speculation~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.