Skip to content

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

  • Docs site: each deploy tells search engines that support IndexNow (Bing, Yandex and others) which pages changed, so they recrawl them sooner. Only the deploy build submits, and only pages whose HTML changed since the last deploy (the first deploy submits all). The key is served once for every site at https://jeffallan.github.io/17c975f34bbe97c32cf68c4f58503478.txt
  • Docs site: the build fails on a broken internal link (starlight-links-validator)
  • CI: docs-site.yml lints and builds the docs site on every pull request and push to main, so a broken link or lint error shows up in review instead of at release. The workflow is shared with the other docs sites and kept in step from the same private repo as the site code
  • Docs site: every page has a 1200×630 preview image (og:image) for links shared on social sites: the site’s name beside the monogram, the page title, and the page description cut to the whole sentences that fit in 260 characters. The cards are generated at build time (site/src/pages/og/) with astro-og-canvas
  • Docs site: every page carries a JSON-LD graph naming its author. Skill and doc pages are a TechArticle and the home page a WebPage about the repo (SoftwareSourceCode), each pointing at one Person (https://jeffallan.github.io/#person) declared on the author’s site. It is added through Starlight’s route middleware (site/src/routeData.ts), so Starlight’s own title, description and Open Graph tags stay as they are
  • Docs site: the shared light and dark theme (site/src/components/site-style/), delivered from a private repo that keeps the docs sites in step: the teal palette and fonts (Outfit, Source Sans 3) from the author’s site, a teal-based dark theme, and the monogram before the title, linking to that site. The purple palette is retired (#285)
  • Docs site: a shared footer (About the Author and Contact, the docs sites, profile links, credit line, copyright, privacy link) and a Contact call to action that opens the contact form in a dialog: under the home page’s buttons, and before the first heading on skill, workflow, guide, Getting Started and Skills Guide pages. README, Changelog, Contributing, Roadmap and Privacy have none. The privacy page lists Formspree (#285)
  • Docs site: the header has a Sites menu linking the author’s site and both docs sites, with the current one marked. The menu (site/src/components/site-nav/) is shared code from the same private repo, delivered with Copier (.copier-answers.yml), and handbook-update.yml opens a PR when it changes (#283)
  • CI: skill-linter runs as a report-only job, configured in pyproject.toml, and make skill-lint runs it locally. It will replace validate-skills.py, validate-markdown.py and update-docs.py once its current findings are fixed (#279)
  • Docs site: skill page titles lead with the skill’s name, as “Game Developer Agent Skill for Claude Code | Claude Skills” (was “Agent Skills for Claude Code | Game Developer | Claude Skills”), so search results show what the page is about first
  • Dependabot skips the workflows the handbook delivers (handbook-update.yml, docs-site.yml, docs-deploy.yml); the handbook bumps their actions and sends them with each release
  • The shared site packages (Astro, Starlight and the others listed in CLAUDE.md) take their versions from the handbook, which sends them with each release. handbook-update.yml sets up Node and runs copier update --trust for that step
  • CI: skill-linter is the blocking check. The Validate job runs skill-linter release and skill-linter stamp --check, and make validate runs the same two. scripts/validate-skills.py, validate-markdown.py and update-docs.py are removed, and make skill-lint with them. CLAUDE.md and CONTRIBUTING.md describe the skill-linter commands, which make a missing “Use when” clause or Reference Guide an error (closing #288)
  • Plugin: plugin.json lists the ten commands in an object map instead of scanning ./commands/, which Claude Code documents for flat command files only. The commands keep their names, including project:<phase>:<command> for the nested ones. The marketplace entry no longer lists commands (skill-linter P12)
  • CONTRIBUTING.md and CLAUDE.md describe what the validator enforces: the description formula from CLAUDE.md, the section order, a five-step Core Workflow, the Reference Guide table, the Documentation backlink as the last line, and reference files without the old > Reference for: header (#277, closing #273)
  • Plugin and marketplace descriptions: the language, backend and frontend counts are stamped by skill-linter, which corrected them to 8 backend frameworks and 7 frontend/mobile (they said 10 and 6) (#303)
  • QUICKSTART: the language, backend and frontend counts are stamped by skill-linter (SKILL_COUNT:<domain> markers), so stamp --check reports a stale count (#302)
  • Docs site: deploys on every push to main (docs-deploy.yml, shared with the other docs sites) instead of with each release, so site changes go live without a plugin release. release.yml now only creates the GitHub release
  • Docs site: the content sync is shared code, delivered from a private repo that keeps the docs sites in step (site/src/components/site-sync/). site/scripts/sync-content.mjs keeps only this site’s settings, and the skills folder, domains, docs URL and credit come from the skill-linter settings in pyproject.toml ([tool.skill-linter]). llms.txt is now written by astro-seo-graph’s seoGraph(), and lists llms-full.txt under Optional (#295)
  • Docs site: skill page meta descriptions are the skill’s description as written, without the “Claude Skills | |” prefix. Workflow page descriptions end at a sentence instead of being cut at 160 characters (#295)</li> <li>Docs site: the Sites menu lists the Trust Center Directory (#295)</li> <li>CI: merged Dependabot updates for GitHub Actions: <code dir="auto">actions/setup-python</code> 6.3.0 → 7.0.0 (#263) and <code dir="auto">actions/configure-pages</code> 5.0.0 → 6.0.0 (#262). Neither breaking change applies here: the workflows never use setup-python’s removed <code dir="auto">pip-install</code> input, and configure-pages’ move to Node 24 runs on GitHub-hosted runners that support it. <code dir="auto">release.yml</code> runs only on tags, so configure-pages 6.0.0 is first exercised at the next release</li> <li>Docs site: moved to Astro 7.4 and Starlight 0.42, matching writing-with-agents. The README page keeps its body, which Astro 7 had read as frontmatter once the badge HTML was stripped, and the footer keeps the space before the Synergetic Solutions link (#278, closing #226)</li> <li>CI: <code dir="auto">release.yml</code> builds the docs site on Node 24, since Astro 7.4 needs Node 22.23.4 or later (#280)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="removed">Removed</h3><a class="sl-anchor-link" href="#removed"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Removed”</span></a></div> <ul> <li><code dir="auto">.serena/</code>, the Serena project config and memories, which the repo no longer uses; <code dir="auto">.gitignore</code> keeps it out</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed">Fixed</h3><a class="sl-anchor-link" href="#fixed"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li><code dir="auto">code-reviewer</code>, <code dir="auto">security-reviewer</code>, <code dir="auto">spec-miner</code>: <code dir="auto">allowed-tools</code> is space-separated, as the Agent Skills spec requires. <code dir="auto">game-developer</code>, <code dir="auto">embedded-systems</code> and <code dir="auto">swift-expert</code> set <code dir="auto">related-skills: ""</code> instead of leaving it empty, which parsed as null (#289, closing #270)</li> <li>QUICKSTART: the backend count is 8 and lists Django Storages S3, and the frontend list names Vue (JavaScript). <code dir="auto">complete-ticket.md</code>’s <code dir="auto">argument-hint</code> matches its YAML (#287, closing #274)</li> <li>Docs site: <code dir="auto">llms.txt</code> links left out the <code dir="auto">/claude-skills</code> base path, so all 96 returned 404. They are now absolute and include it (#272, #295)</li> <li>Docs site: page titles are taken from the first heading outside code blocks. The README page had lost the <code dir="auto"># Backend Development</code> comment from its install example, because the build took it for the page’s H1 and removed it (#271, #295)</li> <li>Docs site: the home page’s Markdown copy links Getting Started under <code dir="auto">/claude-skills/</code> (#295)</li> <li>Docs site: code blocks keep their frame and horizontal scrolling on pages whose first code block is a Mermaid diagram. Expressive Code puts its stylesheet in the first block, and rendering the diagram removed it; long lines ran into the “On this page” column on Workflow Commands (#284)</li> <li><code dir="auto">common-ground</code> command: moved <code dir="auto">commands/common-ground/COMMAND.md</code> to <code dir="auto">commands/common-ground.md</code> (and its YAML beside it) so Claude Code registers it as <code dir="auto">/fullstack-dev-skills:common-ground</code> instead of <code dir="auto">/fullstack-dev-skills:common-ground:COMMAND</code>. Claude Code names plugin commands after their path under <code dir="auto">commands/</code>; the <code dir="auto">name</code> frontmatter added in #186 only adds a second label (#267, closing #264)</li> <li><code dir="auto">golang-pro</code>, <code dir="auto">websocket-engineer</code>, <code dir="auto">kubernetes-specialist</code>: corrected eight examples. A successful Go pipeline no longer waits for its timeout; fan-out/fan-in and pipeline stages stop on cancellation while idle; <code dir="auto">generics.md</code> uses <code dir="auto">cmp.Ordered</code> and <code dir="auto">golang.org/x/exp/constraints</code> in place of a nonexistent <code dir="auto">constraints</code> import; the WebSocket inactivity timer restarts on each message; presence, queue and scaling examples use the JWT-verified <code dir="auto">socket.userId</code>; the CoreDNS <code dir="auto">cluster2.local</code> server block is top-level; the helm-unittest replica example disables autoscaling and lists the templates it needs; NetworkPolicy troubleshooting no longer deletes every production policy (#268, closing #266)</li> <li><code dir="auto">atlassian-mcp</code>: documented the hosted Atlassian Rovo MCP Server (<code dir="auto">https://mcp.atlassian.com/v2/mcp</code>) as the official option, with Claude Code, Claude Desktop, <code dir="auto">mcp-remote</code> and API-token setup; kept sooperset <code dir="auto">mcp-atlassian</code> for Server/Data Center. Removed the nonexistent <code dir="auto">@anthropic/mcp-atlassian</code> and <code dir="auto">@sooperset/mcp-atlassian</code> packages, corrected the xuanxt package to <code dir="auto">@xuandev/atlassian-mcp</code>, and replaced invented environment variables with the ones sooperset reads (#269, closing #265)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors">Contributors</h3><a class="sl-anchor-link" href="#contributors"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@MannXo: Aligned <code dir="auto">CONTRIBUTING.md</code> and <code dir="auto">CLAUDE.md</code> with what the validator enforces (#277)</li> <li>@ShryukGrandhi: Made six SKILL.md frontmatter values spec-compliant (#289), corrected the QUICKSTART per-domain counts and the <code dir="auto">complete-ticket</code> argument-hint (#287), and proposed the <code dir="auto">llms.txt</code> base-path fix that #295 took over (#286)</li> <li>@s1ngh-code: Reported the <code dir="auto">common-ground</code> command registering as <code dir="auto">/fullstack-dev-skills:common-ground:COMMAND</code> (#264)</li> <li>@felipecrs: Reported that the official Atlassian Rovo MCP Server was missing from <code dir="auto">atlassian-mcp</code> (#265)</li> <li>@CBEPX: Reported the Go, WebSocket and Kubernetes example bugs (#266)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0420---2026-10-16"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.19...v0.4.20">0.4.20</a> - 2026-10-16</h2><a class="sl-anchor-link" href="#0420---2026-10-16"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.20 - 2026-10-16”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="changed-1">Changed</h3><a class="sl-anchor-link" href="#changed-1"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li><code dir="auto">execute-ticket</code>: Phase 2 and the Execution Checklist now run test-first. The agent writes a failing test for the ticket’s acceptance criteria before touching production code, records that it fails for the reason the ticket describes (a test that passes early or fails for another reason is rewritten), makes it pass, then refactors with tests green. Tests live in the repo and run in CI; ad hoc scripts count only as extra evidence. Tickets with no code name a stand-in check (validator, grep, fixture run) and record its RED result too. The completion summary lists each test’s RED result, and <code dir="auto">docs/WORKFLOW_COMMANDS.md</code> and <code dir="auto">docs/workflow/execution-execute-ticket.md</code> match the new order, closing #252</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-1">Fixed</h3><a class="sl-anchor-link" href="#fixed-1"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Skill references: replaced 15 remaining value stand-ins with angle-bracket placeholders, since the Claude plugin directory still blocked <code dir="auto">kubernetes-specialist/references/configuration.md</code> after 0.4.19. Covers SealedSecret ciphertext stubs in <code dir="auto">kubernetes-specialist</code> (<code dir="auto"><sealed-ciphertext></code>), the dummy vLLM <code dir="auto">api_key</code>, mock password encodings and hashes in <code dir="auto">spring-boot-engineer</code> and <code dir="auto">php-pro</code>, a mock Shopify webhook HMAC, base64 pagination cursors in <code dir="auto">api-designer</code>, and a sample SHA-256 in <code dir="auto">legacy-modernizer</code>. The detection regexes in <code dir="auto">security-reviewer/references/secret-scanning.md</code> are unchanged</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0419---2026-10-15"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.18...v0.4.19">0.4.19</a> - 2026-10-15</h2><a class="sl-anchor-link" href="#0419---2026-10-15"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.19 - 2026-10-15”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-1">Added</h3><a class="sl-anchor-link" href="#added-1"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li><code dir="auto">.github/dependabot.yml</code>: weekly Dependabot updates for GitHub Actions, which keep the SHA pins and their version comments current</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-2">Changed</h3><a class="sl-anchor-link" href="#changed-2"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>CI: third-party GitHub Actions in <code dir="auto">validate.yml</code>, <code dir="auto">release.yml</code>, and <code dir="auto">publish-plugin.yml</code> are pinned to full commit SHAs, with the release tag in a trailing comment, instead of mutable tags like <code dir="auto">actions/checkout@v6</code>. Each pin resolves to the commit its tag pointed to, so workflow behavior is unchanged</li> <li>CI: merged the first Dependabot updates for GitHub Actions: <code dir="auto">actions/checkout</code> 6.1.0 → 7.0.1 (#255), <code dir="auto">actions/setup-node</code> 6.5.0 → 7.1.0 (#258), <code dir="auto">actions/upload-pages-artifact</code> 4.0.0 → 5.0.0 (#256), <code dir="auto">actions/deploy-pages</code> 4.0.5 → 5.0.1 (#254), and <code dir="auto">softprops/action-gh-release</code> 2.6.2 → 3.0.3 (#257). None of their breaking changes apply here: the workflows never check out fork PRs under <code dir="auto">pull_request_target</code>, never publish to npm, and run on GitHub-hosted runners that support the Node 24 runtime</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-2">Fixed</h3><a class="sl-anchor-link" href="#fixed-2"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li><code dir="auto">kubernetes-specialist</code>: <code dir="auto">references/configuration.md</code> Secret examples used realistic-looking literals (<code dir="auto">sk-1234567890abcdef</code>, PEM and OpenSSH private-key blocks, a registry <code dir="auto">auth</code> string, sample passwords), which the Claude plugin directory blocked as “Secret in a shipped file”. They are now obvious placeholders such as <code dir="auto"><db-password></code> and <code dir="auto"><PEM-encoded private key></code></li> <li>Skill references: replaced 149 credential-like literals across 63 files in 31 skills with angle-bracket placeholders, so example code cannot be mistaken for real secrets. This covers connection strings with embedded passwords (<code dir="auto">postgres://user:pass@</code>), sample secrets such as <code dir="auto">YourStrong@Passw0rd</code>, AWS’s documented example keys and <code dir="auto">ghp_</code>/<code dir="auto">xoxb-</code>/<code dir="auto">sk_live_</code> samples in <code dir="auto">security-reviewer</code>, CLI flags with literal credentials, test-fixture passwords (<code dir="auto">'Test1234'</code>, <code dir="auto">'SecurePass123!'</code>), and older placeholder styles (<code dir="auto">"your-api-key"</code>, <code dir="auto">YOUR_API_KEY</code>). Paired values, such as a fixture password and the login that uses it, share one placeholder. Spring <code dir="auto">${VAR:default}</code> fallbacks for the database password and JWT secret now have no default</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0418---2026-10-03"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.17...v0.4.18">0.4.18</a> - 2026-10-03</h2><a class="sl-anchor-link" href="#0418---2026-10-03"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.18 - 2026-10-03”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="changed-3">Changed</h3><a class="sl-anchor-link" href="#changed-3"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li><code dir="auto">MODELCLAUDE.md</code>: ported the Subagent Briefs, Writing Style Constraints, and Change Discipline sections from the maintainer’s global CLAUDE.md, synced the 1% Rule wording, added the new attributions, and replaced personal examples with generic ones, closing #239</li> <li>Maintainer credit in skills authored by @jeffallan: the bare <code dir="auto">[Synergetic Solutions](https://synergetic.solutions)</code> line above the Documentation backlink now reads “Maintained by <a href="https://github.com/jeffallan">@jeffallan</a>, Principal Consultant at <a href="https://synergetic.solutions">Synergetic Solutions</a>”, matching the docs site footer. <code dir="auto">syncSkillPages</code> strips the new line; CLAUDE.md’s “Company Backlink” section is now “Maintainer Credit”</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-3">Fixed</h3><a class="sl-anchor-link" href="#fixed-3"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li><code dir="auto">legacy-modernizer</code>: <code dir="auto">metadata.output-format</code> was <code dir="auto">code+analysis</code>, which the validator rejects; now <code dir="auto">analysis-and-code</code>. Removed <code dir="auto">code+analysis</code> from the allowed values listed in CLAUDE.md so the docs match the validator</li> <li><code dir="auto">code-documenter</code>: “When to Use This Skill” was a prose sentence instead of the bullet list every other skill uses; rewritten as bullets drawn from its description</li> <li>ROADMAP header showed “Released January 2026” and “Last updated: February 2026” next to v0.4.17; dates corrected (<code dir="auto">update-docs.py</code> updates the version marker only)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0417---2026-10-03"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.16...v0.4.17">0.4.17</a> - 2026-10-03</h2><a class="sl-anchor-link" href="#0417---2026-10-03"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.17 - 2026-10-03”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-2">Added</h3><a class="sl-anchor-link" href="#added-2"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Docs site footer: every page now ends with “Maintained by @jeffallan, Principal Consultant at Synergetic Solutions”, linking to the GitHub profile and <a href="https://synergetic.solutions">https://synergetic.solutions</a>, via a Starlight <code dir="auto">Footer</code> override that wraps the default footer</li> <li><code dir="auto">plugin</code> distribution branch: <code dir="auto">scripts/build-plugin-dist.sh</code> assembles only what the plugin ships (<code dir="auto">.claude-plugin/plugin.json</code>, <code dir="auto">skills/</code>, <code dir="auto">commands/</code>, <code dir="auto">references/</code>, <code dir="auto">README.md</code>, <code dir="auto">LICENSE</code>) from committed HEAD, and <code dir="auto">.github/workflows/publish-plugin.yml</code> rebuilds the <code dir="auto">plugin</code> branch from it on release tags. The repo root previously shipped as the plugin, including the docs site, scripts, research, and contributor files, which the Claude plugin directory held for review. <code dir="auto">main</code> keeps its layout so external links into <code dir="auto">skills/</code> keep working. Covered by <code dir="auto">scripts/test-build-plugin-dist.sh</code>, now run in CI and <code dir="auto">make test</code> (#242)</li> <li><code dir="auto">CLAUDE.md</code>: “When Accepting Contributions” section documenting the maintainer procedure for external issues and PRs (the <code dir="auto">gratitude</code> label on every contribution, fit discussion before merge, squash-merge subject format, separate changelog commit under <code dir="auto">[Unreleased]</code>, count sync in the same push, and the <code dir="auto">### Contributors</code> credit format at release). Previously this lived only in git history</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-4">Changed</h3><a class="sl-anchor-link" href="#changed-4"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Skill metadata: added <code dir="auto">metadata.company: https://synergetic.solutions</code> to the 66 skills authored by @jeffallan (contributed skills unchanged), and documented the optional <code dir="auto">company</code> field in CLAUDE.md. Those skills also end with a <code dir="auto">[Synergetic Solutions](https://synergetic.solutions)</code> line directly above the Documentation backlink, so aggregators that render <code dir="auto">SKILL.md</code> (skills.sh, etc.) show a company link; <code dir="auto">syncSkillPages</code> strips it from the docs site build like the Documentation backlink</li> <li><code dir="auto">marketplace.json</code>: the plugin entry now installs from the <code dir="auto">plugin</code> branch (<code dir="auto">{"source": "github", "repo": "jeffallan/claude-skills", "ref": "plugin"}</code>) instead of the repo root, so <code dir="auto">/plugin install</code> fetches only the shipped files (467 files, down from the full repository). The marketplace name and install command are unchanged (#242)</li> <li><code dir="auto">common-ground</code> command: moved its three reference files from <code dir="auto">commands/common-ground/references/</code> to <code dir="auto">references/common-ground/</code> and pointed <code dir="auto">COMMAND.md</code> at them via <code dir="auto">${CLAUDE_PLUGIN_ROOT}</code>. Files under <code dir="auto">commands/</code> are treated as commands (the plugin directory flagged them for missing frontmatter), and a bare relative <code dir="auto">references/</code> path in a command body has no documented base directory to resolve against, closing #244</li> <li><code dir="auto">security-reviewer</code> and <code dir="auto">spec-miner</code>: removed <code dir="auto">Bash</code> from <code dir="auto">allowed-tools</code>. An unscoped <code dir="auto">Bash</code> entry pre-approves every shell command while the skill is active, which the Claude plugin directory holds for policy review. spec-miner never runs shell commands; security-reviewer’s scanners (and active tools such as nmap and sqlmap) now go through normal per-command user approval, closing #243</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-4">Fixed</h3><a class="sl-anchor-link" href="#fixed-4"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Plugin metadata: <code dir="auto">marketplace.json</code> listed <code dir="auto">author.email</code> as <code dir="auto">github@jeffallan</code>, which is not a valid address; replaced with a real contact address plus <code dir="auto">author.url</code>. <code dir="auto">plugin.json</code> now sets the same <code dir="auto">author.email</code> and <code dir="auto">author.url</code>, plus <code dir="auto">homepage</code>, and both manifests point <code dir="auto">homepage</code> at the docs site. <code dir="auto">plugin.json</code> also sets the Claude plugin directory listing fields <code dir="auto">documentationUrl</code>, <code dir="auto">supportUrl</code> (GitHub issues), and <code dir="auto">privacyPolicyUrl</code> (#246)</li> <li><code dir="auto">flutter-expert/SKILL.md</code>: the Riverpod provider example used <code dir="auto">StateNotifierProvider</code>/<code dir="auto">StateNotifier</code>, legacy since Riverpod 2.0 and contradicting the skill’s own <code dir="auto">references/riverpod-state.md</code>; replaced with the equivalent <code dir="auto">NotifierProvider</code>/<code dir="auto">Notifier</code> pattern and updated the troubleshooting table to match (#237)</li> <li>Plugin install commands in README, QUICKSTART, the docs site landing page, and generated <code dir="auto">llms.txt</code> used <code dir="auto">fullstack-dev-skills@jeffallan</code>, which fails because the marketplace is declared as <code dir="auto">fullstack-dev-skills</code>; corrected to <code dir="auto">fullstack-dev-skills@fullstack-dev-skills</code>, including the QUICKSTART uninstall troubleshooting step, closing #234 (#236)</li> <li>README banner (capsule-render URL) still displayed 66 skills after the v0.4.16 release; the counts are URL-encoded inside the image URL where no <code dir="auto"><!-- SKILL_COUNT --></code> marker can live, so <code dir="auto">update-docs.py</code> never touched them. The script now rewrites the banner’s <code dir="auto">desc=</code> parameter from computed counts</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-1">Contributors</h3><a class="sl-anchor-link" href="#contributors-1"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@shijian0-eng: Corrected the marketplace name in plugin install commands across the README, QUICKSTART, and docs site (#236)</li> <li>@johnjehiel: Reported the failing plugin install command (#234)</li> <li>@KoreaMango: Replaced the legacy Riverpod <code dir="auto">StateNotifier</code> example in <code dir="auto">flutter-expert</code> with the modern <code dir="auto">Notifier</code> pattern (#237)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0416---2026-08-07"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.15...v0.4.16">0.4.16</a> - 2026-08-07</h2><a class="sl-anchor-link" href="#0416---2026-08-07"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.16 - 2026-08-07”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-3">Added</h3><a class="sl-anchor-link" href="#added-3"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>New skill: <code dir="auto">django-storages-s3</code> — production AWS S3 file storage for Django with <code dir="auto">django-storages</code> and <code dir="auto">boto3</code>. Covers the Django 4.2+ <code dir="auto">STORAGES</code> dict, public/private custom backends, presigned GET/POST URLs, CloudFront integration, a least-privilege IAM policy, and S3 mocking (<code dir="auto">InMemoryStorage</code>/<code dir="auto">moto</code>). Cross-referenced with <code dir="auto">django-expert</code> (#218)</li> <li><code dir="auto">ReferencePathChecker</code> in <code dir="auto">scripts/validate-skills.py</code>: validates that file paths cited in skill markdown (backtick paths and markdown links) resolve relative to the containing file or the skill root. Broken paths previously failed silently when an agent tried to load deferred reference content; this class of bug has now recurred across several releases and is guarded automatically in CI and <code dir="auto">make validate</code></li> <li><code dir="auto">devops-engineer</code>: new <code dir="auto">references/gitlab-ci.md</code> covering GitLab CI/CD best practices (pipeline dedup via <code dir="auto">workflow:rules</code>, <code dir="auto">needs:</code> DAG, cache vs artifacts, CI/CD components, environments, OIDC secrets, runner isolation, MR-widget reporting) plus a routing-table row; the GitLab counterpart to the existing GitHub Actions reference (#219)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-5">Changed</h3><a class="sl-anchor-link" href="#changed-5"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li><code dir="auto">devops-engineer/references/gitlab-ci.md</code>: post-merge patch replacing the kaniko build example with BuildKit rootless (<code dir="auto">moby/buildkit:rootless</code> + <code dir="auto">buildctl-daemonless.sh</code> with registry cache) and noting kaniko’s archived status in the core principles; kaniko is unmaintained and should not be the recommended build path</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-5">Fixed</h3><a class="sl-anchor-link" href="#fixed-5"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li><code dir="auto">vue-expert-js/SKILL.md</code>: three shared-Vue reference paths pointed at <code dir="auto">vue-expert/references/*.md</code>, which does not resolve from the skill directory; corrected to <code dir="auto">../vue-expert/references/*.md</code> (#225)</li> <li><code dir="auto">react-expert/references/migration-class-to-modern.md</code>: self-referencing path <code dir="auto">react-expert/references/server-components.md</code> corrected to <code dir="auto">references/server-components.md</code> (#225)</li> <li><code dir="auto">fastapi-expert/references/migration-from-django.md</code>: cross-reference to legacy-modernizer used an absolute-style path (<code dir="auto">/skills/legacy-modernizer/...</code>) that resolves nowhere; corrected to <code dir="auto">../legacy-modernizer/references/migration-strategies.md</code>. Found by the new <code dir="auto">ReferencePathChecker</code> audit</li> <li><code dir="auto">nestjs-expert/references/migration-from-express.md</code>: cross-reference to legacy-modernizer’s strangler-fig reference was a hardcoded contributor-machine absolute path (<code dir="auto">/Users/.../claude-skills/skills/...</code>); corrected to <code dir="auto">../legacy-modernizer/references/strangler-fig-pattern.md</code>. Caught by <code dir="auto">ReferencePathChecker</code> on CI’s clean runner; the checker now rejects absolute paths unconditionally so a stale local clone can never mask one</li> <li><code dir="auto">site/package-lock.json</code>: applied <code dir="auto">npm audit fix</code> to clear docs-site dependency vulnerabilities (14 findings down to 9; the remainder stem from advisories published after the fix was cut). Verified via clean <code dir="auto">npm ci</code>, <code dir="auto">npm audit</code>, and a successful 98-page site build before merge (#220)</li> <li><code dir="auto">site/package-lock.json</code>: follow-up fresh <code dir="auto">npm audit fix</code> clearing post-July advisories (9 findings down to 5). The remaining 5 require a semver-major Astro 7 upgrade (cascading @astrojs/starlight and @astrojs/mdx majors) and are dev-server/SSR-context advisories with low exposure for a statically built site; tracked as separate upgrade work</li> <li><code dir="auto">rag-architect/SKILL.md</code>: reranking example instantiated the Cohere client with a hard-coded <code dir="auto">"YOUR_API_KEY"</code> placeholder; now reads <code dir="auto">COHERE_API_KEY</code> from the environment with a note on secrets handling, closing #210 (#216)</li> <li><code dir="auto">terraform-engineer/SKILL.md</code>: core workflow allowed proceeding from <code dir="auto">terraform plan</code> straight to <code dir="auto">terraform apply</code>; now requires presenting a plan summary (highlighting destructive actions) and receiving explicit user approval before apply, refusing when approval is withheld, closing #211 (#213)</li> <li><code dir="auto">devops-engineer/SKILL.md</code>: the “never deploy to production without explicit approval” constraint was not operationalized in the core workflow; the deploy step now determines the target environment and, for production or customer-facing targets, presents the deployment summary and rollback plan and requires explicit user approval before running deployment commands, closing #196 and #212</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-2">Contributors</h3><a class="sl-anchor-link" href="#contributors-2"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@vasugarg09: Fixed broken relative reference paths in <code dir="auto">vue-expert-js</code> and <code dir="auto">react-expert</code> (#225)</li> <li>@chgreer1070: Patched docs-site dependency vulnerabilities via <code dir="auto">npm audit fix</code> (#220)</li> <li>@kasymovpost: GitLab CI/CD best-practices reference for devops-engineer (#219)</li> <li>@awais786: New <code dir="auto">django-storages-s3</code> skill: production S3 file storage for Django (#218)</li> <li>@snvtac: Replaced hard-coded Cohere API key placeholder in <code dir="auto">rag-architect</code> with environment lookup (#216)</li> <li>@SergiuLupaiescu: Added user-approval gate between <code dir="auto">terraform plan</code> and <code dir="auto">apply</code> in <code dir="auto">terraform-engineer</code> (#213)</li> <li>@specterslient95-lgtm: Reported the missing plan/apply approval gate (#211) and the non-operationalized production-deploy constraint (#196, #212)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0415---2026-05-20"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.14...v0.4.15">0.4.15</a> - 2026-05-20</h2><a class="sl-anchor-link" href="#0415---2026-05-20"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.15 - 2026-05-20”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-6">Fixed</h3><a class="sl-anchor-link" href="#fixed-6"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li><code dir="auto">commands/project/execution/complete-ticket.md</code>: corrected YAML frontmatter that failed strict parsing in oh-my-pi and the GitHub renderer. Two issues: unquoted double quotes around <code dir="auto">"In Review"</code> were interpreted as a quoted-string opener with trailing junk, and <code dir="auto">argument-hint: [ticket-key] (optional...)</code> led with <code dir="auto">[</code> which opens a flow-style sequence and then failed on the prose tail. Wrapped both values in matching outer quotes (#193)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="added-4">Added</h3><a class="sl-anchor-link" href="#added-4"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li><code dir="auto">CommandFrontmatterChecker</code> in <code dir="auto">scripts/validate-skills.py</code>: strict-parses YAML frontmatter on every <code dir="auto">commands/**/*.md</code> with PyYAML (no fallback to the lenient simple parser, which had been masking these bugs). Runs as part of the workflow validation pass.</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-3">Contributors</h3><a class="sl-anchor-link" href="#contributors-3"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@rlex: Reported broken YAML frontmatter in <code dir="auto">complete-ticket.md</code> after the <code dir="auto">0.4.14</code> release surfaced the parse error in oh-my-pi (#193)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0414---2026-05-01"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.13...v0.4.14">0.4.14</a> - 2026-05-01</h2><a class="sl-anchor-link" href="#0414---2026-05-01"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.14 - 2026-05-01”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-7">Fixed</h3><a class="sl-anchor-link" href="#fixed-7"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li><code dir="auto">postgres-pro</code> reference docs: corrected invalid column references in <code dir="auto">pg_stat_user_tables</code> and <code dir="auto">pg_stat_user_indexes</code> query examples (<code dir="auto">tablename</code> → <code dir="auto">relname</code>, <code dir="auto">indexname</code> → <code dir="auto">indexrelname</code>) so the snippets actually run. Hardened identifier assembly with <code dir="auto">format('%I.%I', schemaname, relname)</code> for safety against quoted/case-sensitive identifiers. Clarified the <code dir="auto">VACUUM FREEZE</code> comment to note it operates on the current database, not the entire cluster (#191)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-4">Contributors</h3><a class="sl-anchor-link" href="#contributors-4"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@sobstel: Fix invalid <code dir="auto">pg_stat_*</code> column references and <code dir="auto">VACUUM FREEZE</code> scope comment in <code dir="auto">postgres-pro</code> references (#191)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0413---2026-04-28"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.12...v0.4.13">0.4.13</a> - 2026-04-28</h2><a class="sl-anchor-link" href="#0413---2026-04-28"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.13 - 2026-04-28”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-5">Added</h3><a class="sl-anchor-link" href="#added-5"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Canonical Documentation backlink at the bottom of every <code dir="auto">SKILL.md</code> linking to the docs site (<code dir="auto">[Documentation](https://jeffallan.github.io/claude-skills/skills/{domain}/{skill-name}/)</code>), so skill aggregators (skills.sh, etc.) that consume raw source markdown render a real <code dir="auto"><a href></code> backlink to the docs site for SEO. The docs build pipeline (<code dir="auto">syncSkillPages</code> in <code dir="auto">site/scripts/sync-content.mjs</code>) strips this line at build time, so the docs site, public markdown mirrors, <code dir="auto">llms.txt</code>, and <code dir="auto">llms-full.txt</code> render cleanly without self-references. Documented the convention in CLAUDE.md.</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0412---2026-04-21"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.11...v0.4.12">0.4.12</a> - 2026-04-21</h2><a class="sl-anchor-link" href="#0412---2026-04-21"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.12 - 2026-04-21”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-6">Added</h3><a class="sl-anchor-link" href="#added-6"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Curated cross-references for 7 hub skills: 22 back-references added for agent routing quality (closes #68) <ul> <li><code dir="auto">devops-engineer</code>: terraform-engineer, kubernetes-specialist, sre-engineer, monitoring-expert, security-reviewer</li> <li><code dir="auto">fullstack-guardian</code>: secure-code-guardian, architecture-designer, react-expert, typescript-pro</li> <li><code dir="auto">test-master</code>: debugging-wizard, code-reviewer, feature-forge</li> <li><code dir="auto">database-optimizer</code>: postgres-pro, graphql-architect</li> <li><code dir="auto">security-reviewer</code>: api-designer, mcp-developer</li> <li><code dir="auto">architecture-designer</code>: microservices-architect, code-reviewer</li> <li><code dir="auto">kubernetes-specialist</code>: terraform-engineer, security-reviewer, chaos-engineer</li> </ul> </li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-6">Changed</h3><a class="sl-anchor-link" href="#changed-6"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Bumped 7 hub skills from v1.1.0 → v1.1.1 (cross-reference updates)</li> <li>Added Prettier markdown formatting to pre-commit hooks, CI, and Makefile — covers <code dir="auto">skills/</code>, <code dir="auto">docs/</code>, and root <code dir="auto">.md</code> files; excludes <code dir="auto">commands/</code> (prompt templates) (#158)</li> <li>Documented linting and formatting conventions in CONTRIBUTING.md with Make targets (#158)</li> <li>Added explicit <code dir="auto">name:</code> frontmatter to 9 workflow commands across <code dir="auto">retrospectives/</code>, <code dir="auto">discovery/</code>, <code dir="auto">planning/</code>, and <code dir="auto">execution/</code> directories — documents intent and protects against filename renames (filename-derived fallback was already working correctly) (#182, #183, #184, #185)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-8">Fixed</h3><a class="sl-anchor-link" href="#fixed-8"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>README: restored the broken link to the Workflow Commands Reference docs. The paragraph began with <code dir="auto"><!-- WORKFLOW_COUNT --></code>, which CommonMark parses as an HTML block and disables inline markdown, causing the embedded link to render as literal text (#180)</li> <li><code dir="auto">commands/common-ground/COMMAND.md</code>: added explicit <code dir="auto">name: common-ground</code> so the slash command registers as <code dir="auto">/common-ground</code>. Without it, Claude Code derived the name from the filename (<code dir="auto">COMMAND.md</code>) and registered it as <code dir="auto">/COMMAND</code> (#186)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-5">Contributors</h3><a class="sl-anchor-link" href="#contributors-5"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@modir: Fix broken Workflow Commands docs link in README (#180)</li> <li>@xiaolai: Add missing <code dir="auto">name:</code> frontmatter fields across workflow commands (#182, #183, #184, #185, #186)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0411---2026-03-23"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.10...v0.4.11">0.4.11</a> - 2026-03-23</h2><a class="sl-anchor-link" href="#0411---2026-03-23"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.11 - 2026-03-23”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-7">Added</h3><a class="sl-anchor-link" href="#added-7"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Context management reference (<code dir="auto">prompt-engineer/references/context-management.md</code>) covering attention budgets, lost-in-the-middle mitigation, four-bucket context tiering, KV-cache optimization, observation masking, and degradation metrics (#168)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-7">Changed</h3><a class="sl-anchor-link" href="#changed-7"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Updated <code dir="auto">prompt-engineer</code> skill (v1.1.0 → v1.2.0): added context management routing, expanded triggers, added <code dir="auto">rag-architect</code> and <code dir="auto">debugging-wizard</code> to related skills</li> <li>Total reference files: 365 → 366</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-6">Contributors</h3><a class="sl-anchor-link" href="#contributors-6"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@Genius-apple: Context management content adapted from the context-engineer skill submission (#168)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="0410---2026-03-06"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.9...v0.4.10">0.4.10</a> - 2026-03-06</h2><a class="sl-anchor-link" href="#0410---2026-03-06"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.10 - 2026-03-06”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="changed-8">Changed</h3><a class="sl-anchor-link" href="#changed-8"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Improved skill quality across 65 skills via Tessl review optimization (#172) <ul> <li>Expanded descriptions with capability verbs (what it does + when to use it)</li> <li>Removed redundant “Role Definition” and “When to Use This Skill” sections</li> <li>Added structured workflow validation checkpoints with failure recovery loops</li> <li>Added inline code examples demonstrating key patterns per technology</li> <li>Tightened MUST DO / MUST NOT DO constraints with rationale</li> <li>Removed “Knowledge Reference” keyword lists (absorbed into descriptions and triggers)</li> </ul> </li> <li>Narrowed Description Trap from “trigger-only” to “no process steps” — capability verbs now permitted in descriptions per AgentSkills.io spec</li> <li>Updated description format to <code dir="auto">[Brief capability statement]. Use when [triggering conditions].</code></li> <li>Validator now checks <code dir="auto">"Use when" in description</code> instead of <code dir="auto">startswith("Use when")</code></li> <li>Standardized README links from HTML to Markdown, improved Quick Start readability (#166)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-9">Fixed</h3><a class="sl-anchor-link" href="#fixed-9"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Fixed stale counts on docs site landing page (65 → 66 skills, 357 → 365 references)</li> <li>Added Astro site files to <code dir="auto">update-docs.py</code> release automation so counts stay in sync</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-7">Contributors</h3><a class="sl-anchor-link" href="#contributors-7"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@popey: Improve skill quality across 65 skills via Tessl review (#172)</li> <li>@hasan613: Standardize README links and improve Quick Start section (#166)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="049---2026-02-24"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.8...v0.4.9">0.4.9</a> - 2026-02-24</h2><a class="sl-anchor-link" href="#049---2026-02-24"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.9 - 2026-02-24”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-8">Added</h3><a class="sl-anchor-link" href="#added-8"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Issue linking documentation in <code dir="auto">atlassian-mcp/references/jira-queries.md</code> with parameter semantics, code examples, and anti-patterns (#163)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-9">Changed</h3><a class="sl-anchor-link" href="#changed-9"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Updated <code dir="auto">php-pro</code> Symfony console command example to use framework’s built-in exception handling (#164)</li> <li>Added Framework Idiom Principle to CLAUDE.md reference file standards</li> <li>Added inline <code dir="auto">jira_create_issue_link</code> parameter hints to <code dir="auto">approve-synthesis</code> and <code dir="auto">create-implementation-plan</code> commands (#163)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-10">Fixed</h3><a class="sl-anchor-link" href="#fixed-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Fixed reversed Jira “Blocks” link parameters — <code dir="auto">inward_issue_key</code> is the blocker, <code dir="auto">outward_issue_key</code> is the blocked issue (#163)</li> <li>Fixed nested code block rendering in <code dir="auto">prompt-engineer</code> skill’s CoT example (#160)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-8">Contributors</h3><a class="sl-anchor-link" href="#contributors-8"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@wiretail: Report and document reversed Jira issue link semantics (#163)</li> <li>@Big-Shark: Update console example in symfony-patterns (#164)</li> <li>@fiberproduct: Fix nested code block formatting in prompt-patterns.md (#160)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="048---2026-02-17"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.7...v0.4.8">0.4.8</a> - 2026-02-17</h2><a class="sl-anchor-link" href="#048---2026-02-17"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.8 - 2026-02-17”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-9">Added</h3><a class="sl-anchor-link" href="#added-9"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>🎉 <strong>Milestone:</strong> Appeared on <a href="https://github.com/Jeffallan/claude-skills/discussions/148">GitHub Weekly Trending</a> repos (#8 overall)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-10">Changed</h3><a class="sl-anchor-link" href="#changed-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Added Agent Skills CLI as alternative installation method in QUICKSTART.md (#151)</li> <li>Upgraded GitHub Actions for Node 24 compatibility (#146) <ul> <li><code dir="auto">actions/checkout</code> v4 → v6</li> <li><code dir="auto">actions/setup-node</code> v4 → v6</li> <li><code dir="auto">actions/setup-python</code> v5 → v6</li> </ul> </li> <li>Upgraded <code dir="auto">actions/upload-pages-artifact</code> v3 → v4 (#147)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-11">Fixed</h3><a class="sl-anchor-link" href="#fixed-11"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Removed incorrect Python/Pydantic V1 reference from <code dir="auto">php-pro</code> skill MUST NOT DO section (#154)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-9">Contributors</h3><a class="sl-anchor-link" href="#contributors-9"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@salmanmkc: Upgrade GitHub Actions for Node 24 compatibility (#146)</li> <li>@salmanmkc: Upgrade GitHub Actions to latest versions (#147)</li> <li>@Karanjot786: Add Agent Skills CLI installation method (#151)</li> <li>@Aivanaso: Remove copy-paste error from php-pro skill (#154)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="047---2026-02-08"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.6...v0.4.7">0.4.7</a> - 2026-02-08</h2><a class="sl-anchor-link" href="#047---2026-02-08"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.7 - 2026-02-08”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-10">Added</h3><a class="sl-anchor-link" href="#added-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Bidirectional cross-reference validation in <code dir="auto">validate-skills.py</code> (closes #100) <ul> <li><code dir="auto">CrossRefChecker</code> class: warns when skill A references B but B doesn’t reference A</li> <li>Orphan detection: warns about skills with no incoming or outgoing references</li> <li>New <code dir="auto">--check crossrefs</code> CLI option for isolated cross-reference validation</li> <li>All issues are WARNING severity (advisory, won’t fail CI)</li> </ul> </li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-11">Changed</h3><a class="sl-anchor-link" href="#changed-11"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Upgraded Code of Conduct to Contributor Covenant v2.1 (closes #131)</li> <li>Refactored <code dir="auto">CrossRefChecker._build_graph()</code> to reuse <code dir="auto">BaseChecker._extract_frontmatter()</code></li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="046---2026-02-08"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.5...v0.4.6">0.4.6</a> - 2026-02-08</h2><a class="sl-anchor-link" href="#046---2026-02-08"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.6 - 2026-02-08”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-11">Added</h3><a class="sl-anchor-link" href="#added-11"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li><code dir="auto">the-fool</code> — domain-agnostic critical reasoning skill with 5 modes (Socratic questioning, dialectic synthesis, pre-mortem, red team, evidence audit) <ul> <li>Two-step <code dir="auto">AskUserQuestion</code> mode selection for 5 modes within 4-option constraint</li> <li>6 reference files: mode-selection-guide, socratic-questioning, dialectic-synthesis, pre-mortem-analysis, red-team-adversarial, evidence-audit</li> <li>Added to Workflow category in SKILLS_GUIDE.md</li> <li>Added Critical Thinking decision tree and Decision Validation workflow</li> </ul> </li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-12">Fixed</h3><a class="sl-anchor-link" href="#fixed-12"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Fixed <code dir="auto">sync-content.mjs</code> regex in <code dir="auto">stripHtmlCommentTags</code> not stripping version markers (dots in <code dir="auto">0.4.x</code> didn’t match <code dir="auto">\w+</code>)</li> <li>Fixed social preview generation command in CLAUDE.md release checklist (added <code dir="auto">npm install --no-save puppeteer</code>)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="045---2026-02-05"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.4...v0.4.5">0.4.5</a> - 2026-02-05</h2><a class="sl-anchor-link" href="#045---2026-02-05"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.5 - 2026-02-05”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-12">Added</h3><a class="sl-anchor-link" href="#added-12"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Added “Mentioned in Awesome Claude Code” badge to README (closes #138)</li> <li>Added Awesome Claude Code stat to social preview</li> <li>Added <code dir="auto">scripts/validate-markdown.py</code> for detecting markdown parsing errors <ul> <li>Checks for HTML comments breaking tables, unclosed code blocks, missing table separators, column count mismatches</li> <li>Integrated into CI workflow and release checklist</li> </ul> </li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-13">Fixed</h3><a class="sl-anchor-link" href="#fixed-13"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Fixed markdown bold formatting rendering as raw <code dir="auto">**</code> in README.md (#139)</li> <li>Fixed minor syntax error in skill YAML frontmatter (#137)</li> <li>Fixed incorrect JQL syntax in epic planning workflows (<code dir="auto">Parent =</code> → <code dir="auto">"Epic Link" =</code>) <ul> <li>Affected: <code dir="auto">create-epic-plan</code>, <code dir="auto">create-epic-discovery</code>, <code dir="auto">WORKFLOW_COMMANDS.md</code></li> </ul> </li> <li>Fixed markdown parsing errors across skill files: <ul> <li>Moved HTML comments above tables in <code dir="auto">code-reviewer</code> and <code dir="auto">debugging-wizard</code> skills</li> <li>Added missing closing code fences in <code dir="auto">incident-chaos</code>, <code dir="auto">mysql-tuning</code>, <code dir="auto">postgresql-tuning</code></li> <li>Escaped pipe character in <code dir="auto">php-pro/modern-php-features.md</code> table</li> </ul> </li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-10">Contributors</h3><a class="sl-anchor-link" href="#contributors-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@hesreallyhim: Featured in Awesome Claude Code (#138)</li> <li>@hesreallyhim: Fix formatting and links in README.md (#139)</li> <li>@hesreallyhim: fix: minor syntax error in .md yaml frontmatter (#137)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="044---2026-02-03"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.3...v0.4.4">0.4.4</a> - 2026-02-03</h2><a class="sl-anchor-link" href="#044---2026-02-03"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.4 - 2026-02-03”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-14">Fixed</h3><a class="sl-anchor-link" href="#fixed-14"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Replaced CONTRIBUTORS.md reference with GitHub contributors link in CONTRIBUTING.md (closes #130)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-12">Changed</h3><a class="sl-anchor-link" href="#changed-12"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Refactored <code dir="auto">validate-skills.py</code> with Python 3.11+ best practices (closes #133) <ul> <li>Extracted <code dir="auto">FrontmatterResult</code> dataclass and <code dir="auto">_extract_frontmatter()</code> helper to eliminate duplicate parsing</li> <li>Created <code dir="auto">MetadataEnumChecker</code> generic base class for enum field validators</li> <li>Compiled regex patterns at module level for performance</li> <li>Modernized type hints (<code dir="auto">X | None</code> syntax) and added <code dir="auto">DFSColor</code> IntEnum</li> </ul> </li> <li><code dir="auto">update-docs.py</code> now auto-bumps version in ROADMAP “Last updated” line</li> <li>Added <code dir="auto">__pycache__/</code> to <code dir="auto">.gitignore</code></li> <li>Added AdaL CLI (SylphAI) to supported agents table (#135)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-11">Contributors</h3><a class="sl-anchor-link" href="#contributors-11"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@liyin2015: docs: add AdaL CLI to supported agents (#135)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="043---2026-02-03"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.2...v0.4.3">0.4.3</a> - 2026-02-03</h2><a class="sl-anchor-link" href="#043---2026-02-03"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.3 - 2026-02-03”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-13">Added</h3><a class="sl-anchor-link" href="#added-13"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Documentation site built with Astro Starlight (<code dir="auto">site/</code>) (closes #106) <ul> <li>Custom GitHub stars component with live API fetch</li> <li>View as Markdown toggle for skill pages</li> <li>SEO metadata improvements</li> </ul> </li> <li>Automated release workflow <code dir="auto">.github/workflows/release.yml</code> (closes #107) <ul> <li>Triggers on version tag push (<code dir="auto">v*</code>)</li> <li>Validates using reusable workflow</li> <li>Extracts release notes from CHANGELOG.md</li> <li>Builds and deploys docs site to GitHub Pages</li> <li>Creates GitHub Release with extracted notes</li> </ul> </li> <li>YAML workflow definitions and DAG manifest for project commands (<code dir="auto">commands/</code>) (closes #124)</li> <li><code dir="auto">related-skills</code> field in skill frontmatter metadata (closes #69)</li> <li><code dir="auto">scripts/migrate-frontmatter.py</code> for bulk skill metadata updates</li> <li>Local skill development guide (<code dir="auto">docs/local_skill_development.md</code>)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-13">Changed</h3><a class="sl-anchor-link" href="#changed-13"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Restructured primary docs, workflow docs, and skill files</li> <li>Rewrote ROADMAP.md with re-triaged GitHub issues</li> <li>Extended <code dir="auto">validate-skills.py</code> with related-skills validation</li> <li>Documentation tone consistency improvements (closes #132)</li> <li>Fixed broken links and missing references in cloud-architect skill</li> <li>Added links in SKILLS_GUIDE.md</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="042---2026-01-29"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.1...v0.4.2">0.4.2</a> - 2026-01-29</h2><a class="sl-anchor-link" href="#042---2026-01-29"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.2 - 2026-01-29”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-14">Added</h3><a class="sl-anchor-link" href="#added-14"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>4 new reference files for vue-expert-js skill (closes #97): <ul> <li>composables-patterns.md: Custom composables, ref/reactive patterns, lifecycle hooks</li> <li>component-architecture.md: Props, emits, slots, provide/inject, dynamic components</li> <li>state-management.md: Pinia setup, store patterns, reactive state</li> <li>testing-patterns.md: Vitest/Vue Test Utils, component mounting, mocking</li> </ul> </li> <li><code dir="auto">version.json</code> for centralized version and count management</li> <li><code dir="auto">scripts/update-docs.py</code> for automated documentation updates with marker-based replacement</li> <li><code dir="auto">scripts/validate-skills.py</code> for skill YAML and reference file validation</li> <li>HTML comment markers in documentation files for explicit count replacement (fixes #99)</li> <li><code dir="auto">AskUserQuestions</code> tool integration in feature-forge skill for structured elicitation during discovery, interview, and validation phases (closes #102)</li> <li>Multi-agent pre-discovery pattern in feature-forge for launching parallel Task subagents with domain-specific skills before the specification workshop (closes #102)</li> <li><code dir="auto">discovery-for-feature-forge.md</code> example prompt for multi-agent discovery workflow</li> <li>Reusable GitHub Actions validation workflow <code dir="auto">.github/workflows/validate.yml</code> (closes #105)</li> <li>CI workflow <code dir="auto">.github/workflows/ci.yml</code> triggering on PRs and pushes to main (closes #105)</li> <li>CI status badge in README</li> <li>Bloc state management reference for flutter-expert skill (#117)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-14">Changed</h3><a class="sl-anchor-link" href="#changed-14"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Total reference files: 351 → 356</li> <li>Clarified <code dir="auto">npx add-skill</code> installation and slash command limitations in README (#96)</li> <li><code dir="auto">update-docs.py</code> now uses <code dir="auto">...</code> tags instead of broad regex patterns</li> <li>Documentation files (README.md, QUICKSTART.md, ROADMAP.md, social-preview.html) updated with markers</li> <li>feature-forge interview flow rewritten to alternate between structured <code dir="auto">AskUserQuestions</code> and open-ended elicitation</li> <li>feature-forge constraints updated to require <code dir="auto">AskUserQuestions</code> for structured choices</li> <li>Minor README tidying</li> <li>Non-standard headers (<code dir="auto">Reference for:</code>, <code dir="auto">Load when:</code>) removed from 337 reference files (closes #104)</li> <li><code dir="auto">non-standard-headers</code> validation promoted from warning to error in <code dir="auto">validate-skills.py</code></li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-15">Fixed</h3><a class="sl-anchor-link" href="#fixed-15"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Pattern matching in <code dir="auto">update-docs.py</code> no longer incorrectly matches inline comments like <code dir="auto"># 6 reference files</code> in project structure trees (fixes #99)</li> <li>Missing version comparison link for v0.4.1 in CHANGELOG (#116)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="contributors-12">Contributors</h3><a class="sl-anchor-link" href="#contributors-12"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Contributors”</span></a></div> <ul> <li>@thomassamoul: feat: add bloc state management to flutter expert (#117)</li> <li>@Coopyrightdmin: fix: add missing version link for v0.4.1 (#116)</li> <li>@Chidwan3578: docs: clarify npx add-skill installation (#96)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="041---2026-01-19"><a href="https://github.com/jeffallan/claude-skills/compare/v0.4.0...v0.4.1">0.4.1</a> - 2026-01-19</h2><a class="sl-anchor-link" href="#041---2026-01-19"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.1 - 2026-01-19”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-15">Added</h3><a class="sl-anchor-link" href="#added-15"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>50 new reference files for 10 skills: <ul> <li>atlassian-mcp (5 files): MCP server setup, Jira queries, Confluence operations, authentication, workflows</li> <li>fine-tuning-expert (5 files): LoRA/PEFT, dataset preparation, hyperparameters, evaluation, deployment</li> <li>ml-pipeline (5 files): Feature engineering, training pipelines, experiment tracking, orchestration, validation</li> <li>pandas-pro (5 files): DataFrame operations, data cleaning, aggregation, merging, performance</li> <li>prompt-engineer (5 files): Prompt patterns, optimization, evaluation frameworks, structured outputs, system prompts</li> <li>rag-architect (5 files): Vector databases, embedding models, chunking strategies, retrieval optimization, evaluation</li> <li>salesforce-developer (5 files): Apex development, LWC, SOQL/SOSL, integrations, deployment</li> <li>shopify-expert (5 files): Liquid templating, Storefront API, app development, checkout, performance</li> <li>spark-engineer (5 files): Spark SQL/DataFrames, RDD operations, partitioning, performance tuning, streaming</li> <li>wordpress-pro (5 files): Theme development, plugin architecture, Gutenberg blocks, hooks/filters, security</li> </ul> </li> <li>Release checklist validation step in CLAUDE.md for YAML and reference integrity checks</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-16">Fixed</h3><a class="sl-anchor-link" href="#fixed-16"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>YAML parsing errors in 53 skills caused by unescaped <code dir="auto">Keywords:</code> pattern in descriptions (fixes #93)</li> <li>Missing reference files for 10 skills that had routing tables but no actual reference files (fixes #92)</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-15">Changed</h3><a class="sl-anchor-link" href="#changed-15"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Total reference files: 304 → 351</li> <li>Skill descriptions now follow trigger-only format consistently</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="040---2026-01-18"><a href="https://github.com/jeffallan/claude-skills/compare/v0.3.2...v0.4.0">0.4.0</a> - 2026-01-18</h2><a class="sl-anchor-link" href="#040---2026-01-18"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.4.0 - 2026-01-18”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-16">Added</h3><a class="sl-anchor-link" href="#added-16"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>New <code dir="auto">--graph</code> flag for <code dir="auto">/common-ground</code> command <ul> <li>Generates mermaid flowchart diagrams visualizing Claude’s reasoning structure</li> <li>Decision points, chosen paths, alternatives, and uncertainties displayed visually</li> <li>Node colors indicate confidence: green (chosen), yellow (decision point), orange (uncertain), gray (alternative)</li> </ul> </li> <li>New <code dir="auto">references/reasoning-graph.md</code> reference file (280 lines) <ul> <li>Mermaid diagram generation patterns and templates</li> <li>Node types, styling rules, and edge label conventions</li> <li>Complete examples with auth system reasoning tree</li> </ul> </li> <li>README “Context Engineering” section featuring <code dir="auto">/common-ground</code> command</li> <li>README Quick Start callout for <code dir="auto">--graph</code> flag</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-16">Changed</h3><a class="sl-anchor-link" href="#changed-16"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Updated README header stats to include “Context Engineering”</li> <li>Enhanced README Author section with LinkedIn profile links</li> <li>Updated project structure documentation to show <code dir="auto">commands/common-ground/</code></li> <li>Total reference files: 301 → 304</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="032---2026-01-16"><a href="https://github.com/jeffallan/claude-skills/compare/v0.3.1...v0.3.2">0.3.2</a> - 2026-01-16</h2><a class="sl-anchor-link" href="#032---2026-01-16"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.3.2 - 2026-01-16”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-17">Added</h3><a class="sl-anchor-link" href="#added-17"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>New <code dir="auto">/common-ground</code> command for surfacing Claude’s hidden assumptions (#88) <ul> <li>Two-phase interactive flow (Surface & Select, Adjust Tiers)</li> <li>Assumption classification by Type (stated/inferred/assumed/uncertain)</li> <li>Confidence tiers (ESTABLISHED/WORKING/OPEN)</li> <li><code dir="auto">--list</code> and <code dir="auto">--check</code> flags for quick access</li> <li>Ground file storage in ~/.claude/common-ground/</li> <li>Introduced hybrid command pattern (COMMAND.md + references/) for complex commands</li> </ul> </li> <li>New <code dir="auto">/approve-synthesis</code> command for reviewing and approving synthesis documents (#87) <ul> <li>Reviews proposed tickets from synthesis</li> <li>Resolves blocking decisions before ticket creation</li> <li>Allows add/remove/modify of tickets before Jira creation</li> <li>Creates approved tickets in Jira</li> </ul> </li> <li>New <code dir="auto">vue-expert-js</code> skill for JavaScript-only Vue development (#86) <ul> <li>JSDoc typing patterns for Vue components</li> <li>Runtime prop validation</li> </ul> </li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-17">Changed</h3><a class="sl-anchor-link" href="#changed-17"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Split <code dir="auto">/synthesize-discovery</code> workflow into two commands (#87) <ul> <li><code dir="auto">/synthesize-discovery</code> now creates synthesis document with proposed tickets</li> <li><code dir="auto">/approve-synthesis</code> handles decision resolution and Jira ticket creation</li> </ul> </li> <li>Enhanced <code dir="auto">vue-expert</code> skill with mobile and build tooling (#86) <ul> <li>Quasar framework patterns for mobile-first development</li> <li>Capacitor native plugin integration</li> <li>PWA service workers and offline strategies</li> <li>Vite build configuration and optimization</li> <li>Updated Nuxt reference with Custom SSR + Fastify patterns</li> </ul> </li> <li>Total skills: 64 → 65</li> <li>Total reference files: 298 → 301</li> <li>Total project commands: 8 → 9</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="031---2025-12-26"><a href="https://github.com/jeffallan/claude-skills/compare/v0.3.0...v0.3.1">0.3.1</a> - 2025-12-26</h2><a class="sl-anchor-link" href="#031---2025-12-26"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.3.1 - 2025-12-26”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="changed-18">Changed</h3><a class="sl-anchor-link" href="#changed-18"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Moved legacy workflow commands from <code dir="auto">.claude/commands/</code> to <code dir="auto">.claude/old-commands/legacy/</code> to avoid polluting the user’s command namespace when installing the plugin</li> <li>Workflow commands remain available via the plugin’s <code dir="auto">commands/project/</code> directory structure for programmatic use</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="030---2025-12-26"><a href="https://github.com/jeffallan/claude-skills/compare/v0.2.0...v0.3.0">0.3.0</a> - 2025-12-26</h2><a class="sl-anchor-link" href="#030---2025-12-26"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.3.0 - 2025-12-26”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-18">Added</h3><a class="sl-anchor-link" href="#added-18"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li><strong>8 project workflow commands</strong> organized into 4 phases: <ul> <li><strong>Discovery:</strong> <code dir="auto">create-epic-discovery</code>, <code dir="auto">synthesize-discovery</code> - Research and validate requirements</li> <li><strong>Planning:</strong> <code dir="auto">create-epic-plan</code>, <code dir="auto">create-implementation-plan</code> - Analyze codebase and create execution plans</li> <li><strong>Execution:</strong> <code dir="auto">execute-ticket</code>, <code dir="auto">complete-ticket</code> - Implement and complete individual tickets</li> <li><strong>Retrospectives:</strong> <code dir="auto">complete-epic</code>, <code dir="auto">complete-sprint</code> - Generate reports and close work items</li> </ul> </li> <li>New <code dir="auto">commands/project/</code> directory structure with organized subfolders</li> <li>Comprehensive workflow documentation (<code dir="auto">docs/WORKFLOW_COMMANDS.md</code>) with mermaid diagrams</li> <li>Atlassian MCP server setup guide (<code dir="auto">docs/ATLASSIAN_MCP_SETUP.md</code>)</li> <li>Jira integration for ticket management (read tickets, update status, transitions)</li> <li>Confluence integration for document publishing across all workflow phases</li> <li>Mandatory checkpoint system with user approval gates at each phase</li> <li>10 new skills bringing total to 64: <ul> <li>salesforce-developer, shopify-expert, wordpress-pro, atlassian-mcp</li> <li>pandas-pro, spark-engineer, ml-pipeline, prompt-engineer, rag-architect, fine-tuning-expert</li> </ul> </li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-19">Changed</h3><a class="sl-anchor-link" href="#changed-19"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Updated <code dir="auto">plugin.json</code> and <code dir="auto">marketplace.json</code> with <code dir="auto">commands</code> field</li> <li>Added project management keywords (jira, confluence, epic-planning, sprint, discovery, retrospectives)</li> <li>Updated README with project workflow commands section and updated project structure</li> <li>Total skills: 54 → 64 (19% increase)</li> <li>Total reference files: 284 → 298</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="020---2025-12-14"><a href="https://github.com/jeffallan/claude-skills/compare/v0.1.0...v0.2.0">0.2.0</a> - 2025-12-14</h2><a class="sl-anchor-link" href="#020---2025-12-14"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.2.0 - 2025-12-14”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-19">Added</h3><a class="sl-anchor-link" href="#added-19"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li><strong>35 new skills</strong> converted from agents: <ul> <li><strong>Languages (12):</strong> python-pro, typescript-pro, javascript-pro, golang-pro, rust-engineer, sql-pro, cpp-pro, swift-expert, kotlin-specialist, csharp-developer, php-pro, java-architect</li> <li><strong>Frameworks (7):</strong> nextjs-developer, vue-expert, angular-architect, spring-boot-engineer, laravel-specialist, rails-expert, dotnet-core-expert</li> <li><strong>Infrastructure (5):</strong> kubernetes-specialist, terraform-engineer, postgres-pro, cloud-architect, database-optimizer</li> <li><strong>API/Architecture (5):</strong> graphql-architect, api-designer, websocket-engineer, microservices-architect, mcp-developer</li> <li><strong>Operations (3):</strong> sre-engineer, chaos-engineer, cli-developer</li> <li><strong>Specialized (3):</strong> legacy-modernizer, embedded-systems, game-developer</li> </ul> </li> <li><strong>193 new reference files</strong> across all new skills</li> <li>Comprehensive language-specific patterns for 12 programming languages</li> <li>Framework-specific best practices for 7 additional frameworks</li> <li>Infrastructure-as-code and cloud architecture patterns</li> <li>Modern API design and microservices architecture patterns</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="enhanced">Enhanced</h3><a class="sl-anchor-link" href="#enhanced"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Enhanced”</span></a></div> <ul> <li><strong>test-master:</strong> Added QA methodology, automation frameworks, performance testing, security testing</li> <li><strong>code-documenter:</strong> Added documentation systems, API documentation patterns, technical writing standards</li> <li><strong>devops-engineer:</strong> Added platform engineering, deployment strategies, incident response procedures</li> <li><strong>monitoring-expert:</strong> Added performance testing, profiling techniques, capacity planning</li> <li><strong>security-reviewer:</strong> Added penetration testing, infrastructure security, compliance scanning</li> <li><strong>fullstack-guardian:</strong> Added API design standards, architecture decision records, comprehensive deliverables checklist</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-20">Changed</h3><a class="sl-anchor-link" href="#changed-20"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Total skills: 19 → 54 (184% increase)</li> <li>Total reference files: 91 → 284 (212% increase)</li> <li>Expanded tech stack coverage to 25+ frameworks</li> <li>Added 12 programming languages with deep expertise</li> <li>Enhanced decision trees and skill routing</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="010---2025-12-14"><a href="https://github.com/jeffallan/claude-skills/compare/v0.0.4...v0.1.0">0.1.0</a> - 2025-12-14</h2><a class="sl-anchor-link" href="#010---2025-12-14"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.1.0 - 2025-12-14”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-20">Added</h3><a class="sl-anchor-link" href="#added-20"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Progressive disclosure architecture for all 19 skills</li> <li>91 reference files across all skills for contextual loading</li> <li>Routing tables in each SKILL.md pointing to domain-specific references</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="changed-21">Changed</h3><a class="sl-anchor-link" href="#changed-21"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Refactored all SKILL.md files to lean format (~80-100 lines each)</li> <li>50% token reduction on initial skill load</li> <li>Updated CONTRIBUTING.md with progressive disclosure guidelines</li> <li>Rewrote README.md with architecture documentation and improved structure</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="004---2025-12-14"><a href="https://github.com/jeffallan/claude-skills/compare/v0.0.3...v0.0.4">0.0.4</a> - 2025-12-14</h2><a class="sl-anchor-link" href="#004---2025-12-14"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.0.4 - 2025-12-14”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="changed-22">Changed</h3><a class="sl-anchor-link" href="#changed-22"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Optimized all 19 skills with modern patterns</li> <li>Framework version updates (React 19, Pydantic V2, Django 5.0, Flutter 3+)</li> <li>~42% token efficiency improvements across all skills</li> <li>Standardized frontmatter schema (triggers, role, scope, output-format)</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="003---2025-10-20"><a href="https://github.com/jeffallan/claude-skills/compare/v0.0.2...v0.0.3">0.0.3</a> - 2025-10-20</h2><a class="sl-anchor-link" href="#003---2025-10-20"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.0.3 - 2025-10-20”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="changed-23">Changed</h3><a class="sl-anchor-link" href="#changed-23"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Changed”</span></a></div> <ul> <li>Updated plugin.json marketplace schema</li> <li>Set release version for plugin distribution</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="002---2025-10-20"><a href="https://github.com/jeffallan/claude-skills/compare/v0.0.1...v0.0.2">0.0.2</a> - 2025-10-20</h2><a class="sl-anchor-link" href="#002---2025-10-20"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.0.2 - 2025-10-20”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="fixed-17">Fixed</h3><a class="sl-anchor-link" href="#fixed-17"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Fixed”</span></a></div> <ul> <li>Restructured to correct Claude Code plugin format</li> <li>Fixed plugin directory structure</li> </ul> <div class="sl-heading-wrapper level-h2"><h2 id="001---2025-10-20"><a href="https://github.com/jeffallan/claude-skills/releases/tag/v0.0.1">0.0.1</a> - 2025-10-20</h2><a class="sl-anchor-link" href="#001---2025-10-20"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “0.0.1 - 2025-10-20”</span></a></div> <div class="sl-heading-wrapper level-h3"><h3 id="added-21">Added</h3><a class="sl-anchor-link" href="#added-21"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Added”</span></a></div> <ul> <li>Initial release with 19 comprehensive skills</li> <li><strong>Original Development Skills</strong> (6): DevOps Engineer, Feature Forge, Fullstack Guardian, Spec Miner, Test Master, Code Documenter</li> <li><strong>Testing & E2E</strong> (1): Playwright Expert</li> <li><strong>Backend Framework Skills</strong> (3): NestJS Expert, Django Expert, FastAPI Expert</li> <li><strong>Frontend & Mobile Skills</strong> (3): React Expert, React Native Expert, Flutter Expert</li> <li><strong>Workflow Skills</strong> (4): Debugging Wizard, Monitoring Expert, Architecture Designer, Code Reviewer</li> <li><strong>Security Skills</strong> (2): Secure Code Guardian, Security Reviewer</li> <li>Comprehensive documentation (README, SKILLS_GUIDE, CONTRIBUTING)</li> <li>MIT License</li> </ul> <div class="sl-heading-wrapper level-h3"><h3 id="tech-stack-coverage">Tech Stack Coverage</h3><a class="sl-anchor-link" href="#tech-stack-coverage"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Tech Stack Coverage”</span></a></div> <ul> <li>Languages: TypeScript, JavaScript, Python, Dart, Go</li> <li>Backend: NestJS, Django, FastAPI, Express</li> <li>Frontend: React, React Native, Flutter</li> <li>Testing: Jest, Playwright, Pytest, React Testing Library</li> <li>DevOps: Docker, Kubernetes, CI/CD</li> <li>Monitoring: Prometheus, Grafana, ELK, DataDog</li> <li>Security: OWASP Top 10, SAST tools</li> </ul> </div><footer class="sl-flex astro-ddtxxk7k"><div class="meta sl-flex astro-ddtxxk7k"></div><div class="pagination-links print:hidden astro-b5raizh3" dir="ltr"><a href="/claude-skills/contributing/" rel="prev" class="astro-b5raizh3"><svg aria-hidden="true" class="astro-b5raizh3 astro-hkc32dio" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17 11H9.41l3.3-3.29a1.004 1.004 0 1 0-1.42-1.42l-5 5a1 1 0 0 0-.21.33 1 1 0 0 0 0 .76 1 1 0 0 0 .21.33l5 5a1.002 1.002 0 0 0 1.639-.325 1 1 0 0 0-.219-1.095L9.41 13H17a1 1 0 0 0 0-2Z"/></svg><span class="astro-b5raizh3">Previous<br class="astro-b5raizh3"><span class="link-title astro-b5raizh3">Contributing</span></span></a><a href="/claude-skills/roadmap/" rel="next" class="astro-b5raizh3"><svg aria-hidden="true" class="astro-b5raizh3 astro-hkc32dio" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17.92 11.62a1.001 1.001 0 0 0-.21-.33l-5-5a1.003 1.003 0 1 0-1.42 1.42l3.3 3.29H7a1 1 0 0 0 0 2h7.59l-3.3 3.29a1.002 1.002 0 0 0 .325 1.639 1 1 0 0 0 1.095-.219l5-5a1 1 0 0 0 .21-.33 1 1 0 0 0 0-.76Z"/></svg><span class="astro-b5raizh3">Next<br class="astro-b5raizh3"><span class="link-title astro-b5raizh3">Roadmap</span></span></a></div></footer><footer class="site-footer astro-amm3awio"><nav class="site-footer-sites astro-amm3awio" aria-label="Sites"><div class="site-footer-row astro-amm3awio"><a class="site-footer-link astro-amm3awio" href="https://jeffallan.github.io/">About the Author</a><button type="button" class="site-footer-link site-footer-contact astro-amm3awio" data-site-cta-open data-cta="footer">Contact</button></div><div class="site-footer-row astro-amm3awio"><a class="site-footer-link astro-amm3awio" href="https://jeffallan.github.io/claude-skills/" aria-current="true">Docs: Claude Skills</a><a class="site-footer-link astro-amm3awio" href="https://jeffallan.github.io/writing-with-agents/">Docs: Writing With Agents</a><a class="site-footer-link astro-amm3awio" href="https://synergetic.solutions/resources/trust-center-directory/">Trust Center Directory</a></div></nav><div class="site-footer-social astro-amm3awio"><a class="site-footer-link site-footer-icon astro-amm3awio" href="https://github.com/Jeffallan" target="_blank" rel="noopener noreferrer" aria-label="GitHub" title="GitHub"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="astro-amm3awio"><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" class="astro-amm3awio"></path></svg></a><a class="site-footer-link site-footer-icon astro-amm3awio" href="https://linkedin.com/in/jeff-smolinski" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn" title="LinkedIn"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="astro-amm3awio"><path fill="currentColor" d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.06 2.06 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065m1.782 13.019H3.555V9h3.564zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0z" class="astro-amm3awio"></path></svg></a><a class="site-footer-link site-footer-icon astro-amm3awio" href="https://x.com/j3ffallan" target="_blank" rel="noopener noreferrer" aria-label="X" title="X"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="astro-amm3awio"><path fill="currentColor" d="M14.234 10.162L22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299l-.929-1.329L3.076 1.56h3.182l5.965 8.532l.929 1.329l7.754 11.09h-3.182z" class="astro-amm3awio"></path></svg></a><a class="site-footer-link site-footer-icon astro-amm3awio" href="https://bsky.app/profile/jeffallan.bsky.social" target="_blank" rel="noopener noreferrer" aria-label="Bluesky" title="Bluesky"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="astro-amm3awio"><path fill="currentColor" d="M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037c-.856 3.061-3.978 3.842-6.755 3.37c4.854.826 6.089 3.562 3.422 6.299c-5.065 5.196-7.28-1.304-7.847-2.97c-.104-.305-.152-.448-.153-.327c0-.121-.05.022-.153.327c-.568 1.666-2.782 8.166-7.847 2.97c-2.667-2.737-1.432-5.473 3.422-6.3c-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026" class="astro-amm3awio"></path></svg></a><a class="site-footer-link site-footer-icon astro-amm3awio" href="https://news.ycombinator.com/user?id=Jeffallan" target="_blank" rel="noopener noreferrer" aria-label="Hacker News" title="Hacker News"><svg viewBox="0 0 24 24" width="20" height="20" aria-hidden="true" class="astro-amm3awio"><path fill="currentColor" d="M0 24V0h24v24zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896z" class="astro-amm3awio"></path></svg></a></div><p class="site-footer-credit astro-amm3awio"><a class="site-footer-link astro-amm3awio" href="https://github.com/Jeffallan">Jeff Smolinski</a>, Principal Consultant at <a class="site-footer-link astro-amm3awio" href="https://synergetic.solutions">Synergetic Solutions</a></p><p class="site-footer-legal astro-amm3awio">© 2026 Jeff Smolinski · <a class="site-footer-link astro-amm3awio" href="/claude-skills/privacy/">Privacy</a></p><dialog class="site-cta-dialog" aria-labelledby="site-cta-title"><div class="site-cta-head"><h2 id="site-cta-title">Get in touch</h2><button type="button" class="site-cta-close" data-site-cta-close aria-label="Close">×</button></div><form class="site-contact-form astro-2nciugh3" action="https://formspree.io/f/mbljyvwl" method="POST" data-site="claude-skills"><input type="hidden" name="from" value="claude-skills" class="astro-2nciugh3"><input type="hidden" name="cta" value="dialog" class="astro-2nciugh3"><input type="hidden" name="page" value="" class="astro-2nciugh3"><input type="hidden" name="_subject" value="[claude-skills] Contact" class="astro-2nciugh3"><input class="site-contact-trap astro-2nciugh3" type="text" name="_gotcha" tabindex="-1" autocomplete="off"><div class="site-contact-group astro-2nciugh3"><label class="site-contact-label astro-2nciugh3" for="contact-dialog-name">Name</label><input class=" astro-2nciugh3" id="contact-dialog-name" type="text" name="name" placeholder="Name" required></div><div class="site-contact-group astro-2nciugh3"><label class="site-contact-label astro-2nciugh3" for="contact-dialog-email">Email</label><input class=" astro-2nciugh3" id="contact-dialog-email" type="email" name="email" placeholder="Email" required></div><div class="site-contact-group astro-2nciugh3"><label class="site-contact-label astro-2nciugh3" for="contact-dialog-about">What's this about?</label><select class=" astro-2nciugh3" id="contact-dialog-about" name="about"><option value="" class="astro-2nciugh3">What's this about? (optional)</option><option class="astro-2nciugh3">Consulting</option><option class="astro-2nciugh3">Help with one of my projects</option><option class="astro-2nciugh3">Speaking or writing</option><option class="astro-2nciugh3">Something else</option></select></div><div class="site-contact-group astro-2nciugh3"><label class="site-contact-label astro-2nciugh3" for="contact-dialog-message">Message</label><textarea class=" astro-2nciugh3" id="contact-dialog-message" name="message" rows="4" placeholder="Message" required></textarea></div><button type="submit" class="site-contact-submit astro-2nciugh3">Send</button><p class="site-contact-status astro-2nciugh3" role="status" aria-live="polite"></p></form><script type="module">for(let e of document.querySelectorAll(`form.site-contact-form`)){let t=location.pathname,n=t.split(`/`).filter(Boolean).pop()??`home`,r=e.dataset.site??``;e.elements.namedItem(`page`)?.setAttribute(`value`,t),e.querySelector(`input[name="_subject"]`)?.setAttribute(`value`,`[${r}] Contact from ${n}`),e.addEventListener(`submit`,async t=>{t.preventDefault();let n=e.querySelector(`.site-contact-status`),r=e.querySelector(`button[type="submit"]`);r&&(r.disabled=!0),n&&(n.textContent=`Sending…`);try{let t=await fetch(e.action,{method:`POST`,body:new FormData(e),headers:{Accept:`application/json`}});if(!t.ok)throw Error(String(t.status));e.reset(),e.dataset.sent=`true`,n&&(n.textContent=`Thanks, your message is on its way. I’ll reply by email.`),e.dispatchEvent(new CustomEvent(`site-contact:sent`,{bubbles:!0}))}catch{n&&(n.textContent=`That didn’t send. Please try again in a moment.`)}finally{r&&(r.disabled=!1)}})}</script></dialog><script type="module">var e=document.querySelector(`dialog.site-cta-dialog`);if(e){let t=e.querySelector(`input[name="cta"]`);document.addEventListener(`click`,n=>{let r=n.target.closest(`[data-site-cta-open]`);r&&(n.preventDefault(),t&&(t.value=r.dataset.cta??`dialog`),e.showModal(),e.querySelector(`input[name="name"]`)?.focus())}),e.querySelector(`[data-site-cta-close]`)?.addEventListener(`click`,()=>e.close()),e.addEventListener(`click`,t=>{t.target===e&&e.close()})}</script></footer></div></div></main></div></div></div></div></body></html>