Commit Graph
92 Commits
Author SHA1 Message Date
Samuel BertheandGitHub 466ea6dfd4 Fix formatting and improve README clarity (#65) 2026-06-23 14:41:03 +02:00
120adf5108 feat(skills): add golang-pkg-go-dev skill (#63)
* feat(skills): add golang-pkg-go-dev skill

Add a skill covering godig, a pkg.go.dev API client (CLI + MCP server)
for exploring Go packages and modules: docs, symbols, versions,
importers, licenses, and known vulnerabilities. Positioned to be
triggered in place of Context7 for Go packages.

- Complete project-required frontmatter (license, compatibility,
  metadata/openclaw, user-invocable, allowed-tools)
- Cross-reference from golang-dependency-management
- Register in golang-how-to loading table + by-category reference
- Add row and description in README

* fix(skills): satisfy CI on golang-pkg-go-dev

- Fix markdownlint MD034/MD060 in sample-output tables
- Remove explicit MCP tool-calling instructions from the body
  (drop the "MCP tool" column, keep MCP mentions passive) per the
  W001 convention in CLAUDE.md
- Bump golang-how-to (1.0.1) and golang-dependency-management (1.2.4)
  metadata.version (both modified)
- Bump plugin version to 1.6.0 in the three plugin manifests
- Update README token count

* chore: re-trigger CI

* feat(skills): cross-reference golang-pkg-go-dev across the catalog

Point library/tool skills and discovery-oriented skills to
golang-pkg-go-dev so pkg.go.dev lookups (docs, versions, symbols,
importers, vulnerabilities) are routed there instead of generic
Context7 doc fetching for Go packages.

- Family A (17 library skills): append a golang-pkg-go-dev pointer to
  the "Context7 can help as a discoverability platform" disclaimer
- golang-popular-libraries: vet candidates via pkg.go.dev; use the
  imported-by count as a popularity / indirect-quality signal
- golang-security: look up a module's known CVEs without a full scan
- golang-stay-updated: query versions/docs/vulns from the CLI
- golang-documentation: inspect how a published package renders
- Bump metadata.version on all 21 modified skills
- Refresh README token counts (incl. stale how-to / dependency-management rows)

* feat(skills): sync golang-pkg-go-dev with godig v0.1.0

Reviewed the godig CLI/MCP surface (v0.1.0) and updated the skill:

- New commands: dependencies, major-versions, symbol doc, symbol
  examples, package imports, version
- Fix: `package info --imports` is now the `package imports` subcommand
- Document global flags (--base-url, --timeout, --log-level) + GODIG_* env
- Make --version / --module first-class per-command flags
- Add a Filter syntax section (operators, string functions, fields)
- Move sample output to references/sample-output.md and refresh formats
  (overview, package info, versions, module info gained fields)
- Add skill-library-version 0.1.0; bump skill to 1.1.0
- Refresh README token counts

* chore(skills): keep golang-pkg-go-dev at initial version 1.0.0

* feat(skills): parallel lookups + package-lookup cluster boundary

- golang-pkg-go-dev: instruct parallel godig lookups (batched calls or
  sub-agent fan-out) when querying docs/examples/versions for multiple
  symbols, packages, or modules
- golang-how-to: add the "Package lookup / discovery" competing cluster
  (pkg-go-dev vs popular-libraries vs dependency-management vs security)
  to SKILL.md and disambiguation.md

* docs(skills): sync golang-pkg-go-dev with godig v0.1.1

Reflect v0.1.0 -> v0.1.1 changes:
- document exit codes (0 success, 1 runtime error, 2 usage error)
- replace flat filter field list with per-command filterable fields table
- drop undocumented matches() regex; fix example to hasPrefix()

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Revert "Potential fix for pull request finding"

This reverts commit f5e1a19544.

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-23 13:16:35 +02:00
Samuel Berthe a5e0e5997a 💄 2026-06-09 15:53:55 +02:00
Samuel Berthe 2e24bfb327 fix(skills): fix dependency install commands and bump versions
- grpc: add protoc-gen-go and protoc-gen-go-grpc go install commands
- lint: replace brew with go install for golangci-lint
- continuous-integration: replace brew with go install for goreleaser
- CLAUDE.md: prefer go install over brew install in Dependencies blocks
- Bump skill versions: benchmark→1.2.4, ci→1.3.1, dep-mgmt→1.2.3,
  google-wire→1.0.3, grpc→1.1.4, lint→1.2.2, performance→1.2.2,
  security→1.1.7, swagger→1.0.1, testing→1.2.2, troubleshooting→1.2.2
- Bump plugin version: 1.5.0→1.5.1
v1.5.1
2026-06-06 15:00:22 +02:00
Samuel BertheandGitHub b75e843bf0 feat(skills): add Dependencies section to skills with external tool requirements (#61)
Add a **Dependencies:** block at the top of each skill body (after directives,
before the first heading) listing install commands for required binaries.
Update CLAUDE.md to document the new top-of-body directive.

Skills updated: golang-benchmark, golang-continuous-integration,
golang-dependency-management, golang-google-wire, golang-grpc, golang-lint,
golang-performance, golang-security, golang-swagger, golang-testing,
golang-troubleshooting.
2026-06-06 14:08:49 +02:00
Samuel BertheandGitHub 168ec1416e fix(docs): correct relative asset link and skill count (#60)
- Fix broken relative path in golang-performance/references/observability.md: assets/ → ../assets/
- Fix skill count mismatch in golang-how-to/references/project-config.md: 13 → 11, ~1,400 → ~1,100 tokens
2026-06-04 16:50:32 +02:00
Samuel BertheandGitHub 123defac7b Update README.md (#58) 2026-05-29 08:16:09 +02:00
Samuel Berthe fd500573b0 💄 2026-05-28 16:13:38 +02:00
Samuel BertheandGitHub 33fbf8261b feat(golang-how-to): add skill navigator for routing and disambiguation (#56)
* feat(golang-how-to): add skill navigator for routing and disambiguation

New meta-skill that classifies, routes, and disambiguates all 42 Go skills.

Three modes:
- Route: decision tree mapping task intent → best skill
- Disambiguate: boundary tables for 11 competing clusters (performance,
  DI, samber/*, error handling, style/naming/lint/docs, CLI, testing,
  and 4 undocumented gap clusters)
- Configure: appends a Required Go skills block to CLAUDE.md/AGENTS.md
  so specific skills always load regardless of trigger heuristics

Files:
- SKILL.md (2,519 tok) — decision tree + 11 cluster boundary tables
- references/by-category.md — exhaustive catalog of all 42 skills
- references/disambiguation.md — deep boundary analysis with routing examples
- references/project-config.md — configure-mode workflow with idempotency

Tokens: description 156 / SKILL.md 2,519 / directory 10,583

* feat(golang-how-to): orchestrate multiple skills + broaden trigger

- Description: always-active on any Go task (was: only "which skill" queries)
- Persona: orchestrator mindset instead of single-best-skill routing
- Decision tree → multi-skill loading table: primary + "also load" column
  (e.g. grpc → testing + error-handling; audit → security + lint + safety)
- Cluster boundary tables → compact bullet list (saves ~400 tok, details
  remain in references/disambiguation.md)
- Tokens: description 165 / SKILL.md 2,191 / directory 10,255

* fix(golang-how-to): add golang-lint to project structure setup

* fix(golang-how-to): add golang-performance to samber/lo row

* fix(golang-how-to): rename slog row to log/slog

* fix(golang-how-to): add golang-error-handling to log/slog row

* fix(golang-how-to): add golang-uber-dig to dependency injection row

* feat(golang-project-layout): replace config ref with project analysis workflow

Replaces Cobra+Viper config snippet with a full project onboarding workflow:
- Step 1: scan go.mod deps → skill mapping table (cobra, grpc, testify, samber/*, DBs, OTel...)
- Step 2: scan directory structure → infer project type/architecture
- Step 3: grep top-level imports → detect concurrency, security, slog usage
- Step 4: infer project stage (early/growing/production/library/monorepo)
- Step 5: always-on baseline (code-style, naming, error-handling, safety, testing)
- Step 6: confirm with user via AskUserQuestion
- Step 7: write Required Go skills block to CLAUDE.md via golang-how-to configure-mode

* docs(CLAUDE.md): require golang-how-to update on skill scope/add/remove

* revert(golang-project-layout): restore original config.md content

* fix(golang-how-to): remove golang-temporal mention
2026-05-28 16:13:16 +02:00
samber (headless)andGitHub 8c7e016b3d fix: resolve snyk-agent-scan alerts (W011, W012, W021) (#54)
* fix: remove hidden Unicode variation selectors (U+FE0F) from emoji fields

Remove invisible U+FE0F (Variation Selector-16) characters from the
emoji fields in SKILL.md for all 9 affected skills to resolve W021
snyk-agent-scan alerts.

Affected skills:
- golang-samber-ro
- golang-uber-dig
- golang-naming
- golang-error-handling
- golang-safety
- golang-performance
- golang-database
- golang-design-patterns
- golang-data-structures

No visible content or meaning changed - only invisible Unicode removed.

* fix: resolve W011 snyk-agent-scan alerts in 4 skills

Rewrite imperative sentences as passive hints per W011 compliance:

- golang-samber-ro: 'Check pkg.go.dev' → 'API details are available at'
- golang-observability: 'Use/Browse/Copy/Check awesome-prometheus-alerts'
  → passive availability hints; convert imperative install steps to
  descriptive statements; fix bridge handler imperative
- golang-dependency-management: 'Check maintenance status', 'Review
  release notes', 'Use go-mod-outdated/goweight' → passive descriptions;
  fix automated-updates imperative checklist
- golang-troubleshooting: 'Use Grep/Agent', 'Check dashboards/APM
  traces/Sentry' → passive tool descriptions; 'Always' in code comments
  → 'MUST' declarative statements

* fix: resolve W011+W012 snyk-agent-scan alerts in golang-continuous-integration

- Rewrite imperative external fetch instructions as passive hints
- Move npx skills install to frontmatter metadata.openclaw.install
- Pin npx skills version to 0.6.0 in claude-code-review.yml
- Rewrite copilot-review-instructions.md as passive hints
- Rewrite repo-security.md imperative patterns as passive statements

* fix: remove version pin from npx skills (keep unversioned)

* fix: restore original golang-lint skill reference wording

* fix: restore full skill names in Related Skills section

* fix: restore GitHub Copilot install code block
2026-05-23 20:07:34 +02:00
samber (headless)andGitHub 114c263995 fix: resolve lint errors (prettier + markdownlint) (#53)
* docs: add skills description section to README

* docs: move skills description after evaluations section

* docs: group skills by category (H3) with skill names as H4

* fix: resolve lint errors (prettier + markdownlint)

- .markdownlint-cli2.jsonc: disable MD060 (table column style)
  to avoid conflict with prettier on empty table cells.
  Consistent with cc-skills config.
- README.md, golang-graphql/references/graphql-go.md,
  golang-safety/SKILL.md: prettier formatting fixes

* fix: remove README changes from this PR

* fix: resolve lint errors (prettier + markdownlint)

- golang-graphql/references/graphql-go.md: use compact table
  style with prettier-ignore to satisfy MD060
- golang-safety/SKILL.md: prettier formatting fix
- Revert unintended README.md changes
2026-05-22 21:42:21 +02:00
samber (headless)andGitHub 60706d58a1 docs: add skills description section to README (#52)
* docs: add skills description section to README

* docs: move skills description after evaluations section

* docs: group skills by category (H3) with skill names as H4
2026-05-22 19:46:45 +02:00
Samuel BertheandGitHub fa03b41b93 Update security-scan.yml 2026-05-20 21:15:03 +02:00
Samuel BertheandGitHub 11716625e3 feat(golang-documentation): add writing principles and doc anti-patterns (#50)
- Add Writing Principles section: concision, intent over paraphrase,
  no invented context, preserve meaning when editing
- Add anti-patterns table to code-comments.md (pure paraphrase,
  signature restatement, marketing vocab, invented rationale,
  groundless future claims, hollow filler)
- Clarify godoc name-prefix requirement vs. pure-paraphrase anti-pattern
- Enrich changelog guidance: each entry answers "what changed for the reader"
- Bump version 1.1.3 → 1.1.4
2026-05-20 21:13:31 +02:00
536439a784 fix(ci): add --dangerously-run-mcp-servers to snyk-agent-scan and bump setup-uv@v8 (#49)
Co-authored-by: headless-samber <150833725+headless-samber@users.noreply.github.com>
2026-05-20 20:00:10 +02:00
4ac98d09a4 fix(ci): resolve lint errors and disable broken workflows (#48)
* fix(ci): resolve lint errors and disable broken workflows

- .markdownlint-cli2.jsonc: disable MD060 (table column style)
- golang-graphql/SKILL.md: wrap bare URLs in angle brackets (MD034)
- golang-security/SKILL.md: escape pipe in table cell content (MD056)
- validate.yml: convert from commented-out to valid no-op workflow
- publish-clawhub.yml: convert from commented-out to valid no-op workflow

* revert: restore commented-out validate.yml and publish-clawhub.yml

* fix(lint): fix table spacing in graphql-go.md for MD060

---------

Co-authored-by: headless-samber <150833725+headless-samber@users.noreply.github.com>
2026-05-20 19:40:08 +02:00
Samuel BertheandGitHub 26e1d996a7 fix(skills): correctness fixes from REVIEW.md audit (28 files) (#47)
* fix(skills): correctness fixes from REVIEW.md audit

Compile errors:
- golang-samber-do: do.Eager→ProvideValue, do.Scope(root,x)→root.Scope(x), do.ListProvidedServices→injector.ListProvidedServices, do.Clone→injector.Clone
- golang-samber-oops: fix void handler returning error value, replace undefined var r with data in Recover example
- golang-samber-mo: assign fetchUser result before calling Match
- golang-observability: fix Exemplar API (use ExemplarObserver type assertion + ObserveWithExemplar)
- golang-data-structures: RemoveFront/RemoveBack→l.Remove(l.Front())/l.Remove(l.Back())
- golang-database: stats.LatencyCount→stats.WaitDuration.Seconds()

Security / reliability:
- golang-security: scrypt.Key error now handled; remove len() guard from checkToken (ConstantTimeCompare handles it); MaxInt64→MaxInt in safeMultiply; io.EOF→sentinel error in limitedReader; fix malformed 4-sep table header
- golang-concurrency: fix goroutine leak in fanOut (select on <-in and <-ctx.Done together)

Quality:
- golang-dependency-management: fix gsa module path (nicholasgasior→Zxilly/go-size-analyzer)
- golang-samber-slog: Pool() description corrected (load-balance to ONE handler, not broadcast)
- golang-benchmark: b.Elapsed() annotated as b.Loop()-only; b.Loop() contradiction resolved; -seconds=30 moved to URL query param; inline cost budget updated
- golang-performance: simd/archsimd marked as speculative experimental API; cgroup v1 caveat added
- golang-modernize: new(30) clarified (initializes to value, not zero)
- golang-google-wire: type PrimaryDB *sql.DB→struct wrapper (pointer aliases not distinguished by Wire)
- golang-safety: nil slice table column renamed from "Read from nil" to "Index into nil"
- golang-dependency-injection: Wire comment corrected (has cleanup func(), no lifecycle hooks); do.Override→do.OverrideValue
- golang-lint: 33→48 linters; gosec added to NEVER suppress; linter-reference updated with 14 missing linters + Logging category
- golang-spf13-viper: fix reason for "never bind in RunE" (PersistentPreRunE ran first)

* bump patch versions for skills changed in recent PRs
v1.5.0
2026-05-19 22:48:45 +02:00
Samuel Berthe 27543eeb0b fix(benchmark): correct prometheus metric names and BenchmarkAlloc sink
- prometheus-go-metrics.md: fix ~15 wrong/nonexistent metric names
  verified against a real prometheus.NewRegistry(); remove invented
  go_runtime_mheap_* section; move go_gc_gogc_percent and
  go_gc_gomemlimit_bytes to Default; fix CPU classes (_cpu_ infix +
  _total suffix); fix scheduler suffixes; add missing default and
  opt-in metrics
- SKILL.md: BenchmarkAlloc — use sink variable instead of _ = make(...)
  to prevent compiler from eliminating the allocation (reported 0 B/op)
- tools.md: remove non-performance GODEBUG flags (madvdontneed,
  gccheckmark, GOTRACEBACK) in favor of troubleshooting cross-ref

golang-benchmark v1.2.1 → v1.2.2
2026-05-19 11:33:30 +02:00
Samuel Berthe e3d59da7dd bump patch versions for skills changed in recent PRs 2026-05-19 07:58:48 +02:00
Szymon RączkaandGitHub 9b782804d0 use module-pinned tool commands (#38) 2026-05-19 07:50:48 +02:00
Szymon RączkaandGitHub 28848998e8 update testing and benchmark guidance (#40) 2026-05-19 07:47:53 +02:00
Szymon RączkaandGitHub eebcf613ee tighten filesystem and crypto guidance (#39) 2026-05-19 07:41:38 +02:00
Szymon RączkaandGitHub 1d4b107f21 add Go 1.26 modernization notes (#41) 2026-05-19 07:35:55 +02:00
Szymon RączkaandGitHub 7634dd9d2a fix troubleshooting guidance accuracy (#42) 2026-05-19 07:32:38 +02:00
Szymon RączkaandGitHub 3804525d43 tighten lifecycle and error guidance (#45) 2026-05-19 07:28:59 +02:00
b04d7737a6 Fix lint and GraphQL guidance (#43)
* fix lint and graphql guidance

* Update lint.yml

---------

Co-authored-by: Samuel Berthe <dev@samuel-berthe.fr>
2026-05-19 07:28:28 +02:00
bbb56ac5ad Fix stdlib API version guidance (#44)
* fix stdlib API version guidance

* Update cpu.md

---------

Co-authored-by: Samuel Berthe <dev@samuel-berthe.fr>
2026-05-19 07:17:55 +02:00
Szymon RączkaandGitHub 39df9ff37f fix WaitGroup.Go version guidance (#37) 2026-05-19 07:12:08 +02:00
Samuel BertheandGitHub 43bafa8686 fix: description optimization loop — 16 skills (plugin v1.5.0) (#46)
* fix: description optimization loop — 16 skills (plugin v1.5.0)

Audit of all 42 active skill descriptions against CLAUDE.md quality rules.
16 skills updated across 4 fix categories:

- Critical (4): code-style, context, modernize, testing — removed broad
  anti-patterns (whenever writing Go code, Essential for ANY, proactively,
  in any Go code)
- Borderline (2): stretchr-testify, project-layout — softened Essential/any
- FQN cross-refs (6): benchmark, performance, troubleshooting, observability,
  samber-lo, samber-ro — replaced bare skill names with samber/cc-skills-golang@…
- Boundary disclaimers (3+1): cli, dependency-injection, error-handling, safety
  — added missing → See cross-refs and narrowed over-broad triggers

CLAUDE.md: added ≤1000 char description limit + After creating a new skill
workflow with optimization loop checklist.

* fix: description optimization loop — 5 missed skills + minor version bumps

Fix 5 skills missed in first pass (whenever anti-pattern + missing import
trigger): continuous-integration, database, dependency-management, lint,
samber-do.

Bump all 21 skill versions to minor (X.Y.0) instead of patch — description
changes affect triggering behavior, warranting a minor increment.

* fix(golang-code-style): broaden trigger — load when writing/reviewing Go code

* fix(golang-project-layout): add package/module split triggers

* fix(golang-modernize): add deprecation warning as trigger

Extend the description to also fire when encountering a deprecation
warning, complementing the existing proactive old-style detection trigger.
2026-05-19 07:07:36 +02:00
samber (headless)andGitHub 61451c6b2a ci: add dependabot automerge workflow (#36) 2026-05-15 19:04:26 +02:00
Samuel Berthe 6ccf725ff4 docs: add skill architecture diagram to README 2026-05-07 22:36:16 +02:00
Александр МелентьевandGitHub 2298675163 Add fuzz to naming conventions (#21) 2026-05-07 22:23:34 +02:00
Samuel Berthe 15d71cdabf docs: add skill architecture diagram to README 2026-05-07 22:16:14 +02:00
Samuel Berthe e9761db859 chore: bump plugin version to 1.4.0 v1.4.0 2026-05-01 13:59:45 +02:00
Samuel Berthe 446c026c31 docs: add AI-driven code review CI guide 2026-05-01 13:43:27 +02:00
Samuel Berthe b29281ddc7 chore(golang-graphql): format markdown and remove AI review file 2026-05-01 13:38:40 +02:00
Samuel BertheGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>samber
236020f059 feat(golang-google-wire): add compile-time DI skill (#34)
* feat(golang-google-wire): add compile-time DI skill with full reference suite

New skill for google/wire (v0.7.0, archived 2025-08). Covers wire.NewSet,
wire.Build, wire.Bind, wire.Struct, wire.Value, wire.InterfaceValue,
wire.FieldsOf, //go:build wireinject, cleanup chains, and wire_gen.go
workflow.

Files:
- skills/golang-google-wire/SKILL.md (2,511 tok)
- skills/golang-google-wire/references/advanced.md (cleanup chains, error
  catalogue, codegen flags, panic syntax, external value injection)
- skills/golang-google-wire/references/recipes.md (HTTP server, multi-build,
  cleanup-heavy graph, CLI embedding)
- skills/golang-google-wire/references/testing.md (test injectors, CI stale
  check, fake bindings)
- skills/golang-google-wire/evals/evals.json (10 evals, 50 assertions)

Eval results (LLM-as-Judge, claude-sonnet-4-6):
  With skill:    49/50 (98%)
  Without skill: 41/50 (82%)
  Delta:         +16pp

Key differentiators: wire.FieldsOf (eval 8, 5/5 vs 1/5 — model actively
discouraged FieldsOf without skill), //go:build wireinject tag (eval 1,
5/5 vs 3/5 — suggested //go:build ignore instead).

README: updated Tools table row and Skill evaluations total (38 skills,
3232 assertions).

* fix(golang-google-wire): apply prettier formatting

* fix(golang-google-wire): address PR review comments

- advanced.md: correct cleanup order description (dependants torn down
  before dependencies, not the reverse)
- recipes.md: fix multi-build variant section — show -output_file_prefix
  commands first to avoid both wire runs overwriting wire_gen.go
- recipes.md: handle http.ErrServerClosed in ListenAndServe goroutine
  so graceful shutdown is not logged as a fatal error
- testing.md: fix map literals (use &User{} composite literal)
- testing.md: rephrase //go:build !wireinject comment — it IS a build
  tag, not the absence of one

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: samber <2951285+samber@users.noreply.github.com>
2026-05-01 13:35:17 +02:00
Samuel BertheGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>samber
16d6eec290 feat(cobra,viper): add golang-spf13-cobra and golang-spf13-viper skills (#33)
* feat(cobra,viper): add golang-spf13-cobra and golang-spf13-viper skills

- golang-spf13-cobra v1.0.0 (2,455 tok SKILL.md, 7,218 tok directory)
  - Command tree, RunE vs Run, Args validators, PersistentPreRunE chain
  - Flags, completions (ValidArgsFunction, RegisterFlagCompletionFunc)
  - Testing with SetArgs/SetOut/SetErr, 5 reference files
  - 12 adversarial evals (50 assertions)

- golang-spf13-viper v1.0.0 (2,412 tok SKILL.md, 6,936 tok directory)
  - Precedence pipeline, env binding trio (prefix+replacer+AutomaticEnv)
  - Unmarshal + mapstructure tags, Sub nil-safety, ConfigFileNotFoundError
  - WatchConfig fsnotify caveats, viper.New() test isolation
  - 5 reference files, 12 adversarial evals (53 assertions)

Both skills cross-reference each other and golang-cli.
README and EVALUATIONS updated.

* fix(cobra,viper): apply PR review fixes and expand adversarial evals

Fixes from copilot review:
- viper/SKILL.md: "first non-zero wins" → "first set value wins" (empty
  string with AllowEmptyEnv is valid)
- cobra/references/commands-and-args.md: "six run hooks" → "five run hooks"
- viper/references/watch-and-reload.md: fix inconsistent Config/AppConfig
  types in race-safe reload example
- viper/references/binding-and-env.md: add missing SetEnvPrefix to the
  "without replacer" snippet for consistency

New adversarial evals:
- cobra: +7 evals (StringArray vs StringSlice, MarkFlagsMutuallyExclusive,
  MarkFlagsRequiredTogether, MarkFlagsOneRequired, Flags().Changed(),
  PostRunE success-only + defer pattern, ErrOrStderr) → 19 evals / 77 assertions
- viper: +6 evals (MergeInConfig layering, BindEnv non-prefixed vars,
  race-safe OnConfigChange, go:embed default config, validate-before-apply,
  WeaklyTypedInput for env bools) → 18 evals / 77 assertions

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: samber <2951285+samber@users.noreply.github.com>
2026-05-01 13:25:57 +02:00
Samuel BertheandGitHub 969bd825d7 feat(golang-graphql): write full skill body with references and evals (#32)
* feat(golang-graphql): write full skill body with references and evals

Replaces the stub with a complete skill covering gqlgen (schema-first
codegen) and graph-gophers/graphql-go (schema-first reflection).

Key topics: Library choice table, N+1 DataLoader (per-request), schema
design with nullability rules, mutation envelope pattern, subscription
goroutine discipline, production safety (introspection gating, complexity
caps), error sanitization via ErrorPresenter, file uploads, Federation v2.

Reference files added:
- references/gqlgen.md — codegen workflow, gqlgen.yml, DataLoaders,
  directives, subscriptions, file uploads, Federation v2
- references/graphql-go.md — reflection model, type mapping (int32!),
  nullable pointers, DataLoaders, OTel tracing
- references/testing.md — gqlgen client harness, gqltesting patterns

Evals: 8 adversarial scenarios, 37 assertions.
Results: with=100%, without=84%, delta=+16pp (uplift driven by eval 1
N+1 DataLoader pattern: 6/6 with skill vs 1/6 without).

Most evals (2–4, 6–8) are common knowledge — future iterations should
target DataLoader wait timing, fields.resolver:true in gqlgen.yml,
Federation @key wiring, and WS subprotocol selection.

* fix(golang-graphql): address PR review comments and add adversarial evals

- SKILL.md: move pubsub.Subscribe() before goroutine in subscription example
- gqlgen.md: remove IntID override (legacy-only), fix DataLoader batch return
  type to [][]*domain.Post, add CheckOrigin allow-list example, gate
  Introspection behind ENV check
- graphql-go.md: fix OTel import to trace/otel + otel.DefaultTracer(), add
  db field to RootResolver struct, fix UnmarshalGraphQL signature to any
- evals: add 5 new adversarial evals (9-13); eval 12 (OTel tracer import)
  shows 4/4 → 0/4 uplift (model hallucinates trace/oteltracer without skill)
- README: mark golang-graphql  with token counts (76/2935/7766)
- EVALUATIONS.md: update to 59 total assertions, 100% with / 83% without
2026-05-01 03:47:31 +02:00
Samuel BertheandGitHub 556f2414fa feat: add golang-swagger skill (swaggo/swag v2) (#31)
* feat: add golang-swagger skill

Covers swaggo/swag v2.0.0-rc5 — general API info annotations, operation
annotations (@Summary, @Param, @Success, @Router, @Security), security
definitions (Bearer/JWT, OAuth2, API key, Basic), struct tags (swaggertype,
enums, example, swaggerignore), and framework integrations (gin, echo,
fiber, chi, net/http).

Includes references/swag-cli.md with full CLI flag reference, dynamic
config, generics, nested composition, response headers, and MIME aliases.

* chore(golang-swagger): format, lint, token counts, README, evals

- Fix bare URL lint error (MD034)
- Update README: , token counts (desc=144, SKILL.md=2125, dir=3123)
- Add 12 adversarial evals (60 assertions) covering: blank import trap,
  body param struct requirement, swaggertype for time.Time/[]byte, Chi
  integration via http-swagger, AND security condition, -g flag for
  general info file, godoc comment for swag fmt, collectionFormat(multi),
  runtime docs.SwaggerInfo override, nested composition, enums/min/max
  struct tags, swaggerignore

* chore: bump plugin version to 1.4.0

* Revert "chore: bump plugin version to 1.4.0"

This reverts commit 72f3669199.

* eval(golang-swagger): add evaluation results — 58/60 with skill, 43/60 without (+25pp)

12 adversarial evals (60 assertions). Key discriminating evals:
- swaggertype-overrides: 5/5 vs 1/5 (time.Time + []byte traps)
- map-response-type: 5/5 vs 3/5 (raw map in @Success)
- nested-composition: 5/5 vs 3/5 (Envelope{data=model.User} syntax)
- csv-vs-multi: 4/5 vs 2/5 (collectionFormat discrimination)
- blank-import + swaggerignore: each 5/5 vs 4/5

Evals 4 (Chi+env) and 9 (conditional toggle) score 5/5 in both
conditions — common knowledge. Eval 11 (example tag) misses in both
— coverage gap noted for future iteration.

* fix(golang-swagger): use named docs import when overriding SwaggerInfo
2026-05-01 03:32:21 +02:00
Samuel BertheandGitHub 2e80a545f5 docs(uber-dig,uber-fx): add fx vs dig comparison section (#30)
* docs(uber-dig,uber-fx): add fx vs dig comparison section

Replace one-liner blockquotes with a dedicated comparison section in both
skills. Includes a feature table (lifecycle, modules, signal handling,
timeouts) and clear choose-X-when guidance pointing each skill at the other.

* chore(uber-dig,uber-fx): bump skill versions to 1.1.0
2026-04-30 15:23:32 +02:00
Samuel Berthe bee9d0486d fix(lint): apply prettier formatting across skill files 2026-04-29 00:24:59 +02:00
Samuel Berthe 6ae8ff82da fix(lint): wrap bare URLs in uber-dig and uber-fx skills 2026-04-29 00:21:23 +02:00
Samuel Berthe f8564ffeb7 chore: bump plugin version to 1.3.0 2026-04-29 00:20:59 +02:00
Samuel BertheandGitHub 5ab41df4d9 feat: add AI-driven code review workflow with skill plugin (#23)
* docs: add CI/AI-driven code review section to README

* chore: add .worktrees/ to .gitignore

* feat: add AI-driven code review workflow with skill plugin

- New GOLANG-AI-DRIVEN-REVIEW.md doc with 6-job Claude Code Action workflow (quality, correctness, security, quality-depth, ci-diagnosis, discuss)
- New assets: claude-code-review.yml workflow + copilot-review-instructions.md
- Workflow features: per-event concurrency lanes, 15min timeout, sticky comments, skill loading via npx skills add -a claude-code, Skill() invocation syntax in prompts
- Cross-references to golang-continuous-integration in 7 skills (security, testing, linter, concurrency, error-handling, code-style, safety)
- Tighten CI security: add permissions blocks to lint/security-scan, remove unused id-token from update workflows, add SARIF upload + exit-code to Trivy/Bearer
2026-04-29 00:08:27 +02:00
Samuel BertheandGitHub 85156e78dd feat: add golang-uber-dig and golang-uber-fx skills (#25)
* feat: add golang-uber-dig and golang-uber-fx skills

Two new library skills covering uber-go's reflection-based DI ecosystem. golang-uber-dig covers the container, Provide/Invoke, dig.In/dig.Out, named values, value groups, dig.As, optional deps, Decorate, Scopes, error handling, and Visualize. golang-uber-fx covers fx.New/Run, lifecycle hooks, fx.Module, fx.Annotate, fx.Supply/Replace/Decorate, fxevent logging, and fxtest. Each skill ships recipes.md (end-to-end app examples) and testing.md (test patterns and CI graph validation), and cross-references golang-samber-do, golang-google-wire, and golang-dependency-injection.

* refactor(uber-dig,uber-fx): trim SKILL.md under 2,500 tokens

Both SKILL.md exceeded the project budget. Moved Decorate, Scopes, optional deps, error helpers, Visualize, and Quick Reference into references/advanced.md for both skills. dig: 3,744 -> 2,264 tok. fx: 4,466 -> 2,499 tok. README updated.

* test(uber-dig,uber-fx): add eval prompts and assertions

11 adversarial evals per skill targeting unique guidance: parameter objects, value groups (with flatten), named values, dig.As to hide concrete types, scopes for request locals, container at composition root, DryRun graph validation, Decorate, RecoverFromPanics, fx vs dig choice. fx evals additionally cover lifecycle non-blocking OnStart, fx.Annotate vs fx.Out, modules, fx.Supply, fx.Replace + fx.Populate in fxtest, fxevent.ZapLogger, manual lifecycle for CLI embedding.

* test(uber-dig,uber-fx): add preliminary eval results to EVALUATIONS.md

Ran 4 evals × 2 configs per skill (16 subagents total) with Claude Opus 4.7. Both skills score 100% with-skill. Without-skill: dig 90% (-10pp uplift), fx 95% (-5pp uplift). The base model has very strong baseline knowledge of both libraries; only adversarial evals targeting subtle API choices (Decorate vs scope-shadow Provide; fx.As interface binding) showed meaningful uplift. Full 11-eval suite (53/56 assertions) remains in evals.json for re-runs via /skill-creator.

* fix(uber-dig): clean up unused context import and fix handler signature in recipes

* fix(golang-uber-dig,golang-uber-fx): address PR #25 review comments and deep review findings

PR comments:
- dig/advanced.md: rephrase "module boundaries" to "scope/package wiring boundaries"
- dig/recipes.md: fix ignored repo.List error in HTTP handler (return 500)
- dig/recipes.md: remove unused context import and _ = context.Background hack
- dig/recipes.md: fix handle() signature to idiomatic (w, r) order
- fx/testing.md: assert net.Listen error before using listener

Deep review:
- dig/advanced.md: add code example for dig.Export(true) call site
- dig/advanced.md: clarify c.String() as text summary, not DOT output
- dig/recipes.md: add missing root.Provide(NewHandler) to request-scope recipe
- fx/advanced.md: add fx.ErrorHook to lifecycle quick reference
- fx/testing.md: add zaptest/observer import hint to observer example
- fx/testing.md: comment why lc.Start is used instead of RequireStart
2026-04-29 00:03:43 +02:00
Samuel Berthe 6a55473e25 fix(evals): replace zero-delta eval groups across 23 skills
Redesigned 116 eval groups that showed no delta between with/without
skill runs. Three failure modes addressed:

- Both-fail (adversarial override): removed explicit wrong instructions
  from prompts; traps now make the wrong approach a natural default
- Both-pass (common knowledge): replaced widely-known patterns with
  Go-specific, niche, or counterintuitive scenarios the model misses
  without the skill
- Both-partial (mixed assertions): split homogeneous groups, removed
  common-knowledge assertions, fixed coverage-gap ones

Also strengthened eval design principles in CLAUDE.md: clearer
adversarial framing rules, pre-flight gate, positive-trigger
preference, training-data saturation heuristic.
2026-04-28 14:33:19 +02:00
Samuel BertheandGitHub 56c59cc082 fix: improve skill descriptions for better auto-triggering (#24)
* fix: improve skill descriptions for better auto-triggering

- golang-design-patterns: narrow trigger from "designing Go APIs / making design decisions" (too broad) to specific patterns (functional options, graceful shutdown, etc.)
- golang-popular-libraries: remove unreliable "agent is about to add a dependency" trigger; add "new dependency being added" phrasing; drop noisy task-list examples
- golang-graphql: add import path triggers (github.com/99designs/gqlgen, github.com/graph-gophers/graphql-go)
- golang-uber-fx: add import path trigger (go.uber.org/fx), expand API surface (fx.Module, fx.Hook, fx.Option)
- golang-code-style: minor wording fix ("writing Go code" was missing "Go")

* chore: bump skill versions after description updates
2026-04-28 13:04:01 +02:00
GustavandGitHub 937bc72b76 fix: golang-linter skill name inconsistent with folder name (#19)
* fix: golang-linter skill name inconsistent with folder name

* fix: rename all `golang-linter` to `golang-lint`
2026-04-24 17:25:40 +02:00
b6542b653c refactor: use errors.AsType for typed error matching (#20)
* refactor: use errors.AsType for typed error matching

* Update error-wrapping.md

---------

Co-authored-by: Samuel Berthe <dev@samuel-berthe.fr>
2026-04-23 23:44:30 +02:00