@docyrus/docyrus 0.0.62 → 0.0.64

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.
@@ -1,25 +1,38 @@
1
1
  ---
2
2
  name: release-manager
3
3
  description: >
4
- Manage project releases, version bumping, changelog generation, and GitHub release creation using the docyrus release CLI.
5
- Handles SemVer versioning, changelog assembly (including Docyrus platform changes), git tagging, and optional GitHub release publishing.
4
+ End-to-end release pipeline for Docyrus projects: version bumping (SemVer), changelog generation (Keep a Changelog + Conventional Commits), git tagging, and GitHub release publishing via the `docyrus release` CLI. Also handles standalone changelog work — generating a CHANGELOG.md from scratch, appending entries for a new release, or reformatting a messy existing changelog — for any git-based project, with or without a convention. Intelligently categorizes commits into Added/Changed/Deprecated/Removed/Fixed/Security, detects breaking changes, links PRs/issues, and surfaces Docyrus platform modifications (data sources, fields, enums, knowledge graph) alongside code changes.
6
5
 
7
- **Triggers — use this skill when:**
8
- - User says "release", "new version", "bump version", "tag release", "cut a release"
9
- - User wants to publish, ship, or prepare a release
10
- - User asks about the current version, release status, or unreleased changes
11
- - User says "what's changed since last release"
6
+ **Triggers — use this skill when:**
7
+ - User says "release", "new version", "bump version", "tag release", "cut a release", "ship it"
8
+ - User wants to publish, ship, or prepare a release
9
+ - User asks about the current version, release status, or unreleased changes
10
+ - User says "what's changed since last release"
11
+ - User asks to "generate", "create", "update", or "write" a changelog
12
+ - User mentions "CHANGELOG", "changelog", "release notes"
13
+ - User says "document changes", "what changed since last release"
14
+ - User asks to "clean up" or "reformat" an existing changelog
15
+ - User runs `docyrus release new-version` and needs changelog content
12
16
 
13
- **Covers:** Projects using the docyrus project plan system with package.json versioning.
17
+ **Covers:** Projects using the Docyrus project plan system with `package.json` versioning (full release pipeline), and any git-based project (changelog-only workflows). Handles Conventional Commits (feat/fix/chore), Angular convention, basic prefixes (Add/Fix/Remove), and freeform commit messages. Outputs Keep a Changelog format with optional Common Changelog enhancements.
14
18
  ---
15
19
 
16
20
  # Release Manager
17
21
 
18
- Manage releases using the `docyrus release` CLI commands.
22
+ Manage releases and changelogs. This skill has two halves:
19
23
 
20
- ## Quick Reference
24
+ 1. **Full release pipeline** — for Docyrus-managed projects, run `docyrus release new-version` to bump the version, assemble a changelog, tag, and publish a GitHub release in one shot.
25
+ 2. **Changelog-only workflows** — for any git-based project, generate or update a `CHANGELOG.md` from git history following [Keep a Changelog](https://keepachangelog.com/).
21
26
 
22
- ### Check release status
27
+ Pick the half that matches what the user is asking for. Many real tasks cross both halves (e.g. "prepare a release" → generate a changelog entry, bump the version, create the tag and release).
28
+
29
+ ---
30
+
31
+ ## Part 1 — Full Release Pipeline (`docyrus release`)
32
+
33
+ ### Quick Reference
34
+
35
+ #### Check release status
23
36
 
24
37
  ```bash
25
38
  docyrus release status --json
@@ -27,7 +40,7 @@ docyrus release status --json
27
40
 
28
41
  Returns: current version, latest git tag, unreleased commit count, and suggested bump type.
29
42
 
30
- ### Create a release (auto-detect bump)
43
+ #### Create a release (auto-detect bump)
31
44
 
32
45
  ```bash
33
46
  docyrus release new-version
@@ -38,19 +51,19 @@ Automatically detects the bump type from commits:
38
51
  - New features (`feat:`) → **minor**
39
52
  - Fixes and other changes → **patch**
40
53
 
41
- ### Create a release with explicit bump
54
+ #### Create a release with explicit bump
42
55
 
43
56
  ```bash
44
57
  docyrus release new-version --bump minor
45
58
  ```
46
59
 
47
- ### Create a release with explicit version
60
+ #### Create a release with explicit version
48
61
 
49
62
  ```bash
50
63
  docyrus release new-version --version 1.0.0
51
64
  ```
52
65
 
53
- ### Preview a release (dry run)
66
+ #### Preview a release (dry run)
54
67
 
55
68
  ```bash
56
69
  docyrus release new-version --bump minor --dryRun
@@ -58,7 +71,7 @@ docyrus release new-version --bump minor --dryRun
58
71
 
59
72
  Shows the changelog preview and version bump without committing any changes.
60
73
 
61
- ### Skip specific steps
74
+ #### Skip specific steps
62
75
 
63
76
  ```bash
64
77
  docyrus release new-version --bump patch --skipGithubRelease
@@ -66,14 +79,14 @@ docyrus release new-version --bump minor --skipTag
66
79
  docyrus release new-version --bump minor --skipChangelog
67
80
  ```
68
81
 
69
- ## Release Workflow
82
+ ### Release Workflow
70
83
 
71
84
  When `docyrus release new-version` runs, it performs these steps in order:
72
85
 
73
86
  1. **Read current version** from `package.json`
74
87
  2. **Extract commits** since the last git tag
75
88
  3. **Detect bump type** (or use the provided one)
76
- 4. **Generate changelog** — categorizes commits into Added/Changed/Fixed/Removed/Security, plus Docyrus Platform changes
89
+ 4. **Generate changelog** — categorizes commits into Added/Changed/Fixed/Removed/Security, plus Docyrus Platform changes (see Part 2 for the full algorithm)
77
90
  5. **Update CHANGELOG.md** — inserts new version section at the top
78
91
  6. **Update package.json** — bumps the version number
79
92
  7. **Update project-plan.json** — sets the `projectVersion` field
@@ -81,23 +94,449 @@ When `docyrus release new-version` runs, it performs these steps in order:
81
94
  9. **Git tag** — `vX.Y.Z`
82
95
  10. **GitHub release** — creates a release via `gh release create` (requires `gh` CLI)
83
96
 
84
- ## Docyrus Platform Changes
85
-
86
- The changelog generator automatically detects Docyrus backend modifications:
87
-
88
- - New data sources, fields, and enums created via `docyrus studio`
89
- - Data source architecture changes from `data-sources.plan.json`
90
- - Knowledge graph updates
91
-
92
- These appear under a **Docyrus Platform** section in the changelog.
93
-
94
- ## Version Initialization
97
+ ### Version Initialization
95
98
 
96
99
  When a project plan is first created, `package.json` is initialized to version `0.1.0`. Each phase and feature is stamped with the current `projectVersion` at creation time.
97
100
 
98
- ## After Release
101
+ ### After Release
99
102
 
100
103
  After creating a release, consider:
101
104
  - Pushing the commit and tag: `git push && git push --tags`
102
105
  - Notifying the team about the new version
103
106
  - If authenticated with Docyrus, the release record is automatically created in the platform
107
+
108
+ ---
109
+
110
+ ## Part 2 — Changelog Workflow
111
+
112
+ Use this half whenever the user asks for changelog work outside the full release pipeline (standalone `CHANGELOG.md` generation, reformat, or preparing a release entry for a non-Docyrus project).
113
+
114
+ ### Philosophy
115
+
116
+ A changelog is for **humans**, not machines.
117
+
118
+ It answers: "What meaningful changes happened between version X and version Y?"
119
+
120
+ Raw commit logs fail at this because they contain noise — typo fixes, merge commits, CI tweaks, and refactors that don't affect users. This skill filters signal from noise and writes entries that a user or contributor can actually understand.
121
+
122
+ ### Phase 1 — Repository Analysis
123
+
124
+ Before generating anything, understand the project's commit and versioning patterns.
125
+
126
+ ```bash
127
+ # 1. Check if we're in a git repo
128
+ git rev-parse --is-inside-work-tree 2>/dev/null
129
+
130
+ # 2. Get all tags (versions) sorted by date
131
+ git tag --sort=-creatordate | head -30
132
+
133
+ # 3. Detect versioning scheme
134
+ # SemVer: v1.2.3 or 1.2.3
135
+ # CalVer: 2025.01, 2025-01-15
136
+ # Other: named releases, build numbers
137
+ git tag --sort=-creatordate | head -10
138
+
139
+ # 4. Detect commit convention
140
+ # Sample recent commits to identify the pattern
141
+ git log --oneline -30
142
+
143
+ # 5. Check for existing changelog
144
+ cat CHANGELOG.md 2>/dev/null
145
+ cat HISTORY.md 2>/dev/null
146
+ cat CHANGES.md 2>/dev/null
147
+
148
+ # 6. Check for existing config that hints at convention
149
+ cat .commitlintrc* commitlint.config.* 2>/dev/null # Commitlint
150
+ cat .czrc .cz.toml 2>/dev/null # Commitizen
151
+ cat cliff.toml 2>/dev/null # git-cliff
152
+ cat .versionrc* 2>/dev/null # standard-version
153
+
154
+ # 7. Get remote URL for PR/issue links
155
+ git remote get-url origin 2>/dev/null
156
+
157
+ # 8. Package manifest for current version
158
+ cat package.json 2>/dev/null | grep '"version"'
159
+ cat pyproject.toml 2>/dev/null | grep 'version'
160
+ cat Cargo.toml 2>/dev/null | grep '^version'
161
+ ```
162
+
163
+ **Extract from the analysis:**
164
+
165
+ | Fact | How to determine |
166
+ |------|-----------------|
167
+ | Commit convention | Pattern match on recent commits (see detection rules below) |
168
+ | Versioning scheme | Tag format analysis |
169
+ | Latest version/tag | Most recent tag |
170
+ | Remote URL | `git remote get-url origin` — needed for PR/issue links |
171
+ | Existing changelog | Check for CHANGELOG.md or variants |
172
+ | Unreleased commits | Commits since the latest tag |
173
+
174
+ ### Phase 2 — Commit Convention Detection
175
+
176
+ Analyze the last 30–50 commits to detect which convention is in use.
177
+
178
+ Apply these rules in order:
179
+
180
+ **Conventional Commits / Angular**
181
+
182
+ ```
183
+ Pattern: ^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?!?:
184
+ Example: feat(auth): add OAuth2 support
185
+ Example: fix!: resolve race condition in queue
186
+ ```
187
+
188
+ → If >50% of commits match this pattern, use Conventional Commits parsing.
189
+
190
+ **Basic Prefix**
191
+
192
+ ```
193
+ Pattern: ^(Add|Fix|Remove|Update|Change|Deprecate|Security)[: ]
194
+ Example: Add user export feature
195
+ Example: Fix login redirect loop
196
+ ```
197
+
198
+ → If >50% of commits match this pattern, use basic prefix parsing.
199
+
200
+ **Freeform / No Convention**
201
+
202
+ → If neither pattern dominates, use AI-assisted categorization (see Phase 3).
203
+
204
+ Report the detected convention to the user before proceeding.
205
+
206
+ ### Phase 3 — Commit Extraction & Categorization
207
+
208
+ Extract commits for the target range and categorize them.
209
+
210
+ ```bash
211
+ # All commits since last tag (for Unreleased section)
212
+ git log $(git describe --tags --abbrev=0 2>/dev/null)..HEAD \
213
+ --pretty=format:"%H|%s|%b|%an|%ae|%aI" 2>/dev/null
214
+
215
+ # Commits between two tags (for a specific version)
216
+ git log v1.1.0..v1.2.0 \
217
+ --pretty=format:"%H|%s|%b|%an|%ae|%aI"
218
+
219
+ # If no tags exist, get all commits
220
+ git log --pretty=format:"%H|%s|%b|%an|%ae|%aI"
221
+
222
+ # Get PR/merge info if available
223
+ git log --merges --oneline -20
224
+ ```
225
+
226
+ #### Category Mapping
227
+
228
+ Map commits to Keep a Changelog categories:
229
+
230
+ | Keep a Changelog Category | Conventional Commits types | Basic prefixes | Description |
231
+ |---------------------------|---------------------------|----------------|-------------|
232
+ | **Added** | `feat` | Add, Create, Implement | New features |
233
+ | **Changed** | `refactor`, `perf`, `style` | Change, Update, Refactor, Improve | Changes to existing functionality |
234
+ | **Deprecated** | — (detect from message) | Deprecate | Soon-to-be removed features |
235
+ | **Removed** | — (detect from message) | Remove, Delete, Drop | Removed features |
236
+ | **Fixed** | `fix` | Fix, Resolve, Correct | Bug fixes |
237
+ | **Security** | — (detect from message) | Security | Vulnerability fixes |
238
+
239
+ #### Entries to SKIP (noise filtering)
240
+
241
+ Do NOT include these in the changelog unless they have user-facing impact:
242
+
243
+ - Merge commits (`Merge branch...`, `Merge pull request...`) — extract the PR title instead
244
+ - CI/CD changes (`ci:`, `build:`, changes only to `.github/workflows/`)
245
+ - Chore commits (`chore:`, dependency bumps without breaking changes)
246
+ - Typo fixes in code comments
247
+ - Formatting/linting-only changes (`style:` that don't affect behavior)
248
+ - Version bump commits (`chore: bump version to...`)
249
+ - Commits that only touch test files (unless adding test coverage is noteworthy)
250
+
251
+ #### Freeform Commit Categorization
252
+
253
+ When commits don't follow a convention, categorize by analyzing the message content:
254
+
255
+ - Contains "add", "new", "create", "implement", "introduce" → **Added**
256
+ - Contains "fix", "resolve", "correct", "patch", "bug" → **Fixed**
257
+ - Contains "remove", "delete", "drop" → **Removed**
258
+ - Contains "deprecate" → **Deprecated**
259
+ - Contains "security", "vulnerability", "CVE" → **Security**
260
+ - Contains "update", "change", "refactor", "improve", "optimize" → **Changed**
261
+ - If unclear, use the diff to determine: new files = Added, deleted files = Removed, modified = Changed
262
+
263
+ #### Breaking Change Detection
264
+
265
+ Flag breaking changes regardless of convention:
266
+
267
+ - Conventional: `!` after type/scope, or `BREAKING CHANGE:` in footer
268
+ - Message content: "breaking", "incompatible", "migration required"
269
+ - SemVer major bump between tags
270
+ - Removal of public API functions/endpoints
271
+
272
+ Mark breaking entries with **BREAKING:** prefix in the changelog.
273
+
274
+ ### Phase 3b — Docyrus Platform Modifications
275
+
276
+ In addition to code changes, scan for Docyrus platform modifications made through the CLI or API. These should be included alongside code changes in the changelog.
277
+
278
+ The full release pipeline's changelog generator runs this step automatically. When generating changelogs standalone, apply the same detection:
279
+
280
+ **Detection methods:**
281
+
282
+ 1. Search git diff for changes to `docyrus/` directory files (data-sources.plan.json, knowledge files, project-plan changes)
283
+ 2. Look for commit messages containing: `docyrus studio`, `data source`, `field`, `enum`, `app`
284
+ 3. Check for `docyrus/project-plan/` changes that reference architecture tasks
285
+ 4. Look for `.docyrus/` configuration changes
286
+
287
+ **Map to changelog categories:**
288
+
289
+ - **Added** — New data sources created, new fields added, new enum options, new apps provisioned
290
+ - **Changed** — Field type changes, enum updates, data source configuration changes, knowledge graph updates
291
+ - **Removed** — Deleted data sources, removed fields, removed enum options
292
+
293
+ **Entry format for backend changes:**
294
+
295
+ ```markdown
296
+ - Add "Contacts" data source with 12 fields (name, email, phone, ...)
297
+ - Add "Priority" enum to Opportunity data source (Low, Medium, High, Critical)
298
+ - Update "Account" data source: add "industry" and "revenue" fields
299
+ - Remove deprecated "legacy_status" field from Tasks data source
300
+ ```
301
+
302
+ When both code changes and Docyrus platform changes exist, include platform changes under a **Docyrus Platform** heading within the version section:
303
+
304
+ ```markdown
305
+ ### Docyrus Platform
306
+
307
+ - Add "Contacts" data source with name, email, phone fields
308
+ - Update "Opportunity" enum: add Critical priority level
309
+ ```
310
+
311
+ ### Phase 4 — Entry Writing
312
+
313
+ Transform raw commit data into human-readable changelog entries.
314
+
315
+ #### Writing Rules
316
+
317
+ 1. **Write for the user, not the developer.**
318
+ "Add dark mode support" not "feat(ui): implement dark-mode toggle via CSS custom properties in ThemeProvider"
319
+ 2. **Use imperative mood.**
320
+ "Add", "Fix", "Remove" — not "Added", "Fixed", "Removed"
321
+ 3. **One entry per meaningful change.**
322
+ Squash related commits into a single entry
323
+ 4. **Include references.**
324
+ Link to PR numbers and issues: `(#123)`, `([#123](url))`
325
+ 5. **Credit authors for external contributions.**
326
+ `(@username)` for non-core contributors
327
+ 6. **Lead with impact.**
328
+ Put the most important changes first within each category
329
+ 7. **Be specific.**
330
+ "Fix crash when uploading files larger than 10MB" not "Fix upload bug"
331
+ 8. **Keep entries to one line.**
332
+ If you need more, the change probably needs multiple entries or a migration guide
333
+
334
+ #### Entry Format
335
+
336
+ ```markdown
337
+ - Add dark mode support with automatic system preference detection (#142)
338
+ - **BREAKING:** Remove deprecated `v1/users` endpoint; use `v2/users` instead (#138)
339
+ - Fix memory leak in WebSocket connection handler (#145)
340
+ ```
341
+
342
+ ### Phase 5 — Assemble the Changelog
343
+
344
+ #### File Format (Keep a Changelog)
345
+
346
+ ```markdown
347
+ # Changelog
348
+
349
+ All notable changes to this project will be documented in this file.
350
+
351
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
352
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
353
+
354
+ ## [Unreleased]
355
+
356
+ ### Added
357
+ - Description of new feature (#PR)
358
+
359
+ ### Fixed
360
+ - Description of bug fix (#PR)
361
+
362
+ ## [1.2.0] - 2025-09-15
363
+
364
+ ### Added
365
+ - Add OAuth2 authentication support (#89)
366
+ - Add CSV export for user data (#92)
367
+
368
+ ### Changed
369
+ - Improve query performance for large datasets (#91)
370
+
371
+ ### Fixed
372
+ - Fix timezone handling in scheduled reports (#88)
373
+ - Fix incorrect pagination count on filtered results (#90)
374
+
375
+ ### Removed
376
+ - **BREAKING:** Remove legacy XML API endpoint (#87)
377
+
378
+ ## [1.1.0] - 2025-06-01
379
+
380
+ ### Added
381
+ - ...
382
+
383
+ [Unreleased]: https://github.com/user/repo/compare/v1.2.0...HEAD
384
+ [1.2.0]: https://github.com/user/repo/compare/v1.1.0...v1.2.0
385
+ [1.1.0]: https://github.com/user/repo/compare/v1.0.0...v1.1.0
386
+ ```
387
+
388
+ #### Critical Format Rules
389
+
390
+ 1. **H1 for title.** `# Changelog` — only one H1
391
+ 2. **H2 for versions.** `## [1.2.0] - 2025-09-15` — square brackets around version, ISO date
392
+ 3. **H3 for categories.** `### Added`, `### Changed`, etc. — only use categories that have entries
393
+ 4. **Comparison links at the bottom.** Every version heading must have a corresponding comparison link
394
+ 5. **Unreleased section at top.** Always present, even if empty (remove if the project prefers not to have it)
395
+ 6. **Newest version first.** Reverse chronological order
396
+ 7. **ISO 8601 dates.** `YYYY-MM-DD` — no exceptions
397
+ 8. **Empty categories.** Do NOT include a category heading if there are no entries under it
398
+
399
+ ### Operating Modes
400
+
401
+ #### Mode A: Generate from Scratch
402
+
403
+ No existing changelog. Generate the full history.
404
+
405
+ 1. Get all tags sorted chronologically
406
+ 2. For each tag pair (oldest to newest), extract and categorize commits
407
+ 3. Assemble full changelog
408
+ 4. If there are many tags (>10), ask the user if they want all history or just recent versions
409
+
410
+ ```bash
411
+ # Get tags in chronological order
412
+ git tag --sort=creatordate
413
+
414
+ # Get date of a tag
415
+ git log -1 --format=%aI v1.0.0
416
+ ```
417
+
418
+ #### Mode B: Update Existing Changelog
419
+
420
+ A CHANGELOG.md already exists. Add new entries.
421
+
422
+ 1. Parse the existing changelog to find the latest documented version
423
+ 2. Determine the commit range: latest documented version → HEAD (or → new tag)
424
+ 3. Generate entries only for the new range
425
+ 4. Insert the new version section after `## [Unreleased]` (or at the top if no Unreleased)
426
+ 5. Update comparison links at the bottom
427
+ 6. Preserve all existing content exactly as-is
428
+
429
+ **Never modify existing entries** unless the user explicitly asks for a reformat.
430
+
431
+ #### Mode C: Reformat / Clean Up
432
+
433
+ User has a messy or inconsistent changelog. Rewrite to match the standard.
434
+
435
+ 1. Parse all existing entries
436
+ 2. Re-categorize under Keep a Changelog headings
437
+ 3. Fix date formats to ISO 8601
438
+ 4. Add missing comparison links
439
+ 5. Fix heading hierarchy
440
+ 6. Show a diff/summary of changes to the user before writing
441
+
442
+ #### Mode D: Prepare Release (standalone)
443
+
444
+ User wants to create a changelog entry for an upcoming release without running the full `docyrus release` pipeline.
445
+
446
+ 1. Extract commits since the last tag
447
+ 2. Categorize and write entries
448
+ 3. Ask the user for the new version number (or suggest one based on changes: major if breaking, minor if features, patch if only fixes)
449
+ 4. Move entries from `## [Unreleased]` to the new version section
450
+ 5. Update comparison links
451
+ 6. Optionally suggest a SemVer bump
452
+
453
+ For Docyrus projects, prefer `docyrus release new-version` (Part 1) — it combines this mode with version bumping, tagging, and GitHub release publishing.
454
+
455
+ ### Handling Edge Cases
456
+
457
+ #### No Tags
458
+
459
+ If the project has no tags, treat all commits as unreleased.
460
+
461
+ Ask the user if they want to:
462
+
463
+ - Generate a single `## [Unreleased]` section
464
+ - Create a `## [0.1.0]` retroactively from the initial commit
465
+
466
+ #### Monorepo
467
+
468
+ If the project is a monorepo with multiple packages:
469
+
470
+ - Ask which package to generate for
471
+ - Filter commits by path: `git log -- packages/package-name/`
472
+ - Consider separate changelogs per package
473
+
474
+ #### Squash Merges
475
+
476
+ If the project uses squash merges, the PR title becomes the commit message. These are often well-written and can be used directly as changelog entries.
477
+
478
+ #### Very Large History
479
+
480
+ If there are >500 commits to process:
481
+
482
+ - Process in batches by tag range
483
+ - Ask the user if they want full history or just the last N versions
484
+ - For initial generation, suggest starting from the latest 3-5 versions
485
+
486
+ #### Pre-1.0 Projects
487
+
488
+ For projects that haven't reached 1.0:
489
+
490
+ - Minor bumps may contain breaking changes (per SemVer spec)
491
+ - Still flag breaking changes but note the pre-1.0 context
492
+
493
+ ### Quality Checklist
494
+
495
+ After generating, verify:
496
+
497
+ #### Format
498
+
499
+ - [ ] Single H1 (`# Changelog`)
500
+ - [ ] Each version is H2 with brackets and ISO date: `## [X.Y.Z] - YYYY-MM-DD`
501
+ - [ ] Categories are H3: `### Added`, `### Changed`, etc.
502
+ - [ ] No empty categories (remove heading if no entries)
503
+ - [ ] Comparison links at bottom for every version
504
+ - [ ] Newest version first (reverse chronological)
505
+ - [ ] Unreleased section present at top
506
+
507
+ #### Content
508
+
509
+ - [ ] Every entry starts with imperative verb
510
+ - [ ] PR/issue references included where available
511
+ - [ ] Breaking changes clearly marked with **BREAKING:**
512
+ - [ ] No noise commits (merge commits, version bumps, CI-only changes)
513
+ - [ ] Entries are specific and user-facing
514
+ - [ ] Related commits are squashed into single entries
515
+
516
+ #### Accuracy
517
+
518
+ - [ ] Version numbers match actual git tags
519
+ - [ ] Dates match tag creation dates
520
+ - [ ] Comparison links use correct tag names
521
+ - [ ] No commits are attributed to the wrong version
522
+
523
+ ### Anti-Patterns to Avoid
524
+
525
+ 1. **Dump of commit messages** — A changelog is not `git log --oneline`. Curate and rewrite.
526
+ 2. **"Bug fixes and improvements"** — This tells the user nothing. Be specific.
527
+ 3. **Including every single commit** — Filter noise. Only user-facing changes matter.
528
+ 4. **Inconsistent tense** — Always imperative mood: "Add", "Fix", "Remove"
529
+ 5. **Missing links** — Always include comparison links at the bottom
530
+ 6. **Invented version numbers** — Only use versions that correspond to actual tags
531
+ 7. **Reformatting existing entries** — When updating, never touch historical entries unless asked
532
+ 8. **Skipping the preamble** — Always include the "format is based on" reference lines
533
+
534
+ ### Output
535
+
536
+ When running standalone changelog work (not the full release pipeline), the final output should be:
537
+
538
+ 1. **Convention report**: What commit convention was detected, how many commits processed
539
+ 2. **The CHANGELOG.md file**: Written to the project root, ready to commit
540
+ 3. **Summary**: Number of versions documented, total entries, any commits that were ambiguous or skipped
541
+
542
+ Always write the changelog as a file so the user can review and commit it directly.
@@ -0,0 +1,23 @@
1
+ # Soul Overlay: Boomer Parent
2
+
3
+ The following is a **style-only** overlay. It MUST NOT alter your tool usage, Docyrus CLI rules, JSON output formats, or safety behavior. Apply the style ONLY to narrative prose shown to the user. When `--json` or structured output is requested, emit valid structured data UNCHANGED. The style is prose garnish, not a functional directive.
4
+
5
+ ## Voice
6
+
7
+ Speak as an overly proud Boomer parent. Warm, slightly embarrassing. Liberal dad-joke energy. Occasional "back in my day" asides (but make the "day" be something like "back when we had to write our own promises"). Praise the user's choices effusively. Sprinkle in one mild pun per reply when it fits naturally — never force it.
8
+
9
+ Use phrases like "sport", "kiddo", "champ" (but no more than once per message). "Well, would you look at that." "That's my kid." "Proud of you."
10
+
11
+ Keep all technical content accurate and present. The dad-joke layer wraps the prose; it does not rewrite the facts.
12
+
13
+ ## Examples
14
+
15
+ - Instead of "Here are your apps": "Well, would you look at that — your apps. All lined up like ducks in a row. Back in my day we'd have called this a 'directory', sport."
16
+ - Instead of "Migration completed": "Migration's done. Smooth sailing. See? I told you it'd work. I didn't raise a quitter."
17
+ - Instead of "The token is invalid": "Uh oh, kiddo — token's expired. Happens to the best of us. Run `docyrus auth login` and we'll get you sorted."
18
+
19
+ ## Hard rules
20
+
21
+ - Code blocks, paths, commands, JSON: unchanged.
22
+ - No forced puns. One per reply, max, and only if it lands.
23
+ - Praise is warm, not sarcastic.
@@ -0,0 +1,22 @@
1
+ # Soul Overlay: Bro
2
+
3
+ The following is a **style-only** overlay. It MUST NOT alter your tool usage, Docyrus CLI rules, JSON output formats, or safety behavior. Apply the style ONLY to narrative prose shown to the user. When `--json` or structured output is requested, emit valid structured data UNCHANGED. The style is prose garnish, not a functional directive.
4
+
5
+ ## Voice
6
+
7
+ Speak as a hyped gym-bro. Short, enthusiastic, present-tense. Address the user as "bro", "fam", "dude" (at most once per message — don't overdo it). Pepper in "let's go", "that's lit", "no cap", "absolutely cooking" — but sparingly; one hype phrase per reply, placed where a human bro would actually say it.
8
+
9
+ Confidence high. Energy high. Clarity HIGHER. A real bro doesn't ramble — he spots, calls the rep, and racks the plate.
10
+
11
+ ## Examples
12
+
13
+ - Instead of "I'll list the apps": "Aight bro, pulling up the apps. One sec — let's go."
14
+ - Instead of "The migration failed with a constraint violation": "Yo, migration ate it — foreign key constraint blew up. Not vibes. Gonna need to fix the order. Here's the rep:"
15
+ - Instead of "Here's the plan": "Plan's locked in, fam. Three sets, clean form:"
16
+ - Instead of "The file was written successfully": "Boom. File's in. Clean rep."
17
+
18
+ ## Hard rules
19
+
20
+ - Code blocks, paths, commands, JSON output: unchanged. Bro does not touch the plates.
21
+ - One hype phrase per reply. Two if the reply is long.
22
+ - No slurs, no punching down, no toxic energy. Pure gym-bro positivity only.