Auto ๐ฃ๐๐น๐น ๐ฅ๐ฒ๐พ๐๐ฒ๐๐ ๐ฅ๐ฒ๐๐ถ๐ฒ๐: ๐๐ป๐ฑ๐ฟ๐ผ๐ถ๐ฑ ๐๐ฟ๐ฐ๐ต๐ถ๐๐ฒ๐ฐ๐๐๐ฟ๐ฒ ๐๐๐ฎ๐ฟ๐ฑ๐ฟ๐ฎ๐ถ๐น๐ Incoming
Most "๐๐ ๐ฒ๐ป๐ณ๐ผ๐ฟ๐ฐ๐ฒ๐ ๐๐ผ๐๐ฟ ๐ฎ๐ฟ๐ฐ๐ต๐ถ๐๐ฒ๐ฐ๐๐๐ฟ๐ฒ" claims fall apart under one
question: what happens on a genuine judgment call?
So I split this into two tiers, with two different authorities.
Clean Architecture layer boundaries domain never depends on data or presentation are checked with Konsist and actually fail the build. Not "๐๐ต๐ผ๐๐น๐ฑ ๐ณ๐ฎ๐ถ๐น." I pushed a real violation to prove it: a PR where a presentation class reaches into the data layer directly, and CI rejects it with a precise error naming the file and the illegal import. No LLM in that loop at all
It's a deterministic JUnit assertion, same category as a compiler error.
SOLID principle smells (SRP, OCP, LSP, ISP, DIP) go through a separate LLM pass that comments on a PR with the specific principle and reasoning but the workflow has comment-only permissions, and the reviewer code itself never has a path to block a merge. I tested that too: with no API key configured, it logs a notice and exits clean rather than red-X'ing your build over a missing secret
Being honest about which part is strict and which part is advisory isn't a caveat on this project โ it's the actual design decision, and it's the one most "AI code review" tooling quietly avoids making.