kollabor 0.4.9__py3-none-any.whl → 0.4.15__py3-none-any.whl
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.
- agents/__init__.py +2 -0
- agents/coder/__init__.py +0 -0
- agents/coder/agent.json +4 -0
- agents/coder/api-integration.md +2150 -0
- agents/coder/cli-pretty.md +765 -0
- agents/coder/code-review.md +1092 -0
- agents/coder/database-design.md +1525 -0
- agents/coder/debugging.md +1102 -0
- agents/coder/dependency-management.md +1397 -0
- agents/coder/git-workflow.md +1099 -0
- agents/coder/refactoring.md +1454 -0
- agents/coder/security-hardening.md +1732 -0
- agents/coder/system_prompt.md +1448 -0
- agents/coder/tdd.md +1367 -0
- agents/creative-writer/__init__.py +0 -0
- agents/creative-writer/agent.json +4 -0
- agents/creative-writer/character-development.md +1852 -0
- agents/creative-writer/dialogue-craft.md +1122 -0
- agents/creative-writer/plot-structure.md +1073 -0
- agents/creative-writer/revision-editing.md +1484 -0
- agents/creative-writer/system_prompt.md +690 -0
- agents/creative-writer/worldbuilding.md +2049 -0
- agents/data-analyst/__init__.py +30 -0
- agents/data-analyst/agent.json +4 -0
- agents/data-analyst/data-visualization.md +992 -0
- agents/data-analyst/exploratory-data-analysis.md +1110 -0
- agents/data-analyst/pandas-data-manipulation.md +1081 -0
- agents/data-analyst/sql-query-optimization.md +881 -0
- agents/data-analyst/statistical-analysis.md +1118 -0
- agents/data-analyst/system_prompt.md +928 -0
- agents/default/__init__.py +0 -0
- agents/default/agent.json +4 -0
- agents/default/dead-code.md +794 -0
- agents/default/explore-agent-system.md +585 -0
- agents/default/system_prompt.md +1448 -0
- agents/kollabor/__init__.py +0 -0
- agents/kollabor/analyze-plugin-lifecycle.md +175 -0
- agents/kollabor/analyze-terminal-rendering.md +388 -0
- agents/kollabor/code-review.md +1092 -0
- agents/kollabor/debug-mcp-integration.md +521 -0
- agents/kollabor/debug-plugin-hooks.md +547 -0
- agents/kollabor/debugging.md +1102 -0
- agents/kollabor/dependency-management.md +1397 -0
- agents/kollabor/git-workflow.md +1099 -0
- agents/kollabor/inspect-llm-conversation.md +148 -0
- agents/kollabor/monitor-event-bus.md +558 -0
- agents/kollabor/profile-performance.md +576 -0
- agents/kollabor/refactoring.md +1454 -0
- agents/kollabor/system_prompt copy.md +1448 -0
- agents/kollabor/system_prompt.md +757 -0
- agents/kollabor/trace-command-execution.md +178 -0
- agents/kollabor/validate-config.md +879 -0
- agents/research/__init__.py +0 -0
- agents/research/agent.json +4 -0
- agents/research/architecture-mapping.md +1099 -0
- agents/research/codebase-analysis.md +1077 -0
- agents/research/dependency-audit.md +1027 -0
- agents/research/performance-profiling.md +1047 -0
- agents/research/security-review.md +1359 -0
- agents/research/system_prompt.md +492 -0
- agents/technical-writer/__init__.py +0 -0
- agents/technical-writer/agent.json +4 -0
- agents/technical-writer/api-documentation.md +2328 -0
- agents/technical-writer/changelog-management.md +1181 -0
- agents/technical-writer/readme-writing.md +1360 -0
- agents/technical-writer/style-guide.md +1410 -0
- agents/technical-writer/system_prompt.md +653 -0
- agents/technical-writer/tutorial-creation.md +1448 -0
- core/__init__.py +0 -2
- core/application.py +343 -88
- core/cli.py +229 -10
- core/commands/menu_renderer.py +463 -59
- core/commands/registry.py +14 -9
- core/commands/system_commands.py +2461 -14
- core/config/loader.py +151 -37
- core/config/service.py +18 -6
- core/events/bus.py +29 -9
- core/events/executor.py +205 -75
- core/events/models.py +27 -8
- core/fullscreen/command_integration.py +20 -24
- core/fullscreen/components/__init__.py +10 -1
- core/fullscreen/components/matrix_components.py +1 -2
- core/fullscreen/components/space_shooter_components.py +654 -0
- core/fullscreen/plugin.py +5 -0
- core/fullscreen/renderer.py +52 -13
- core/fullscreen/session.py +52 -15
- core/io/__init__.py +29 -5
- core/io/buffer_manager.py +6 -1
- core/io/config_status_view.py +7 -29
- core/io/core_status_views.py +267 -347
- core/io/input/__init__.py +25 -0
- core/io/input/command_mode_handler.py +711 -0
- core/io/input/display_controller.py +128 -0
- core/io/input/hook_registrar.py +286 -0
- core/io/input/input_loop_manager.py +421 -0
- core/io/input/key_press_handler.py +502 -0
- core/io/input/modal_controller.py +1011 -0
- core/io/input/paste_processor.py +339 -0
- core/io/input/status_modal_renderer.py +184 -0
- core/io/input_errors.py +5 -1
- core/io/input_handler.py +211 -2452
- core/io/key_parser.py +7 -0
- core/io/layout.py +15 -3
- core/io/message_coordinator.py +111 -2
- core/io/message_renderer.py +129 -4
- core/io/status_renderer.py +147 -607
- core/io/terminal_renderer.py +97 -51
- core/io/terminal_state.py +21 -4
- core/io/visual_effects.py +816 -165
- core/llm/agent_manager.py +1063 -0
- core/llm/api_adapters/__init__.py +44 -0
- core/llm/api_adapters/anthropic_adapter.py +432 -0
- core/llm/api_adapters/base.py +241 -0
- core/llm/api_adapters/openai_adapter.py +326 -0
- core/llm/api_communication_service.py +167 -113
- core/llm/conversation_logger.py +322 -16
- core/llm/conversation_manager.py +556 -30
- core/llm/file_operations_executor.py +84 -32
- core/llm/llm_service.py +934 -103
- core/llm/mcp_integration.py +541 -57
- core/llm/message_display_service.py +135 -18
- core/llm/plugin_sdk.py +1 -2
- core/llm/profile_manager.py +1183 -0
- core/llm/response_parser.py +274 -56
- core/llm/response_processor.py +16 -3
- core/llm/tool_executor.py +6 -1
- core/logging/__init__.py +2 -0
- core/logging/setup.py +34 -6
- core/models/resume.py +54 -0
- core/plugins/__init__.py +4 -2
- core/plugins/base.py +127 -0
- core/plugins/collector.py +23 -161
- core/plugins/discovery.py +37 -3
- core/plugins/factory.py +6 -12
- core/plugins/registry.py +5 -17
- core/ui/config_widgets.py +128 -28
- core/ui/live_modal_renderer.py +2 -1
- core/ui/modal_actions.py +5 -0
- core/ui/modal_overlay_renderer.py +0 -60
- core/ui/modal_renderer.py +268 -7
- core/ui/modal_state_manager.py +29 -4
- core/ui/widgets/base_widget.py +7 -0
- core/updates/__init__.py +10 -0
- core/updates/version_check_service.py +348 -0
- core/updates/version_comparator.py +103 -0
- core/utils/config_utils.py +685 -526
- core/utils/plugin_utils.py +1 -1
- core/utils/session_naming.py +111 -0
- fonts/LICENSE +21 -0
- fonts/README.md +46 -0
- fonts/SymbolsNerdFont-Regular.ttf +0 -0
- fonts/SymbolsNerdFontMono-Regular.ttf +0 -0
- fonts/__init__.py +44 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/METADATA +54 -4
- kollabor-0.4.15.dist-info/RECORD +228 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/top_level.txt +2 -0
- plugins/agent_orchestrator/__init__.py +39 -0
- plugins/agent_orchestrator/activity_monitor.py +181 -0
- plugins/agent_orchestrator/file_attacher.py +77 -0
- plugins/agent_orchestrator/message_injector.py +135 -0
- plugins/agent_orchestrator/models.py +48 -0
- plugins/agent_orchestrator/orchestrator.py +403 -0
- plugins/agent_orchestrator/plugin.py +976 -0
- plugins/agent_orchestrator/xml_parser.py +191 -0
- plugins/agent_orchestrator_plugin.py +9 -0
- plugins/enhanced_input/box_styles.py +1 -0
- plugins/enhanced_input/color_engine.py +19 -4
- plugins/enhanced_input/config.py +2 -2
- plugins/enhanced_input_plugin.py +61 -11
- plugins/fullscreen/__init__.py +6 -2
- plugins/fullscreen/example_plugin.py +1035 -222
- plugins/fullscreen/setup_wizard_plugin.py +592 -0
- plugins/fullscreen/space_shooter_plugin.py +131 -0
- plugins/hook_monitoring_plugin.py +436 -78
- plugins/query_enhancer_plugin.py +66 -30
- plugins/resume_conversation_plugin.py +1494 -0
- plugins/save_conversation_plugin.py +98 -32
- plugins/system_commands_plugin.py +70 -56
- plugins/tmux_plugin.py +154 -78
- plugins/workflow_enforcement_plugin.py +94 -92
- system_prompt/default.md +952 -886
- core/io/input_mode_manager.py +0 -402
- core/io/modal_interaction_handler.py +0 -315
- core/io/raw_input_processor.py +0 -946
- core/storage/__init__.py +0 -5
- core/storage/state_manager.py +0 -84
- core/ui/widget_integration.py +0 -222
- core/utils/key_reader.py +0 -171
- kollabor-0.4.9.dist-info/RECORD +0 -128
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/WHEEL +0 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/entry_points.txt +0 -0
- {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,1181 @@
|
|
|
1
|
+
<!-- Changelog Management skill - maintain version history and release notes -->
|
|
2
|
+
|
|
3
|
+
changelog management mode: KEEP A CHANGELOG DISCIPLINE
|
|
4
|
+
|
|
5
|
+
when this skill is active, you follow Keep a Changelog standards.
|
|
6
|
+
this is a comprehensive guide to maintaining project changelogs.
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
PHASE 0: CHANGELOG CONTEXT DISCOVERY
|
|
10
|
+
|
|
11
|
+
before creating or updating ANY changelog, understand the project's versioning.
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
check for existing changelog
|
|
15
|
+
|
|
16
|
+
<terminal>ls -la | grep -i change</terminal>
|
|
17
|
+
<terminal>cat CHANGELOG.md 2>/dev/null || cat CHANGELOG 2>/dev/null || cat CHANGES.md 2>/dev/null || echo "no existing changelog"</terminal>
|
|
18
|
+
|
|
19
|
+
if changelog exists, analyze:
|
|
20
|
+
- format being used (keep a changelog, custom, etc.)
|
|
21
|
+
- version numbering scheme
|
|
22
|
+
- categorization of changes
|
|
23
|
+
- release date format
|
|
24
|
+
- unreleased section handling
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
check version history
|
|
28
|
+
|
|
29
|
+
<terminal>git tag --list | sort -V | tail -20</terminal>
|
|
30
|
+
<terminal>git log --oneline --decorate | head -30</terminal>
|
|
31
|
+
|
|
32
|
+
identify:
|
|
33
|
+
- current version
|
|
34
|
+
- version tags in use
|
|
35
|
+
- release frequency
|
|
36
|
+
- version scheme (semver, calver, custom)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
check project type and versioning
|
|
40
|
+
|
|
41
|
+
<terminal>cat pyproject.toml 2>/dev/null | grep -A5 "version\|project"</terminal>
|
|
42
|
+
<terminal>cat package.json 2>/dev/null | grep version</terminal>
|
|
43
|
+
<terminal>cat Cargo.toml 2>/dev/null | grep version</terminal>
|
|
44
|
+
|
|
45
|
+
determine:
|
|
46
|
+
- where version is stored
|
|
47
|
+
- if using semantic versioning
|
|
48
|
+
- if there's an automatic version bump system
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
check commit message patterns
|
|
52
|
+
|
|
53
|
+
<terminal>git log --oneline | head -50</terminal>
|
|
54
|
+
|
|
55
|
+
analyze:
|
|
56
|
+
- are commits following conventional commits?
|
|
57
|
+
- is there a pattern (feat:, fix:, docs:, etc.)?
|
|
58
|
+
- are issues referenced in commits?
|
|
59
|
+
- are commit scopes used?
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
check for release tooling
|
|
63
|
+
|
|
64
|
+
<terminal>cat .github/workflows/*.yml 2>/dev/null | grep -i release</terminal>
|
|
65
|
+
<terminal>cat pyproject.toml 2>/dev/null | grep -A10 "commitizen\|release"</terminal>
|
|
66
|
+
|
|
67
|
+
identify:
|
|
68
|
+
- automated release tools (release-please, semantic-release, etc.)
|
|
69
|
+
- changelog generation tools
|
|
70
|
+
- version bump automation
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
PHASE 1: UNDERSTANDING KEEP A CHANGELOG
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
the standard format
|
|
77
|
+
|
|
78
|
+
Keep a Changelog is the de facto standard for changelogs.
|
|
79
|
+
url: https://keepachangelog.com
|
|
80
|
+
|
|
81
|
+
core principles:
|
|
82
|
+
|
|
83
|
+
[1] humans care about what changed, not when
|
|
84
|
+
versions over dates as the primary organizer
|
|
85
|
+
|
|
86
|
+
[2] categorize changes by type
|
|
87
|
+
added, changed, deprecated, removed, fixed, security
|
|
88
|
+
|
|
89
|
+
[3] list changes per version
|
|
90
|
+
grouped by category under each version
|
|
91
|
+
|
|
92
|
+
[4] link to actual commits
|
|
93
|
+
provide traceability
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
changelog structure
|
|
97
|
+
|
|
98
|
+
# Changelog
|
|
99
|
+
|
|
100
|
+
All notable changes to this project will be documented in this file.
|
|
101
|
+
|
|
102
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
103
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
104
|
+
|
|
105
|
+
[Unreleased]
|
|
106
|
+
|
|
107
|
+
## [1.0.0] - 2024-01-15
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
- New feature that users will care about
|
|
111
|
+
|
|
112
|
+
### Changed
|
|
113
|
+
- Something that worked differently now
|
|
114
|
+
|
|
115
|
+
### Deprecated
|
|
116
|
+
- Feature that will be removed in future
|
|
117
|
+
|
|
118
|
+
### Removed
|
|
119
|
+
- Feature that was deprecated and now removed
|
|
120
|
+
|
|
121
|
+
### Fixed
|
|
122
|
+
- Bug fix for something
|
|
123
|
+
|
|
124
|
+
### Security
|
|
125
|
+
- Security vulnerability fix
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
category definitions
|
|
129
|
+
|
|
130
|
+
Added
|
|
131
|
+
new features
|
|
132
|
+
new capabilities
|
|
133
|
+
new integrations
|
|
134
|
+
new configuration options
|
|
135
|
+
|
|
136
|
+
Changed
|
|
137
|
+
behavior changes in existing features
|
|
138
|
+
modified functionality
|
|
139
|
+
updated defaults
|
|
140
|
+
performance improvements
|
|
141
|
+
|
|
142
|
+
Deprecated
|
|
143
|
+
features marked for future removal
|
|
144
|
+
features that will change incompatibly
|
|
145
|
+
|
|
146
|
+
Removed
|
|
147
|
+
features removed from the project
|
|
148
|
+
deprecated features that reached end of life
|
|
149
|
+
|
|
150
|
+
Fixed
|
|
151
|
+
bug fixes
|
|
152
|
+
regression fixes
|
|
153
|
+
crash fixes
|
|
154
|
+
|
|
155
|
+
Security
|
|
156
|
+
vulnerability fixes
|
|
157
|
+
security hardening
|
|
158
|
+
dependency updates for security
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
PHASE 2: SEMANTIC VERSIONING
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
semver basics
|
|
165
|
+
|
|
166
|
+
semantic versioning: MAJOR.MINOR.PATCH
|
|
167
|
+
|
|
168
|
+
MAJOR
|
|
169
|
+
incompatible API changes
|
|
170
|
+
examples:
|
|
171
|
+
- remove a public function
|
|
172
|
+
- change function signature
|
|
173
|
+
- modify behavior contract
|
|
174
|
+
|
|
175
|
+
MINOR
|
|
176
|
+
backwards-compatible functionality
|
|
177
|
+
examples:
|
|
178
|
+
- add new public function
|
|
179
|
+
- add new optional parameter
|
|
180
|
+
- add new feature flag
|
|
181
|
+
|
|
182
|
+
PATCH
|
|
183
|
+
backwards-compatible bug fixes
|
|
184
|
+
examples:
|
|
185
|
+
- fix crash condition
|
|
186
|
+
- fix incorrect output
|
|
187
|
+
- fix edge case handling
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
version bumping rules
|
|
191
|
+
|
|
192
|
+
[1.0.0] -> [1.0.1]
|
|
193
|
+
patch release
|
|
194
|
+
fixed a bug
|
|
195
|
+
|
|
196
|
+
[1.0.1] -> [1.1.0]
|
|
197
|
+
minor release
|
|
198
|
+
added a feature
|
|
199
|
+
|
|
200
|
+
[1.1.0] -> [2.0.0]
|
|
201
|
+
major release
|
|
202
|
+
breaking change
|
|
203
|
+
|
|
204
|
+
pre-release versions:
|
|
205
|
+
[1.0.0-alpha], [1.0.0-alpha.1], [1.0.0-beta], [1.0.0-rc.1]
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
development versions
|
|
209
|
+
|
|
210
|
+
during development, use pre-release identifiers:
|
|
211
|
+
|
|
212
|
+
- alpha
|
|
213
|
+
internal testing, not feature complete
|
|
214
|
+
[1.0.0-alpha]
|
|
215
|
+
|
|
216
|
+
- beta
|
|
217
|
+
feature complete, public testing
|
|
218
|
+
[1.0.0-beta]
|
|
219
|
+
|
|
220
|
+
- rc (release candidate)
|
|
221
|
+
testing for bugs, no new features
|
|
222
|
+
[1.0.0-rc.1]
|
|
223
|
+
|
|
224
|
+
ordering: alpha < beta < rc < final
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
PHASE 3: CONVENTIONAL COMMITS
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
commit message format
|
|
231
|
+
|
|
232
|
+
conventional commits work hand-in-hand with changelogs:
|
|
233
|
+
|
|
234
|
+
<type>[optional scope]: <description>
|
|
235
|
+
|
|
236
|
+
[optional body]
|
|
237
|
+
|
|
238
|
+
[optional footer(s)]
|
|
239
|
+
|
|
240
|
+
types:
|
|
241
|
+
feat: new feature
|
|
242
|
+
fix: bug fix
|
|
243
|
+
docs: documentation only
|
|
244
|
+
style: formatting, no code change
|
|
245
|
+
refactor: code change without feature/fix
|
|
246
|
+
perf: performance improvement
|
|
247
|
+
test: adding or updating tests
|
|
248
|
+
chore: maintenance tasks
|
|
249
|
+
ci: CI/CD changes
|
|
250
|
+
build: build system changes
|
|
251
|
+
revert: revert a previous commit
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
examples:
|
|
255
|
+
|
|
256
|
+
feat: add plugin system
|
|
257
|
+
feat(api): add streaming endpoint
|
|
258
|
+
fix: correct memory leak in parser
|
|
259
|
+
fix(auth): resolve token expiry issue
|
|
260
|
+
docs: update installation guide
|
|
261
|
+
chore: upgrade dependencies
|
|
262
|
+
perf: reduce database query time
|
|
263
|
+
ci: add github actions workflow
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
breaking changes
|
|
267
|
+
|
|
268
|
+
mark breaking changes in commit:
|
|
269
|
+
|
|
270
|
+
feat!: redesign user interface
|
|
271
|
+
|
|
272
|
+
or with body:
|
|
273
|
+
|
|
274
|
+
feat(api): remove deprecated endpoint
|
|
275
|
+
|
|
276
|
+
BREAKING CHANGE: endpoint /v1/users no longer exists
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
scope usage
|
|
280
|
+
|
|
281
|
+
scope categorizes changes by module/area:
|
|
282
|
+
|
|
283
|
+
feat(auth): add oauth2 support
|
|
284
|
+
fix(database): resolve connection pool issue
|
|
285
|
+
docs(readme): update quick start
|
|
286
|
+
refactor(ui): extract component library
|
|
287
|
+
|
|
288
|
+
common scopes:
|
|
289
|
+
- core, api, cli, ui
|
|
290
|
+
- auth, database, storage
|
|
291
|
+
- readme, contributing, guide
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
PHASE 4: CREATING A NEW CHANGELOG
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
initial changelog setup
|
|
298
|
+
|
|
299
|
+
<create>
|
|
300
|
+
<file>CHANGELOG.md</file>
|
|
301
|
+
<content>
|
|
302
|
+
# Changelog
|
|
303
|
+
|
|
304
|
+
All notable changes to this project will be documented in this file.
|
|
305
|
+
|
|
306
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
307
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
308
|
+
|
|
309
|
+
[Unreleased]
|
|
310
|
+
|
|
311
|
+
## [0.1.0] - YYYY-MM-DD
|
|
312
|
+
|
|
313
|
+
### Added
|
|
314
|
+
- Initial release
|
|
315
|
+
</content>
|
|
316
|
+
</create>
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
migrating from no changelog
|
|
320
|
+
|
|
321
|
+
if you have existing releases without a changelog:
|
|
322
|
+
|
|
323
|
+
[1] list all git tags
|
|
324
|
+
<terminal>git tag --list | sort -V</terminal>
|
|
325
|
+
|
|
326
|
+
[2] for each significant release, analyze commits:
|
|
327
|
+
<terminal>git log --pretty=format:"%h %s" <prev-tag>..<tag></terminal>
|
|
328
|
+
|
|
329
|
+
[3] create changelog entries retroactively
|
|
330
|
+
focus on user-facing changes only
|
|
331
|
+
|
|
332
|
+
[4] use approximate dates from tags:
|
|
333
|
+
<terminal>git log -1 --format=%ai <tag></terminal>
|
|
334
|
+
|
|
335
|
+
|
|
336
|
+
migrating from custom format
|
|
337
|
+
|
|
338
|
+
if you have an existing changelog in non-standard format:
|
|
339
|
+
|
|
340
|
+
[1] preserve the history
|
|
341
|
+
don't delete existing entries
|
|
342
|
+
|
|
343
|
+
[2] create a new section following keep a changelog
|
|
344
|
+
start with [Unreleased]
|
|
345
|
+
|
|
346
|
+
[3] gradually migrate old entries
|
|
347
|
+
if time permits, reformat historical entries
|
|
348
|
+
|
|
349
|
+
[4] note the format change
|
|
350
|
+
add note explaining the switch
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
PHASE 5: THE UNRELEASED SECTION
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
purpose of unreleased
|
|
357
|
+
|
|
358
|
+
collect changes that haven't been released yet:
|
|
359
|
+
|
|
360
|
+
[Unreleased]
|
|
361
|
+
|
|
362
|
+
### Added
|
|
363
|
+
- New feature in progress
|
|
364
|
+
|
|
365
|
+
### Changed
|
|
366
|
+
- Modified existing feature
|
|
367
|
+
|
|
368
|
+
### Fixed
|
|
369
|
+
- Bug that was fixed but not released
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
working with unreleased
|
|
373
|
+
|
|
374
|
+
as you make changes, add them to [Unreleased]:
|
|
375
|
+
|
|
376
|
+
commit: feat(api): add streaming endpoint
|
|
377
|
+
|
|
378
|
+
immediately add to CHANGELOG.md:
|
|
379
|
+
|
|
380
|
+
[Unreleased]
|
|
381
|
+
|
|
382
|
+
### Added
|
|
383
|
+
- Streaming endpoint for real-time responses
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
releasing from unreleased
|
|
387
|
+
|
|
388
|
+
when releasing:
|
|
389
|
+
|
|
390
|
+
[1] create version header
|
|
391
|
+
move unreleased items to new version
|
|
392
|
+
|
|
393
|
+
[2] add release date
|
|
394
|
+
use ISO format (YYYY-MM-DD)
|
|
395
|
+
|
|
396
|
+
[3] create new unreleased section
|
|
397
|
+
empty placeholder for next release
|
|
398
|
+
|
|
399
|
+
[4] create git tag
|
|
400
|
+
<terminal>git tag -a v1.2.0 -m "Release v1.2.0"</terminal>
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
PHASE 6: WRITING EFFECTIVE CHANGE ENTRIES
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
entry writing guidelines
|
|
407
|
+
|
|
408
|
+
[1] write for users, not developers
|
|
409
|
+
explain the impact, not the implementation
|
|
410
|
+
|
|
411
|
+
[2] be specific but concise
|
|
412
|
+
what changed and why it matters
|
|
413
|
+
|
|
414
|
+
[3] use active voice
|
|
415
|
+
"Added feature" not "Feature was added"
|
|
416
|
+
|
|
417
|
+
[4] group related changes
|
|
418
|
+
list multiple related items as sub-bullets
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
good vs bad entries
|
|
422
|
+
|
|
423
|
+
bad:
|
|
424
|
+
- Fixed bug in parser
|
|
425
|
+
|
|
426
|
+
good:
|
|
427
|
+
- Fixed parser crash when handling nested comments
|
|
428
|
+
|
|
429
|
+
bad:
|
|
430
|
+
- Performance improvements
|
|
431
|
+
|
|
432
|
+
good:
|
|
433
|
+
- Reduced startup time by 40% through lazy loading
|
|
434
|
+
|
|
435
|
+
bad:
|
|
436
|
+
- Changed API
|
|
437
|
+
|
|
438
|
+
good:
|
|
439
|
+
- Changed authentication to require API key in header
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
migration entries
|
|
443
|
+
|
|
444
|
+
for breaking changes, provide migration path:
|
|
445
|
+
|
|
446
|
+
### Changed
|
|
447
|
+
|
|
448
|
+
- Authentication header now requires Bearer token
|
|
449
|
+
Migration: Update requests to include `Authorization: Bearer <token>`
|
|
450
|
+
instead of `X-API-Key: <key>`
|
|
451
|
+
|
|
452
|
+
- Database schema for users now requires email field
|
|
453
|
+
Migration: Run `python migrations/add_user_email.py` before upgrading
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
scope prefixes
|
|
457
|
+
|
|
458
|
+
use scope prefixes for clarity:
|
|
459
|
+
|
|
460
|
+
- (auth) Added OAuth2 support
|
|
461
|
+
- (cli) New --verbose flag for debugging
|
|
462
|
+
- (docs) Updated API reference
|
|
463
|
+
|
|
464
|
+
scopes help users find relevant changes quickly.
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
PHASE 7: LINKING CHANGELOG TO COMMITS
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
commit linking strategies
|
|
471
|
+
|
|
472
|
+
provide traceability from changelog to code:
|
|
473
|
+
|
|
474
|
+
### Added
|
|
475
|
+
- New plugin system (abc1234)
|
|
476
|
+
|
|
477
|
+
or with issue:
|
|
478
|
+
|
|
479
|
+
### Added
|
|
480
|
+
- New plugin system (#123)
|
|
481
|
+
|
|
482
|
+
or with both:
|
|
483
|
+
|
|
484
|
+
### Added
|
|
485
|
+
- New plugin system (abc1234, closes #123)
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
automatic linking
|
|
489
|
+
|
|
490
|
+
github/gitlab auto-link patterns:
|
|
491
|
+
|
|
492
|
+
#123 links to issue 123
|
|
493
|
+
abc1234 links to commit abc1234
|
|
494
|
+
@username links to user
|
|
495
|
+
|
|
496
|
+
use these in changelog entries:
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
### Fixed
|
|
500
|
+
- Memory leak in connection pool (@devuser, #456)
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
link format in versions
|
|
504
|
+
|
|
505
|
+
at the bottom, add version links:
|
|
506
|
+
|
|
507
|
+
[Unreleased]: https://github.com/user/repo/compare/v1.0.0...HEAD
|
|
508
|
+
[1.0.0]: https://github.com/user/repo/compare/v0.9.0...v1.0.0
|
|
509
|
+
[0.9.0]: https://github.com/user/repo/releases/tag/v0.9.0
|
|
510
|
+
|
|
511
|
+
allows clicking version to see diff.
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
PHASE 8: HANDLING DIFFERENT CHANGE TYPES
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
added entries
|
|
518
|
+
|
|
519
|
+
feature additions:
|
|
520
|
+
|
|
521
|
+
### Added
|
|
522
|
+
- Plugin system for extensibility
|
|
523
|
+
- Support for OpenAI and Anthropic APIs
|
|
524
|
+
- Configuration file validation
|
|
525
|
+
- (cli) --version flag to display current version
|
|
526
|
+
- (docs) Plugin development guide
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
changed entries
|
|
530
|
+
|
|
531
|
+
behavior modifications:
|
|
532
|
+
|
|
533
|
+
### Changed
|
|
534
|
+
- Default timeout increased from 30s to 60s
|
|
535
|
+
- Error messages now include troubleshooting hints
|
|
536
|
+
- (api) Response format includes metadata field
|
|
537
|
+
- (ui) Status indicators use color by default
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
deprecated entries
|
|
541
|
+
|
|
542
|
+
features being phased out:
|
|
543
|
+
|
|
544
|
+
### Deprecated
|
|
545
|
+
- Old API endpoint /v1/chat (use /v2/chat instead)
|
|
546
|
+
- --legacy flag (will be removed in 2.0.0)
|
|
547
|
+
- Python 3.10 support (migrate to 3.11+)
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
removed entries
|
|
551
|
+
|
|
552
|
+
deleted features:
|
|
553
|
+
|
|
554
|
+
### Removed
|
|
555
|
+
- Support for Python 3.9 (end of life)
|
|
556
|
+
- Deprecated REST API v1
|
|
557
|
+
- Old configuration file format
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
fixed entries
|
|
561
|
+
|
|
562
|
+
bug fixes:
|
|
563
|
+
|
|
564
|
+
### Fixed
|
|
565
|
+
- Crash when handling empty response from API
|
|
566
|
+
- Memory leak in long-running sessions
|
|
567
|
+
- (auth) Token refresh now happens correctly
|
|
568
|
+
- (cli) Input not being saved in pipe mode
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
security entries
|
|
572
|
+
|
|
573
|
+
vulnerability fixes:
|
|
574
|
+
|
|
575
|
+
### Security
|
|
576
|
+
- Updated dependency to fix CVE-2024-12345
|
|
577
|
+
- API keys now excluded from debug logs
|
|
578
|
+
- Added input validation for file operations
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
PHASE 9: RELEASE NOTES VS CHANGELOG
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
changelog vs release notes
|
|
585
|
+
|
|
586
|
+
changelog:
|
|
587
|
+
- comprehensive record of all changes
|
|
588
|
+
- developer-focused
|
|
589
|
+
- updated continuously
|
|
590
|
+
- includes all commit types
|
|
591
|
+
|
|
592
|
+
release notes:
|
|
593
|
+
- highlights for end users
|
|
594
|
+
- marketing-friendly
|
|
595
|
+
- crafted for each release
|
|
596
|
+
- focuses on features and fixes
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
generating release notes from changelog
|
|
600
|
+
|
|
601
|
+
for a GitHub release, extract:
|
|
602
|
+
|
|
603
|
+
[1] headline features from Added
|
|
604
|
+
[2] important fixes from Fixed
|
|
605
|
+
[3] migration notes from Changed/Removed
|
|
606
|
+
[4] security issues from Security
|
|
607
|
+
|
|
608
|
+
example release notes:
|
|
609
|
+
|
|
610
|
+
What's New in v1.2.0
|
|
611
|
+
|
|
612
|
+
Features:
|
|
613
|
+
- Plugin system for extending functionality
|
|
614
|
+
- Support for multiple LLM providers
|
|
615
|
+
|
|
616
|
+
Fixes:
|
|
617
|
+
- Fixed crash when handling empty responses
|
|
618
|
+
- Resolved memory leak in long sessions
|
|
619
|
+
|
|
620
|
+
Upgrade Notes:
|
|
621
|
+
- If using the old REST API, migrate to v2 before upgrading
|
|
622
|
+
- Update configuration files to new format
|
|
623
|
+
|
|
624
|
+
Security:
|
|
625
|
+
- Updated dependency for CVE-2024-12345
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
PHASE 10: AUTOMATED CHANGELOG TOOLS
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
commitizen / cz-cli
|
|
632
|
+
|
|
633
|
+
standardized commit messages with automatic changelog:
|
|
634
|
+
|
|
635
|
+
<terminal>npm install -g commitizen cz-conventional-changelog</terminal>
|
|
636
|
+
<terminal>echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc</terminal>
|
|
637
|
+
|
|
638
|
+
use:
|
|
639
|
+
<terminal>git cz</terminal>
|
|
640
|
+
|
|
641
|
+
prompts for:
|
|
642
|
+
- type (feat, fix, docs, etc.)
|
|
643
|
+
- scope
|
|
644
|
+
- description
|
|
645
|
+
- body
|
|
646
|
+
- breaking changes
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
standard-version
|
|
650
|
+
|
|
651
|
+
automated versioning and changelog:
|
|
652
|
+
|
|
653
|
+
<terminal>npm install -g standard-version</terminal>
|
|
654
|
+
|
|
655
|
+
run before release:
|
|
656
|
+
<terminal>standard-version</terminal>
|
|
657
|
+
|
|
658
|
+
automatically:
|
|
659
|
+
- bumps version in package.json
|
|
660
|
+
- updates CHANGELOG.md from commits
|
|
661
|
+
- commits the changes
|
|
662
|
+
- tags the release
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
release-please
|
|
666
|
+
|
|
667
|
+
github action for automated releases:
|
|
668
|
+
|
|
669
|
+
.github/workflows/release-please.yml:
|
|
670
|
+
name: Release Please
|
|
671
|
+
|
|
672
|
+
on:
|
|
673
|
+
push:
|
|
674
|
+
branches: [main]
|
|
675
|
+
|
|
676
|
+
permissions:
|
|
677
|
+
contents: write
|
|
678
|
+
|
|
679
|
+
jobs:
|
|
680
|
+
release-please:
|
|
681
|
+
runs-on: ubuntu-latest
|
|
682
|
+
steps:
|
|
683
|
+
- uses: googleapis/release-please-action@v3
|
|
684
|
+
|
|
685
|
+
with:
|
|
686
|
+
release-type: python
|
|
687
|
+
package-name: kollabor
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
semantic-release
|
|
691
|
+
|
|
692
|
+
fully automated releases:
|
|
693
|
+
|
|
694
|
+
<terminal>npm install -D semantic-release</terminal>
|
|
695
|
+
|
|
696
|
+
.releaserc.json:
|
|
697
|
+
{
|
|
698
|
+
"branches": ["main"],
|
|
699
|
+
"plugins": [
|
|
700
|
+
"@semantic-release/commit-analyzer",
|
|
701
|
+
"@semantic-release/release-notes-generator",
|
|
702
|
+
"@semantic-release/changelog",
|
|
703
|
+
"@semantic-release/npm",
|
|
704
|
+
"@semantic-release/git",
|
|
705
|
+
"@semantic-release/github"
|
|
706
|
+
]
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
analyzes commits to determine version bump automatically.
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
PHASE 11: CHANGELOG FOR DIFFERENT PROJECT TYPES
|
|
713
|
+
|
|
714
|
+
|
|
715
|
+
library changelog
|
|
716
|
+
|
|
717
|
+
focus on API changes:
|
|
718
|
+
|
|
719
|
+
# Changelog
|
|
720
|
+
|
|
721
|
+
## [2.0.0] - 2024-01-15
|
|
722
|
+
|
|
723
|
+
### Added
|
|
724
|
+
- async variants of all core functions
|
|
725
|
+
- type hints for public API
|
|
726
|
+
|
|
727
|
+
### Changed
|
|
728
|
+
- (api) parse() now returns Result object instead of raising
|
|
729
|
+
- minimum Python version increased to 3.11
|
|
730
|
+
|
|
731
|
+
### Deprecated
|
|
732
|
+
- parse() with raise_exception=False (use parse_safe())
|
|
733
|
+
|
|
734
|
+
### Removed
|
|
735
|
+
- Python 3.10 support
|
|
736
|
+
- legacy Config class (use ConfigBuilder)
|
|
737
|
+
|
|
738
|
+
### Fixed
|
|
739
|
+
- type hints corrected for generic types
|
|
740
|
+
|
|
741
|
+
|
|
742
|
+
application changelog
|
|
743
|
+
|
|
744
|
+
focus on features and fixes:
|
|
745
|
+
|
|
746
|
+
# Changelog
|
|
747
|
+
|
|
748
|
+
## [1.5.0] - 2024-01-15
|
|
749
|
+
|
|
750
|
+
### Added
|
|
751
|
+
- Dark mode theme
|
|
752
|
+
- Export conversations as markdown
|
|
753
|
+
- Keyboard shortcuts for common actions
|
|
754
|
+
|
|
755
|
+
### Changed
|
|
756
|
+
- Improved startup performance
|
|
757
|
+
- Redesigned settings interface
|
|
758
|
+
|
|
759
|
+
### Fixed
|
|
760
|
+
- Fixed crash when loading large conversations
|
|
761
|
+
- Corrected scrolling behavior in chat view
|
|
762
|
+
|
|
763
|
+
|
|
764
|
+
cli tool changelog
|
|
765
|
+
|
|
766
|
+
focus on commands and options:
|
|
767
|
+
|
|
768
|
+
# Changelog
|
|
769
|
+
|
|
770
|
+
## [2.0.0] - 2024-01-15
|
|
771
|
+
|
|
772
|
+
### Added
|
|
773
|
+
- --watch flag for continuous monitoring
|
|
774
|
+
- --format option for json output
|
|
775
|
+
|
|
776
|
+
### Changed
|
|
777
|
+
- default verbosity level (use -v for more output)
|
|
778
|
+
- --output flag now accepts directory paths
|
|
779
|
+
|
|
780
|
+
### Removed
|
|
781
|
+
- --legacy flag (use --compat instead)
|
|
782
|
+
|
|
783
|
+
### Fixed
|
|
784
|
+
- pipe mode now handles binary data correctly
|
|
785
|
+
|
|
786
|
+
|
|
787
|
+
PHASE 12: CHANGELOG IN THE RELEASE PROCESS
|
|
788
|
+
|
|
789
|
+
|
|
790
|
+
pre-release checklist
|
|
791
|
+
|
|
792
|
+
before cutting a release:
|
|
793
|
+
|
|
794
|
+
[ ] review unreleased section
|
|
795
|
+
[ ] categorize all uncategorized items
|
|
796
|
+
[ ] verify all entries are user-facing
|
|
797
|
+
[ ] add migration notes for breaking changes
|
|
798
|
+
[ ] link to relevant issues/commits
|
|
799
|
+
[ ] set version number based on semver
|
|
800
|
+
[ ] add release date
|
|
801
|
+
|
|
802
|
+
|
|
803
|
+
release workflow
|
|
804
|
+
|
|
805
|
+
[1] prepare the changelog
|
|
806
|
+
create version section from unreleased
|
|
807
|
+
|
|
808
|
+
[2] create release notes
|
|
809
|
+
craft user-friendly summary
|
|
810
|
+
|
|
811
|
+
[3] update version file
|
|
812
|
+
<terminal># edit version in appropriate file</terminal>
|
|
813
|
+
|
|
814
|
+
[4] commit the changelog
|
|
815
|
+
<terminal>git add CHANGELOG.md</terminal>
|
|
816
|
+
<terminal>git commit -m "chore: prepare release v1.2.0"</terminal>
|
|
817
|
+
|
|
818
|
+
[5] create the tag
|
|
819
|
+
<terminal>git tag -a v1.2.0 -m "Release v1.2.0"</terminal>
|
|
820
|
+
|
|
821
|
+
[6] push tag to trigger release
|
|
822
|
+
<terminal>git push origin v1.2.0</terminal>
|
|
823
|
+
|
|
824
|
+
[7] create new unreleased section
|
|
825
|
+
empty section for next cycle
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
post-release
|
|
829
|
+
|
|
830
|
+
[ ] verify release notes rendered correctly
|
|
831
|
+
[ ] check changelog links work
|
|
832
|
+
[ ] announce release (if applicable)
|
|
833
|
+
[ ] update documentation with new features
|
|
834
|
+
[ ] close related issues
|
|
835
|
+
|
|
836
|
+
|
|
837
|
+
PHASE 13: HANDLING HOTFIXES
|
|
838
|
+
|
|
839
|
+
|
|
840
|
+
hotfix changelog entry
|
|
841
|
+
|
|
842
|
+
for urgent fixes:
|
|
843
|
+
|
|
844
|
+
# Changelog
|
|
845
|
+
|
|
846
|
+
[Unreleased]
|
|
847
|
+
### Fixed
|
|
848
|
+
- Hotfix items here
|
|
849
|
+
|
|
850
|
+
## [1.2.1] - 2024-01-16
|
|
851
|
+
|
|
852
|
+
### Fixed
|
|
853
|
+
- Critical security vulnerability in auth
|
|
854
|
+
- Regression introduced in 1.2.0
|
|
855
|
+
|
|
856
|
+
|
|
857
|
+
hotfix process
|
|
858
|
+
|
|
859
|
+
[1] create hotfix branch from release tag
|
|
860
|
+
<terminal>git checkout -b hotfix/1.2.1 v1.2.0</terminal>
|
|
861
|
+
|
|
862
|
+
[2] add fix and update changelog
|
|
863
|
+
create version section for hotfix
|
|
864
|
+
|
|
865
|
+
[3] commit, tag, release hotfix
|
|
866
|
+
<terminal>git tag -a v1.2.1 -m "Hotfix v1.2.1"</terminal>
|
|
867
|
+
|
|
868
|
+
[4] merge back to main and develop
|
|
869
|
+
<terminal>git checkout main && git merge hotfix/1.2.1</terminal>
|
|
870
|
+
|
|
871
|
+
[5] main unreleased should stay intact
|
|
872
|
+
don't lose changes already tracked there
|
|
873
|
+
|
|
874
|
+
|
|
875
|
+
PHASE 14: CHANGELOG QUALITY CHECKLIST
|
|
876
|
+
|
|
877
|
+
|
|
878
|
+
before publishing a changelog:
|
|
879
|
+
|
|
880
|
+
[ ] follows keep a changelog format
|
|
881
|
+
[ ] versions in chronological order (newest top)
|
|
882
|
+
[ ] each version has release date
|
|
883
|
+
[ ] categories properly used (added, changed, etc.)
|
|
884
|
+
[ ] entries are user-facing, not implementation details
|
|
885
|
+
[ ] breaking changes include migration notes
|
|
886
|
+
[ ] entries use active voice
|
|
887
|
+
[ ] scope prefixes used where helpful
|
|
888
|
+
[ ] commit/issue links provided
|
|
889
|
+
[ ] version links at the bottom
|
|
890
|
+
[ ] no typos or grammatical errors
|
|
891
|
+
[ ] unreleased section exists (even if empty)
|
|
892
|
+
|
|
893
|
+
|
|
894
|
+
testing your changelog
|
|
895
|
+
|
|
896
|
+
<terminal># verify markdown renders correctly</terminal>
|
|
897
|
+
<terminal># check that all links work</terminal>
|
|
898
|
+
<terminal># ensure version ordering is correct</terminal>
|
|
899
|
+
<terminal># confirm dates are in ISO format</terminal>
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
PHASE 15: COMMON CHANGELOG ANTI-PATTERNS
|
|
903
|
+
|
|
904
|
+
|
|
905
|
+
anti-pattern: implementation details
|
|
906
|
+
|
|
907
|
+
problem: entries describe how, not what
|
|
908
|
+
|
|
909
|
+
bad:
|
|
910
|
+
- Refactored parser to use new library
|
|
911
|
+
- Changed variable names in auth module
|
|
912
|
+
|
|
913
|
+
good:
|
|
914
|
+
- Improved parsing error messages
|
|
915
|
+
- Fixed authentication edge case
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
anti-pattern: missing migration info
|
|
919
|
+
|
|
920
|
+
problem: breaking changes without guidance
|
|
921
|
+
|
|
922
|
+
bad:
|
|
923
|
+
### Changed
|
|
924
|
+
- Removed old API endpoint
|
|
925
|
+
|
|
926
|
+
good:
|
|
927
|
+
### Changed
|
|
928
|
+
- Removed deprecated /v1/chat endpoint
|
|
929
|
+
Migration: Update to /v2/chat endpoint (see migration guide)
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
anti-pattern: vague entries
|
|
933
|
+
|
|
934
|
+
problem: non-specific descriptions
|
|
935
|
+
|
|
936
|
+
bad:
|
|
937
|
+
- Various improvements
|
|
938
|
+
- Bug fixes
|
|
939
|
+
- Performance optimizations
|
|
940
|
+
|
|
941
|
+
good:
|
|
942
|
+
- Reduced database query time by 40%
|
|
943
|
+
- Fixed crash when handling unicode input
|
|
944
|
+
- Added caching for API responses
|
|
945
|
+
|
|
946
|
+
|
|
947
|
+
anti-pattern: developer-only changes
|
|
948
|
+
|
|
949
|
+
problem: listing internal changes
|
|
950
|
+
|
|
951
|
+
bad:
|
|
952
|
+
- Added unit tests
|
|
953
|
+
- Updated dependencies
|
|
954
|
+
- Fixed linting errors
|
|
955
|
+
|
|
956
|
+
(these should be in commit history, not changelog)
|
|
957
|
+
|
|
958
|
+
good:
|
|
959
|
+
(only include what affects users)
|
|
960
|
+
|
|
961
|
+
|
|
962
|
+
anti-pattern: wrong categorization
|
|
963
|
+
|
|
964
|
+
problem: misclassifying changes
|
|
965
|
+
|
|
966
|
+
bad:
|
|
967
|
+
- New feature listed under "Fixed"
|
|
968
|
+
- Removal listed under "Changed"
|
|
969
|
+
|
|
970
|
+
good:
|
|
971
|
+
- New features under "Added"
|
|
972
|
+
- Removals under "Removed"
|
|
973
|
+
- Behavior modifications under "Changed"
|
|
974
|
+
|
|
975
|
+
|
|
976
|
+
PHASE 16: MAINTAINING CHANGELOG CONSISTENCY
|
|
977
|
+
|
|
978
|
+
|
|
979
|
+
entry formatting
|
|
980
|
+
|
|
981
|
+
consistent style within changelog:
|
|
982
|
+
|
|
983
|
+
### Added
|
|
984
|
+
- Feature name
|
|
985
|
+
Additional details if needed
|
|
986
|
+
|
|
987
|
+
- Another feature
|
|
988
|
+
Details spanning
|
|
989
|
+
multiple lines
|
|
990
|
+
|
|
991
|
+
- Scope: Feature with scope prefix
|
|
992
|
+
|
|
993
|
+
|
|
994
|
+
capitalization
|
|
995
|
+
|
|
996
|
+
[ok] Added, Changed, Deprecated, Removed, Fixed, Security
|
|
997
|
+
[ok] Each entry starts with capital letter
|
|
998
|
+
[ok] Proper nouns and acronyms capitalized (API, URL, JSON)
|
|
999
|
+
|
|
1000
|
+
|
|
1001
|
+
punctuation
|
|
1002
|
+
|
|
1003
|
+
[ok] entries don't end with periods
|
|
1004
|
+
[ok] complete sentences in details end with periods
|
|
1005
|
+
[ok] lists don't use trailing punctuation
|
|
1006
|
+
|
|
1007
|
+
|
|
1008
|
+
version format
|
|
1009
|
+
|
|
1010
|
+
## [1.2.3] - 2024-01-15
|
|
1011
|
+
|
|
1012
|
+
- version in brackets
|
|
1013
|
+
- space after bracket
|
|
1014
|
+
- dash before date
|
|
1015
|
+
- ISO date format
|
|
1016
|
+
- no time in date
|
|
1017
|
+
|
|
1018
|
+
|
|
1019
|
+
PHASE 17: CHANGELOG FOR MONOREPOS
|
|
1020
|
+
|
|
1021
|
+
|
|
1022
|
+
monorepo changelog strategies
|
|
1023
|
+
|
|
1024
|
+
for projects with multiple packages:
|
|
1025
|
+
|
|
1026
|
+
option 1: single changelog
|
|
1027
|
+
|
|
1028
|
+
# Changelog
|
|
1029
|
+
|
|
1030
|
+
## [2.0.0] - 2024-01-15
|
|
1031
|
+
|
|
1032
|
+
### Added
|
|
1033
|
+
- (package-a) New feature in package-a
|
|
1034
|
+
- (package-b) New feature in package-b
|
|
1035
|
+
|
|
1036
|
+
### Changed
|
|
1037
|
+
- (core) Core library change affecting all packages
|
|
1038
|
+
|
|
1039
|
+
|
|
1040
|
+
option 2: per-package changelogs
|
|
1041
|
+
|
|
1042
|
+
package-a/CHANGELOG.md
|
|
1043
|
+
package-b/CHANGELOG.md
|
|
1044
|
+
CHANGELOG.md (root, for project-wide changes)
|
|
1045
|
+
|
|
1046
|
+
|
|
1047
|
+
option 3: combined with sections
|
|
1048
|
+
|
|
1049
|
+
# Changelog
|
|
1050
|
+
|
|
1051
|
+
## [2.0.0] - 2024-01-15
|
|
1052
|
+
|
|
1053
|
+
### package-a
|
|
1054
|
+
- New feature
|
|
1055
|
+
- Bug fix
|
|
1056
|
+
|
|
1057
|
+
### package-b
|
|
1058
|
+
- Different feature
|
|
1059
|
+
- Different fix
|
|
1060
|
+
|
|
1061
|
+
|
|
1062
|
+
choosing the right approach
|
|
1063
|
+
|
|
1064
|
+
small monorepos (2-3 packages)
|
|
1065
|
+
use single changelog with scope prefixes
|
|
1066
|
+
|
|
1067
|
+
medium monorepos (3-10 packages)
|
|
1068
|
+
use per-package changelogs with root summary
|
|
1069
|
+
|
|
1070
|
+
large monorepos (10+ packages)
|
|
1071
|
+
use independent per-package changelogs
|
|
1072
|
+
generate combined view automatically
|
|
1073
|
+
|
|
1074
|
+
|
|
1075
|
+
PHASE 18: CHANGELOG ANALYSIS AND REPORTING
|
|
1076
|
+
|
|
1077
|
+
|
|
1078
|
+
extracting insights
|
|
1079
|
+
|
|
1080
|
+
changelog data can inform decisions:
|
|
1081
|
+
|
|
1082
|
+
release frequency
|
|
1083
|
+
analyze version dates to find release cadence
|
|
1084
|
+
|
|
1085
|
+
change type distribution
|
|
1086
|
+
count categories to find project focus
|
|
1087
|
+
|
|
1088
|
+
breaking changes
|
|
1089
|
+
track breaking changes to assess stability
|
|
1090
|
+
|
|
1091
|
+
hotfix frequency
|
|
1092
|
+
many hotfixes indicates quality issues
|
|
1093
|
+
|
|
1094
|
+
|
|
1095
|
+
example analysis
|
|
1096
|
+
|
|
1097
|
+
<terminal># count changes by type in last year</terminal>
|
|
1098
|
+
<terminal>grep "^###" CHANGELOG.md | sort | uniq -c</terminal>
|
|
1099
|
+
|
|
1100
|
+
<terminal># find release frequency</terminal>
|
|
1101
|
+
<terminal>grep "^## \[" CHANGELOG.md | head -20</terminal>
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
PHASE 19: CHANGELOG RULES (STRICT MODE)
|
|
1105
|
+
|
|
1106
|
+
|
|
1107
|
+
while this skill is active, these rules are MANDATORY:
|
|
1108
|
+
|
|
1109
|
+
[1] ALWAYS use keep a changelog format
|
|
1110
|
+
categories: added, changed, deprecated, removed, fixed, security
|
|
1111
|
+
|
|
1112
|
+
[2] write for USERS, not developers
|
|
1113
|
+
explain the impact of changes
|
|
1114
|
+
omit internal implementation details
|
|
1115
|
+
|
|
1116
|
+
[3] include unreleased section
|
|
1117
|
+
place at top of changelog
|
|
1118
|
+
even if empty, keep the placeholder
|
|
1119
|
+
|
|
1120
|
+
[4] use semantic versioning
|
|
1121
|
+
MAJOR.MINOR.PATCH
|
|
1122
|
+
determine version from actual changes
|
|
1123
|
+
|
|
1124
|
+
[5] add release date to each version
|
|
1125
|
+
format: YYYY-MM-DD
|
|
1126
|
+
no time component
|
|
1127
|
+
|
|
1128
|
+
[6] link to issues and commits
|
|
1129
|
+
provide traceability
|
|
1130
|
+
use (#123) or (abc1234) format
|
|
1131
|
+
|
|
1132
|
+
[7] include migration notes for breaking changes
|
|
1133
|
+
tell users how to update their code
|
|
1134
|
+
link to detailed migration guides if needed
|
|
1135
|
+
|
|
1136
|
+
[8] update changelog BEFORE release
|
|
1137
|
+
not after, not during
|
|
1138
|
+
changelog is part of the release
|
|
1139
|
+
|
|
1140
|
+
[9] use active voice in entries
|
|
1141
|
+
"Added feature" not "Feature was added"
|
|
1142
|
+
start each entry with a verb
|
|
1143
|
+
|
|
1144
|
+
[10] never clear changelog history
|
|
1145
|
+
keep all historical entries
|
|
1146
|
+
project history is valuable
|
|
1147
|
+
|
|
1148
|
+
|
|
1149
|
+
FINAL REMINDERS
|
|
1150
|
+
|
|
1151
|
+
|
|
1152
|
+
changelog is user-facing documentation
|
|
1153
|
+
|
|
1154
|
+
treat it with same care as API docs.
|
|
1155
|
+
it's often the first thing users check when upgrading.
|
|
1156
|
+
|
|
1157
|
+
|
|
1158
|
+
consistency builds trust
|
|
1159
|
+
|
|
1160
|
+
consistent format and quality signals professionalism.
|
|
1161
|
+
users trust projects with well-maintained changelogs.
|
|
1162
|
+
|
|
1163
|
+
|
|
1164
|
+
changelog enables fearless upgrades
|
|
1165
|
+
|
|
1166
|
+
clear migration notes and change descriptions
|
|
1167
|
+
let users upgrade with confidence.
|
|
1168
|
+
|
|
1169
|
+
when in doubt
|
|
1170
|
+
|
|
1171
|
+
document more rather than less.
|
|
1172
|
+
users can skip irrelevant info,
|
|
1173
|
+
but missing info causes confusion and frustration.
|
|
1174
|
+
|
|
1175
|
+
the goal
|
|
1176
|
+
|
|
1177
|
+
transparent project history.
|
|
1178
|
+
clear upgrade paths.
|
|
1179
|
+
informed user base.
|
|
1180
|
+
|
|
1181
|
+
now go document your changes.
|