agh-code-guidelines

$npx mdskill add compozy/agh/agh-code-guidelines

Enforces AGH production Go discipline for cmd and internal files.

  • Ensures production Go files follow AGH coding and concurrency rules.
  • Depends on golang-pro and companion narrow skills for tests or cleanup.
  • Routes changes by reading canonical references for style and concurrency.
  • Delivers validated edits that comply with all loaded canonical rules.

SKILL.md

.github/skills/agh-code-guidelinesView on GitHub ↗
---
name: agh-code-guidelines
description: >-
  Go production discipline for AGH. Use when writing or editing non-test Go
  files under cmd or internal, including config, logging, CLI, concurrency, and
  process-lifecycle paths. Do not use for Go tests; pair it with the narrower
  schema, contract, cleanup, or network skill when those domains apply.
trigger: implicit
---

# AGH Code Guidelines

Apply the canonical AGH rules before changing production Go. This file owns the
application order; its references own the rules.

## Procedures

**Step 1: Route the Change**

1. Confirm the target is a production Go file (`cmd/**` or `internal/**`, not `*_test.go`).
2. Activate `golang-pro`. Also activate the matching narrow skill for tests, cleanup paths, schema migrations, API contracts, or `internal/network` work.
3. Read `.agents/skills/agh/agh-code-guidelines/references/coding-style.md` in full. Also read `.agents/skills/agh/agh-code-guidelines/references/concurrency-patterns.md` in full when the change touches goroutines, shared state, detached lifetime, subprocesses, shutdown, timers, mutexes, or channels.

*Done when:* the edit surface and every matching companion domain are named, and every applicable canonical reference is loaded.

**Step 2: Apply the Canonical Rules**

1. Apply every matching rule from the loaded references; do not copy a subset into task notes or local conventions.
2. Trace the change through error identity, cleanup, context, logging, types, configuration lifecycle, CLI boundaries, comments, package boundaries, goroutine ownership, detached execution, and subprocess supervision.
3. Repair violations in the touched behavior. Record unrelated pre-existing violations without expanding the change silently.

*Done when:* every reference heading that intersects the change has been checked and no touched path violates a matching rule.

**Step 3: Audit Ownership**

1. Enumerate each changed error, resource, goroutine, process, and mutable shared state owner.
2. If setup or teardown has more than one fallible step, complete `agh-cleanup-failure-paths` before continuing.
3. Verify that public behavior remains manageable through the required CLI, HTTP, UDS, native-tool, extension, config, docs, and official-skill surfaces.

*Done when:* every changed lifetime has one explicit owner and every public contract has a complete AGH Impact Audit.

**Step 4: Verify Once**

1. Run `make lint` and scoped `go test -race ./<owning-package>/...` for the changed package.
2. Run cross-build or Linux-race parity checks only when the concurrency reference routes the change there.
3. Reserve the single full `make verify` for the task completion gate after source freeze.

*Done when:* scoped lanes are green and exactly one fresh full gate is scheduled or complete for the finished task.

## Error Handling

- **Existing file already violates the rules:** fix what the current behavior touches; record unrelated debt without silently expanding scope.
- **`errors.Is` / `errors.As` is impossible because the dependency returns a string:** wrap once at the boundary in a typed error of yours; downstream code matches on your typed error.
- **Reflection genuinely required (codegen, decoder):** keep a written justification adjacent to the reflection call. Lint exception requires a `//nolint:` directive with a reason.
- **`panic` shows up in seemingly-production code:** confirm whether the path is reachable post-`main`. If it is, replace with explicit error return; if it is genuinely unreachable, mark with `// unreachable: ...` and prefer `panic("invariant: ...")` over `log.Fatal`.
- **CLI command silently ignores a flag:** verify with `cmd.Flags().Changed(name)`; if the flag is meaningfully optional, document the resolution chain and emit an explicit `slog` debug line when the default is taken.

More from compozy/agh

SkillDescription
agent-exploration>-
aghAGH runtime and contribution guide. Use for sessions, agents, native tools, skills, memory, network, tasks, capabilities, bundles, QA, docs, and repo work. Do not use for unrelated projects.
agh-cleanup-failure-paths>-
agh-contract-codegen-coshipContract co-ship for AGH wire changes. Use when editing public DTOs, OpenAPI, JSON-RPC extension shapes, generated clients, or handler request/response semantics. Do not use for internal Go refactors or test-only changes that leave the wire contract unchanged.
agh-data-boundariesData-boundary audit for AGH route loaders, TanStack Query caches, paginated catalogs, filters, ordering, totals, live streams, workspace-scoped reads, and their backend APIs. Use when adding, changing, or debugging those paths. Don't use for presentational-only UI or backend work with no public read-model impact.
agh-designAGH visual-design authority for production UI, static artifacts, prototypes, and reviews. Use when creating or reviewing an AGH surface or changing tokens, typography, spacing, depth, icons, or motion. Do not use for capture-only verification; use agh-ui-screenshot.
agh-qa-bootstrapBootstraps isolated AGH QA labs and emits the canonical manifest for downstream QA. Use when local QA needs daemon, workspace, provider, or playbook setup. Do not use for unit tests, planning-only work, or browser-only checks.
agh-schema-migrationAuthors append-only Goose SQL migrations for AGH SQLite streams and keeps declarative schema sources, atlas.sum, Atlas checks, sqlc output, and migration tests synchronized. Use for SQLite table, column, index, constraint, trigger, or seed-data changes under internal/store or internal/memory. Do not use for in-memory structures, derived Markdown memory, or non-SQLite caches.
agh-test-conventions>-
agh-ui-screenshotScreenshot capture for deterministic PNG evidence and visual-contract bundles for AGH Storybook stories and local UI URLs. Use for visual audits, regression diffs, and design-parity checks. Do not use for interactive E2E flows, remote authenticated sites, or Storybook test execution.