Shift-punctuation (?!:) dispatched its CDP key events without the Shift
modifier, so the DOM reported shiftKey=false while Shift was held — differing
from a real capture. Pass modifiers=8 on every event dispatched while Shift is
down (Shift keydown, the Process keydown, and the keyups that precede the Shift
keyup), and 0 at/after the Shift keyup, for both release orders.
Python (sync+async) + JS (Playwright+Puppeteer), tests added, verified live.