@hegemonart/get-design-done 1.0.7 → 1.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +82 -0
- package/README.md +57 -19
- package/SKILL.md +6 -4
- package/agents/design-authority-watcher.md +208 -0
- package/agents/design-context-builder.md +3 -3
- package/agents/design-discussant.md +1 -1
- package/agents/design-figma-writer.md +8 -8
- package/agents/design-update-checker.md +117 -0
- package/agents/token-mapper.md +1 -1
- package/connections/claude-design.md +0 -1
- package/connections/connections.md +10 -23
- package/connections/figma.md +81 -39
- package/connections/pinterest.md +0 -1
- package/hooks/hooks.json +8 -0
- package/hooks/update-check.sh +238 -0
- package/package.json +1 -1
- package/reference/authority-feeds.md +72 -0
- package/reference/schemas/authority-snapshot.schema.json +42 -0
- package/reference/schemas/config.schema.json +4 -0
- package/reference/schemas/marketplace.schema.json +2 -2
- package/reference/schemas/plugin.schema.json +1 -1
- package/scripts/tests/test-authority-rejected-kinds.sh +58 -0
- package/scripts/tests/test-authority-watcher-diff.sh +109 -0
- package/scripts/validate-schemas.cjs +18 -1
- package/skills/audit/SKILL.md +11 -1
- package/skills/check-update/SKILL.md +133 -0
- package/skills/complete-cycle/SKILL.md +10 -0
- package/skills/design/SKILL.md +5 -5
- package/skills/discover/SKILL.md +2 -2
- package/skills/explore/SKILL.md +2 -2
- package/skills/health/SKILL.md +10 -0
- package/skills/help/SKILL.md +10 -0
- package/skills/progress/SKILL.md +10 -0
- package/skills/reflect/SKILL.md +1 -0
- package/skills/scan/SKILL.md +9 -19
- package/skills/ship/SKILL.md +10 -0
- package/skills/watch-authorities/SKILL.md +82 -0
- package/connections/figma-writer.md +0 -139
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
},
|
|
6
6
|
"metadata": {
|
|
7
7
|
"description": "Get Design Done — 5-stage agent-orchestrated design pipeline with 9 connections, handoff-first workflow, bidirectional Figma write-back, 22+ specialized agents, queryable knowledge layer (intel store, dependency analysis, learnings extraction), and a self-improvement loop (reflector, frontmatter + budget feedback, global-skills layer). Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation (auto-tag + GitHub Release + release-time smoke test).",
|
|
8
|
-
"version": "1.
|
|
8
|
+
"version": "1.13.3"
|
|
9
9
|
},
|
|
10
10
|
"plugins": [
|
|
11
11
|
{
|
|
12
12
|
"name": "get-design-done",
|
|
13
13
|
"source": "./",
|
|
14
14
|
"description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), Claude Design handoff, bidirectional Figma write-back, and a queryable intel store (.design/intel/) for dependency and learnings queries. Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows) and release automation. Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression.",
|
|
15
|
-
"version": "1.
|
|
15
|
+
"version": "1.13.3",
|
|
16
16
|
"author": {
|
|
17
17
|
"name": "hegemonart"
|
|
18
18
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "get-design-done",
|
|
3
3
|
"short_name": "gdd",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.13.3",
|
|
5
5
|
"description": "Agent-orchestrated 5-stage design pipeline: Brief → Explore → Plan → Design → Verify. 22+ specialized agents, 9 connections (Figma, Refero, Preview, Storybook, Chromatic, Figma Writer, Graphify, Pinterest, Claude Design), handoff-first workflow via Claude Design bundles, bidirectional Figma write-back (annotations, Code Connect), queryable intel store (`.design/intel/`) for O(1) design surface lookups, and self-improvement loop (reflector agent, frontmatter + budget feedback, global-skills layer at `~/.claude/gdd/global-skills/`). Standalone commands: style, darkmode, compare, figma-write, graphify, handoff, analyze-dependencies, skill-manifest, extract-learnings, reflect, apply-reflections. Embeds NNG heuristics, WCAG thresholds, typographic systems, motion framework, and anti-pattern catalog. Ships with a full CI/CD pipeline (Node 22/24 × Linux/macOS/Windows, lint + schema + frontmatter + stale-ref + shellcheck + gitleaks + injection-scan + blocking size-budget) and release automation (auto-tag + GitHub Release + release-time smoke test). Optimization layer (v1.0.4.1, retroactive): gdd-router + gdd-cache-manager skills, PreToolUse budget-enforcer hook, tier-aware agent frontmatter, lazy checker gates, streaming synthesizer, /gdd:warm-cache + /gdd:optimize commands, and cost telemetry at .design/telemetry/costs.jsonl — targeting 50-70% per-task token-cost reduction with no quality-floor regression.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "hegemonart",
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,88 @@ All notable changes to get-design-done are documented here. Versions follow [sem
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [1.13.3] — 2026-04-19
|
|
8
|
+
|
|
9
|
+
### Added — Phase 13.3: Plugin Update Checker
|
|
10
|
+
|
|
11
|
+
- `hooks/update-check.sh` — SessionStart Bash hook; 24h-cached unauthenticated `GET /repos/hegemonart/get-design-done/releases/latest`; classifies semver delta (major / minor / patch / off-cadence); respects `.design/STATE.md` stage guard (suppresses nudge during `plan`, `design`, `verify`); respects per-version dismissal from `.design/config.json`; silent-on-failure by policy (exit 0 on every error path); BASH_SOURCE guard makes the script source-safe for self-test.
|
|
12
|
+
- `hooks/hooks.json` — registers `update-check.sh` as a second SessionStart command alongside `bootstrap.sh` (run order: bootstrap → update-check).
|
|
13
|
+
- `agents/design-update-checker.md` — Haiku-tier enrichment agent (Phase 10.1 cost governance). Invoked only by `/gdd:check-update --prompt` to produce a 3–5-line "what this release changes for you" summary from the cached release body. Reads-only, inline-text-only output, ends with `## UPDATE-CHECKER COMPLETE`.
|
|
14
|
+
- `skills/check-update/SKILL.md` — `/gdd:check-update` manual slash command. Flags: `--refresh` (bypass 24h TTL, re-fetch now), `--dismiss` (write `update_dismissed: "<tag>"` atomically to `.design/config.json` via env-prefix python3 heredoc, preserves all pre-existing keys), `--prompt` (spawn the enrichment agent). Default (no flag) prints cached state.
|
|
15
|
+
- `.design/update-cache.json` — per-user-project runtime cache (written by the hook). Shape: `{checked_at, current_tag, latest_tag, delta, is_newer, changelog_excerpt}`; 500-char excerpt from release body.
|
|
16
|
+
- `.design/update-available.md` — per-user-project runtime rendered banner. Written only when all four gates pass (cache is_newer=true AND stage ∉ {plan,design,verify} AND not dismissed AND latest_tag parsed successfully). Consumed by safe-window skills via `[ -f .design/update-available.md ] && cat .design/update-available.md`.
|
|
17
|
+
- `reference/schemas/config.schema.json` — adds optional `update_dismissed: string` property.
|
|
18
|
+
- Safe-window surfaces: `/gdd:progress`, `/gdd:health`, `/gdd:help`, post-closeout of `/gdd:ship`, `/gdd:complete-cycle`, `/gdd:audit` — each appends the one-line banner-cat tail before its completion marker. Mid-pipeline skills (`brief`, `explore`, `plan`, `design`, `verify`) explicitly NOT modified.
|
|
19
|
+
- `skills/audit/SKILL.md` — `tools:` list extended with `Bash` to enable the banner-cat tail (previously: `Read, Write, Task, Glob`).
|
|
20
|
+
- Root `SKILL.md` — `check-update` registered in argument-hint alternation.
|
|
21
|
+
- `test-fixture/baselines/phase-13.3/` — regression baseline lock for v1.13.3.
|
|
22
|
+
- `test-fixture/baselines/current/agent-list.txt` — appended `design-update-checker.md` in sorted position.
|
|
23
|
+
- `test-fixture/baselines/current/skill-list.txt` — appended `check-update` in sorted position.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- Plugin version: 1.0.7.2 → 1.13.3 (per the new milestone.phase.sub-phase versioning scheme — MAJOR=milestone, MINOR=phase, PATCH=sub-phase). Phase 13.3 lands as a valid semver; release workflow auto-tags and `npm publish` succeeds.
|
|
28
|
+
|
|
29
|
+
### Design principles (Phase 13.3)
|
|
30
|
+
|
|
31
|
+
- **Never auto-updates.** The checker only surfaces a nudge; `/gdd:update` remains the explicit user action.
|
|
32
|
+
- **Never interrupts critical work.** State-machine guard suppresses the nudge during mid-pipeline stages (`plan`, `design`, `verify`); banner renders only in the 6 documented safe windows.
|
|
33
|
+
- **Silent-on-failure.** Network timeout, malformed JSON, missing plugin.json, unwritable `.design/` — every path exits 0 without printing to stderr during normal SessionStart.
|
|
34
|
+
- **No telemetry.** Unauthenticated GitHub Releases fetch; no phone-home, no tracking, no tokens in code.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## [1.0.7.2] — 2026-04-19
|
|
39
|
+
|
|
40
|
+
### Added — Phase 13.2: External Authority Watcher
|
|
41
|
+
|
|
42
|
+
- `reference/authority-feeds.md` — curated whitelist of 26 design-authority feeds grouped by kind (5 spec sources, 8 component systems, 3 research institutions, 10 named practitioners, user-extensible Are.na channels) with an explicit `## Rejected kinds` assertion block covering Dribbble, Behance, LinkedIn, generic Medium topic feeds, and trending aggregators.
|
|
43
|
+
- `reference/schemas/authority-snapshot.schema.json` — Draft-07 JSON Schema validating `.design/authority-snapshot.json` shape (version const 1, feeds keyed by id, 64-hex sha256 hash pattern, `maxItems: 200` per-feed entry cap enforcing D-14 retention at validation time).
|
|
44
|
+
- `agents/design-authority-watcher.md` — Sonnet-tier, parallel-safe watcher agent. Fetches feeds via WebFetch, diffs against snapshot, classifies new entries into five buckets (`spec-change`, `heuristic-update`, `pattern-guidance`, `craft-tip`, `skip`) with a one-sentence rationale per entry. First run seeds the snapshot silently; `--since <date>` is the escape hatch for surfacing a backlog.
|
|
45
|
+
- `skills/watch-authorities/SKILL.md` — `/gdd:watch-authorities` command with `--refresh`, `--since <date>`, `--feed <name>`, `--schedule <weekly|daily|monthly>` flags. Mutual-exclusion rules between `--refresh` and `--since`; `--schedule` registers a cron via the `scheduled-tasks` MCP when connected (weekly=`0 9 * * 1`, daily=`0 9 * * *`, monthly=`0 9 1 * *`) with graceful exit-0 fallback on MCP absence.
|
|
46
|
+
- `scripts/tests/test-authority-rejected-kinds.sh` — CI test enforcing the anti-slop thesis structurally. Splits `reference/authority-feeds.md` at the `## Rejected kinds` heading and greps the active section for `dribbble.com` / `behance.net` / `linkedin.com` / `medium.com/topic` / trending-aggregator hostnames; exits non-zero on any match.
|
|
47
|
+
- `scripts/tests/test-authority-watcher-diff.sh` — structural-only v1 of the watcher-diff test. Asserts fixture presence, baseline existence, D-21 classification-heading vocabulary, and exact count consistency between the header's "N entries surfaced" figure and the number of bulleted entries across classification sections. Full end-to-end byte diff against a live watcher run is deferred until the Claude Code agent runtime is available in CI.
|
|
48
|
+
- `test-fixture/authority-feeds/` — four frozen mock feeds (WAI-ARIA APG Atom, Radix Primitives release Atom, NN/g articles RSS, Are.na channel JSON) with deterministic timestamps for byte-stable CI diff testing. Exercises all four non-practitioner source kinds against every branch of the D-17 classification decision table.
|
|
49
|
+
- `test-fixture/baselines/phase-13.2/authority-report.expected.md` — frozen regression baseline for the watcher-diff test (9 entries across 4 feeds: spec-change=2, heuristic-update=1, pattern-guidance=4, craft-tip=2, skip=0).
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
|
|
53
|
+
- `skills/reflect/SKILL.md` step 3 "Build required-reading list" — appended `.design/authority-report.md`. Single-line addition; `agents/design-reflector.md` itself is byte-identical since phase start (D-25 reflector-non-modification invariant preserved).
|
|
54
|
+
- Root `SKILL.md` — `watch-authorities` registered in argument-hint alternation, the maintenance Command Reference table, and the Jump Mode routing block alongside `/gdd:reflect` and `/gdd:apply-reflections`.
|
|
55
|
+
- `scripts/validate-schemas.cjs` — wired `authority-snapshot` into the `PAIRS` array and invoked `ajv-cli` with `-c ajv-formats` so `format: "date-time"` declarations are enforced rather than rejected under ajv strict mode. No-op for existing schemas (none declared formats).
|
|
56
|
+
- `tests/agent-size-budget.test.cjs` — added `M: 300` tier to `TIER_LIMITS` for Worker-tier agents (between `S: 150` and `LARGE: 350`); accommodates CONTEXT D-05's "body ≈ 200–300 lines" target with modest headroom.
|
|
57
|
+
- `test-fixture/baselines/phase-6/agent-list.txt` — appended `design-authority-watcher.md` in sorted position.
|
|
58
|
+
- `test-fixture/baselines/phase-6/skill-list.txt` — appended `watch-authorities` in sorted position.
|
|
59
|
+
- Plugin version: 1.0.7 → 1.0.7.2 (off-cadence decimal patch; 1.0.7.1 was a CHANGELOG-only label consumed by Phase 13.1 Figma MCP consolidation and did not bump manifests). Does not shift the Phase 14 → v1.0.8 cadence.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## [1.0.7.1] — 2026-04-19
|
|
64
|
+
|
|
65
|
+
### Changed — Phase 13.1: Figma MCP Consolidation
|
|
66
|
+
- Collapsed the dual Figma MCP setup (local `figma-desktop` for reads + remote `figma` for writes) into the single remote `figma` MCP, which exposes full read parity (`get_metadata`, `get_design_context`, `get_variable_defs`, `get_screenshot`) alongside `use_figma` for writes.
|
|
67
|
+
- Rewrote `connections/figma.md` to cover both reads and writes; deleted `connections/figma-writer.md` (folded into the unified spec).
|
|
68
|
+
- Migrated every `mcp__figma-desktop__*` tool reference to `mcp__figma__*` across skills (`scan`, `discover`, `explore`, `design`), agents (`design-figma-writer`, `design-context-builder`, `design-discussant`, `token-mapper`), and `connections/connections.md` capability matrix + probe block.
|
|
69
|
+
- Collapsed STATE.md `<connections>` schema from `figma: … / figma_writer: …` to a single `figma:` key. The remote MCP is one server — one probe, one status.
|
|
70
|
+
- Updated capability matrix in `connections/connections.md`: a single `Figma` row now declares write-back under the `design` column (FWR-01..04).
|
|
71
|
+
- Regenerated `test-fixture/baselines/phase-6/connection-list.txt` to drop the deleted `figma-writer.md` entry.
|
|
72
|
+
|
|
73
|
+
### Migration
|
|
74
|
+
- Install the remote Figma MCP (one command; replaces both prior installs):
|
|
75
|
+
```
|
|
76
|
+
claude mcp add figma --transport http https://mcp.figma.com/v1/sse
|
|
77
|
+
```
|
|
78
|
+
- Optionally remove the old desktop MCP after upgrading:
|
|
79
|
+
```
|
|
80
|
+
claude mcp remove figma-desktop
|
|
81
|
+
```
|
|
82
|
+
- No command or flag renames. The `design-figma-writer` agent keeps its name and proposal→confirm UX unchanged.
|
|
83
|
+
|
|
84
|
+
### Off-cadence note
|
|
85
|
+
- Labelled **v1.0.7.1** per the decimal-phase convention (established by Phase 10.1 → v1.0.4.1). The label is CHANGELOG-only: `package.json`, `.claude-plugin/plugin.json`, and `.claude-plugin/marketplace.json` remain at `1.0.7` so the release workflow does not auto-tag. The next integer bump (Phase 14 → v1.0.8) will absorb these changes implicitly. This matches how Phase 10.1 was handled.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
7
89
|
## [1.0.7] — 2026-04-18
|
|
8
90
|
|
|
9
91
|
### Added — Phase 13: CI/CD
|
package/README.md
CHANGED
|
@@ -68,7 +68,9 @@ Get Design Done fixes that. It's the context engineering layer for design work i
|
|
|
68
68
|
|
|
69
69
|
## Who This Is For
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
Anyone shipping UI with Claude Code who expects the output to actually hold up — engineers, designers, design-engineers, solo founders. If you care that tokens match, contrast passes WCAG, and the result ties back to what you asked for, this is for you.
|
|
72
|
+
|
|
73
|
+
You don't need to be a designer. The pipeline carries the design expertise so you don't have to — it extracts the system, grounds in references, verifies against the brief, and catches the things people usually miss.
|
|
72
74
|
|
|
73
75
|
Built-in quality gates catch real problems: Handoff Faithfulness scoring on Claude Design bundles, contrast audits across the full palette × surface matrix, anti-pattern detection from the NNG catalog, dark-mode architecture verification, and motion-system consistency checks.
|
|
74
76
|
|
|
@@ -285,14 +287,13 @@ Every stage uses the same pattern: a thin orchestrator skill spawns specialized
|
|
|
285
287
|
|
|
286
288
|
All agents carry `default-tier: haiku|sonnet|opus` + `tier-rationale` in frontmatter. Every agent opens with `@reference/shared-preamble.md` so the first agent in a session pays full cost and the rest ride Anthropic's 5-minute prompt cache.
|
|
287
289
|
|
|
288
|
-
###
|
|
290
|
+
### 8 Tool Connections
|
|
289
291
|
|
|
290
292
|
Every connection is optional. The pipeline degrades gracefully — a grep-based fallback exists for every missing tool.
|
|
291
293
|
|
|
292
294
|
| Connection | Type | Purpose |
|
|
293
295
|
|-----------|------|---------|
|
|
294
|
-
| Figma
|
|
295
|
-
| Figma Writer | MCP (`mcp__figma__use_figma`) | Write decisions back to Figma (annotate, tokenize, Code Connect) |
|
|
296
|
+
| Figma | MCP (`mcp__figma__*`, remote) | Token extraction, design context pre-population, write-back via `use_figma` (annotate, tokenize, Code Connect) |
|
|
296
297
|
| Refero | MCP (`mcp__refero__*`) | Reference design search during exploration |
|
|
297
298
|
| Pinterest | MCP (`mcp__mcp-pinterest__*`) | Visual inspiration boards alongside Refero |
|
|
298
299
|
| Preview (Playwright) | MCP (`mcp__Claude_Preview__*`) | Live page screenshots for visual verification |
|
|
@@ -331,6 +332,47 @@ After each design cycle, `/gdd:reflect` reads `.design/learnings/`, `.design/tel
|
|
|
331
332
|
|
|
332
333
|
---
|
|
333
334
|
|
|
335
|
+
## Authority Watcher
|
|
336
|
+
|
|
337
|
+
Subscribe to a curated whitelist of design-authority sources, diff it against a snapshot, and feed only genuinely new, classified entries into the Self-Improvement reflector. Authority monitoring — not trend watching.
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
# On-demand diff + classify
|
|
341
|
+
/gdd:watch-authorities
|
|
342
|
+
|
|
343
|
+
# Force re-seed the snapshot (recovery for a corrupted snapshot)
|
|
344
|
+
/gdd:watch-authorities --refresh
|
|
345
|
+
|
|
346
|
+
# Surface backlog since a specific date
|
|
347
|
+
/gdd:watch-authorities --since 2026-01-01
|
|
348
|
+
|
|
349
|
+
# Limit to a single feed (debugging)
|
|
350
|
+
/gdd:watch-authorities --feed wai-aria-apg
|
|
351
|
+
|
|
352
|
+
# Schedule recurring runs (requires the scheduled-tasks MCP)
|
|
353
|
+
/gdd:watch-authorities --schedule weekly
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### What the whitelist covers
|
|
357
|
+
|
|
358
|
+
See [`reference/authority-feeds.md`](reference/authority-feeds.md). 26 curated feeds grouped by kind:
|
|
359
|
+
|
|
360
|
+
- **Spec sources** — WAI-ARIA APG, Material 3, Apple HIG, Fluent 2, W3C Design Tokens CG
|
|
361
|
+
- **Component systems** — Radix, shadcn/ui, Polaris, Carbon, Primer, Atlassian, Ant, Mantine
|
|
362
|
+
- **Research institutions** — Nielsen Norman Group, Laws of UX, Baymard
|
|
363
|
+
- **Named practitioners** — 10 writers filtered for spec-adjacent, durable, original analysis
|
|
364
|
+
- **User-added Are.na channels** — extensibility point; add your own via a PR to the Are.na section, no config file or schema editing required
|
|
365
|
+
|
|
366
|
+
### What is explicitly rejected
|
|
367
|
+
|
|
368
|
+
No Dribbble. No Behance. No LinkedIn. No generic "trending" aggregators. See `reference/authority-feeds.md` §"Rejected kinds" — enforced structurally by `scripts/tests/test-authority-rejected-kinds.sh`, which greps the active whitelist for rejected hostnames and fails CI on any match. The anti-slop thesis is a test, not a comment.
|
|
369
|
+
|
|
370
|
+
### How the report feeds reflection
|
|
371
|
+
|
|
372
|
+
The watcher writes `.design/authority-report.md` — new entries classified into five buckets (`spec-change`, `heuristic-update`, `pattern-guidance`, `craft-tip`, `skip`) with a one-sentence rationale each. `/gdd:reflect` reads the report alongside internal telemetry and proposes reference-file updates. Nothing auto-ships — you review every proposal via `/gdd:apply-reflections`.
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
334
376
|
## Commands
|
|
335
377
|
|
|
336
378
|
All commands use the `/gdd:` namespace.
|
|
@@ -443,13 +485,15 @@ Full command reference with argument specs: [`SKILL.md`](SKILL.md).
|
|
|
443
485
|
|
|
444
486
|
All connections are optional — the pipeline degrades gracefully when any connection is unavailable.
|
|
445
487
|
|
|
446
|
-
### Figma MCP
|
|
488
|
+
### Figma MCP (reads + writes)
|
|
447
489
|
|
|
448
|
-
|
|
490
|
+
One remote MCP covers both reads and writes as of v1.0.7.1. When it is active, `explore` reads Figma variables and pre-populates design decisions from your file, and `design-figma-writer` writes decisions back via `use_figma` — annotates frames, tokenizes local styles, registers Code Connect mappings. Proposal → confirm discipline with `--dry-run` and `--confirm-shared` guards. Falls back to code-only analysis when the MCP is not configured. One install command unlocks both:
|
|
449
491
|
|
|
450
|
-
|
|
492
|
+
```
|
|
493
|
+
claude mcp add figma --transport http https://mcp.figma.com/v1/sse
|
|
494
|
+
```
|
|
451
495
|
|
|
452
|
-
`
|
|
496
|
+
Setup: [`connections/figma.md`](connections/figma.md). If you previously installed the local `figma-desktop` MCP, you can remove it — its read tools are now exposed on the remote server.
|
|
453
497
|
|
|
454
498
|
### Refero MCP
|
|
455
499
|
|
|
@@ -590,7 +634,7 @@ Every `/gdd:*` command and agent spawn passes through a cross-cutting optimizati
|
|
|
590
634
|
- **Streaming synthesizer** (`skills/synthesize/`) — N parallel-mapper outputs collapse through a single Haiku call before returning to main context.
|
|
591
635
|
- **Cost telemetry** — `.design/telemetry/costs.jsonl` appends one row per spawn decision: `{ts, agent, tier, tokens_in, tokens_out, cache_hit, est_cost_usd, cycle, phase}`. Aggregated to `.design/agent-metrics.json`. Consumed by `/gdd:optimize` and `design-reflector`.
|
|
592
636
|
|
|
593
|
-
|
|
637
|
+
CI diffs against a locked cost baseline on every push to catch regressions.
|
|
594
638
|
|
|
595
639
|
---
|
|
596
640
|
|
|
@@ -623,19 +667,18 @@ lint → validate → test (matrix) → security + size-budget
|
|
|
623
667
|
- **Agent hygiene** — frontmatter completeness, line-count tier budgets, required-reading path validity, `/gdd:` namespace consistency
|
|
624
668
|
- **System contracts** — config schema, command↔skill parity, hooks integrity, atomic writes to `.design/STATE.md`, frontmatter parser edge cases, model-profile resolution, `/gdd:health` output shape, worktree safety, semver bump sequence, STATE-TEMPLATE drift
|
|
625
669
|
- **Pipeline + data** — end-to-end smoke on `test-fixture/`, mapper JSON-schema validation (tokens, components, a11y, motion, hierarchy), parallelism-engine decision table, `Touches:` field parsing, cycle lifecycle, `.design/intel/` incremental-update correctness, regression-baseline drift detector
|
|
626
|
-
- **Feature correctness** — `/gdd:sketch` variant determinism,
|
|
670
|
+
- **Feature correctness** — `/gdd:sketch` variant determinism, 8-connection probe contracts with mocked MCPs, `design-figma-writer` dry-run discipline, `design-reflector` proposal-only shape, deprecated-name redirects, NNG heuristic coverage, injection-scanner hook behavior, optimization-layer schema enforcement
|
|
627
671
|
|
|
628
672
|
### Release automation
|
|
629
673
|
|
|
630
|
-
`.github/workflows/release.yml` auto-tags and publishes a GitHub Release when `.claude-plugin/plugin.json` version changes. Release body is extracted from the matching `CHANGELOG.md` section. A release-time smoke test
|
|
674
|
+
`.github/workflows/release.yml` auto-tags and publishes a GitHub Release when `.claude-plugin/plugin.json` version changes. Release body is extracted from the matching `CHANGELOG.md` section. A release-time smoke test diffs a fresh checkout against a locked baseline before the release publishes.
|
|
631
675
|
|
|
632
|
-
|
|
676
|
+
Every PR must pass `npm test` before merging to `main`. See [`CONTRIBUTING.md`](CONTRIBUTING.md) for the re-lock procedure when baselines change.
|
|
633
677
|
|
|
634
678
|
---
|
|
635
679
|
|
|
636
|
-
##
|
|
680
|
+
## What ships with the plugin
|
|
637
681
|
|
|
638
|
-
**Ships with the plugin:**
|
|
639
682
|
- `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json` — manifest
|
|
640
683
|
- `SKILL.md` — root pipeline router
|
|
641
684
|
- `skills/` — 55 stage + standalone skills
|
|
@@ -644,11 +687,6 @@ From **v1.0.6 forward**, every PR MUST pass `npm test` before merging to `main`.
|
|
|
644
687
|
- `reference/` — curated design reference (shared preamble, model tiers, model prices, schemas, DEPRECATIONS, config schema)
|
|
645
688
|
- `hooks/`, `scripts/bootstrap.sh`
|
|
646
689
|
|
|
647
|
-
**Dev-only (gitignored, not distributed):**
|
|
648
|
-
- `.planning/` — GSD planning artifacts for GDD's own development
|
|
649
|
-
- `.claude/memory/` — session-level memory
|
|
650
|
-
- `.claude/settings.local.json`
|
|
651
|
-
|
|
652
690
|
---
|
|
653
691
|
|
|
654
692
|
## Develop locally
|
package/SKILL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: get-design-done
|
|
3
3
|
short_name: gdd
|
|
4
4
|
description: "Master design pipeline for Claude Code. 5-stage workflow: Brief → Explore → Plan → Design → Verify. Run 'brief' first in any new project to capture the design problem, then 'explore' to inventory the codebase and interview for context. Invoke without arguments for status and auto-routing."
|
|
5
|
-
argument-hint: "[brief|explore|plan|design|verify|handoff|map|next|help|status|style|darkmode|compare|figma-write|graphify|discuss|list-assumptions|progress|health|todo|stats|note|plant-seed|add-backlog|review-backlog|scan|discover|settings|update|reapply-patches|audit|pause|resume|new-cycle|debug|quick|new-project|complete-cycle|fast|do|ship|undo|pr-branch|sketch|sketch-wrap-up|spike|spike-wrap-up|reflect|apply-reflections|analyze-dependencies|extract-learnings|skill-manifest|warm-cache|optimize|cache-manager]"
|
|
5
|
+
argument-hint: "[brief|explore|plan|design|verify|handoff|map|next|help|status|style|darkmode|compare|figma-write|graphify|discuss|list-assumptions|progress|health|todo|stats|note|plant-seed|add-backlog|review-backlog|scan|discover|settings|update|reapply-patches|audit|pause|resume|new-cycle|debug|quick|new-project|complete-cycle|fast|do|ship|undo|pr-branch|sketch|sketch-wrap-up|spike|spike-wrap-up|reflect|apply-reflections|analyze-dependencies|extract-learnings|skill-manifest|warm-cache|optimize|cache-manager|watch-authorities|check-update]"
|
|
6
6
|
user-invocable: true
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -83,6 +83,7 @@ Each stage produces artifacts in `.design/` inside the current project.
|
|
|
83
83
|
| `analyze-dependencies [--slice <name>]` | `get-design-done:analyze-dependencies` | Query the `.design/intel/` store — dependency slices, graph queries, phase-scoped reads |
|
|
84
84
|
| `extract-learnings [--cycle <slug>]` | `get-design-done:extract-learnings` | Extract decisions, lessons, patterns, and surprises from a completed cycle → `.design/cycles/<slug>/LEARNINGS.md` |
|
|
85
85
|
| `skill-manifest [--refresh]` | `get-design-done:skill-manifest` | List or refresh the local skill manifest used by the router for discovery |
|
|
86
|
+
| `watch-authorities [--refresh] [--since <date>] [--feed <name>] [--schedule <cadence>]` | `get-design-done:gdd-watch-authorities` | Run design-authority-watcher — fetch curated feeds, diff snapshot, classify new entries → `.design/authority-report.md` (consumed by `/gdd:reflect`) |
|
|
86
87
|
|
|
87
88
|
## Handoff Routing
|
|
88
89
|
|
|
@@ -125,9 +126,9 @@ Each stage produces artifacts in `.design/` inside the current project.
|
|
|
125
126
|
|
|
126
127
|
6. **Optional: Bidirectional write-back** (post-verify, offered to user)
|
|
127
128
|
After verify completes without FAIL-level gaps:
|
|
128
|
-
- Check STATE.md `<connections>` for `
|
|
129
|
-
- `
|
|
130
|
-
- `
|
|
129
|
+
- Check STATE.md `<connections>` for `figma:` (the unified remote MCP covers both reads and writes as of v1.0.7.1)
|
|
130
|
+
- `figma: not_configured` or `figma: unavailable` → skip (no offer)
|
|
131
|
+
- `figma: available` → offer: "Write implementation status back to Figma? (annotates frames + Code Connect mappings)"
|
|
131
132
|
Options: [yes, write back] [dry-run, show proposal only] [skip]
|
|
132
133
|
- If yes or dry-run: spawn `agents/design-figma-writer.md` with `mode: implementation-status`, `dry_run: <true|false>`
|
|
133
134
|
|
|
@@ -200,6 +201,7 @@ If `$ARGUMENTS` is a stage or command name — invoke it directly, no state chec
|
|
|
200
201
|
/gdd:audit → Skill("get-design-done:gdd-audit")
|
|
201
202
|
/gdd:reflect → Skill("get-design-done:gdd-reflect")
|
|
202
203
|
/gdd:apply-reflections → Skill("get-design-done:gdd-apply-reflections")
|
|
204
|
+
/gdd:watch-authorities → Skill("get-design-done:gdd-watch-authorities")
|
|
203
205
|
/gdd:pause → Skill("get-design-done:gdd-pause")
|
|
204
206
|
/gdd:resume → Skill("get-design-done:gdd-resume")
|
|
205
207
|
# --- Lifecycle ---
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design-authority-watcher
|
|
3
|
+
description: Fetches a curated whitelist of design-authority feeds, diffs against .design/authority-snapshot.json, classifies new entries into five buckets, emits .design/authority-report.md. Spawned by /gdd:watch-authorities.
|
|
4
|
+
tools: Read, Write, WebFetch, Bash, Grep, Glob
|
|
5
|
+
color: blue
|
|
6
|
+
model: inherit
|
|
7
|
+
default-tier: sonnet
|
|
8
|
+
tier-rationale: "Network fetch + per-entry classification is open-ended pattern recognition; Haiku misclassifies spec-vs-opinion boundary, Opus overkill for a weekly run."
|
|
9
|
+
size_budget: M
|
|
10
|
+
parallel-safe: always
|
|
11
|
+
typical-duration-seconds: 90
|
|
12
|
+
reads-only: false
|
|
13
|
+
writes:
|
|
14
|
+
- ".design/authority-snapshot.json"
|
|
15
|
+
- ".design/authority-report.md"
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
@reference/shared-preamble.md
|
|
19
|
+
|
|
20
|
+
# design-authority-watcher
|
|
21
|
+
|
|
22
|
+
## Role
|
|
23
|
+
|
|
24
|
+
You are the network-fetching agent for the authority-watcher phase. You read the whitelist at `reference/authority-feeds.md`, fetch each feed via `WebFetch` (or the Are.na v2 API for `kind: arena` entries), diff against `.design/authority-snapshot.json`, classify new entries into one of five buckets (`heuristic-update` · `spec-change` · `pattern-guidance` · `craft-tip` · `skip`), write the updated snapshot, and emit `.design/authority-report.md`. You never modify `agents/design-reflector.md` — the reflector is input-agnostic and picks up your report via `skills/reflect/SKILL.md` step 3 (wired in Plan 13.2-03). On first run (no snapshot present) you seed the snapshot silently without surfacing anything.
|
|
25
|
+
|
|
26
|
+
## Required Reading
|
|
27
|
+
|
|
28
|
+
The orchestrating skill supplies a `<required_reading>` block in the prompt. Read every listed file before acting — this is mandatory. Minimum expected inputs (skip gracefully if absent, note what is missing):
|
|
29
|
+
|
|
30
|
+
- `reference/authority-feeds.md` — the curated whitelist you fetch from.
|
|
31
|
+
- `.design/authority-snapshot.json` — prior snapshot (absent = first run per D-15).
|
|
32
|
+
- `.design/STATE.md` — for cycle slug if present (non-fatal if absent).
|
|
33
|
+
|
|
34
|
+
## Flags
|
|
35
|
+
|
|
36
|
+
Flags are supplied by the orchestrating skill in the prompt (the skill parses `/gdd:watch-authorities` user arguments):
|
|
37
|
+
|
|
38
|
+
- `--refresh` → re-seed snapshot from current feed state without surfacing anything (D-23 recovery mode; behaves identically to first run).
|
|
39
|
+
- `--since <ISO8601 date>` → surface entries whose `published` date is newer than the given boundary regardless of snapshot state (D-15 escape hatch + D-23 backlog surfacing).
|
|
40
|
+
- `--feed <feed-id>` → fetch only the single named feed (debugging / spot-check).
|
|
41
|
+
|
|
42
|
+
The `--schedule` flag is handled by the skill (Plan 13.2-03), not by this agent. If you receive it, ignore.
|
|
43
|
+
|
|
44
|
+
## Step 1 — Load Whitelist
|
|
45
|
+
|
|
46
|
+
Read `reference/authority-feeds.md`. Parse each feed entry (lines matching `^- \*\*\[.+\]\(https?://`) into a tuple `{ title, homepage, kind, url, cadence-hint, rationale, feed-id }`. Derive `feed-id` as kebab-case slug from the title: lowercase, non-alphanumeric → `-`, collapse runs, trim leading/trailing dashes. Entries inside HTML comments (`<!-- ... -->`) are placeholders — ignore. Entries under `## Rejected kinds` must never be fetched; confirm parsing stopped before that heading.
|
|
47
|
+
|
|
48
|
+
If `--feed <feed-id>` is set, filter the list to the single matching entry. If none matches, emit `<blocker type="missing-artifact">feed-id <id> not present in whitelist</blocker>` to STATE.md and terminate with `## WATCH COMPLETE`.
|
|
49
|
+
|
|
50
|
+
## Step 2 — Load Prior Snapshot
|
|
51
|
+
|
|
52
|
+
Read `.design/authority-snapshot.json`.
|
|
53
|
+
|
|
54
|
+
- If absent: set `first_run = true`, initialize in-memory `feeds = {}`.
|
|
55
|
+
- If present: parse JSON. Validate `version === 1`. On mismatch, emit `<blocker type="contract-violation">authority-snapshot.json version mismatch: expected 1</blocker>` to STATE.md and do NOT continue to Step 6 (write).
|
|
56
|
+
|
|
57
|
+
If `--refresh` is set, behave as if `first_run = true` regardless of prior snapshot state.
|
|
58
|
+
|
|
59
|
+
## Step 3 — Fetch Loop
|
|
60
|
+
|
|
61
|
+
For each feed in the filtered list, fetch content. Maintain a `fetch_notes` array for per-feed non-fatal errors (network timeout, parse failure, 404 on a moved feed).
|
|
62
|
+
|
|
63
|
+
**`kind: arena`** — GET `https://api.are.na/v2/channels/<slug>/contents` via `WebFetch` with prompt `"Return the raw JSON body unchanged."`. Parse JSON. For each content block, build an entry:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
id = String(block.id)
|
|
67
|
+
title = block.title || block.generated_title || "Untitled"
|
|
68
|
+
summary = (block.description || "").slice(0, 2000)
|
|
69
|
+
permalink = block.class === "Link" ? block.source.url : "https://are.na/block/" + block.id
|
|
70
|
+
published = block.created_at // used only for --since filtering
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**All other kinds** — GET the feed URL via `WebFetch` with prompt:
|
|
74
|
+
|
|
75
|
+
> Return the feed as a structured list of entries with fields: id (use guid or link), title, summary (use description/summary/content:encoded, strip HTML tags), link, published (ISO8601 if available). Prefer Atom fields over RSS when both appear.
|
|
76
|
+
|
|
77
|
+
Parse the structured reply into entries with the same field names as the arena branch.
|
|
78
|
+
|
|
79
|
+
**Polite-crawl:** between requests to the **same host** (by `URL.host`), sleep 250ms (D-11). Distinct hosts may fetch back-to-back without delay. A per-feed inline `min-delay-ms:` override in the whitelist (if present) supersedes the default.
|
|
80
|
+
|
|
81
|
+
**Errors are non-fatal.** On WebFetch or parse failure, push `{ feed-id, error: "<one-sentence>" }` into `fetch_notes` and continue. A single failing feed must not block the other ~25.
|
|
82
|
+
|
|
83
|
+
## Step 4 — Diff
|
|
84
|
+
|
|
85
|
+
For each feed's newly-fetched entries, compute a content hash:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
hash = sha256(title + "\n" + summary)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Use `Bash` to invoke `printf '%s\n%s' "$title" "$summary" | shasum -a 256 | awk '{print $1}'` (or the Node `crypto.createHash('sha256').update(title+"\n"+summary).digest('hex')` equivalent). Output MUST be a 64-char lowercase hex string — the schema at `reference/schemas/authority-snapshot.schema.json` enforces `^[0-9a-f]{64}$`.
|
|
92
|
+
|
|
93
|
+
**New-entry rule** (D-13):
|
|
94
|
+
- Entry is new if its `id` is not present in `prior.feeds[feed-id].entries`, OR
|
|
95
|
+
- Entry is new if its `id` IS present but the `hash` differs from the stored one (content changed).
|
|
96
|
+
|
|
97
|
+
**`--since <date>` modifier:** also mark entries whose `published > since` as new, independent of snapshot membership. This is the backlog escape hatch.
|
|
98
|
+
|
|
99
|
+
**First-run / refresh short-circuit:** if `first_run === true` (either initial run or `--refresh`) AND `--since` is absent, classify nothing — accumulate every fetched entry directly into the new snapshot and skip Step 5. Proceed to Step 6.
|
|
100
|
+
|
|
101
|
+
## Step 5 — Classify
|
|
102
|
+
|
|
103
|
+
Apply the decision table below to each new entry. Emit `{ ...entry, classification, rationale }` where `rationale` is a ≤1-sentence deterministic trace of which rule matched (e.g., "title matched `/added|updated|removed/i` → spec-change"). Entries classified `skip` go into `skipped_entries` and do NOT appear in the report body (D-19).
|
|
104
|
+
|
|
105
|
+
**Classification decision table (D-17):**
|
|
106
|
+
|
|
107
|
+
| Source kind | Default classification |
|
|
108
|
+
|---|---|
|
|
109
|
+
| `spec-source` | `spec-change` if title matches `/(added|updated|deprecated|removed|new)/i` else `pattern-guidance` |
|
|
110
|
+
| `component-system` | `pattern-guidance` if title matches new-component regex (`/(new|add(ed)?|introduc(e|ing))/i` AND contains a component noun like button/dialog/menu/modal/card/tooltip/popover/select/combobox/etc.) else `craft-tip` |
|
|
111
|
+
| `research` | `heuristic-update` if title or summary mentions `/principle|law|heuristic|usability finding/i` else `craft-tip` |
|
|
112
|
+
| `named-practitioner` | `craft-tip` by default; upgrade to `pattern-guidance` if the entry's link points to a spec-source host (`w3.org`, `developer.apple.com`, `m3.material.io`, `fluent2.microsoft.design`) |
|
|
113
|
+
| `arena` | `pattern-guidance` (user-curated references are pattern material by construction) |
|
|
114
|
+
| any, flagged promo/newsletter/ad or matching skip-regex `/(sponsor(ed)?\|newsletter\|promo(tion)?\|\[ad\]\|subscribe|unsubscribe|webinar)/i` in title | `skip` (takes precedence over all above) |
|
|
115
|
+
|
|
116
|
+
The skip row is evaluated LAST and overrides the kind-based row — a component-system release titled "Sponsored: shipping our new sponsor tier" still ends up `skip`.
|
|
117
|
+
|
|
118
|
+
## Step 6 — Write Snapshot
|
|
119
|
+
|
|
120
|
+
For each feed, merge the newly-fetched entries into `feeds[feed-id].entries`:
|
|
121
|
+
- Preserve the prior entries for ids not seen this run (stale entries persist until pruned).
|
|
122
|
+
- For ids seen this run, overwrite the prior record with `{ id, hash }` from the fresh fetch.
|
|
123
|
+
- Append order: existing retained entries first (oldest → newest), then new arrivals.
|
|
124
|
+
- **Prune: keep only the last 200 entries per feed** (D-14). This is a hard cap; the schema at `reference/schemas/authority-snapshot.schema.json` rejects >200 via `maxItems:200`, so pruning MUST happen before the write call.
|
|
125
|
+
|
|
126
|
+
Set `feeds[feed-id].last_fetched_at` to the current ISO8601 UTC timestamp. Set top-level `generated_at` to the same. Serialize with 2-space indentation.
|
|
127
|
+
|
|
128
|
+
**Pre-write contract check:** before calling `Write`, walk the serialized object and verify:
|
|
129
|
+
1. `version === 1`.
|
|
130
|
+
2. Every `feeds[*].entries[*].hash` matches `^[0-9a-f]{64}$`.
|
|
131
|
+
3. No feed's `entries.length > 200`.
|
|
132
|
+
|
|
133
|
+
If any check fails, emit `<blocker type="contract-violation">` to STATE.md with the offending path and do NOT write. Terminate with `## WATCH COMPLETE`.
|
|
134
|
+
|
|
135
|
+
On pass, write `.design/authority-snapshot.json`.
|
|
136
|
+
|
|
137
|
+
## Step 7 — Write Report
|
|
138
|
+
|
|
139
|
+
Write `.design/authority-report.md`. Overwritten every run.
|
|
140
|
+
|
|
141
|
+
**First-run / refresh mode** (either `first_run` true or `--refresh` set, and `--since` absent):
|
|
142
|
+
|
|
143
|
+
```markdown
|
|
144
|
+
# Authority Report — <ISO date>
|
|
145
|
+
|
|
146
|
+
Seeded snapshot for N feeds — next run will surface new entries.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
No sections, no footer. Terminate the file after the single sentence.
|
|
150
|
+
|
|
151
|
+
**Normal mode** — header, sections, footer:
|
|
152
|
+
|
|
153
|
+
```markdown
|
|
154
|
+
# Authority Report — <ISO date>
|
|
155
|
+
|
|
156
|
+
N entries surfaced across M feeds. K skipped.
|
|
157
|
+
|
|
158
|
+
## spec-change (X)
|
|
159
|
+
- **[Title](url)** — feed: <feed-title> — *<rationale sentence>*
|
|
160
|
+
|
|
161
|
+
## heuristic-update (X)
|
|
162
|
+
- **[Title](url)** — feed: <feed-title> — *<rationale sentence>*
|
|
163
|
+
|
|
164
|
+
## pattern-guidance (X)
|
|
165
|
+
- **[Title](url)** — feed: <feed-title> — *<rationale sentence>*
|
|
166
|
+
|
|
167
|
+
## craft-tip (X)
|
|
168
|
+
- **[Title](url)** — feed: <feed-title> — *<rationale sentence>*
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
**Skipped:** K entries (see `.design/authority-snapshot.json` for the full trail).
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Rules:**
|
|
176
|
+
- Classification sections ordered by weight: `spec-change` → `heuristic-update` → `pattern-guidance` → `craft-tip` (D-21).
|
|
177
|
+
- Omit a section entirely when its count is zero (signal density).
|
|
178
|
+
- The **Skipped** footer line is ALWAYS present — even when K=0 — for Plan 13.2-04 diff-test determinism.
|
|
179
|
+
- If `fetch_notes` is non-empty, append a `Fetch notes:` block after the Skipped line, one bullet per note:
|
|
180
|
+
```markdown
|
|
181
|
+
|
|
182
|
+
Fetch notes:
|
|
183
|
+
- <feed-id>: <one-sentence error>
|
|
184
|
+
```
|
|
185
|
+
- Entry line format is exact: `- **[Title](url)** — feed: <feed-title> — *<rationale>*`. Em-dash (`—`), italicized rationale, no trailing period unless the rationale itself ends one.
|
|
186
|
+
|
|
187
|
+
## Step 8 — Output
|
|
188
|
+
|
|
189
|
+
Emit a single-line summary to stdout:
|
|
190
|
+
|
|
191
|
+
- **Normal mode:** `Surfaced N entries across M feeds. K skipped. See .design/authority-report.md.`
|
|
192
|
+
- **First-run / refresh mode:** `Seeded snapshot for N feeds — next run will surface new entries.`
|
|
193
|
+
|
|
194
|
+
## Do Not
|
|
195
|
+
|
|
196
|
+
- Do NOT modify `agents/design-reflector.md`. Reflector integration is Plan 13.2-03's scope and lives in `skills/reflect/SKILL.md` only.
|
|
197
|
+
- Do NOT fetch URLs that are not listed in `reference/authority-feeds.md`. The whitelist is the allow-list.
|
|
198
|
+
- Do NOT spawn subagents — you have no `Task` tool for a reason.
|
|
199
|
+
- Do NOT commit on behalf of the user. `.design/authority-snapshot.json` and `.design/authority-report.md` both live under gitignored `.design/`.
|
|
200
|
+
- Do NOT write outside your declared `writes:` list. If work appears to require another write, stop and return a `<blocker>`.
|
|
201
|
+
|
|
202
|
+
## Completion
|
|
203
|
+
|
|
204
|
+
On contract violation (schema mismatch, hash format violation, over-200 entries) emit a `<blocker>` to STATE.md per the preamble protocol. Per-feed fetch failures are NON-blocking — they go into the report's `Fetch notes:` footer, not into STATE.md.
|
|
205
|
+
|
|
206
|
+
Terminate every response with:
|
|
207
|
+
|
|
208
|
+
## WATCH COMPLETE
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-context-builder
|
|
3
3
|
description: Detects existing design system state via grep/glob, runs discovery interview asking ONLY unanswered questions, produces .design/DESIGN-CONTEXT.md. Spawned by the discover stage.
|
|
4
|
-
tools: Read, Write, Bash, Grep, Glob,
|
|
4
|
+
tools: Read, Write, Bash, Grep, Glob, mcp__figma__get_variable_defs, mcp__figma__get_metadata, mcp__refero__search
|
|
5
5
|
required_reading:
|
|
6
6
|
- connections/storybook.md
|
|
7
7
|
color: blue
|
|
@@ -50,10 +50,10 @@ The orchestrating stage supplies a `<required_reading>` block in the prompt. Rea
|
|
|
50
50
|
**ToolSearch first.** Figma tools may be in the deferred tool set — calling them without a prior ToolSearch fails silently.
|
|
51
51
|
|
|
52
52
|
```
|
|
53
|
-
ToolSearch({ query: "
|
|
53
|
+
ToolSearch({ query: "select:mcp__figma__get_variable_defs", max_results: 1 })
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
Then call `
|
|
56
|
+
Then call `mcp__figma__get_variable_defs` (no arguments — returns all variables in the active Figma file).
|
|
57
57
|
|
|
58
58
|
> If `get_variable_defs` errors (most commonly because no Figma file is open): skip Step 0 entirely AND update `.design/STATE.md` `<connections>` to `figma: unavailable`. Proceed to Step 1 with no pre-populated decisions.
|
|
59
59
|
|
|
@@ -30,7 +30,7 @@ The spawning prompt supplies `<required_reading>`. Read every listed file before
|
|
|
30
30
|
|
|
31
31
|
## Step 0 — Context pre-load (Figma only, optional)
|
|
32
32
|
|
|
33
|
-
If `<connections>` in STATE.md shows `figma: available`, ToolSearch `
|
|
33
|
+
If `<connections>` in STATE.md shows `figma: available`, `ToolSearch({ query: "select:mcp__figma__get_variable_defs", max_results: 1 })` and call `mcp__figma__get_variable_defs`. For each returned variable, draft a *tentative* D-XX decision (mark "tentative — confirm with user"). Silently skip on any error. Do NOT grep the codebase.
|
|
34
34
|
|
|
35
35
|
## Step 1 — Mode dispatch
|
|
36
36
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: design-figma-writer
|
|
3
3
|
description: Writes design decisions back to Figma — annotations, token bindings, Code Connect mappings, and implementation-status write-back. Operates in proposal→confirm mode by default. Accepts --dry-run (emit proposal without executing) and --confirm-shared (required for writes to team library components).
|
|
4
|
-
tools: Read, Write, Bash, Grep, Glob, mcp__figma__use_figma,
|
|
4
|
+
tools: Read, Write, Bash, Grep, Glob, mcp__figma__use_figma, mcp__figma__get_variable_defs, mcp__figma__get_metadata
|
|
5
5
|
color: purple
|
|
6
6
|
model: inherit
|
|
7
7
|
default-tier: sonnet
|
|
@@ -34,7 +34,7 @@ ToolSearch({ query: "select:mcp__figma__use_figma", max_results: 1 })
|
|
|
34
34
|
→ Non-empty → proceed to Step 1
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
Note: `mcp__figma__use_figma` is the remote Figma MCP (registered as server
|
|
37
|
+
Note: `mcp__figma__use_figma` is the remote Figma MCP (registered as server `figma`). Reads (`mcp__figma__get_metadata`, `mcp__figma__get_variable_defs`) live on the same server. As of v1.0.7.1, there is no separate read-only desktop MCP — the remote MCP is the single supported Figma connection.
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
@@ -72,15 +72,15 @@ Read `.design/DESIGN-CONTEXT.md`. Extract the relevant data for the selected mod
|
|
|
72
72
|
- For `tokenize`: color/spacing/type literal values that could map to Figma variables — look for hex values, spacing scales, and typography sizes in the decisions section
|
|
73
73
|
- For `mappings`: component names and their source file paths — look for component listings, file paths, and implementation references
|
|
74
74
|
|
|
75
|
-
Also read the active Figma file structure using the
|
|
75
|
+
Also read the active Figma file structure using the remote MCP (reads and writes share the same server):
|
|
76
76
|
|
|
77
77
|
```
|
|
78
|
-
ToolSearch({ query: "
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
ToolSearch({ query: "select:mcp__figma__get_metadata,mcp__figma__get_variable_defs", max_results: 2 })
|
|
79
|
+
mcp__figma__get_metadata() // lightweight layer outline
|
|
80
|
+
mcp__figma__get_variable_defs() // for tokenize mode — variable names and values
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
If `get_metadata` errors (no file
|
|
83
|
+
If `get_metadata` errors (no file accessible), write: "No Figma file is accessible. Open the target file in Figma and retry." and STOP.
|
|
84
84
|
|
|
85
85
|
---
|
|
86
86
|
|
|
@@ -157,7 +157,7 @@ Wait for user response. If response is not "yes", STOP with "Cancelled."
|
|
|
157
157
|
|
|
158
158
|
## Step 5 — Execute Writes
|
|
159
159
|
|
|
160
|
-
For each operation in the proposal, call `mcp__figma__use_figma` with the appropriate operation payload.
|
|
160
|
+
For each operation in the proposal, call `mcp__figma__use_figma` with the appropriate operation payload.
|
|
161
161
|
|
|
162
162
|
For `annotate`:
|
|
163
163
|
|