@mmerterden/multi-agent-pipeline 20.35.0 → 20.37.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 (207) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +6 -5
  3. package/README.tr.md +6 -5
  4. package/docs/architecture.md +3 -3
  5. package/docs/ecosystem.md +5 -5
  6. package/docs/facts.json +4 -4
  7. package/install/catalog-history.json +1 -1
  8. package/manifest.json +210 -136
  9. package/package.json +5 -1
  10. package/pipeline/commands/multi-agent/SKILL.md +33 -154
  11. package/pipeline/commands/multi-agent/analysis/SKILL.md +14 -68
  12. package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +5 -8
  13. package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +38 -109
  14. package/pipeline/commands/multi-agent/channels/SKILL.md +38 -167
  15. package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +37 -144
  16. package/pipeline/commands/multi-agent/design-check/SKILL.md +27 -131
  17. package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +22 -48
  18. package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +37 -180
  19. package/pipeline/commands/multi-agent/jira/SKILL.md +16 -46
  20. package/pipeline/commands/multi-agent/office-pair/SKILL.md +66 -0
  21. package/pipeline/commands/multi-agent/office-status/SKILL.md +1 -1
  22. package/pipeline/commands/multi-agent/refactor/SKILL.md +23 -184
  23. package/pipeline/commands/multi-agent/resume/SKILL.md +30 -136
  24. package/pipeline/commands/multi-agent/review/SKILL.md +24 -199
  25. package/pipeline/commands/multi-agent/setup/SKILL.md +25 -181
  26. package/pipeline/commands/multi-agent/stack/SKILL.md +9 -53
  27. package/pipeline/commands/multi-agent/status/SKILL.md +13 -2
  28. package/pipeline/commands/multi-agent/store-ready/SKILL.md +27 -226
  29. package/pipeline/commands/multi-agent/sync/SKILL.md +38 -167
  30. package/pipeline/commands/multi-agent/test-gen/SKILL.md +2 -4
  31. package/pipeline/commands/multi-agent/update/SKILL.md +18 -60
  32. package/pipeline/contract/CHANGELOG.md +9 -0
  33. package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
  34. package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
  35. package/pipeline/contract/fixtures/error-unsigned.json +1 -1
  36. package/pipeline/contract/fixtures/runs-awaiting-question.json +1 -1
  37. package/pipeline/contract/fixtures/runs-empty.json +1 -1
  38. package/pipeline/contract/fixtures/runs-failed.json +1 -1
  39. package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +1 -1
  40. package/pipeline/contract/fixtures/runs-pr-opened.json +1 -1
  41. package/pipeline/contract/fixtures/runs-running.json +1 -1
  42. package/pipeline/contract/manifest.json +5 -5
  43. package/pipeline/contract/types/index.d.ts +3 -2
  44. package/pipeline/lib/qr-code.mjs +26 -0
  45. package/pipeline/multi-agent-refs/autopilot-on/details.md +148 -0
  46. package/pipeline/multi-agent-refs/channels/generator.md +14 -0
  47. package/pipeline/multi-agent-refs/channels/preview.md +13 -0
  48. package/pipeline/multi-agent-refs/channels/reference.md +46 -0
  49. package/pipeline/multi-agent-refs/complaint-analysis/phases.md +159 -0
  50. package/pipeline/multi-agent-refs/cross-cli-contract.md +4 -4
  51. package/pipeline/multi-agent-refs/design-check/export.md +1 -0
  52. package/pipeline/multi-agent-refs/design-check/init-inventory.md +1 -1
  53. package/pipeline/multi-agent-refs/design-check/scope-and-ledger.md +64 -0
  54. package/pipeline/multi-agent-refs/features/analysis-command-notes.md +53 -0
  55. package/pipeline/multi-agent-refs/garbage-collect/phases.md +60 -0
  56. package/pipeline/multi-agent-refs/help/en.md +1 -0
  57. package/pipeline/multi-agent-refs/help/tr.md +1 -0
  58. package/pipeline/multi-agent-refs/ios-coding-standard/plan.md +71 -0
  59. package/pipeline/multi-agent-refs/ios-coding-standard/resolve-and-scan.md +135 -0
  60. package/pipeline/multi-agent-refs/jira/picker-detail.md +71 -0
  61. package/pipeline/multi-agent-refs/orchestrator/copilot-pipeline.md +88 -0
  62. package/pipeline/multi-agent-refs/orchestrator/dispatcher.md +96 -1
  63. package/pipeline/multi-agent-refs/refactor/sweep.md +190 -0
  64. package/pipeline/multi-agent-refs/resume/details.md +115 -2
  65. package/pipeline/multi-agent-refs/review/inputs.md +33 -1
  66. package/pipeline/multi-agent-refs/review/module-guides.md +9 -1
  67. package/pipeline/multi-agent-refs/review/panel.md +75 -0
  68. package/pipeline/multi-agent-refs/review/valven.md +5 -1
  69. package/pipeline/multi-agent-refs/setup/hooks-and-plugins.md +4 -0
  70. package/pipeline/multi-agent-refs/setup/token-save-flow.md +13 -0
  71. package/pipeline/multi-agent-refs/stack/background.md +72 -0
  72. package/pipeline/multi-agent-refs/store-ready/gates.md +139 -0
  73. package/pipeline/multi-agent-refs/store-ready/report.md +40 -2
  74. package/pipeline/multi-agent-refs/sync/office.md +10 -0
  75. package/pipeline/multi-agent-refs/sync/overview.md +61 -0
  76. package/pipeline/multi-agent-refs/sync/repo.md +91 -0
  77. package/pipeline/multi-agent-refs/update/details.md +83 -0
  78. package/pipeline/schemas/runs-index.schema.json +2 -1
  79. package/pipeline/scripts/contract-server.mjs +1 -1
  80. package/pipeline/scripts/office-pair.mjs +40 -9
  81. package/pipeline/scripts/runs-index.mjs +34 -7
  82. package/pipeline/scripts/status-overview.mjs +401 -0
  83. package/pipeline/skills/.skill-manifest.json +69 -65
  84. package/pipeline/skills/.skills-index.json +15 -4
  85. package/pipeline/skills/shared/README.md +4 -3
  86. package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +8 -71
  87. package/pipeline/skills/shared/core/apple-archive-compliance/references/examples.md +67 -0
  88. package/pipeline/skills/shared/core/apple-archive-compliance/references/version-history.md +8 -0
  89. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +11 -73
  90. package/pipeline/skills/shared/core/google-play-compliance/references/examples.md +69 -0
  91. package/pipeline/skills/shared/core/google-play-compliance/references/notes.md +7 -0
  92. package/pipeline/skills/shared/core/google-play-compliance/references/version-history.md +5 -0
  93. package/pipeline/skills/shared/core/multi-agent/SKILL.md +39 -262
  94. package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +35 -73
  95. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +37 -337
  96. package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +27 -122
  97. package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +8 -340
  98. package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +37 -180
  99. package/pipeline/skills/shared/core/multi-agent-office-pair/SKILL.md +19 -0
  100. package/pipeline/skills/shared/core/multi-agent-office-status/SKILL.md +1 -1
  101. package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +23 -184
  102. package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +14 -82
  103. package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +25 -277
  104. package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +13 -2
  105. package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +75 -219
  106. package/pipeline/skills/shared/external/alarmkit/SKILL.md +11 -162
  107. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-code.md +257 -0
  108. package/pipeline/skills/shared/external/android-architecture/SKILL.md +7 -58
  109. package/pipeline/skills/shared/external/android-architecture/references/code-examples.md +68 -0
  110. package/pipeline/skills/shared/external/app-intents/SKILL.md +3 -45
  111. package/pipeline/skills/shared/external/app-intents/references/code-examples.md +54 -0
  112. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +5 -81
  113. package/pipeline/skills/shared/external/app-store-optimization/references/engagement-and-localization.md +96 -0
  114. package/pipeline/skills/shared/external/app-store-review/SKILL.md +6 -112
  115. package/pipeline/skills/shared/external/app-store-review/references/monetization-and-submission.md +138 -0
  116. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +10 -117
  117. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models-code.md +186 -0
  118. package/pipeline/skills/shared/external/authentication/SKILL.md +3 -50
  119. package/pipeline/skills/shared/external/authentication/references/code-examples.md +59 -0
  120. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +3 -84
  121. package/pipeline/skills/shared/external/callkit-voip/references/code-examples.md +93 -0
  122. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +7 -263
  123. package/pipeline/skills/shared/external/ci-cd-pipelines/references/pipeline-examples.md +281 -0
  124. package/pipeline/skills/shared/external/clean-code/SKILL.md +8 -41
  125. package/pipeline/skills/shared/external/clean-code/references/code-examples.md +56 -0
  126. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +8 -146
  127. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-code.md +214 -0
  128. package/pipeline/skills/shared/external/compose-components/SKILL.md +6 -80
  129. package/pipeline/skills/shared/external/compose-components/references/code-examples.md +89 -0
  130. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +5 -64
  131. package/pipeline/skills/shared/external/compose-navigation/references/code-examples.md +70 -0
  132. package/pipeline/skills/shared/external/core-data/SKILL.md +9 -157
  133. package/pipeline/skills/shared/external/core-data/references/core-data-code.md +221 -0
  134. package/pipeline/skills/shared/external/core-nfc/SKILL.md +3 -89
  135. package/pipeline/skills/shared/external/core-nfc/references/code-examples.md +98 -0
  136. package/pipeline/skills/shared/external/coreml/SKILL.md +17 -133
  137. package/pipeline/skills/shared/external/coreml/references/coreml-code.md +208 -0
  138. package/pipeline/skills/shared/external/css-modern/SKILL.md +8 -131
  139. package/pipeline/skills/shared/external/css-modern/references/code-examples.md +142 -0
  140. package/pipeline/skills/shared/external/database-patterns/SKILL.md +6 -103
  141. package/pipeline/skills/shared/external/database-patterns/references/orm-examples.md +112 -0
  142. package/pipeline/skills/shared/external/html-semantic/SKILL.md +7 -48
  143. package/pipeline/skills/shared/external/html-semantic/references/code-examples.md +54 -0
  144. package/pipeline/skills/shared/external/humanizer/SKILL.md +6 -19
  145. package/pipeline/skills/shared/external/humanizer/references/voice.md +24 -0
  146. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +13 -170
  147. package/pipeline/skills/shared/external/ios-accessibility/references/assistive-tech-review.md +224 -0
  148. package/pipeline/skills/shared/external/ios-localization/SKILL.md +2 -24
  149. package/pipeline/skills/shared/external/ios-localization/references/code-examples.md +30 -0
  150. package/pipeline/skills/shared/external/ios-networking/SKILL.md +3 -58
  151. package/pipeline/skills/shared/external/ios-networking/references/code-examples.md +67 -0
  152. package/pipeline/skills/shared/external/ios-security/SKILL.md +4 -64
  153. package/pipeline/skills/shared/external/ios-security/references/code-examples.md +74 -0
  154. package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -90
  155. package/pipeline/skills/shared/external/live-activities/references/code-examples.md +108 -0
  156. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +9 -23
  157. package/pipeline/skills/shared/external/localization-reuse-map/references/project-settings.md +22 -0
  158. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +5 -95
  159. package/pipeline/skills/shared/external/mapkit-location/references/code-examples.md +117 -0
  160. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +7 -106
  161. package/pipeline/skills/shared/external/nextjs-app-router/references/app-router-examples.md +124 -0
  162. package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -31
  163. package/pipeline/skills/shared/external/permissionkit/references/code-examples.md +37 -0
  164. package/pipeline/skills/shared/external/play-store-review/SKILL.md +6 -74
  165. package/pipeline/skills/shared/external/play-store-review/references/signing-and-policies.md +83 -0
  166. package/pipeline/skills/shared/external/push-notifications/SKILL.md +8 -125
  167. package/pipeline/skills/shared/external/push-notifications/references/notification-code.md +176 -0
  168. package/pipeline/skills/shared/external/python-patterns/SKILL.md +7 -158
  169. package/pipeline/skills/shared/external/python-patterns/references/python-examples.md +176 -0
  170. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +7 -157
  171. package/pipeline/skills/shared/external/rest-api-design/references/api-examples.md +175 -0
  172. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +11 -230
  173. package/pipeline/skills/shared/external/swift-architecture/references/pattern-examples.md +295 -0
  174. package/pipeline/skills/shared/external/swift-codable/SKILL.md +17 -149
  175. package/pipeline/skills/shared/external/swift-codable/references/codable-recipes.md +207 -0
  176. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +12 -99
  177. package/pipeline/skills/shared/external/swift-concurrency/references/code-examples.md +100 -0
  178. package/pipeline/skills/shared/external/swift-concurrency/references/swift-6-2-additions.md +18 -0
  179. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +9 -78
  180. package/pipeline/skills/shared/external/swift-formatstyle/references/formatstyle-examples.md +113 -0
  181. package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -56
  182. package/pipeline/skills/shared/external/swift-language/references/code-examples.md +65 -0
  183. package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +1 -0
  184. package/pipeline/skills/shared/external/swiftdata/SKILL.md +6 -122
  185. package/pipeline/skills/shared/external/swiftdata/references/code-examples.md +140 -0
  186. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +12 -139
  187. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/interop-code.md +198 -0
  188. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +9 -81
  189. package/pipeline/skills/shared/external/tailwind-css/references/code-examples.md +91 -0
  190. package/pipeline/skills/shared/external/testing-backend/SKILL.md +7 -207
  191. package/pipeline/skills/shared/external/testing-backend/references/testing-examples.md +225 -0
  192. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +8 -89
  193. package/pipeline/skills/shared/external/typescript-patterns/references/code-examples.md +100 -0
  194. package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -20
  195. package/pipeline/skills/shared/external/vision-framework/references/code-examples.md +26 -0
  196. package/pipeline/skills/shared/external/vue-composition/SKILL.md +7 -169
  197. package/pipeline/skills/shared/external/vue-composition/references/vue-examples.md +187 -0
  198. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +7 -174
  199. package/pipeline/skills/shared/external/web-accessibility/references/a11y-examples.md +192 -0
  200. package/pipeline/skills/shared/external/web-performance/SKILL.md +8 -66
  201. package/pipeline/skills/shared/external/web-performance/references/code-examples.md +77 -0
  202. package/pipeline/skills/shared/external/web-testing/SKILL.md +11 -186
  203. package/pipeline/skills/shared/external/web-testing/references/testing-examples.md +213 -0
  204. package/pipeline/skills/skills-index.md +2 -1
  205. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/format-and-output.md +0 -0
  206. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/publish-and-snapshot.md +0 -0
  207. /package/pipeline/skills/shared/external/localization-reuse-map/{reference → references}/sources-and-recipes.md +0 -0
@@ -0,0 +1,142 @@
1
+ # Modern CSS Code Examples
2
+
3
+ Full code samples for the SKILL.md sections that link here. The rules and the decision guidance stay in SKILL.md; each heading below matches the SKILL.md section the code belongs to.
4
+
5
+ ## CSS Custom Properties (Variables)
6
+
7
+ ```css
8
+ :root {
9
+ /* Color system */
10
+ --color-brand: oklch(55% 0.25 265);
11
+ --color-brand-light: oklch(70% 0.2 265);
12
+ --color-brand-dark: oklch(40% 0.25 265);
13
+
14
+ --color-surface: #ffffff;
15
+ --color-surface-elevated: #f9fafb;
16
+ --color-text: #111827;
17
+ --color-text-muted: #6b7280;
18
+ --color-border: #e5e7eb;
19
+
20
+ /* Spacing scale */
21
+ --space-xs: 0.25rem;
22
+ --space-sm: 0.5rem;
23
+ --space-md: 1rem;
24
+ --space-lg: 1.5rem;
25
+ --space-xl: 2rem;
26
+ --space-2xl: 3rem;
27
+
28
+ /* Typography */
29
+ --font-sans: 'Inter', system-ui, sans-serif;
30
+ --font-mono: 'JetBrains Mono', monospace;
31
+
32
+ /* Transitions */
33
+ --transition-fast: 150ms ease;
34
+ --transition-normal: 250ms ease;
35
+ --transition-slow: 400ms ease;
36
+
37
+ /* Shadows */
38
+ --shadow-sm: 0 1px 2px rgb(0 0 0 / 0.05);
39
+ --shadow-md: 0 4px 6px rgb(0 0 0 / 0.1);
40
+ --shadow-lg: 0 10px 15px rgb(0 0 0 / 0.1);
41
+ }
42
+
43
+ /* Dark theme override */
44
+ @media (prefers-color-scheme: dark) {
45
+ :root {
46
+ --color-surface: #111827;
47
+ --color-surface-elevated: #1f2937;
48
+ --color-text: #f9fafb;
49
+ --color-text-muted: #9ca3af;
50
+ --color-border: #374151;
51
+ }
52
+ }
53
+
54
+ /* Component using tokens */
55
+ .card {
56
+ background: var(--color-surface-elevated);
57
+ color: var(--color-text);
58
+ border: 1px solid var(--color-border);
59
+ border-radius: 0.75rem;
60
+ padding: var(--space-lg);
61
+ box-shadow: var(--shadow-sm);
62
+ transition: box-shadow var(--transition-normal);
63
+
64
+ &:hover {
65
+ box-shadow: var(--shadow-md);
66
+ }
67
+ }
68
+ ```
69
+
70
+ ## Animations and Transitions
71
+
72
+ ```css
73
+ /* View Transitions API */
74
+ @view-transition {
75
+ navigation: auto;
76
+ }
77
+
78
+ .hero-image {
79
+ view-transition-name: hero;
80
+ }
81
+
82
+ ::view-transition-old(hero) {
83
+ animation: fade-out 300ms ease;
84
+ }
85
+
86
+ ::view-transition-new(hero) {
87
+ animation: fade-in 300ms ease;
88
+ }
89
+
90
+ /* Scroll-driven animations */
91
+ @keyframes slide-in {
92
+ from { opacity: 0; transform: translateY(50px); }
93
+ to { opacity: 1; transform: translateY(0); }
94
+ }
95
+
96
+ .scroll-reveal {
97
+ animation: slide-in linear both;
98
+ animation-timeline: view();
99
+ animation-range: entry 0% entry 100%;
100
+ }
101
+
102
+ /* Transition with discrete properties */
103
+ .dialog {
104
+ transition: opacity 300ms ease, display 300ms ease allow-discrete;
105
+ opacity: 0;
106
+ display: none;
107
+
108
+ &[open] {
109
+ opacity: 1;
110
+ display: block;
111
+
112
+ @starting-style {
113
+ opacity: 0;
114
+ }
115
+ }
116
+ }
117
+
118
+ /* Keyframe animation */
119
+ @keyframes shimmer {
120
+ 0% { background-position: -200% 0; }
121
+ 100% { background-position: 200% 0; }
122
+ }
123
+
124
+ .skeleton {
125
+ background: linear-gradient(
126
+ 90deg,
127
+ #f0f0f0 25%,
128
+ #e0e0e0 50%,
129
+ #f0f0f0 75%
130
+ );
131
+ background-size: 200% 100%;
132
+ animation: shimmer 1.5s infinite ease-in-out;
133
+ }
134
+
135
+ /* Respect motion preferences */
136
+ @media (prefers-reduced-motion: reduce) {
137
+ .scroll-reveal {
138
+ animation: none;
139
+ opacity: 1;
140
+ }
141
+ }
142
+ ```
@@ -197,112 +197,11 @@ ALTER TABLE "user" DROP COLUMN IF EXISTS preferences;
197
197
 
198
198
  ## Prisma ORM (TypeScript)
199
199
 
200
- ```typescript
201
- // prisma/schema.prisma
202
- generator client {
203
- provider = "prisma-client-js"
204
- }
205
-
206
- datasource db {
207
- provider = "postgresql"
208
- url = env("DATABASE_URL")
209
- }
210
-
211
- model User {
212
- id String @id @default(uuid())
213
- email String @unique
214
- name String
215
- role Role @default(USER)
216
- posts Post[]
217
- createdAt DateTime @default(now()) @map("created_at")
218
- updatedAt DateTime @updatedAt @map("updated_at")
219
-
220
- @@map("user")
221
- }
222
-
223
- model Post {
224
- id String @id @default(uuid())
225
- title String
226
- slug String @unique
227
- content String @default("")
228
- status PostStatus @default(DRAFT)
229
- publishedAt DateTime? @map("published_at")
230
- author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
231
- authorId String @map("author_id")
232
- tags Tag[]
233
- createdAt DateTime @default(now()) @map("created_at")
234
- updatedAt DateTime @updatedAt @map("updated_at")
235
-
236
- @@index([authorId, status])
237
- @@map("post")
238
- }
239
-
240
- enum Role { ADMIN USER VIEWER }
241
- enum PostStatus { DRAFT PUBLISHED ARCHIVED }
242
- ```
243
-
244
- ```typescript
245
- // queries
246
- const posts = await prisma.post.findMany({
247
- where: { status: 'PUBLISHED', author: { role: 'ADMIN' } },
248
- include: { author: { select: { name: true, email: true } }, tags: true },
249
- orderBy: { publishedAt: 'desc' },
250
- take: 20,
251
- skip: 0,
252
- });
253
-
254
- // Transaction
255
- const [post, notification] = await prisma.$transaction([
256
- prisma.post.update({ where: { id }, data: { status: 'PUBLISHED', publishedAt: new Date() } }),
257
- prisma.notification.create({ data: { userId: authorId, type: 'POST_PUBLISHED' } }),
258
- ]);
259
- ```
200
+ Code for this section: [ORM examples](references/orm-examples.md).
260
201
 
261
202
  ## Drizzle ORM (TypeScript)
262
203
 
263
- ```typescript
264
- // schema.ts
265
- import { pgTable, uuid, text, timestamp, boolean, pgEnum } from 'drizzle-orm/pg-core';
266
-
267
- export const roleEnum = pgEnum('role', ['admin', 'user', 'viewer']);
268
-
269
- export const users = pgTable('user', {
270
- id: uuid('id').primaryKey().defaultRandom(),
271
- email: text('email').notNull().unique(),
272
- name: text('name').notNull(),
273
- role: roleEnum('role').notNull().default('user'),
274
- isActive: boolean('is_active').notNull().default(true),
275
- createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
276
- updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
277
- });
278
-
279
- export const posts = pgTable('post', {
280
- id: uuid('id').primaryKey().defaultRandom(),
281
- authorId: uuid('author_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
282
- title: text('title').notNull(),
283
- slug: text('slug').notNull().unique(),
284
- content: text('content').notNull().default(''),
285
- status: text('status', { enum: ['draft', 'published', 'archived'] }).notNull().default('draft'),
286
- createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
287
- });
288
-
289
- // queries
290
- import { eq, and, desc } from 'drizzle-orm';
291
-
292
- const publishedPosts = await db
293
- .select()
294
- .from(posts)
295
- .where(and(eq(posts.status, 'published'), eq(posts.authorId, userId)))
296
- .orderBy(desc(posts.createdAt))
297
- .limit(20);
298
-
299
- // Join query
300
- const postsWithAuthors = await db
301
- .select({ post: posts, authorName: users.name })
302
- .from(posts)
303
- .innerJoin(users, eq(posts.authorId, users.id))
304
- .where(eq(posts.status, 'published'));
305
- ```
204
+ Code for this section: [ORM examples](references/orm-examples.md).
306
205
 
307
206
  ## Do's
308
207
 
@@ -336,3 +235,7 @@ const postsWithAuthors = await db
336
235
  | Data inconsistency | Missing constraints or transaction | Add foreign keys, use transactions for multi-step ops |
337
236
  | Migration fails | Incompatible schema change | Use additive migrations: add column, backfill, then drop old |
338
237
  | ORM generates bad SQL | Complex query expressed in ORM | Use raw SQL for complex analytical queries |
238
+
239
+ ## References
240
+
241
+ - [ORM examples](references/orm-examples.md): open when defining schemas or writing queries with Prisma or Drizzle.
@@ -0,0 +1,112 @@
1
+ # ORM examples
2
+
3
+ Schema and query code for Prisma and Drizzle. SKILL.md keeps schema design, indexing, query optimization and migration rules.
4
+
5
+ ## Prisma ORM (TypeScript)
6
+
7
+ ```typescript
8
+ // prisma/schema.prisma
9
+ generator client {
10
+ provider = "prisma-client-js"
11
+ }
12
+
13
+ datasource db {
14
+ provider = "postgresql"
15
+ url = env("DATABASE_URL")
16
+ }
17
+
18
+ model User {
19
+ id String @id @default(uuid())
20
+ email String @unique
21
+ name String
22
+ role Role @default(USER)
23
+ posts Post[]
24
+ createdAt DateTime @default(now()) @map("created_at")
25
+ updatedAt DateTime @updatedAt @map("updated_at")
26
+
27
+ @@map("user")
28
+ }
29
+
30
+ model Post {
31
+ id String @id @default(uuid())
32
+ title String
33
+ slug String @unique
34
+ content String @default("")
35
+ status PostStatus @default(DRAFT)
36
+ publishedAt DateTime? @map("published_at")
37
+ author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
38
+ authorId String @map("author_id")
39
+ tags Tag[]
40
+ createdAt DateTime @default(now()) @map("created_at")
41
+ updatedAt DateTime @updatedAt @map("updated_at")
42
+
43
+ @@index([authorId, status])
44
+ @@map("post")
45
+ }
46
+
47
+ enum Role { ADMIN USER VIEWER }
48
+ enum PostStatus { DRAFT PUBLISHED ARCHIVED }
49
+ ```
50
+
51
+ ```typescript
52
+ // queries
53
+ const posts = await prisma.post.findMany({
54
+ where: { status: 'PUBLISHED', author: { role: 'ADMIN' } },
55
+ include: { author: { select: { name: true, email: true } }, tags: true },
56
+ orderBy: { publishedAt: 'desc' },
57
+ take: 20,
58
+ skip: 0,
59
+ });
60
+
61
+ // Transaction
62
+ const [post, notification] = await prisma.$transaction([
63
+ prisma.post.update({ where: { id }, data: { status: 'PUBLISHED', publishedAt: new Date() } }),
64
+ prisma.notification.create({ data: { userId: authorId, type: 'POST_PUBLISHED' } }),
65
+ ]);
66
+ ```
67
+
68
+ ## Drizzle ORM (TypeScript)
69
+
70
+ ```typescript
71
+ // schema.ts
72
+ import { pgTable, uuid, text, timestamp, boolean, pgEnum } from 'drizzle-orm/pg-core';
73
+
74
+ export const roleEnum = pgEnum('role', ['admin', 'user', 'viewer']);
75
+
76
+ export const users = pgTable('user', {
77
+ id: uuid('id').primaryKey().defaultRandom(),
78
+ email: text('email').notNull().unique(),
79
+ name: text('name').notNull(),
80
+ role: roleEnum('role').notNull().default('user'),
81
+ isActive: boolean('is_active').notNull().default(true),
82
+ createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
83
+ updatedAt: timestamp('updated_at', { withTimezone: true }).notNull().defaultNow(),
84
+ });
85
+
86
+ export const posts = pgTable('post', {
87
+ id: uuid('id').primaryKey().defaultRandom(),
88
+ authorId: uuid('author_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
89
+ title: text('title').notNull(),
90
+ slug: text('slug').notNull().unique(),
91
+ content: text('content').notNull().default(''),
92
+ status: text('status', { enum: ['draft', 'published', 'archived'] }).notNull().default('draft'),
93
+ createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
94
+ });
95
+
96
+ // queries
97
+ import { eq, and, desc } from 'drizzle-orm';
98
+
99
+ const publishedPosts = await db
100
+ .select()
101
+ .from(posts)
102
+ .where(and(eq(posts.status, 'published'), eq(posts.authorId, userId)))
103
+ .orderBy(desc(posts.createdAt))
104
+ .limit(20);
105
+
106
+ // Join query
107
+ const postsWithAuthors = await db
108
+ .select({ post: posts, authorName: users.name })
109
+ .from(posts)
110
+ .innerJoin(users, eq(posts.authorId, users.id))
111
+ .where(eq(posts.status, 'published'));
112
+ ```
@@ -205,54 +205,9 @@ improves accessibility, SEO, and maintainability. Style with CSS, not with HTML
205
205
 
206
206
  ## SEO Best Practices
207
207
 
208
- ```html
209
- <head>
210
- <!-- Essential meta -->
211
- <title>Primary Keyword - Brand Name</title>
212
- <meta name="description" content="Compelling description with primary keywords (150-160 chars)" />
213
- <meta name="robots" content="index, follow" />
214
- <link rel="canonical" href="https://example.com/current-page" />
215
-
216
- <!-- Open Graph (Facebook, LinkedIn) -->
217
- <meta property="og:type" content="article" />
218
- <meta property="og:title" content="Article Title" />
219
- <meta property="og:description" content="Compelling description for social sharing" />
220
- <meta property="og:image" content="https://example.com/og-image.jpg" />
221
- <meta property="og:image:width" content="1200" />
222
- <meta property="og:image:height" content="630" />
223
- <meta property="og:url" content="https://example.com/article" />
224
- <meta property="og:site_name" content="Site Name" />
225
-
226
- <!-- Twitter Cards -->
227
- <meta name="twitter:card" content="summary_large_image" />
228
- <meta name="twitter:site" content="@sitehandle" />
229
- <meta name="twitter:title" content="Article Title" />
230
- <meta name="twitter:description" content="Description for Twitter" />
231
- <meta name="twitter:image" content="https://example.com/twitter-card.jpg" />
232
-
233
- <!-- Structured Data (JSON-LD) -->
234
- <script type="application/ld+json">
235
- {
236
- "@context": "https://schema.org",
237
- "@type": "Article",
238
- "headline": "Article Title",
239
- "author": {
240
- "@type": "Person",
241
- "name": "Jane Doe",
242
- "url": "https://example.com/authors/jane"
243
- },
244
- "datePublished": "2025-01-15",
245
- "dateModified": "2025-01-20",
246
- "image": "https://example.com/article-image.jpg",
247
- "publisher": {
248
- "@type": "Organization",
249
- "name": "Site Name",
250
- "logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" }
251
- }
252
- }
253
- </script>
254
- </head>
255
- ```
208
+ Every page head carries a title, a meta description, robots and a canonical link, then Open Graph tags (absolute `og:image` URL, 1200x630), Twitter Card tags and JSON-LD structured data.
209
+
210
+ Code: [SEO Best Practices](references/code-examples.md#seo-best-practices).
256
211
 
257
212
  ### Heading Hierarchy
258
213
 
@@ -302,3 +257,7 @@ improves accessibility, SEO, and maintainability. Style with CSS, not with HTML
302
257
  | Form not submitting | Missing `name` attribute on inputs | Add `name` to every form input |
303
258
  | Accessibility audit fails | Divs used as buttons, missing labels | Replace with semantic elements, add labels |
304
259
  | Heading outline broken | Skipped heading levels | Fix hierarchy: h1 > h2 > h3 sequentially |
260
+
261
+ ## References
262
+
263
+ - [Code examples](references/code-examples.md): open for the full code behind SEO Best Practices.
@@ -0,0 +1,54 @@
1
+ # Semantic HTML Code Examples
2
+
3
+ Full code samples for the SKILL.md sections that link here. The rules and the decision guidance stay in SKILL.md; each heading below matches the SKILL.md section the code belongs to.
4
+
5
+ ## SEO Best Practices
6
+
7
+ ```html
8
+ <head>
9
+ <!-- Essential meta -->
10
+ <title>Primary Keyword - Brand Name</title>
11
+ <meta name="description" content="Compelling description with primary keywords (150-160 chars)" />
12
+ <meta name="robots" content="index, follow" />
13
+ <link rel="canonical" href="https://example.com/current-page" />
14
+
15
+ <!-- Open Graph (Facebook, LinkedIn) -->
16
+ <meta property="og:type" content="article" />
17
+ <meta property="og:title" content="Article Title" />
18
+ <meta property="og:description" content="Compelling description for social sharing" />
19
+ <meta property="og:image" content="https://example.com/og-image.jpg" />
20
+ <meta property="og:image:width" content="1200" />
21
+ <meta property="og:image:height" content="630" />
22
+ <meta property="og:url" content="https://example.com/article" />
23
+ <meta property="og:site_name" content="Site Name" />
24
+
25
+ <!-- Twitter Cards -->
26
+ <meta name="twitter:card" content="summary_large_image" />
27
+ <meta name="twitter:site" content="@sitehandle" />
28
+ <meta name="twitter:title" content="Article Title" />
29
+ <meta name="twitter:description" content="Description for Twitter" />
30
+ <meta name="twitter:image" content="https://example.com/twitter-card.jpg" />
31
+
32
+ <!-- Structured Data (JSON-LD) -->
33
+ <script type="application/ld+json">
34
+ {
35
+ "@context": "https://schema.org",
36
+ "@type": "Article",
37
+ "headline": "Article Title",
38
+ "author": {
39
+ "@type": "Person",
40
+ "name": "Jane Doe",
41
+ "url": "https://example.com/authors/jane"
42
+ },
43
+ "datePublished": "2025-01-15",
44
+ "dateModified": "2025-01-20",
45
+ "image": "https://example.com/article-image.jpg",
46
+ "publisher": {
47
+ "@type": "Organization",
48
+ "name": "Site Name",
49
+ "logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" }
50
+ }
51
+ }
52
+ </script>
53
+ </head>
54
+ ```
@@ -110,26 +110,9 @@ vibrant, leverage, streamline, seamless, robust, comprehensive, innovative
110
110
  | Over-hyphenation | "cross-functional, data-driven, client-facing" everywhere | Humans are inconsistent with hyphens - drop some |
111
111
  | Authority tropes | "At its core", "The real question is" | State the point directly |
112
112
 
113
- ## Voice Guidelines
113
+ ## Voice
114
114
 
115
- Removing AI patterns is half the job. The result should have a voice.
116
-
117
- - **Have opinions.** "I'm not sure this is the right approach" beats neutral reporting.
118
- - **Vary rhythm.** Short sentences. Then longer ones that take their time. Mix it up.
119
- - **Be specific.** Not "this is concerning" but "this breaks on iOS 17 when the user rotates."
120
- - **Use "I" when it fits.** First person is not unprofessional.
121
- - **Leave room for imperfection.** Perfect structure feels algorithmic.
122
-
123
- ## Voice Calibration
124
-
125
- If the user provides a writing sample, match their style:
126
- - Sentence length patterns
127
- - Word choice level (casual vs. academic)
128
- - Paragraph openings
129
- - Punctuation habits
130
- - Transition style
131
-
132
- When no sample is provided, default to clear, direct, slightly opinionated.
115
+ Removing AI patterns is half the job; the result should have a voice. Match the user's writing sample when one is given; otherwise default to clear, direct, slightly opinionated. The voice guidelines and the calibration checklist are in [references/voice.md](references/voice.md).
133
116
 
134
117
  ## Output language
135
118
 
@@ -177,3 +160,7 @@ that exist and ask which was meant.
177
160
 
178
161
  1. Rewrite the text
179
162
  2. Brief list of what you changed and why
163
+
164
+ ## References
165
+
166
+ - [Voice](references/voice.md): open when shaping the voice of a rewrite or matching a user-supplied writing sample.
@@ -0,0 +1,24 @@
1
+ # Voice
2
+
3
+ What the rewrite should sound like once the AI patterns are gone, and how to match a writing sample the user supplies.
4
+
5
+ ## Voice Guidelines
6
+
7
+ Removing AI patterns is half the job. The result should have a voice.
8
+
9
+ - **Have opinions.** "I'm not sure this is the right approach" beats neutral reporting.
10
+ - **Vary rhythm.** Short sentences. Then longer ones that take their time. Mix it up.
11
+ - **Be specific.** Not "this is concerning" but "this breaks on iOS 17 when the user rotates."
12
+ - **Use "I" when it fits.** First person is not unprofessional.
13
+ - **Leave room for imperfection.** Perfect structure feels algorithmic.
14
+
15
+ ## Voice Calibration
16
+
17
+ If the user provides a writing sample, match their style:
18
+ - Sentence length patterns
19
+ - Word choice level (casual vs. academic)
20
+ - Paragraph openings
21
+ - Punctuation habits
22
+ - Transition style
23
+
24
+ When no sample is provided, default to clear, direct, slightly opinionated.