The table of dirty states is really useful, especially the edited .gitignore row. I'd have guessed that one slips through, and it's a nice catch that the README's own setup step trips the first review. Did you consider git status --porcelain=v2 instead, or is v1 enough for what you need? I've found v2 handy when I want to tell staged and unstaged changes apart in a script.