ace-handbook 0.19.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.
- checksums.yaml +7 -0
- data/.ace-defaults/handbook/config.yml +4 -0
- data/.ace-defaults/nav/protocols/guide-sources/ace-handbook.yml +19 -0
- data/.ace-defaults/nav/protocols/tmpl-sources/ace-handbook.yml +10 -0
- data/.ace-defaults/nav/protocols/wfi-sources/ace-handbook.yml +19 -0
- data/CHANGELOG.md +362 -0
- data/LICENSE +21 -0
- data/README.md +42 -0
- data/Rakefile +12 -0
- data/exe/ace-handbook +6 -0
- data/handbook/guides/ai-agent-integration.g.md +625 -0
- data/handbook/guides/atom-pattern.g.md +371 -0
- data/handbook/guides/changelog.g.md +333 -0
- data/handbook/guides/cli-dry-cli.g.md +276 -0
- data/handbook/guides/cli-support-cli.g.md +277 -0
- data/handbook/guides/coding-standards/ruby.md +41 -0
- data/handbook/guides/coding-standards/rust.md +19 -0
- data/handbook/guides/coding-standards/typescript.md +20 -0
- data/handbook/guides/coding-standards.g.md +134 -0
- data/handbook/guides/debug-troubleshooting.g.md +62 -0
- data/handbook/guides/error-handling/ruby.md +29 -0
- data/handbook/guides/error-handling/rust.md +59 -0
- data/handbook/guides/error-handling/typescript.md +38 -0
- data/handbook/guides/error-handling.g.md +207 -0
- data/handbook/guides/meta/agents-definition.g.md +823 -0
- data/handbook/guides/meta/guides-definition.g.md +322 -0
- data/handbook/guides/meta/markdown-definition.g.md +210 -0
- data/handbook/guides/meta/tools-definition.g.md +159 -0
- data/handbook/guides/meta/workflow-instructions-definition.g.md +367 -0
- data/handbook/guides/mono-repo-patterns.g.md +92 -0
- data/handbook/guides/multi-agent-research.g.md +251 -0
- data/handbook/guides/performance/ruby.md +25 -0
- data/handbook/guides/performance/rust.md +48 -0
- data/handbook/guides/performance/typescript.md +32 -0
- data/handbook/guides/performance.g.md +211 -0
- data/handbook/guides/prompt-caching.g.md +83 -0
- data/handbook/guides/quality-assurance/ruby.md +33 -0
- data/handbook/guides/quality-assurance/rust.md +41 -0
- data/handbook/guides/quality-assurance/typescript.md +49 -0
- data/handbook/guides/quality-assurance.g.md +222 -0
- data/handbook/guides/strategic-planning.g.md +69 -0
- data/handbook/guides/troubleshooting/ruby.md +21 -0
- data/handbook/guides/troubleshooting/rust.md +20 -0
- data/handbook/guides/troubleshooting/typescript.md +36 -0
- data/handbook/guides/workflow-context-embedding.g.md +286 -0
- data/handbook/skills/as-handbook-init-project/SKILL.md +34 -0
- data/handbook/skills/as-handbook-manage-agents/SKILL.md +35 -0
- data/handbook/skills/as-handbook-manage-guides/SKILL.md +35 -0
- data/handbook/skills/as-handbook-manage-workflows/SKILL.md +35 -0
- data/handbook/skills/as-handbook-parallel-research/SKILL.md +29 -0
- data/handbook/skills/as-handbook-perform-delivery/SKILL.md +35 -0
- data/handbook/skills/as-handbook-review-guides/SKILL.md +32 -0
- data/handbook/skills/as-handbook-review-workflows/SKILL.md +32 -0
- data/handbook/skills/as-handbook-synthesize-research/SKILL.md +29 -0
- data/handbook/skills/as-handbook-update-docs/SKILL.md +35 -0
- data/handbook/skills/as-release/SKILL.md +50 -0
- data/handbook/skills/as-release-bump-version/SKILL.md +28 -0
- data/handbook/skills/as-release-rubygems-publish/SKILL.md +58 -0
- data/handbook/skills/as-release-update-changelog/SKILL.md +28 -0
- data/handbook/templates/completed-work-documentation.md +59 -0
- data/handbook/templates/cookbooks/cookbook.template.md +237 -0
- data/handbook/templates/research-comparison.template.md +175 -0
- data/handbook/workflow-instructions/handbook/init-project.wf.md +629 -0
- data/handbook/workflow-instructions/handbook/manage-agents.wf.md +379 -0
- data/handbook/workflow-instructions/handbook/manage-guides.wf.md +294 -0
- data/handbook/workflow-instructions/handbook/manage-workflows.wf.md +292 -0
- data/handbook/workflow-instructions/handbook/parallel-research.wf.md +328 -0
- data/handbook/workflow-instructions/handbook/perform-delivery.wf.md +267 -0
- data/handbook/workflow-instructions/handbook/research.wf.md +247 -0
- data/handbook/workflow-instructions/handbook/review-guides.wf.md +348 -0
- data/handbook/workflow-instructions/handbook/review-workflows.wf.md +299 -0
- data/handbook/workflow-instructions/handbook/synthesize-research.wf.md +429 -0
- data/handbook/workflow-instructions/handbook/update-docs.wf.md +338 -0
- data/lib/ace/handbook/atoms/provider_registry.rb +70 -0
- data/lib/ace/handbook/cli/commands/status.rb +36 -0
- data/lib/ace/handbook/cli/commands/sync.rb +36 -0
- data/lib/ace/handbook/cli.rb +51 -0
- data/lib/ace/handbook/models/skill_document.rb +25 -0
- data/lib/ace/handbook/molecules/skill_projection.rb +54 -0
- data/lib/ace/handbook/organisms/provider_syncer.rb +106 -0
- data/lib/ace/handbook/organisms/skill_inventory.rb +54 -0
- data/lib/ace/handbook/organisms/status_collector.rb +181 -0
- data/lib/ace/handbook/version.rb +7 -0
- data/lib/ace/handbook.rb +28 -0
- metadata +227 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
---
|
|
2
|
+
doc-type: guide
|
|
3
|
+
title: ATOM Component Classification House Rules
|
|
4
|
+
purpose: Documentation for ace-handbook/handbook/guides/atom-pattern.g.md
|
|
5
|
+
ace-docs:
|
|
6
|
+
last-updated: 2026-01-08
|
|
7
|
+
last-checked: 2026-03-21
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# ATOM Component Classification House Rules
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
This guide provides practical rules and decision-making tools for correctly classifying components within the ATOM architecture used in the Coding Agent Tools project. Understanding these rules is crucial for maintaining code organization, ensuring proper separation of concerns, and preventing architectural drift.
|
|
15
|
+
|
|
16
|
+
The ATOM architecture organizes code into distinct layers based on complexity and responsibility:
|
|
17
|
+
|
|
18
|
+
- **Models**: Pure data carriers
|
|
19
|
+
- **Molecules**: Behavior-oriented helpers
|
|
20
|
+
- **Organisms**: Complex business logic units
|
|
21
|
+
- **Atoms**: Basic utilities (foundation layer)
|
|
22
|
+
- **Ecosystems**: Cohesive groupings of organisms
|
|
23
|
+
|
|
24
|
+
## Why This Matters
|
|
25
|
+
|
|
26
|
+
Proper component classification ensures:
|
|
27
|
+
|
|
28
|
+
- **Maintainability**: Clear separation of concerns makes code easier to understand and modify
|
|
29
|
+
- **Reusability**: Components at the right abstraction level can be reused effectively
|
|
30
|
+
- **Testability**: Isolated responsibilities make unit testing straightforward
|
|
31
|
+
- **Architectural Consistency**: Prevents technical debt from accumulating due to misplaced code
|
|
32
|
+
|
|
33
|
+
## Quick Decision Flowchart
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Start: I need to create a new class
|
|
37
|
+
↓
|
|
38
|
+
Is it ONLY data with no behavior?
|
|
39
|
+
↓ YES ↓ NO
|
|
40
|
+
Use Models/ Does it perform I/O operations?
|
|
41
|
+
(Pure data structures) ↓ YES ↓ NO
|
|
42
|
+
Does it orchestrate multiple Is it a focused utility
|
|
43
|
+
components for business logic? or helper function?
|
|
44
|
+
↓ YES ↓ NO ↓
|
|
45
|
+
Use Organisms/ Use Molecules/ Use Atoms/
|
|
46
|
+
(Business logic) (I/O helpers) (Utilities)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Component Classification Rules
|
|
50
|
+
|
|
51
|
+
### Models (`lib/coding_agent_tools/models/`)
|
|
52
|
+
|
|
53
|
+
**Purpose**: Pure data carriers with no external dependencies or side effects.
|
|
54
|
+
|
|
55
|
+
**Characteristics**:
|
|
56
|
+
|
|
57
|
+
- Typically implemented as `Struct` classes
|
|
58
|
+
- No I/O operations (no file access, no network calls, no database queries)
|
|
59
|
+
- No external gem dependencies beyond Ruby standard library
|
|
60
|
+
- Focus solely on data representation and basic data manipulation
|
|
61
|
+
- Immutable when possible
|
|
62
|
+
|
|
63
|
+
**Good Examples**:
|
|
64
|
+
|
|
65
|
+
```ruby
|
|
66
|
+
# ✅ Good: Pure data structure
|
|
67
|
+
LlmModelInfo = Struct.new(:id, :name, :description, :default, keyword_init: true) do
|
|
68
|
+
def default?
|
|
69
|
+
default
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def to_h
|
|
73
|
+
{id: id, name: name, description: description, default: default}
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Bad Examples**:
|
|
79
|
+
|
|
80
|
+
```ruby
|
|
81
|
+
# ❌ Bad: Contains I/O operations
|
|
82
|
+
class UserProfile < Struct.new(:name, :email)
|
|
83
|
+
def save_to_file
|
|
84
|
+
File.write("profile.json", to_json) # I/O operation!
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# ❌ Bad: Has external dependencies
|
|
89
|
+
class ApiResponse < Struct.new(:data, :status)
|
|
90
|
+
def parse_with_nokogiri
|
|
91
|
+
Nokogiri::XML(data) # External gem dependency!
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Molecules (`lib/coding_agent_tools/molecules/`)
|
|
97
|
+
|
|
98
|
+
**Purpose**: Behavior-oriented helpers that encapsulate focused, reusable logic.
|
|
99
|
+
|
|
100
|
+
**Characteristics**:
|
|
101
|
+
|
|
102
|
+
- Single responsibility principle
|
|
103
|
+
- May perform I/O operations
|
|
104
|
+
- Compose atoms and other basic utilities
|
|
105
|
+
- Stateless or minimal state
|
|
106
|
+
- Can have external dependencies
|
|
107
|
+
- Focused on "how" to do something
|
|
108
|
+
|
|
109
|
+
**Good Examples**:
|
|
110
|
+
|
|
111
|
+
```ruby
|
|
112
|
+
# ✅ Good: Focused helper with specific responsibility
|
|
113
|
+
class HTTPRequestBuilder
|
|
114
|
+
def initialize(timeout: 30)
|
|
115
|
+
@timeout = timeout
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def build_get_request(url, headers = {})
|
|
119
|
+
# Focused logic for building HTTP requests
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# ✅ Good: Reusable wrapper functionality
|
|
124
|
+
class ExecutableWrapper
|
|
125
|
+
def initialize(command_path:, registration_method:)
|
|
126
|
+
@command_path = command_path
|
|
127
|
+
@registration_method = registration_method
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def call
|
|
131
|
+
setup_bundler
|
|
132
|
+
execute_cli
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Bad Examples**:
|
|
138
|
+
|
|
139
|
+
```ruby
|
|
140
|
+
# ❌ Bad: Too much business logic (should be Organism)
|
|
141
|
+
class OrderProcessor
|
|
142
|
+
def process_order(order)
|
|
143
|
+
validate_inventory(order)
|
|
144
|
+
calculate_shipping(order)
|
|
145
|
+
charge_payment(order)
|
|
146
|
+
send_confirmation_email(order)
|
|
147
|
+
update_analytics(order)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# ❌ Bad: Pure data (should be Model)
|
|
152
|
+
class UserSettings
|
|
153
|
+
attr_accessor :theme, :language, :notifications
|
|
154
|
+
|
|
155
|
+
def initialize(theme:, language:, notifications:)
|
|
156
|
+
@theme = theme
|
|
157
|
+
@language = language
|
|
158
|
+
@notifications = notifications
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Organisms (`lib/coding_agent_tools/organisms/`)
|
|
164
|
+
|
|
165
|
+
**Purpose**: Complex units that orchestrate molecules and atoms to achieve business goals.
|
|
166
|
+
|
|
167
|
+
**Characteristics**:
|
|
168
|
+
|
|
169
|
+
- Handle complete business use cases
|
|
170
|
+
- Orchestrate multiple components
|
|
171
|
+
- May maintain state across operations
|
|
172
|
+
- Focus on "what" business value to deliver
|
|
173
|
+
- Can be complex and feature-rich
|
|
174
|
+
|
|
175
|
+
**Good Examples**:
|
|
176
|
+
|
|
177
|
+
```ruby
|
|
178
|
+
# ✅ Good: Orchestrates multiple components for business purpose
|
|
179
|
+
class GeminiClient
|
|
180
|
+
def initialize(api_key:)
|
|
181
|
+
@request_builder = Molecules::HTTPRequestBuilder.new
|
|
182
|
+
@response_parser = Molecules::APIResponseParser.new
|
|
183
|
+
@credentials = Molecules::APICredentials.new(api_key)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def generate_text(prompt, **options)
|
|
187
|
+
# Orchestrates request building, API calling, and response parsing
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def list_models
|
|
191
|
+
# Complete business operation
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
# ✅ Good: Complex business logic coordination
|
|
196
|
+
class PromptProcessor
|
|
197
|
+
def process_prompt(template, context)
|
|
198
|
+
# Coordinates template parsing, variable substitution, validation
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Bad Examples**:
|
|
204
|
+
|
|
205
|
+
```ruby
|
|
206
|
+
# ❌ Bad: Simple utility (should be Molecule or Atom)
|
|
207
|
+
class StringFormatter
|
|
208
|
+
def self.capitalize_first(text)
|
|
209
|
+
text.capitalize
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
# ❌ Bad: Pure data structure (should be Model)
|
|
214
|
+
class ConfigurationSettings
|
|
215
|
+
attr_reader :api_endpoint, :timeout, :retry_count
|
|
216
|
+
|
|
217
|
+
def initialize(api_endpoint:, timeout:, retry_count:)
|
|
218
|
+
@api_endpoint = api_endpoint
|
|
219
|
+
@timeout = timeout
|
|
220
|
+
@retry_count = retry_count
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Decision Checklist
|
|
226
|
+
|
|
227
|
+
When creating a new class, ask yourself:
|
|
228
|
+
|
|
229
|
+
### For Models
|
|
230
|
+
|
|
231
|
+
- [ ] Does this class only hold data?
|
|
232
|
+
- [ ] Are there no I/O operations (file, network, database)?
|
|
233
|
+
- [ ] Are there no external gem dependencies?
|
|
234
|
+
- [ ] Could this be implemented as a Struct?
|
|
235
|
+
- [ ] Does it focus on "what" the data represents?
|
|
236
|
+
|
|
237
|
+
### For Molecules
|
|
238
|
+
|
|
239
|
+
- [ ] Does this class perform a specific, focused operation?
|
|
240
|
+
- [ ] Does it compose simpler components (atoms)?
|
|
241
|
+
- [ ] Is it reusable across different contexts?
|
|
242
|
+
- [ ] Does it encapsulate "how" to do something?
|
|
243
|
+
- [ ] Is the responsibility clear and single-focused?
|
|
244
|
+
|
|
245
|
+
### For Organisms
|
|
246
|
+
|
|
247
|
+
- [ ] Does this class handle a complete business use case?
|
|
248
|
+
- [ ] Does it orchestrate multiple molecules/atoms?
|
|
249
|
+
- [ ] Is it complex enough to warrant the organism level?
|
|
250
|
+
- [ ] Does it focus on "what" business value to deliver?
|
|
251
|
+
- [ ] Would breaking it down lose important context?
|
|
252
|
+
|
|
253
|
+
## Common Mistakes and Solutions
|
|
254
|
+
|
|
255
|
+
### Mistake 1: Data Objects in Wrong Location
|
|
256
|
+
|
|
257
|
+
**Problem**: Placing pure data structures in `molecules/` or `organisms/`
|
|
258
|
+
|
|
259
|
+
**Example**:
|
|
260
|
+
|
|
261
|
+
```ruby
|
|
262
|
+
# ❌ Wrong location: molecules/model.rb
|
|
263
|
+
class Model < Struct.new(:id, :name)
|
|
264
|
+
def to_s
|
|
265
|
+
"#{id}: #{name}"
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Solution**: Move to `models/` and rename appropriately
|
|
271
|
+
|
|
272
|
+
```ruby
|
|
273
|
+
# ✅ Correct location: models/llm_model_info.rb
|
|
274
|
+
LlmModelInfo = Struct.new(:id, :name, :description, :default, keyword_init: true)
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
**Teaching Example**: The `LlmModelInfo` class was originally misplaced in `molecules/` but was correctly refactored to `models/` because it's a pure data structure with no I/O operations or external dependencies.
|
|
278
|
+
|
|
279
|
+
### Mistake 2: Business Logic in Molecules
|
|
280
|
+
|
|
281
|
+
**Problem**: Putting complex orchestration logic in molecules
|
|
282
|
+
|
|
283
|
+
**Example**:
|
|
284
|
+
|
|
285
|
+
```ruby
|
|
286
|
+
# ❌ Wrong: Complex business logic in molecule
|
|
287
|
+
class OrderHandler
|
|
288
|
+
def process_complete_order(order)
|
|
289
|
+
validate_order(order)
|
|
290
|
+
reserve_inventory(order)
|
|
291
|
+
process_payment(order)
|
|
292
|
+
ship_order(order)
|
|
293
|
+
send_notifications(order)
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**Solution**: Move to organisms for complex business coordination
|
|
299
|
+
|
|
300
|
+
```ruby
|
|
301
|
+
# ✅ Correct: Business orchestration in organism
|
|
302
|
+
class OrderProcessor
|
|
303
|
+
def initialize
|
|
304
|
+
@validator = Molecules::OrderValidator.new
|
|
305
|
+
@inventory = Molecules::InventoryManager.new
|
|
306
|
+
@payment = Molecules::PaymentProcessor.new
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Mistake 3: Simple Utilities in Organisms
|
|
312
|
+
|
|
313
|
+
**Problem**: Over-engineering simple utilities as organisms
|
|
314
|
+
|
|
315
|
+
**Example**:
|
|
316
|
+
|
|
317
|
+
```ruby
|
|
318
|
+
# ❌ Wrong: Simple utility as organism
|
|
319
|
+
class TextFormatter
|
|
320
|
+
def format_currency(amount)
|
|
321
|
+
"$#{amount.round(2)}"
|
|
322
|
+
end
|
|
323
|
+
end
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Solution**: Use appropriate level (Atom or Molecule)
|
|
327
|
+
|
|
328
|
+
```ruby
|
|
329
|
+
# ✅ Correct: Simple utility as atom or molecule
|
|
330
|
+
module Atoms
|
|
331
|
+
module TextFormatter
|
|
332
|
+
def self.format_currency(amount)
|
|
333
|
+
"$#{amount.round(2)}"
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
## Future Enforcement Mechanisms
|
|
340
|
+
|
|
341
|
+
To maintain these standards as the project grows, consider implementing:
|
|
342
|
+
|
|
343
|
+
### Automated Checks
|
|
344
|
+
|
|
345
|
+
- **RuboCop Rules**: Custom cops to detect misplaced components
|
|
346
|
+
- **CI Pipeline Checks**: Automated validation during pull requests
|
|
347
|
+
- **File Naming Conventions**: Enforce naming patterns that reflect component type
|
|
348
|
+
|
|
349
|
+
### Code Review Guidelines
|
|
350
|
+
|
|
351
|
+
- **Classification Review**: Every new class should be reviewed for proper placement
|
|
352
|
+
- **Architecture Review**: Periodic reviews of component boundaries
|
|
353
|
+
- **Refactoring Guidelines**: Clear process for moving misplaced components
|
|
354
|
+
|
|
355
|
+
### Documentation Integration
|
|
356
|
+
|
|
357
|
+
- **ADR Updates**: Keep Architecture Decision Records synchronized
|
|
358
|
+
- **Cross-References**: Link to this guide from README and CONTRIBUTING files
|
|
359
|
+
- **Examples**: Maintain current examples as the codebase evolves
|
|
360
|
+
|
|
361
|
+
## Cross-References
|
|
362
|
+
|
|
363
|
+
- [Architecture Documentation](docs/architecture.md) - Overall system architecture
|
|
364
|
+
- [Coding Standards](./coding-standards.g.md) - General coding practices
|
|
365
|
+
- [Testing Guidelines](guide://testing) - Testing patterns for each component type
|
|
366
|
+
|
|
367
|
+
## Conclusion
|
|
368
|
+
|
|
369
|
+
Following these ATOM classification rules ensures our codebase remains maintainable, testable, and architecturally consistent. When in doubt, err on the side of simpler classification (Models before Molecules, Molecules before Organisms) and refactor up in complexity only when the additional abstraction provides clear value.
|
|
370
|
+
|
|
371
|
+
Remember: The goal is not perfect classification, but consistent and logical organization that serves the team's long-term productivity and code quality goals.
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
---
|
|
2
|
+
doc-type: guide
|
|
3
|
+
title: Changelog Writing Guide
|
|
4
|
+
purpose: Documentation for ace-handbook/handbook/guides/changelog.g.md
|
|
5
|
+
ace-docs:
|
|
6
|
+
last-updated: 2026-03-08
|
|
7
|
+
last-checked: 2026-03-21
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Changelog Writing Guide
|
|
11
|
+
|
|
12
|
+
## Goal
|
|
13
|
+
|
|
14
|
+
This guide provides standards and best practices for writing and maintaining changelogs that effectively communicate project changes to users, contributors, and stakeholders. It ensures consistency, clarity, and usefulness of release documentation.
|
|
15
|
+
|
|
16
|
+
## Changelog Format
|
|
17
|
+
|
|
18
|
+
We follow the [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) format with project-specific adaptations. All changelogs should be written in Markdown and stored in `CHANGELOG.md` at the project root.
|
|
19
|
+
|
|
20
|
+
### Standard Structure
|
|
21
|
+
|
|
22
|
+
```markdown
|
|
23
|
+
# Changelog
|
|
24
|
+
|
|
25
|
+
All notable changes to this project will be documented in this file.
|
|
26
|
+
|
|
27
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
28
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
29
|
+
|
|
30
|
+
## [Unreleased]
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
- New features that have been added
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
- Changes in existing functionality
|
|
37
|
+
|
|
38
|
+
### Deprecated
|
|
39
|
+
- Soon-to-be removed features
|
|
40
|
+
|
|
41
|
+
### Removed
|
|
42
|
+
- Now removed features
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
- Any bug fixes
|
|
46
|
+
|
|
47
|
+
### Security
|
|
48
|
+
- In case of vulnerabilities
|
|
49
|
+
|
|
50
|
+
## [1.0.0] - 2024-01-15
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
- Initial release with core functionality
|
|
54
|
+
- Basic API endpoints
|
|
55
|
+
- User authentication system
|
|
56
|
+
|
|
57
|
+
[Unreleased]: https://github.com/user/repo/compare/v1.0.0...HEAD
|
|
58
|
+
[1.0.0]: https://github.com/user/repo/releases/tag/v1.0.0
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Change Categories
|
|
62
|
+
|
|
63
|
+
Use the following categories to organize changes:
|
|
64
|
+
|
|
65
|
+
### Added
|
|
66
|
+
|
|
67
|
+
- New features
|
|
68
|
+
- New API endpoints
|
|
69
|
+
- New configuration options
|
|
70
|
+
- New documentation sections
|
|
71
|
+
- New dependencies
|
|
72
|
+
|
|
73
|
+
**Example:**
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
### Added
|
|
77
|
+
- Dark mode toggle in user preferences
|
|
78
|
+
- Support for bulk operations in API
|
|
79
|
+
- Integration with external authentication providers
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Changed
|
|
83
|
+
|
|
84
|
+
- Changes in existing functionality
|
|
85
|
+
- Updated dependencies
|
|
86
|
+
- Modified default behaviors
|
|
87
|
+
- Improved performance
|
|
88
|
+
- Enhanced user interface
|
|
89
|
+
|
|
90
|
+
**Example:**
|
|
91
|
+
|
|
92
|
+
```markdown
|
|
93
|
+
### Changed
|
|
94
|
+
- Improved loading performance by 40%
|
|
95
|
+
- Updated user interface for better accessibility
|
|
96
|
+
- Changed default timeout from 30s to 60s
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Deprecated
|
|
100
|
+
|
|
101
|
+
- Features that are still available but will be removed
|
|
102
|
+
- API endpoints marked for removal
|
|
103
|
+
- Configuration options being phased out
|
|
104
|
+
|
|
105
|
+
**Example:**
|
|
106
|
+
|
|
107
|
+
```markdown
|
|
108
|
+
### Deprecated
|
|
109
|
+
- Legacy authentication API (use v2 endpoints instead)
|
|
110
|
+
- Configuration option `old_setting` (replaced by `new_setting`)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Removed
|
|
114
|
+
|
|
115
|
+
- Features that have been completely removed
|
|
116
|
+
- Deleted API endpoints
|
|
117
|
+
- Removed configuration options
|
|
118
|
+
- Dropped support for versions/platforms
|
|
119
|
+
|
|
120
|
+
**Example:**
|
|
121
|
+
|
|
122
|
+
```markdown
|
|
123
|
+
### Removed
|
|
124
|
+
- Support for Node.js v14 (minimum version is now v16)
|
|
125
|
+
- Deprecated `/api/v1/legacy` endpoints
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Fixed
|
|
129
|
+
|
|
130
|
+
- Bug fixes
|
|
131
|
+
- Security patches
|
|
132
|
+
- Performance improvements that fix issues
|
|
133
|
+
- Documentation corrections
|
|
134
|
+
|
|
135
|
+
**Example:**
|
|
136
|
+
|
|
137
|
+
```markdown
|
|
138
|
+
### Fixed
|
|
139
|
+
- Memory leak in background processing
|
|
140
|
+
- Incorrect validation error messages
|
|
141
|
+
- Race condition in concurrent requests
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Security
|
|
145
|
+
|
|
146
|
+
- Security vulnerability fixes
|
|
147
|
+
- Security enhancements
|
|
148
|
+
- Important security-related changes
|
|
149
|
+
|
|
150
|
+
**Example:**
|
|
151
|
+
|
|
152
|
+
```markdown
|
|
153
|
+
### Security
|
|
154
|
+
- Fixed XSS vulnerability in user input handling
|
|
155
|
+
- Enhanced password encryption algorithm
|
|
156
|
+
- Updated dependencies to address security advisories
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Writing Guidelines
|
|
160
|
+
|
|
161
|
+
### 1. Use Clear, Action-Oriented Language
|
|
162
|
+
|
|
163
|
+
**Good:**
|
|
164
|
+
|
|
165
|
+
- "Added user authentication system"
|
|
166
|
+
- "Fixed memory leak in data processing"
|
|
167
|
+
- "Improved API response time by 25%"
|
|
168
|
+
|
|
169
|
+
**Avoid:**
|
|
170
|
+
|
|
171
|
+
- "Some changes to auth"
|
|
172
|
+
- "Fixed stuff"
|
|
173
|
+
- "Performance improvements"
|
|
174
|
+
|
|
175
|
+
### 2. Include Context and Impact
|
|
176
|
+
|
|
177
|
+
**Good:**
|
|
178
|
+
|
|
179
|
+
```markdown
|
|
180
|
+
### Changed
|
|
181
|
+
- Updated password requirements to include special characters for enhanced security
|
|
182
|
+
- Increased default session timeout from 30 minutes to 2 hours based on user feedback
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Avoid:**
|
|
186
|
+
|
|
187
|
+
```markdown
|
|
188
|
+
### Changed
|
|
189
|
+
- Password validation
|
|
190
|
+
- Session timeout
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 3. Reference Issues and Pull Requests
|
|
194
|
+
|
|
195
|
+
When applicable, link to relevant issues, pull requests, or task documentation:
|
|
196
|
+
|
|
197
|
+
```markdown
|
|
198
|
+
### Fixed
|
|
199
|
+
- Resolved database connection timeout issue ([#123](https://github.com/user/repo/issues/123))
|
|
200
|
+
- Fixed user profile update validation ([PR #145](https://github.com/user/repo/pull/145))
|
|
201
|
+
- Corrected task workflow documentation inconsistencies (Task v.0.3.0+task.14)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 4. Group Related Changes
|
|
205
|
+
|
|
206
|
+
```markdown
|
|
207
|
+
### Added
|
|
208
|
+
- User management dashboard with the following features:
|
|
209
|
+
- Create and edit user accounts
|
|
210
|
+
- Assign roles and permissions
|
|
211
|
+
- View user activity logs
|
|
212
|
+
- Export user data
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 5. Use Consistent Formatting
|
|
216
|
+
|
|
217
|
+
- Start each item with a capital letter
|
|
218
|
+
- Use present tense ("Add" not "Added")
|
|
219
|
+
- End with a period for complete sentences
|
|
220
|
+
- Use bullet points for lists
|
|
221
|
+
- Maintain consistent indentation
|
|
222
|
+
|
|
223
|
+
## Process Guidelines
|
|
224
|
+
|
|
225
|
+
### When to Update the Changelog
|
|
226
|
+
|
|
227
|
+
1. **During Development:**
|
|
228
|
+
- Add entries to the `[Unreleased]` section as features are completed
|
|
229
|
+
- Update immediately after merging significant changes
|
|
230
|
+
- Include changelog updates in the same commit/PR as the feature
|
|
231
|
+
|
|
232
|
+
2. **Before Release:**
|
|
233
|
+
- Review all `[Unreleased]` entries for accuracy and completeness
|
|
234
|
+
- Move entries from `[Unreleased]` to the new version section
|
|
235
|
+
- Add release date and version links
|
|
236
|
+
- Ensure all significant changes are documented
|
|
237
|
+
|
|
238
|
+
3. **After Release:**
|
|
239
|
+
- Verify the changelog accurately reflects the released version
|
|
240
|
+
- Start a new `[Unreleased]` section for future changes
|
|
241
|
+
|
|
242
|
+
### Who Is Responsible
|
|
243
|
+
|
|
244
|
+
- **Developers:** Add changelog entries for their own changes
|
|
245
|
+
- **Release Manager:** Review and finalize changelog before release
|
|
246
|
+
- **Project Lead:** Ensure changelog standards are followed
|
|
247
|
+
|
|
248
|
+
### Integration with Release Process
|
|
249
|
+
|
|
250
|
+
The changelog should be updated as part of the standard release workflow:
|
|
251
|
+
|
|
252
|
+
1. **During Development:** Maintain `[Unreleased]` section
|
|
253
|
+
2. **Pre-Release:** Review and organize entries
|
|
254
|
+
3. **Version Bump:** Move entries to versioned section
|
|
255
|
+
4. **Release:** Publish changelog with release notes
|
|
256
|
+
5. **Post-Release:** Verify accuracy and completeness
|
|
257
|
+
|
|
258
|
+
## Version Linking
|
|
259
|
+
|
|
260
|
+
Include comparison links at the bottom of the changelog:
|
|
261
|
+
|
|
262
|
+
```markdown
|
|
263
|
+
[Unreleased]: https://github.com/user/repo/compare/v1.2.0...HEAD
|
|
264
|
+
[1.2.0]: https://github.com/user/repo/compare/v1.1.0...v1.2.0
|
|
265
|
+
[1.1.0]: https://github.com/user/repo/compare/v1.0.0...v1.1.0
|
|
266
|
+
[1.0.0]: https://github.com/user/repo/releases/tag/v1.0.0
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
For projects without public repositories, use internal tracking systems or omit links if not applicable.
|
|
270
|
+
|
|
271
|
+
## Common Mistakes to Avoid
|
|
272
|
+
|
|
273
|
+
1. **Overly Technical Language:** Write for users, not just developers
|
|
274
|
+
2. **Missing Context:** Explain why changes were made when relevant
|
|
275
|
+
3. **Inconsistent Categories:** Use the standard categories consistently
|
|
276
|
+
4. **Burying Important Changes:** Put breaking changes and security fixes prominently
|
|
277
|
+
5. **Incomplete Information:** Include all user-facing changes
|
|
278
|
+
6. **Late Updates:** Don't wait until release to update the changelog
|
|
279
|
+
|
|
280
|
+
## Examples
|
|
281
|
+
|
|
282
|
+
### Good Changelog Entry
|
|
283
|
+
|
|
284
|
+
```markdown
|
|
285
|
+
## [2.1.0] - 2024-03-15
|
|
286
|
+
|
|
287
|
+
### Added
|
|
288
|
+
- Real-time notifications for task updates with configurable preferences
|
|
289
|
+
- Bulk task operations (mark complete, assign, delete) in project dashboard
|
|
290
|
+
- Export functionality for project reports in CSV and PDF formats
|
|
291
|
+
- Integration with external calendar systems (Google Calendar, Outlook)
|
|
292
|
+
|
|
293
|
+
### Changed
|
|
294
|
+
- Improved task loading performance by implementing pagination (loads 50% faster)
|
|
295
|
+
- Enhanced user interface with improved accessibility features and keyboard navigation
|
|
296
|
+
- Updated email templates for better mobile responsiveness
|
|
297
|
+
|
|
298
|
+
### Fixed
|
|
299
|
+
- Resolved issue where task assignments were not triggering notifications ([#234](link))
|
|
300
|
+
- Fixed memory leak in real-time update system that occurred during long sessions
|
|
301
|
+
- Corrected timezone handling in deadline calculations for international teams
|
|
302
|
+
|
|
303
|
+
### Security
|
|
304
|
+
- Updated authentication library to address potential session fixation vulnerability
|
|
305
|
+
- Enhanced input validation to prevent XSS attacks in task descriptions
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### Poor Changelog Entry
|
|
309
|
+
|
|
310
|
+
```markdown
|
|
311
|
+
## [2.1.0] - 2024-03-15
|
|
312
|
+
|
|
313
|
+
### Added
|
|
314
|
+
- Notifications
|
|
315
|
+
- Bulk operations
|
|
316
|
+
- Export stuff
|
|
317
|
+
|
|
318
|
+
### Changed
|
|
319
|
+
- Performance improvements
|
|
320
|
+
- UI updates
|
|
321
|
+
|
|
322
|
+
### Fixed
|
|
323
|
+
- Various bugs
|
|
324
|
+
- Memory issues
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
## Related Documentation
|
|
328
|
+
|
|
329
|
+
- [Version Control Message Guide](./version-control-system-message.g.md) (Commit message standards)
|
|
330
|
+
- [Project Management Guide](./project-management.g.md) (Release workflow integration)
|
|
331
|
+
- [Publish Release Workflow](wfi://release/publish) (Release process overview and step-by-step actions)
|
|
332
|
+
- [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) (External reference)
|
|
333
|
+
- [Semantic Versioning](https://semver.org/) (Versioning standards)
|