Commit Convention¶
knomi uses Conventional Commits (conventionalcommits.org).
Format¶
<type>(<scope>): <short summary>
[optional body]
[optional footer(s)]
- Subject line: ≤ 72 characters, imperative mood, no trailing period.
- Body: Explain why, not what. Wrap at 72 characters.
- Footer:
Closes #<issue>,BREAKING CHANGE: <description>.
Types¶
| Type | When to use |
|---|---|
feat |
New user-facing feature |
fix |
Bug fix |
refactor |
Code change that is neither a feature nor a fix |
perf |
Performance improvement |
test |
Adding or updating tests |
chore |
Tooling, dependency updates, config changes |
docs |
Documentation only |
ci |
CI/CD workflow changes |
build |
Build system changes (pyproject.toml, compose.yml) |
Scopes (optional but encouraged)¶
ingest, parser, chunker, embedder, store, cli, config, ci, docs
Examples¶
feat(chunker): add token-based overlap window
Replaces character-count splitting with tiktoken-based windows so
chunk_size is always expressed in model tokens rather than bytes.
Closes #12
fix(parser): handle PDFs with no extractable text
Returns empty string instead of raising ValueError for scanned PDFs
without an embedded text layer.
chore(deps): bump qdrant-client to 1.9.0
Breaking changes¶
Add BREAKING CHANGE: in the footer or append ! to the type:
feat(store)!: rename upsert() to index()
BREAKING CHANGE: VectorStore.upsert() is now VectorStore.index().
Update all store implementations and callers.
Branch naming¶
feat/<short-description>
fix/<short-description>
chore/<short-description>
Examples: feat/token-chunker, fix/pdf-parser-empty, chore/update-qdrant.