Tests are a vulcan_logic_test CPT. Authoring happens in a custom admin screen rather than the block editor – it’s easier when you’ve got a fixed schema like multi-choice questions with explanations.
Each question is a meta entry – prompt, four answers, correct-index, explanation. A small jQuery layer lets editors add, remove and reorder questions inline. Nothing fancy but it works.
Each test carries its own pass score, optional time limit, and three flags – shuffle questions, shuffle answers, reveal explanations after submit. The answer shuffle is the one to watch tbh – if you just shuffle the answers array you lose the correct-index. So it tracks the correct string before shuffling and resolves the new index after. Trivial once you spot it.
Frontend runner shows one question at a time with an LCARS-style progress bar of segments. Submit is local, no server roundtrip – score and pass-state come out instantly and the explanations reveal if the test has them enabled.