CLAUDE.md@plugins/golang · git:20260830.aa015d7 · 2026-08-30 · sha256 9d9c82295fb93025

CLAUDE.md@plugins/golang git:20260830.aa015d7A

Immutable. This exact content never changes and is served at /api/v1/blob/9d9c82295fb93025.

# golang Plugin

Go language discipline: conventions, idioms, error handling, concurrency, testing, toolchain practices, and LSP-powered
code intelligence via `gopls`.

## Skills

- **`golang`** — the language: idioms, errors, concurrency, generics, testing, project structure, toolchain,
  language-version gating, LSP-first navigation
- **`templ`** — templ (a-h/templ) type-safe HTML templating: syntax, components, attributes, escaping and sanitization,
  styling, JavaScript data passing, code generation, testing
- **`charm-tui`** — Charmbracelet v2 TUI stack (`charm.land/*/v2`): Bubble Tea, Bubbles, Lip Gloss, Huh, Glamour,
  fang/log, at-scale architecture, golden-file and teatest testing
- **`zog`** — Zog schema validation: schema shape, Parse against Validate, required and default semantics, tests and
  transforms, issue handling, the zhttp/zjson/zenv adapters

## LSP Integration

Ships a `gopls` LSP server config (`.lsp.json`); Claude Code binds it to `.go` files on install. The `golang` skill's
LSP-first navigation rules assume that config ships — the two change together.

## Skill Dependencies

- `golang` wins on any question of how Go code reads; `templ`, `zog`, and `charm-tui` each own one library stack and
  defer to it. All four Integration sections state that boundary — moving it means editing four files
- One boundary inverts: the `zog` key-naming rule outranks Go naming inside a `z.Shape`, because a shape key names a
  struct field rather than reading as Go code

## Plugin Scope

Go language specifics and Go-specific tooling (gopls, templ, Charm, Zog). Language-agnostic workflow belongs to
`the-coder`; platform concerns to `backend` and `cli`.

## Language Version References

- The floor-version index lives in the `Language Version` section of `skills/golang/SKILL.md` — it decides what the
  model may write, so it stays inline rather than in a reference the model can skip
- `skills/golang/references/versions/go1.NN.md` holds one version each: its additions, the behavior changes its `go`
  directive gates, and its traps
- Body rules and the topic references carry no version gates — the index is the only place a floor version appears
- When a Go version ships: add `references/versions/go1.NN.md` from
  `https://raw.githubusercontent.com/golang/website/master/_content/doc/go1.NN.md`, add one index line naming only the
  features the skill's own rules reference, extend the route-list version range, update
  `skills/golang/.dev/reference-inventory.json`, and drop any gate the new floor makes obsolete

## Conventions

- Library API claims are verified against the module source in the Go module cache, never against memory or upstream
  prose. A module missing from the cache is resolved through `proxy.golang.org` — absence from the cache is not evidence
  it does not exist
- Every skill in this plugin splits its references by load condition, and every pointer states the condition that loads
  it at the point of need. A catalog block listing the reference set is the anti-pattern
- A reference is one hop from SKILL.md — a reference never routes to another reference, nor back to SKILL.md
- `golang` splits its references by kind: `references/conventions/` for topic depth, `references/versions/` for
  per-release notes