# Commit Message Conventions Agrarian uses concise, plain-English commit messages that describe the user or project-visible change. The goal is a history that can be read quickly during debugging, investor build preparation, release notes, and handoff work. ## Format Use a short imperative subject line: ```text Verb object or outcome ``` Examples: ```text Add water source interaction Fix inventory persistence after reload Document repository storage policy Update Ground Zero foliage placement Prepare investor demo packaging notes ``` Keep the subject line specific enough to identify the change without opening the diff. ## Rules - Use present-tense imperative verbs such as `Add`, `Fix`, `Update`, `Document`, `Remove`, `Rename`, `Prepare`, `Verify`, or `Refactor`. - Keep the first line under 72 characters when reasonable. - Capitalize the first word. - Do not end the subject with a period. - Prefer one commit per roadmap item or tight implementation slice. - Mention the system or asset affected when it helps future searches. - Add a body when the reason, tradeoff, validation, or operational impact is not obvious from the subject. - Do not include secrets, passwords, tokens, private keys, or credentials in commit messages. ## Recommended Body Use a body for changes that affect builds, operations, storage policy, networking, tile delivery, save compatibility, or player-visible behavior. Useful body structure: ```text Why: - Short reason for the change. Validation: - Command, editor check, packaged build, or manual test performed. ``` Example: ```text Add Ground Zero tile manifest prototype Why: - Proves the first server-delivered terrain package path before large-scale tile generation exists. Validation: - Ran tile manifest generator. - Verified manifest references the Ground Zero tile package. ``` ## Commit Types By Area Commit subjects do not require prefixes, but these verbs should be consistent: - `Add` for new gameplay, tools, docs, assets, or systems. - `Fix` for behavior that was wrong or broken. - `Update` for expected changes to existing behavior or content. - `Document` for docs-only changes. - `Prepare` for build, release, investor demo, or operational setup work. - `Verify` for test-only or validation-only changes. - `Remove` for intentional deletion. - `Refactor` only when behavior should not change. ## Avoid - Vague messages like `updates`, `misc`, `changes`, `work`, or `wip`. - Personal notes that do not describe the project change. - Combining unrelated roadmap items into one commit. - Referencing local-only paths or temporary machine details unless the commit is explicitly about development operations. - Large binary/data commits that violate the repository storage policy. ## Multi-Commit Tasks For larger tasks, keep each commit independently understandable. A good series reads like a short story: ```text Add water source actor Place Ground Zero freshwater source Verify Ground Zero water placement Document Ground Zero freshwater source ``` If a task needs cleanup before merge, squash or amend only when it improves history and does not hide useful validation details.