zorn

zorn

Guarding Against AI Drift: My Automated Elixir Quality Checks

As I’ve leaned into AI code generation on LocalCents, the volume I ship has climbed, and my worry shifted from any single change to the long-term drift toward the median.

My response was to wire up more automated quality checks than I’ve ever run: compile/format hygiene, Credo (with checks from Jump, Oeditus, a bit of ExSlop, plus two project-local ones), Dialyzer, Boundary, Sobelow and the dependency audits, doc and test gates, all bundled into a single mix precommit.

Everything in the post links to how it’s actually wired in the repo, so you can steal whatever you’re missing. Curious what guardrails others here run that I’ve left off my list.

Most Liked

ChaseGilliam

ChaseGilliam

If you’re using dialyxir to run dialyzer, I’d suggest checking out my library assay | Hex which uses incremental PLTs and will run check from a warm cache much faster. We use it precisely to prevent AI drift for cases the new type system still doesn’t catch. You can see a working GHA CI example here bandera/.github/workflows/ci.yml at main · Ch4s3/bandera · GitHub.

Sorry to promote my own thing here, but it has save my team a ton of CI hours.

zorn

zorn

Sounds cool. I’ll check it out.

ChaseGilliam

ChaseGilliam

Let me know if you run into any issues. Note that the PLT file name and path will be different and you can’t reuse a classic PLT, the iPLT references files differently.

Last Post!

abrookewood

abrookewood

Hi Mike,

Just finished reading that and wanted to thank you for posting. It’s really comprehensive (way more than I currently do) and the inclusion of the GitHub Actions was much appreciated.

Where Next?

Popular in Blog Posts Top

Qqwy
Update: How to use the Blogs & Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3271 131117 1222
New
AstonJ
Elixir Blog Posts How to use this section You can post links to your blog posts either in one of the Official Blog Posts threads, or, vi...
New
stryrckt
Support for AlpineJS in LiveView was added in 0.13.3 and it works fabulously. I just wrote a blog article about it and plan another one s...
New
paulanthonywilson
This is an overview of different ways to try and kill an OTP process (in Elixir) and the behaviour to expect when that happens. I know th...
New
mudasobwa
Just blogged on the general approach to creating easily extendable applications with plugin support.
New
brainlid
This post asks if we can remove Alpine from the PETAL stack. Can we do everything we need with just LiveView? Also, let’s explore an area...
New
MarcinKasprowicz
What I genuinely value at my workplace is that I can easily explore new languages through internal mobility. Throughout my career within ...
New

Other popular topics Top

Qqwy
Update: How to use the Blogs & Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3271 131117 1222
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 49266 226
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New

We're in Beta

About us Mission Statement