Files
get-shit-done/CONTRIBUTING.md
Lex Christopherson c313f78f6a docs: add CONTRIBUTING.md with project guidelines
Based on PR #222 by @davesienkowski with minor edits.

Co-Authored-By: davesienkowski <davesienkowski@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 15:02:02 -06:00

7.1 KiB

Contributing to Get Shit Done

No enterprise theater. Ship useful code.


Philosophy

GSD optimizes for solo developer + Claude workflow. The release process follows the same principle: complexity lives in automation, not your workflow.

What this means:

  • No sprint ceremonies or release committees
  • No multi-week stabilization branches
  • Checkpoints before risky changes, not bureaucratic gates
  • Ship when ready, batch when sensible

Branch Strategy

Two branches. That's it.

main ════════════════════════════════════════════►
         ▲         ▲         ▲         ▲
         │         │         │         │
      v1.9.0    v1.9.1    v1.10.0   v2.0.0
         │         │         │
      hotfix   batched    minor
               fixes    features

main

Production. Always installable via npx get-shit-done-cc.

Rule Why
No direct commits Forces checkpoint thinking
PRs required Creates revert points
Must pass CI Catches Windows/path issues

Feature Work

Branch → PR → Merge. No develop branch. No release branches.

# Start work
git checkout -b feat/model-profiles
# or fix/windows-paths
# or docs/checkpoint-examples

# Ship it
git push origin feat/model-profiles
# Open PR, get review, merge

Branch naming:

  • feat/description — New capability
  • fix/description — Bug fix
  • docs/description — Documentation only
  • refactor/description — Internal changes, no behavior change
  • hotfix/version-description — Emergency production fix

When to Branch vs. Direct Commit

Use a branch when:

  • Adding new commands or workflows
  • Changing core behavior (orchestrator, context loading)
  • Touching multiple files
  • You'd want a clean revert point

Direct commit to main (maintainers only):

  • Typo fixes
  • README updates
  • Single-line bug fixes with obvious correctness

Commits

Use conventional commits. Claude already does this.

feat(checkpoints): add rollback capability
fix(install): use absolute paths on Windows (#207)
docs(readme): update installation instructions
refactor(orchestrator): extract context loading
chore: remove old planning files
revert: remove codebase intelligence system

Format: type(scope): description

Type Use
feat New feature
fix Bug fix
docs Documentation
refactor Code change without behavior change
chore Maintenance, dependencies
revert Undoing previous commit

Releases & Tags

Tag Sparingly

Current problem: 131 tags in one month. Too noisy.

New rule: Tag stable milestones, not every commit.

Change Type Tag? Version Bump
Breaking change Yes MAJOR (2.0.0)
New feature Yes MINOR (1.10.0)
Bug fix Batch PATCH (1.9.x)
Documentation No
Refactor No

Version Cadence

  • Minor releases (1.X.0): When features are ready. No fixed schedule.
  • Patch releases (1.9.X): Batch fixes weekly, or immediately for critical bugs.
  • Major releases (X.0.0): Breaking changes only. Rare.

Pre-release Tags for Risky Features

The codebase intelligence system added 3,065 lines and a 21MB dependency. It got reverted. Pre-release tags prevent this:

# Experimental feature
git tag -a v1.10.0-alpha.1 -m "Alpha: experimental codebase intelligence"

# After testing
git tag -a v1.10.0-beta.1 -m "Beta: codebase intelligence stabilized"

# Ready for production
git tag -a v1.10.0 -m "Release: codebase intelligence"

Users opt-in: npm install get-shit-done-cc@1.10.0-alpha.1

If it doesn't work out: Delete pre-release tags, no messy public revert on main.

Creating a Release

# Update version
npm version minor  # or patch, or major

# Update CHANGELOG.md (already follows Keep a Changelog format)

# Commit
git add package.json CHANGELOG.md
git commit -m "chore: release v1.10.0"

# Tag
git tag -a v1.10.0 -m "Release v1.10.0"
git push origin main --tags

# Publish
npm publish

GitHub Releases

Create formal releases for minor+ versions. Copy the CHANGELOG section.

Go to: github.com/glittercowboy/get-shit-done/releases/new
Select tag: v1.10.0
Title: v1.10.0
Description: [paste from CHANGELOG.md]

Large Changes

If a feature touches >500 lines or adds dependencies, use a branch and PR. This creates a review point before the change lands on main.


Hotfixes

Production broken? Skip the normal flow.

# Branch from main
git checkout main
git checkout -b hotfix/1.9.4-windows-crash

# Fix it
# ... make changes ...

# Ship immediately
git commit -m "fix(install): handle Windows UNC paths"
git push origin hotfix/1.9.4-windows-crash

# PR → merge → tag
npm version patch
git tag -a v1.9.5 -m "Hotfix: Windows UNC paths"
git push origin main --tags
npm publish

Pull Request Guidelines

Title

Use conventional commit format:

feat(checkpoints): add rollback capability
fix(install): use absolute paths on Windows

Description

## What

[One sentence: what does this PR do?]

## Why

[One sentence: why is this change needed?]

## Testing

[How did you verify it works?]

## Breaking Changes

[List any, or "None"]

Review Checklist

  • Follows GSD style (no enterprise patterns, no filler)
  • Updates CHANGELOG.md for user-facing changes
  • Doesn't add unnecessary dependencies
  • Works on Windows (test paths with backslashes)

What NOT to Do

Borrowed from GSD-STYLE.md:

Enterprise Patterns (Banned):

  • Story points
  • Sprint ceremonies
  • RACI matrices
  • Release committees
  • Multi-week stabilization branches
  • Change advisory boards

Temporal Language (Banned in Code/Docs):

  • "We changed X to Y"
  • "Previously"
  • "No longer"
  • "Instead of"

Exception: CHANGELOG.md, MIGRATION.md, git commits

Vague Contributions (Banned):

# BAD
"Improve performance"
"Fix bugs"
"Update documentation"

# GOOD
"Reduce orchestrator context load from 12KB to 4KB"
"Fix Windows path handling in hook commands (#207)"
"Add checkpoint rollback examples to README"

Quick Reference

I want to... Do this
Add a feature Branch feat/x → PR → merge
Fix a bug Branch fix/x → PR → merge
Fix production NOW Branch hotfix/version-x → PR → merge → tag
Release features npm version minor → tag → publish
Release fixes Batch weekly, or npm version patch for critical
Try experimental feature Tag as v1.X.0-alpha.1
Revert a mistake git revert → PR → merge

Setting Up Development

# Clone
git clone https://github.com/glittercowboy/get-shit-done.git
cd get-shit-done

# Install
npm install

# Test locally
npm link
npx get-shit-done-cc

# Run tests
npm test

Getting Help

  • Issues: Bug reports, feature requests
  • Discussions: Questions, ideas, show & tell
  • Discord: [Link if exists]

"The complexity is in the system, not in your workflow."

— TÂCHES