@lenne.tech/cli 1.2.0 → 1.3.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 (36) hide show
  1. package/build/commands/claude/install-plugin.js +339 -0
  2. package/package.json +1 -1
  3. package/build/commands/claude/install-commands.js +0 -337
  4. package/build/commands/claude/install-mcps.js +0 -258
  5. package/build/commands/claude/install-skills.js +0 -693
  6. package/build/lib/mcp-registry.js +0 -80
  7. package/build/templates/claude-commands/code-cleanup.md +0 -82
  8. package/build/templates/claude-commands/commit-message.md +0 -21
  9. package/build/templates/claude-commands/create-story.md +0 -435
  10. package/build/templates/claude-commands/mr-description-clipboard.md +0 -48
  11. package/build/templates/claude-commands/mr-description.md +0 -33
  12. package/build/templates/claude-commands/sec-review.md +0 -62
  13. package/build/templates/claude-commands/skill-optimize.md +0 -481
  14. package/build/templates/claude-commands/test-generate.md +0 -45
  15. package/build/templates/claude-skills/building-stories-with-tdd/SKILL.md +0 -265
  16. package/build/templates/claude-skills/building-stories-with-tdd/code-quality.md +0 -276
  17. package/build/templates/claude-skills/building-stories-with-tdd/database-indexes.md +0 -182
  18. package/build/templates/claude-skills/building-stories-with-tdd/examples.md +0 -1383
  19. package/build/templates/claude-skills/building-stories-with-tdd/handling-existing-tests.md +0 -197
  20. package/build/templates/claude-skills/building-stories-with-tdd/reference.md +0 -1427
  21. package/build/templates/claude-skills/building-stories-with-tdd/security-review.md +0 -307
  22. package/build/templates/claude-skills/building-stories-with-tdd/workflow.md +0 -1004
  23. package/build/templates/claude-skills/generating-nest-servers/SKILL.md +0 -303
  24. package/build/templates/claude-skills/generating-nest-servers/configuration.md +0 -285
  25. package/build/templates/claude-skills/generating-nest-servers/declare-keyword-warning.md +0 -133
  26. package/build/templates/claude-skills/generating-nest-servers/description-management.md +0 -226
  27. package/build/templates/claude-skills/generating-nest-servers/examples.md +0 -893
  28. package/build/templates/claude-skills/generating-nest-servers/framework-guide.md +0 -259
  29. package/build/templates/claude-skills/generating-nest-servers/quality-review.md +0 -864
  30. package/build/templates/claude-skills/generating-nest-servers/reference.md +0 -487
  31. package/build/templates/claude-skills/generating-nest-servers/security-rules.md +0 -371
  32. package/build/templates/claude-skills/generating-nest-servers/verification-checklist.md +0 -262
  33. package/build/templates/claude-skills/generating-nest-servers/workflow-process.md +0 -1061
  34. package/build/templates/claude-skills/using-lt-cli/SKILL.md +0 -284
  35. package/build/templates/claude-skills/using-lt-cli/examples.md +0 -546
  36. package/build/templates/claude-skills/using-lt-cli/reference.md +0 -513
@@ -1,80 +0,0 @@
1
- "use strict";
2
- /**
3
- * MCP (Model Context Protocol) Server Registry
4
- *
5
- * Add new MCPs here to make them available for installation.
6
- * Each MCP entry defines:
7
- * - name: Display name for the MCP
8
- * - description: Short description of what the MCP does
9
- * - command: The full claude mcp add command to install it
10
- * - npmPackage: The npm package name (for reference)
11
- * - category: Optional category for grouping
12
- */
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.MCP_REGISTRY = void 0;
15
- exports.getAllMcps = getAllMcps;
16
- exports.getCategories = getCategories;
17
- exports.getMcpById = getMcpById;
18
- exports.getMcpsByCategory = getMcpsByCategory;
19
- /**
20
- * Registry of available MCPs
21
- * Add new MCPs here to make them available via `lt claude install-mcps`
22
- */
23
- exports.MCP_REGISTRY = [
24
- {
25
- category: 'devtools',
26
- command: 'chrome-devtools -- npx chrome-devtools-mcp@latest',
27
- description: 'Chrome DevTools integration for debugging web applications',
28
- id: 'chrome-devtools',
29
- name: 'Chrome DevTools',
30
- npmPackage: 'chrome-devtools-mcp',
31
- url: 'https://www.npmjs.com/package/chrome-devtools-mcp',
32
- },
33
- {
34
- category: 'project-management',
35
- command: 'linear https://mcp.linear.app/mcp',
36
- description: 'Linear integration for issue tracking and project management',
37
- id: 'linear',
38
- name: 'Linear',
39
- transport: 'http',
40
- url: 'https://linear.app/docs/mcp',
41
- },
42
- // Add more MCPs here as needed:
43
- // {
44
- // id: 'example-mcp',
45
- // name: 'Example MCP',
46
- // description: 'Description of what this MCP does',
47
- // npmPackage: 'example-mcp-package',
48
- // command: 'example-mcp -- npx example-mcp-package@latest',
49
- // category: 'category-name',
50
- // url: 'https://example.com',
51
- // },
52
- ];
53
- /**
54
- * Get all available MCPs
55
- */
56
- function getAllMcps() {
57
- return exports.MCP_REGISTRY;
58
- }
59
- /**
60
- * Get all unique categories
61
- */
62
- function getCategories() {
63
- const categories = exports.MCP_REGISTRY
64
- .map(mcp => mcp.category)
65
- .filter((cat) => !!cat);
66
- return [...new Set(categories)];
67
- }
68
- /**
69
- * Get MCP by ID
70
- */
71
- function getMcpById(id) {
72
- return exports.MCP_REGISTRY.find(mcp => mcp.id === id);
73
- }
74
- /**
75
- * Get MCPs by category
76
- */
77
- function getMcpsByCategory(category) {
78
- return exports.MCP_REGISTRY.filter(mcp => mcp.category === category);
79
- }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tY3AtcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7O0dBVUc7OztBQTJESCxnQ0FFQztBQUtELHNDQUtDO0FBS0QsZ0NBRUM7QUFLRCw4Q0FFQztBQWhFRDs7O0dBR0c7QUFDVSxRQUFBLFlBQVksR0FBZTtJQUN0QztRQUNFLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE9BQU8sRUFBRSxtREFBbUQ7UUFDNUQsV0FBVyxFQUFFLDREQUE0RDtRQUN6RSxFQUFFLEVBQUUsaUJBQWlCO1FBQ3JCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsVUFBVSxFQUFFLHFCQUFxQjtRQUNqQyxHQUFHLEVBQUUsbURBQW1EO0tBQ3pEO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsb0JBQW9CO1FBQzlCLE9BQU8sRUFBRSxtQ0FBbUM7UUFDNUMsV0FBVyxFQUFFLDhEQUE4RDtRQUMzRSxFQUFFLEVBQUUsUUFBUTtRQUNaLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLE1BQU07UUFDakIsR0FBRyxFQUFFLDZCQUE2QjtLQUNuQztJQUNELGdDQUFnQztJQUNoQyxJQUFJO0lBQ0osdUJBQXVCO0lBQ3ZCLHlCQUF5QjtJQUN6QixzREFBc0Q7SUFDdEQsdUNBQXVDO0lBQ3ZDLDhEQUE4RDtJQUM5RCwrQkFBK0I7SUFDL0IsZ0NBQWdDO0lBQ2hDLEtBQUs7Q0FDTixDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFnQixVQUFVO0lBQ3hCLE9BQU8sb0JBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhO0lBQzNCLE1BQU0sVUFBVSxHQUFHLG9CQUFZO1NBQzVCLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDeEIsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLEVBQVU7SUFDbkMsT0FBTyxvQkFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsUUFBZ0I7SUFDaEQsT0FBTyxvQkFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDL0QsQ0FBQyJ9
@@ -1,82 +0,0 @@
1
- ---
2
- description: Clean up and optimize code quality
3
- ---
4
-
5
- Perform a complete code cleanup:
6
-
7
- ## 📦 1. Import Optimization
8
-
9
- For all modified TypeScript files:
10
- - [ ] Sort imports alphabetically
11
- - [ ] Grouping: External → @lenne.tech → Local
12
- - [ ] Remove unused imports
13
- - [ ] Remove duplicate imports
14
-
15
- ## 🔤 2. Property Ordering
16
-
17
- For all Model/Input/Object files:
18
- - [ ] Sort properties alphabetically
19
- - [ ] Decorators consistently ordered
20
- - [ ] Same order in Model, CreateInput, UpdateInput
21
-
22
- ## 📝 3. Description Management
23
-
24
- Check all descriptions:
25
- - [ ] Format: "ENGLISH (DEUTSCH)" for German terms
26
- - [ ] Format: "ENGLISH" for English terms
27
- - [ ] Consistency: Same description in Model + Inputs
28
- - [ ] Class-level descriptions present (@ObjectType, @InputType)
29
- - [ ] No missing descriptions
30
-
31
- ## ♻️ 4. Code Refactoring
32
-
33
- Search for duplicated code:
34
- - [ ] Is code repeated 2+ times?
35
- - [ ] Can it be extracted into private methods?
36
- - [ ] Are similar code paths consolidatable?
37
- - [ ] Helper functions useful?
38
-
39
- ## 🧹 5. Debug Code Removal
40
-
41
- Remove development code:
42
- - [ ] All console.log() statements
43
- - [ ] All console.debug/warn/error (except production logging)
44
- - [ ] Commented-out code
45
- - [ ] Review TODO/FIXME comments
46
-
47
- ## ✨ 6. Formatting
48
-
49
- Check code formatting:
50
- - [ ] Consistent indentation (2 or 4 spaces)
51
- - [ ] No extra blank lines
52
- - [ ] Add missing blank lines between sections
53
- - [ ] Remove trailing whitespace
54
-
55
- ## 🔧 7. Build & Lint
56
-
57
- Run automatic checks:
58
- ```bash
59
- # TypeScript Compilation
60
- npm run build
61
-
62
- # Linting
63
- npm run lint
64
-
65
- # Optional: Auto-Fix
66
- npm run lint:fix
67
- ```
68
-
69
- Fix all errors and warnings!
70
-
71
- ## ✅ Final Check
72
-
73
- - [ ] All imports optimized
74
- - [ ] All properties sorted
75
- - [ ] All descriptions correct
76
- - [ ] Code refactored (DRY)
77
- - [ ] Debug code removed
78
- - [ ] Build successful
79
- - [ ] Lint successful
80
- - [ ] Tests still passing
81
-
82
- **Only when everything is ✅: Cleanup completed!**
@@ -1,21 +0,0 @@
1
- ---
2
- description: Generate commit message with alternatives
3
- ---
4
-
5
- Analyze the current changes compared to the last git commit (`git diff`) and create a commit message.
6
-
7
- **Requirements:**
8
- - Write in English
9
- - Keep it short: one concise sentence
10
- - Focus on WHAT changed and WHY, not HOW
11
-
12
- **Output format:**
13
- Provide exactly 3 alternatives:
14
-
15
- ```
16
- 1. [your first commit message suggestion]
17
- 2. [your second commit message suggestion]
18
- 3. [your third commit message suggestion]
19
- ```
20
-
21
- Then add: "💡 **Copy your preferred message to use with `git commit -am \"...\"`**"
@@ -1,435 +0,0 @@
1
- ---
2
- description: Create a user story for TDD implementation
3
- ---
4
-
5
- # User Story erstellen
6
-
7
- Guide the user through creating a well-structured user story that can be used as a prompt for Claude Code to implement with Test-Driven Development (TDD).
8
-
9
- ## When to Use This Command
10
-
11
- - Planning and documenting new features
12
- - Preparing user stories for TDD implementation
13
- - Capturing requirements in a structured format
14
- - Creating stories for Linear tickets or documentation
15
-
16
- **IMPORTANT: The generated story and all user-facing communication must ALWAYS be in German, regardless of the user's input language. Exceptions: Properties (camelCase), code snippets, and technical terms remain in English.**
17
-
18
- **ABORT HANDLING: If the user wants to cancel at any point (e.g., "abbrechen", "stop", "cancel", "nicht mehr"), acknowledge it (in German): "Okay, Story-Erstellung abgebrochen." and stop the process.**
19
-
20
- ---
21
-
22
- ## Guidelines for Good Stories
23
-
24
- Keep these guidelines in mind when generating the story:
25
-
26
- ### INVEST Criteria (Quality Check)
27
-
28
- Every story should be checked against these criteria:
29
-
30
- - **Independent** - Can be implemented without depending on other stories
31
- - **Negotiable** - Open for discussion and refinement
32
- - **Valuable** - Delivers real, tangible value to the user (not just technical tasks)
33
- - **Small** - Completable within a single sprint (if too large, suggest splitting)
34
- - **Testable** - Has measurable acceptance criteria
35
-
36
- ### 3C Model
37
-
38
- - **Card** - Concise title that fits on a notecard
39
- - **Conversation** - Story emerges from dialogue (Gap Analysis enables this)
40
- - **Confirmation** - Clear acceptance criteria define "done"
41
-
42
- ### Emotional Narrative
43
-
44
- The story should convey the **user's emotional experience**, not just technical functionality. Ask "Why does this matter to the user?" - use the **5 Whys technique** if the reason is unclear.
45
-
46
- ### Title
47
-
48
- - Keep short (max 10 words)
49
- - Format: "[Rolle] möchte [Feature], damit [Kurze Begründung]"
50
-
51
- ### Acceptance Criteria
52
-
53
- - Aim for **4-8 criteria** per story
54
- - Start with action verbs (kann, soll, muss)
55
- - Be specific and measurable - focus on *what*, not *how*
56
- - Include both positive and negative cases
57
- - Consider: authentication, authorization, validation, persistence
58
- - **Optional Gherkin format** for complex criteria:
59
- ```
60
- Gegeben [Ausgangssituation]
61
- Wenn [Aktion]
62
- Dann [Erwartetes Ergebnis]
63
- ```
64
-
65
- ### Properties
66
-
67
- - **Only include if user explicitly specifies them** - do not auto-generate
68
- - Use camelCase for property names
69
- - Provide BOTH English AND German descriptions
70
- - Specify relationships clearly (e.g., "Referenz auf User-Entität")
71
-
72
- ### For TDD
73
-
74
- - Each acceptance criterion becomes at least one test
75
- - Consider edge cases that need explicit tests
76
- - Think about security tests (permission-denied scenarios)
77
-
78
- ---
79
-
80
- ## Step 1: Collect Initial Thoughts
81
-
82
- **Ask the user to share their story idea (in German):**
83
-
84
- "Bitte beschreibe deine User Story Idee. Teile so viele Details wie möglich mit:
85
- - Wer braucht dieses Feature (Rolle/Nutzertyp)?
86
- - Was soll erreicht werden?
87
- - Warum wird es benötigt?
88
- - Spezifische Anforderungen oder Properties?
89
- - Technische Hinweise?
90
-
91
- Schreib einfach deine Gedanken auf - ich helfe dir, sie in eine strukturierte User Story zu bringen."
92
-
93
- **Wait for the user's response before proceeding.**
94
-
95
- ---
96
-
97
- ## Step 2: Analyze and Identify Gaps
98
-
99
- After receiving the user's input, analyze it against this checklist:
100
-
101
- ### Required Elements Checklist
102
-
103
- **Basic Story Elements:**
104
- - [ ] **Role** - Who is the user? (Admin, Customer, Guest, etc.)
105
- - [ ] **Feature** - What do they want to achieve?
106
- - [ ] **Reason** - Why do they need this? What's the benefit?
107
-
108
- **Description Details:**
109
- - [ ] **Context** - Background information, which system/module?
110
- - [ ] **Requirements** - Specific functional requirements
111
- - [ ] **Properties** (optional) - Data fields with types (if applicable)
112
- - [ ] **Notes** (optional) - Technical hints, constraints, special logic
113
-
114
- **Quality Criteria:**
115
- - [ ] **Acceptance Criteria** - Testable conditions for success
116
- - [ ] **Security Considerations** - Who can access/modify? (permissions)
117
- - [ ] **Edge Cases** - What happens in special situations?
118
-
119
- ### Gap Analysis
120
-
121
- For each missing or unclear element, formulate a **specific question in German** using the AskUserQuestion tool:
122
-
123
- **Fehlende Rolle:**
124
- - "Wer wird dieses Feature nutzen? (z.B. Admin, Kunde, Gast, Entwickler)"
125
-
126
- **Fehlendes Feature/Ziel:**
127
- - "Was genau soll der Nutzer tun können?"
128
-
129
- **Fehlende Begründung:**
130
- - "Welchen Nutzen bringt dieses Feature? Welches Problem löst es?"
131
-
132
- **Fehlende Properties (only ask if the feature involves data entities):**
133
- - "Welche Daten müssen gespeichert werden? Bitte liste die Properties mit ihren Typen auf (string, number, boolean, Date, enum, Referenz)"
134
-
135
- **Fehlende Akzeptanzkriterien:**
136
- - "Wie können wir überprüfen, dass das Feature funktioniert? Was sind die Erfolgsbedingungen?"
137
-
138
- **Unklare Sicherheit:**
139
- - "Wer soll Zugriff auf dieses Feature haben? Gibt es Berechtigungseinschränkungen?"
140
-
141
- **Fehlende Edge Cases:**
142
- - "Gibt es Sonderfälle zu beachten? Was soll passieren, wenn [konkretes Szenario]?"
143
-
144
- ### Questioning Strategy
145
-
146
- 1. **Ask only about missing/unclear elements** - Don't ask for information already provided
147
- 2. **Be specific** - Reference what was said and ask for clarification
148
- 3. **Group related questions** - Ask 2-4 questions at once, not one by one
149
- 4. **Suggest improvements** - If something seems incomplete, suggest additions
150
- 5. **Accept refusal gracefully** - If the user refuses to answer or provides no input, accept it and make the best of available information
151
-
152
- **Example question (in German):**
153
- "Deine Story-Idee ist klar bezüglich des Grundfeatures. Ich brauche noch ein paar Details:
154
- 1. Du hast erwähnt, dass Admins Items verwalten können - können Gäste sie auch sehen?
155
- 2. Sollen die Items eine bestimmte Reihenfolge/Position haben?
156
- 3. Was passiert, wenn jemand versucht, ein Item zu löschen, das anderswo referenziert wird?"
157
-
158
- **If user refuses or skips questions:**
159
- - Accept the decision without pushing further
160
- - **Proactively suggest reasonable completions** based on context and common patterns
161
- - Present suggestions to the user for confirmation before including them
162
- - Proceed with available information after user confirmation
163
-
164
- ### Proactive Suggestion Strategy
165
-
166
- When the user doesn't provide information for certain areas, **don't just leave gaps** - actively suggest sensible completions:
167
-
168
- **For missing Role:**
169
- - Analyze the feature context to infer the most likely user role
170
- - Suggest: "Da es um Verwaltungsfunktionen geht, nehme ich an, dass ein **Admin** diese nutzen soll. Passt das?"
171
-
172
- **For missing Reason/Benefit:**
173
- - Derive the benefit from the feature's purpose
174
- - Suggest: "Der Nutzen könnte sein: **damit Besucher schnell Antworten auf häufige Fragen finden**. Soll ich das so übernehmen?"
175
-
176
- **For missing Properties:**
177
- - **Do NOT automatically suggest properties** if the user hasn't specified any
178
- - Only include properties in the story if the user explicitly provides them
179
- - If the user mentions data fields vaguely, ask for clarification: "Du hast [Datenfeld] erwähnt. Möchtest du die Properties genauer spezifizieren, oder soll das der Implementierung überlassen werden?"
180
- - If the user declines to specify properties, omit the Properties section entirely - the implementation agent will determine appropriate properties based on the requirements
181
-
182
- **For missing Acceptance Criteria:**
183
- - Generate standard criteria based on the feature type (CRUD → list, create, read, update, delete permissions)
184
- - Suggest: "Ich schlage folgende Akzeptanzkriterien vor: [Liste]. Möchtest du welche anpassen oder ergänzen?"
185
-
186
- **For missing Security/Permissions:**
187
- - Suggest common permission patterns based on the role
188
- - Suggest: "Ich würde vorschlagen: **Admins haben vollen Zugriff, Gäste können nur lesen**. Ist das korrekt?"
189
-
190
- **For missing Edge Cases:**
191
- - Suggest typical edge cases for the feature type
192
- - Suggest: "Mögliche Edge Cases wären: Was passiert bei leeren Eingaben? Bei Duplikaten? Bei Löschung referenzierter Daten?"
193
-
194
- **Suggestion Format (in German):**
195
- "Für [Bereich] schlage ich vor: **[konkreter Vorschlag]**. Passt das so, oder möchtest du etwas ändern?"
196
-
197
- **Important:**
198
- - Always present suggestions as proposals, not decisions
199
- - Let the user confirm, modify, or reject each suggestion
200
- - If the user confirms with just "ja", "ok", "passt", accept the suggestion and proceed
201
- - **Integrate confirmed suggestions directly into the story** - the final story should only contain definitive requirements, not assumptions or proposals
202
- - The user should be able to review the complete story and request changes before finalizing
203
-
204
- ---
205
-
206
- ## Step 3: Validate Completeness
207
-
208
- Once all information is gathered, perform a final validation:
209
-
210
- ### INVEST Check
211
-
212
- - **Independent:** Does this story depend on other stories? If yes, note dependencies or suggest splitting.
213
- - **Valuable:** Is the user value clear? If the "damit" part is weak, use 5 Whys to dig deeper:
214
- - "Warum ist das wichtig?" → Answer → "Und warum ist das wichtig?" → repeat until real value emerges
215
- - **Small:** Can this be completed in one sprint? If too large, suggest splitting into smaller stories (in German):
216
- - "Diese Story scheint recht umfangreich. Sollen wir sie in kleinere Stories aufteilen?"
217
- - **Testable:** Are all acceptance criteria measurable and verifiable?
218
-
219
- ### Coherence Check
220
- - Does the feature make sense as described?
221
- - Are the requirements internally consistent?
222
- - Do the acceptance criteria cover all requirements (aim for 4-8)?
223
- - Are there any contradictions?
224
-
225
- ### Emotional Value Check
226
- - Does the story convey why this matters to the user?
227
- - Is it more than just a technical task?
228
- - If the narrative feels dry, ask (in German): "Was ist der eigentliche Nutzen für den Anwender? Welches Problem wird gelöst?"
229
-
230
- ### TDD Readiness Check
231
- - Can each acceptance criterion be converted to a test?
232
- - Are the properties clear enough for implementation?
233
- - Is the security model defined?
234
-
235
- **If issues found:** Ask clarifying questions (in German) before proceeding.
236
-
237
- **If complete:** Proceed to Step 4.
238
-
239
- ---
240
-
241
- ## Step 4: Generate and Present Story
242
-
243
- Generate the complete user story in the standard format and **present it to the user first**.
244
-
245
- **Display the story in a clearly marked code block** so the user can:
246
- - Review and discuss the story
247
- - Request changes or optimizations
248
- - Copy it if needed
249
-
250
- After presenting the story, ask (in German): "Ist die Story so in Ordnung, oder möchtest du noch etwas anpassen?"
251
-
252
- **If changes requested:** Make the adjustments and present the updated story again.
253
-
254
- **If approved:** Proceed to Step 5 (Ask for Output Format).
255
-
256
- ### Story Format (German)
257
-
258
- ```markdown
259
- # [Titel - Rolle möchte Feature, damit Begründung]
260
-
261
- **Story:** Als [Rolle] möchte ich [Feature], damit [Begründung].
262
-
263
- ## Beschreibung
264
-
265
- [Ausführliche Beschreibung]
266
-
267
- ### Kontext
268
- [Hintergrund und Systemkontext]
269
-
270
- ### Anforderungen
271
- [Liste der spezifischen Anforderungen]
272
-
273
- ### Properties (optional - nur wenn vom Nutzer explizit angegeben)
274
-
275
- | Property | Type | Required | Description (EN) | Beschreibung (DE) |
276
- |------------|--------|----------|--------------------|----------------------|
277
- | example | string | yes | Example property | Beispiel-Eigenschaft |
278
-
279
- [Diesen Abschnitt komplett weglassen, wenn der Nutzer keine Properties angegeben hat]
280
-
281
- ### Hinweise (optional)
282
- [Technische Hinweise, Einschränkungen, spezielle Logik - nur wenn relevant]
283
-
284
- ## Akzeptanzkriterien
285
-
286
- - [ ] [Testbares Kriterium 1]
287
- - [ ] [Testbares Kriterium 2]
288
- - [ ] [Sicherheitskriterium]
289
- - [ ] [Edge-Case-Kriterium]
290
- ```
291
-
292
- ---
293
-
294
- ## Step 5: Ask for Output Format
295
-
296
- Once the user approves the story, use the AskUserQuestion tool to ask (in German):
297
-
298
- **Question:** "Wie möchtest du mit dieser Story fortfahren?"
299
-
300
- **Options:**
301
- 1. **Linear Ticket erstellen** - Ticket in Linear via MCP erstellen (Linear MCP muss installiert sein)
302
- 2. **Als Markdown-Datei speichern** - Story in eine .md-Datei im Projekt speichern
303
- 3. **Direkt umsetzen** - Sofort mit TDD-Implementierung via `building-stories-with-tdd` Skill starten
304
- 4. **Nichts davon** - Story wurde bereits angezeigt und kann kopiert werden, keine weitere Aktion nötig
305
-
306
- (If user selects "Nichts davon", confirm in German: "Alles klar! Die Story wurde oben angezeigt und kann bei Bedarf kopiert werden.")
307
-
308
- ---
309
-
310
- ## Step 6: Execute Selected Output
311
-
312
- ### Option 1: Linear Ticket erstellen
313
-
314
- **Prerequisite:** Linear MCP must be installed (`lt claude install-mcps linear`)
315
-
316
- 1. First, check if Linear MCP is available. If not, inform the user (in German):
317
- - "Linear MCP ist nicht installiert. Du kannst es mit `lt claude install-mcps linear` installieren."
318
- - Then ask if they want to choose a different output option
319
-
320
- 2. If Linear MCP is available, ask for Linear project/team (in German):
321
- - "In welchem Linear Team soll das Ticket erstellt werden?"
322
- - Use Linear MCP to list available teams to help the user choose
323
- - If the user provides an invalid team, show available teams and ask again
324
-
325
- 3. Create ticket via Linear MCP:
326
- - Title: The story title
327
- - Description: The full story in markdown format
328
- - Labels: Add relevant labels if applicable
329
-
330
- 4. Report the created ticket URL to the user (in German)
331
-
332
- 5. **Then ask (in German):** "Möchtest du diese Story jetzt auch mit TDD umsetzen?"
333
-
334
- ### Option 2: Als Markdown-Datei speichern
335
-
336
- 1. Ask for the file location (in German):
337
- - "Wo soll die Story gespeichert werden? (z.B. `docs/stories/faq-verwaltung.md` oder `stories/STORY-001.md`)"
338
- - Suggest a filename based on the story title (e.g., `stories/admin-faq-verwaltung.md`)
339
-
340
- 2. Validate the path:
341
- - Check if the parent directory exists
342
- - If not, ask (in German): "Das Verzeichnis [dir] existiert nicht. Soll ich es erstellen?"
343
- - If the file already exists, ask (in German): "Die Datei existiert bereits. Überschreiben?"
344
-
345
- 3. Write the story to the specified file
346
- - If writing fails, inform the user (in German): "Fehler beim Speichern: [error]. Bitte einen anderen Pfad angeben."
347
- - Then ask for a new path
348
-
349
- 4. Confirm (in German): "Story gespeichert unter [Pfad]"
350
-
351
- 5. **Then ask (in German):** "Möchtest du diese Story jetzt auch mit TDD umsetzen?"
352
-
353
- ### Option 3: Direkt umsetzen (or TDD after Option 1/2)
354
-
355
- When the user chooses direct implementation or answers "yes" to TDD after Option 1 or 2:
356
-
357
- 1. Confirm (in German): "Starte TDD-Implementierung mit dem `building-stories-with-tdd` Skill..."
358
-
359
- 2. Invoke the `building-stories-with-tdd` skill with the generated story as context
360
-
361
- 3. The skill will handle: test creation, implementation, validation
362
-
363
- ---
364
-
365
- ## Beispiel: FAQ-Verwaltung Story
366
-
367
- Here is an example of a well-structured user story:
368
-
369
- **User's initial input:**
370
- > "Ich brauche FAQs die der Admin verwalten kann und die auf der Website angezeigt werden. Die sollen eine Reihenfolge haben."
371
-
372
- **Gap analysis question (in German):**
373
- > "Du hast erwähnt, dass FAQs eine Reihenfolge haben sollen. Möchtest du die Properties (z.B. `question`, `answer`, `position`) genauer spezifizieren, oder soll das der Implementierung überlassen werden?"
374
-
375
- **User response:**
376
- > "Nein, das kann die Implementierung machen."
377
-
378
- **Resulting story (suggestions integrated as definitive requirements):**
379
-
380
- ```markdown
381
- # Admin möchte FAQs verwalten, damit sie auf der Website verfügbar sind
382
-
383
- **Story:** Als Admin möchte ich FAQs verwalten können, damit sie allen Besuchern auf der Website zur Verfügung stehen.
384
-
385
- ## Beschreibung
386
-
387
- Es soll ein Modul für FAQs erstellt werden, in dem der Admin FAQs sehen, anlegen, bearbeiten und löschen kann. Nicht eingeloggte Nutzer sollen die FAQs sehen können, damit sie auf der Website dargestellt werden können.
388
-
389
- ### Kontext
390
- - FAQs sind öffentlich sichtbare Inhalte, die von Administratoren verwaltet werden
391
- - Die Reihenfolge der FAQs ist für die Anzeige wichtig
392
-
393
- ### Anforderungen
394
- - Admins können vollständige CRUD-Operationen auf FAQs durchführen
395
- - Alle Nutzer (auch Gäste) können FAQs lesen
396
- - FAQs müssen eine bestimmte Reihenfolge haben
397
- - Die Reihenfolgeverwaltung muss automatisch und effizient erfolgen
398
-
399
- ## Akzeptanzkriterien
400
-
401
- - [ ] Administratoren können FAQs vollständig verwalten (GET, POST, DELETE, PUT)
402
- - [ ] Alle Nutzer (auch nicht eingeloggte) können die komplette Liste der FAQs sortiert nach Reihenfolge abrufen
403
- - [ ] Beim Anlegen einer neuen FAQ wird automatisch die nächste Position in der Reihenfolge vergeben
404
- - [ ] Die Reihenfolge der FAQs kann angepasst werden
405
- - [ ] Nicht-Admin-Nutzer können keine FAQs erstellen, bearbeiten oder löschen
406
- ```
407
-
408
- **Beispiel eines Akzeptanzkriteriums im Gherkin-Format:**
409
-
410
- ```gherkin
411
- Gegeben es existieren bereits 3 FAQs in der Reihenfolge A, B, C
412
- Wenn ein Admin eine neue FAQ D an Position 2 einfügt
413
- Dann ist die neue Reihenfolge A, D, B, C
414
- Und alle anderen FAQs werden entsprechend neu positioniert
415
- ```
416
-
417
- ---
418
-
419
- ## Execution Summary
420
-
421
- 1. **Collect initial thoughts** - Let user describe their idea freely
422
- 2. **Analyze gaps** - Check against required elements checklist
423
- 3. **Ask targeted questions** - Only for missing/unclear elements (in German)
424
- 4. **Validate completeness** - INVEST check, coherence, emotional value, and TDD readiness
425
- 5. **Generate and present story** - Format according to template (in German!) and present for discussion/optimization
426
- 6. **Ask for output** - Linear ticket, Markdown file, direct implementation, or nothing
427
- 7. **Execute choice and offer TDD** - Create output in selected format, then offer TDD implementation if not already chosen
428
-
429
- **Key behaviors:**
430
- - User can abort at any point - acknowledge and stop
431
- - Always validate paths/teams before executing
432
- - Handle errors gracefully with German error messages
433
- - "Nichts davon" is a valid choice - story was already displayed
434
-
435
- **Remember:** A well-written user story leads to better tests and cleaner implementation!
@@ -1,48 +0,0 @@
1
- ---
2
- description: Generate MR description and save to clipboard
3
- ---
4
-
5
- Create a comprehensive summary of the changes in English for a Merge Request description.
6
-
7
- Please structure the description as follows:
8
- - **Summary**: Brief summary (1-2 sentences)
9
- - **Changes**: List of the most important changes
10
- - **Technical Details**: Relevant technical details if necessary
11
- - **Testing**: How was it tested / how can it be tested
12
-
13
- Keep it short and concise - focus on what's essential for code reviewers.
14
-
15
- **IMPORTANT - CLIPBOARD WORKFLOW:**
16
-
17
- 1. First, create the MR description in this format:
18
-
19
- ```markdown
20
- ## Summary
21
- [Your summary here]
22
-
23
- ## Changes
24
- - Change 1
25
- - Change 2
26
-
27
- ## Technical Details
28
- [Details if necessary]
29
-
30
- ## Testing
31
- [Testing approach]
32
- ```
33
-
34
- 2. After presenting the description, provide this shell command:
35
-
36
- ```bash
37
- cat << 'EOF' | pbcopy
38
- [PASTE THE EXACT MR DESCRIPTION HERE]
39
- EOF
40
- echo "✅ MR description copied to clipboard!"
41
- ```
42
-
43
- 3. User can run this command to copy the description to clipboard automatically.
44
-
45
- **Platform-specific commands:**
46
- - macOS: `pbcopy`
47
- - Linux: `xclip -selection clipboard` or `xsel --clipboard`
48
- - Windows: `clip`