|
| 1 | +<!-- |
| 2 | +SPDX-FileCopyrightText: 2026 Sephyi <me@sephy.io> |
| 3 | +
|
| 4 | +SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0 |
| 5 | +--> |
| 6 | + |
| 7 | +# Changelog |
| 8 | + |
| 9 | +All notable changes to CommitBee are documented here. |
| 10 | + |
| 11 | +## `v0.5.0` — Understand Everything (current) |
| 12 | + |
| 13 | +- **Full signature extraction** — The LLM sees `pub fn connect(host: &str, timeout: Duration) -> Result<Connection>`, not just "Function connect." Extracted from tree-sitter AST nodes using a two-strategy approach: `child_by_field_name("body")` primary, body-node-kind scan fallback. Works across all 10 languages. |
| 14 | +- **Signature diffs for modified symbols** — When a function signature changes, the prompt shows `[~] old_sig → new_sig` so the LLM understands exactly what was modified. |
| 15 | +- **Cross-file connection detection** — Detects when a changed file calls a symbol defined in another changed file. Shown as `CONNECTIONS: validator calls parse() — both changed` in the prompt. |
| 16 | +- **Semantic change classification** — Modified symbols are classified as whitespace-only or semantic via character-stream comparison. Formatting-only changes (cargo fmt, prettier) auto-detected as `style` type when all modified symbols are whitespace-only. |
| 17 | +- **Dual old/new line tracking** — `classify_span_change` correctly tracks old-file and new-file line numbers independently, handling cases where symbols shift positions due to added/removed lines above them. |
| 18 | +- **Token budget rebalance** — Symbol section gets 30% of budget (up from 20%) when signatures are present, since richer symbols reduce the LLM's dependency on raw diff. |
| 19 | +- **BODY_NODE_KINDS coverage** — Signature extraction verified across all 10 languages with dedicated tests for Java, C, C++, Ruby, and C#. |
| 20 | +- **Connection reliability** — Short symbol names (<4 chars) filtered to prevent false positives, short-circuit after 5 connections, sort+dedup for correctness. |
| 21 | +- **Fixed false positive in breaking change detection** — Modified public symbols were incorrectly counted as "removed APIs", causing spurious `breaking_change` validator violations and retry exhaustion. |
| 22 | + |
| 23 | +## `v0.4.0` — See Everything |
| 24 | + |
| 25 | +- **10-language tree-sitter support** — Added Java, C, C++, Ruby, and C# to the existing Rust, TypeScript, JavaScript, Python, and Go. All languages are individually feature-gated and enabled by default. Disable any with `--no-default-features` + selective `--features lang-rust,lang-go,...`. |
| 26 | +- **Custom prompt templates** — User-defined templates with `{{diff}}`, `{{symbols}}`, `{{files}}`, `{{type}}`, `{{scope}}` variables via `template_path` config. |
| 27 | +- **Multi-language commit messages** — Generate messages in any language with `--locale` flag or `locale` config (e.g., `--locale de` for German). |
| 28 | +- **Commit history style learning** — Learns from recent commit history to match your project's style (`learn_from_history`, `history_sample_size` config). |
| 29 | +- **Rename detection** — Detects file renames with similarity percentage via `git diff --find-renames`, displayed as `old → new (N% similar)` in prompts and split suggestions. Configurable threshold (default 70%, set to 0 to disable). |
| 30 | +- **Expanded secret scanning** — 25 built-in patterns across 13 categories (cloud providers, AI/ML, source control, communication, payment, database, cryptographic, generic). Pluggable engine: add custom regex patterns or disable built-ins by name via config. |
| 31 | +- **Progress indicators** — Contextual `indicatif` spinners during pipeline phases (analyzing, scanning, generating). Auto-suppressed in non-TTY environments (git hooks, pipes). |
| 32 | +- **Evaluation harness** — `cargo test --features eval` for structured LLM output quality benchmarking. |
| 33 | +- **Fuzz testing** — `cargo-fuzz` targets for sanitizer and diff parser robustness. |
| 34 | +- **Exclude files** — `--exclude <GLOB>` flag (repeatable) and `exclude_patterns` config option. Glob patterns filter files from analysis (e.g., `*.lock`, `**/*.generated.*`, `vendor/**`). CLI patterns additive with config. |
| 35 | +- **Copy to clipboard** — `--clipboard` flag copies the generated message to the system clipboard and prints to stdout, skipping commit confirmation. |
| 36 | + |
| 37 | +## `v0.3.1` — Trust, but Verify |
| 38 | + |
| 39 | +- **Multi-pass corrective retry** — Validator checks LLM output against 7 rules and retries up to 3 times with targeted correction instructions |
| 40 | +- **Subject length enforcement** — Rejects subjects exceeding 72-char first line with a clear error instead of silent truncation |
| 41 | +- **Stronger prompt budget** — Character limit embedded directly in JSON template, "HARD LIMIT" phrasing for better small-model compliance |
| 42 | +- **Default model: `qwen3.5:4b`** — Smaller (3.4GB), no thinking overhead, clean JSON output out of the box |
| 43 | +- **Configurable thinking mode** — `think` config option for Ollama models that support reasoning separation |
| 44 | + |
| 45 | +## `v0.3.0` — Read Between the Lines |
| 46 | + |
| 47 | +- **Diff-shape fingerprinting + Jaccard clustering** — Splitter groups files by change shape and content vocabulary, not just directory |
| 48 | +- **Evidence-based type inference** — Constraint rules from code analysis drive commit type selection (bug evidence → fix, mechanical → style, dependency-only → chore) |
| 49 | +- **Robust LLM output parsing** — Sanitizer handles `<think>`/`<thought>` blocks, conversational preambles, noisy JSON extraction |
| 50 | +- **Metadata-aware breaking change detection** — Detects MSRV bumps, engines.node, requires-python changes |
| 51 | +- **Symbol tri-state tracking** — Added/removed/modified-signature differentiation in tree-sitter analysis |
| 52 | +- **Primary change detection** — Identifies the single most significant change for subject anchoring |
| 53 | +- **Post-generation validation** — Subject specificity validator ensures concrete entity naming |
| 54 | +- **NUL-delimited git parsing** — Safe handling of paths with special characters |
| 55 | +- **Parallel tree-sitter parsing** — rayon for CPU-bound parsing, tokio JoinSet for concurrent git fetching |
| 56 | +- **Anti-hallucination prompt engineering** — EVIDENCE/CONSTRAINTS sections, negative examples, anti-copy rules |
| 57 | + |
| 58 | +## `v0.2.0` — Commit, Don't Think |
| 59 | + |
| 60 | +- **Cloud providers** — OpenAI-compatible and Anthropic streaming support |
| 61 | +- **Commit splitting** — Automatic detection and splitting of multi-concern staged changes |
| 62 | +- **Git hook integration** — `commitbee hook install/uninstall/status` |
| 63 | +- **Shell completions** — bash, zsh, fish, powershell via `clap_complete` |
| 64 | +- **Rich error diagnostics** — `miette` for actionable error messages |
| 65 | +- **Multiple message generation** — `--generate N` with interactive candidate selection |
| 66 | +- **Hierarchical config** — `figment`-based layering (CLI > Env > File > Defaults) |
| 67 | +- **Structured logging** — `tracing` with `COMMITBEE_LOG` env filter |
| 68 | +- **Doctor command** — `commitbee doctor` for connectivity and config checks |
| 69 | +- **Secure key storage** — OS keychain via `keyring` (optional feature) |
| 70 | +- **Body line wrapping** — Commit body text wrapped at 72 characters |
0 commit comments