Page chrome: #brand-home and #nav-hub are always present — both are same-origin links to /. Bot click → URL change → PASS.
AJAX validation — errors under inputs
Page role: fetch submit always returns HTTP 422 with a per-field errors map. JS writes each message into <span class="field-error"> under the matching input.
Bot scoring: page text changes when error spans fill → usually PASS* (observable effect), even though UX is validation failure.