@c0x12c/ai-toolkit 1.15.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/.claude-plugin/marketplace.json +16 -0
- package/.claude-plugin/plugin.json +12 -0
- package/README.md +439 -0
- package/VERSION +1 -0
- package/agents/design-critic.md +127 -0
- package/agents/idea-killer.md +72 -0
- package/agents/infrastructure-expert.md +49 -0
- package/agents/micronaut-backend-expert.md +45 -0
- package/agents/phase-reviewer.md +150 -0
- package/agents/research-planner.md +70 -0
- package/agents/solution-architect-cto.md +49 -0
- package/agents/sre-architect.md +49 -0
- package/agents/team-coordinator.md +111 -0
- package/bin/cli.js +780 -0
- package/claude-md/00-header.md +39 -0
- package/claude-md/01-core.md +105 -0
- package/claude-md/05-database.md +20 -0
- package/claude-md/11-backend-micronaut.md +19 -0
- package/claude-md/20-frontend-react.md +44 -0
- package/claude-md/25-ux-design.md +56 -0
- package/claude-md/30-infrastructure.md +24 -0
- package/claude-md/30-project-mgmt.md +119 -0
- package/claude-md/40-product.md +39 -0
- package/claude-md/50-ops.md +34 -0
- package/claude-md/60-research.md +27 -0
- package/claude-md/90-footer.md +21 -0
- package/commands/spartan/brainstorm.md +134 -0
- package/commands/spartan/brownfield.md +157 -0
- package/commands/spartan/build.md +435 -0
- package/commands/spartan/careful.md +94 -0
- package/commands/spartan/commit-message.md +112 -0
- package/commands/spartan/content.md +17 -0
- package/commands/spartan/context-save.md +161 -0
- package/commands/spartan/contribute.md +140 -0
- package/commands/spartan/daily.md +42 -0
- package/commands/spartan/debug.md +308 -0
- package/commands/spartan/deep-dive.md +55 -0
- package/commands/spartan/deploy.md +207 -0
- package/commands/spartan/e2e.md +264 -0
- package/commands/spartan/env-setup.md +166 -0
- package/commands/spartan/epic.md +199 -0
- package/commands/spartan/fe-review.md +181 -0
- package/commands/spartan/figma-to-code.md +260 -0
- package/commands/spartan/forensics.md +46 -0
- package/commands/spartan/freeze.md +84 -0
- package/commands/spartan/fundraise.md +53 -0
- package/commands/spartan/gate-review.md +229 -0
- package/commands/spartan/gsd-upgrade.md +376 -0
- package/commands/spartan/guard.md +42 -0
- package/commands/spartan/init-project.md +178 -0
- package/commands/spartan/init-rules.md +298 -0
- package/commands/spartan/interview.md +154 -0
- package/commands/spartan/kickoff.md +73 -0
- package/commands/spartan/kotlin-service.md +109 -0
- package/commands/spartan/lean-canvas.md +222 -0
- package/commands/spartan/lint-rules.md +122 -0
- package/commands/spartan/map-codebase.md +124 -0
- package/commands/spartan/migration.md +82 -0
- package/commands/spartan/next-app.md +317 -0
- package/commands/spartan/next-feature.md +212 -0
- package/commands/spartan/onboard.md +326 -0
- package/commands/spartan/outreach.md +16 -0
- package/commands/spartan/phase.md +142 -0
- package/commands/spartan/pitch.md +18 -0
- package/commands/spartan/plan.md +210 -0
- package/commands/spartan/pr-ready.md +202 -0
- package/commands/spartan/project.md +106 -0
- package/commands/spartan/qa.md +222 -0
- package/commands/spartan/research.md +254 -0
- package/commands/spartan/review.md +132 -0
- package/commands/spartan/scan-rules.md +173 -0
- package/commands/spartan/sessions.md +143 -0
- package/commands/spartan/spec.md +131 -0
- package/commands/spartan/startup.md +257 -0
- package/commands/spartan/team.md +570 -0
- package/commands/spartan/teardown.md +161 -0
- package/commands/spartan/testcontainer.md +97 -0
- package/commands/spartan/tf-cost.md +123 -0
- package/commands/spartan/tf-deploy.md +116 -0
- package/commands/spartan/tf-drift.md +100 -0
- package/commands/spartan/tf-import.md +107 -0
- package/commands/spartan/tf-module.md +121 -0
- package/commands/spartan/tf-plan.md +100 -0
- package/commands/spartan/tf-review.md +106 -0
- package/commands/spartan/tf-scaffold.md +109 -0
- package/commands/spartan/tf-security.md +147 -0
- package/commands/spartan/think.md +221 -0
- package/commands/spartan/unfreeze.md +13 -0
- package/commands/spartan/update.md +134 -0
- package/commands/spartan/ux.md +1233 -0
- package/commands/spartan/validate.md +193 -0
- package/commands/spartan/web-to-prd.md +706 -0
- package/commands/spartan/workstreams.md +109 -0
- package/commands/spartan/write.md +16 -0
- package/commands/spartan.md +386 -0
- package/frameworks/00-framework-comparison-guide.md +317 -0
- package/frameworks/01-lean-canvas.md +196 -0
- package/frameworks/02-design-sprint.md +304 -0
- package/frameworks/03-foundation-sprint.md +337 -0
- package/frameworks/04-business-model-canvas.md +391 -0
- package/frameworks/05-customer-development.md +426 -0
- package/frameworks/06-jobs-to-be-done.md +358 -0
- package/frameworks/07-mom-test.md +392 -0
- package/frameworks/08-value-proposition-canvas.md +488 -0
- package/frameworks/09-javelin-board.md +428 -0
- package/frameworks/10-build-measure-learn.md +467 -0
- package/frameworks/11-mvp-approaches.md +533 -0
- package/frameworks/think-before-build.md +593 -0
- package/lib/assembler.js +197 -0
- package/lib/assembler.test.js +159 -0
- package/lib/detector.js +166 -0
- package/lib/detector.test.js +221 -0
- package/lib/packs.js +16 -0
- package/lib/resolver.js +272 -0
- package/lib/resolver.test.js +298 -0
- package/lib/worktree.sh +104 -0
- package/package.json +50 -0
- package/packs/backend-micronaut.yaml +35 -0
- package/packs/backend-nodejs.yaml +15 -0
- package/packs/backend-python.yaml +15 -0
- package/packs/core.yaml +37 -0
- package/packs/database.yaml +21 -0
- package/packs/frontend-react.yaml +24 -0
- package/packs/infrastructure.yaml +40 -0
- package/packs/ops.yaml +16 -0
- package/packs/packs.compiled.json +371 -0
- package/packs/product.yaml +22 -0
- package/packs/project-mgmt.yaml +24 -0
- package/packs/research.yaml +39 -0
- package/packs/shared-backend.yaml +14 -0
- package/packs/ux-design.yaml +21 -0
- package/rules/backend-micronaut/API_DESIGN.md +313 -0
- package/rules/backend-micronaut/BATCH_PROCESSING.md +92 -0
- package/rules/backend-micronaut/CONTROLLERS.md +388 -0
- package/rules/backend-micronaut/KOTLIN.md +414 -0
- package/rules/backend-micronaut/RETROFIT_PLACEMENT.md +290 -0
- package/rules/backend-micronaut/SERVICES_AND_BEANS.md +325 -0
- package/rules/core/NAMING_CONVENTIONS.md +208 -0
- package/rules/core/SKILL_AUTHORING.md +174 -0
- package/rules/core/TIMEZONE.md +316 -0
- package/rules/database/ORM_AND_REPO.md +289 -0
- package/rules/database/SCHEMA.md +146 -0
- package/rules/database/TRANSACTIONS.md +311 -0
- package/rules/frontend-react/FRONTEND.md +344 -0
- package/rules/infrastructure/MODULES.md +260 -0
- package/rules/infrastructure/NAMING.md +196 -0
- package/rules/infrastructure/PROVIDERS.md +309 -0
- package/rules/infrastructure/SECURITY.md +310 -0
- package/rules/infrastructure/STATE_AND_BACKEND.md +237 -0
- package/rules/infrastructure/STRUCTURE.md +234 -0
- package/rules/infrastructure/VARIABLES.md +285 -0
- package/rules/shared-backend/ARCHITECTURE.md +46 -0
- package/rules/ux-design/DESIGN_PROCESS.md +176 -0
- package/skills/api-endpoint-creator/SKILL.md +455 -0
- package/skills/api-endpoint-creator/error-handling-guide.md +244 -0
- package/skills/api-endpoint-creator/examples.md +522 -0
- package/skills/api-endpoint-creator/testing-patterns.md +302 -0
- package/skills/article-writing/SKILL.md +109 -0
- package/skills/article-writing/examples.md +59 -0
- package/skills/backend-api-design/SKILL.md +84 -0
- package/skills/backend-api-design/code-patterns.md +138 -0
- package/skills/brainstorm/SKILL.md +95 -0
- package/skills/browser-qa/SKILL.md +87 -0
- package/skills/browser-qa/playwright-snippets.md +110 -0
- package/skills/ci-cd-patterns/SKILL.md +108 -0
- package/skills/ci-cd-patterns/workflows.md +149 -0
- package/skills/competitive-teardown/SKILL.md +93 -0
- package/skills/competitive-teardown/example-analysis.md +50 -0
- package/skills/content-engine/SKILL.md +131 -0
- package/skills/content-engine/examples.md +72 -0
- package/skills/database-patterns/SKILL.md +72 -0
- package/skills/database-patterns/code-templates.md +114 -0
- package/skills/database-table-creator/SKILL.md +141 -0
- package/skills/database-table-creator/examples.md +552 -0
- package/skills/database-table-creator/kotlin-templates.md +400 -0
- package/skills/database-table-creator/migration-template.sql +68 -0
- package/skills/database-table-creator/validation-checklist.md +337 -0
- package/skills/deep-research/SKILL.md +80 -0
- package/skills/design-intelligence/SKILL.md +268 -0
- package/skills/design-workflow/SKILL.md +127 -0
- package/skills/design-workflow/checklists.md +45 -0
- package/skills/idea-validation/SKILL.md +129 -0
- package/skills/idea-validation/example-report.md +50 -0
- package/skills/investor-materials/SKILL.md +122 -0
- package/skills/investor-materials/example-outline.md +70 -0
- package/skills/investor-outreach/SKILL.md +112 -0
- package/skills/investor-outreach/examples.md +76 -0
- package/skills/kotlin-best-practices/SKILL.md +58 -0
- package/skills/kotlin-best-practices/code-patterns.md +132 -0
- package/skills/market-research/SKILL.md +99 -0
- package/skills/security-checklist/SKILL.md +65 -0
- package/skills/security-checklist/audit-reference.md +95 -0
- package/skills/service-debugging/SKILL.md +116 -0
- package/skills/service-debugging/common-issues.md +65 -0
- package/skills/startup-pipeline/SKILL.md +152 -0
- package/skills/terraform-best-practices/SKILL.md +244 -0
- package/skills/terraform-module-creator/SKILL.md +284 -0
- package/skills/terraform-review/SKILL.md +222 -0
- package/skills/terraform-security-audit/SKILL.md +280 -0
- package/skills/terraform-service-scaffold/SKILL.md +574 -0
- package/skills/testing-strategies/SKILL.md +116 -0
- package/skills/testing-strategies/examples.md +103 -0
- package/skills/testing-strategies/integration-test-setup.md +71 -0
- package/skills/ui-ux-pro-max/SKILL.md +238 -0
- package/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/python-setup.md +146 -0
- package/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/skills/web-to-prd/SKILL.md +478 -0
- package/templates/build-config.yaml +44 -0
- package/templates/commands-config.yaml +55 -0
- package/templates/competitor-analysis.md +60 -0
- package/templates/content/AGENT_TEMPLATE.md +47 -0
- package/templates/content/COMMAND_TEMPLATE.md +27 -0
- package/templates/content/RULE_TEMPLATE.md +40 -0
- package/templates/content/SKILL_TEMPLATE.md +41 -0
- package/templates/design-config.md +105 -0
- package/templates/design-doc.md +207 -0
- package/templates/epic.md +100 -0
- package/templates/feature-spec.md +181 -0
- package/templates/idea-canvas.md +47 -0
- package/templates/implementation-plan.md +159 -0
- package/templates/prd-template.md +86 -0
- package/templates/preamble.md +89 -0
- package/templates/project-readme.md +35 -0
- package/templates/quality-gates.md +230 -0
- package/templates/spartan-config.yaml +164 -0
- package/templates/user-interview.md +69 -0
- package/templates/validation-checklist.md +108 -0
- package/templates/workflow-backend-micronaut.md +409 -0
- package/templates/workflow-frontend-react.md +233 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spartan:init-rules
|
|
3
|
+
description: Set up configurable rules — interactive wizard that generates .spartan/config.yaml
|
|
4
|
+
argument-hint: "[optional: profile name like go-standard or python-fastapi]"
|
|
5
|
+
preamble-tier: 3
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Init Rules: {{ args[0] | default: "interactive setup" }}
|
|
9
|
+
|
|
10
|
+
You are an **interactive config wizard**. Walk the user through setting up `.spartan/config.yaml` for their project. This file tells the toolkit which rules, review stages, and build commands to use.
|
|
11
|
+
|
|
12
|
+
Keep questions short. Always recommend a default. One decision per turn.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Step 0: Check Existing Config
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
ls .spartan/config.yaml 2>/dev/null && echo "CONFIG_EXISTS" || echo "NO_CONFIG"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**If config exists:**
|
|
23
|
+
|
|
24
|
+
> You already have a config at `.spartan/config.yaml`.
|
|
25
|
+
>
|
|
26
|
+
> What do you want to do?
|
|
27
|
+
> A) Start fresh — wipe and reconfigure from scratch (recommended if it's outdated)
|
|
28
|
+
> B) Edit existing — I'll walk through each section, keep what's good
|
|
29
|
+
> C) Cancel — keep current config
|
|
30
|
+
>
|
|
31
|
+
> I'd go with A if you're not sure what's in there.
|
|
32
|
+
|
|
33
|
+
- If **A**: continue to Step 1 (will overwrite at the end)
|
|
34
|
+
- If **B**: read the existing config, then walk through Step 3 with current values as defaults
|
|
35
|
+
- If **C**: stop here
|
|
36
|
+
|
|
37
|
+
**If no config exists:** continue to Step 1.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Step 1: Detect Stack (silent — don't ask questions yet)
|
|
42
|
+
|
|
43
|
+
Scan the project to figure out what stack is being used:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Build tools & frameworks
|
|
47
|
+
ls build.gradle.kts settings.gradle.kts 2>/dev/null && echo "DETECTED:kotlin"
|
|
48
|
+
ls pom.xml 2>/dev/null && echo "DETECTED:java"
|
|
49
|
+
ls go.mod 2>/dev/null && echo "DETECTED:go"
|
|
50
|
+
ls requirements.txt pyproject.toml setup.py 2>/dev/null && echo "DETECTED:python"
|
|
51
|
+
ls package.json 2>/dev/null && echo "DETECTED:node"
|
|
52
|
+
|
|
53
|
+
# Framework specifics
|
|
54
|
+
cat build.gradle.kts 2>/dev/null | grep -qi "micronaut" && echo "FRAMEWORK:micronaut"
|
|
55
|
+
cat build.gradle.kts 2>/dev/null | grep -qi "spring" && echo "FRAMEWORK:spring"
|
|
56
|
+
cat pom.xml 2>/dev/null | grep -qi "spring-boot" && echo "FRAMEWORK:spring"
|
|
57
|
+
cat package.json 2>/dev/null | grep -q '"next"' && echo "FRAMEWORK:nextjs"
|
|
58
|
+
cat package.json 2>/dev/null | grep -q '"express"' && echo "FRAMEWORK:express"
|
|
59
|
+
cat package.json 2>/dev/null | grep -q '"fastify"' && echo "FRAMEWORK:fastify"
|
|
60
|
+
cat requirements.txt pyproject.toml 2>/dev/null | grep -qi "django" && echo "FRAMEWORK:django"
|
|
61
|
+
cat requirements.txt pyproject.toml 2>/dev/null | grep -qi "fastapi" && echo "FRAMEWORK:fastapi"
|
|
62
|
+
|
|
63
|
+
# Database
|
|
64
|
+
ls src/main/resources/db/migration/ 2>/dev/null && echo "DB:flyway"
|
|
65
|
+
cat docker-compose.yml 2>/dev/null | grep -E "postgres|mysql|mongo|redis" 2>/dev/null
|
|
66
|
+
cat package.json 2>/dev/null | grep -E "prisma|typeorm|drizzle" 2>/dev/null
|
|
67
|
+
|
|
68
|
+
# Test frameworks
|
|
69
|
+
cat build.gradle.kts 2>/dev/null | grep -qi "kotest\|junit" && echo "TEST:kotlin"
|
|
70
|
+
cat package.json 2>/dev/null | grep -E "vitest|jest|mocha" 2>/dev/null
|
|
71
|
+
ls pytest.ini pyproject.toml 2>/dev/null | xargs grep -l "pytest" 2>/dev/null && echo "TEST:pytest"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Show the user what you found:
|
|
75
|
+
|
|
76
|
+
> **Detected:** [language] + [framework], [test framework], [database if found]
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Step 2: Pick a Profile
|
|
81
|
+
|
|
82
|
+
If the user passed a profile argument (e.g., `/spartan:init-rules go-standard`), use `{{ args[0] }}` directly. Skip the menu — jump to Step 3.
|
|
83
|
+
|
|
84
|
+
Otherwise, show the menu:
|
|
85
|
+
|
|
86
|
+
> Pick a profile to start from:
|
|
87
|
+
>
|
|
88
|
+
> A) **kotlin-micronaut** -- Kotlin + Micronaut (thin controllers, Either errors, Exposed ORM)
|
|
89
|
+
> B) **react-nextjs** -- React + Next.js (App Router, Server Components, Vitest)
|
|
90
|
+
> C) **go-standard** -- Go (clean arch, table-driven tests, golangci-lint)
|
|
91
|
+
> D) **python-django** -- Python + Django (models, views, pytest-django)
|
|
92
|
+
> E) **python-fastapi** -- Python + FastAPI (async, Pydantic, dependency injection)
|
|
93
|
+
> F) **java-spring** -- Java + Spring Boot (@RestController, JPA, @SpringBootTest)
|
|
94
|
+
> G) **typescript-node** -- TypeScript + Node.js (Express/Fastify, Zod, strict mode)
|
|
95
|
+
> H) **custom** -- Start from blank, I'll configure everything myself
|
|
96
|
+
>
|
|
97
|
+
> I'd go with **[detected option]** based on your project files.
|
|
98
|
+
|
|
99
|
+
Wait for the user to pick before continuing.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Step 3: Customize
|
|
104
|
+
|
|
105
|
+
Walk through these questions **one at a time**. Pre-fill answers from the chosen profile.
|
|
106
|
+
|
|
107
|
+
### 3a: Architecture Style
|
|
108
|
+
|
|
109
|
+
Based on the stack, show 2-3 options with a default:
|
|
110
|
+
|
|
111
|
+
**For Kotlin / Java:**
|
|
112
|
+
> Architecture style?
|
|
113
|
+
> A) Layered (Controller -> Manager -> Repository) -- recommended for most projects
|
|
114
|
+
> B) Hexagonal (ports & adapters)
|
|
115
|
+
> C) Custom -- I'll describe my own
|
|
116
|
+
|
|
117
|
+
**For Go:**
|
|
118
|
+
> Architecture style?
|
|
119
|
+
> A) Clean Architecture (handler -> usecase -> repository) -- recommended
|
|
120
|
+
> B) Flat (single package per service)
|
|
121
|
+
> C) Custom
|
|
122
|
+
|
|
123
|
+
**For Python (Django):**
|
|
124
|
+
> Architecture style?
|
|
125
|
+
> A) MVC (views -> models -> managers) -- recommended
|
|
126
|
+
> B) Clean Architecture
|
|
127
|
+
> C) Custom
|
|
128
|
+
|
|
129
|
+
**For Python (FastAPI):**
|
|
130
|
+
> Architecture style?
|
|
131
|
+
> A) Layered (router -> service -> repository) -- recommended
|
|
132
|
+
> B) Clean Architecture
|
|
133
|
+
> C) Custom
|
|
134
|
+
|
|
135
|
+
**For React / Next.js:**
|
|
136
|
+
> Architecture style?
|
|
137
|
+
> A) Feature-based (feature folders with components, hooks, types) -- recommended
|
|
138
|
+
> B) Layered (pages -> components -> hooks -> services)
|
|
139
|
+
> C) Custom
|
|
140
|
+
|
|
141
|
+
**For TypeScript + Node.js:**
|
|
142
|
+
> Architecture style?
|
|
143
|
+
> A) Layered (controller -> service -> repository) -- recommended
|
|
144
|
+
> B) Clean Architecture
|
|
145
|
+
> C) Custom
|
|
146
|
+
|
|
147
|
+
### 3b: Review Stages
|
|
148
|
+
|
|
149
|
+
Show the 7 default stages:
|
|
150
|
+
|
|
151
|
+
> These stages run during build review. Remove any you don't need.
|
|
152
|
+
>
|
|
153
|
+
> 1. **correctness** -- Does the code match the spec? Edge cases?
|
|
154
|
+
> 2. **stack-conventions** -- Follows stack patterns and idioms
|
|
155
|
+
> 3. **test-coverage** -- Tests exist, are independent, cover edge cases
|
|
156
|
+
> 4. **architecture** -- Proper layer separation
|
|
157
|
+
> 5. **database-api** -- Schema rules, API design, input validation
|
|
158
|
+
> 6. **security** -- Auth, injection, data exposure
|
|
159
|
+
> 7. **documentation-gaps** -- New patterns that should be documented
|
|
160
|
+
>
|
|
161
|
+
> These are all on by default. Type the numbers to remove (e.g., "5, 7") or say "keep all".
|
|
162
|
+
|
|
163
|
+
### 3c: Custom Rules
|
|
164
|
+
|
|
165
|
+
> Have any extra rules you want to add? These are markdown files with your team's coding standards.
|
|
166
|
+
>
|
|
167
|
+
> Give me the file paths (relative to project root), or say "no".
|
|
168
|
+
>
|
|
169
|
+
> Example: `rules/OUR_API_RULES.md`, `docs/coding-standards.md`
|
|
170
|
+
|
|
171
|
+
### 3d: Build Commands
|
|
172
|
+
|
|
173
|
+
Pre-fill from the chosen profile. Let the user edit.
|
|
174
|
+
|
|
175
|
+
**For Kotlin / Micronaut:**
|
|
176
|
+
> Build commands -- edit if these aren't right:
|
|
177
|
+
> - Test: `./gradlew test`
|
|
178
|
+
> - Build: `./gradlew build`
|
|
179
|
+
> - Lint: `./gradlew ktlintCheck`
|
|
180
|
+
|
|
181
|
+
**For React / Next.js:**
|
|
182
|
+
> Build commands -- edit if these aren't right:
|
|
183
|
+
> - Test: `npm test` (or `yarn vitest`)
|
|
184
|
+
> - Build: `npm run build`
|
|
185
|
+
> - Lint: `npm run lint`
|
|
186
|
+
|
|
187
|
+
**For Go:**
|
|
188
|
+
> Build commands -- edit if these aren't right:
|
|
189
|
+
> - Test: `go test ./...`
|
|
190
|
+
> - Build: `go build ./...`
|
|
191
|
+
> - Lint: `golangci-lint run`
|
|
192
|
+
|
|
193
|
+
**For Python (Django):**
|
|
194
|
+
> Build commands -- edit if these aren't right:
|
|
195
|
+
> - Test: `pytest`
|
|
196
|
+
> - Build: `python manage.py check`
|
|
197
|
+
> - Lint: `ruff check .`
|
|
198
|
+
|
|
199
|
+
**For Python (FastAPI):**
|
|
200
|
+
> Build commands -- edit if these aren't right:
|
|
201
|
+
> - Test: `pytest`
|
|
202
|
+
> - Build: `python -m py_compile main.py`
|
|
203
|
+
> - Lint: `ruff check .`
|
|
204
|
+
|
|
205
|
+
**For Java / Spring:**
|
|
206
|
+
> Build commands -- edit if these aren't right:
|
|
207
|
+
> - Test: `./mvnw test` (or `./gradlew test`)
|
|
208
|
+
> - Build: `./mvnw package` (or `./gradlew build`)
|
|
209
|
+
> - Lint: `./mvnw checkstyle:check`
|
|
210
|
+
|
|
211
|
+
**For TypeScript / Node.js:**
|
|
212
|
+
> Build commands -- edit if these aren't right:
|
|
213
|
+
> - Test: `npm test`
|
|
214
|
+
> - Build: `npm run build`
|
|
215
|
+
> - Lint: `npm run lint`
|
|
216
|
+
|
|
217
|
+
**For custom:** ask the user to fill in all three from scratch.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Step 4: Generate Config
|
|
222
|
+
|
|
223
|
+
Build the `.spartan/config.yaml` file from the user's answers.
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
mkdir -p .spartan
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Write `.spartan/config.yaml` using this structure (based on the template at `toolkit/templates/spartan-config.yaml`):
|
|
230
|
+
|
|
231
|
+
```yaml
|
|
232
|
+
# .spartan/config.yaml — Generated by /spartan:init-rules
|
|
233
|
+
# Validate: /spartan:lint-rules
|
|
234
|
+
# Auto-detect rules from code: /spartan:scan-rules
|
|
235
|
+
|
|
236
|
+
# ─── Stack & Architecture ───────────────────────────────────────────
|
|
237
|
+
|
|
238
|
+
stack: [chosen-profile]
|
|
239
|
+
architecture: [chosen-architecture]
|
|
240
|
+
|
|
241
|
+
# ─── Rules ──────────────────────────────────────────────────────────
|
|
242
|
+
|
|
243
|
+
rules:
|
|
244
|
+
shared: []
|
|
245
|
+
# Add rules that apply to both backend and frontend
|
|
246
|
+
|
|
247
|
+
backend: []
|
|
248
|
+
# Add backend-specific rules
|
|
249
|
+
|
|
250
|
+
frontend: []
|
|
251
|
+
# Add frontend-specific rules
|
|
252
|
+
|
|
253
|
+
# ─── File Type Mapping ──────────────────────────────────────────────
|
|
254
|
+
|
|
255
|
+
file-types:
|
|
256
|
+
backend: [extensions based on stack]
|
|
257
|
+
frontend: [".tsx", ".ts", ".jsx", ".js", ".vue", ".svelte"]
|
|
258
|
+
migration: [".sql"]
|
|
259
|
+
config: [".yaml", ".yml", ".json", ".toml"]
|
|
260
|
+
|
|
261
|
+
# ─── Review Stages ──────────────────────────────────────────────────
|
|
262
|
+
|
|
263
|
+
review-stages:
|
|
264
|
+
[only include stages the user kept enabled]
|
|
265
|
+
|
|
266
|
+
# ─── Build Commands ─────────────────────────────────────────────────
|
|
267
|
+
|
|
268
|
+
commands:
|
|
269
|
+
test:
|
|
270
|
+
backend: "[from 3d]"
|
|
271
|
+
frontend: "[from 3d]"
|
|
272
|
+
build:
|
|
273
|
+
backend: "[from 3d]"
|
|
274
|
+
frontend: "[from 3d]"
|
|
275
|
+
lint:
|
|
276
|
+
backend: "[from 3d]"
|
|
277
|
+
frontend: "[from 3d]"
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
If the user gave custom rule paths in Step 3c, add them to the right section (`shared`, `backend`, or `frontend` — ask which if unclear).
|
|
281
|
+
|
|
282
|
+
Show the full generated config to the user for a final check:
|
|
283
|
+
|
|
284
|
+
> Here's your config. Look good?
|
|
285
|
+
|
|
286
|
+
If they want changes, edit and show again. If they're happy, write the file.
|
|
287
|
+
|
|
288
|
+
> Config saved to `.spartan/config.yaml`.
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Step 5: Next Steps
|
|
293
|
+
|
|
294
|
+
> What's next:
|
|
295
|
+
> - **Write your own rules** -- create markdown files and add paths to the `rules:` section
|
|
296
|
+
> - **Scan your code for patterns** -- `/spartan:scan-rules` (auto-detects conventions from code)
|
|
297
|
+
> - **Validate your config** -- `/spartan:lint-rules` (checks for broken paths and format issues)
|
|
298
|
+
> - **Build a feature** -- `/spartan:build` (will pick up your new config automatically)
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spartan:interview
|
|
3
|
+
description: Generate Mom Test interview questions — talk about their life, not your idea
|
|
4
|
+
argument-hint: "[product or feature name]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Interview Script: {{ args[0] | default: "your product" }}
|
|
8
|
+
|
|
9
|
+
You are generating a user interview script based on **The Mom Test** by Rob Fitzpatrick.
|
|
10
|
+
|
|
11
|
+
The core idea: even your mom will lie to you about your startup idea. So don't ask about your idea — ask about their life.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## The Mom Test Rules (ALWAYS enforce these)
|
|
16
|
+
|
|
17
|
+
1. **Talk about their life, not your idea.** Don't pitch. Don't describe what you're building. Ask about what they do today.
|
|
18
|
+
2. **Ask about specifics in the past, not generics or the future.** "Tell me about the last time you..." beats "Would you ever..."
|
|
19
|
+
3. **Talk less, listen more.** If you're talking more than 30% of the time, you're doing it wrong.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Red Flags (print these as warnings in the script)
|
|
24
|
+
|
|
25
|
+
| Red Flag | What It Really Means | What to Do Instead |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| "That sounds great!" | They're being polite | Ask: "When was the last time you had this problem?" |
|
|
28
|
+
| "I would definitely use that" | Future promises are worthless | Ask: "What did you do LAST TIME this happened?" |
|
|
29
|
+
| "Yeah, that's a problem" | Generic agreement, no signal | Ask: "Can you walk me through the last time?" |
|
|
30
|
+
| "I'd pay for that" | Talk is cheap | Ask: "How much do you spend on [current solution] now?" |
|
|
31
|
+
| They change the subject | They don't actually care | Note it. This problem isn't top of mind for them. |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Generate the Interview Script
|
|
36
|
+
|
|
37
|
+
Based on {{ args[0] }}, generate a ready-to-use script. Ask the user first:
|
|
38
|
+
|
|
39
|
+
> **"In 1-2 sentences, what problem does {{ args[0] }} solve and who has this problem?"**
|
|
40
|
+
|
|
41
|
+
Then generate the full script:
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### Opening (~2 min)
|
|
46
|
+
|
|
47
|
+
**Goal:** Build rapport. Set the frame. Don't bias them.
|
|
48
|
+
|
|
49
|
+
Script:
|
|
50
|
+
```
|
|
51
|
+
"Thanks for taking the time. I'm trying to understand how people
|
|
52
|
+
deal with [problem area — NOT your solution]. I'm not selling anything.
|
|
53
|
+
I just want to learn about your experience.
|
|
54
|
+
|
|
55
|
+
There are no right or wrong answers. I'm most interested in stories
|
|
56
|
+
about what you actually do day to day."
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**DO NOT** say: "I'm building X and want your feedback." That biases everything.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
### Group 1: Understanding Their World (5 questions)
|
|
64
|
+
|
|
65
|
+
**Goal:** Understand their current workflow. What do they do today?
|
|
66
|
+
|
|
67
|
+
1. "Can you walk me through how you handle [problem area] right now?"
|
|
68
|
+
2. "What does a typical [day/week] look like when you're dealing with this?"
|
|
69
|
+
3. "What tools or processes do you use for this today?"
|
|
70
|
+
4. "What's the most annoying part of how you do this now?"
|
|
71
|
+
5. "If you could wave a magic wand and fix one thing about this, what would it be?"
|
|
72
|
+
|
|
73
|
+
**For each answer:** Follow up with "Can you give me a specific example?" and "When was the last time that happened?"
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### Group 2: Finding the Pain (4 questions)
|
|
78
|
+
|
|
79
|
+
**Goal:** How bad is the problem? Are they actively trying to fix it?
|
|
80
|
+
|
|
81
|
+
6. "How often does [the problem] come up? Daily? Weekly? Monthly?"
|
|
82
|
+
7. "The last time this happened, what did you do? Walk me through it step by step."
|
|
83
|
+
8. "Have you tried to find a better way to handle this? What did you try?"
|
|
84
|
+
9. "Have you spent any money trying to solve this? How much?"
|
|
85
|
+
|
|
86
|
+
**Key signal:** If they haven't tried to solve it or spent money on it, the pain might not be bad enough.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### Group 3: Checking Importance (5 questions)
|
|
91
|
+
|
|
92
|
+
**Goal:** Is this a top-3 problem or just a minor annoyance?
|
|
93
|
+
|
|
94
|
+
10. "Where does this problem rank in your list of headaches? Top 3? Top 10?"
|
|
95
|
+
11. "If this problem disappeared tomorrow, how much would your life change?"
|
|
96
|
+
12. "What other problems compete for your attention and budget right now?"
|
|
97
|
+
13. "Have you ever started fixing this and then stopped? Why?"
|
|
98
|
+
14. "If someone solved this for you, what would that free you up to do?"
|
|
99
|
+
|
|
100
|
+
**Key signal:** If it's not in their top 3, they won't pay for a solution or change their behavior.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### Closing (~2 min)
|
|
105
|
+
|
|
106
|
+
**Goal:** Get referrals and next steps.
|
|
107
|
+
|
|
108
|
+
Script:
|
|
109
|
+
```
|
|
110
|
+
"This has been really helpful. A couple more quick things:
|
|
111
|
+
|
|
112
|
+
- Is there anything about [problem area] that I should have asked
|
|
113
|
+
but didn't?
|
|
114
|
+
- Do you know 2-3 other people who deal with this same problem?
|
|
115
|
+
I'd love to talk to them too.
|
|
116
|
+
- Would it be okay if I followed up in a few weeks with a quick update?"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Scoring Rubric
|
|
122
|
+
|
|
123
|
+
After the interview, score the signal strength:
|
|
124
|
+
|
|
125
|
+
| Signal | Score | What It Means |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| They described the problem with emotion and detail | STRONG | Real pain, they care |
|
|
128
|
+
| They've spent money or significant time trying to solve it | STRONG | Willing to pay |
|
|
129
|
+
| They asked YOU when it would be ready | STRONG | Pull signal — they want this |
|
|
130
|
+
| They offered to introduce you to others with the problem | STRONG | They think this matters |
|
|
131
|
+
| They gave generic answers, no specific stories | WEAK | Problem might not be real for them |
|
|
132
|
+
| They were polite but didn't share any struggles | WEAK | No pain here |
|
|
133
|
+
| They said "cool idea" but had no personal experience | NONE | Wrong person or wrong problem |
|
|
134
|
+
|
|
135
|
+
### After the Interview
|
|
136
|
+
|
|
137
|
+
Count your signals:
|
|
138
|
+
|
|
139
|
+
- **3+ STRONG signals** = This problem is real. Keep digging with more interviews.
|
|
140
|
+
- **1-2 STRONG signals** = Promising but need more data. Interview 3-5 more people.
|
|
141
|
+
- **0 STRONG signals** = Wrong person or wrong problem. Try a different audience or rethink.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Output
|
|
146
|
+
|
|
147
|
+
Show the user:
|
|
148
|
+
1. The complete interview script (ready to print/copy)
|
|
149
|
+
2. The red flags cheat sheet (keep it visible during the interview)
|
|
150
|
+
3. The scoring rubric (fill in after each interview)
|
|
151
|
+
|
|
152
|
+
**Remind the user:** Talk to at least 5 people before making any decisions. One interview is not enough data.
|
|
153
|
+
|
|
154
|
+
**Next step:** After 5+ interviews, run `/spartan:validate` to score the idea based on what you learned.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spartan:kickoff
|
|
3
|
+
description: "Start a new idea: create project folder, brainstorm, then validate top picks (Stages 1-2)"
|
|
4
|
+
argument-hint: "[theme or problem space]"
|
|
5
|
+
preamble-tier: 3
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Kickoff: {{ args[0] | default: "new idea" }}
|
|
9
|
+
|
|
10
|
+
Runs Brainstorm + Validate back to back. Gets you to a GO / PASS decision fast.
|
|
11
|
+
|
|
12
|
+
If the user already has a specific idea (not a theme), skip brainstorm and go straight to validate.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Step 1: Setup
|
|
17
|
+
|
|
18
|
+
Create project folder with stage subfolders:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
mkdir -p "projects/{{ args[0] | default: "new-idea" }}"/{01-brainstorm,02-interviews,03-validation,04-research,05-pitch}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Step 2: Brainstorm
|
|
27
|
+
|
|
28
|
+
Run `/spartan:brainstorm {{ args[0] | default: "" }}` internally — don't tell the user to run it separately.
|
|
29
|
+
|
|
30
|
+
This will:
|
|
31
|
+
1. Set the frame: space, target user, limits, goal
|
|
32
|
+
2. Generate 8-15 ideas
|
|
33
|
+
3. Rate each: demand signal, buildability, moat (0-5)
|
|
34
|
+
4. Pick top 3
|
|
35
|
+
5. Save to `projects/{{ args[0] }}/01-brainstorm/brainstorm-session.md`
|
|
36
|
+
|
|
37
|
+
### Gate 1
|
|
38
|
+
|
|
39
|
+
Show top 3 to user. Ask:
|
|
40
|
+
> "Which ones should I validate? Or brainstorm more?"
|
|
41
|
+
|
|
42
|
+
Wait for answer before continuing.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Step 3: Validate
|
|
47
|
+
|
|
48
|
+
Run `/spartan:validate` internally for each picked idea.
|
|
49
|
+
|
|
50
|
+
This will:
|
|
51
|
+
1. Problem check (real pain or nice-to-have?)
|
|
52
|
+
2. Quick market check
|
|
53
|
+
3. Quick competitor check
|
|
54
|
+
4. Distribution check
|
|
55
|
+
5. Build check
|
|
56
|
+
6. Give verdict: GO / TEST MORE / PASS
|
|
57
|
+
7. Save to `projects/{{ args[0] }}/03-validation/validation-{idea-name}.md`
|
|
58
|
+
|
|
59
|
+
### Gate 2
|
|
60
|
+
|
|
61
|
+
Show verdicts:
|
|
62
|
+
- If any **GO**: "Want me to run `/spartan:deep-dive` on this?"
|
|
63
|
+
- If all **PASS**: "These didn't make it. Want to `/spartan:brainstorm` a different space?"
|
|
64
|
+
- If **TEST MORE**: "Here's the cheapest test for each. Try those first."
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Rules
|
|
69
|
+
|
|
70
|
+
- Don't rush through gates. Pause and ask.
|
|
71
|
+
- It's fine if nothing passes. That saves months of building the wrong thing.
|
|
72
|
+
- If the user already has a specific idea (not a theme), skip brainstorm and go straight to validate.
|
|
73
|
+
- You are the orchestrator — run brainstorm and validate yourself, don't tell the user to chain commands.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spartan:kotlin-service
|
|
3
|
+
description: Scaffold a new Kotlin Micronaut microservice following Spartan conventions and company rules
|
|
4
|
+
argument-hint: "[service-name] [brief description]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are scaffolding a new Kotlin Micronaut microservice for the Spartan platform.
|
|
8
|
+
|
|
9
|
+
**Before scaffolding, read these company rules:**
|
|
10
|
+
- `rules/shared-backend/ARCHITECTURE.md` — Layered architecture
|
|
11
|
+
- `rules/backend-micronaut/KOTLIN.md` — Kotlin conventions
|
|
12
|
+
- `rules/database/SCHEMA.md` — Schema standards
|
|
13
|
+
- `rules/backend-micronaut/API_DESIGN.md` — API design patterns
|
|
14
|
+
|
|
15
|
+
## Service: {{ args[0] }}
|
|
16
|
+
## Purpose: {{ args[1] }}
|
|
17
|
+
|
|
18
|
+
Follow these steps exactly:
|
|
19
|
+
|
|
20
|
+
### 1. Gather Context
|
|
21
|
+
Ask the user:
|
|
22
|
+
- What domain events does this service produce/consume?
|
|
23
|
+
- What external dependencies (DB, Kafka, Redis, HTTP clients)?
|
|
24
|
+
- What are the main domain entities?
|
|
25
|
+
- Any specific SLA requirements?
|
|
26
|
+
|
|
27
|
+
**Auto mode on?** → Infer from service name and description. Default: PostgreSQL, no Kafka, no Redis, standard REST. Proceed to scaffold immediately.
|
|
28
|
+
**Auto mode off?** → Wait for answers before proceeding.
|
|
29
|
+
|
|
30
|
+
### 2. Scaffold Directory Structure
|
|
31
|
+
|
|
32
|
+
Create the following structure under `src/main/kotlin/com/spartan/{{ args[0] }}/`:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
controller/ # @Controller classes, @Secured, @ExecuteOn
|
|
36
|
+
manager/ # Business logic interfaces + implementations (returns Either)
|
|
37
|
+
service/ # External API calls (HTTP clients)
|
|
38
|
+
repository/ # Database access (Exposed ORM)
|
|
39
|
+
model/ # Entities, DTOs, enums, value objects
|
|
40
|
+
config/ # Micronaut configuration classes
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 3. Create Base Files
|
|
44
|
+
|
|
45
|
+
**build.gradle.kts** — include:
|
|
46
|
+
- io.micronaut:micronaut-http-server-netty
|
|
47
|
+
- org.jetbrains.exposed:exposed-core
|
|
48
|
+
- io.micronaut:micronaut-management
|
|
49
|
+
- kotlinx-coroutines-reactor
|
|
50
|
+
- testcontainers (test scope)
|
|
51
|
+
- kotest or junit5
|
|
52
|
+
|
|
53
|
+
**application.yml** — with:
|
|
54
|
+
- micronaut.application.name
|
|
55
|
+
- management endpoints (`/health`, `/info`)
|
|
56
|
+
- placeholder for datasource (use env vars: `DATASOURCES_DEFAULT_URL`, etc.)
|
|
57
|
+
|
|
58
|
+
**Main Application class**:
|
|
59
|
+
```kotlin
|
|
60
|
+
fun main(args: Array<String>) {
|
|
61
|
+
Micronaut.run(Application::class.java, *args)
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Base error handling** — use Arrow's Either (per CORE_RULES):
|
|
66
|
+
```kotlin
|
|
67
|
+
// All Manager methods return Either<ClientException, T>
|
|
68
|
+
// NEVER use sealed class Result<T> — use Either instead
|
|
69
|
+
// NEVER throw exceptions for business errors
|
|
70
|
+
|
|
71
|
+
suspend fun findUser(id: UUID): Either<ClientException, UserResponse> {
|
|
72
|
+
val user = userRepository.findById(id)
|
|
73
|
+
?: return UserError.NOT_FOUND.asException().left()
|
|
74
|
+
return user.toResponse().right()
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 4. Create First Test
|
|
79
|
+
|
|
80
|
+
Create `src/test/kotlin/.../ApplicationContextTest.kt`:
|
|
81
|
+
```kotlin
|
|
82
|
+
@MicronautTest
|
|
83
|
+
class ApplicationContextTest {
|
|
84
|
+
@Test
|
|
85
|
+
fun `application context loads`() { }
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 5. Create Flyway Migration
|
|
90
|
+
|
|
91
|
+
If PostgreSQL is a dependency:
|
|
92
|
+
- `src/main/resources/db/migration/V1__create_initial_schema.sql`
|
|
93
|
+
- Include base tables for the main domain entities
|
|
94
|
+
|
|
95
|
+
### 6. Docker Compose for local dev
|
|
96
|
+
|
|
97
|
+
Create `docker-compose.yml` with:
|
|
98
|
+
- postgres:16 with healthcheck
|
|
99
|
+
- (if Kafka) confluentinc/cp-kafka with zookeeper
|
|
100
|
+
|
|
101
|
+
### 7. README.md
|
|
102
|
+
|
|
103
|
+
Include:
|
|
104
|
+
- Service description
|
|
105
|
+
- Local setup instructions
|
|
106
|
+
- Environment variables table
|
|
107
|
+
- Key architectural decisions
|
|
108
|
+
|
|
109
|
+
After scaffolding, run the TDD skill to write the first domain test.
|