6.3 KiB
Commit Message Style Guide for tractor
Analysis based on 500 recent commits from the tractor repository.
Core Principles
Write commit messages that are technically precise yet casual in tone. Use abbreviations and informal language while maintaining clarity about what changed and why.
Subject Line Format
Length and Structure
- Target: ~49 chars (avg: 48.7, max: 50 preferred)
- Use backticks around code elements (72.2% of commits)
- Rarely use colons (5.2%), except for file prefixes
- End with ‘?’ for uncertain changes (rare: 0.8%)
- End with ‘!’ for important changes (rare: 2.0%)
Opening Verbs (Present Tense)
Most common verbs from analysis: - Add (14.4%) - wholly new features/functionality - Use (4.4%) - adopt new approach/tool - Drop (3.6%) - remove code/feature - Fix (2.4%) - bug fixes - Move/Mv (3.6%) - relocate code - Adjust (2.0%) - minor tweaks - Update (1.6%) - enhance existing feature - Bump (1.2%) - dependency updates - Rename (1.2%) - identifier changes - Set (1.2%) - configuration changes - Handle (1.0%) - add handling logic - Raise (1.0%) - add error raising - Pass (0.8%) - pass parameters/values - Support (0.8%) - add support for something - Hide (1.4%) - make private/internal - Always (1.4%) - enforce consistent behavior - Mk (1.4%) - make/create (abbreviated) - Start (1.0%) - begin implementation
Other frequent verbs: More, Change, Extend, Disable, Log, Enable, Ensure, Expose, Allow
Backtick Usage
Always use backticks for: - Module names: trio, asyncio, msgspec, greenback, stackscope - Class names: Context, Actor, Address, PldRx, SpawnSpec - Method names: .pause_from_sync(), ._pause(), .cancel() - Function names: breakpoint(), collapse_eg(), open_root_actor() - Decorators: @acm, @context - Exceptions: Cancelled, TransportClosed, MsgTypeError - Keywords: finally, None, False - Variable names: tn, debug_mode - Complex expressions: trio.Cancelled, asyncio.Task
Most backticked terms in tractor: trio, asyncio, Context, .pause_from_sync(), tn, ._pause(), breakpoint(), collapse_eg(), Actor, @acm, .cancel(), Cancelled, open_root_actor(), greenback
Examples
Good subject lines:
Add `uds` to `._multiaddr`, tweak typing
Drop `DebugStatus.shield` attr, add `.req_finished`
Use `stackscope` for all actor-tree rendered "views"
Fix `.to_asyncio` inter-task-cancellation!
Bump `ruff.toml` to target py313
Mv `load_module_from_path()` to new `._code_load` submod
Always use `tuple`-cast for singleton parent addrs
Body Format
General Structure
- 43.2% of commits have no body (simple changes)
- Use blank line after subject
- Max line length: 67 chars
- Use
-bullets for lists (28.0% of commits) - Rarely use
*bullets (2.4%)
Section Markers
Use these markers to organize longer commit bodies: - Also, (most common: 26 occurrences) - Other, (13 occurrences) - Deats, (11 occurrences) - for implementation details - Further, (7 occurrences) - TODO, (3 occurrences) - Impl details, (2 occurrences) - Notes, (1 occurrence)
Common Abbreviations
Use these freely (sorted by frequency): - msg (63) - message - bg (37) - background - ctx (30) - context - impl (27) - implementation - mod (26) - module - obvi (17) - obviously - tn (16) - task name - fn (15) - function - vs (15) - versus - bc (14) - because - var (14) - variable - prolly (9) - probably - ep (6) - entry point - OW (5) - otherwise - rn (4) - right now - sig (4) - signal/signature - deps (3) - dependencies - iface (2) - interface - subproc (2) - subprocess - tho (2) - though - ofc (2) - of course
Tone and Style
- Casual but technical (use
XDfor humor: 23 times) - Use
..for trailing thoughts (108 occurrences) - Use
Woops,to acknowledge mistakes (4 subject lines) - Don’t be afraid to show personality while being precise
Example Bodies
Simple with bullets:
Add `multiaddr` and bump up some deps
Since we're planning to use it for (discovery)
addressing, allowing replacement of the hacky (pretend)
attempt in `tractor._multiaddr` Bp
Also pin some deps,
- make us py312+
- use `pdbp` with my frame indexing fix.
- mv to latest `xonsh` for fancy cmd/suggestion injections.
Bump lock file to match obvi!
With section markers:
Use `stackscope` for all actor-tree rendered "views"
Instead of the (much more) limited and hacky `.devx._code`
impls, move to using the new `.devx._stackscope` API which
wraps the `stackscope` project.
Deats,
- make new `stackscope.extract_stack()` wrapper
- port over frame-descing to `_stackscope.pformat_stack()`
- move `PdbREPL` to use `stackscope` render approach
- update tests for new stack output format
Also,
- tweak log formatting for consistency
- add typing hints throughout
Special Patterns
WIP Commits
Rare (0.2%) - avoid committing WIP if possible
Merge Commits
Auto-generated (4.4%), don’t worry about style
File References
- Use
module.pyor.submodulestyle - Rarely use
file.py:linereferences (0 in analysis)
Links
- GitHub links used sparingly (3 total)
- Prefer code references over external links
Footer
The default footer should credit claude (you) for helping generate the commit msg content:
(this commit msg was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code
Further, if the patch was solely or in part written by claude, instead add:
(this patch was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code
Summary Checklist
Before committing, verify: - [ ] Subject line uses present tense verb - [ ] Subject line ~50 chars (hard max 67) - [ ] Code elements wrapped in backticks - [ ] Body lines ≤67 chars - [ ] Abbreviations used where natural - [ ] Casual yet precise tone - [ ] Section markers if body >3 paragraphs - [ ] Technical accuracy maintained
Analysis Metadata
Source: tractor repository
Commits analyzed: 500
Date range: 2019-2025
Analysis date: 2026-02-08
(this style guide was generated by claude-code analyzing commit history)