You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CLAUDE.md
+99-1Lines changed: 99 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -98,4 +98,102 @@ Popups inherit from `ViewModels.Popup` and use a consistent pattern:
98
98
-`Popup.InvokeAsync()` shows the popup and returns result
99
99
100
100
### Testing Git Operations
101
-
The application supports portable mode by creating a `data` folder next to the executable. This allows testing without affecting the system-wide installation.
101
+
The application supports portable mode by creating a `data` folder next to the executable. This allows testing without affecting the system-wide installation.
102
+
103
+
## Lessons Learned
104
+
105
+
### Development Methodology
106
+
**Divide and Conquer (Teile und Herrsche)**: When implementing new features, follow these principles:
107
+
1.**Start Small**: Implement ONE small, working feature completely before expanding
108
+
2.**Use Real Data**: Never use simulated/fake data - always work with actual Git commands
109
+
3.**Backend First**: Build the Git command wrapper and data model before any UI
110
+
4.**Test Early**: Verify functionality with real repositories before adding complexity
111
+
5.**Incremental Enhancement**: Add features one at a time, testing each addition
112
+
113
+
### Common Pitfalls to Avoid
114
+
-**Script-Kiddy Approach**: Don't try to implement everything at once with simulated data
115
+
-**Missing Validation**: Always check if methods/properties exist before using them
116
+
-**Protection Levels**: Respect access modifiers - don't try to access internal/protected members
117
+
-**Converter Dependencies**: Verify all converters exist before referencing them in XAML
118
+
-**Namespace Conflicts**: Use fully qualified names when there are ambiguous references
119
+
120
+
### Shutdown Performance
121
+
When dealing with background operations and UI updates:
122
+
- Use `CancellationTokenSource` for all long-running operations
123
+
- Implement `_isUnloading` flag to prevent dispatcher operations during shutdown
124
+
- Clean up event handlers properly in `OnUnloaded()`
125
+
- Cancel pending operations before disposal to prevent 30+ second hangs
126
+
127
+
### Git Command Integration
128
+
- All Git operations must inherit from `Command` class
129
+
- Use `Command.Exec()` for fire-and-forget, `Command.ExecAsync()` for awaitable operations
130
+
- Parse command output in `ParseResult()` override
131
+
- Log all commands through `ICommandLog` interface
132
+
- Handle errors gracefully with proper exception handling
133
+
134
+
## Versioning and Release Strategy
135
+
136
+
### Iniationware Version Pattern
137
+
**Format**: `v{YEAR}.{WEEK}.{IW_INCREMENT}`
138
+
-**Base Version**: Always use the latest official SourceGit release tag (e.g., 2025.34)
139
+
-**IW Increment**: Add a third number for Iniationware releases (e.g., .10, .11, .12)
140
+
-**No Hyphens**: Linux packaging requires version numbers without hyphens
141
+
142
+
**Examples**:
143
+
-`v2025.34.10` - Tenth Iniationware release based on SourceGit v2025.34
144
+
-`v2025.34.11` - Eleventh Iniationware release based on same base version
145
+
-`v2025.35.1` - First Iniationware release based on SourceGit v2025.35
146
+
147
+
### Creating a New Release
148
+
149
+
#### Pre-Release Checks
150
+
Before creating a tag, always run the pre-tag validation script:
151
+
```bash
152
+
./check_before_tag.sh
153
+
```
154
+
155
+
This script verifies:
156
+
- No uncommitted changes
157
+
- Code formatting is correct (`dotnet format`)
158
+
- Project builds successfully
159
+
- Tests pass (if present)
160
+
- Branch is up to date with remote
161
+
162
+
#### Creating the Tag
163
+
```bash
164
+
# 1. Check current version in VERSION file
165
+
cat VERSION
166
+
167
+
# 2. Find the latest tag (new format without IW)
168
+
git tag --list "v2025.34.*"| sort -V | tail -1
169
+
170
+
# 3. Run pre-tag checks (REQUIRED)
171
+
./check_before_tag.sh
172
+
173
+
# 4. Update VERSION file with new version
174
+
echo"2025.34.11"> VERSION
175
+
176
+
# 5. Commit version update
177
+
git add VERSION
178
+
git commit -m "chore: bump version to 2025.34.11"
179
+
180
+
# 6. Create new tag (note: no -IW anymore)
181
+
git tag -a v2025.34.11 -m "Release description..."
182
+
183
+
# 7. Push changes and tag to trigger GitHub Actions workflow
184
+
git push origin develop
185
+
git push origin v2025.34.11
186
+
```
187
+
188
+
### GitHub Actions Workflow
189
+
The `.github/workflows/release.yml` automatically:
190
+
1. Triggers on new version tags (v*)
191
+
2. Builds the application for all platforms
192
+
3. Creates packages (Windows, macOS, Linux)
193
+
4. Publishes GitHub release with assets
194
+
195
+
### Important Notes
196
+
-**Stay on base version**: Don't change the base version (e.g., v2025.34) unless updating to newer SourceGit
197
+
-**Only increment IW number**: For Iniationware features, only increase the number after Basis-Version
198
+
-**Tag triggers workflow**: Pushing a tag automatically starts the release build process
199
+
-**Semantic messages**: Use clear, descriptive release notes focusing on added features
0 commit comments