Conventional Commits
Format
<type>(<scope>): <description>
← blank line
<body>
- type: required, lowercase
- scope: optional, in parentheses, lowercase
- description: required, lowercase start, imperative mood, no period
- body: optional, separated by blank line, free-form with bullet lists
Types
| Type |
When to use |
feat |
New compiler pass, HIR type, lint rule, or feature |
fix |
Bug fix |
chore |
Tooling, config, deps, no production code change |
docs |
Documentation only |
refactor |
Code change that neither fixes a bug nor adds a feature |
deps |
Dependency additions or updates |
test |
Adding or updating tests |
ci |
CI/CD pipeline changes |
perf |
Performance improvement |
style |
Formatting, whitespace (no logic change) |
Scope
Derive from the primary area of change:
- HIR:
hir, build-hir, environment, globals, object-shape
- SSA:
ssa
- Optimization:
optimization, const-prop, dce, inline-iife
- Inference:
inference, infer-types, mutation-analysis, aliasing
- Reactive Scopes:
reactive-scopes, scope-inference, scope-alignment, codegen
- Validation:
validation, hooks, refs, effects
- Pipeline:
pipeline, program, options
- Lint:
lint, lint-rules
- NAPI/Plugin:
napi, vite-plugin
- Utils:
disjoint-set, utils
- Omit scope for broad cross-cutting changes
Rules
- Use imperative mood: "add feature" not "added feature" or "adds feature"
- Keep the first line under 72 characters
- Start description lowercase
- No trailing period
- One commit per logical change — don't mix unrelated changes
Examples
One-liners (small, focused changes)
feat(hir): add InstructionValue enum with 40 variants
fix(ssa): handle redundant phi elimination for loop headers
chore(deps): update oxc crates to 0.50
feat(validation): implement validate_hooks_usage pass
With body (multi-file or multi-step changes)
feat(inference): implement infer_mutation_aliasing_effects pass
- Build abstract heap model with pointer graph and ValueKind per value
- Fixpoint iteration to propagate effects through aliases
- Compute candidate effects based on instruction kind and operand types
- Record final AliasingEffect annotations on each instruction
feat(reactive-scopes): implement scope inference and alignment
- DisjointSet-based scope grouping in infer_reactive_scope_variables
- Align scopes to block boundaries
- Merge overlapping scopes with shared reactive operands
- Build reactive scope terminals for codegen
feat(build-hir): implement OXC AST to HIR lowering
- Walk oxc_ast Statement/Expression nodes
- Flatten nested expressions into temporaries with Places
- Convert control flow to explicit BasicBlock edges
- Handle JSX, hooks, destructuring, and closures
Body style guidelines
- Use bullet lists (
-) for discrete changes
- Use prose paragraphs for narrative summaries of larger features
- Group related bullets under subheadings when mixing concerns (e.g. "Fixes:")
- Keep body lines under 72 characters
1---2name: commit-643description: Conventional commit message formatting. Use when creating git commits to ensure messages follow the project's conventional commit style with proper type, scope, and description.4---5
6# Conventional Commits
7
8## Format
9
10```
11<type>(<scope>): <description>
12 ← blank line
13<body>
14```
15
16- **type**: required, lowercase
17- **scope**: optional, in parentheses, lowercase
18- **description**: required, lowercase start, imperative mood, no period
19- **body**: optional, separated by blank line, free-form with bullet lists
20
21## Types
22
23| Type | When to use |
24| ---------- | ------------------------------------------------------- |
25| `feat` | New compiler pass, HIR type, lint rule, or feature |
26| `fix` | Bug fix |
27| `chore` | Tooling, config, deps, no production code change |
28| `docs` | Documentation only |
29| `refactor` | Code change that neither fixes a bug nor adds a feature |
30| `deps` | Dependency additions or updates |
31| `test` | Adding or updating tests |
32| `ci` | CI/CD pipeline changes |
33| `perf` | Performance improvement |
34| `style` | Formatting, whitespace (no logic change) |
35
36## Scope
37
38Derive from the primary area of change:
39
40- **HIR**: `hir`, `build-hir`, `environment`, `globals`, `object-shape`
41- **SSA**: `ssa`
42- **Optimization**: `optimization`, `const-prop`, `dce`, `inline-iife`
43- **Inference**: `inference`, `infer-types`, `mutation-analysis`, `aliasing`
44- **Reactive Scopes**: `reactive-scopes`, `scope-inference`, `scope-alignment`, `codegen`
45- **Validation**: `validation`, `hooks`, `refs`, `effects`
46- **Pipeline**: `pipeline`, `program`, `options`
47- **Lint**: `lint`, `lint-rules`
48- **NAPI/Plugin**: `napi`, `vite-plugin`
49- **Utils**: `disjoint-set`, `utils`
50- Omit scope for broad cross-cutting changes
51
52## Rules
53
541. Use imperative mood: "add feature" not "added feature" or "adds feature"
552. Keep the first line under 72 characters
563. Start description lowercase
574. No trailing period
585. One commit per logical change — don't mix unrelated changes
59
60## Examples
61
62### One-liners (small, focused changes)
63
64```
65feat(hir): add InstructionValue enum with 40 variants
66fix(ssa): handle redundant phi elimination for loop headers
67chore(deps): update oxc crates to 0.50
68feat(validation): implement validate_hooks_usage pass
69```
70
71### With body (multi-file or multi-step changes)
72
73```
74feat(inference): implement infer_mutation_aliasing_effects pass
75
76- Build abstract heap model with pointer graph and ValueKind per value
77- Fixpoint iteration to propagate effects through aliases
78- Compute candidate effects based on instruction kind and operand types
79- Record final AliasingEffect annotations on each instruction
80```
81
82```
83feat(reactive-scopes): implement scope inference and alignment
84
85- DisjointSet-based scope grouping in infer_reactive_scope_variables
86- Align scopes to block boundaries
87- Merge overlapping scopes with shared reactive operands
88- Build reactive scope terminals for codegen
89```
90
91```
92feat(build-hir): implement OXC AST to HIR lowering
93
94- Walk oxc_ast Statement/Expression nodes
95- Flatten nested expressions into temporaries with Places
96- Convert control flow to explicit BasicBlock edges
97- Handle JSX, hooks, destructuring, and closures
98```
99
100### Body style guidelines
101
102- Use bullet lists (`-`) for discrete changes
103- Use prose paragraphs for narrative summaries of larger features
104- Group related bullets under subheadings when mixing concerns (e.g. "Fixes:")
105- Keep body lines under 72 characters