Title: Triage audit (round 3): 8 newer bugs + 22 older feature/refactor items (May 2026) · Issue #1976 · commitizen-tools/commitizen · GitHub
Open Graph Title: Triage audit (round 3): 8 newer bugs + 22 older feature/refactor items (May 2026) · Issue #1976 · commitizen-tools/commitizen
X Title: Triage audit (round 3): 8 newer bugs + 22 older feature/refactor items (May 2026) · Issue #1976 · commitizen-tools/commitizen
Description: This issue tracks an audit of 30 currently-open issues, checked against master (v4.15.1). It is the round-3 follow-up to #1964 (30 type: bug issues) and #1965 (30 untriaged non-bug issues). Together the three audits span 90 of the ~120 o...
Open Graph Description: This issue tracks an audit of 30 currently-open issues, checked against master (v4.15.1). It is the round-3 follow-up to #1964 (30 type: bug issues) and #1965 (30 untriaged non-bug issues). Togethe...
X Description: This issue tracks an audit of 30 currently-open issues, checked against master (v4.15.1). It is the round-3 follow-up to #1964 (30 type: bug issues) and #1965 (30 untriaged non-bug issues). Togethe...
Opengraph URL: https://github.com/commitizen-tools/commitizen/issues/1976
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Triage audit (round 3): 8 newer bugs + 22 older feature/refactor items (May 2026)","articleBody":"This issue tracks an audit of 30 currently-open issues, checked against `master` (v4.15.1). It is the round-3 follow-up to #1964 (30 `type: bug` issues) and #1965 (30 untriaged non-bug issues). Together the three audits span 90 of the ~120 open issues.\r\n\r\nThis round picks up:\r\n\r\n- **8 newer `type: bug` issues** filed after #1964 was opened (#1939, #1923, #1909, #1904, #1899, #1897, #1864, #1863).\r\n- **22 older feature / refactor / documentation items** that were not in #1965's 30.\r\n\r\nFindings are based on code inspection only — please confirm with a real reproduction or maintainer judgement before acting.\r\n\r\n\u003e **Note** — the original \"Likely fixed\" entries (#1678, #1677) were re-validated by a `claude-opus-4.7` pass and turned out to be **partially fixed**, not fully fixed. They have been moved into \"Still valid\" with the per-feature breakdown; per-issue comments link the unimplemented gaps. This means the round-3 backlog has **0 closeable items**, not 2.\r\n\r\n## ❌ Still valid — needs implementation / fix\r\n\r\n- [ ] #1678 — `--next` on `cz version --project`. The forced-increment form `--next MAJOR|MINOR|PATCH` is implemented (`commitizen/commands/version.py:93-103`, tested by `test_next_version`). The default form (`--next` with no value, derive from commit history) is **not implemented** — explicit TODO at `commitizen/commands/version.py:85-91` returns \"USE_GIT_COMMITS is not implemented yet\"; locked in by `tests/commands/test_version_command.py:289-292`. Per-feature breakdown posted as a comment.\r\n- [ ] #1677 — umbrella tracker for `cz version` capabilities. Shipped: `manual_version`, `--tag`, `--major`/`--minor`/`--patch`. Still missing: `USE_GIT_COMMITS` half of `--next` (#1678), `--version` deprecation (in flight via PR #1798 closing #1785), `--hash` (no implementation, no ticket), `--prev` (raised in comments, no ticket). Per-feature breakdown posted as a comment.\r\n- [ ] #1939 — `cz bump` lumps unstaged changes into the bump commit; `commitizen/commands/bump.py:443` hard-codes `[\"-a\"]` in `_get_commit_args()`.\r\n- [ ] #1923 — `commitizen-branch` hook fails with `'..' is outside repository` when pre-commit's `$PRE_COMMIT_FROM_REF..$PRE_COMMIT_TO_REF` substitution produces a path-like value (`.pre-commit-hooks.yaml:22`).\r\n- [ ] #1863 — `find_tag_for()` (`commitizen/tags.py:232-247`) returns the floating `v1.0` tag instead of the full `v1.0.0` tag when both exist.\r\n- [ ] #1709 — `docs/customization/python_class.md:70-93` still shows a `setup.py`-based plugin packaging example; the cookiecutter template was already migrated to `pyproject.toml` + src-layout (commitizen_cz_template PRs #6/#7) but the docs were not.\r\n- [ ] #1706 — same area as #1709: the plugin-development docs still use `pip install .` rather than `uv`/`poetry` workflows.\r\n- [ ] #1703 — PR/contributor links not exposed via the default changelog template; existing template fields (`author`, `author_email`, `sha1`, `parents`) at `docs/customization/changelog_template.md:64-79` cover the data, but no example template ships.\r\n- [ ] #1661 — `commitizen/exceptions.py:9-43` `ExitCode` and exception docstrings need a v5-era pass; e.g. `NotAllowed` docstring (line 212) still says `--incremental cannot be combined with a rev_range` despite broader usage.\r\n- [ ] #1565 — no JSON schema file for the configuration exists in the repo; woile's Feb-2026 implementation sketch in the comments has not been picked up.\r\n- [ ] #1562 — breaking changes are not visually highlighted in the rendered changelog: `commitizen/changelog.py:201-221` only sorts by change type; no `!`/section annotation. Active discussion in the comment thread.\r\n- [ ] #1502 — discussion-only request to add `:meta private:` to internal docstrings; relates to #1446. No `:meta private:` usage in the codebase yet.\r\n- [ ] #1446 — no documented breaking-change policy. PEP 562 `__getattr__` deprecation infrastructure already exists at `commitizen/defaults.py:174-200`; the missing piece is policy + docs. Tagged for the v5 milestone (#1481).\r\n- [ ] #1445 — single-comment design discussion (Pydantic for config?). `commitizen/config/base_config.py:18-61` uses `TypedDict` + manual validation today; PR #996 (open) addresses precedence by extending `BaseConfig`.\r\n- [ ] #1371 — `cz bump` from a subfolder writes the changelog to `cwd` instead of the repo root; `commitizen/commands/bump.py` and the changelog plumbing don't normalise via `git.find_git_project_root()`. Confirmed by maintainer reproduction.\r\n- [ ] #1367 — `--devrelease` cannot disambiguate dev releases from prereleases: `commitizen/version_schemes.py:36` regex `(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?` collapses both into the same group. A user prototype against the PEP-440 regex exists but breaks tests.\r\n- [ ] #1361 — `commitizen/commands/init.py:88-90` rejects existing `pyproject.toml` files that lack a `[tool.commitizen]` section instead of merging.\r\n- [ ] #1355 — no easy `prepare-commit-msg` setup: `.pre-commit-hooks.yaml:1-29` exposes `commit-msg` and `pre-push` only. Ties to #1393 / #1386.\r\n- [ ] #1347 — no path filtering for monorepo bumps: `commitizen/git.py:207` `get_commits()` has no `path` parameter; user has a working `path_prefix` prototype on a fork.\r\n\r\n## 🔧 Has open PR\r\n\r\n- [x] #1864 — `tests/test_cli/test_invalid_command_py_3_12_invalidCommand_.txt` baseline reflects 3.12.10+ argparse output; older 3.12.x patches (3.12.3-3.12.6) print quoted choices. **PR #1982 (CI green, awaiting review)** — added a precise `pytest.mark.skipif` for 3.12.0-3.12.6 (CPython gh-129019 backport).\r\n- [x] #1383 — `commitizen/providers/uv_provider.py:36` reads `lock_file.read_text()` unconditionally and crashes with `FileNotFoundError` on a fresh uv project that has never been synced. **PR #1979 (CI green, awaiting review)** — guards `set_lock_version()` with `is_file()` from `set_version()`, matching the cargo/npm convention.\r\n- [ ] #1909 — `commitizen/commands/commit.py:93` checks `\u003c= 0` rather than `== 0`, treating negative `message_length_limit` as \"no limit\" — PR #1916.\r\n- [ ] #1899 — `commitizen/commands/commit.py:88-89` falls back to `None` instead of the configured value when the CLI flag is unset — PR #1900.\r\n- [ ] #1897 — `commitizen/cz/customize/customize.py:72` reads `info_path` relative to `cwd` rather than the config root — PR #1898 (draft).\r\n- [ ] #1785 — top-level `cz --version` / `cz --report` and deprecation of `cz version --commitizen` — PR #1798.\r\n- [ ] #1672 — `ChainMap`-based options/config/default chain — PR #1812 (draft).\r\n- [ ] #1597 — body line-length option for `cz commit` — PR #1849.\r\n- [ ] #1397 — PEP 751 `pylock.toml` support (new `Pep751Provider` extending `Pep621Provider`) — PR #1896 (draft).\r\n- [ ] #1385 — overrideable `[tool.commitizen.customize]` for `cz_conventional_commits` — PR #1570.\r\n\r\n## 🎁 Mislabeled — relabel and remove `issue-status: needs-triage`\r\n\r\n- [x] #1904 — request to omit `commitizen/question.py` (pure typing module) from coverage; configuration/maintenance request, not a bug. Relabeled `type: bug` → `type: feature`, `needs-triage` → `wait-for-implementation`.\r\n\r\n---\r\n\r\n**Round-3 summary** (after `claude-opus-4.7` re-validation): **0 likely fixed** · 19 still valid (2 of which now have PRs from this round) · 10 have open PRs (8 pre-existing + 2 new) · 1 mislabeled (actioned).\r\n\r\n**Cumulative across #1964, #1965, #1976:** 90 issues audited; 1 closed as fixed (#1249), 52 actionable bugs/features (5 of which now have PRs from this triage), 15 already have open PRs awaiting review, 7 mislabels (4 actioned), 5 by-design / config, 2 unclear.\r\n\r\n## Round-3 follow-up actions (May 2026)\r\n\r\nPRs opened from this round, plus external review.\r\n\r\n- **#1383 → PR #1979** (`fix(providers/uv): treat uv.lock as optional`). CI green across the matrix. GitHub Copilot review flagged that `Path.exists()` is also true for directories and that the existing convention in `cargo_provider.py:42` and `npm_provider.py:53,62` is `is_file()`; fixup commit `f204942e` hoists the guard from `set_lock_version()` to `set_version()` and switches to `is_file()`.\r\n- **#1864 → PR #1982** (`test(cli): skip invalid-command snapshot on Python 3.12.0-3.12.6`). CI green. Internal sonnet-4.6 review verified the version-tuple comparison and confirmed Python 3.10/3.11 are in security-only maintenance so the argparse change won't be back-ported there; no fixup needed.\r\n- **#1904** mislabeled `type: bug` → `type: feature`, `needs-triage` → `wait-for-implementation` (the issue is a coverage/config maintenance request, not a runtime bug).\r\n- **#1678** / **#1677** re-validated by `claude-opus-4.7`: both turn out to be **partially fixed**, not fully fixed. Per-issue comments now list which sub-features ship and which are still missing (USE_GIT_COMMITS half of `--next`, `--hash`, `--prev`, plus #1785 / PR #1798 for the `--version` deprecation).\r\n\r\nIssues that were inspected but deliberately not PR'd in this round:\r\n\r\n- **#1939** — `cz bump` always passes `git commit -a`. Adding an opt-out flag is straightforward but the right default (preserve historical `-a`, or stage only changelog/version files like #1939 wants) is a UX call for the maintainers.\r\n- **#1180**-class bugs (#1367 dev-release, #1863 floating-tag matching) — all involve `SequenceMatcher` / version-regex heuristics. Reasonable fixes exist (exact-match-first fallback, separate dev/prerelease groups in the regex), but each rewrites a hot path; deserve a maintainer call before a PR.\r\n- **#1709 / #1706** — doc PR migrating plugin packaging examples from `setup.py` to `pyproject.toml` + `uv` is mechanical but cross-cuts several pages; left for the next pass.\r\n\r\nHappy to take individual items off this list — please comment with which # you're picking up.\r\n","author":{"url":"https://github.com/bearomorphism","@type":"Person","name":"bearomorphism"},"datePublished":"2026-05-09T11:46:00.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/1976/commitizen/issues/1976"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:3f47b7bc-3a0f-9f44-1f00-c6f0d155e488 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8218:6529:405769:5BB9B9:6A4E6BD9 |
| html-safe-nonce | 4564681ace283e23e0ccc8c86894be2413b390f381d5b9eb35dec3ccba3cb1d3 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MjE4OjY1Mjk6NDA1NzY5OjVCQjlCOTo2QTRFNkJEOSIsInZpc2l0b3JfaWQiOiIzODIzNTM2Mzk3MjkwOTkwNTUzIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | fb00157c6806b222b97e3ac187b4993382200c4d1214261b6c67cc7905c8c182 |
| hovercard-subject-tag | issue:4412393359 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/commitizen-tools/commitizen/1976/issue_layout |
| twitter:image | https://opengraph.githubassets.com/523914c452d40ada3c7a9ab085561beefa557360e056e00f9ac1effcf8b73da9/commitizen-tools/commitizen/issues/1976 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/523914c452d40ada3c7a9ab085561beefa557360e056e00f9ac1effcf8b73da9/commitizen-tools/commitizen/issues/1976 |
| og:image:alt | This issue tracks an audit of 30 currently-open issues, checked against master (v4.15.1). It is the round-3 follow-up to #1964 (30 type: bug issues) and #1965 (30 untriaged non-bug issues). Togethe... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | bearomorphism |
| hostname | github.com |
| expected-hostname | github.com |
| None | 41b6ab3ba6d20a71766ac245b5a4a94c6fc672a9cd4da7d44c1b33ab8bf6a21c |
| turbo-cache-control | no-preview |
| go-import | github.com/commitizen-tools/commitizen git https://github.com/commitizen-tools/commitizen.git |
| octolytics-dimension-user_id | 62252524 |
| octolytics-dimension-user_login | commitizen-tools |
| octolytics-dimension-repository_id | 106127589 |
| octolytics-dimension-repository_nwo | commitizen-tools/commitizen |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 106127589 |
| octolytics-dimension-repository_network_root_nwo | commitizen-tools/commitizen |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | e6a744804e8e70f97b4d5a18a94dcc63db22f97a |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width