assert(/TrainingAiSidebar/.test(page)&&/:has-saved-answer="hasSavedAnswer"/.test(page),"generic training page should pass persisted answer state to the AI sidebar");
assert(/form\.value/.test(page)&&/workRows\.value/.test(page)&&/processRows\.value/.test(page),"hasAnyAnswer should inspect all supported answer shapes");
assert(/onMounted\(/.test(component)&&/watch\(\s*\(\)\s*=>\s*props\.taskKey/.test(component),"AI evaluation should load on mount and task changes");
assert(/AI助学/.test(component)&&/AI助评/.test(component),"AI evaluation should offer separate help and assessment controls");
assert(/PROCESSING/.test(component)&&/SUCCEEDED/.test(component),"AI evaluation should surface backend statuses");
assert(/!props\.hasAnyAnswer/.test(component),"AI actions should disable when no answer is available");
assert(/proxy\?\.\$modal\?\.confirm/.test(component),"assessment should request confirmation through the modal proxy");
assert(!/v-html/.test(component),"AI reports must be rendered as interpolated text, never v-html");
assert(/scoreCriteria/.test(component),"assessment should display score criteria");
assert(/hasSavedAnswer/.test(page)&&/:has-saved-answer="hasSavedAnswer"/.test(page),"generic training page should distinguish persisted answers before enabling AI assessment");
assert(/hasSavedAnswer/.test(sidebar),"AI sidebar should accept persisted-answer state");
assert(/!props\.hasSavedAnswer/.test(sidebar),"AI assessment should be disabled until a saved answer exists");
assert(/catch \(error\)/.test(sidebar),"AI sidebar should handle assessment failures without an unhandled rejection");