@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.
- package/build/commands/claude/install-plugin.js +339 -0
- package/package.json +1 -1
- package/build/commands/claude/install-commands.js +0 -337
- package/build/commands/claude/install-mcps.js +0 -258
- package/build/commands/claude/install-skills.js +0 -693
- package/build/lib/mcp-registry.js +0 -80
- package/build/templates/claude-commands/code-cleanup.md +0 -82
- package/build/templates/claude-commands/commit-message.md +0 -21
- package/build/templates/claude-commands/create-story.md +0 -435
- package/build/templates/claude-commands/mr-description-clipboard.md +0 -48
- package/build/templates/claude-commands/mr-description.md +0 -33
- package/build/templates/claude-commands/sec-review.md +0 -62
- package/build/templates/claude-commands/skill-optimize.md +0 -481
- package/build/templates/claude-commands/test-generate.md +0 -45
- package/build/templates/claude-skills/building-stories-with-tdd/SKILL.md +0 -265
- package/build/templates/claude-skills/building-stories-with-tdd/code-quality.md +0 -276
- package/build/templates/claude-skills/building-stories-with-tdd/database-indexes.md +0 -182
- package/build/templates/claude-skills/building-stories-with-tdd/examples.md +0 -1383
- package/build/templates/claude-skills/building-stories-with-tdd/handling-existing-tests.md +0 -197
- package/build/templates/claude-skills/building-stories-with-tdd/reference.md +0 -1427
- package/build/templates/claude-skills/building-stories-with-tdd/security-review.md +0 -307
- package/build/templates/claude-skills/building-stories-with-tdd/workflow.md +0 -1004
- package/build/templates/claude-skills/generating-nest-servers/SKILL.md +0 -303
- package/build/templates/claude-skills/generating-nest-servers/configuration.md +0 -285
- package/build/templates/claude-skills/generating-nest-servers/declare-keyword-warning.md +0 -133
- package/build/templates/claude-skills/generating-nest-servers/description-management.md +0 -226
- package/build/templates/claude-skills/generating-nest-servers/examples.md +0 -893
- package/build/templates/claude-skills/generating-nest-servers/framework-guide.md +0 -259
- package/build/templates/claude-skills/generating-nest-servers/quality-review.md +0 -864
- package/build/templates/claude-skills/generating-nest-servers/reference.md +0 -487
- package/build/templates/claude-skills/generating-nest-servers/security-rules.md +0 -371
- package/build/templates/claude-skills/generating-nest-servers/verification-checklist.md +0 -262
- package/build/templates/claude-skills/generating-nest-servers/workflow-process.md +0 -1061
- package/build/templates/claude-skills/using-lt-cli/SKILL.md +0 -284
- package/build/templates/claude-skills/using-lt-cli/examples.md +0 -546
- 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`
|