Read the local development guide on how to set up your environment.
To ensure a transparent and trustworthy environment, we have established different guidelines for members of our organization and external contributors.
- Real Names Required: Members must use their full real name in their GitHub profile to ensure accountability.
- Profile Picture: Members must upload an authentic, professional profile picture. Comic-style images or avatars are not permitted.
- Internal Workflow: Members should create branches and pull requests directly within the repository.
- Identity Verification: Contributions are only accepted from users with real names and authentic profile pictures.
- Forking: Fork the repository and work on changes in your own branch.
- Pull Request: Submit a PR from your fork. Ensure your branch is up to date with
main.
Contributions that do not adhere to these guidelines will be rejected. We align with GitHub Acceptable Use Policies.
- External contributors only: Fork the Repository and create a branch.
- Create a feature branch: Work on your changes in a separate branch.
- Follow pull request title guidelines: Ensure your PR title follows the Conventional Commits specification.
- Submit a pull request: Once your work is complete, submit a pull request for review.
We use automated semantic pull request validation to ensure consistent and meaningful commit history. Your pull request titles must follow the Conventional Commits specification.
<type>[optional scope]: <description>
We use Semantic Release to automatically version and release our application based on commit messages.
❌ Will NOT Trigger Release (Scope Overrides):
| Pattern | Example | Why |
|---|---|---|
*(ci): |
fix(ci): update workflow |
CI/GitHub Actions only |
*(config): |
chore(config): update renovate.json |
TOOLING only (see warning below) |
*(deps-dev): |
chore(deps-dev): update test lib |
Dev dependencies only |
*(scripts): |
fix(scripts): fix build script |
Build/dev scripts only |
*(no-release): |
feat(no-release): internal feature |
Explicit opt-out |
⚠️ configscope warning: Only use for tooling config files like.prettierrc,renovate.json,eslint.config.js. Do NOT use for:
- Runtime config (
application.yml) → useserver- Dockerfiles → use service scope (
webapp,server, etc.)- Production compose files → use
docker
✅ WILL Trigger Release:
| Type | Version | Example |
|---|---|---|
feat: |
Minor | feat(webapp): add dark mode |
fix: |
Patch | fix(api): handle null response |
perf: |
Patch | perf: optimize query |
revert: |
Patch | revert: undo change |
!: |
Major | feat!: new api structure |
❌ Will NOT Trigger Release (Type-Based):
docs:, style:, refactor:, test:, build:, chore:, ci:
fix: A bug fix (triggers patch release)feat: A new feature (triggers minor release)docs: Documentation only changesstyle: Changes that do not affect the meaning of the coderefactor: A code change that neither fixes a bug nor adds a featureperf: A code change that improves performance (triggers patch release)test: Adding missing tests or correcting existing testsbuild: Changes that affect the build system or external dependenciesci: Changes to our CI configuration files and scriptschore: Other changes that don't modify src or test filesrevert: Reverts a previous commit
Service scopes (where the code lives):
webapp: React frontendserver: Java application server (includes the in-process Pi mentor agent)webhooks: Webhook ingestion servicedocs: Documentation
Infrastructure scopes that WILL trigger releases (affect runtime):
deps: Production dependencies (security patches, bug fixes)security: Security fixes are criticaldb: Database migrations affect runtime
Infrastructure scopes that will NOT trigger releases:
ci: CI/CD workflowsconfig: Tooling configuration (renovate, eslint, tsconfig, etc.)deps-dev: Dev dependencies onlydocker: Container dev configurationscripts: Helper scriptsno-release: Explicit release prevention
Feature scopes (domain-specific):
gitprovider: Git integration moduleleaderboard: Leaderboard and rankingsmentor: AI mentor (Heph)notifications: Email/notification systemprofile: User profilesteams: Team competitionsworkspace: Workspace management
Valid pull request titles:
fix(profile): correct avatar upload logicfeat(leaderboard): add sorting functionalityfeat(mentor): add conversation historyfeat(server): add user profile endpointdocs: update installation instructionsrefactor(ai): improve code analysis performancefix(deps): update vulnerable dependency(triggers patch release)fix(security): patch authentication bypass(triggers patch release)fix(db): add missing index for performance(triggers patch release)chore(deps-dev): update test dependencies(no release)
Draft Pull Requests:
If your pull request is still in progress, please open it as a Draft Pull Request. This signals that the work is not yet ready for review without cluttering the title with [WIP].
- Use lowercase for the description
- Don't end the description with a period
- Use the imperative mood in the description (e.g., "add" not "adds" or "added")
- Think of it as completing the sentence: "If applied, this commit will ..."
- ✅ "fix authentication bug" → "If applied, this commit will fix authentication bug"
- ❌ "fixed authentication bug" or "fixes authentication bug"
- Keep the entire title under 72 characters when possible