codexspec 0.7.9__tar.gz → 0.7.10__tar.gz
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.
- {codexspec-0.7.9 → codexspec-0.7.10}/PKG-INFO +2 -1
- {codexspec-0.7.9 → codexspec-0.7.10}/README.md +1 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/pyproject.toml +1 -1
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/__init__.py +1 -1
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/commands/installer.py +10 -3
- codexspec-0.7.10/templates/commands/release-notes.md +212 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/.gitignore +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/LICENSE +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/codexspec-icon.svg +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/codexspec-logo-dark.svg +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/codexspec-logo-light.svg +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/check-i18n-completeness.sh +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/check-i18n-structure.sh +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/check-prerequisites.sh +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/common.sh +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/create-new-feature.sh +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/review-context.sh +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/powershell/common.ps1 +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/powershell/create-new-feature.ps1 +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/scripts/powershell/review-context.ps1 +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/commands/__init__.py +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/i18n.py +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/idea.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/integrations/__init__.py +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/integrations/base.py +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/integrations/claude.py +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/integrations/codex.py +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/profile.py +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/translator.py +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/analyze.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/checklist.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/clarify.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/commit-staged.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/config.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/constitution.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/debug.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/distill.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/evolve.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/generate-spec.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/implement-tasks.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/plan-to-tasks.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/pr.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/quick.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-code.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-design.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-plan.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-spec.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-tasks.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/spec-to-design.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/spec-to-plan.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/specify.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/tasks-to-issues.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/checklist-template.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/constitution-template.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/design-template.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/plan-template-detailed.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/plan-template-simple.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/requirements-template.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/spec-template-detailed.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/spec-template-simple.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/tasks-template-detailed.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/tasks-template-simple.md +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/de.json +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/en.json +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/es.json +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/fr.json +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/ja.json +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/ko.json +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/pt-BR.json +0 -0
- {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/zh-CN.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: codexspec
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.10
|
|
4
4
|
Summary: CodexSpec - A Requirements-First SDD toolkit for Claude Code
|
|
5
5
|
Project-URL: Homepage, https://github.com/Zts0hg/codexspec
|
|
6
6
|
Project-URL: Repository, https://github.com/Zts0hg/codexspec
|
|
@@ -615,6 +615,7 @@ Implementation follows **conditional TDD workflow**:
|
|
|
615
615
|
| -------------------------- | ------------------------------------------------- |
|
|
616
616
|
| `/codexspec:commit-staged` | Generate commit message from staged changes |
|
|
617
617
|
| `/codexspec:pr` | Generate PR/MR description (auto-detect platform) |
|
|
618
|
+
| `/codexspec:release-notes` | Generate release notes from git history (maintain CHANGELOG.md + release body)|
|
|
618
619
|
|
|
619
620
|
#### Code Review Commands
|
|
620
621
|
|
|
@@ -570,6 +570,7 @@ Implementation follows **conditional TDD workflow**:
|
|
|
570
570
|
| -------------------------- | ------------------------------------------------- |
|
|
571
571
|
| `/codexspec:commit-staged` | Generate commit message from staged changes |
|
|
572
572
|
| `/codexspec:pr` | Generate PR/MR description (auto-detect platform) |
|
|
573
|
+
| `/codexspec:release-notes` | Generate release notes from git history (maintain CHANGELOG.md + release body)|
|
|
573
574
|
|
|
574
575
|
#### Code Review Commands
|
|
575
576
|
|
|
@@ -44,7 +44,7 @@ from .profile import ensure_profile_scaffold, inject_profile_block
|
|
|
44
44
|
from .translator import SUPPORTED_LANGUAGES, translate
|
|
45
45
|
|
|
46
46
|
# Version info
|
|
47
|
-
__version__ = "0.7.
|
|
47
|
+
__version__ = "0.7.10"
|
|
48
48
|
__author__ = "CodexSpec Team"
|
|
49
49
|
|
|
50
50
|
# Constitution file path constants
|
|
@@ -47,8 +47,8 @@ def get_commands_metadata() -> list[CommandMetadata]:
|
|
|
47
47
|
|
|
48
48
|
Returns:
|
|
49
49
|
List of CommandMetadata dictionaries sorted by category priority:
|
|
50
|
-
core (11) -> enhanced (7) -> git (
|
|
51
|
-
Total:
|
|
50
|
+
core (11) -> enhanced (7) -> git (3) -> review (1) -> utility (2)
|
|
51
|
+
Total: 24 commands
|
|
52
52
|
"""
|
|
53
53
|
return [
|
|
54
54
|
# Core Commands (11)
|
|
@@ -179,7 +179,7 @@ def get_commands_metadata() -> list[CommandMetadata]:
|
|
|
179
179
|
"category": "enhanced",
|
|
180
180
|
"file_name": "debug.md",
|
|
181
181
|
},
|
|
182
|
-
# Git Workflow Commands (
|
|
182
|
+
# Git Workflow Commands (3)
|
|
183
183
|
{
|
|
184
184
|
"name": "commit-staged",
|
|
185
185
|
"display_name": "/codexspec:commit-staged",
|
|
@@ -194,6 +194,13 @@ def get_commands_metadata() -> list[CommandMetadata]:
|
|
|
194
194
|
"category": "git",
|
|
195
195
|
"file_name": "pr.md",
|
|
196
196
|
},
|
|
197
|
+
{
|
|
198
|
+
"name": "release-notes",
|
|
199
|
+
"display_name": "/codexspec:release-notes",
|
|
200
|
+
"description": "从 git 历史生成发布说明:更新 CHANGELOG.md + 用户向发布正文(不决定版本)",
|
|
201
|
+
"category": "git",
|
|
202
|
+
"file_name": "release-notes.md",
|
|
203
|
+
},
|
|
197
204
|
# Code Review Commands (1)
|
|
198
205
|
{
|
|
199
206
|
"name": "review-code",
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate release notes from git history — maintain a Keep a Changelog CHANGELOG.md entry and emit a user-facing release body, without deciding versions or mutating git state
|
|
3
|
+
allowed-tools: Bash(git branch:*), Bash(git tag:*), Bash(git describe:*), Bash(git log:*), Bash(git diff:*), Bash(git rev-parse:*), Bash(git remote:*), Bash(ls:*), Bash(cat:*), Read, Edit, Write
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Constitution Compliance (MANDATORY)
|
|
7
|
+
|
|
8
|
+
**Before generating release notes:**
|
|
9
|
+
|
|
10
|
+
1. **Check for Constitution File**: Look for `.codexspec/memory/constitution.md`
|
|
11
|
+
2. **If Constitution Exists**:
|
|
12
|
+
- Load and read relevant principles (especially documentation and versioning standards)
|
|
13
|
+
- Ensure the generated notes align with constitutional guidelines
|
|
14
|
+
3. **If No Constitution Exists**: Proceed with the defaults below
|
|
15
|
+
|
|
16
|
+
## Language Preference
|
|
17
|
+
|
|
18
|
+
**IMPORTANT**: Before generating output, read the project's language configuration from `.codexspec/config.yml`.
|
|
19
|
+
|
|
20
|
+
**Generated-content language priority**:
|
|
21
|
+
|
|
22
|
+
1. If `language.commit` is set, use that language for the CHANGELOG entry and release body
|
|
23
|
+
2. Otherwise, use `language.output` as fallback
|
|
24
|
+
3. If neither is configured, default to English
|
|
25
|
+
|
|
26
|
+
**Note**:
|
|
27
|
+
|
|
28
|
+
- Section headings that are format keywords (`Added`, `Changed`, `Fixed`, etc.) and technical terms
|
|
29
|
+
(API, JWT, OAuth) may remain in English when appropriate.
|
|
30
|
+
- The `## [Unreleased]` / `## [X.Y.Z]` version markers and ISO dates are format, not prose — keep them
|
|
31
|
+
as-is.
|
|
32
|
+
|
|
33
|
+
## User Input
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
$ARGUMENTS
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Role
|
|
40
|
+
|
|
41
|
+
You generate **release notes** from git history for **this project**, whatever its release process.
|
|
42
|
+
You make **no assumption** about how the project releases: there may be no `publish.sh`, no CI, no
|
|
43
|
+
particular hosting platform, and no particular versioning scheme (semver, CalVer, and date tags are
|
|
44
|
+
all possible). Every behavior below degrades gracefully when such an assumption does not hold.
|
|
45
|
+
|
|
46
|
+
You produce two layered outputs from the same analysis:
|
|
47
|
+
|
|
48
|
+
1. A developer **CHANGELOG.md** entry in Keep a Changelog format.
|
|
49
|
+
2. A user-facing **release body** derived from it.
|
|
50
|
+
|
|
51
|
+
You **own no versioning** and **mutate no git state** (see Forbidden Operations).
|
|
52
|
+
|
|
53
|
+
## Forbidden Operations (CRITICAL)
|
|
54
|
+
|
|
55
|
+
This command is a **generator**, sharing the safety discipline of `commit-staged` and `pr`.
|
|
56
|
+
|
|
57
|
+
**UNDER NO CIRCUMSTANCES**:
|
|
58
|
+
|
|
59
|
+
- `git add` / `git commit` / `git reset` / `git checkout` / `git restore` / `git stash` / `git rm` —
|
|
60
|
+
the command MUST NEVER modify the git staging area and MUST NEVER create a commit.
|
|
61
|
+
- Overwrite `CHANGELOG.md` wholesale with `Write`, or rewrite / reorder / delete any existing
|
|
62
|
+
CHANGELOG entry.
|
|
63
|
+
- Decide or "own" a version bump; tag; publish; or create a GitHub/GitLab release.
|
|
64
|
+
- Include any AI attribution in generated content — no `Co-Authored-By`, "Generated with", robot
|
|
65
|
+
emoji, or references to AI tools/agents.
|
|
66
|
+
|
|
67
|
+
The **only** permitted file writes are: the safe additive `CHANGELOG.md` insertion described in
|
|
68
|
+
**CHANGELOG.md Maintenance**, and — only when `--output <file>` is given — writing the release body to
|
|
69
|
+
that user-directed path.
|
|
70
|
+
|
|
71
|
+
## Parameters
|
|
72
|
+
|
|
73
|
+
Parse `$ARGUMENTS` for the following optional parameters:
|
|
74
|
+
|
|
75
|
+
| Parameter | Default | Description |
|
|
76
|
+
|-----------|---------|-------------|
|
|
77
|
+
| `--version <X.Y.Z>` | (none) | Stamp this version on the new section; short-circuits all version inference/suggestion |
|
|
78
|
+
| `--from <ref>` | (resolved) | Explicit range start (overrides Range Resolution) |
|
|
79
|
+
| `--to <ref>` | `HEAD` | Explicit range end |
|
|
80
|
+
| `--output <file>` | (terminal) | Write the release body to a file instead of stdout |
|
|
81
|
+
| `--spec <feature>` | (none) | Enrich the "why" from that feature's `spec.md` / `tasks.md` |
|
|
82
|
+
|
|
83
|
+
- If `--version` is present, **validate** it is a well-formed version string. If it is malformed,
|
|
84
|
+
**reject** with a clear validation message and do **not** write a malformed section.
|
|
85
|
+
- If `--spec` is present but does not resolve to an existing feature/path, **degrade gracefully**:
|
|
86
|
+
proceed from git alone and report the unresolved path. Do not fail.
|
|
87
|
+
|
|
88
|
+
## Range Resolution
|
|
89
|
+
|
|
90
|
+
Determine the commit range `<from>..<to>` (default `<to>` is `HEAD`):
|
|
91
|
+
|
|
92
|
+
1. **Explicit override**: if `--from` (and optionally `--to`) is given, use it directly.
|
|
93
|
+
2. **Latest tag**: otherwise, the default range is `latest tag..HEAD` — resolve the latest tag via
|
|
94
|
+
`git describe --tags --abbrev=0`.
|
|
95
|
+
3. **No reachable tag → CHANGELOG fallback**: if the repository has no reachable tag, fall back to
|
|
96
|
+
"after the last version recorded in `CHANGELOG.md`" (anchor on the most recent versioned section).
|
|
97
|
+
4. **No tag and no CHANGELOG (or no anchorable version) → full history**: if neither a tag nor an
|
|
98
|
+
anchorable CHANGELOG version exists (for example the only prior section is `Unreleased`, which has
|
|
99
|
+
no commit anchor), summarize the **full history**.
|
|
100
|
+
|
|
101
|
+
Always apply `--no-merges` so merge commits are excluded. Route the Edge Cases below before analysis.
|
|
102
|
+
|
|
103
|
+
## Git Context Collection
|
|
104
|
+
|
|
105
|
+
Over the resolved range, collect:
|
|
106
|
+
|
|
107
|
+
1. **Commits**: `git log --no-merges --pretty=format:"%H %s" <from>..<to>`
|
|
108
|
+
2. **Full diff**: `git diff <from>..<to>` (to understand what each commit actually changed)
|
|
109
|
+
3. When `--spec` resolves: read that feature's `spec.md` / `tasks.md` for intent ("why").
|
|
110
|
+
|
|
111
|
+
## Change Categorization
|
|
112
|
+
|
|
113
|
+
Group the changes into **Keep a Changelog** categories, including only those that apply:
|
|
114
|
+
|
|
115
|
+
- `### Added` — new features
|
|
116
|
+
- `### Changed` — changes to existing functionality
|
|
117
|
+
- `### Deprecated` — soon-to-be-removed features
|
|
118
|
+
- `### Removed` — removed features
|
|
119
|
+
- `### Fixed` — bug fixes
|
|
120
|
+
- `### Security` — security fixes
|
|
121
|
+
|
|
122
|
+
**Conventional commits are used when present but are NOT required.** When commits do not follow the
|
|
123
|
+
convention, **infer** the category and wording from the **diff and commit subjects** (the "diff is the
|
|
124
|
+
source of truth" approach of `commit-staged` / `pr`).
|
|
125
|
+
|
|
126
|
+
**User-facing vs contributor split**: the user-facing lists lead with user-visible changes
|
|
127
|
+
(`feat` / `fix` / `perf`, and anything a user would notice). Internal / contributor-only changes
|
|
128
|
+
(`chore` / `refactor` / `test` / `ci` / `build`, internal docs) go **only** under a separate
|
|
129
|
+
`### For contributors` subsection. When commit types are absent, infer visibility from the diff.
|
|
130
|
+
|
|
131
|
+
## Completeness Cross-Check
|
|
132
|
+
|
|
133
|
+
After drafting, **cross-check** the entry against the commit list: **every non-merge commit in the
|
|
134
|
+
selected range must map to at least one bullet.** If any commit is unrepresented, add it. Do not pad
|
|
135
|
+
with bullets that correspond to no commit.
|
|
136
|
+
|
|
137
|
+
## Version Handling
|
|
138
|
+
|
|
139
|
+
Choose the new section's label:
|
|
140
|
+
|
|
141
|
+
- **Default**: `## [Unreleased]` — with **no date** (the Keep a Changelog convention for accumulating
|
|
142
|
+
changes before a version is assigned).
|
|
143
|
+
- **`--version X.Y.Z` given**: stamp `## [X.Y.Z] - <YYYY-MM-DD>` (today's ISO date) and **skip all
|
|
144
|
+
version inference and suggestion**.
|
|
145
|
+
|
|
146
|
+
**Guarded advisory** (only when `--version` is absent): print a console-only suggested next version
|
|
147
|
+
**only when** the project is detected to use **semver AND conventional commits** — i.e. existing
|
|
148
|
+
tags/versions are semver-shaped *and* the range's commits carry conventional-commit prefixes. In that
|
|
149
|
+
case print the suggested next version, the reasoning (e.g. counts of `feat` / `fix` / breaking), and
|
|
150
|
+
an explicit "override with `--version`" note. **Otherwise stay silent** on version suggestions.
|
|
151
|
+
|
|
152
|
+
The command MUST **never write a version number into the file on its own** — the file section is only
|
|
153
|
+
ever `## [Unreleased]` or a user-provided `--version`.
|
|
154
|
+
|
|
155
|
+
## CHANGELOG.md Maintenance
|
|
156
|
+
|
|
157
|
+
Maintain `CHANGELOG.md` at the repository root with a **safe, additive** edit:
|
|
158
|
+
|
|
159
|
+
1. **Create if absent**: if `CHANGELOG.md` does not exist, create it with the **standard Keep a
|
|
160
|
+
Changelog header**:
|
|
161
|
+
|
|
162
|
+
```markdown
|
|
163
|
+
# Changelog
|
|
164
|
+
|
|
165
|
+
All notable changes to this project will be documented in this file.
|
|
166
|
+
|
|
167
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
168
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
2. **Insert additively**: read the entire existing `CHANGELOG.md` first. Insert the new section at a
|
|
172
|
+
single insertion point — into an existing `## [Unreleased]` section when one is present (merge the
|
|
173
|
+
new bullets in rather than duplicating the section), else immediately above the most recent
|
|
174
|
+
versioned section, else directly after the header. **Never rewrite, reorder, or delete any
|
|
175
|
+
existing entry.**
|
|
176
|
+
3. **Edit, never overwrite**: perform the insertion with a precise `Edit` (exact `old_string` match)
|
|
177
|
+
— **never** use `Write` to overwrite the whole `CHANGELOG.md`.
|
|
178
|
+
|
|
179
|
+
This is the command's only mutation of `CHANGELOG.md`, and it never touches git state.
|
|
180
|
+
|
|
181
|
+
## Release Body Generation
|
|
182
|
+
|
|
183
|
+
Derive the user-facing **release body** from the same categorized model:
|
|
184
|
+
|
|
185
|
+
- Lead with what the user **can now do** — "You can now…", plain language, not implementation detail.
|
|
186
|
+
- Keep internal/contributor changes under a `### For contributors` subsection, out of the main list.
|
|
187
|
+
- Flag breaking changes visibly (`**Breaking change:**`).
|
|
188
|
+
- The body is **generic markdown**, platform-agnostic — the user pastes it into GitHub / GitLab / any
|
|
189
|
+
release page. The command does **not** publish it.
|
|
190
|
+
|
|
191
|
+
## Output Modes
|
|
192
|
+
|
|
193
|
+
- **Terminal (default)**: print the release body to the terminal wrapped in a markdown code block so
|
|
194
|
+
the raw markdown can be copied.
|
|
195
|
+
- **`--output <file>`**: write the raw release body to that file (the one user-directed file write
|
|
196
|
+
permitted besides the CHANGELOG insertion).
|
|
197
|
+
|
|
198
|
+
The `CHANGELOG.md` entry is written in both modes.
|
|
199
|
+
|
|
200
|
+
## Edge Cases
|
|
201
|
+
|
|
202
|
+
- **Not a git repository**: report "Not a git repository." and take no action.
|
|
203
|
+
- **Empty range** (no commits since the resolved start): report "No changes to release." — do not
|
|
204
|
+
fabricate entries and do not error.
|
|
205
|
+
- **Detached HEAD**: report that the branch cannot be determined and stop, rather than guessing.
|
|
206
|
+
- **Unresolved `--spec`**: proceed from git alone and report the unresolved path (see Parameters).
|
|
207
|
+
- **Malformed `--version`**: reject with a clear validation message; write no malformed section.
|
|
208
|
+
|
|
209
|
+
## Automatic Distillation
|
|
210
|
+
|
|
211
|
+
This command has **no** Automatic Distillation step. It is a generator, not an interaction that
|
|
212
|
+
produces reusable cross-feature knowledge.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|