Repository navigation
v2.8.0 — the skill folder becomes a real skill
Superseded by v2.8.1. This release moved
templates/into the skill folder but leftmcp-server/server.pyreading the old path, so thegds://templates/frontend-tzandgds://templates/component-specresources return a missing file. Take 2.8.1 instead.
The skill folder becomes a real skill
An audit of the installed copy against the repo found the two had diverged in both directions. ~/.claude/skills/global-design/SKILL.md was running a v2.1.4 body — no e-commerce row, no one-shot build, no rendered-verification step, Next.js 15 in the stack table — while carrying a hand-written resource index the repo never had. Three months of routing work shipped to the repo and never reached the thing that actually loads.
Pulling that thread found the cause underneath it: skills/global-design/ was never a self-contained skill. SKILL.md named 46 files that lived at the repo root and only arrived beside it at install time. This release closes that boundary, turns the reference graph back into a tree, and gives the skill two things it can run instead of describe.
| before | after | |
|---|---|---|
| Broken references in the skill folder | 46 | 0 |
| Reference cycles | 57 | 0 |
| Depth violations | 37 | 0 |
| Executed evals | none | 14 of 14 pass |
| Overall audit score | 49 | 95 |
| Release gate | 15 of 19 | 19 of 19 |
Restructured
references/,agents/,templates/andevals/moved intoskills/global-design/. They now sit where Anthropic's layout puts them. The installer bundles nine repo-root directories instead of twelve, and copies agents into.claude/agents/from the new path. Post-install the tree is identical to before, because everything still flattens into the skill folder.- The resource index lives in
SKILL.md. All 28 reference catalogs, 11 agents and 7 templates are direct links from the entry point, plus a directory map for the nine bundled dirs. Anthropic's guidance is one hop; a separateresource-index.mdmade it two, so that file is gone. The four sibling files —task-routing.md,quality-gates.md,operating-principles.md,output-formats.md— are linked for the first time. Until now nothing inSKILL.mdpointed at them, so roughly 35KB of routing detail and gate criteria never loaded. - The reference graph is a tree again. Catalogs linked up to the agents that read them, sibling catalogs linked both ways, and 103 files named themselves in their own version footer. Upward links to
agents/*are dropped from eight data files, one direction is removed from twelve mutually-linked pairs, and the self-naming footers are gone. Nothing became unreachable:SKILL.mdlinks every one of these files directly. - Path convention stated. Every path resolves from the skill root, not from the file that mentions it. The convention was already universal in the library and nowhere written down.
Added
-
scripts/verify-rendered.mjs— Decision Pipeline step 12 stops being prose. Step 12 demanded rendered proof and shipped no way to produce it; every mechanical check lived as a paste-into-DevTools snippet. The runner loads a URL in Playwright, light and dark, at 390px and 1280px, and reports horizontal overflow (Gate 5), text hidden by-webkit-text-fill-color(Gate 6), sub-44px touch targets (Gate 5), images withoutwidth/height(Gate 7),vhwheredvhbelongs (Gate 5), and hex/rgb/hsl where OKLCH belongs (Gate 3). Exits 1 on a hard failure, so it can gate a deploy;--jsonfor machine use.node scripts/verify-rendered.mjs https://example.com
-
evals/fixtures/— a self-test for that runner.rendered-defects.htmlplants one instance of each check;rendered-clean.htmlplants none. Defects → 8 failures, 12 warnings, exit 1. Clean → 0 / 0, exit 0. -
evals/agent-cases/— 14 behavioural evals that get executed, not described. Six categories: discovery, functional, edge-cases, negative, regression, adversarial. Graded on what the answer contains and avoids rather than on prose quality. The regression case pins the stack majors so a staleNext.js 15cannot come back unnoticed; the adversarial case checks that a fake countdown and a fake stock counter get refused, not built. The one-shot build case needs a long leash — it produced a seven-page site and timed out twice before finishing inside fifty minutes.python run_evals.py run skills/global-design/evals/agent-cases \ --runner "claude -p -" --stdin-query --results results.jsonl -
Nine more trigger evals (15 → 24). Five positives for capabilities added since v2.5.0 that had no coverage: one-shot build, e-commerce, rendered verification, reference extraction, GSAP scroll-pinning. Four hard negatives drawn from the scope boundaries: native mobile UI, HTML email, logo and brand identity, print. The three existing negatives — SQL, Redis, CSV parsing — sit nowhere near the decision boundary and prove nothing.
-
An install-drift check.
gds doctorgained a tenth item that byte-compares the six copied files against the source and names the ones that diverged. The resource dirs were already junctions and stayed current; only these six could drift silently. Rundoctorafter every pull. -
Tables of contents in 38 files. Every file over 100 lines in
rules/,blueprints/,checklists/andreferences/tech-standards.mdnow opens with a## Contentslist, matching the pass already done acrossreferences/. Past 100 lines a partial read hides the file's scope. Insertions only.
Fixed
- Stack re-verified against Tier-1 sources on 2026-09-08. Next.js 16.3.4 stable with Turbopack, the proxy file convention and Cache Components; React 19.2.7; Tailwind 4.3; GSAP's full plugin set free; WCAG 2.2 still the current W3C Recommendation. The runtime copy had been saying
Next.js 15. - Every time-sensitive statement ruled on. All 80 findings from the staleness scan carry a claim and a verdict: 75 dismissed with a written reason per class — WCAG success-criterion identifiers such as 1.4.3 label clauses in a published Recommendation, per-file edit stamps are not release surfaces, Baseline years are facts about the past — and 5 real framework versions verified against the source fetched that day. 91 claims, 0 unresolved.
- Frontmatter
namealigned to the directory, as the spec requires. The package name inmanifest.yamlstaysglobal-design-skill. - Description rewritten. Keeps every trigger phrase, drops the internal mechanics, and states the scope boundaries — native mobile UI, email templates, print, brand identity — so the negative cases have something to match. 852 of the 1024 allowed characters.
- Two genuinely broken links.
scripts/tokens-to-css.jsin the Figma integration docs is a script the reader's project owns, not one this package ships. The rendered-verification runner ships inside the skill folder instead of being named from a path that is not bundled. gds installno longer copies dot-directories out ofskills/global-design/. Local working state was being copied into installs, which could plant a secondSKILL.mdinside the installed skill folder.- Portability. A machine-specific
/var/www/...path in a live-audit snippet became a placeholder, and threegrepexamples moved from the GNU-only\sto the POSIX[[:space:]].
Upgrading
Re-run the installer — the layout changed, and an install made before this release still has references/, agents/ and templates/ copied from the old locations:
git pull
python scripts/gds install --tool=claude-code /path/to/your-project
python scripts/gds doctor /path/to/your-projectdoctor should report ten passes. The drift check is the new one; if it names a file, re-run the install.
Full detail: CHANGELOG.md.