@hegemonart/get-design-done 1.34.3 → 1.35.1
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 +43 -0
- package/README.md +8 -0
- package/agents/design-context-builder.md +15 -32
- package/agents/pr-commenter.md +132 -0
- package/connections/connections.md +29 -1
- package/connections/lazyweb.md +124 -0
- package/connections/mobbin.md +119 -0
- package/package.json +1 -1
- package/reference/pr-review-integration.md +96 -0
- package/reference/registry.json +7 -0
- package/skills/connections/SKILL.md +4 -4
- package/skills/connections/connections-onboarding.md +23 -5
- package/skills/discover/discover-procedure.md +19 -1
- package/skills/ship/SKILL.md +6 -0
|
@@ -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). v1.20.0 ships the SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream, and resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) for rate-limit + 429 + context-overflow recovery. 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.35.1"
|
|
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. v1.20.0 SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream at .design/telemetry/events.jsonl, resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) with rate-limit + 429 + context-overflow recovery, and TypeScript toolchain.",
|
|
15
|
-
"version": "1.
|
|
15
|
+
"version": "1.35.1",
|
|
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.35.1",
|
|
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. v1.20.0 SDK foundation: gdd-state MCP server (11 typed tools), lockfile-safe STATE.md mutations, event stream at .design/telemetry/events.jsonl, resilience primitives (jittered-backoff, rate-guard, error-classifier, iteration-budget) with rate-limit + 429 + context-overflow recovery, and TypeScript toolchain. v1.27.7 ships gdd-mcp (Phase 27.7): 12 read-only MCP tools for sub-3s priming. v1.28.0 (Phase 28): Foundational References Tier 2 — 5 new reference files (color-theory, composition, proportion-systems, i18n, contrast-advanced), 2 verifier i18n probes + 1 explore i18n-readiness probe, 12 additive cross-link insertions across 10 existing references, 2 orthogonal audit-scoring lens-tags (composition_alignment + i18n_readiness).",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "hegemonart",
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,49 @@ All notable changes to get-design-done are documented here. Versions follow [sem
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [1.35.1] - 2026-06-01
|
|
8
|
+
|
|
9
|
+
### Phase 35.1 — Team Surfaces: PR Inline Integration
|
|
10
|
+
|
|
11
|
+
First sub-phase of the split **Phase 35 (Team Surfaces Layer)**. Makes GDD's verify/audit output visible **inline on the pull request** — the surface a non-GDD-running teammate actually watches. After `/gdd:ship` creates the PR, the new `pr-commenter` agent posts inline review comments on changed lines, attaches Preview/Chromatic before-after screenshot pairs, and registers a `gdd/design-review` status check (audit pillar scores + verify pass/fail + a11y). **No new runtime dependency** — `gh` is the outbound channel (the `/gdd:ship` + `/gdd:report-issue` precedent); every outbound body is redacted; a `GDD_DISABLE_PR_COMMENTER` kill-switch + degrade-to-noop guarantee the agent never fails the ship. Opens the v1.35.x arc (CHANGELOG-only decimal). The parent Phase 35 stays open (35.2 Notification Backplane + 35.3 Ticket Sync remain).
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **`agents/pr-commenter.md` (inline PR review + status check, D-02/D-03).** A single-shot post-ship agent: posts inline review comments via `gh api .../pulls/{n}/comments` (selector-specific WCAG/verify findings on changed lines), attaches Preview (Phase 8) / Chromatic (Phase 25) before-after screenshot pairs when present, and registers the `gdd/design-review` check-run via `gh api .../check-runs` carrying audit pillar scores + verify pass/fail + a11y result. `size_budget: M`, `## Record`.
|
|
16
|
+
- **`reference/pr-review-integration.md` (the gh contract, registered).** The authoritative `gh`-CLI shapes the agent posts against — inline-comment payload, summary review, the `gdd/design-review` check-run, screenshot-pair attachment, mandatory `redact.cjs`, the kill-switch, and the consent-driven branch-protection setup (`scripts/apply-branch-protection.sh`; GDD registers the check, never force-edits protection). Registered in `reference/registry.json`.
|
|
17
|
+
- **`/gdd:ship` wiring (D-06).** `skills/ship/SKILL.md` Step 6.5 spawns `pr-commenter` (via `Task`) after `gh pr create` — degrade-to-noop, never blocks the ship success path.
|
|
18
|
+
- **Regression baseline.** `test/fixtures/baselines/phase-35-1/` + `test/suite/phase-35-1-baseline.test.cjs` (version-agnostic); plus structural + ship-wiring tests (`pr-commenter-static`, `ship-pr-commenter-wiring`).
|
|
19
|
+
|
|
20
|
+
### Notes
|
|
21
|
+
|
|
22
|
+
- **No new runtime dependency** — `gh` only (no `@octokit`/GitHub SDK); every outbound body routes through `scripts/lib/redact.cjs`; per-surface kill-switch `GDD_DISABLE_PR_COMMENTER` mirrors Phase 30.
|
|
23
|
+
- The 31.5 tarball golden was regenerated as a reviewed delta: **+2** (`agents/pr-commenter.md`, `reference/pr-review-integration.md`), zero removals.
|
|
24
|
+
- 6-manifest lockstep at **v1.35.1**. Version-sync hygiene upfront (D-09): `OFF_CADENCE_VERSIONS.add('1.35.1')` + the 19 live-pinned `manifests-version.txt` baselines forward-propagated 1.34.4 → 1.35.1.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## [1.34.4] - 2026-06-01
|
|
29
|
+
|
|
30
|
+
### Phase 34.4 — Lazyweb + Mobbin Research Connections (recovered)
|
|
31
|
+
|
|
32
|
+
Adds **two visual-reference MCP connections** to the discover stage — **Lazyweb** (free) and **Mobbin** (paid) — modeled on the existing Refero/Pinterest connection contract. Purely additive: no new pipeline stage, no new artifact, no new audit pillar; **no new runtime dependency** (both are optional user-installed MCPs, documented in their spec, never pre-declared in the plugin manifest — the Refero precedent). Recovered from a stranded Phase 30.5 fork (authored 2026-05-04 → expanded 2026-05-16) that never reached the canonical roadmap because `.planning/` is gitignored and a parallel session reused the 30.5 slot. A decimal release on the v1.34.x arc (CHANGELOG-only, D-02).
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
|
|
36
|
+
- **`connections/lazyweb.md` — free reference MCP (discover Tier 1, D-01).** Free bearer-token Streamable-HTTP MCP at `https://www.lazyweb.com/mcp` (`lazyweb_search` + `lazyweb_health`); 250k+ real app screens for pricing pages, onboarding flows, redesign comparisons, UI benchmarking. Copy-command setup (token at `~/.lazyweb/lazyweb_mcp_token`, then `claude plugin install lazyweb@lazyweb`) — **no auto-run** (the token write is a user-consent step). ToolSearch-only probe.
|
|
37
|
+
- **`connections/mobbin.md` — curated mobile/flow reference MCP (discover Tier 2, D-01).** HTTP MCP at `https://api.mobbin.com/mcp` (`claude mcp add mobbin --transport http https://api.mobbin.com/mcp`, auto-run-safe — OAuth on first call, requires an active Mobbin subscription); 600k+ screens / 130k+ flows for mobile + flow-level references. ToolSearch-only probe.
|
|
38
|
+
- **Cost-aware discover tier order (D-01).** Reference sources now resolve **Lazyweb (free, tried first) → Mobbin / Refero (paid, whichever is bound + subscribed) → Pinterest → awesome-design-md → WebFetch** — try the zero-cost source before any paid one. Wired through `connections/connections.md` (table + Capability Matrix + probe pattern, onboarded 12 → 14), `skills/discover/discover-procedure.md` (probes D/E), `skills/connections/` (`/gdd:connections` wizard + onboarding reference), and `agents/design-context-builder.md` (Area 5 rewrite + `tools` frontmatter).
|
|
39
|
+
- **Regression baseline.** `test/fixtures/baselines/phase-34-4/` (onboarded-connections snapshot + `manifests-version.txt`=1.34.4) pinned by `test/suite/phase-34-4-baseline.test.cjs`.
|
|
40
|
+
|
|
41
|
+
### Notes
|
|
42
|
+
|
|
43
|
+
- **No new runtime dependency** — both connections are optional user-installed MCPs (Refero precedent); neither is declared in `.claude-plugin/plugin.json`. Discover-stage only — no scan/plan/design/verify integration.
|
|
44
|
+
- The 31.5 tarball golden (`test/fixtures/baselines/phase-31-5/tarball-manifest.txt`) was regenerated as a reviewed delta: **+2** newly-shipped files (`connections/lazyweb.md`, `connections/mobbin.md`), zero removals. Tests are not shipped.
|
|
45
|
+
- 6-manifest lockstep at **v1.34.4** (`package.json` + `package-lock.json` (root + `packages.""`) + `.claude-plugin/plugin.json` + `.claude-plugin/marketplace.json` (metadata.version + plugins[0].version) + `.cursor-plugin/plugin.json` + `.codex-plugin/plugin.json`). Version-sync hygiene upfront (D-09): `OFF_CADENCE_VERSIONS.add('1.34.4')` + the 18 live-pinned `manifests-version.txt` baselines forward-propagated 1.34.3 → 1.34.4.
|
|
46
|
+
- **Provenance:** recovered from the `thirsty-curran` worktree's stranded `.planning` fork during a roadmap-reconciliation audit; the contiguity renumber (Phase 36→35 …, 2026-06-01) is unrelated and concurrent.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
7
50
|
## [1.34.3] - 2026-05-31
|
|
8
51
|
|
|
9
52
|
### Phase 34.3 — Non-Web Output Layer: Print/PDF
|
package/README.md
CHANGED
|
@@ -130,6 +130,14 @@ GDD also generates **print/PDF** output — the project-type detector routes a `
|
|
|
130
130
|
|
|
131
131
|
The constraints live in [`reference/print-design.md`](reference/print-design.md) — the `@page` box model (size/margin/marks), bleed box + crop/registration marks, CMYK color-space awareness (print is subtractive CMYK, not screen RGB), font embedding/outlining (print RIPs have no web fonts), and a 300dpi raster fallback. A deterministic static checker ([`scripts/lib/print/validate-print-css.cjs`](scripts/lib/print/validate-print-css.cjs)) flags the statically-verifiable subset (`PR-PAGE`/`PR-BLEED`/`PR-CMYK`/`PR-FONT`/`PR-DPI`). Rendered PDF/page verification via the optional [`print-renderer`](connections/print-renderer.md) connection (Paged.js/headless-Chrome or PDFKit) is **optional** — when absent the verify stage degrades to the static validator. Print generation is opt-in; **web stays the default**.
|
|
132
132
|
|
|
133
|
+
### Research connections — Lazyweb + Mobbin (v1.34.4)
|
|
134
|
+
|
|
135
|
+
The **discover** stage grounds design in real product references, resolving sources **cost-aware — the free source is tried before any paid one**. [`Lazyweb`](connections/lazyweb.md) (free MCP, 250k+ app screens — pricing pages, onboarding, redesign comparisons) is **Tier 1, always first**; [`Mobbin`](connections/mobbin.md) (paid MCP, 600k+ screens / 130k+ flows — mobile + flow-level) and [`Refero`](connections/refero.md) are **Tier 2** (use whichever you subscribe to), then Pinterest → local archetypes → WebFetch. Both are optional user-installed MCPs (**no new runtime dependency**), onboardable via `/gdd:connections`.
|
|
136
|
+
|
|
137
|
+
### Team surfaces — PR inline review (v1.35.1)
|
|
138
|
+
|
|
139
|
+
After `/gdd:ship` opens the PR, the [`pr-commenter`](agents/pr-commenter.md) agent posts GDD's verify/audit output **inline** on it: selector-specific findings as inline review comments on changed lines, Preview/Chromatic before-after screenshot pairs, and a `gdd/design-review` status check (audit pillar scores + verify pass/fail + a11y) that a teammate's branch protection can require. Outbound bodies are redacted; `GDD_DISABLE_PR_COMMENTER` (or `.design/config.json`) is the kill-switch; it degrades to a noop (prints bodies for manual paste) and **never fails the ship**. Uses `gh` only — **no new runtime dependency**. First sub-phase of the Team Surfaces layer (Slack/Discord notifications + Linear/Jira ticket-sync follow). Contract: [`reference/pr-review-integration.md`](reference/pr-review-integration.md).
|
|
140
|
+
|
|
133
141
|
### Previous releases
|
|
134
142
|
|
|
135
143
|
- **v1.26.0** — Headless Model Resolver (per-runtime tier→model map, `resolved_models` router field, per-runtime price tables, `reasoning-class` runtime-neutral alias).
|
|
@@ -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, mcp__figma__get_variable_defs, mcp__figma__get_metadata, mcp__figma-desktop__get_variable_defs, mcp__figma-desktop__get_metadata, mcp__Figma__get_variable_defs, mcp__Figma__get_metadata, mcp__refero__search
|
|
4
|
+
tools: Read, Write, Bash, Grep, Glob, mcp__figma__get_variable_defs, mcp__figma__get_metadata, mcp__figma-desktop__get_variable_defs, mcp__figma-desktop__get_metadata, mcp__Figma__get_variable_defs, mcp__Figma__get_metadata, mcp__refero__search, mcp__lazyweb__search, mcp__lazyweb__health, mcp__mobbin__search
|
|
5
5
|
required_reading:
|
|
6
6
|
- connections/storybook.md
|
|
7
7
|
color: blue
|
|
@@ -383,51 +383,34 @@ The NOT is equally important:
|
|
|
383
383
|
|
|
384
384
|
**Style direction (style-vocabulary.md):** Ask the user to confirm or adjust the inferred UI aesthetic style before writing the context file. Infer the style from the brand direction words captured above. Look up the inferred style name verbatim in `reference/style-vocabulary.md` to confirm it is coherent with the product type (Best For / Avoid For columns) and to surface the performance cost (Performance column) in the Constraints section. Record the confirmed style name verbatim in the context file as a `D-0N` decision so downstream agents can pattern-match it. Example: `D-04: [Style] "Glassmorphism Dark" — confirmed for gaming media player context; GPU cost noted in constraints.`
|
|
385
385
|
|
|
386
|
-
### Area 5 — Visual References (
|
|
386
|
+
### Area 5 — Visual References (cost-aware — free source first)
|
|
387
387
|
|
|
388
|
-
This area
|
|
388
|
+
This area pulls real product references, resolving sources **cost-aware (D-01, Phase 34.4): try the free source before any paid one.** Check `.design/STATE.md` `<connections>` for `lazyweb:` / `mobbin:` / `refero:` / `pinterest:` status before proceeding. Tool names may vary — verify via ToolSearch before calling. **Two or more references are required.**
|
|
389
389
|
|
|
390
|
-
|
|
390
|
+
**Tier 1 — Lazyweb (FREE — tried first; if `lazyweb: available`)**
|
|
391
391
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
ToolSearch first — Refero tools may be in the deferred tool set:
|
|
392
|
+
ToolSearch first (tools may be deferred): `ToolSearch({ query: "lazyweb", max_results: 10 })` (expect `lazyweb_search` + `lazyweb_health`). Run ≥2 `lazyweb_search` queries — one **structural** (from README/scope, e.g. `"pricing page three tiers"`, `"onboarding checklist"`, `"data table pagination"`) + one **aesthetic** (from the Area-4 brand direction, e.g. `"warm editorial SaaS"`, `"neutral Swiss dashboard"`). Pre-populate:
|
|
395
393
|
|
|
396
394
|
```
|
|
397
|
-
|
|
395
|
+
L-01: [Lazyweb result title] — source: lazyweb — borrow: [inferred borrow rationale]
|
|
396
|
+
L-02: [Lazyweb result title] — source: lazyweb — borrow: [inferred borrow rationale]
|
|
398
397
|
```
|
|
399
398
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
Run at least 2 searches:
|
|
403
|
-
|
|
404
|
-
1. **Structural query** — inferred from README / project scope (example: `"admin dashboard filters"`, `"onboarding flow"`, `"data table pagination"`)
|
|
405
|
-
2. **Aesthetic query** — inferred from brand direction captured in Area 4, if any (example: `"brutalist editorial UI"`, `"warm developer tool dashboard"`)
|
|
406
|
-
|
|
407
|
-
Select 2–3 results. Pre-populate references as:
|
|
408
|
-
|
|
409
|
-
```
|
|
410
|
-
R-01: [Refero result title] — source: refero — borrow: [inferred borrow rationale from result content]
|
|
411
|
-
R-02: [Refero result title] — source: refero — borrow: [inferred borrow rationale]
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
Present to user: "I found these references from Refero. Confirm or replace?"
|
|
415
|
-
|
|
416
|
-
**Tier 2 — awesome-design-md (if `refero: not_configured` OR `refero: unavailable`)**
|
|
399
|
+
**Tier 2 — Mobbin / Refero (PAID — use whichever is bound + has an active subscription; if both, Mobbin for mobile/flow-level, Refero for broad screen-level)**
|
|
417
400
|
|
|
418
|
-
|
|
401
|
+
Fall here when Lazyweb is unavailable, or for paid depth. If `mobbin: available`: `ToolSearch({ query: "mobbin", max_results: 10 })`, run structural/flow + aesthetic queries, cite `M-01: [title] — source: mobbin — borrow: …`. If `refero: available`: `ToolSearch({ query: "refero", max_results: 10 })` (expected `mcp__refero__search` — may differ), run a structural + an aesthetic query, cite `R-01: [title] — source: refero — borrow: …`. Present to user: "I found these references. Confirm or replace?"
|
|
419
402
|
|
|
420
|
-
|
|
403
|
+
**Tier 3 — Pinterest (if `pinterest: available`)**
|
|
421
404
|
|
|
422
|
-
|
|
405
|
+
Visual inspiration search via the verified Pinterest tool (ToolSearch `"mcp-pinterest"` first). Cite `P-01: [title] — source: pinterest — borrow: …`.
|
|
423
406
|
|
|
424
|
-
**Tier
|
|
407
|
+
**Tier 4 — awesome-design-md (local brand archetypes, if no reference MCP is available)**
|
|
425
408
|
|
|
426
|
-
|
|
409
|
+
Look in `~/.claude/libs/awesome-design-md/design-md/` — 68 brand archetypes, each with a full `DESIGN.md` token file. Pick 1–2 closest matches by inferred product category (e.g., B2B SaaS → Linear, Vercel; consumer → Airbnb, Spotify; editorial → NYT, Bloomberg). Pre-populate `R-01: [Brand name] — source: awesome-design-md — borrow: [token values — color palette, spacing scale, typography]` + add a note in `<references>`: `Note: no reference MCP available — using local brand archetypes.`
|
|
427
410
|
|
|
428
|
-
|
|
411
|
+
**Tier 5 — WebFetch (last resort, if awesome-design-md unavailable)**
|
|
429
412
|
|
|
430
|
-
|
|
413
|
+
Ask the user for a getdesign.md URL. WebFetch it and extract design tokens. Pre-populate `R-01: [URL] — source: webfetch — borrow: [extracted tokens: color palette, type scale, spacing units]`.
|
|
431
414
|
|
|
432
415
|
### Area 6 — Constraints
|
|
433
416
|
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-commenter
|
|
3
|
+
description: Posts GDD verify/audit output inline on a pull request — selector-specific findings as inline review comments via gh api, Preview/Chromatic before-after screenshot pairs, and a gdd/design-review check-run carrying audit/verify/a11y results. Outbound bodies redacted; degrades to noop when gh is absent or disabled. Spawned by /gdd:ship after PR creation.
|
|
4
|
+
tools: Read, Bash, Grep, Glob
|
|
5
|
+
color: cyan
|
|
6
|
+
default-tier: sonnet
|
|
7
|
+
tier-rationale: "Maps already-computed verify/audit findings onto PR surfaces via gh; no design judgment — a sonnet-tier mechanical post, not an Opus plan."
|
|
8
|
+
size_budget: M
|
|
9
|
+
size_budget_rationale: "Honest tier sized to the ~180-line body (M cap 300). The agent states the posting contract — inline comments, the gdd/design-review check-run, screenshot-pair attach, redact, kill-switch, degrade-to-noop — and DELEGATES the verbatim gh-api JSON shapes (pulls/comments payload, check-runs payload, branch-protection setup) to reference/pr-review-integration.md (the email-executor→email-design.md precedent). Raise to LARGE only if those API shapes are ever inlined here."
|
|
10
|
+
parallel-safe: false
|
|
11
|
+
typical-duration-seconds: 45
|
|
12
|
+
reads-only: false
|
|
13
|
+
writes:
|
|
14
|
+
- ".design/intel/insights.jsonl"
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
@reference/shared-preamble.md
|
|
18
|
+
|
|
19
|
+
# pr-commenter
|
|
20
|
+
|
|
21
|
+
## Role
|
|
22
|
+
|
|
23
|
+
You make GDD's verify/audit output **visible inline on the pull request** — the surface a non-GDD-running teammate actually watches. After `/gdd:ship` has created the PR, you post **inline review comments** on changed lines, attach **before-after screenshot pairs** when present, and register a **`gdd/design-review` check-run**. You are a **single-shot, post-ship** agent: receive the PR number + repo, read the verify/audit artifacts, post via `gh`, emit the record, done. You do not re-plan, gate the pipeline, spawn other agents, or ask clarifying questions.
|
|
24
|
+
|
|
25
|
+
You are an **agent-prompt**, not a service: GDD posts to the PR when an LLM (you) invokes this prompt and runs `gh`. You require **no GitHub SDK** (`@octokit` etc.) and **no network library** — `gh` is the sanctioned outbound channel (the `/gdd:ship` + `/gdd:report-issue` precedent). When `gh` is unavailable, you **degrade to noop** (print the bodies for manual paste) — you never fail the ship.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Required Reading
|
|
30
|
+
|
|
31
|
+
Read every file the caller lists in its `<required_reading>` block before acting. At minimum:
|
|
32
|
+
|
|
33
|
+
- `.design/STATE.md` — pipeline state, `<connections>` (Preview/Chromatic availability), cycle/stage for the record.
|
|
34
|
+
- `.design/DESIGN-VERIFICATION.md` — per-task pass/fail + selector-specific observations (the inline-comment source).
|
|
35
|
+
- `.design/DESIGN-AUDIT.md` (if present) — pillar scores (the check-run summary source).
|
|
36
|
+
- **`reference/pr-review-integration.md`** — the **authoritative** posting contract: the `gh api .../pulls/{n}/comments` inline-comment JSON shape, the `gh api .../check-runs` `gdd/design-review` payload, screenshot-pair attachment, the redact requirement, the kill-switch, and the branch-protection setup. You **post against this contract** — you do not re-derive the API shapes here.
|
|
37
|
+
|
|
38
|
+
**Invariant:** read the listed files FIRST. Resolve the target PR + repo from the caller's context (PR number/URL from `/gdd:ship`, repo from `gh repo view --json nameWithOwner`).
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Kill-switch + degrade (check FIRST, before any gh call)
|
|
43
|
+
|
|
44
|
+
1. **Kill-switch.** If `GDD_DISABLE_PR_COMMENTER=1` in env OR `.design/config.json` has `pr_commenter.enabled === false` → **noop**: print "pr-commenter disabled" and emit the record. Do nothing else.
|
|
45
|
+
2. **gh availability.** `command -v gh` and `gh auth status`. If gh is absent or unauthenticated → **degrade to noop**: print the assembled comment + check bodies so the user can paste them manually; do **not** error.
|
|
46
|
+
3. **PR presence.** If no PR number was supplied (ship ran `--draft`-less manual path, or PR creation failed) → noop with a one-line note.
|
|
47
|
+
|
|
48
|
+
Never let a `gh` hiccup fail the `/gdd:ship` success path — every failure mode here is a degraded noop, not an error.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Redact every outbound body (mandatory, D-05)
|
|
53
|
+
|
|
54
|
+
Before any `gh` call, pass each comment/summary string through the secret-redactor:
|
|
55
|
+
|
|
56
|
+
```js
|
|
57
|
+
const { redact } = require('scripts/lib/redact.cjs');
|
|
58
|
+
const safeBody = redact(commentBody);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`redact` (Phase 22, 11 patterns) strips API keys/tokens/secrets. **Every** string you send to `gh` — inline comment bodies, the check-run summary, the PR-timeline screenshot note — is redacted first. Never post a raw artifact excerpt without redacting it.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## What you post (against `reference/pr-review-integration.md`)
|
|
66
|
+
|
|
67
|
+
1. **Inline review comments** — for each verify/audit finding that maps to a changed file+line, post an inline comment via `gh api repos/{owner}/{repo}/pulls/{n}/comments` (path + line + redacted body: the finding, the rule/pillar, and a one-line suggested fix). Findings with no changed-line locus go into a single summary review comment, not scattered.
|
|
68
|
+
2. **Screenshot pairs (degrade, D-04)** — when `.design/STATE.md` `<connections>` shows `preview: available` or `chromatic: available` AND a before-after pair exists for a changed surface, attach the image refs in the comment/PR timeline. When absent → text-only; never a precondition.
|
|
69
|
+
3. **`gdd/design-review` check-run (D-03)** — `gh api repos/{owner}/{repo}/check-runs` with `name: "gdd/design-review"`, a `conclusion` (`success` if verify passed + no blocker pillars, `failure` if verify failed or a11y-gate failed, else `neutral`), and an `output.summary` carrying the audit pillar scores + verify pass/fail + a11y result. This is the gate a teammate's branch-protection rule can require — see the reference for the required-check setup (`scripts/apply-branch-protection.sh`); you **register** the check, you never edit branch protection.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Execution Principles
|
|
74
|
+
|
|
75
|
+
1. **Post-ship surface, not a gate.** You run after the PR exists; you never block ship or the pipeline. Every failure → degraded noop.
|
|
76
|
+
2. **Redact everything outbound (D-05).** No raw artifact excerpt reaches `gh` un-redacted.
|
|
77
|
+
3. **Observable outcomes only.** Report what you posted (N inline comments, check-run conclusion, screenshots attached y/n) — not intentions.
|
|
78
|
+
4. **`reference/pr-review-integration.md` is authoritative** for the gh-api shapes; apply it, do not re-derive.
|
|
79
|
+
5. **Decision authority:** in-context → proceed; out-of-context (architectural, contradicts a locked D-XX, a new external API) → Rule 4: STOP, note it, emit the marker.
|
|
80
|
+
6. **Single-task scope.** Touch no repo files; your only local write is the record line.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Deviation Rules
|
|
85
|
+
|
|
86
|
+
Apply automatically; track each in a `## Deviations` section.
|
|
87
|
+
|
|
88
|
+
- **Rule 1 — Bug:** a malformed `gh api` payload, an un-redacted body, a wrong PR/line locus → fix inline.
|
|
89
|
+
- **Rule 2 — Missing Critical:** a finding with a changed-line locus not posted, the check-run not registered, redact not applied → add it.
|
|
90
|
+
- **Rule 3 — Blocking:** `gh` absent/unauth, no PR, kill-switch on → **degrade to noop** (not an error); print bodies for manual paste; note it.
|
|
91
|
+
- **Rule 4 — Architectural:** switching off `gh` to a GitHub SDK, adding a network dependency, editing branch protection without consent → STOP, note it, still emit the marker.
|
|
92
|
+
|
|
93
|
+
**Fix attempt limit:** stop after 3 attempts on one `gh` call; degrade to printing that body and continue.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Output
|
|
98
|
+
|
|
99
|
+
In your final response, state: the PR posted to, the number of inline comments posted, the `gdd/design-review` check-run conclusion, whether screenshot pairs were attached (and the connection that sourced them), and any degraded-noop reason. Do not modify repo files.
|
|
100
|
+
|
|
101
|
+
Terminate with exactly this line, on its own line:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
## EXECUTION COMPLETE
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Constraints
|
|
110
|
+
|
|
111
|
+
This agent MUST NOT:
|
|
112
|
+
|
|
113
|
+
- Run `git clean` (any flags) — absolute prohibition.
|
|
114
|
+
- Fail the `/gdd:ship` success path — every failure mode degrades to a noop.
|
|
115
|
+
- Add a GitHub SDK (`@octokit`/etc.) or any network dependency — `gh` is the channel (D-02).
|
|
116
|
+
- Post any outbound body without passing it through `scripts/lib/redact.cjs` (D-05).
|
|
117
|
+
- Edit branch-protection rules — register the `gdd/design-review` check only; required-check setup is the user's repo-settings step (D-03).
|
|
118
|
+
- Modify the plan, context, connection index, or any repo file; re-plan; spawn other agents; ask clarifying questions; or `git add .`/`-A`.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Record
|
|
123
|
+
|
|
124
|
+
At run-end, append one JSONL line to `.design/intel/insights.jsonl`:
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{"ts":"<ISO-8601>","agent":"pr-commenter","cycle":"<cycle from STATE.md>","stage":"<stage from STATE.md>","one_line_insight":"<PR #N: M inline comments + gdd/design-review=<conclusion> + screenshots=<y/n/degraded>>","artifacts_written":[]}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Schema: `reference/schemas/insight-line.schema.json`.
|
|
131
|
+
|
|
132
|
+
## EXECUTION COMPLETE
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This directory contains connection specifications for external tools and MCPs that the get-design-done pipeline integrates with. Each connection has its own spec file. This file is the index.
|
|
4
4
|
|
|
5
|
-
**Getting started:** run `/gdd:connections` for the interactive onboarding wizard — it probes all
|
|
5
|
+
**Getting started:** run `/gdd:connections` for the interactive onboarding wizard — it probes all 14 connections, recommends setup based on your project type, and walks you through installing each one (auto-run for reversible MCP adds, copy-command for everything else). You can also run `/gdd:connections list` for a read-only status check or `/gdd:connections <name>` to jump to a single connection's setup.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -28,6 +28,8 @@ This directory contains connection specifications for external tools and MCPs th
|
|
|
28
28
|
| Android Emulator | Active | [`connections/android-emulator.md`](connections/android-emulator.md) | **Optional**; CLI: `adb` / `emulator` (no MCP); native-Android rendered evidence for verify; degrade-to-code-only when absent (D-03) |
|
|
29
29
|
| Litmus | Active | [`connections/litmus.md`](connections/litmus.md) | **Optional** render-test (email; Email-on-Acid alternative); cross-client rendered screenshots for verify; degrade-to-static-validator / code-only when absent (D-03) |
|
|
30
30
|
| Print-Renderer | Active | [`connections/print-renderer.md`](connections/print-renderer.md) | **Optional** print render-test (Paged.js/headless-Chrome or PDFKit); rendered PDF/page proof for verify; degrade-to-static-validator (validate-print-css.cjs) / code-only when absent (D-03) |
|
|
31
|
+
| Lazyweb | Active | [`connections/lazyweb.md`](connections/lazyweb.md) | **Free** bearer-token MCP `lazyweb_search` / `lazyweb_health` (ToolSearch-only probe; copy-command setup, no auto-run); discover **Tier 1** — tried first (D-01) |
|
|
32
|
+
| Mobbin | Active | [`connections/mobbin.md`](connections/mobbin.md) | **Paid** HTTP MCP `claude mcp add mobbin --transport http https://api.mobbin.com/mcp` (ToolSearch-only probe; auto-run-safe, OAuth); discover **Tier 2** — mobile/flow-level (D-01) |
|
|
31
33
|
|
|
32
34
|
---
|
|
33
35
|
|
|
@@ -55,6 +57,8 @@ Each cell describes what the connection contributes at that pipeline stage, or `
|
|
|
55
57
|
| Android Emulator | — | — | — | native Android code-gen target (compose-executor / emitCompose) | rendered Compose screenshot when emulator available, else degrade to code-only structural audit (D-03) | — | — |
|
|
56
58
|
| Litmus | — | — | — | email render-test target (email-executor) | cross-client rendered evidence when Litmus available, else degrade to the static email-HTML validator / code-only (D-03) | — | — |
|
|
57
59
|
| Print-Renderer | — | — | — | print render-test target (pdf-executor) | rendered PDF/page evidence when the print-render is available, else degrade to the static print-CSS validator / code-only (D-03) | — | — |
|
|
60
|
+
| Lazyweb | — | reference search via `lazyweb_search` (**Tier 1 — free, tried first**; D-01); complements refero/pinterest | — | — | — | — | — |
|
|
61
|
+
| Mobbin | — | reference search via mobbin tools (**Tier 2 — paid, mobile/flow-level**; D-01); complements refero/lazyweb | — | — | — | — | — |
|
|
58
62
|
|
|
59
63
|
**Column definitions:**
|
|
60
64
|
|
|
@@ -138,6 +142,30 @@ Write refero status to STATE.md <connections>.
|
|
|
138
142
|
|
|
139
143
|
Note: Refero probe is ToolSearch-only (no live tool call). ToolSearch presence is sufficient; a live Refero search as probe would waste tokens before confirming the connection is even needed.
|
|
140
144
|
|
|
145
|
+
**Lazyweb probe (execute at stage entry, after reading STATE.md):**
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
Step D1 — ToolSearch check:
|
|
149
|
+
ToolSearch({ query: "lazyweb", max_results: 5 })
|
|
150
|
+
→ Empty result → lazyweb: not_configured (use fallback chain)
|
|
151
|
+
→ Non-empty result → lazyweb: available
|
|
152
|
+
|
|
153
|
+
Write lazyweb status to STATE.md <connections>.
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Mobbin probe (execute at stage entry, after reading STATE.md):**
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
Step E1 — ToolSearch check:
|
|
160
|
+
ToolSearch({ query: "mobbin", max_results: 5 })
|
|
161
|
+
→ Empty result → mobbin: not_configured (use fallback chain)
|
|
162
|
+
→ Non-empty result → mobbin: available
|
|
163
|
+
|
|
164
|
+
Write mobbin status to STATE.md <connections>.
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Note: Lazyweb + Mobbin probes are ToolSearch-only (no live call). The discover stage resolves reference sources **cost-aware (D-01): Lazyweb (free) → Mobbin / Refero (paid, whichever is bound + subscribed) → Pinterest → awesome-design-md → WebFetch.**
|
|
168
|
+
|
|
141
169
|
---
|
|
142
170
|
|
|
143
171
|
**Preview probe (execute at stage entry, after reading STATE.md):**
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Lazyweb MCP — Connection Specification
|
|
2
|
+
|
|
3
|
+
This file is the connection specification for Lazyweb within the get-design-done pipeline. It lives in `connections/` alongside other connection specs. See `connections/connections.md` for the full connection index and capability matrix.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Lazyweb is a **free, MCP-native visual-reference library** (250k+ real app screens). In the discover stage it is the **cost-aware default**: because it requires no paid subscription, GDD tries it **first**, before any paid reference source (Mobbin/Refero). Pitched for pricing pages, onboarding flows, "improve this existing screen" comparisons, and UI benchmarking against shipped products.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
**Prerequisites:**
|
|
14
|
+
|
|
15
|
+
- No account or subscription required — the free tier authorizes read-only UI reference search.
|
|
16
|
+
- A Lazyweb MCP bearer token (free) saved locally.
|
|
17
|
+
|
|
18
|
+
**Install (Claude Code):** *copy-command — never auto-run, because it writes a credential to disk (user-consent step).*
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
# 1. save the free bearer token (chmod 600 — local config only, never commit)
|
|
22
|
+
mkdir -p ~/.lazyweb && printf '%s' "<your-token>" > ~/.lazyweb/lazyweb_mcp_token && chmod 600 ~/.lazyweb/lazyweb_mcp_token
|
|
23
|
+
# 2. install the plugin
|
|
24
|
+
claude plugin marketplace add https://github.com/aboul3ata/lazyweb-skill
|
|
25
|
+
claude plugin install lazyweb@lazyweb
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Cursor / Codex / generic MCP:** register the Streamable-HTTP MCP endpoint `https://www.lazyweb.com/mcp` with the bearer token per the host's MCP-config format (follow Lazyweb's install docs for the exact block). Restart the session after install.
|
|
29
|
+
|
|
30
|
+
**Verification:**
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
ToolSearch({ query: "lazyweb", max_results: 10 })
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Expect `lazyweb_search` + `lazyweb_health`. If empty, the MCP is not registered — complete the install and restart.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## When to use
|
|
41
|
+
|
|
42
|
+
In the **discover** stage, **try Lazyweb first** (it's free). Strong for:
|
|
43
|
+
|
|
44
|
+
- Pricing pages, plan/billing layouts
|
|
45
|
+
- Onboarding + activation flows
|
|
46
|
+
- "Improve this existing screen" / redesign comparisons
|
|
47
|
+
- UI benchmarking against real, shipped products
|
|
48
|
+
|
|
49
|
+
## Tools available (verify via ToolSearch on first use)
|
|
50
|
+
|
|
51
|
+
- **`lazyweb_search` `{ query, limit }`** — semantic search across Lazyweb's indexed app-screen corpus.
|
|
52
|
+
- **`lazyweb_health`** — connection/health probe.
|
|
53
|
+
|
|
54
|
+
Names may vary between versions — treat the ToolSearch result as authoritative; do not hardcode.
|
|
55
|
+
|
|
56
|
+
## Search strategy
|
|
57
|
+
|
|
58
|
+
Run **at least 2 queries per task** — one structural, one aesthetic (same discipline as Refero):
|
|
59
|
+
|
|
60
|
+
- **Structural** (what it IS): "pricing page three tiers", "onboarding checklist", "empty state dashboard", "settings billing".
|
|
61
|
+
- **Aesthetic** (how it should FEEL): "warm editorial SaaS", "neutral Swiss dashboard", "dark fintech".
|
|
62
|
+
|
|
63
|
+
## Workflow
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
1. lazyweb_search "pricing page three tiers" # structural
|
|
67
|
+
2. lazyweb_search "warm editorial consumer app" # aesthetic
|
|
68
|
+
3. pick 3-7 that match the brief; save URLs + notes into the discover reference pack
|
|
69
|
+
4. proceed to the plan stage with the pack
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Citing references in output
|
|
73
|
+
|
|
74
|
+
Always name the reference: cite as `L-01: [title] — source: lazyweb — borrow: [what you took]`. Never claim originality; show the user the logic so they can push back precisely.
|
|
75
|
+
|
|
76
|
+
## STATE.md integration
|
|
77
|
+
|
|
78
|
+
Every stage that probes Lazyweb writes the result to `.design/STATE.md` under `<connections>`:
|
|
79
|
+
|
|
80
|
+
```xml
|
|
81
|
+
<connections>
|
|
82
|
+
lazyweb: available
|
|
83
|
+
</connections>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
| Value | Meaning |
|
|
87
|
+
|-------|---------|
|
|
88
|
+
| `available` | ToolSearch returned non-empty results for `lazyweb` |
|
|
89
|
+
| `unavailable` | Lazyweb tools present but a live call errored |
|
|
90
|
+
| `not_configured` | ToolSearch returned empty — MCP not registered |
|
|
91
|
+
|
|
92
|
+
**Probe pattern (ToolSearch-only — no tool call, no token cost):**
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
ToolSearch({ query: "lazyweb", max_results: 5 })
|
|
96
|
+
→ Empty result → lazyweb: not_configured
|
|
97
|
+
→ Non-empty result → lazyweb: available
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Which stages probe Lazyweb:** the discover stage only (via `agents/design-context-builder.md`). Scan, plan, design, and verify do not use it.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Fallback chain (cost-aware — try free before paid)
|
|
105
|
+
|
|
106
|
+
The discover stage resolves reference sources in this order:
|
|
107
|
+
|
|
108
|
+
1. **Lazyweb (Tier 1 — FREE)** — always tried first. Use when `lazyweb: available`.
|
|
109
|
+
2. **Mobbin / Refero (Tier 2 — PAID)** — fall here when Lazyweb is unavailable OR you need their depth; use whichever is bound AND has an active subscription (if both, Mobbin then Refero).
|
|
110
|
+
3. **Pinterest (Tier 3)** — headless scrape, occasionally flaky.
|
|
111
|
+
4. **awesome-design-md (Tier 4)** — `~/.claude/libs/awesome-design-md/design-md/` structured DESIGN.md tokens.
|
|
112
|
+
5. **WebFetch (Tier 5)** — last resort.
|
|
113
|
+
|
|
114
|
+
Lazyweb never *replaces* the paid corpora — it's the free first attempt; fall through for breadth/flow-depth. Never proceed without references — that's the point of discover.
|
|
115
|
+
|
|
116
|
+
## Anti-pattern + token handling
|
|
117
|
+
|
|
118
|
+
- Don't dump a huge set of references into the response (noise) — pick 3–7 matching the brief.
|
|
119
|
+
- Don't use it to justify a pre-decided direction (pull first, then decide).
|
|
120
|
+
- **Token handling**: the free tier authorizes no-billing UI reference reads ONLY — never purchases, paid spend, private user data, or destructive actions. The bearer token is local-config-only (`~/.lazyweb/lazyweb_mcp_token`); never commit it to git history.
|
|
121
|
+
|
|
122
|
+
## If Lazyweb's API changes
|
|
123
|
+
|
|
124
|
+
Keep this file current. If tool names or the endpoint shift, update the examples here and adjust the routing in `skills/discover/SKILL.md` + `agents/design-context-builder.md`.
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Mobbin MCP — Connection Specification
|
|
2
|
+
|
|
3
|
+
This file is the connection specification for Mobbin within the get-design-done pipeline. It lives in `connections/` alongside other connection specs. See `connections/connections.md` for the full connection index and capability matrix.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Mobbin is a **curated mobile + web product reference library** (600k+ screens, 130k+ user flows from 1,600+ shipped apps) — the de-facto standard for **flow-level** mobile references. In the discover stage it is a **Tier-2 (paid) source**: GDD tries free Lazyweb first, then falls to Mobbin or Refero depending on which the user has an active subscription for. Mobbin's edge is editorial discipline + flow-level metadata + verified-product depth, especially for mobile (iOS/Android).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
**Prerequisites:**
|
|
14
|
+
|
|
15
|
+
- An active Mobbin subscription (the MCP is included with a paid plan).
|
|
16
|
+
|
|
17
|
+
**Install (Claude Code):** *auto-run-safe — `claude mcp add` is a stateless MCP registration with zero credential filesystem-write; OAuth is handled by Mobbin in a browser on the first tool call.*
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
claude mcp add mobbin --transport http https://api.mobbin.com/mcp
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
On the first `mobbin` tool call, Mobbin opens a browser sign-in (OAuth) — no token is written to disk by GDD.
|
|
24
|
+
|
|
25
|
+
**Cursor / Codex / generic MCP:** register the HTTP MCP endpoint `https://api.mobbin.com/mcp` per the host's MCP-config format; sign in via the OAuth prompt on first use. Restart the session after install.
|
|
26
|
+
|
|
27
|
+
**Verification:**
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
ToolSearch({ query: "mobbin", max_results: 10 })
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Expect Mobbin search/browse tools. If empty, the MCP is not registered — run the add command and restart.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## When to use
|
|
38
|
+
|
|
39
|
+
In the **discover** stage, fall to Mobbin (after free Lazyweb) when you have a subscription and need:
|
|
40
|
+
|
|
41
|
+
- **Mobile** UI references (iOS / Android platform conventions)
|
|
42
|
+
- **Flow-level** references (multi-screen journeys) vs single screens
|
|
43
|
+
- Industry-specific patterns — "how do fintech apps do KYC", "social app notification permission priming"
|
|
44
|
+
- Verified, curated, real-product screens
|
|
45
|
+
|
|
46
|
+
## Tools available (verify via ToolSearch on first use)
|
|
47
|
+
|
|
48
|
+
Mobbin exposes search / browse tools (apps, screens, flows, collections) under its MCP. Names may vary between versions — treat the ToolSearch result as authoritative; do not hardcode.
|
|
49
|
+
|
|
50
|
+
## Search strategy
|
|
51
|
+
|
|
52
|
+
Run structural + aesthetic + **flow-level** queries (Mobbin's differentiator is flows):
|
|
53
|
+
|
|
54
|
+
- **Structural / flow**: "onboarding fintech", "checkout commerce", "paywall subscription", "empty state messaging".
|
|
55
|
+
- **Platform**: "iOS settings", "Android bottom sheet".
|
|
56
|
+
- **Industry**: "KYC verification flow", "ride-hailing trip tracking".
|
|
57
|
+
|
|
58
|
+
## Workflow
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
1. mobbin search "paywall subscription" # flow/structural
|
|
62
|
+
2. mobbin search "calm editorial fintech" # aesthetic
|
|
63
|
+
3. pick 3-5 references (NOT whole flow sets) matching the brief; save into the reference pack
|
|
64
|
+
4. proceed to the plan stage with the pack
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Citing references in output
|
|
68
|
+
|
|
69
|
+
Always name the reference: cite as `M-01: [title] — source: mobbin — borrow: [what you took]`. Show the structure you borrowed (e.g., "takes Revolut's KYC step sequencing").
|
|
70
|
+
|
|
71
|
+
## STATE.md integration
|
|
72
|
+
|
|
73
|
+
Every stage that probes Mobbin writes the result to `.design/STATE.md` under `<connections>`:
|
|
74
|
+
|
|
75
|
+
```xml
|
|
76
|
+
<connections>
|
|
77
|
+
mobbin: available
|
|
78
|
+
</connections>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
| Value | Meaning |
|
|
82
|
+
|-------|---------|
|
|
83
|
+
| `available` | ToolSearch returned non-empty results for `mobbin` |
|
|
84
|
+
| `unavailable` | Mobbin tools present but a live call errored (e.g., not signed in / no subscription) |
|
|
85
|
+
| `not_configured` | ToolSearch returned empty — MCP not registered |
|
|
86
|
+
|
|
87
|
+
**Probe pattern (ToolSearch-only — no tool call, no API cost):**
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
ToolSearch({ query: "mobbin", max_results: 5 })
|
|
91
|
+
→ Empty result → mobbin: not_configured
|
|
92
|
+
→ Non-empty result → mobbin: available
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Which stages probe Mobbin:** the discover stage only (via `agents/design-context-builder.md`). Scan, plan, design, and verify do not use it.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Fallback chain (cost-aware — try free before paid)
|
|
100
|
+
|
|
101
|
+
The discover stage resolves reference sources in this order:
|
|
102
|
+
|
|
103
|
+
1. **Lazyweb (Tier 1 — FREE)** — always tried first.
|
|
104
|
+
2. **Mobbin / Refero (Tier 2 — PAID)** — Mobbin and Refero are peers here; use whichever is bound AND has an active subscription. If both are available, **Mobbin** for mobile/flow-level depth, **Refero** for broad screen-level coverage.
|
|
105
|
+
3. **Pinterest (Tier 3)** — headless scrape, occasionally flaky.
|
|
106
|
+
4. **awesome-design-md (Tier 4)** — structured DESIGN.md tokens.
|
|
107
|
+
5. **WebFetch (Tier 5)** — last resort.
|
|
108
|
+
|
|
109
|
+
Never proceed without references — that's the point of discover.
|
|
110
|
+
|
|
111
|
+
## Anti-pattern
|
|
112
|
+
|
|
113
|
+
- **Don't dump entire flow sets** into the response — pick 3–5 references that match the brief.
|
|
114
|
+
- Don't use Mobbin for desktop-heavy work where Refero/Lazyweb are stronger (Mobbin's depth is mobile + flows).
|
|
115
|
+
- Don't use it to justify a pre-decided direction (pull first, then decide).
|
|
116
|
+
|
|
117
|
+
## If Mobbin's API changes
|
|
118
|
+
|
|
119
|
+
Keep this file current. If tool names or the endpoint shift, update the examples here and adjust the routing in `skills/discover/SKILL.md` + `agents/design-context-builder.md`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hegemonart/get-design-done",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.35.1",
|
|
4
4
|
"description": "A design-quality pipeline for AI coding agents: brief, plan, implement, and verify UI work against your design system.",
|
|
5
5
|
"author": "Hegemon",
|
|
6
6
|
"homepage": "https://github.com/hegemonart/get-design-done",
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# PR Review Integration — the gh-based contract for `agents/pr-commenter.md`
|
|
2
|
+
|
|
3
|
+
How GDD surfaces verify/audit output **inline on a pull request** and as a **status check**, using the `gh` CLI only (no GitHub SDK, no network library). `agents/pr-commenter.md` posts against this contract after `/gdd:ship` creates the PR. Every outbound string is redacted first; every failure mode degrades to a noop (never fails the ship).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Resolve target
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
gh repo view --json nameWithOwner -q .nameWithOwner # owner/repo
|
|
11
|
+
# PR number: supplied by /gdd:ship; or: gh pr view --json number,headRefOid -q '.number, .headRefOid'
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
`head_sha` (the PR head commit) is required for the check-run; get it from `gh pr view --json headRefOid`.
|
|
15
|
+
|
|
16
|
+
## Inline review comments (changed-line findings)
|
|
17
|
+
|
|
18
|
+
For a finding that maps to a changed `path` + `line`, post an inline comment:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
gh api repos/{owner}/{repo}/pulls/{number}/comments \
|
|
22
|
+
-f body="$SAFE_BODY" -f commit_id="$HEAD_SHA" -f path="src/Button.tsx" \
|
|
23
|
+
-F line=42 -f side=RIGHT
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- `body` — **redacted** finding text: the rule/pillar (`WCAG 1.4.3` / `audit:color`), the observation, a one-line suggested fix.
|
|
27
|
+
- `path` + `line` + `side=RIGHT` — the changed line locus (RIGHT = the new version).
|
|
28
|
+
- One comment per located finding. Findings with **no** changed-line locus go into a single summary review (below), not scattered.
|
|
29
|
+
|
|
30
|
+
## Summary review (findings without a line locus)
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
gh api repos/{owner}/{repo}/pulls/{number}/reviews \
|
|
34
|
+
-f body="$SAFE_SUMMARY" -f event=COMMENT
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`event=COMMENT` (never `REQUEST_CHANGES`/`APPROVE` — GDD does not gate human approval). The summary lists verify pass/fail counts + the unlocated findings.
|
|
38
|
+
|
|
39
|
+
## The `gdd/design-review` check-run (the team gate)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
gh api repos/{owner}/{repo}/check-runs \
|
|
43
|
+
-f name="gdd/design-review" -f head_sha="$HEAD_SHA" -f status=completed \
|
|
44
|
+
-f conclusion="$CONCLUSION" \
|
|
45
|
+
-f output[title]="GDD design review" -f output[summary]="$SAFE_SUMMARY"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
- `conclusion`: **`success`** = verify passed AND no blocker-level pillar AND a11y-gate not failed; **`failure`** = verify failed OR a11y-gate failed; **`neutral`** = verify incomplete / degraded.
|
|
49
|
+
- `output.summary` (redacted) carries: per-pillar audit scores (from `.design/DESIGN-AUDIT.md`), verify pass/fail (from `.design/DESIGN-VERIFICATION.md`), and the a11y-gate result.
|
|
50
|
+
|
|
51
|
+
**Making it a required check (the team step — GDD never force-edits branch protection):** a maintainer enables `gdd/design-review` as a required status check via repo Settings → Branches, or via the bundled helper:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
scripts/apply-branch-protection.sh --require-check "gdd/design-review"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
GDD only **registers** the check-run; requiring it is an explicit, consent-driven repo-settings action.
|
|
58
|
+
|
|
59
|
+
## Screenshot-pair attachment (degrade)
|
|
60
|
+
|
|
61
|
+
When `.design/STATE.md` `<connections>` shows `preview: available` or `chromatic: available` AND a before-after image pair exists for a changed surface, embed the image refs in the inline/summary comment body (Markdown image syntax pointing at the uploaded/hosted artifact URLs the connection produced). When **absent** → text-only comment. Never a precondition; never block on a missing screenshot.
|
|
62
|
+
|
|
63
|
+
## Redaction (mandatory)
|
|
64
|
+
|
|
65
|
+
Every `$SAFE_*` body above is produced by `scripts/lib/redact.cjs`:
|
|
66
|
+
|
|
67
|
+
```js
|
|
68
|
+
const { redact } = require('scripts/lib/redact.cjs');
|
|
69
|
+
const SAFE_BODY = redact(rawBody); // strips API keys / tokens / secrets (11 patterns, Phase 22 + 33.5)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
No raw artifact excerpt reaches `gh` un-redacted.
|
|
73
|
+
|
|
74
|
+
## Kill-switch
|
|
75
|
+
|
|
76
|
+
`pr-commenter` is a noop when **either**:
|
|
77
|
+
|
|
78
|
+
- env `GDD_DISABLE_PR_COMMENTER=1`, or
|
|
79
|
+
- `.design/config.json` has `"pr_commenter": { "enabled": false }`.
|
|
80
|
+
|
|
81
|
+
`gsd-health` surfaces the enabled/disabled state (mirrors the Phase 30 issue-reporter kill-switch).
|
|
82
|
+
|
|
83
|
+
## Degrade-to-noop matrix
|
|
84
|
+
|
|
85
|
+
| Condition | Behavior |
|
|
86
|
+
|---|---|
|
|
87
|
+
| kill-switch on | noop + "pr-commenter disabled" note |
|
|
88
|
+
| `gh` absent / unauthenticated | print assembled bodies for manual paste; no error |
|
|
89
|
+
| no PR number (manual/failed creation) | noop + one-line note |
|
|
90
|
+
| a single `gh api` call fails (≤3 attempts) | print that body; continue with the rest |
|
|
91
|
+
|
|
92
|
+
In all cases pr-commenter exits cleanly — it **never** fails the `/gdd:ship` success path.
|
|
93
|
+
|
|
94
|
+
## Out of scope (per Phase 35 split)
|
|
95
|
+
|
|
96
|
+
Slack/Discord notifications (Phase 35.2); Linear/Jira ticket-sync (Phase 35.3); `pseudonymize.cjs` (Phase 30 — wired for third-party channels); video walkthroughs (still images only); a GDD-side approver list (branch protection owns approvals).
|
package/reference/registry.json
CHANGED
|
@@ -909,6 +909,13 @@
|
|
|
909
909
|
"type": "heuristic",
|
|
910
910
|
"phase": 34.3,
|
|
911
911
|
"description": "Phase 34.3 print-constraint catalogue — @page size/margin/marks (the print box model), bleed box + crop/registration marks, CMYK color-space awareness (subtractive, not screen RGB), font embedding/outlining (print RIPs have no web fonts), and 300dpi raster-fallback guidance; the authority the pdf-executor generates against and the design-verifier print branch audits against, and the rule-id source for scripts/lib/print/validate-print-css.cjs."
|
|
912
|
+
},
|
|
913
|
+
{
|
|
914
|
+
"name": "pr-review-integration",
|
|
915
|
+
"path": "reference/pr-review-integration.md",
|
|
916
|
+
"type": "heuristic",
|
|
917
|
+
"phase": 35.1,
|
|
918
|
+
"description": "Phase 35.1 PR-inline contract — the gh-CLI shapes agents/pr-commenter.md posts against: inline review comments (gh api pulls/{n}/comments with path+line), the summary review (event=COMMENT), the gdd/design-review check-run (gh api check-runs with name/head_sha/conclusion/output.summary carrying audit pillar scores + verify pass/fail + a11y result), Preview/Chromatic screenshot-pair attachment (degrade-to-text), mandatory scripts/lib/redact.cjs on every outbound body, the GDD_DISABLE_PR_COMMENTER kill-switch, and the consent-driven branch-protection setup (scripts/apply-branch-protection.sh; GDD registers the check, never force-edits protection)."
|
|
912
919
|
}
|
|
913
920
|
]
|
|
914
921
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gdd-connections
|
|
3
|
-
description: "Interactive onboarding wizard for the
|
|
3
|
+
description: "Interactive onboarding wizard for the 14 external integrations the pipeline supports — probes all (`figma`, `refero`, `preview`, `storybook`, `chromatic`, `graphify`, `pinterest`, `claude-design`, `paper-design`, `pencil-dev`, `21st-dev`, `magic-patterns`, `lazyweb`, `mobbin`), recommends based on project type, walks the user through setup (auto-run MCP install or copy-command fallback), writes results to `STATE.md <connections>`. Use after `/gdd:new-project` or whenever the user wants to add, inspect, or skip a connection. Re-runnable anytime."
|
|
4
4
|
argument-hint: "[list | <connection-name> | --auto]"
|
|
5
5
|
user-invocable: true
|
|
6
6
|
tools: Read, Write, Bash, Glob, Grep, AskUserQuestion, ToolSearch
|
|
@@ -8,11 +8,11 @@ tools: Read, Write, Bash, Glob, Grep, AskUserQuestion, ToolSearch
|
|
|
8
8
|
|
|
9
9
|
# /gdd:connections
|
|
10
10
|
|
|
11
|
-
Interactive onboarding for the
|
|
11
|
+
Interactive onboarding for the 14 external integrations the pipeline supports. Replaces "probe silently at scan entry and hope the user noticed" with an explicit "here is what can plug in, here is how."
|
|
12
12
|
|
|
13
13
|
Canonical per-connection specs live in `../../connections/<name>.md` (one file per integration). The capability matrix + probe-pattern spec live in `../../connections/connections.md`. This skill is the **user-facing front end** for those specs.
|
|
14
14
|
|
|
15
|
-
For the
|
|
15
|
+
For the 14 probe scripts (MCP + HTTP + CLI + file probes), bucket categorization, per-connection setup screen, auto-run eligibility matrix, value-prop one-liners, and STATE.md / config.json write contracts, see `./connections-onboarding.md`. For the cross-skill probe pattern + connection-handshake summary, see `../../reference/shared-preamble.md#connection-handshake-summary`. For the cross-skill output discipline, see `../../reference/shared-preamble.md#output-contract-reminders`.
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
@@ -38,7 +38,7 @@ For the 12 probe scripts (MCP + HTTP + CLI + file probes), bucket categorization
|
|
|
38
38
|
|
|
39
39
|
## Workflow
|
|
40
40
|
|
|
41
|
-
1. **Probe all
|
|
41
|
+
1. **Probe all 14 connections** — run every probe script per `./connections-onboarding.md#step-1--probe-all-14-connections`. MCP probes use `ToolSearch` first; HTTP / CLI / file probes follow non-MCP patterns. Merge results into `STATE.md <connections>` with the three-value schema (`available | unavailable | not_configured`) — never add new values.
|
|
42
42
|
2. **Categorize + build summary** — bucket each probe result (available / recommended / optional / skipped / unavailable) using project-hint detection. Detail + recommendation mapping: `./connections-onboarding.md#step-2--bucket-categorization`.
|
|
43
43
|
3. **Print summary table** — show buckets + value-prop one-liners (verbatim from `./connections-onboarding.md#step-3--summary-table`).
|
|
44
44
|
4. **Route by mode** — `list` / `--auto` exits after summary; `<name>` jumps straight to Step 5; default mode opens an AskUserQuestion (configure recommended / pick one by one / configure all optional / re-check specific / exit). Routing detail: `./connections-onboarding.md#step-4--route-by-mode`.
|
|
@@ -9,7 +9,7 @@ last_updated: 2026-05-18
|
|
|
9
9
|
|
|
10
10
|
Source: extracted from `skills/connections/SKILL.md` (Phase 28.5 rework — D-10 extract-then-link).
|
|
11
11
|
The skill's load-bearing routing + invocation-mode dispatch stays in `../skills/connections/SKILL.md`;
|
|
12
|
-
this file holds the
|
|
12
|
+
this file holds the 14 probe scripts, bucket categorization, per-connection setup screen,
|
|
13
13
|
auto-run eligibility matrix, value-prop one-liners, and STATE.md / config.json write contracts.
|
|
14
14
|
|
|
15
15
|
# Connections Onboarding Procedure
|
|
@@ -27,7 +27,7 @@ this file does NOT duplicate them; it points at them by name.
|
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
## Step 1 — Probe all
|
|
30
|
+
## Step 1 — Probe all 14 connections
|
|
31
31
|
|
|
32
32
|
Run every probe below in order. MCP probes call `ToolSearch` first (deferred tools fail silently without it). Write every result to `STATE.md <connections>` when done.
|
|
33
33
|
|
|
@@ -86,6 +86,20 @@ ToolSearch({ query: "mcp__magic_patterns", max_results: 5 })
|
|
|
86
86
|
→ Non-empty → magic_patterns: available
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
+
**lazyweb:** (discover Tier 1 — free, tried first; D-01)
|
|
90
|
+
```
|
|
91
|
+
ToolSearch({ query: "lazyweb", max_results: 5 })
|
|
92
|
+
→ Empty → lazyweb: not_configured
|
|
93
|
+
→ Non-empty → lazyweb: available
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**mobbin:** (discover Tier 2 — paid, mobile/flow-level; D-01)
|
|
97
|
+
```
|
|
98
|
+
ToolSearch({ query: "mobbin", max_results: 5 })
|
|
99
|
+
→ Empty → mobbin: not_configured
|
|
100
|
+
→ Non-empty → mobbin: available
|
|
101
|
+
```
|
|
102
|
+
|
|
89
103
|
### Non-MCP probes
|
|
90
104
|
|
|
91
105
|
**storybook** (HTTP):
|
|
@@ -131,7 +145,7 @@ Bash: ls .design/handoff/ 2>/dev/null || find . -maxdepth 3 \
|
|
|
131
145
|
→ Non-empty → claude_design: available
|
|
132
146
|
```
|
|
133
147
|
|
|
134
|
-
After all
|
|
148
|
+
After all 14 probes complete, merge results into `STATE.md <connections>`. Preserve the three-value schema verbatim (`available | unavailable | not_configured`). Do not add new values.
|
|
135
149
|
|
|
136
150
|
---
|
|
137
151
|
|
|
@@ -167,7 +181,7 @@ HAS_FIGMA_HINT=$( grep -r "figma\.com/file" -l . --include="*.md" 2>/dev/null |
|
|
|
167
181
|
| `HAS_STORYBOOK_DIR` or storybook available | storybook, chromatic |
|
|
168
182
|
| `HAS_PEN_FILES` | pencil-dev |
|
|
169
183
|
| `HAS_REACT` | 21st-dev, magic-patterns |
|
|
170
|
-
| Always | refero, preview |
|
|
184
|
+
| Always | refero, preview, lazyweb (free — cost-aware default, D-01) |
|
|
171
185
|
|
|
172
186
|
---
|
|
173
187
|
|
|
@@ -212,6 +226,8 @@ One-line value props (use verbatim):
|
|
|
212
226
|
| pencil-dev | `.pen` spec files as canonical design source |
|
|
213
227
|
| 21st-dev | AI component generator (marketplace search) |
|
|
214
228
|
| magic-patterns | AI component generator (DS-aware) |
|
|
229
|
+
| lazyweb | free design reference search (pricing/onboarding/redesign) — discover Tier 1 |
|
|
230
|
+
| mobbin | curated mobile + flow-level references (paid) — discover Tier 2 |
|
|
215
231
|
|
|
216
232
|
---
|
|
217
233
|
|
|
@@ -239,7 +255,7 @@ options:
|
|
|
239
255
|
- "Exit" → emit ## CONNECTIONS COMPLETE, exit
|
|
240
256
|
```
|
|
241
257
|
|
|
242
|
-
If recommended bucket is empty, swap that option for "Show all
|
|
258
|
+
If recommended bucket is empty, swap that option for "Show all 14 and pick."
|
|
243
259
|
|
|
244
260
|
---
|
|
245
261
|
|
|
@@ -296,6 +312,8 @@ options:
|
|
|
296
312
|
| 21st-dev | `npx @21st-dev/magic init` + env var | ✗ no | Env var required — force manual |
|
|
297
313
|
| pencil-dev | VS Code extension | ✗ no | IDE-level install — force manual |
|
|
298
314
|
| claude-design | handoff bundle drop | ✗ no | User-driven file drop — force manual |
|
|
315
|
+
| mobbin | `claude mcp add mobbin --transport http https://api.mobbin.com/mcp` | ✓ yes | Reversible MCP add; no credential filesystem-write (OAuth on first call) |
|
|
316
|
+
| lazyweb | `claude plugin install lazyweb@lazyweb` (after token write to `~/.lazyweb/`) | ✗ no | Writes a bearer token to disk — force manual (user-consent step) |
|
|
299
317
|
|
|
300
318
|
For non-auto-run connections, hide the "Run install command now" option entirely in 5.3.
|
|
301
319
|
|
|
@@ -68,7 +68,25 @@ C2. Empty result -> pinterest: not_configured
|
|
|
68
68
|
|
|
69
69
|
No live `pinterest_search` call at probe time — ToolSearch presence is sufficient. The synthesizer makes the actual search calls.
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
### D — Lazyweb probe (ToolSearch-only — free, discover Tier 1 per D-01)
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
D1. ToolSearch({ query: "lazyweb", max_results: 5 })
|
|
75
|
+
D2. Empty result -> lazyweb: not_configured
|
|
76
|
+
Non-empty -> lazyweb: available
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### E — Mobbin probe (ToolSearch-only — paid, discover Tier 2 per D-01)
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
E1. ToolSearch({ query: "mobbin", max_results: 5 })
|
|
83
|
+
E2. Empty result -> mobbin: not_configured
|
|
84
|
+
Non-empty -> mobbin: available
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Reference-source tier order (cost-aware, D-01):** Lazyweb (free, tried first) → Mobbin / Refero (paid, whichever is bound + subscribed) → Pinterest → awesome-design-md → WebFetch.
|
|
88
|
+
|
|
89
|
+
After all probes (A, B, C, D, E), update `.design/STATE.md` `<connections>` with the results and continue. Downstream stages (design-context-builder) read `<connections>` from STATE.md rather than re-probing.
|
|
72
90
|
|
|
73
91
|
---
|
|
74
92
|
|
package/skills/ship/SKILL.md
CHANGED
|
@@ -29,6 +29,12 @@ Closes the verify → merge gap: runs `/gdd:pr-branch` for a clean branch, assem
|
|
|
29
29
|
- Do not include `.design/` or `.planning/` files in the PR branch — that is `/gdd:pr-branch`'s job.
|
|
30
30
|
- Do not skip the verify pre-flight silently — always surface a failure and ask.
|
|
31
31
|
|
|
32
|
+
## Step 6.5 — PR inline review surface (pr-commenter)
|
|
33
|
+
|
|
34
|
+
ONLY on the success path — after the PR has been created (Step 5) and its URL printed (Step 6) — spawn `agents/pr-commenter.md` via the `Task` tool to post GDD's verify/audit output **inline** on the new PR: inline review comments on changed lines, Preview/Chromatic before-after screenshot pairs, and the `gdd/design-review` check-run (audit pillar scores + verify pass/fail + a11y). Pass the PR number + `owner/repo` in the Task context.
|
|
35
|
+
|
|
36
|
+
This is a **degrade-to-noop** surface and MUST NOT fail the ship: if `gh` is unavailable, the `GDD_DISABLE_PR_COMMENTER` kill-switch (env or `.design/config.json`) is set, or the agent errors, the ship still succeeds (pr-commenter prints the bodies for manual paste). Skip this step entirely if PR creation failed in Step 5. The posting contract (gh-api shapes, check-run payload, redaction, branch-protection setup) lives in `reference/pr-review-integration.md`.
|
|
37
|
+
|
|
32
38
|
## Step 7 — Update notice (post-closeout surface)
|
|
33
39
|
|
|
34
40
|
ONLY on the success path — after the PR has been created and the URL has been printed — emit the plugin-update banner. If PR creation failed earlier, skip this step (do not suggest upgrades in the middle of a PR-creation failure).
|