{"id":147,"date":"2026-09-06T10:54:29","date_gmt":"2026-09-06T08:54:29","guid":{"rendered":"https:\/\/www.vondervoort.be\/?p=147"},"modified":"2026-09-06T10:54:30","modified_gmt":"2026-09-06T08:54:30","slug":"alcops-the-story-so-far","status":"publish","type":"post","link":"https:\/\/www.vondervoort.be\/index.php\/2026\/09\/06\/alcops-the-story-so-far\/","title":{"rendered":"ALCops: The Story So Far"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Back in February I published <a href=\"https:\/\/www.vondervoort.be\/index.php\/2026\/02\/23\/alcops-the-next-chapter-of-lintercop\/\" target=\"_blank\" rel=\"noopener\">ALCops: The Next Chapter of LinterCop<\/a>, introducing <a href=\"https:\/\/alcops.dev\" target=\"_blank\" rel=\"noopener\">ALCops<\/a>: a community-driven collection of code analyzers for the AL programming language of Microsoft Dynamics 365 Business Central. That post ended with <em>&#8220;There&#8217;s still work to do. There always is, but the base is here now.&#8221;<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Half a year later, I think it&#8217;s a good moment to look back and a lot has happened. Since February the community merged <strong>over 480 pull requests<\/strong> and closed <strong>more than 120 issues<\/strong> across the ALCops repositories. This isn\u2019t just my work, but an archive we\u2019ve built together with the Business Central community.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">From v0.5 to v1.0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Back in February we where at v0.5.0 and two month ago we&#8217;ve released version <a href=\"https:\/\/github.com\/ALCops\/Analyzers\/releases\" target=\"_blank\" rel=\"noopener\">v1.0.0<\/a>. Hitting v1.0 was nothing about a big feature, but more about confidence; This is the point where I felt comfortable saying: it&#8217;s stable, build your daily workflow on it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A lot of that progress was the unglamorous work: false positives, edge cases, and small correctness fixes reported by people running ALCops on real and large codebases.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The &#8220;Swiss Army Knife&#8221; problem, solved<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In my <a href=\"https:\/\/www.vondervoort.be\/index.php\/2025\/10\/31\/rethinking-lintercop-preparing-for-the-next-chapter\/\" target=\"_blank\" rel=\"noopener\">October post<\/a> I worried about LinterCop becoming one analyzer trying to do everything. That vision of <em>multiple specialized analyzers<\/em> is now reality. ALCops ships as focused cops, each with its own domain: <strong>PlatformCop<\/strong> (language\/runtime correctness), <strong>ApplicationCop<\/strong> (Business Central object modeling), <strong>LinterCop<\/strong> (the classic code smells), <strong>FormattingCop<\/strong> (style and consistency), <strong>DocumentationCop<\/strong> (documentation quality) and <strong>TestAutomationCop<\/strong> (test structure).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Remember the goal to pass <em>&#8220;the magic number of 100 rules&#8221;<\/em>? We&#8217;re now well past <strong>130 documented rules!<\/strong> and you can browser trough them on <a href=\"https:\/\/alcops.dev\/docs\/analyzers\/\" target=\"_blank\" rel=\"noopener\">alcops.dev\/docs\/analyzers<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bringing ALCops to AI agents<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In February I mentioned <a href=\"https:\/\/stefanmaronconsulting.com\" target=\"_blank\" rel=\"noopener\">Stefan Maro\u0144<\/a> was looking into what an ALCops MCP might look like. Well, he didn&#8217;t just look into it, he built the <a href=\"https:\/\/github.com\/ALCops\/mcp-server\" target=\"_blank\" rel=\"noopener\">ALCops MCP server<\/a>. This brings the analyzers to AI assistants like Claude, Codex and Cursor. Instead of AI-generated AL code that <em>looks<\/em> fine but could ignores best practices, an agent can now run the ALCops analyzers and get the same diagnostics you would in your editor.<br><br>It means a lot to me that the original author of BusinessCentral.LinterCop is still involved with ALCops and I think it&#8217;s important that the person who started it all stays part of the journey. Stefan and I had a great chat about this, which you can watch on <a href=\"https:\/\/www.youtube.com\/watch?v=tMqCSibSRug\">ALCops: LinterCop&#8217;s Successor for Business Central AL Code Analysis<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Time to move off BusinessCentral.LinterCop<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As I said mentioned also in February, I don&#8217;t have the time to support and develop both projects at the same time, so <a href=\"https:\/\/github.com\/StefanMaron\/BusinessCentral.LinterCop\" target=\"_blank\" rel=\"noopener\">BusinessCentral.LinterCop<\/a> was being wound down and ALCops is where the active development has moved to.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Recently I added a deprecation notice to the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=StefanMaron.businesscentral-lintercop\" target=\"_blank\" rel=\"noopener\">BusinessCentral.LinterCop VS Code extension<\/a>: <em>&#8220;Deprecated \u2014 action required before October 2026.&#8221;<\/em> and the response was immediate. Installs of the ALCops VS Code extension jumped and have stayed high in the weeks since.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So consider this your nudge: the October deadline is getting close. If you haven&#8217;t switched yet, now is the time. And if something you rely on is still missing in ALCops, I would love to hear about it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Thank you<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">None of this would exist without the people around it. A heartfelt thank you to everyone who sent a pull request, opened an issue, joined a discussion, or tested a pre-release these past months, as well as to everyone who poured years into the original BusinessCentral.LinterCop. ALCops wouldn\u2019t be where it is today without all of that work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There&#8217;s still work to do. There always is. But it&#8217;s genuinely exciting to see how far we&#8217;ve come. If you&#8217;ve got an idea or something that should work differently, open a <a href=\"https:\/\/github.com\/ALCops\/Analyzers\/discussions\">discussion<\/a>, file an <a href=\"https:\/\/github.com\/ALCops\/Analyzers\/issues\">issue<\/a>, or send a pull request.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Back in February I published ALCops: The Next Chapter of LinterCop, introducing ALCops: a community-driven collection of code analyzers for the AL programming language of Microsoft Dynamics 365 Business Central. That post ended with &#8220;There&#8217;s still work to do. There always is, but the base is here now.&#8221; Half a year later, I think it&#8217;s [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-147","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"_links":{"self":[{"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/posts\/147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/comments?post=147"}],"version-history":[{"count":2,"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/posts\/147\/revisions"}],"predecessor-version":[{"id":149,"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/posts\/147\/revisions\/149"}],"wp:attachment":[{"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/media?parent=147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/categories?post=147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vondervoort.be\/index.php\/wp-json\/wp\/v2\/tags?post=147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}