Commit Graph
100 Commits
Author SHA1 Message Date
Samuel BertheandGitHub bac46b0bed docs: improve prose and sweep the skills (#102)
* docs: cap prose paragraphs at 3 sentences and clarify token budgets

CLAUDE.md constrained prose only at whole-file granularity, with three
conflicting per-SKILL.md token numbers and a "why" pattern that
tempted a second sentence per rule. Add a per-paragraph sentence cap,
a budget table clarifying which number measures what, and a mechanical
checker (scripts/check_prose_density.py) wired into the "After
updating a skill" checklist so verbose paragraphs get caught instead
of only whole-file token/line counts.

* docs: rewrite prose paragraphs over the new 3-sentence density cap

CLAUDE.md now caps standalone prose paragraphs at 3 sentences
(scripts/check_prose_density.py). Running it across every skill found
62 flagged paragraphs in 31 skills, dominated by a recurring
"library disclaimer" paragraph repeated near-verbatim across 17
library-specific skills. Restructure each flagged paragraph into
bullets, a table, or a tightened sentence per CLAUDE.md's Formats
guidance, preserving every fact, URL, and cross-reference. Re-scanning
the full repo now reports 0 flagged paragraphs across all skills.

Bump each touched skill's metadata.version by one patch version.
Update README token counts for the 31 touched skills to match.

* docs: drop the prose-density checker script

The script added mechanical enforcement but no CI wiring, so it never
ran anywhere but ad hoc. Keep the 3-sentence prose cap and the
clarified token-budget table in CLAUDE.md; drop the script and its
two call-outs, renumbering the "After updating a skill" checklist
back to a contiguous sequence.
2026-09-02 20:33:18 +02:00
Samuel BertheandGitHub 8f8e2feb66 feat(golang-modernize): add Go 1.27 support, fix sibling skill drift (#101)
* feat(golang-modernize): add Go 1.27 support, fix sibling skill drift

Go 1.27 shipped August 2026 and made several existing statements in
this plugin factually wrong, not just outdated - encoding/json/v2 is
now the default (was documented as experimental-only), the goroutine
leak profile is GA (was documented as GOEXPERIMENT-gated), and go
fix's modernizer suite changed. An agent loading these skills today
would give incorrect advice.

Rebased onto main, which had independently merged PR #98 (a smaller,
overlapping Go 1.27 pass on the same files). Reconciled rather than
overwritten: kept PR #98's stdlib-uuid/generic-methods/CutLast/
synctest-http evals (renumbered 20-23) alongside this branch's own,
folded its unique versions.md content (go fix modernizers, stdversion,
go mod tidy merge, small API preferences) into the merged Go 1.27
section, and corrected its json/v2 section, which claimed v1 behavior
is preserved while also stating v2 rejects duplicate keys - those two
claims contradict each other once v1 sits on top of v2 by default.

- golang-modernize: merged Go 1.27 section (generic methods with a
  citation to the Go issue/spec after an eval showed models otherwise
  distrust the claim, CutLast, URL/Values.Clone, math/big.Int.Divide,
  stdlib uuid, json/v2 migration), a version-bump risk checklist for
  changes that need verification rather than a rewrite (removed
  GODEBUG keys, json/v2 strictness), stdversion workflow step, and
  skill-library-version tracking so future drift gets caught by the
  staleness check instead of by accident.
- 11 sibling skills (concurrency, troubleshooting, refactoring,
  popular-libraries, performance, continuous-integration,
  dependency-management, testing, benchmark, observability,
  documentation): surgical corrections wherever Go 1.27 broke a prior
  claim, plus additive Go 1.27 notes where directly relevant.
- evals.json: merged to 23 evals / 125 assertions (up from the 74 on
  main before either PR) - this branch's evals plus PR #98's four,
  renumbered to avoid ID collisions and kept rather than pruned as
  redundant, since both authors' scenarios are independently useful.
- EVALUATIONS.md / README.md: single reconciled report replacing the
  two competing v1.4.0 reports that resulted from the parallel work
  (116/120 with, 65/120 without, +43pp pooled), a Total row recomputed
  across all 41 skills, and a corrected TOC anchor. One eval's
  without-skill condition could not be captured after five subagent
  attempts and is reported as unmeasured rather than guessed.

* fix(golang-how-to): correct broken TOC anchor links from PR #100

markdownlint's MD051 rule strips emoji symbols when computing heading
slugs but keeps their variation selectors (U+FE0F), since those are
Unicode "Mark" characters, not "Symbol". The TOC entries assumed full
removal and linked to plain hyphenated anchors, so every heading
followed by ️/⚙️ (both of which use a variation selector) produced a
link-fragment mismatch - failing lint repo-wide on every PR regardless
of what it touches, including this one.

Recomputed the correct URL-encoded anchors from markdownlint's own
slug algorithm and rewrote just the TOC hrefs; no visible text changed.
2026-09-02 14:35:30 +02:00
Samuel BertheandGitHub ec8c349e29 docs: comprehensive skill-writing guideline update and retroactive fixes (#100)
* docs: tighten skill description guidelines and fix overlap gaps

Description frontmatter is the only signal Claude Code reads before
deciding to load a skill, so under-specified triggers or missing
sibling boundaries directly cause mis-selection or silent skipping.

- add 8 description-writing rules to CLAUDE.md (ordering, point of
  view, concrete nouns, pushy-but-scoped triggers, sibling scoping,
  front-loading, no workflow narration, negative-clause siblings)
- add length-calibration guidance reserving long descriptions for
  moment-triggered skills, distinct from topic-triggered ones
- retroactively apply the new rules to the 16 skills that violated
  them: missing overlap disclaimers (golang-security, golang-safety,
  golang-concurrency, golang-troubleshooting, golang-dependency-management,
  golang-continuous-integration, golang-design-patterns, golang-modernize,
  golang-project-layout, golang-popular-libraries, golang-lint,
  golang-data-structures, golang-samber-mo), oversized descriptions
  (golang-refactoring, golang-pkg-go-dev), and a too-abstract one
  (golang-stay-updated)

* docs: add skill body writing style guidelines

Body content quality (voice, terminology, specificity, feedback
loops) was undocumented even though description quality already had
a dedicated section — leaving body-writing conventions to individual
judgment call by call.

- add a Body writing style section: imperative verb-first voice, one
  term per concept, one default with an escape hatch, assume reader
  competence, tables/checklists over prose, specificity matched to
  fragility, copyable progress checklists, feedback loops over rule
  enumeration
- fold the ALWAYS/NEVER-in-caps-as-a-smell refinement into the
  existing Teach reasoning, not only rules section
- add the under-250-lines target and 147-line official median to
  the existing Token budgets line-count bullet

* docs: apply new body writing style rules to 11 skill bodies

Retroactively applies CLAUDE.md's new Body writing style rules
(added earlier on this branch) after a read-only audit of all 46
active skill bodies flagged 10 real violations.

- add rationale to bare ALL-CAPS ALWAYS/NEVER items that weren't
  actually order-dependent or destructive (golang-context,
  golang-modernize, golang-samber-do, golang-project-layout,
  golang-structs-interfaces, golang-testing, golang-troubleshooting)
- split oversized bodies into references/: golang-structs-interfaces
  (386 -> 300 lines, new struct-fields.md and type-assertions.md)
  and golang-testing (476 -> 417 lines, new benchmarks.md,
  coverage.md, examples.md)
- trim golang-dependency-injection's duplicated 4-library comparison
  down to a 2-way contrast, pointing to its existing reference files
  for the rest
- merge golang-safety's two split Cross-References sections into one
- normalize the ASCII "->" arrow to "→" for consistency with the
  rest of the repo (golang-samber-mo, golang-testing,
  golang-concurrency)

* docs: add progressive disclosure guidance for skill bodies

The old Progressive disclosure section had a merge artifact (three
numbered items all labeled "Instructions" with three different,
overlapping token thresholds) and said nothing about why references
matter or how compaction and nested reads actually fail.

- reframe around the real asymmetry: body content is a recurring
  per-turn cost, references/ is paid once and only if loaded
- fix the duplicate "Instructions" bullets by cross-referencing
  Token budgets instead of restating three conflicting numbers
- document the nested-reference truncation failure mode (head -100
  silently drops the deepest content) on the existing one-level-deep
  rule in the Skill Body intro
- add the auto-compaction budget fact (~5,000 tokens survive per
  skill, ~25,000 shared) and the table-of-contents-over-100-lines,
  organize-by-domain, and explicit-load-pointer rules

* docs: add tables of contents to long reference files

CLAUDE.md's new progressive disclosure guidance requires a Table of
Contents on any reference file over 100 lines, so a partial read
(head -100, or truncation on a long file) still reveals the file's
full scope instead of silently hiding sections past the cutoff.

Generated mechanically for all 123 qualifying reference files (every
skills/*/references/*.md over 100 lines that didn't already have
one) with a one-off script: extract H2/H3 headings outside fenced
code blocks, build GitHub-compatible anchors, insert after the H1
title and intro paragraph. Idempotent - already-TOC'd files (the 4
golang-gopls reference files) were left untouched.

* docs: add bundling-scripts and security guidelines

Executable helpers and skill-level security had no dedicated home in
CLAUDE.md even though the plugin already ships scripts/ directories
and handles third-party library content that could carry injections.

- add a Bundling scripts section: when to bundle (deterministic,
  repeated, or fragile operations), errors handled inside the
  script, justified constants, forward-slash paths, explicit
  dependencies, execute-vs-read framing, and plan -> validate ->
  execute for batch or destructive work
- add a Security section anchored on the Principle of Lack of
  Surprise: no credential handling or data exfiltration, no runtime
  instruction-fetching, external content treated as data, allowed-
  tools granting without prompting even in untrusted directories,
  least-privilege tool scoping, and auditing bundled files (not just
  SKILL.md) before installing a third-party skill
- cross-reference existing Snyk agent scanner compliance and
  Library-specific skills sections instead of duplicating their
  detailed patterns

* docs: add anti-patterns quick-reference table

A single lookup table naming every failure mode and pointing at the
section that owns the fix makes today's accumulated guidance
(description, body, progressive disclosure, scripts, security)
scannable in one pass instead of requiring a full read to recall
where a given rule lives.

- add the Anti-patterns table before Evaluation, cross-referencing
  existing sections for rows already covered in full
- add net-new guidance where no existing rule covered the row:
  version-relative facts over date-relative ones with a collapsed
  <details> block for superseded patterns, forward slashes in body
  examples (not just scripts), a verified frontmatter field-count
  warning (confirmed against the Agent Skills spec: six fields -
  name, description, license, compatibility, metadata, allowed-tools
  - everything else is a harness extension), top-level version:
  rejection, description YAML-quoting pitfalls, MCP tool name
  server-qualification, allowed-tools as a pre-approval list rather
  than a sandbox, @-mention force-loading of another skill, a
  discovery-degradation ceiling around 20-50 installed skills, and
  per-model eval validity
- add a short "facts in CLAUDE.md, procedures in skills" principle
  to Project Overview, the CLAUDE.md-vs-skill counterpart to the
  existing skill-vs-skill Atomic skills and deduplication rule

* fix: correct TOC anchor slugs and prettier/markdownlint findings

Running the documented lint pipeline (prettier, then
markdownlint-cli2) surfaced a real bug in the TOC-generation script
used earlier on this branch: its anchor slugger collapsed runs of
whitespace into a single hyphen and stripped inline emphasis markers
without excluding intraword underscores, producing anchors that did
not match GitHub's actual algorithm (each whitespace character maps
to its own hyphen, with no collapsing). This broke 306 link
fragments across 61 reference files whose headings contained an
em dash, ampersand, parentheses, or a snake_case identifier.

- fix the slugify algorithm and regenerate all 123 previously
  generated TOCs; the fix is idempotent, so headings without special
  punctuation are byte-identical to before
- fix two `MD038` violations in CLAUDE.md (` : ` code spans with
  a trailing space) introduced by an earlier commit on this branch
- apply prettier's table-column alignment to two new reference files
  (golang-testing/references/coverage.md, examples.md)

20 anchors across two files (golang-how-to/references/by-category.md,
project-config.md) remain flagged by markdownlint's MD051 rule for
headings containing emoji with variation selectors -- its own --fix
computes the identical anchor its checker then rejects, a stable
fixed point that is a markdownlint-cli2 limitation, not a defect in
the generated content (the heading text itself is unaffected; only
the anchor's exact string fails the linter's cross-check). Left as a
known limitation rather than chased further.

All other lint findings across the repository (515 total, MD022/
MD037/MD025/etc.) are pre-existing and outside every file this
branch touches -- confirmed by diffing the error file list against
this branch's changed-file list.

* chore: bump patch version on all 40 skills changed on this branch

* chore: bump plugin version to 2.0.1

* oops
2026-09-01 11:45:24 +02:00
Samuel BertheandGitHub 147c0679e2 docs(golang-documentation): reference humanizer-en-asd-ste100 skill (#99)
Cross-reference samber/cc-skills@humanizer-en-asd-ste100 for projects
that need strict, controlled English prose (ASD-STE100) in their
documentation, on top of the existing writing principles.
2026-08-26 19:18:34 +02:00
Samuel Berthe a18860b303 chore: add CITATION.cff
Enables the GitHub "Cite this repository" button and gives Zenodo a
stable citation source instead of auto-generating one from the noisy
GitHub contributor list.
2026-08-23 20:56:31 +02:00
Samuel BertheandGitHub 053894c088 Update README.md (#97) 2026-08-20 15:04:24 +02:00
Samuel BertheandGitHub 20e960371b docs: name CLAUDE.md/AGENTS.md at every agent-config-file mention (#96)
A few generic "the project's agent-config file" mentions in
golang-how-to and golang-project-layout kept the concrete examples
out, unlike the sibling mentions in the same files. Names CLAUDE.md
and AGENTS.md consistently everywhere, matching the pattern already
used at golang-how-to/SKILL.md:3,152 and golang-gopls/references/
settings.md:3.
2026-08-20 03:07:11 +02:00
Samuel BertheandGitHub 432d49f4cd docs: fix remaining hardcoded tool references from a deep file-by-file audit (#94)
* docs: fix remaining hardcoded tool/harness references found by a deep file-by-file audit

The mechanical grep-based pass in the previous commits only matched a
fixed set of phrases. A full read of every file in every skill
directory (not just SKILL.md, and not just grep) turned up a few
misses:

- golang-documentation (SKILL.md, references/code-comments.md,
  references/library.md): named a specific MCP tool
  (go-playground-mcp) as an instruction to call it, rather than
  describing the capability.
- golang-how-to/SKILL.md: the native LSP tool was called "built-in"
  without naming Claude Code, unlike golang-gopls's equivalent,
  already-fixed section.
- golang-pkg-go-dev/SKILL.md: the MCP registration section presented
  `claude mcp add` as the only path with no harness scoping.
- golang-refactoring/references/workflow.md: one Thinking mode line
  (inside the Planning Gate section, not the top-of-body directive)
  still used the old 'use `ultrathink` here' phrasing.

Everything else across all 46 skills — read in full, not grepped —
was already compliant.

* style: apply prettier formatting to straggler eval/asset files

These 8 files (7 evals.json, 1 .golangci.yml) had never been run
through prettier and had drifted from the rest of the repo's
formatting. Content is verified byte-for-byte semantically identical
(JSON parsed and compared, YAML diffed with comment lines excluded)
- whitespace/line-wrapping only, picked up incidentally while running
prettier on the directories touched by this audit.
2026-08-20 03:05:15 +02:00
Samuel BertheandGitHub ba9cc6d7fd chore: bump plugin to v2.0.0, minor-bump every skill (#95)
Version bumps kept out of the content PRs (#91, #92, #93, #94) so
those stay reviewable on their own merits. This is a standalone
release marker: every skill moves to its next minor version, and the
plugin manifests (.claude-plugin, .cursor-plugin, gemini-extension)
move to 2.0.0 together.
2026-08-19 22:36:19 +02:00
Samuel BertheandGitHub 01cdd1a917 refactor: make skill bodies harness-neutral across the golang-* plugin (#93)
* docs: broaden compatibility base string across all golang-* skills

Replace "Claude Code or similar AI coding agents" with "Claude Code,
Codex or similar harness" per the cross-harness portability rule in
CLAUDE.md, mirroring samber/cc-skills-golang#91.

* feat: scope Go-file skills with the paths frontmatter field

Adds the optional paths frontmatter field (documented in
samber/cc-skills-golang#91) to every skill whose subject matter is
Go source itself, so Cursor can sharpen triggering to **/*.go files.
Skills not tied to a file type (setup, CI, ecosystem-lookup,
orchestrator) are intentionally left without it.

golang-lint also scopes to .golangci.yml, since linter configuration
is as central to that skill as the Go source it lints.

* docs: drop hardcoded Agent-tool phrasing from skill body prose

Continues the cross-harness portability rule from
samber/cc-skills-golang#91 — sub-agent fan-out is a capability every
harness resolves its own way; naming Claude Code's Agent tool in body
prose is redundant on Claude Code and dead weight elsewhere.

* feat(golang-how-to): flatten Configure mode to 5 harnesses, fix Cursor bug

Configure mode previously wrote to CLAUDE.md, AGENTS.md,
.cursor/rules, and copilot-instructions.md with Claude Code framed as
the primary target. This flattens the harness list to equal standing
and adds GEMINI.md (Gemini CLI, Antigravity).

Fixes a real bug: .cursor/rules is a directory of .mdc files with
their own YAML frontmatter, not a single markdown file to grep and
append to. The old Step 2/4 logic assumed the latter and would not
have worked on Cursor. Adds a dedicated .mdc template
(assets/cursor-go-skills.mdc) and a Cursor-specific write path.

Also adds the new Questions top-of-body directive and drops the
remaining hardcoded AskUserQuestion/Glob/Edit tool names from
project-config.md and golang-project-layout's checklist, per the
cross-harness portability rule in samber/cc-skills-golang#91.

* docs(golang-continuous-integration): label CI review blocks as generated artifacts

Notes that the Claude Code and Copilot review blocks under
'AI-Driven Code Review' are generated artifacts targeting a CI
runner, not the developer's local harness — their literal tool names
and permission flags are intentional under the exemption in
samber/cc-skills-golang#91, so a future portability grep hit there
reads as expected rather than as a miss.

* docs: lead Thinking/Orchestration mode directives with universal instruction

Rewords the 8 Thinking mode and 12 Orchestration mode directives across
these skills to lead with the harness-neutral instruction ("Reason as
thoroughly as possible...", "Fan out N parallel sub-agents...") and
mention ultrathink/ultracode second, as the Claude Code-specific
accelerator rather than the instruction itself. Also drops the
remaining hardcoded "(via the Agent tool)"/"(Agent tool)" parentheticals
and EnterWorktree/ExitWorktree tool-name mentions from body prose in
favor of "an isolated worktree" — the tool stays declared in
allowed-tools, prose just describes the capability.

Mirrors the format adopted in samber/cc-skills-golang#91.

* docs: add Questions directive to golang-refactoring and golang-modernize

golang-refactoring gates several irreversible git operations behind
explicit sign-off (initial plan approval, then per-checkpoint mid-
refactor pauses). Adds a top-of-body Questions directive naming the
mechanism once, and removes a verbatim-duplicated 5-item checkpoint
list between SKILL.md and references/workflow.md — workflow.md now
points back to SKILL.md's list instead of restating it.

golang-modernize already had an ad hoc "Consent check" block for its
contextual-trigger mode, placed after the first heading rather than
with the other top-of-body directives. Renames it to the Questions
directive and moves it up next to Persona/Orchestration mode/Modes,
consistent with the convention in samber/cc-skills-golang#91.

* docs(golang-gopls): generalize MCP registration and settings storage

The MCP registration section named only Claude Code's 'claude mcp add'
command with no acknowledgement that gopls mcp is a harness-agnostic
launch command any MCP-capable host can point at. Notes the underlying
command is portable and that other harnesses use their own settings
file rather than a shared config format.

Also drops a stray 'Store the settings in CLAUDE.md' pointer for
gopls's editor-agnostic LSP settings — there was no reason that one
was Claude Code-only.

* chore: bump metadata.version on every skill touched by this branch

Patch bump per CLAUDE.md's version-discipline rule — no plugin
manifest version change, per standing preference to leave
.claude-plugin/plugin.json, .cursor-plugin/plugin.json, and
gemini-extension.json untouched for skill-level updates.

* docs: refresh README token counts for all touched skills

Re-measured Description/SKILL.md/Directory token counts via
tiktoken-cli after the cross-harness portability changes across all
46 golang-* skills.

* Revert "chore: bump metadata.version on every skill touched by this branch"

This reverts commit 28e6c898f0.

* docs(golang-gopls): name CLAUDE.md/AGENTS.md explicitly

Generic 'the project's agent-config file' phrasing lost the concrete
examples the equivalent line elsewhere in the repo keeps. Names the
two most common files while keeping 'or equivalent' for the rest.
2026-08-19 22:33:39 +02:00
Samuel BertheandGitHub 26c725f00b docs: make cross-harness portability the default for skill authoring (#91)
* docs: make cross-harness portability the default for skill authoring

Skills in this repo are authored for Claude Code but installed on
Codex, Gemini CLI, Cursor, Copilot and OpenCode. Hardcoded tool names
in skill body prose (via the Agent tool, AskUserQuestion, Glob) only
resolve on the harness they name and degrade silently elsewhere.

- Makes capability-based prose the default authoring behavior, folded
  into Allowed Tools, the frontmatter compatibility row, and the
  top-of-body directives table, no separate portability section.
- Adds a new optional Questions top-of-body directive so interactive
  skills declare it once instead of repeating a hardcoded tool name
  at every question.
- Leads Thinking/Orchestration mode directives with the universal
  reasoning/fan-out instruction; ultrathink/ultracode are mentioned
  second, as the Claude Code-specific accelerator layered on top.
- Adds paths/globs and experimental dependencies as documented
  optional frontmatter fields; explicitly does not adopt Antigravity's
  turbo_safe field or Mistral Vibe's permission = always equivalent,
  since both conflict with this project's confirm-before-risky-action
  policy.
- Fixes a malformed inline checklist item in the after-updating-a-
  skill workflow and an inaccurate Override-column reference.

Mirrors samber/cc-skills PR 40, applied to this repo's own structure.
This README keeps its Ultrathink/Ultracode columns, which cc-skills
does not have.

* docs: rename Ultracode policy heading to Deep thinking over parallel sub-agents policy
2026-08-19 21:03:59 +02:00
Samuel BertheandGitHub c75b7fcddd ci: bump astral-sh/setup-uv to v10 (#92)
* ci: bump astral-sh/setup-uv to v10

* fix: pin astral-sh/setup-uv to v10.0.1

The action does not publish floating major-version tags (only full
semver like v10.0.1, v10.0.0) — v10 does not exist as a ref.
2026-08-19 20:55:34 +02:00
Samuel Berthe e27d59ca42 feat(golang-how-to): auto-write always-load directive to CLAUDE.md/AGENTS.md
Configure mode now writes a standalone, unconfirmed always-load
directive for golang-how-to itself, separate from the optional
`## Required Go skills` block. golang-project-layout writes it
automatically during project initialization so the orchestrator
is guaranteed to load on every future Go session, not just when
its description happens to trigger.
2026-07-27 22:56:19 +02:00
Samuel Berthe 15b1a0fcf1 chore: bump plugin version to 1.9.1 2026-07-26 16:58:58 +02:00
Samuel Berthe 41bce94a74 docs(golang-samber-do): clarify samber/do safely recovers MustInvoke panics
The panic is recovered by the library itself at the enclosing Invoke call,
not by caller code, so MustInvoke is safe to use inside providers.
2026-07-26 16:57:33 +02:00
Samuel Berthe 19300001d8 docs(golang-popular-libraries): cross-reference golang-samber-hot skill
Add samber/hot to the Caching section of the library reference and
link to the golang-samber-hot skill for in-memory caching details.
2026-07-26 16:57:33 +02:00
Samuel Berthe deae0f81ea docs(README): widen Project Start diagram box and fix CI label
The CI abbreviation was ambiguous next to the other spelled-out labels
in the skill relationship diagram.
2026-07-26 16:57:33 +02:00
Samuel Berthe 8c1f0b71d1 docs(golang-samber-do): recommend MustInvoke over Invoke inside providers
samber/do converts a MustInvoke panic back into a returned error at the
enclosing Invoke call, so using MustInvoke inside provider functions
propagates errors without the extra if err != nil boilerplate.
2026-07-26 16:57:32 +02:00
Samuel BertheandGitHub 709b181869 docs(golang-benchmark): correct rationale for separate _bench_test.go files (#83)
The file-separation rationale claimed that splitting benchmarks out of
`parser_test.go` lets `go test -run . -short` skip "compiling
benchmark-only fixtures". That is not how the Go toolchain works: all
`*_test.go` files in a package are compiled into a single test binary
regardless of `-run`, `-bench` or `-short`.

Replace the claim with the two rationales that actually hold: cleaner
`-bench` output, and separation of measurement-sized fixtures from
correctness-sized ones.
2026-07-19 22:59:29 +02:00
Samuel Berthe 4158351dd5 chore(docs): refresh README token stats and bump plugin to 1.9.0
Recompute Description/SKILL.md/Directory token counts for every skill
with tiktoken-cli (several skills grew since the last measurement, e.g.
golang-continuous-integration's assets/, golang-how-to's references/).
Also add missing golang-pkg-go-dev to the skills tree diagram.
2026-07-16 18:42:09 +02:00
Samuel BertheandGitHub 5043d0a07a docs(golang-testing,golang-benchmark): test files named after source file, not tested function (#82)
Require test/benchmark files to mirror the source file name (foo.go ->
foo_test.go, foo_bench_test.go), not the individual function/method
under test, and to order test/benchmark functions in the same order
as the source file. Keeps file-to-file navigation and go test/-bench
output predictable.
2026-07-16 18:27:15 +02:00
Samuel BertheandGitHub ae07410d75 docs(golang-testing): warn against assert scope leaking into subtests (#80)
* docs(golang-testing): warn against testify assert scope leaking into subtests

Reusing an assert/require instance built from the parent *testing.T
inside t.Run closures misattributes subtest failures to the parent
test, silently hiding which subtest actually broke.

* chore(golang-testing): bump skill version to 1.2.4
2026-07-15 14:16:43 +02:00
Samuel Berthe 4881c01da7 chore(release): bump plugin version to 1.8.0 2026-07-06 18:31:03 +02:00
Samuel BertheandGitHub 16a4c37592 feat(skills): add golang-refactoring skill (#76)
* feat(skills): add golang-refactoring skill

Adds a new skill covering the safe, at-scale process of refactoring
existing Go code: a coverage-adaptive safety net, tool-driven
behavior-preserving transforms (gopls Rename/Inline/Extract, gofmt -r,
eg, gopatch, go/analysis fixers), the Fowler refactoring catalog mapped
to Go, breaking import cycles and moving types across packages via
type-alias gradual code repair, and a human-in-the-loop workflow of
small staged PRs landed on a refactoring branch.

The workflow persists its plan in the code itself via `// REFACTOR(step
N): ...` markers (seeded when the refactoring branch is created, for
large refactors only) since a multi-step refactor outlasts any single
session's context, delegates each staged change to a sub-agent so the
orchestrating session only keeps short results, and keeps intermediate
PRs out of draft while the final merge-to-main PR is opened as one.

The skill owns the process; it cross-references golang-naming,
golang-project-layout, golang-code-style, golang-design-patterns,
golang-modernize, golang-security/golang-safety, golang-lint,
golang-testing, golang-benchmark, and golang-gopls for target-state
rules and mechanics owned elsewhere, and those first five skills
gained a reciprocal cross-reference back. golang-how-to's skill
loading table, categories, and competing-clusters disambiguation are
updated accordingly.

* docs(golang-refactoring): reformat skill body into concise bullet lists

Convert dense prose paragraphs across SKILL.md and all references/*.md
into nested bullet points for scannability, without changing any rule,
rationale, table, code block, or cross-reference.

* chore(skills): bump version of skills cross-referencing golang-refactoring

code-style, design-patterns, how-to, modernize, naming, and project-layout
each gained a cross-reference to the new golang-refactoring skill; bump
their patch version per the repo version-discipline convention.

* fix(golang-refactoring): correct grammar in persona line (land change -> land changes)
2026-07-06 17:58:38 +02:00
Samuel BertheandGitHub 5a32b1f1fe docs(skills): cross-reference golang-gopls from code-change skills; fix goToTypeDefinition doc gap (#77)
Add a targeted golang-gopls pointer at the rename/find-callers moment in
golang-naming, golang-structs-interfaces, golang-modernize,
golang-troubleshooting, and golang-code-style — gopls safe rename updates
every call site and refuses renames that break interface satisfaction,
which grep/sed/Edit-based renames silently miss.

Also fix golang-gopls's own docs: the capability matrix listed
goToTypeDefinition as a native LSP tool operation, but the native tool's
operation enum does not include it, so type-definition navigation has no
agent-invocable path today.
2026-07-06 17:20:37 +02:00
Samuel BertheandGitHub 79cd787fb2 feat(skills): add golang-gopls skill (#75)
* feat(skills): add golang-gopls skill

Documents gopls (the official Go language server) as its own atomic
skill: the three ways to reach it (its MCP server, Claude Code's
native LSP tool, and its CLI), a capability-to-tool matrix, the full
feature catalog (navigation, diagnostics, refactors, web features),
and the efficient read/edit workflows from gopls's own MCP
instructions.

golang-how-to previously carried this content inline; it's now
reduced to a pointer, and the ~18 library skills that referenced
gopls navigation through golang-how-to are repointed to golang-gopls
directly, keeping each concept owned by exactly one skill.

* revert: do not bump plugin version for this PR

* refactor(skills): tighten golang-gopls, drop LSP-server-hosting CLI flags

Moves the capability-to-tool matrix out of SKILL.md into its own
references/matrix.md, cutting SKILL.md from ~3.5k to ~2.3k tokens
while keeping every row. Drops mentions of gopls's attached MCP mode
and the mcp -instructions flag, since neither applies to this skill's
agent-only usage. Trims the CLI global flags table down to the ones
that matter outside of running gopls as a long-lived LSP server
(-listen, -remote*, -debug, -otel, -mode removed), and documents the
remaining flags' full value sets exhaustively.

Also fixes the README's [!IMPORTANT] alert blockquote, which a prior
prettier run had collapsed onto one line, and adds golang-gopls to
the ASCII skill map.
2026-07-06 17:14:37 +02:00
f4be06f6ba feat(skills): add ultracode orchestration directive to fan-out skills (#74)
* feat(skills): add ultracode orchestration directive to fan-out skills

The `ultracode` keyword (multi-agent workflow orchestration) didn't exist
when these skills were originally written. Add a Thinking-mode-style
Orchestration mode directive to the 12 skills that already describe a
parallel sub-agent fan-out mode for full-codebase audits/scans/cleanups,
so the agent knows to escalate to orchestration for broad sweeps.

Documents the new directive and its README flag (🤖) in CLAUDE.md, and
bumps each touched skill's patch version.

* fix(skills): bump patch version for security, performance, modernize

main already bumped these three skills to the same patch value for an
unrelated change (isolated-worktree workflow), so the rebase merge
landed on an identical version string and hid this branch own change.
Bump one more patch to reflect this branch additions.

* Potential fix for pull request finding

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

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-05 20:43:56 +02:00
Samuel Berthe c5d5122d24 docs: check for cross-skill references when creating a new skill
Adds a step to the new-skill checklist: dispatch parallel sub-agents to
read existing skills and add a "-> See" cross-reference where their
topic overlaps with the new skill, keeping the atomic-skill ownership
convention from drifting out of sync.
2026-07-05 20:30:50 +02:00
faa9ccfeee feat(skills): add isolated-worktree workflow to 5 skills (#73)
* feat(skills): add isolated-worktree workflow to 5 skills

Document when to use the native EnterWorktree/ExitWorktree tools for
workflows with genuine collision risk: parallel mutating sub-agents
(golang-documentation, golang-modernize), variant comparison with a
serial-measurement caveat (golang-benchmark, golang-performance), and
per-fix remediation branches during large audits (golang-security).
Read-only parallel audits (security scan, testing, troubleshooting,
etc.) were deliberately excluded — concurrent reads need no isolation.

* revert: keep plugin version at 1.7.0

The isolated-worktree workflow changes do not warrant a plugin-wide
version bump on their own.

* revert: drop worktree workflow from golang-documentation

Its parallel sub-agents write independent files/sections rather than
racing on shared state, so isolation is not warranted here.

* Potential fix for pull request finding

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

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-05 19:48:56 +02:00
Samuel Berthe 1e3ae5fbcb oops 2026-07-05 19:26:38 +02:00
7437b5094f Clarify godig/gopls/Context7/govulncheck tool boundaries across skills (#72)
* docs(skills): clarify difference between godig/pkg.go.dev and gopls LSP server

golang-how-to now documents wiring gopls for Go code navigation, both as an
MCP server (agent-first: go_search, go_file_context, go_package_api,
go_symbol_references, go_diagnostics, go_vulncheck) and via Claude Code's
native LSP tool (ENABLE_LSP_TOOL=1 plus the official gopls-lsp plugin).

golang-pkg-go-dev now spells out when to reach for godig (published
ecosystem: versions, docs, importers, CVEs for packages not yet added) vs
gopls (your resolved local build) vs Context7 (fallback for libraries not
indexed on pkg.go.dev), with a task-to-tool matrix.

* fix(skills): route library skills to godig/gopls instead of Context7

17 library skills recommended Context7 as the discoverability fallback
for Go package facts, when godig (pkg.go.dev) and gopls (local code
navigation) are the better-suited tools for those tasks. Each skill's
disclaimer now points to golang-pkg-go-dev (godig) for package docs,
versions, symbols and vulnerabilities, and to golang-how-to (gopls)
for navigating the library's usage in local code, keeping Context7 as
a fallback for docs not indexed on pkg.go.dev. allowed-tools grants
Bash(godig:*), Bash(gopls:*), LSP, and mcp__gopls__* accordingly.

* fix(skills): route golang-popular-libraries to godig/gopls for exploration

The library-selection skill only referred developers to generic library
docs. Add godig for vetting candidate package facts (docs, symbols,
versions, importers, vulnerabilities) and gopls for browsing a
candidate library resolved source once added to the build, keeping
Context7 as a fallback for docs not indexed on pkg.go.dev.

* chore(skills): bump golang-graphql to v0.1.0

* fix(skills): grant gopls CLI and MCP tools in golang-how-to allowed-tools

The skill documents both the gopls MCP server and the native LSP tool
but only granted LSP, not the gopls MCP tools or the gopls CLI itself.

* docs(skills): move godig vs gopls vs Context7 boundary into golang-how-to

The comparison lived in golang-pkg-go-dev, but golang-how-to already owns
gopls wiring and is the orchestrator every Go task loads first, so the
tool-choice guidance belongs there instead. Also added govulncheck as a
fourth compared tool, distinguishing the whole-tree CI audit from gopls
go_vulncheck single-build check. golang-pkg-go-dev now carries a short
pointer instead of duplicating the table.

* Potential fix for pull request finding

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

* Potential fix for pull request finding

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

* Potential fix for pull request finding

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

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-05 19:25:56 +02:00
Samuel BertheandGitHub 8b2d019212 fix(skills): refresh golang-pkg-go-dev for godig v0.2.0 (#69)
* fix(skills): refresh golang-pkg-go-dev for godig v0.2.0

Sync the skill with the godig v0.2.0 CLI surface (was written against v0.1.0):

- vulns now reads the Go vulnerability database (vuln.go.dev, OSV) instead of
  pkg.go.dev, so summary and per-range fix versions are populated. It dropped
  --filter and --module (only --version and --limit remain).
- Document the new global --vuln-base-url flag.
- Drop vulns from the --filter command list, its filterable-fields row, and the
  now-obsolete "vulns uses Go-style ID/Details" casing caveat.
- Update the sample vulns output (fixedVersion removed; ranges/aliases added).

Bump skill 1.0.0 -> 1.1.0, skill-library-version 0.1.0 -> 0.2.0, plugin 1.6.0 -> 1.7.0.

* docs(golang-pkg-go-dev): clarify vulns data source in sample-output intro

Addresses PR review: the intro claimed all field sets mirror the pkg.go.dev
API, but since v0.2.0 vulns is sourced from the Go vuln DB (vuln.go.dev).
2026-07-02 12:09:59 +02:00
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
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
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
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
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
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
Samuel Berthe 6ccf725ff4 docs: add skill architecture diagram to README 2026-05-07 22:36:16 +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 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
Samuel BertheandGitHub 26524a3381 Update README.md 2026-04-13 17:19:26 +02:00
Samuel BertheandGitHub 49eb968ccb fix: resolve snyk W011/W012/W001 alerts in skill bodies (#14)
- Replace imperative "search for latest version / check URL" instructions
  with passive availability hints in golang-continuous-integration,
  golang-dependency-management, golang-modernize, and golang-samber-ro
- Replace `go install govulncheck@latest` with golang/govulncheck-action@v1
  in CI security asset (W012)
- Remove `gh repo view` from dependency evaluation checklist (W011)
- Add golang-performance step: paste benchstat output in commit body
- Document W011/W012/W001 fix patterns in CLAUDE.md for future authors
- Add snyk-agent-scan step to the "After updating a skill" workflow
- Bump plugin to v1.2.5; bump affected skill versions
2026-04-08 01:04:04 +02:00
Samuel Berthe b29499a6f6 feat: add skill-library-version field for staleness detection
Introduce skill-library-version in openclaw metadata for skills covering
versioned third-party projects. Add workflow in CLAUDE.md for periodically
checking outdated skills against upstream changelogs. Apply to all 15
library-specific skills with latest upstream versions.
2026-04-06 18:36:48 +02:00
Samuel BertheandGitHub b88f91d8ea Update project title in README.md 2026-03-31 14:22:13 +02:00
Samuel BertheandGitHub 785750e31f Update installation command for skills CLI 2026-03-31 14:21:58 +02:00
Samuel BertheandGitHub 48214a1c93 feat: add AskUserQuestion to allowed-tools across all skills (#9)
Add AskUserQuestion to the allowed-tools documentation table in
CLAUDE.md and to the allowed-tools frontmatter of all 24 existing
skills, enabling skills to clarify user intent before proceeding.

Bump patch version for all affected skills and plugin (1.2.3 → 1.2.4).
2026-03-30 20:46:37 +02:00
Samuel Berthe 017e747bd3 oops 2026-03-30 18:46:12 +02:00
Samuel BertheandGitHub bd8e97e59d sorry, im french so i dont speak english veri ouel (#8) 2026-03-30 15:10:14 +02:00
Samuel Berthe 91421f5305 shit, chuck norris is dead 2026-03-27 11:10:03 +01:00
Samuel Berthe a10cda000e bump version 2026-03-24 14:33:19 +01:00
Samuel BertheandGitHub 3a428b6358 fix(frontmatter): enclose frontmatters descriptions into double quotes to prevent issue when import (#5) 2026-03-24 12:45:51 +01:00
Samuel Berthe ef3a47a352 chore(ci): disable clawhub submission 2026-03-24 08:14:47 +01:00
Samuel Berthe a3fbd3f82c chore: bump golang-stay-updated 2026-03-23 17:26:46 +01:00
Samuel BertheandGitHub 9cecc579a2 Update AI-related statement in README
Rephrase the statement about AI in README.
2026-03-23 14:07:12 +01:00
Samuel BertheandGitHub b494fb7fbb Update README with important project note
Added important note about the project being bootstrapped with Claude Code and edited by a human.
2026-03-23 14:05:29 +01:00
Samuel BertheandGitHub b79302da2e Clarify company skill override in README
Updated the README to clarify the company skill override mechanism and removed HTML entities.
2026-03-23 12:45:55 +01:00
Samuel BertheandGitHub 86bb74ff36 Update README to remove token count instructions
Removed token count measurement instructions from README.
2026-03-23 04:15:04 +01:00
Samuel Berthe 6e8c861f7f oops 2026-03-23 01:37:31 +01:00
Samuel Berthe 4d3d3d5960 doc 2026-03-23 01:01:51 +01:00
Samuel Berthe 88e58ee4d3 chore: increase version number to 1.2.0 2026-03-23 00:56:49 +01:00
Samuel BertheandGitHub 617dab4eaa feat(skills): adding samber/lo, samber/ro, samber/mo, samber/hot, samber/slog-xxx (#3)
* feat(skills): adding samber/lo, samber/ro, samber/mo, samber/hot, samber/slog-xxx

* fix after review
2026-03-23 00:53:23 +01:00
Samuel BertheandGitHub b05a007624 chore(ci): claude code job for skills maintenance (skills covering libraries only) (#2) 2026-03-22 22:21:02 +01:00
Samuel BertheandGitHub d0f69ca0f6 Refactor skills section in README
Removed redundant skill descriptions and adjusted formatting.
2026-03-22 19:29:40 +01:00
Samuel BertheandGitHub 3a0db0c864 Refactor skills section in README.md
Removed redundant description of skills and adjusted formatting for clarity.
2026-03-22 19:28:55 +01:00
Samuel BertheandGitHub 45fb6bb8a7 Replace image in README with new asset
Updated image in README and adjusted dimensions.
2026-03-22 19:26:48 +01:00
Samuel Berthe 07038776cb Merge Skill/Name and Cmd/Ultrathink/Overridable columns in README tables 2026-03-22 19:25:54 +01:00
Samuel BertheandGitHub 39f443f1a8 Update skills section in README.md
Added new skill indicators and updated the skills table.
2026-03-22 19:18:41 +01:00
Samuel BertheandGitHub a1e755980c Update README with installation instructions
Added usage instructions for installing with skills CLI.
2026-03-22 18:33:04 +01:00
Samuel Berthe 8689fc90a4 chore(ci): add ClawHub publish workflow and script
- Add clawhub-publish.sh to publish all skills with version > 0.0.0
- Refactor workflow to use the shared script
- Add WIP skills with version 0.0.0 (skipped by publish)
2026-03-22 16:24:10 +01:00
Samuel Berthe fe55d9e692 chore(ci): use different clouder to bypass rate limits 2026-03-22 16:05:55 +01:00
Samuel BertheandGitHub 24674f41da chore/publish clawhub (#1)
* chore: add clawhub config

* chore(ci): publish to clawhub
2026-03-22 15:43:48 +01:00
Samuel BertheandGitHub 2622557971 Simplify usage instructions in README
Removed unnecessary instructions for forking and copy-pasting skills.
2026-03-22 04:17:14 +01:00
Samuel Berthe aa976ab424 fix(ci): inject secret into snyk-agent-scan 2026-03-22 01:48:09 +01:00
Samuel Berthe 2a7a39aa36 chore:remove skillsafe scan 2026-03-22 01:39:47 +01:00
Samuel Berthe 20a750a4c3 fix(dependabot): fix dependabot config 2026-03-22 00:31:33 +01:00
Samuel BertheandGitHub 845c7c7990 Change Dependabot update interval from weekly to monthly 2026-03-22 00:25:43 +01:00