Safina

Commit Convention

All commits at Ilmiya follow conventional commit format with a ticket trailer on the second paragraph.

Format

type(scope): description

Linear: TEAM-NNN     ← Tier 1 (Taha, Adnan — Linear access)
Refs: #NNN           ← Tier 2 (all other devs — GitHub issue)

Types

TypeWhen to use
featNew feature or capability
fixBug fix
choreMaintenance, dependency updates, config changes
docsDocumentation only
refactorCode change that neither fixes a bug nor adds a feature
testAdding or updating tests
perfPerformance improvement
ciCI/CD pipeline changes

Scopes

Match the repo or module the change is in:

ScopeApplies to
apiBackend API monorepo
platformStaff-facing frontend (Studio, Admin, Analytics, Console, People)
myilmiyaStudent-facing app
devopsKubernetes, CI/CD, deployment config
infraThird-party infrastructure, terraform
safinaThis repo

Rules

  • Description: lowercase, imperative mood, under 72 characters
  • No period at the end
  • Blank line between the subject and the ticket trailer
  • One ticket per commit where possible; if a commit spans multiple tickets, list each on its own line

Examples

feat(platform): add course enrollment flow

Linear: ENG-142
fix(api): resolve auth token expiry edge case

Linear: ENG-89
chore(devops): update k8s resource limits for api services

Refs: #47
refactor(myilmiya): extract lesson progress tracking into shared hook

Refs: #103

Why this format

The Linear: and Refs: trailers are machine-readable — they’re how the bidirectional sync between Linear and GitHub knows which commit belongs to which ticket. They also make git log scannable: you can tell at a glance what was being worked on for every commit.