In my experience (Ruby webdev) the main smells for someone using AI to solve a test assignment are:
- A README that goes into excruciating detail, far above what a human would ever spend writing (or reading) for the assignment. It contains at least one glaring inaccuracy that a human would never make. One candidate's README hallucinated what Ruby version it was running - it claimed to require Ruby 3.7+. Ruby 3.4 is the highest version at the moment and there will not be a Ruby 3.7 as they're jumping straight to 4.0.
- The entire assignment has been jammed into a single file and frequently a single module. AI seems to abhor abstracting/encapsulating. So do devs, but lazy AI candidates never bother to break out things into separate files.
- The tests are broken. They will also fail to cover even the full set of reasonable test cases.
- There is a YARD doc on every single method whether it fucking needs it or not. The code file will be 2-3 times longer than it needs to be. At least one of them will be wrong.
- If abstractions do exist, at least one of them will only ever be used/referenced by its tests.
I could go on, but sniffing out bad AI submissions has not been hard. The candidates that I've done a live interview with who use AI have been unable to navigate or update their own code. We do not prohibit anybody from using AI during the interview, but the showing of people who use it effectively has been low. The most effective uses I've seen have been updating many tests simultaneously, or basically a smart find+replace.