Moko Consulting

Open-source software for Joomla, Gitea, and web platforms. Home of MokoSuite, MokoGitea, and MokoCLI.

Tennessee
contributing/commit-conventions.-

Commit Conventions

Commit message format for all MokoConsulting repositories.

Format

type: short description

Optional longer body explaining WHY, not what.
Reference issues with #123.

Types

Type Purpose Example
feat New feature feat: add S3 remote storage support
fix Bug fix fix: prevent duplicate backup records on timeout
docs Documentation only docs: update REST API examples in wiki
refactor Code change that doesn't fix a bug or add a feature refactor: extract archive creation into separate class
test Adding or updating tests test: add integration tests for profile import
chore Maintenance, dependencies, tooling chore: update composer dependencies
ci CI/CD changes ci: add phpstan to validation workflow
style Code style (formatting, missing semicolons, etc.) style: fix phpcs whitespace violations
perf Performance improvement perf: batch database inserts for large backups
security Security fix security: sanitize file path input in restore endpoint

Rules

  1. Lowercase after the type prefix: feat: add widget not feat: Add Widget
  2. Imperative mood: "add feature" not "added feature" or "adds feature"
  3. No period at the end of the subject line
  4. 50 characters soft limit for subject line, 72 hard limit
  5. Blank line between subject and body
  6. Body explains WHY — the diff shows what changed; the message explains the reason

Referencing Issues

Link to Gitea issues in the commit body:

fix: handle empty config gracefully on first install

The installer was crashing when no default profile existed because
the config JSON was null instead of an empty object.

Fixes #42

Attribution

  • No Co-Authored-By trailers — all work is the committer's
  • No AI attribution in commits or source files

CHANGELOG.md

Update CHANGELOG.md as work progresses — don't batch changelog updates at release time:

## [Unreleased]

### Added
- S3 remote storage support for backup profiles

### Fixed
- Duplicate backup records created on request timeout (#42)

Multi-line Commits

When committing from the command line, use a heredoc for proper formatting:

git commit -m "$(cat <<'EOF'
feat: add differential backup support

Compares file checksums against the most recent full backup manifest
to create incremental archives containing only changed files.

Closes #55
EOF
)"