My first open source PR got merged (and the robots almost beat me to it)

A few days ago my first open source pull request got merged into SQLFluff, the SQL linter. The change itself is tiny. What I learned getting it there is not, so here’s the checkpoint.

The bug

SQLFluff was treating EXTENDED as a reserved keyword in the Athena dialect. It is reserved in Athena’s DDL statements, but not in SELECT statements. The practical consequence: name a CTE extended and SQLFluff refuses to parse your file with an “unparsable section” error, even though Athena runs it fine.

The fix is one line of substance: move EXTENDED from the reserved keyword list to the unreserved one, plus a test fixture with a CTE named extended to prove it parses.

The part that actually took time

Writing the fix took minutes. Everything around it took days, and that was the real lesson. Reading the contribution guidelines. Understanding how dialect test fixtures work and how the .yml files get generated. Getting the test suite running locally. Writing a PR description that explains the why with a link to the Athena docs, not just the what. Then waiting on CI and review like everyone else.

None of this is hard individually. But as a first timer, the workflow is the skill. Now that I’ve been through it once, the barrier to contribution number two is basically gone.

The robots are here

The uncomfortable discovery: while looking for issues to work on, I kept finding fresh ones that already had AI agents commenting or opening PRs within hours. The classic advice, “grab a good first issue,” is quietly dying, because the easy, well specified issues are exactly what AI handles best. A human beginner is now racing bots to them.

My conclusion isn’t to give up, it’s to change where I hunt. The contributions that stay valuable are the ones that start from a problem you hit yourself, in tools you actually use, where judgment about the domain matters more than typing speed. I found this bug because I live in SQL all day at work. An agent scanning an issue tracker doesn’t have that.

What’s next

More contributions, but sourced from my own daily friction rather than issue labels. If I hit something broken in the tools I use, that’s the queue now.