@mars-stack/core 0.4.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.
- package/README.md +32 -0
- package/cursor/manifest.json +304 -0
- package/cursor/rules/mars-composition-patterns.mdc +186 -0
- package/cursor/rules/mars-data-access.mdc +26 -0
- package/cursor/rules/mars-project-structure.mdc +34 -0
- package/cursor/rules/mars-security.mdc +25 -0
- package/cursor/rules/mars-testing.mdc +24 -0
- package/cursor/rules/mars-ui-conventions.mdc +29 -0
- package/cursor/skills/mars-add-api-route/SKILL.md +120 -0
- package/cursor/skills/mars-add-audit-log/SKILL.md +373 -0
- package/cursor/skills/mars-add-blog/SKILL.md +447 -0
- package/cursor/skills/mars-add-command-palette/SKILL.md +438 -0
- package/cursor/skills/mars-add-component/SKILL.md +158 -0
- package/cursor/skills/mars-add-crud-routes/SKILL.md +221 -0
- package/cursor/skills/mars-add-e2e-test/SKILL.md +227 -0
- package/cursor/skills/mars-add-error-boundary/SKILL.md +472 -0
- package/cursor/skills/mars-add-feature/SKILL.md +174 -0
- package/cursor/skills/mars-add-middleware/SKILL.md +135 -0
- package/cursor/skills/mars-add-page/SKILL.md +153 -0
- package/cursor/skills/mars-add-prisma-model/SKILL.md +148 -0
- package/cursor/skills/mars-add-protected-resource/SKILL.md +192 -0
- package/cursor/skills/mars-add-role/SKILL.md +156 -0
- package/cursor/skills/mars-add-server-action/SKILL.md +167 -0
- package/cursor/skills/mars-add-webhook/SKILL.md +192 -0
- package/cursor/skills/mars-build-complete-feature/SKILL.md +228 -0
- package/cursor/skills/mars-build-dashboard/SKILL.md +211 -0
- package/cursor/skills/mars-build-data-table/SKILL.md +284 -0
- package/cursor/skills/mars-build-form/SKILL.md +229 -0
- package/cursor/skills/mars-build-landing-page/SKILL.md +248 -0
- package/cursor/skills/mars-capture-conversation-context/SKILL.md +119 -0
- package/cursor/skills/mars-configure-ai/SKILL.md +617 -0
- package/cursor/skills/mars-configure-analytics/SKILL.md +413 -0
- package/cursor/skills/mars-configure-dark-mode/SKILL.md +309 -0
- package/cursor/skills/mars-configure-email/SKILL.md +170 -0
- package/cursor/skills/mars-configure-email-verification/SKILL.md +333 -0
- package/cursor/skills/mars-configure-feature-flags/SKILL.md +361 -0
- package/cursor/skills/mars-configure-i18n/SKILL.md +518 -0
- package/cursor/skills/mars-configure-jobs/SKILL.md +500 -0
- package/cursor/skills/mars-configure-magic-links/SKILL.md +385 -0
- package/cursor/skills/mars-configure-multi-tenancy/SKILL.md +611 -0
- package/cursor/skills/mars-configure-notifications/SKILL.md +569 -0
- package/cursor/skills/mars-configure-oauth/SKILL.md +217 -0
- package/cursor/skills/mars-configure-onboarding/SKILL.md +483 -0
- package/cursor/skills/mars-configure-payments/SKILL.md +243 -0
- package/cursor/skills/mars-configure-realtime/SKILL.md +733 -0
- package/cursor/skills/mars-configure-search/SKILL.md +581 -0
- package/cursor/skills/mars-configure-storage/SKILL.md +273 -0
- package/cursor/skills/mars-configure-two-factor/SKILL.md +518 -0
- package/cursor/skills/mars-create-execution-plan/SKILL.md +204 -0
- package/cursor/skills/mars-create-seed/SKILL.md +191 -0
- package/cursor/skills/mars-deploy-to-vercel/SKILL.md +300 -0
- package/cursor/skills/mars-design-tokens/SKILL.md +138 -0
- package/cursor/skills/mars-setup-billing/SKILL.md +322 -0
- package/cursor/skills/mars-setup-project/SKILL.md +104 -0
- package/cursor/skills/mars-setup-teams/SKILL.md +688 -0
- package/cursor/skills/mars-test-api-route/SKILL.md +219 -0
- package/cursor/skills/mars-update-architecture-docs/SKILL.md +189 -0
- package/dist/api-error/index.d.ts +27 -0
- package/dist/api-error/index.d.ts.map +1 -0
- package/dist/api-error/index.js +2 -0
- package/dist/auth/credential-tag.d.ts +5 -0
- package/dist/auth/credential-tag.d.ts.map +1 -0
- package/dist/auth/credential-tag.js +2 -0
- package/dist/auth/crypto-utils.d.ts +43 -0
- package/dist/auth/crypto-utils.d.ts.map +1 -0
- package/dist/auth/crypto-utils.js +1 -0
- package/dist/auth/csrf.d.ts +32 -0
- package/dist/auth/csrf.d.ts.map +1 -0
- package/dist/auth/csrf.js +2 -0
- package/dist/auth/hooks/index.d.ts +4 -0
- package/dist/auth/hooks/index.d.ts.map +1 -0
- package/dist/auth/hooks/index.js +68 -0
- package/dist/auth/hooks/useCSRF.d.ts +7 -0
- package/dist/auth/hooks/useCSRF.d.ts.map +1 -0
- package/dist/auth/hooks/usePasswordStrength.d.ts +17 -0
- package/dist/auth/hooks/usePasswordStrength.d.ts.map +1 -0
- package/dist/auth/internal-api-key.d.ts +5 -0
- package/dist/auth/internal-api-key.d.ts.map +1 -0
- package/dist/auth/internal-api-key.js +30 -0
- package/dist/auth/link-utils.d.ts +13 -0
- package/dist/auth/link-utils.d.ts.map +1 -0
- package/dist/auth/link-utils.js +1 -0
- package/dist/auth/middleware.d.ts +56 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +3 -0
- package/dist/auth/password.d.ts +28 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/password.js +1 -0
- package/dist/auth/reset-token.d.ts +3 -0
- package/dist/auth/reset-token.d.ts.map +1 -0
- package/dist/auth/reset-token.js +9 -0
- package/dist/auth/responses.d.ts +15 -0
- package/dist/auth/responses.d.ts.map +1 -0
- package/dist/auth/responses.js +2 -0
- package/dist/auth/session.d.ts +79 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +1 -0
- package/dist/auth/types.d.ts +18 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +10 -0
- package/dist/auth/validation.d.ts +146 -0
- package/dist/auth/validation.d.ts.map +1 -0
- package/dist/auth/validation.js +116 -0
- package/dist/auth/validators.d.ts +4 -0
- package/dist/auth/validators.d.ts.map +1 -0
- package/dist/auth/validators.js +27 -0
- package/dist/auth/verification.d.ts +54 -0
- package/dist/auth/verification.d.ts.map +1 -0
- package/dist/auth/verification.js +39 -0
- package/dist/chunk-4LS3QDD5.js +162 -0
- package/dist/chunk-ABBUHT5Z.js +110 -0
- package/dist/chunk-CTYAVMOF.js +15 -0
- package/dist/chunk-GVLH2GQP.js +14 -0
- package/dist/chunk-HOSMMQMA.js +109 -0
- package/dist/chunk-MXQ66RUN.js +28 -0
- package/dist/chunk-PZE3JGXO.js +149 -0
- package/dist/chunk-QAH2Y5WK.js +93 -0
- package/dist/chunk-QWMN5UJC.js +76 -0
- package/dist/chunk-ROQV54MU.js +117 -0
- package/dist/chunk-U4NZQ366.js +46 -0
- package/dist/chunk-WBJOIENS.js +22 -0
- package/dist/chunk-WO6FHJHG.js +29 -0
- package/dist/chunk-Z5BEKPJI.js +96 -0
- package/dist/chunk-ZA46T6GX.js +24 -0
- package/dist/configure-mars.d.ts +104 -0
- package/dist/configure-mars.d.ts.map +1 -0
- package/dist/database/index.d.ts +8 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +1 -0
- package/dist/email/index.d.ts +25 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +2 -0
- package/dist/email/types.d.ts +18 -0
- package/dist/email/types.d.ts.map +1 -0
- package/dist/env/index.d.ts +36 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +163 -0
- package/dist/logger/index.d.ts +80 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +1 -0
- package/dist/payments/index.d.ts +53 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +72 -0
- package/dist/plugin/builtin/email-plugins.d.ts +10 -0
- package/dist/plugin/builtin/email-plugins.d.ts.map +1 -0
- package/dist/plugin/builtin/index.d.ts +4 -0
- package/dist/plugin/builtin/index.d.ts.map +1 -0
- package/dist/plugin/builtin/index.js +324 -0
- package/dist/plugin/builtin/payment-plugins.d.ts +4 -0
- package/dist/plugin/builtin/payment-plugins.d.ts.map +1 -0
- package/dist/plugin/builtin/storage-plugins.d.ts +5 -0
- package/dist/plugin/builtin/storage-plugins.d.ts.map +1 -0
- package/dist/plugin/index.d.ts +21 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +30 -0
- package/dist/rate-limit/index.d.ts +89 -0
- package/dist/rate-limit/index.d.ts.map +1 -0
- package/dist/rate-limit/index.js +166 -0
- package/dist/seo/faq.d.ts +37 -0
- package/dist/seo/faq.d.ts.map +1 -0
- package/dist/seo/index.d.ts +75 -0
- package/dist/seo/index.d.ts.map +1 -0
- package/dist/seo/index.js +1 -0
- package/dist/storage/index.d.ts +50 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +211 -0
- package/dist/test-utils/factories.d.ts +38 -0
- package/dist/test-utils/factories.d.ts.map +1 -0
- package/dist/test-utils/index.d.ts +6 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/test-utils/index.js +117 -0
- package/dist/test-utils/mock-auth.d.ts +25 -0
- package/dist/test-utils/mock-auth.d.ts.map +1 -0
- package/dist/test-utils/mock-prisma.d.ts +55 -0
- package/dist/test-utils/mock-prisma.d.ts.map +1 -0
- package/dist/test-utils/render.d.ts +4 -0
- package/dist/test-utils/render.d.ts.map +1 -0
- package/dist/test-utils/request-helpers.d.ts +6 -0
- package/dist/test-utils/request-helpers.d.ts.map +1 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/math.d.ts +2 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +7 -0
- package/dist/utils/optional-import.d.ts +14 -0
- package/dist/utils/optional-import.d.ts.map +1 -0
- package/package.json +205 -0
- package/scripts/generate-skill-adapters.ts +146 -0
- package/scripts/postinstall.mjs +146 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# Skill: Build a Landing Page
|
|
2
|
+
|
|
3
|
+
Create a marketing landing page with hero, features, CTA sections using MARS design system tokens.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
Use this skill when the user asks to build a landing page, marketing page, home page, or public-facing product page.
|
|
8
|
+
|
|
9
|
+
## Architecture
|
|
10
|
+
|
|
11
|
+
Landing pages are server components (no `'use client'`) for optimal SEO and performance. They live in the public route group.
|
|
12
|
+
|
|
13
|
+
## Directory
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
src/app/(public)/page.tsx # Home landing page
|
|
17
|
+
src/app/(public)/pricing/page.tsx # Pricing page
|
|
18
|
+
src/app/(public)/about/page.tsx # About page
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Template: Full Landing Page
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { Button, LinkButton, H1, H2, Paragraph } from '@mars-stack/ui';
|
|
25
|
+
import { appConfig } from '@/config/app.config';
|
|
26
|
+
import type { Metadata } from 'next';
|
|
27
|
+
|
|
28
|
+
export const metadata: Metadata = {
|
|
29
|
+
title: `${appConfig.name} - ${appConfig.tagline}`,
|
|
30
|
+
description: appConfig.description,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default function HomePage() {
|
|
34
|
+
return (
|
|
35
|
+
<main>
|
|
36
|
+
<HeroSection />
|
|
37
|
+
<FeaturesSection />
|
|
38
|
+
<CTASection />
|
|
39
|
+
</main>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function HeroSection() {
|
|
44
|
+
return (
|
|
45
|
+
<section className="relative overflow-hidden bg-surface-background px-4 py-24 sm:py-32">
|
|
46
|
+
<div className="mx-auto max-w-4xl text-center">
|
|
47
|
+
<h1 className="text-4xl font-bold tracking-tight text-text-primary sm:text-6xl">
|
|
48
|
+
{appConfig.tagline}
|
|
49
|
+
</h1>
|
|
50
|
+
<p className="mx-auto mt-6 max-w-2xl text-lg leading-8 text-text-secondary">
|
|
51
|
+
{appConfig.description}
|
|
52
|
+
</p>
|
|
53
|
+
<div className="mt-10 flex items-center justify-center gap-4">
|
|
54
|
+
<LinkButton href="/register" size="lg">
|
|
55
|
+
Get Started Free
|
|
56
|
+
</LinkButton>
|
|
57
|
+
<LinkButton href="#features" variant="secondary" size="lg">
|
|
58
|
+
Learn More
|
|
59
|
+
</LinkButton>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</section>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function FeaturesSection() {
|
|
67
|
+
const features = [
|
|
68
|
+
{
|
|
69
|
+
title: 'Lightning Fast',
|
|
70
|
+
description: 'Built on Next.js 15 with Turbopack for instant feedback during development.',
|
|
71
|
+
icon: '⚡',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
title: 'Secure by Default',
|
|
75
|
+
description: 'Authentication, CSRF protection, rate limiting, and input validation out of the box.',
|
|
76
|
+
icon: '🔒',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
title: 'Beautiful UI',
|
|
80
|
+
description: 'A design token system that ensures consistency across every component.',
|
|
81
|
+
icon: '🎨',
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<section id="features" className="bg-surface-card px-4 py-24">
|
|
87
|
+
<div className="mx-auto max-w-6xl">
|
|
88
|
+
<div className="text-center">
|
|
89
|
+
<H2>Everything you need</H2>
|
|
90
|
+
<Paragraph className="mx-auto mt-4 max-w-2xl text-text-secondary">
|
|
91
|
+
All the tools and infrastructure to build and ship your product.
|
|
92
|
+
</Paragraph>
|
|
93
|
+
</div>
|
|
94
|
+
<div className="mt-16 grid grid-cols-1 gap-8 sm:grid-cols-2 lg:grid-cols-3">
|
|
95
|
+
{features.map((feature) => (
|
|
96
|
+
<div
|
|
97
|
+
key={feature.title}
|
|
98
|
+
className="rounded-xl border border-border-default bg-surface-background p-6"
|
|
99
|
+
>
|
|
100
|
+
<div className="mb-4 text-3xl">{feature.icon}</div>
|
|
101
|
+
<h3 className="text-lg font-semibold text-text-primary">{feature.title}</h3>
|
|
102
|
+
<p className="mt-2 text-text-secondary">{feature.description}</p>
|
|
103
|
+
</div>
|
|
104
|
+
))}
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</section>
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function CTASection() {
|
|
112
|
+
return (
|
|
113
|
+
<section className="bg-brand-primary px-4 py-24">
|
|
114
|
+
<div className="mx-auto max-w-4xl text-center">
|
|
115
|
+
<h2 className="text-3xl font-bold text-text-on-brand sm:text-4xl">
|
|
116
|
+
Ready to get started?
|
|
117
|
+
</h2>
|
|
118
|
+
<p className="mx-auto mt-4 max-w-xl text-lg text-text-on-brand/80">
|
|
119
|
+
Create your account in 30 seconds. No credit card required.
|
|
120
|
+
</p>
|
|
121
|
+
<div className="mt-8">
|
|
122
|
+
<LinkButton
|
|
123
|
+
href="/register"
|
|
124
|
+
variant="secondary"
|
|
125
|
+
size="lg"
|
|
126
|
+
className="bg-white text-brand-primary hover:bg-white/90"
|
|
127
|
+
>
|
|
128
|
+
Start Building
|
|
129
|
+
</LinkButton>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
</section>
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Common Sections
|
|
138
|
+
|
|
139
|
+
### Social Proof / Logos
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
function LogoCloud() {
|
|
143
|
+
return (
|
|
144
|
+
<section className="bg-surface-background px-4 py-16">
|
|
145
|
+
<div className="mx-auto max-w-6xl">
|
|
146
|
+
<p className="text-center text-sm font-medium text-text-muted uppercase tracking-wide">
|
|
147
|
+
Trusted by teams at
|
|
148
|
+
</p>
|
|
149
|
+
<div className="mt-8 flex flex-wrap items-center justify-center gap-8 opacity-60">
|
|
150
|
+
{/* Logo images or SVGs */}
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
</section>
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Testimonials
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
function TestimonialsSection() {
|
|
162
|
+
const testimonials = [
|
|
163
|
+
{ quote: '...', author: 'Jane', role: 'CTO at Acme' },
|
|
164
|
+
];
|
|
165
|
+
|
|
166
|
+
return (
|
|
167
|
+
<section className="bg-surface-background px-4 py-24">
|
|
168
|
+
<div className="mx-auto max-w-6xl">
|
|
169
|
+
<H2 className="text-center">What people say</H2>
|
|
170
|
+
<div className="mt-12 grid grid-cols-1 gap-8 md:grid-cols-3">
|
|
171
|
+
{testimonials.map((t, i) => (
|
|
172
|
+
<div key={i} className="rounded-xl border border-border-default bg-surface-card p-6">
|
|
173
|
+
<p className="text-text-primary italic">“{t.quote}”</p>
|
|
174
|
+
<div className="mt-4">
|
|
175
|
+
<p className="font-medium text-text-primary">{t.author}</p>
|
|
176
|
+
<p className="text-sm text-text-secondary">{t.role}</p>
|
|
177
|
+
</div>
|
|
178
|
+
</div>
|
|
179
|
+
))}
|
|
180
|
+
</div>
|
|
181
|
+
</div>
|
|
182
|
+
</section>
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Pricing Cards
|
|
188
|
+
|
|
189
|
+
```tsx
|
|
190
|
+
function PricingCard({ name, price, features, highlighted }: PricingCardProps) {
|
|
191
|
+
return (
|
|
192
|
+
<div className={clsx(
|
|
193
|
+
'rounded-xl border p-8',
|
|
194
|
+
highlighted
|
|
195
|
+
? 'border-brand-primary bg-surface-card shadow-lg ring-2 ring-brand-primary'
|
|
196
|
+
: 'border-border-default bg-surface-card'
|
|
197
|
+
)}>
|
|
198
|
+
<h3 className="text-lg font-semibold text-text-primary">{name}</h3>
|
|
199
|
+
<p className="mt-4">
|
|
200
|
+
<span className="text-4xl font-bold text-text-primary">£{price}</span>
|
|
201
|
+
<span className="text-text-secondary">/month</span>
|
|
202
|
+
</p>
|
|
203
|
+
<ul className="mt-6 space-y-3">
|
|
204
|
+
{features.map((f) => (
|
|
205
|
+
<li key={f} className="flex items-center gap-2 text-text-secondary">
|
|
206
|
+
<span className="text-text-success">✓</span> {f}
|
|
207
|
+
</li>
|
|
208
|
+
))}
|
|
209
|
+
</ul>
|
|
210
|
+
<LinkButton
|
|
211
|
+
href="/register"
|
|
212
|
+
variant={highlighted ? 'primary' : 'secondary'}
|
|
213
|
+
className="mt-8 w-full"
|
|
214
|
+
>
|
|
215
|
+
Get Started
|
|
216
|
+
</LinkButton>
|
|
217
|
+
</div>
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## SEO
|
|
223
|
+
|
|
224
|
+
Landing pages should export `metadata` with:
|
|
225
|
+
- `title` -- from `appConfig.name` + tagline
|
|
226
|
+
- `description` -- from `appConfig.description`
|
|
227
|
+
- `openGraph` -- images, type, url
|
|
228
|
+
- Structured data via `JsonLd` component
|
|
229
|
+
|
|
230
|
+
```tsx
|
|
231
|
+
import { JsonLd } from '@mars-stack/ui';
|
|
232
|
+
import { buildOrganizationJsonLd } from '@/lib/mars';
|
|
233
|
+
|
|
234
|
+
// In the page:
|
|
235
|
+
<JsonLd data={buildOrganizationJsonLd()} />
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Checklist
|
|
239
|
+
|
|
240
|
+
- [ ] Server component (no `'use client'`)
|
|
241
|
+
- [ ] SEO metadata exported
|
|
242
|
+
- [ ] Hero with clear value proposition and CTA
|
|
243
|
+
- [ ] Features section with grid layout
|
|
244
|
+
- [ ] CTA section with brand background
|
|
245
|
+
- [ ] All colours use semantic tokens
|
|
246
|
+
- [ ] Responsive at all breakpoints
|
|
247
|
+
- [ ] Uses `appConfig` for dynamic content (name, tagline, description)
|
|
248
|
+
- [ ] `JsonLd` structured data included
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Skill: Capture Conversation Context
|
|
2
|
+
|
|
3
|
+
Feed decisions, discoveries, and context from the current agent conversation back into the repository so future agents can access them.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
Use this skill when:
|
|
8
|
+
- A significant architectural decision was made during conversation
|
|
9
|
+
- A multi-step plan was executed and should be recorded
|
|
10
|
+
- A bug was investigated and the root cause should be documented
|
|
11
|
+
- A refactoring rationale needs to be preserved
|
|
12
|
+
- The conversation is ending and produced valuable context
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
- Read `docs/design-docs/conversation-as-system-record.md` for the full design doc.
|
|
17
|
+
- Read `docs/exec-plans/` to see existing plans.
|
|
18
|
+
- Read `docs/QUALITY_SCORE.md` for current quality grades.
|
|
19
|
+
|
|
20
|
+
## Step 1: Identify What Was Produced
|
|
21
|
+
|
|
22
|
+
Review the conversation and categorise the output:
|
|
23
|
+
|
|
24
|
+
| What happened | Artifact to create/update |
|
|
25
|
+
|---|---|
|
|
26
|
+
| Planned work and executed it | `docs/exec-plans/completed/<name>.md` |
|
|
27
|
+
| Planned work (not yet executed) | `docs/exec-plans/active/<name>.md` |
|
|
28
|
+
| Made an architecture decision | `docs/design-docs/<name>.md` |
|
|
29
|
+
| Fixed a bug with interesting root cause | `docs/exec-plans/completed/<bug-name>.md` |
|
|
30
|
+
| Discovered tech debt | `docs/exec-plans/tech-debt.md` |
|
|
31
|
+
| Changed quality grades | `docs/QUALITY_SCORE.md` |
|
|
32
|
+
| Updated core beliefs | `docs/design-docs/core-beliefs.md` |
|
|
33
|
+
|
|
34
|
+
## Step 2: Write the Artifact
|
|
35
|
+
|
|
36
|
+
### For completed execution plans
|
|
37
|
+
|
|
38
|
+
Follow the `create-execution-plan` skill format but with status `Completed`. Include:
|
|
39
|
+
|
|
40
|
+
```markdown
|
|
41
|
+
# Execution Plan: <Title>
|
|
42
|
+
|
|
43
|
+
**Status:** Completed
|
|
44
|
+
**Created:** <date>
|
|
45
|
+
**Completed:** <date>
|
|
46
|
+
**Origin:** <Brief description of what prompted this work>
|
|
47
|
+
|
|
48
|
+
## Context
|
|
49
|
+
<Why this work was needed>
|
|
50
|
+
|
|
51
|
+
## What Was Done
|
|
52
|
+
<Summary of changes, organised by phase or area>
|
|
53
|
+
|
|
54
|
+
## Key Decisions
|
|
55
|
+
<Decisions made during execution, with rationale>
|
|
56
|
+
|
|
57
|
+
## Discoveries
|
|
58
|
+
<Anything unexpected that was found — framework quirks, bugs, constraints>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### For design docs
|
|
62
|
+
|
|
63
|
+
```markdown
|
|
64
|
+
# Design Doc: <Title>
|
|
65
|
+
|
|
66
|
+
**Status:** Accepted / Proposed / Superseded
|
|
67
|
+
**Created:** <date>
|
|
68
|
+
|
|
69
|
+
## Problem
|
|
70
|
+
<What problem does this solve?>
|
|
71
|
+
|
|
72
|
+
## Decision
|
|
73
|
+
<What was decided?>
|
|
74
|
+
|
|
75
|
+
## Alternatives Considered
|
|
76
|
+
<What else was evaluated and why it was rejected?>
|
|
77
|
+
|
|
78
|
+
## Consequences
|
|
79
|
+
<What are the implications of this decision?>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### For tech debt updates
|
|
83
|
+
|
|
84
|
+
Append to the appropriate section of `docs/exec-plans/tech-debt.md`:
|
|
85
|
+
|
|
86
|
+
```markdown
|
|
87
|
+
| <Item> | <Location> | <Impact> | <Tracking> |
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Step 3: Update Cross-References
|
|
91
|
+
|
|
92
|
+
1. If a new design doc was created, add it to `docs/design-docs/index.md`.
|
|
93
|
+
2. If quality scores changed, update `docs/QUALITY_SCORE.md`.
|
|
94
|
+
3. If an active plan was completed, move it from `active/` to `completed/`.
|
|
95
|
+
4. If core beliefs were affected, update `docs/design-docs/core-beliefs.md`.
|
|
96
|
+
|
|
97
|
+
## Step 4: Verify
|
|
98
|
+
|
|
99
|
+
- [ ] Artifact is in the correct directory with correct status
|
|
100
|
+
- [ ] Key decisions include rationale (not just what, but why)
|
|
101
|
+
- [ ] Discoveries document the unexpected (things code can't convey)
|
|
102
|
+
- [ ] Cross-references are updated
|
|
103
|
+
- [ ] No conversation-specific noise (corrections, false starts, tone)
|
|
104
|
+
|
|
105
|
+
## Anti-Patterns
|
|
106
|
+
|
|
107
|
+
- **Don't dump the transcript.** Extract decisions and context, not the conversation.
|
|
108
|
+
- **Don't document the obvious.** If the code diff tells the story, the artifact should explain only what the diff cannot.
|
|
109
|
+
- **Don't create empty placeholders.** If the conversation didn't produce meaningful context, don't create an artifact.
|
|
110
|
+
- **Don't duplicate what's in the code.** The artifact explains *why*, not *what*.
|
|
111
|
+
|
|
112
|
+
## Checklist
|
|
113
|
+
|
|
114
|
+
- [ ] Identified conversation output type (plan, decision, discovery, debt)
|
|
115
|
+
- [ ] Created or updated the appropriate artifact
|
|
116
|
+
- [ ] Included rationale for key decisions
|
|
117
|
+
- [ ] Documented unexpected discoveries
|
|
118
|
+
- [ ] Updated cross-references (index files, quality scores)
|
|
119
|
+
- [ ] No transcript noise in the artifact
|