@tickernelz/paperclip-pro-skills-catalog 2026.925.0

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.
Files changed (76) hide show
  1. package/LICENSE +22 -0
  2. package/catalog/bundled/docs/doc-maintenance/SKILL.md +75 -0
  3. package/catalog/bundled/paperclip-operations/issue-triage/SKILL.md +74 -0
  4. package/catalog/bundled/paperclip-operations/reflection-coach/SKILL.md +202 -0
  5. package/catalog/bundled/paperclip-operations/status-card-query/SKILL.md +137 -0
  6. package/catalog/bundled/paperclip-operations/summarize-status/SKILL.md +121 -0
  7. package/catalog/bundled/paperclip-operations/task-planning/SKILL.md +84 -0
  8. package/catalog/bundled/product/paperclip-capsules/SKILL.md +99 -0
  9. package/catalog/bundled/product/paperclip-capsules/references/generator-workflows.md +120 -0
  10. package/catalog/bundled/product/paperclip-capsules/references/hero-capsule-bank.md +189 -0
  11. package/catalog/bundled/product/paperclip-capsules/references/identicon-prototyper.md +213 -0
  12. package/catalog/bundled/product/paperclip-capsules/references/individual-status-capsules.md +113 -0
  13. package/catalog/bundled/product/wireframe/SKILL.md +193 -0
  14. package/catalog/bundled/product/wireframe/assets/site-template.html +356 -0
  15. package/catalog/bundled/product/wireframe/assets/template-mobile.svg +21 -0
  16. package/catalog/bundled/product/wireframe/assets/template.svg +24 -0
  17. package/catalog/bundled/product/wireframe/references/components.md +482 -0
  18. package/catalog/bundled/product/wireframe/references/examples.md +362 -0
  19. package/catalog/bundled/product/wireframe/references/grid-system.md +107 -0
  20. package/catalog/bundled/quality/qa-acceptance/SKILL.md +93 -0
  21. package/catalog/bundled/software-development/github-pr-workflow/SKILL.md +93 -0
  22. package/catalog/optional/browser/agent-browser/SKILL.md +93 -0
  23. package/catalog/optional/content/release-announcement/SKILL.md +218 -0
  24. package/catalog/optional/content/simplified-english/SKILL.md +40 -0
  25. package/catalog/optional/finance/ramp/SKILL.md +98 -0
  26. package/catalog/optional/product/design-critique/SKILL.md +121 -0
  27. package/catalog/optional/research/last30days/catalog-ref.json +44 -0
  28. package/catalog/optional/software-development/prepare-mcp-integration/SKILL.md +230 -0
  29. package/catalog/optional/software-development/prepare-mcp-integration/examples/notion-mcp-research-gate.md +43 -0
  30. package/dist/generated/catalog.json +1165 -0
  31. package/dist/scripts/build-catalog-manifest.d.ts +2 -0
  32. package/dist/scripts/build-catalog-manifest.d.ts.map +1 -0
  33. package/dist/scripts/build-catalog-manifest.js +15 -0
  34. package/dist/scripts/build-catalog-manifest.js.map +1 -0
  35. package/dist/scripts/validate-catalog.d.ts +2 -0
  36. package/dist/scripts/validate-catalog.d.ts.map +1 -0
  37. package/dist/scripts/validate-catalog.js +15 -0
  38. package/dist/scripts/validate-catalog.js.map +1 -0
  39. package/dist/src/catalog-builder.d.ts +16 -0
  40. package/dist/src/catalog-builder.d.ts.map +1 -0
  41. package/dist/src/catalog-builder.js +688 -0
  42. package/dist/src/catalog-builder.js.map +1 -0
  43. package/dist/src/catalog-builder.test.d.ts +2 -0
  44. package/dist/src/catalog-builder.test.d.ts.map +1 -0
  45. package/dist/src/catalog-builder.test.js +355 -0
  46. package/dist/src/catalog-builder.test.js.map +1 -0
  47. package/dist/src/frontmatter.d.ts +3 -0
  48. package/dist/src/frontmatter.d.ts.map +1 -0
  49. package/dist/src/frontmatter.js +3 -0
  50. package/dist/src/frontmatter.js.map +1 -0
  51. package/dist/src/frontmatter.test.d.ts +2 -0
  52. package/dist/src/frontmatter.test.d.ts.map +1 -0
  53. package/dist/src/frontmatter.test.js +31 -0
  54. package/dist/src/frontmatter.test.js.map +1 -0
  55. package/dist/src/index.d.ts +7 -0
  56. package/dist/src/index.d.ts.map +1 -0
  57. package/dist/src/index.js +21 -0
  58. package/dist/src/index.js.map +1 -0
  59. package/dist/src/packaged-artifacts.test.d.ts +2 -0
  60. package/dist/src/packaged-artifacts.test.d.ts.map +1 -0
  61. package/dist/src/packaged-artifacts.test.js +48 -0
  62. package/dist/src/packaged-artifacts.test.js.map +1 -0
  63. package/dist/src/release-content-cases-contract.test.d.ts +2 -0
  64. package/dist/src/release-content-cases-contract.test.d.ts.map +1 -0
  65. package/dist/src/release-content-cases-contract.test.js +37 -0
  66. package/dist/src/release-content-cases-contract.test.js.map +1 -0
  67. package/dist/src/shipped-catalog.test.d.ts +2 -0
  68. package/dist/src/shipped-catalog.test.d.ts.map +1 -0
  69. package/dist/src/shipped-catalog.test.js +179 -0
  70. package/dist/src/shipped-catalog.test.js.map +1 -0
  71. package/dist/src/types.d.ts +54 -0
  72. package/dist/src/types.d.ts.map +1 -0
  73. package/dist/src/types.js +2 -0
  74. package/dist/src/types.js.map +1 -0
  75. package/generated/catalog.json +1165 -0
  76. package/package.json +54 -0
@@ -0,0 +1,362 @@
1
+ # Worked examples
2
+
3
+ Four complete wireframes you can copy and modify. Each one is a valid standalone SVG file. The annotation list under each example is what you should reproduce in your reply when emitting a wireframe.
4
+
5
+ ---
6
+
7
+ ## 1. Login screen (mobile, 375×812)
8
+
9
+ ```svg
10
+ <svg xmlns="http://www.w3.org/2000/svg" width="375" height="812" viewBox="0 0 375 812"
11
+ font-family="-apple-system, system-ui, sans-serif" fill="#fff" stroke="#000" stroke-width="1.5">
12
+ <rect x="0" y="0" width="375" height="812" />
13
+
14
+ <!-- 1: status bar (placeholder) -->
15
+ <g transform="translate(16, 16)">
16
+ <text x="0" y="14" font-size="12" stroke="none" fill="#666">9:41</text>
17
+ <text x="343" y="14" font-size="12" text-anchor="end" stroke="none" fill="#666">100%</text>
18
+ </g>
19
+
20
+ <!-- 2: brand mark -->
21
+ <g transform="translate(159, 120)">
22
+ <rect width="56" height="56" rx="8" fill="#e6e6e6" />
23
+ </g>
24
+
25
+ <!-- 3: title -->
26
+ <text x="187" y="216" font-size="28" font-weight="700" text-anchor="middle" stroke="none" fill="#000">Welcome back</text>
27
+ <text x="187" y="248" font-size="14" text-anchor="middle" stroke="none" fill="#666">Sign in to continue</text>
28
+
29
+ <!-- 4: email field -->
30
+ <g transform="translate(16, 296)">
31
+ <text x="0" y="14" font-size="14" font-weight="600" stroke="none" fill="#000">Email</text>
32
+ <g transform="translate(0, 24)">
33
+ <rect width="343" height="48" rx="4" />
34
+ <text x="12" y="30" font-size="14" stroke="none" fill="#666">you@example.com</text>
35
+ </g>
36
+ </g>
37
+
38
+ <!-- 5: password field -->
39
+ <g transform="translate(16, 400)">
40
+ <text x="0" y="14" font-size="14" font-weight="600" stroke="none" fill="#000">Password</text>
41
+ <g transform="translate(0, 24)">
42
+ <rect width="343" height="48" rx="4" />
43
+ <text x="12" y="30" font-size="14" stroke="none" fill="#666">••••••••</text>
44
+ <text x="331" y="30" font-size="12" text-anchor="end" stroke="none" fill="#666">show</text>
45
+ </g>
46
+ <text x="343" y="92" font-size="12" text-anchor="end" stroke="none" fill="#666">Forgot password?</text>
47
+ </g>
48
+
49
+ <!-- 6: primary CTA -->
50
+ <g transform="translate(16, 528)">
51
+ <rect width="343" height="48" rx="4" fill="#000" />
52
+ <text x="171" y="30" font-size="14" font-weight="600" text-anchor="middle" stroke="none" fill="#fff">Sign in</text>
53
+ </g>
54
+
55
+ <!-- 7: divider -->
56
+ <g transform="translate(16, 600)">
57
+ <line x1="0" y1="8" x2="140" y2="8" stroke="#666" />
58
+ <text x="171" y="12" font-size="12" text-anchor="middle" stroke="none" fill="#666">or</text>
59
+ <line x1="203" y1="8" x2="343" y2="8" stroke="#666" />
60
+ </g>
61
+
62
+ <!-- 8: secondary CTA -->
63
+ <g transform="translate(16, 632)">
64
+ <rect width="343" height="48" rx="4" />
65
+ <text x="171" y="30" font-size="14" text-anchor="middle" stroke="none" fill="#000">Continue with SSO</text>
66
+ </g>
67
+
68
+ <!-- 9: footer -->
69
+ <text x="187" y="744" font-size="14" text-anchor="middle" stroke="none" fill="#000">New here? <tspan font-weight="600">Create an account</tspan></text>
70
+ </svg>
71
+ ```
72
+
73
+ **Annotations:**
74
+ 1. Status bar placeholder
75
+ 2. Brand mark
76
+ 3. Page title + subtitle
77
+ 4. Email input
78
+ 5. Password input + reveal control + forgot link
79
+ 6. Primary CTA (sign in)
80
+ 7. SSO divider
81
+ 8. Secondary CTA (SSO)
82
+ 9. Sign-up link
83
+
84
+ ---
85
+
86
+ ## 2. Admin dashboard (desktop, 1280×800)
87
+
88
+ ```svg
89
+ <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="800" viewBox="0 0 1280 800"
90
+ font-family="-apple-system, system-ui, sans-serif" fill="#fff" stroke="#000" stroke-width="1.5">
91
+ <rect x="0" y="0" width="1280" height="800" />
92
+
93
+ <!-- 1: sidebar -->
94
+ <g transform="translate(0, 0)" data-region="sidebar">
95
+ <rect width="240" height="800" />
96
+ <text x="24" y="40" font-size="20" font-weight="600" stroke="none" fill="#000">Acme</text>
97
+ <rect x="0" y="80" width="240" height="40" fill="#e6e6e6" />
98
+ <text x="24" y="105" font-size="14" stroke="none" fill="#000">Dashboard</text>
99
+ <text x="24" y="153" font-size="14" stroke="none" fill="#666">Projects</text>
100
+ <text x="24" y="201" font-size="14" stroke="none" fill="#666">Reports</text>
101
+ <text x="24" y="249" font-size="14" stroke="none" fill="#666">Team</text>
102
+ <text x="24" y="297" font-size="14" stroke="none" fill="#666">Settings</text>
103
+ </g>
104
+
105
+ <!-- 2: top bar -->
106
+ <g transform="translate(240, 0)" data-region="topbar">
107
+ <rect width="1040" height="64" />
108
+ <g transform="translate(24, 12)">
109
+ <rect width="400" height="40" rx="20" />
110
+ <circle cx="20" cy="20" r="6" />
111
+ <line x1="24" y1="24" x2="30" y2="30" />
112
+ <text x="40" y="25" font-size="14" stroke="none" fill="#666">Search…</text>
113
+ </g>
114
+ <circle cx="1000" cy="32" r="16" fill="#e6e6e6" />
115
+ </g>
116
+
117
+ <!-- 3: page header -->
118
+ <g transform="translate(264, 96)" data-region="header">
119
+ <text x="0" y="28" font-size="28" font-weight="700" stroke="none" fill="#000">Dashboard</text>
120
+ <text x="0" y="56" font-size="14" stroke="none" fill="#666">Overview of activity for the last 7 days</text>
121
+ <g transform="translate(872, 0)">
122
+ <rect width="120" height="40" rx="4" fill="#000" />
123
+ <text x="60" y="25" font-size="14" font-weight="600" text-anchor="middle" stroke="none" fill="#fff">New project</text>
124
+ </g>
125
+ </g>
126
+
127
+ <!-- 4: metric tiles -->
128
+ <g transform="translate(264, 184)" data-region="metrics">
129
+ <g transform="translate(0, 0)">
130
+ <rect width="232" height="120" rx="6" />
131
+ <text x="24" y="40" font-size="12" stroke="none" fill="#666">Active users</text>
132
+ <text x="24" y="80" font-size="28" font-weight="700" stroke="none" fill="#000">1,284</text>
133
+ <text x="24" y="104" font-size="12" stroke="none" fill="#666">+12% vs last week</text>
134
+ </g>
135
+ <g transform="translate(256, 0)">
136
+ <rect width="232" height="120" rx="6" />
137
+ <text x="24" y="40" font-size="12" stroke="none" fill="#666">New signups</text>
138
+ <text x="24" y="80" font-size="28" font-weight="700" stroke="none" fill="#000">312</text>
139
+ <text x="24" y="104" font-size="12" stroke="none" fill="#666">+4%</text>
140
+ </g>
141
+ <g transform="translate(512, 0)">
142
+ <rect width="232" height="120" rx="6" />
143
+ <text x="24" y="40" font-size="12" stroke="none" fill="#666">Revenue</text>
144
+ <text x="24" y="80" font-size="28" font-weight="700" stroke="none" fill="#000">$24.1k</text>
145
+ <text x="24" y="104" font-size="12" stroke="none" fill="#666">+8%</text>
146
+ </g>
147
+ <g transform="translate(768, 0)">
148
+ <rect width="232" height="120" rx="6" />
149
+ <text x="24" y="40" font-size="12" stroke="none" fill="#666">Churn</text>
150
+ <text x="24" y="80" font-size="28" font-weight="700" stroke="none" fill="#000">1.4%</text>
151
+ <text x="24" y="104" font-size="12" stroke="none" fill="#666">−0.3%</text>
152
+ </g>
153
+ </g>
154
+
155
+ <!-- 5: chart placeholder -->
156
+ <g transform="translate(264, 328)" data-region="chart">
157
+ <rect width="640" height="320" rx="6" />
158
+ <text x="24" y="40" font-size="20" font-weight="600" stroke="none" fill="#000">Activity</text>
159
+ <rect x="24" y="64" width="592" height="232" fill="#e6e6e6" />
160
+ <line x1="24" y1="64" x2="616" y2="296" stroke="#666" />
161
+ <line x1="616" y1="64" x2="24" y2="296" stroke="#666" />
162
+ </g>
163
+
164
+ <!-- 6: recent items list -->
165
+ <g transform="translate(920, 328)" data-region="recent">
166
+ <rect width="336" height="320" rx="6" />
167
+ <text x="24" y="40" font-size="20" font-weight="600" stroke="none" fill="#000">Recent</text>
168
+ <g transform="translate(0, 64)">
169
+ <line x1="0" y1="0" x2="336" y2="0" stroke="#666" />
170
+ <circle cx="32" cy="28" r="12" fill="#e6e6e6" />
171
+ <text x="56" y="24" font-size="14" font-weight="600" stroke="none" fill="#000">Item one</text>
172
+ <text x="56" y="40" font-size="12" stroke="none" fill="#666">2h ago</text>
173
+ </g>
174
+ <g transform="translate(0, 120)">
175
+ <line x1="0" y1="0" x2="336" y2="0" stroke="#666" />
176
+ <circle cx="32" cy="28" r="12" fill="#e6e6e6" />
177
+ <text x="56" y="24" font-size="14" font-weight="600" stroke="none" fill="#000">Item two</text>
178
+ <text x="56" y="40" font-size="12" stroke="none" fill="#666">5h ago</text>
179
+ </g>
180
+ <g transform="translate(0, 176)">
181
+ <line x1="0" y1="0" x2="336" y2="0" stroke="#666" />
182
+ <circle cx="32" cy="28" r="12" fill="#e6e6e6" />
183
+ <text x="56" y="24" font-size="14" font-weight="600" stroke="none" fill="#000">Item three</text>
184
+ <text x="56" y="40" font-size="12" stroke="none" fill="#666">1d ago</text>
185
+ </g>
186
+ </g>
187
+ </svg>
188
+ ```
189
+
190
+ **Annotations:**
191
+ 1. Sidebar nav with active "Dashboard"
192
+ 2. Top bar with global search and account menu
193
+ 3. Page header with title, subtitle, and primary CTA
194
+ 4. Four KPI metric tiles
195
+ 5. Activity chart panel (chart area shown as placeholder)
196
+ 6. Recent items list (right rail)
197
+
198
+ ---
199
+
200
+ ## 3. Settings page with form (desktop, 1280×800)
201
+
202
+ ```svg
203
+ <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="800" viewBox="0 0 1280 800"
204
+ font-family="-apple-system, system-ui, sans-serif" fill="#fff" stroke="#000" stroke-width="1.5">
205
+ <rect x="0" y="0" width="1280" height="800" />
206
+
207
+ <!-- 1: top bar -->
208
+ <g transform="translate(0, 0)">
209
+ <rect width="1280" height="64" />
210
+ <text x="24" y="40" font-size="20" font-weight="600" stroke="none" fill="#000">Settings</text>
211
+ <circle cx="1240" cy="32" r="16" fill="#e6e6e6" />
212
+ </g>
213
+
214
+ <!-- 2: settings nav (left rail) -->
215
+ <g transform="translate(24, 96)">
216
+ <text x="0" y="14" font-size="12" font-weight="600" stroke="none" fill="#666">PERSONAL</text>
217
+ <rect x="-8" y="32" width="216" height="32" fill="#e6e6e6" />
218
+ <text x="0" y="52" font-size="14" stroke="none" fill="#000">Account</text>
219
+ <text x="0" y="84" font-size="14" stroke="none" fill="#666">Notifications</text>
220
+ <text x="0" y="116" font-size="14" stroke="none" fill="#666">Sessions</text>
221
+ <text x="0" y="160" font-size="12" font-weight="600" stroke="none" fill="#666">WORKSPACE</text>
222
+ <text x="0" y="200" font-size="14" stroke="none" fill="#666">Members</text>
223
+ <text x="0" y="232" font-size="14" stroke="none" fill="#666">Billing</text>
224
+ <text x="0" y="264" font-size="14" stroke="none" fill="#666">Integrations</text>
225
+ </g>
226
+
227
+ <!-- 3: form content -->
228
+ <g transform="translate(264, 96)">
229
+ <text x="0" y="28" font-size="28" font-weight="700" stroke="none" fill="#000">Account</text>
230
+ <text x="0" y="56" font-size="14" stroke="none" fill="#666">Manage your personal account details.</text>
231
+
232
+ <!-- avatar field -->
233
+ <g transform="translate(0, 96)">
234
+ <text x="0" y="14" font-size="14" font-weight="600" stroke="none" fill="#000">Profile photo</text>
235
+ <g transform="translate(0, 24)">
236
+ <circle cx="32" cy="32" r="32" fill="#e6e6e6" />
237
+ <line x1="9" y1="9" x2="55" y2="55" stroke="#666" />
238
+ <line x1="55" y1="9" x2="9" y2="55" stroke="#666" />
239
+ </g>
240
+ <g transform="translate(80, 36)">
241
+ <rect width="120" height="40" rx="4" />
242
+ <text x="60" y="25" font-size="14" text-anchor="middle" stroke="none" fill="#000">Upload</text>
243
+ </g>
244
+ </g>
245
+
246
+ <!-- name field -->
247
+ <g transform="translate(0, 216)">
248
+ <text x="0" y="14" font-size="14" font-weight="600" stroke="none" fill="#000">Display name</text>
249
+ <g transform="translate(0, 24)">
250
+ <rect width="480" height="40" rx="4" />
251
+ <text x="12" y="25" font-size="14" stroke="none" fill="#000">Alex Morgan</text>
252
+ </g>
253
+ </g>
254
+
255
+ <!-- email field -->
256
+ <g transform="translate(0, 312)">
257
+ <text x="0" y="14" font-size="14" font-weight="600" stroke="none" fill="#000">Email</text>
258
+ <g transform="translate(0, 24)">
259
+ <rect width="480" height="40" rx="4" />
260
+ <text x="12" y="25" font-size="14" stroke="none" fill="#000">alex@acme.com</text>
261
+ </g>
262
+ <text x="0" y="84" font-size="12" stroke="none" fill="#666">Used for sign-in and notifications.</text>
263
+ </g>
264
+
265
+ <!-- role dropdown -->
266
+ <g transform="translate(0, 432)">
267
+ <text x="0" y="14" font-size="14" font-weight="600" stroke="none" fill="#000">Role</text>
268
+ <g transform="translate(0, 24)">
269
+ <rect width="200" height="40" rx="4" />
270
+ <text x="12" y="25" font-size="14" stroke="none" fill="#000">Admin</text>
271
+ <polyline points="180,17 188,25 180,33" fill="none" />
272
+ </g>
273
+ </g>
274
+
275
+ <!-- footer actions -->
276
+ <g transform="translate(0, 552)">
277
+ <line x1="0" y1="0" x2="800" y2="0" stroke="#666" />
278
+ <g transform="translate(560, 24)">
279
+ <rect width="120" height="40" rx="4" />
280
+ <text x="60" y="25" font-size="14" text-anchor="middle" stroke="none" fill="#000">Cancel</text>
281
+ </g>
282
+ <g transform="translate(688, 24)">
283
+ <rect width="112" height="40" rx="4" fill="#000" />
284
+ <text x="56" y="25" font-size="14" font-weight="600" text-anchor="middle" stroke="none" fill="#fff">Save</text>
285
+ </g>
286
+ </g>
287
+ </g>
288
+ </svg>
289
+ ```
290
+
291
+ **Annotations:**
292
+ 1. Top bar with section name
293
+ 2. Settings sub-nav (Personal / Workspace groups)
294
+ 3. Form: avatar with upload, display name, email + help text, role dropdown, save / cancel actions
295
+
296
+ ---
297
+
298
+ ## 4. Modal confirmation overlay (desktop, 1280×800)
299
+
300
+ ```svg
301
+ <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="800" viewBox="0 0 1280 800"
302
+ font-family="-apple-system, system-ui, sans-serif" fill="#fff" stroke="#000" stroke-width="1.5">
303
+ <rect x="0" y="0" width="1280" height="800" />
304
+
305
+ <!-- underlying screen (faded) -->
306
+ <g transform="translate(0,0)" opacity="0.5">
307
+ <rect width="1280" height="64" />
308
+ <text x="24" y="40" font-size="20" font-weight="600" stroke="none" fill="#000">Projects</text>
309
+ </g>
310
+
311
+ <!-- 1: backdrop -->
312
+ <rect x="0" y="0" width="1280" height="800" fill="#000" fill-opacity="0.4" stroke="none" />
313
+
314
+ <!-- 2: modal -->
315
+ <g transform="translate(320, 240)" data-region="modal">
316
+ <rect width="640" height="320" rx="6" />
317
+ <text x="24" y="48" font-size="20" font-weight="600" stroke="none" fill="#000">Delete project?</text>
318
+ <line x1="0" y1="72" x2="640" y2="72" />
319
+
320
+ <text x="24" y="112" font-size="14" stroke="none" fill="#000">This permanently deletes the project and all its data.</text>
321
+ <text x="24" y="136" font-size="14" stroke="none" fill="#000">This action can't be undone.</text>
322
+
323
+ <!-- confirm input -->
324
+ <g transform="translate(24, 168)">
325
+ <text x="0" y="14" font-size="12" stroke="none" fill="#666">Type the project name to confirm</text>
326
+ <g transform="translate(0, 24)">
327
+ <rect width="592" height="40" rx="4" />
328
+ <text x="12" y="25" font-size="14" stroke="none" fill="#666">acme-prod</text>
329
+ </g>
330
+ </g>
331
+
332
+ <!-- footer -->
333
+ <line x1="0" y1="248" x2="640" y2="248" />
334
+ <g transform="translate(384, 268)">
335
+ <rect width="120" height="40" rx="4" />
336
+ <text x="60" y="25" font-size="14" text-anchor="middle" stroke="none" fill="#000">Cancel</text>
337
+ </g>
338
+ <g transform="translate(512, 268)">
339
+ <rect width="104" height="40" rx="4" fill="#000" />
340
+ <text x="52" y="25" font-size="14" font-weight="600" text-anchor="middle" stroke="none" fill="#fff">Delete</text>
341
+ </g>
342
+ </g>
343
+
344
+ <!-- 3: annotation -->
345
+ <g data-region="annotations">
346
+ <circle cx="976" cy="556" r="12" fill="#fff" stroke="#d33" stroke-dasharray="4 2" />
347
+ <text x="976" y="560" font-size="12" font-weight="700" text-anchor="middle" stroke="none" fill="#d33">1</text>
348
+ <text x="996" y="564" font-size="12" stroke="none" fill="#d33">Disable until input matches project name</text>
349
+ </g>
350
+ </svg>
351
+ ```
352
+
353
+ **Annotations:**
354
+ 1. Backdrop dims the underlying page
355
+ 2. Confirmation modal: title, body copy, type-to-confirm field, Cancel + destructive Confirm
356
+ 3. Reviewer note (red dashed): the destructive button must remain disabled until the typed input matches
357
+
358
+ ---
359
+
360
+ ## Multi-screen flow
361
+
362
+ When emitting a flow, render each screen as its own `<g transform="translate(x,0)">` inside one SVG, separated by 80px gutters and connected with arrow primitives from `components.md`. Or emit one SVG per screen and a `flow.svg` summary that arranges thumbnails (scaled with `transform="scale(0.25)"`) left-to-right. Either is acceptable; pick whichever the reviewer can scan faster.
@@ -0,0 +1,107 @@
1
+ # Grid, palette, and type scale
2
+
3
+ These are the only values you may use. Do not introduce new colours, sizes, or grid units.
4
+
5
+ ## Canvas presets
6
+
7
+ | Viewport | Width × Height | Use for |
8
+ | -------- | -------------- | ----------------------------- |
9
+ | Desktop | 1280 × 800 | Default for web app screens |
10
+ | Wide | 1440 × 900 | Marketing landing pages |
11
+ | Tablet | 768 × 1024 | iPad-class screens |
12
+ | Mobile | 375 × 812 | iPhone-class screens |
13
+
14
+ Always include `viewBox="0 0 W H"` matching the canvas so it scales when embedded.
15
+
16
+ ## Grid
17
+
18
+ - Base unit: **8px**. All `x`, `y`, `width`, `height` values must be multiples of 8.
19
+ - Outer page margin: **24px** on desktop/tablet, **16px** on mobile.
20
+ - Column gutter: **24px** desktop, **16px** mobile.
21
+ - Vertical rhythm: **24px** between sibling components.
22
+
23
+ ### Desktop 12-column grid
24
+
25
+ - Total width: 1280
26
+ - Outer margin (each side): 48
27
+ - Inner content width: 1184
28
+ - Column width: 88, gutter 8 → 12 × (88 + 8) − 8 = 1144 + 40 = 1184 ✓
29
+
30
+ In practice, snap to common widths:
31
+ - Sidebar: 240
32
+ - Content max: 944 (after sidebar)
33
+ - Card grid: 3 × 384 with 24 gutters or 4 × 280 with 24 gutters
34
+ - Modal width: 480 (small), 640 (default), 800 (wide)
35
+
36
+ ### Mobile single column
37
+
38
+ - Total width: 375
39
+ - Outer margin: 16 each side → content 343
40
+ - Tap targets: 44 minimum height (snap to 48)
41
+
42
+ ## Palette (the only colours allowed)
43
+
44
+ | Name | Hex | Use |
45
+ | ---------------- | ---------- | -------------------------------------------------------- |
46
+ | Ink | `#000` | Strokes, primary text |
47
+ | Paper | `#fff` | Default fill |
48
+ | Mute text | `#666` | Placeholder text inside inputs, secondary labels |
49
+ | Placeholder grey | `#e6e6e6` | Image/avatar/empty-state regions |
50
+ | Subtle grey | `#f4f4f4` | Optional zebra rows in tables; nothing else |
51
+ | Annotation red | `#d33` | Annotation layer ONLY — dashed borders, callout numbers |
52
+
53
+ That's the entire palette. No hover states, no focus rings, no brand colours.
54
+
55
+ ## Type scale
56
+
57
+ Single typeface: `font-family="-apple-system, system-ui, sans-serif"`.
58
+
59
+ | Role | Size | Weight | Use |
60
+ | -------- | ---- | ------ | -------------------------------- |
61
+ | Caption | 12 | 400 | Help text, metadata, table footnotes |
62
+ | Body | 14 | 400 | Default text, button labels, list rows |
63
+ | Heading | 20 | 600 | Section headings, card titles |
64
+ | Title | 28 | 700 | Page title (one per screen) |
65
+
66
+ Font-weight is the only typographic variation allowed beyond size. No italics, no underline (except links — see below).
67
+
68
+ ### Link convention
69
+
70
+ For text links, render as body 14, with `text-decoration="underline"`. No colour change.
71
+
72
+ ### Strokes on text
73
+
74
+ Always set `stroke="none"` on `<text>` elements. The wireframe SVG sets a default stroke at the `<svg>` root for boxes; text inherits it as an unwanted halo unless overridden.
75
+
76
+ ## Standard component sizes
77
+
78
+ These appear so often you should memorise them.
79
+
80
+ | Component | Size (W × H) |
81
+ | ----------------- | ------------ |
82
+ | Button (default) | 120 × 40 |
83
+ | Button (small) | 80 × 32 |
84
+ | Button (icon) | 40 × 40 |
85
+ | Text input | 320 × 40 |
86
+ | Text input (full) | 100% × 40 |
87
+ | Search input | 480 × 40 |
88
+ | Dropdown | 200 × 40 |
89
+ | Checkbox / radio | 20 × 20 |
90
+ | Avatar (small) | 32 × 32 circle |
91
+ | Avatar (medium) | 48 × 48 circle |
92
+ | Navbar | 100% × 64 |
93
+ | Tab | (auto) × 48 |
94
+ | List row | 100% × 56 |
95
+ | Table row | 100% × 48 |
96
+ | Card padding | 24 inside |
97
+ | Modal | 480 / 640 / 800 wide, height auto |
98
+
99
+ ## Coordinate conventions
100
+
101
+ - Place every primitive inside a `<g transform="translate(x, y)">` so its internal coordinates start at `(0, 0)`. This makes primitives copy-pastable across screens.
102
+ - Use comments above each primitive: `<!-- 1: nav -->`, `<!-- 2: search -->` matching the annotation list you write below the SVG.
103
+ - Group related primitives under a parent `<g>` with a `data-region="..."` attribute for searchability.
104
+
105
+ ## Negative space
106
+
107
+ Empty space is part of the design. Do not fill the canvas. A wireframe with one card centered in the viewport is a valid wireframe if that's the screen's intent.
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: qa-acceptance
3
+ description: Produce QA acceptance criteria and a manual validation plan for a feature change — golden path, edge cases, error states, performance limits, and explicit pass/fail evidence.
4
+ key: paperclipai/bundled/quality/qa-acceptance
5
+ recommendedForRoles:
6
+ - qa
7
+ - engineer
8
+ - product
9
+ tags:
10
+ - qa
11
+ - acceptance
12
+ - validation
13
+ - testing
14
+ ---
15
+
16
+ # QA Acceptance
17
+
18
+ Write acceptance criteria that a reviewer can run against the running app and decide pass or fail without asking the author. The criteria are the contract — automated tests cover correctness, QA covers feature-level behavior.
19
+
20
+ ## When to use
21
+
22
+ - A feature change is heading to QA and needs a written validation plan.
23
+ - A reviewer is asked to verify a PR that touches user-visible behavior.
24
+ - An incident postmortem requires a regression check before reopen-prevention.
25
+ - A release candidate needs a pre-cut smoke pass.
26
+
27
+ ## When not to use
28
+
29
+ - The change is unit-test-only (utility refactor, internal naming). Acceptance criteria are unnecessary churn.
30
+ - You are asked to write tests against API contracts. Use contract testing, not feature QA.
31
+
32
+ ## Acceptance criteria format
33
+
34
+ Each criterion is a single, independently-verifiable statement:
35
+
36
+ ```md
37
+ - **Given** <starting state>, **when** <action>, **then** <observable outcome>.
38
+ ```
39
+
40
+ Example:
41
+
42
+ ```md
43
+ - **Given** a CSV export with 0 rows, **when** the user clicks Export, **then** the file downloads with only the header row and the UI shows "Exported 0 rows".
44
+ ```
45
+
46
+ Avoid criteria that combine multiple `when`s or `then`s. Split them.
47
+
48
+ ## What every plan must cover
49
+
50
+ 1. **Golden path.** The most common successful flow, end to end.
51
+ 2. **Empty and minimum states.** Zero items, one item, missing optional inputs.
52
+ 3. **Boundary inputs.** Max length strings, max numeric values, unicode, RTL text where applicable.
53
+ 4. **Error states.** Network failure, permission denied, validation failures, conflict (409), not found (404).
54
+ 5. **Concurrency and ordering.** Two users acting at once, race against background jobs, refresh during mutation.
55
+ 6. **Performance envelope.** The largest realistic input the change must handle without UI hangs or timeouts.
56
+ 7. **Backward compatibility.** Existing data, existing URLs, persisted user preferences continue to work.
57
+ 8. **Telemetry and audit.** Events, logs, or activity entries the change is supposed to emit.
58
+
59
+ If a section is genuinely not applicable, write "N/A: <why>" — do not silently omit.
60
+
61
+ ## Evidence
62
+
63
+ Each criterion needs evidence on the verification pass:
64
+
65
+ - Screenshot or short clip for UI behavior.
66
+ - Copied console / network output for API behavior.
67
+ - Log snippet or activity row for telemetry.
68
+ - Timing measurement for performance criteria.
69
+
70
+ "Looks good to me" without evidence is not a pass.
71
+
72
+ ## Quarantine and follow-up
73
+
74
+ - A failing criterion blocks acceptance unless explicitly waived by the owner with a tracked follow-up issue.
75
+ - "Known issue" without a linked follow-up is not a waiver.
76
+ - If you add a new criterion mid-pass, restart the pass — partial coverage hides regressions.
77
+
78
+ ## Handoff back to the author
79
+
80
+ Return the validation plan with three sections:
81
+
82
+ - **Pass.** Criteria that passed, with one-line evidence summaries.
83
+ - **Fail.** Criteria that failed, with the exact reproduction.
84
+ - **Blocked.** Criteria you could not run, with why.
85
+
86
+ The author owns turning failures into either fixes or accepted deferrals.
87
+
88
+ ## Anti-patterns
89
+
90
+ - Acceptance phrased as test plan ("write a Cypress test for X"). Acceptance is what is true after the change ships; tests are how you check.
91
+ - Criteria that depend on inspecting implementation details (selectors, query plans). Stay observable.
92
+ - Long checklists with no priority. Mark must-pass criteria distinctly from nice-to-have.
93
+ - Validation reports that say "passed" with no evidence. Reviewers cannot audit those.
@@ -0,0 +1,93 @@
1
+ ---
2
+ name: github-pr-workflow
3
+ description: Prepare a GitHub pull request from a feature branch — branch hygiene, commit shape, title/body, verification notes, screenshots for UI work, and replies to review comments.
4
+ key: paperclipai/bundled/software-development/github-pr-workflow
5
+ recommendedForRoles:
6
+ - engineer
7
+ tags:
8
+ - github
9
+ - pull-requests
10
+ - code-review
11
+ - release
12
+ ---
13
+
14
+ # GitHub Pull Request Workflow
15
+
16
+ Ship a PR a reviewer can land without follow-up clarifying questions. The aim is high signal in the title and body, evidence the change works, and clean replies when feedback comes in.
17
+
18
+ ## When to use
19
+
20
+ - You are about to open a PR for a change that is functionally complete.
21
+ - A reviewer left comments and you need to respond and push fixes.
22
+ - A PR has been open more than a day and needs to be brought back into shape (stale conflicts, missing description, missing verification).
23
+
24
+ ## When not to use
25
+
26
+ - The change is not yet functionally complete. Finish the work first; draft PRs that bounce on review are noise.
27
+ - The repository uses a non-GitHub forge. Adjust to that forge's conventions; do not force GitHub-isms.
28
+
29
+ ## Branch hygiene before opening
30
+
31
+ - Rebase or merge from the target base so the diff is current.
32
+ - Squash WIP commits into reviewable units. Prefer one commit per logical change; do not force one-commit-per-PR if the work is genuinely multi-step.
33
+ - Confirm tests, typecheck, and lint pass locally. Note any deliberate skips in the PR body.
34
+ - Remove debug prints, commented-out code, and `TODO` markers that are not tracked.
35
+
36
+ ## PR title
37
+
38
+ - Imperative mood, under 70 characters.
39
+ - Lead with the user-visible change, not the file touched. `Allow CSV export from reports table` beats `Update reports.tsx`.
40
+ - If the repo uses an issue prefix convention (`PAP-1234:`, `[security]`), follow it.
41
+ - No trailing period.
42
+
43
+ ## PR body
44
+
45
+ Use this structure:
46
+
47
+ ```md
48
+ ## Summary
49
+ - 1–3 bullets describing what changed and why.
50
+
51
+ ## Implementation notes
52
+ - Anything non-obvious in the diff: trade-offs, dropped alternatives, gotchas.
53
+ - Migration or config implications.
54
+
55
+ ## Verification
56
+ - The exact commands or steps you ran.
57
+ - Screenshots or short clips for UI changes (required if pixels moved).
58
+ - Edge cases you exercised by hand.
59
+
60
+ ## Risk and rollback
61
+ - What breaks if this is reverted, and how to revert cleanly.
62
+ ```
63
+
64
+ Skip the `Risk and rollback` section only for clearly trivial PRs (typos, docs).
65
+
66
+ ## Verification evidence
67
+
68
+ - Tests passing in CI is necessary, not sufficient. Reviewers also need to know the change behaves correctly end to end.
69
+ - For UI work, include screenshots of the golden path and one edge case. Tag dark and light mode if the project supports both.
70
+ - For migrations, include a dry-run plan and reversal steps.
71
+ - For performance changes, include a before/after measurement, not adjectives.
72
+
73
+ ## Replying to review comments
74
+
75
+ - Reply on every comment, even with just "fixed in <commit-sha>" — silent fixes leave the reviewer guessing.
76
+ - Push fixes as new commits while review is active; do not amend during review unless the reviewer agrees.
77
+ - If you disagree with feedback, say so with one sentence of rationale and let the reviewer decide. Don't escalate over comments.
78
+ - Re-request review explicitly after pushing changes.
79
+
80
+ ## Merge checklist
81
+
82
+ - All required checks green.
83
+ - All review comments resolved.
84
+ - PR title/body still accurate (update if scope changed mid-review).
85
+ - Linked issue moves to `in_review` or `done` per project convention.
86
+ - Delete the branch after merge unless it is a long-lived integration branch.
87
+
88
+ ## Anti-patterns
89
+
90
+ - PR description that says "see commits". Reviewers should not need to read the log.
91
+ - Mixing refactor and behavior change in the same PR with no separation in the body.
92
+ - "Address feedback" commits that bundle unrelated edits. One commit per round of feedback is fine; one commit for everything in flight is not.
93
+ - Force-pushing during active review without telling the reviewer.