# menu + permissions ✔ menu shows 3 types ✔ non-senior denied ✔ non-senior cannot start via direct callback ✔ bonus menu has grant button ✔ main panel has grant button # input validation ✔ rejected: non-numeric ✔ rejected: below $1 ✔ rejected: negative ✔ rejected: zero days ✔ rejected: bad days ✔ rejected: bad lots ✔ rejected: too many ✔ rejected: too big # half-finished input never leaks ✔ grant input state is set ✔ navigating away clears the pending input state ✔ same for limit input # FREE grant, any amount, no referrals needed (global mode is paid) ✔ confirmation shows amount/days/lots, nothing activated yet ✔ ...no cycle before confirm ✔ cycle active, mode free, credit 123456 cents, 0.5 lot cap ✔ ends in ~20 days ✔ bonus account credited exactly ✔ user real balance untouched (no fee) ✔ marked as admin-granted ✔ does NOT use up user free-cycle allowance ✔ user notified with credit & days ✔ admin sees success + audit ✔ double-click: expired msg, still ONE cycle # active cycle blocks a second grant ✔ ALREADY_ACTIVE message, no extra cycle ✔ menu still shows end buttons for granted cycle ✔ bonus menu labels the cycle type + admin grant # settle the granted cycle (profit flows normally) ✔ settled: profit 5000 credited, mode reported free # PAID without fee ✔ mode paid, deposit 0, no lot cap, balance untouched # PAID with fee deducted ✔ fee deducted from user account # PAID + fee but user broke → clear error, nothing created ✔ insufficient balance message + no cycle ✔ same broke user can still get PAID-no-fee grant # restrictions & pending request ✔ nobonus flag blocks grant with clear message ✔ menu warns about nobonus flag ✔ menu mentions pending request ✔ pending request auto-cancelled + grant done # free allowance not consumed by grants; normal path still gated ✔ free cycles used by user still 0 after several free grants ✔ normal (non-grant) free activation still needs referrals result: 41 passed, 0 failed