No answer is cut any more. browser_read_text stopped at 6000 characters with a line asking for a larger max_chars, browser_evaluate and the browser listing became {"truncated": true, "preview": ...} above the same number, and browser_snapshot dropped elements from the end. max_chars is gone from both tools, with DEFAULT_MAX_CHARS, json_capped and capped_elements; a caller who wants less narrows the selector. The limits clean.py applies to the HTML stay.
browser_read_text right after browser_navigate, on a page that replaces itself, failed with "Failed to find execution context" 9 times in 10: it counted, then evaluated on the first match, and the page moved on between the two. It now finds and reads in one call, with the selector still resolved by the engine.
The floor moves to invisible-playwright 0.35.0 (invisible-core 41.36.0): a read caught by a navigation is made again on the page that took its place, and a navigation the previous page's own redirect beats answers at once, naming where the browser went, instead of after the 45 s timeout. browser_navigate's description says what that answer means.
The docs' tool-cost figures are measured again on 0.72.0 with their own published method: 17 tools, 9,207 characters of description, 3,497 tokens of complete definitions, median 189 per tool.