You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: update PRD with structural cleanup and feature reorganization
Refactored feature requirements to correct FR placement, improve
clarity, and align with Conventional Commits 1.0.0 spec. Updated FR
definitions and roadmaps to reflect accurate shipping timelines and
implementation status.
**Revision 2.3**: Version alignment (2026-02-22) — v0.2.0 shipped containing all Phase 1 (stability) and Phase 2 (polish/providers) features. Roadmap renumbered: Phase 3 (differentiation) is now v0.3.0, Phase 4 (market leadership) is now v0.4.0+.
14
+
**Revision 2.5**: PRD structural cleanup (2026-02-22) — Fixed FR placement inconsistencies: FR-039 definition moved from Section 4.3 to Section 4.2 (shipped in v0.2.0); FR-040 placed only in Phase 2 roadmap (ships with v0.3.0, not v0.2.0); FR-024 (P1 number in P3 context) merged back into FR-058 to preserve decade numbering convention.
15
15
16
16
**Revision 2.4**: Post-v0.2.0 spec anchoring (2026-02-22) — Conventional Commits 1.0.0 spec compliance: `!` suffix on breaking changes, `BREAKING CHANGE:` footer (emitted regardless of `include_body`), commit type list synced with `CommitType::ALL` via compile-time test, symbol deduplication in context builder (prevents misleading LLM when function bodies change but definition lines don't move). Test count: 133.
17
17
@@ -374,13 +374,16 @@ These are bugs, panics, and missing foundations that must be fixed before any ne
374
374
-**CLI**: `--no-split` disables the feature. `--yes` and non-TTY mode skip split suggestion (default to single commit).
375
375
-**Acceptance**: Tested with 11 dedicated integration tests covering single module, multi-module, all-tests, all-docs, same-type collapse, test attachment, and sort order.
376
376
377
-
#### FR-024: Commit History Style Learning (Experimental, Future)
377
+
#### FR-039: Config Validation ✅ (shipped in v0.2.0)
378
378
379
-
-**What**: Analyze existing commit history in the repository to learn the project's commit style, then align generated messages accordingly. This includes scope naming conventions, type usage patterns, subject phrasing style, and body conventions.
380
-
-**Status**: Planned (experimental — may diverge from strict Conventional Commits compliance)
381
-
-**Priority**: P3 (future exploration)
382
-
-**Rationale**: GitHub Copilot does this implicitly. Making it explicit and configurable would be a differentiator. However, blindly mimicking a repository's history could produce non-compliant messages if the history is inconsistent.
383
-
-**Acceptance**: Feature-gated behind `--experimental-history` or a config flag. Samples last N commits, extracts patterns, injects as additional context in the LLM prompt. Does not override conventional commits structure — only influences scope naming and subject phrasing style.
379
+
-**What**: Invalid config values only fail at runtime.
380
+
-**Acceptance**:
381
+
-`commitbee config check` validates configuration
382
+
-`ollama_host` parsed as URL during config load
383
+
-`max_diff_lines` bounded (10-10000)
384
+
- Provider enum validated at config time, not runtime
385
+
- Ollama health check (`/api/tags`) available as `commitbee doctor`
386
+
- Config file permission warning if world-readable and contains keys
384
387
385
388
### 4.3 P2 — Next (v0.3.0: Differentiation)
386
389
@@ -447,18 +450,16 @@ These are bugs, panics, and missing foundations that must be fixed before any ne
447
450
-**What**: No visual feedback during tree-sitter analysis or LLM model loading.
448
451
-**Acceptance**: Spinner during "Analyzing code..." and "Generating message..." phases using `indicatif`. Suppressed in non-TTY mode. Respects `NO_COLOR`.
-**What**: Invalid config values only fail at runtime.
455
+
-**What**: Full compliance with the Conventional Commits 1.0.0 specification for breaking changes and type list integrity.
453
456
-**Acceptance**:
454
-
-`commitbee config check` validates configuration
455
-
-`ollama_host` parsed as URL during config load
456
-
-`max_diff_lines` bounded (10-10000)
457
-
- Provider enum validated at config time, not runtime
458
-
- Ollama health check (`/api/tags`) available as `commitbee doctor`
459
-
- Config file permission warning if world-readable and contains keys
460
-
461
-
**Note**: FR-039 should be prioritized early in v0.3.0 development, as config validation underpins reliable behavior for all other P1 features.
457
+
- Breaking changes emit `!` suffix on the commit first line (e.g., `feat!: remove v1 API`)
458
+
-`BREAKING CHANGE:` footer always emitted for breaking changes regardless of `include_body` config (it is machine-readable metadata, not prose)
459
+
- Footer wrapped at 72 chars with continuation lines indented two spaces (git-trailer compatible)
460
+
- Single shared `SYSTEM_PROMPT` constant in `llm/mod.rs` used by all providers; commit type list kept in sync with `CommitType::ALL` via compile-time test
461
+
- Sanitizer normalizes string literal `"null"` → non-breaking (defensive handling for model template quirk)
462
+
- Symbol deduplication in context builder: functions modified in-place no longer appear as both Added and Removed, preventing misleading LLM context
462
463
463
464
### 4.4 P3 — Future (v0.4.0+: Market Leadership)
464
465
@@ -510,10 +511,12 @@ These are bugs, panics, and missing foundations that must be fixed before any ne
#### FR-058: Commit History Style Learning (Experimental)
514
515
515
-
- **What**: Analyze existing commit history to match the project's commit style.
516
-
- **Rationale**: GitHub Copilot does this. Would allow commitbee to adapt to any project's conventions.
516
+
- **What**: Analyze existing commit history in the repository to learn the project's commit style, then align generated messages accordingly. This includes scope naming conventions, type usage patterns, subject phrasing style, and body conventions.
517
+
- **Status**: Planned (experimental — may diverge from strict Conventional Commits compliance)
518
+
- **Rationale**: GitHub Copilot does this implicitly. Making it explicit and configurable would be a differentiator. However, blindly mimicking a repository's history could produce non-compliant messages if the history is inconsistent.
519
+
- **Acceptance**: Feature-gated behind `--experimental-history` or a config flag. Samples last N commits, extracts patterns, injects as additional context in the LLM prompt. Does not override conventional commits structure — only influences scope naming and subject phrasing style.
517
520
518
521
## 5. Security Requirements
519
522
@@ -883,15 +886,15 @@ opt-level = "z" # or "s" — benchmark both
883
886
- FR-020: Async git operations ✅
884
887
- FR-021: Single-pass diff parsing ✅
885
888
- FR-022: Integration test suite ✅ (133 tests)
886
-
- Conventional Commits 1.0.0 spec anchoring: `!` suffix for breaking changes, `BREAKING CHANGE:` footer (emitted regardless of `include_body`), commit type list synced with `CommitType::ALL` via compile-time test ✅
887
889
- FR-023: Commit splitting ✅
888
-
- FR-039: Config validation & doctor command ✅
890
+
- FR-039: Config validation & doctor command ✅ (shipped in v0.2.0)
889
891
- TR-005: CI pipeline ✅
890
892
891
893
### Phase 2: Differentiation (v0.3.0)
892
894
893
895
**Goal**: Features that set commitbee apart from competitors.
0 commit comments