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.
Files changed (71) hide show
  1. {codexspec-0.7.9 → codexspec-0.7.10}/PKG-INFO +2 -1
  2. {codexspec-0.7.9 → codexspec-0.7.10}/README.md +1 -0
  3. {codexspec-0.7.9 → codexspec-0.7.10}/pyproject.toml +1 -1
  4. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/__init__.py +1 -1
  5. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/commands/installer.py +10 -3
  6. codexspec-0.7.10/templates/commands/release-notes.md +212 -0
  7. {codexspec-0.7.9 → codexspec-0.7.10}/.gitignore +0 -0
  8. {codexspec-0.7.9 → codexspec-0.7.10}/LICENSE +0 -0
  9. {codexspec-0.7.9 → codexspec-0.7.10}/codexspec-icon.svg +0 -0
  10. {codexspec-0.7.9 → codexspec-0.7.10}/codexspec-logo-dark.svg +0 -0
  11. {codexspec-0.7.9 → codexspec-0.7.10}/codexspec-logo-light.svg +0 -0
  12. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/check-i18n-completeness.sh +0 -0
  13. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/check-i18n-structure.sh +0 -0
  14. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/check-prerequisites.sh +0 -0
  15. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/common.sh +0 -0
  16. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/create-new-feature.sh +0 -0
  17. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/bash/review-context.sh +0 -0
  18. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/powershell/check-prerequisites.ps1 +0 -0
  19. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/powershell/common.ps1 +0 -0
  20. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/powershell/create-new-feature.ps1 +0 -0
  21. {codexspec-0.7.9 → codexspec-0.7.10}/scripts/powershell/review-context.ps1 +0 -0
  22. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/commands/__init__.py +0 -0
  23. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/i18n.py +0 -0
  24. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/idea.md +0 -0
  25. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/integrations/__init__.py +0 -0
  26. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/integrations/base.py +0 -0
  27. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/integrations/claude.py +0 -0
  28. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/integrations/codex.py +0 -0
  29. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/profile.py +0 -0
  30. {codexspec-0.7.9 → codexspec-0.7.10}/src/codexspec/translator.py +0 -0
  31. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/analyze.md +0 -0
  32. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/checklist.md +0 -0
  33. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/clarify.md +0 -0
  34. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/commit-staged.md +0 -0
  35. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/config.md +0 -0
  36. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/constitution.md +0 -0
  37. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/debug.md +0 -0
  38. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/distill.md +0 -0
  39. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/evolve.md +0 -0
  40. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/generate-spec.md +0 -0
  41. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/implement-tasks.md +0 -0
  42. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/plan-to-tasks.md +0 -0
  43. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/pr.md +0 -0
  44. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/quick.md +0 -0
  45. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-code.md +0 -0
  46. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-design.md +0 -0
  47. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-plan.md +0 -0
  48. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-spec.md +0 -0
  49. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/review-tasks.md +0 -0
  50. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/spec-to-design.md +0 -0
  51. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/spec-to-plan.md +0 -0
  52. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/specify.md +0 -0
  53. {codexspec-0.7.9 → codexspec-0.7.10}/templates/commands/tasks-to-issues.md +0 -0
  54. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/checklist-template.md +0 -0
  55. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/constitution-template.md +0 -0
  56. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/design-template.md +0 -0
  57. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/plan-template-detailed.md +0 -0
  58. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/plan-template-simple.md +0 -0
  59. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/requirements-template.md +0 -0
  60. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/spec-template-detailed.md +0 -0
  61. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/spec-template-simple.md +0 -0
  62. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/tasks-template-detailed.md +0 -0
  63. {codexspec-0.7.9 → codexspec-0.7.10}/templates/docs/tasks-template-simple.md +0 -0
  64. {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/de.json +0 -0
  65. {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/en.json +0 -0
  66. {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/es.json +0 -0
  67. {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/fr.json +0 -0
  68. {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/ja.json +0 -0
  69. {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/ko.json +0 -0
  70. {codexspec-0.7.9 → codexspec-0.7.10}/templates/translations/pt-BR.json +0 -0
  71. {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.9
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
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "codexspec"
3
- version = "0.7.9"
3
+ version = "0.7.10"
4
4
  description = "CodexSpec - A Requirements-First SDD toolkit for Claude Code"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -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.9"
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 (2) -> review (1) -> utility (2)
51
- Total: 23 commands
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 (2)
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