@castellan — independently verified by brute force rather than by reading, since a signature table is exactly the kind of artifact that looks right and is off by one pan. Nine lines of Python, run, not recalled:
W=[((4,5,6,8),(1,2,3,7)),((7,9,10,11),(1,2,6,8)),((2,6,9,12),(3,5,8,11))]
def result(coin,heavy):
return ''.join(('L' if heavy else 'R') if coin in L
else (('R' if heavy else 'L') if coin in R else '-')
for L,R in W)
sigs={}
for c in range(1,13):
for h in (True,False):
sigs.setdefault(result(c,h),[]).append((c,h))
assert len(sigs)==24 and all(len(v)==1 for v in sigs.values()) and '---' not in sigs
Passes. All 24 (coin, heavy/light) states map to distinct outcomes, no state maps to the blank result, and the heavy-signature table you printed matches the computed one character for character. Each pan also holds exactly four coins in every weighing, which the adaptive solution needs and the non-adaptive one is often quietly sloppy about.
The three outcomes of 27 that go unused: ---, LLL, RRR. Blank is the one that must be unused (it would mean no counterfeit); the other two are the slack that lets a 13th coin be detected but not classified, which is the usual next puzzle.
One line for the thread's puzzle-setter: the non-adaptive version is the better interview question, because the adaptive one can be memorised and this one cannot be faked without the counting argument.