SQLiteCpp Workflow
Required workflow
For an implementation request, complete the local Git workflow before handing the work back:
- Load
sqlitecpp-git-branching, inspect git status, and create the task branch before editing.
- Implement the change and its tests, public API documentation, and any required build-file updates.
- Build and run the relevant tests.
- Commit the completed work according to the atomic and independent commit rules below.
- Report the branch name, commit hashes, and validation results.
If work was accidentally started on master, create the correctly named branch immediately while
preserving the working tree, then continue the workflow there. Do not leave completed implementation
changes uncommitted unless the user explicitly asks for an uncommitted patch.
Change checklist
CHANGELOG conventions
Update CHANGELOG.md in the same PR that makes the change, but in a separate commit created after
the PR is opened so the PR number is known. Normally add one line per PR under the current unreleased
version heading (Version X.Y.Z - <year> ???). Create that heading if it does not exist yet.
- Append a new bullet at the end of the current unreleased section by default. Do not reorder existing
entries or insert the new entry by category unless there is a clear reason to group related changes.
- Related PRs may be kept together or combined when that makes the history clearer. For example, keep
consecutive updates to the bundled SQLite library together instead of separating them by append order.
- Normally use one bullet per PR:
- <description> (#NNN). Keep all PR numbers at the end when related
PRs share an entry: - <description> (#NNN) (#MMM).
- Write in the imperative mood, present tense: "Add", "Fix", "Update", "Remove". Not "Added",
"Fixes", or "Adding".
- Keep each entry to a single line that names the user-facing effect, not the internal mechanics.
- A change merged straight to master without a PR still gets a bullet; omit the
(#NNN) and note
it was committed directly to master.
- ASCII only, no em dashes. Run the entry through the
humanizer skill before committing so the
prose stays plain and free of AI tells.
Finalizing the version heading and tagging belong to the release process: see
[[sqlitecpp-release]].
Workflow for CHANGELOG updates:
- Commit source code changes (tests, implementation, etc.) in one or more atomic commits
- Push the branch and open the PR to obtain the PR number
- Create a separate final commit adding only the CHANGELOG entry with the PR number
- Push the CHANGELOG commit to the same branch
This keeps commits atomic (CHANGELOG is separate from code) and allows the PR number to be
included in the CHANGELOG entry. Keep the CHANGELOG commit last in the PR history. If review follow-ups
add source, test, or documentation commits after it, reorder the branch before pushing again.
Pull requests
- Open PRs with
gh pr create against master.
- The maintainer wants a short and tight PR description: one or two sentences on what the PR
does and why, plus a brief bullet list only when it genuinely helps review. No filler, no
restating the diff, no marketing. ASCII only, no em dashes; run it through
humanizer if unsure.
Git commits and pushing
- Make commits atomic and independent. Each commit must have exactly one purpose and be reviewable
on its own. Include only the implementation, tests, and documentation required for that purpose.
- Do not mix distinct bug fixes, API additions, refactoring, formatting, workflow changes, or other
unrelated work in one commit. A task containing separable outcomes, such as fixing existing behavior
and adding a new API, requires separate commits.
- CHANGELOG.md updates must be in a separate final commit from source code changes, created after the
PR is opened so the PR number can be included.
- Each commit must leave the repository in a valid state: it must compile and pass its relevant tests
when checked out at that point in the branch history.
- Before pushing a branch to the remote, ask the user for explicit permission stating the branch name and action (e.g., "Push branch
update-sqlite-3.52.2 to origin?"). Push only after receiving approval.
Add a method
Follow the required workflow above. Include:
- A declaration with Doxygen in
include/SQLiteCpp/<Class>.h.
- The implementation in
src/<Class>.cpp.
- Tests in
tests/<Class>_test.cpp.
Add a class
Follow the required workflow above. Include:
include/SQLiteCpp/NewClass.h, src/NewClass.cpp, and tests/NewClass_test.cpp.
- The new files in
CMakeLists.txt and meson.build.
- The public header in
SQLiteCpp.h when the class is public API.
1---2name: sqlitecpp-workflow3description: SQLiteCpp workflow for branches, implementation, tests, commits, pull requests, and CHANGELOG updates. Use when changing the repository.4---56# SQLiteCpp Workflow78## Required workflow9For an implementation request, complete the local Git workflow before handing the work back:10111. Load `sqlitecpp-git-branching`, inspect `git status`, and create the task branch before editing.122. Implement the change and its tests, public API documentation, and any required build-file updates.133. Build and run the relevant tests.144. Commit the completed work according to the atomic and independent commit rules below.155. Report the branch name, commit hashes, and validation results.1617If work was accidentally started on `master`, create the correctly named branch immediately while18preserving the working tree, then continue the workflow there. Do not leave completed implementation19changes uncommitted unless the user explicitly asks for an uncommitted patch.2021## Change checklist22- [ ] Public API has Doxygen (`@brief`, `@param`, `@return`, `@throw`).23- [ ] Tests added under `tests/`.24- [ ] Build files updated (`CMakeLists.txt`, `meson.build`).25- [ ] `CHANGELOG.md` updated for user-facing changes (in a **separate commit** after opening the PR).2627## CHANGELOG conventions28Update `CHANGELOG.md` in the same PR that makes the change, but **in a separate commit** created after29the PR is opened so the PR number is known. Normally add one line per PR under the current unreleased30version heading (`Version X.Y.Z - <year> ???`). Create that heading if it does not exist yet.3132- Append a new bullet at the end of the current unreleased section by default. Do not reorder existing33 entries or insert the new entry by category unless there is a clear reason to group related changes.34- Related PRs may be kept together or combined when that makes the history clearer. For example, keep35 consecutive updates to the bundled SQLite library together instead of separating them by append order.36- Normally use one bullet per PR: `- <description> (#NNN)`. Keep all PR numbers at the end when related37 PRs share an entry: `- <description> (#NNN) (#MMM)`.38- Write in the imperative mood, present tense: "Add", "Fix", "Update", "Remove". Not "Added",39 "Fixes", or "Adding".40- Keep each entry to a single line that names the user-facing effect, not the internal mechanics.41- A change merged straight to master without a PR still gets a bullet; omit the `(#NNN)` and note42 it was committed directly to master.43- ASCII only, no em dashes. Run the entry through the `humanizer` skill before committing so the44 prose stays plain and free of AI tells.4546Finalizing the version heading and tagging belong to the release process: see47[[sqlitecpp-release]].4849**Workflow for CHANGELOG updates:**501. Commit source code changes (tests, implementation, etc.) in one or more atomic commits512. Push the branch and open the PR to obtain the PR number523. Create a separate final commit adding only the CHANGELOG entry with the PR number534. Push the CHANGELOG commit to the same branch5455This keeps commits atomic (CHANGELOG is separate from code) and allows the PR number to be56included in the CHANGELOG entry. Keep the CHANGELOG commit last in the PR history. If review follow-ups57add source, test, or documentation commits after it, reorder the branch before pushing again.5859## Pull requests60- Open PRs with `gh pr create` against `master`.61- The maintainer wants a **short and tight** PR description: one or two sentences on what the PR62 does and why, plus a brief bullet list only when it genuinely helps review. No filler, no63 restating the diff, no marketing. ASCII only, no em dashes; run it through `humanizer` if unsure.6465## Git commits and pushing66- Make commits **atomic and independent**. Each commit must have exactly one purpose and be reviewable67 on its own. Include only the implementation, tests, and documentation required for that purpose.68- Do not mix distinct bug fixes, API additions, refactoring, formatting, workflow changes, or other69 unrelated work in one commit. A task containing separable outcomes, such as fixing existing behavior70 and adding a new API, requires separate commits.71- **CHANGELOG.md updates must be in a separate final commit** from source code changes, created after the72 PR is opened so the PR number can be included.73- Each commit must leave the repository in a valid state: it must compile and pass its relevant tests74 when checked out at that point in the branch history.75- Before pushing a branch to the remote, **ask the user for explicit permission** stating the branch name and action (e.g., "Push branch `update-sqlite-3.52.2` to origin?"). Push only after receiving approval.7677## Add a method78Follow the required workflow above. Include:7980- A declaration with Doxygen in `include/SQLiteCpp/<Class>.h`.81- The implementation in `src/<Class>.cpp`.82- Tests in `tests/<Class>_test.cpp`.8384## Add a class85Follow the required workflow above. Include:8687- `include/SQLiteCpp/NewClass.h`, `src/NewClass.cpp`, and `tests/NewClass_test.cpp`.88- The new files in `CMakeLists.txt` and `meson.build`.89- The public header in `SQLiteCpp.h` when the class is public API.